Add window extensions to AOSP cuttlefish foldable target. am: 6901602172

Original change: https://googleplex-android-review.googlesource.com/c/device/google/cuttlefish/+/16586025

Change-Id: I567f632cdc74e30ff12c2543efb3a8c644152242
diff --git a/.clang-format b/.clang-format
index 9f9ffe3..a03f8b3 100644
--- a/.clang-format
+++ b/.clang-format
@@ -19,3 +19,4 @@
 # of the below options.
 
 BasedOnStyle: Google
+IncludeBlocks: Preserve
diff --git a/Android.mk b/Android.mk
index 59e9806..10c9765 100644
--- a/Android.mk
+++ b/Android.mk
@@ -11,7 +11,7 @@
 # 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.
-ifneq ($(filter vsoc_arm64 vsoc_x86 vsoc_x86_64, $(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter vsoc_arm vsoc_arm64 vsoc_x86 vsoc_x86_64, $(TARGET_BOARD_PLATFORM)),)
 LOCAL_PATH:= $(call my-dir)
 
 include $(CLEAR_VARS)
diff --git a/AndroidProducts.mk b/AndroidProducts.mk
index 8d06ed7..c51b1b4 100644
--- a/AndroidProducts.mk
+++ b/AndroidProducts.mk
@@ -18,7 +18,9 @@
 	aosp_cf_arm_only_phone:$(LOCAL_DIR)/vsoc_arm_only/phone/aosp_cf.mk \
 	aosp_cf_arm64_auto:$(LOCAL_DIR)/vsoc_arm64/auto/aosp_cf.mk \
 	aosp_cf_arm64_phone:$(LOCAL_DIR)/vsoc_arm64/phone/aosp_cf.mk \
+	aosp_cf_arm64_phone_hwasan:$(LOCAL_DIR)/vsoc_arm64/phone/aosp_cf_hwasan.mk \
 	aosp_cf_arm64_only_phone:$(LOCAL_DIR)/vsoc_arm64_only/phone/aosp_cf.mk \
+	aosp_cf_arm64_only_phone_hwasan:$(LOCAL_DIR)/vsoc_arm64_only/phone/aosp_cf_hwasan.mk \
 	aosp_cf_x86_64_auto:$(LOCAL_DIR)/vsoc_x86_64/auto/device.mk \
 	aosp_cf_x86_64_pc:$(LOCAL_DIR)/vsoc_x86_64/pc/aosp_cf.mk \
 	aosp_cf_x86_64_phone:$(LOCAL_DIR)/vsoc_x86_64/phone/aosp_cf.mk \
diff --git a/CleanSpec.mk b/CleanSpec.mk
index f235841..6d10d12 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -58,6 +58,9 @@
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/[email protected])
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/[email protected])
 
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/[email protected])
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/[email protected])
+
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/[email protected])
 
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/[email protected])
@@ -68,3 +71,8 @@
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/[email protected])
 
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/product/apex/com.android.gki.*)
+
+$(call add-clean-step, find $(PRODUCT_OUT)/system -type f -name "*charger*" -print0 | xargs -0 rm -f)
+$(call add-clean-step, find $(PRODUCT_OUT)/vendor -type f -name "*health@*" -print0 | xargs -0 rm -f)
+$(call add-clean-step, find $(PRODUCT_OUT)/recovery/root -type f -name "*charger*" -print0 | xargs -0 rm -f)
+$(call add-clean-step, find $(PRODUCT_OUT)/recovery/root -type f -name "*health@*" -print0 | xargs -0 rm -f)
diff --git a/README.md b/README.md
index 2220898..25dd51b 100644
--- a/README.md
+++ b/README.md
@@ -12,15 +12,26 @@
    take cloud-vendor-specific steps to enable. For Google Compute Engine
    specifically, see the [GCE guide].
 
-   [GCE guide]: https://cloud.google.com/compute/docs/instances/enable-nested-virtualization-vm-instances
+  [GCE guide]: https://cloud.google.com/compute/docs/instances/enable-nested-virtualization-vm-instances
+
+*** promo
+   ARM specific steps:
+   - When running on an ARM machine, the most direct way is to check
+   for the existence of `/dev/kvm`. Note that this method can also be used to
+   confirm support of KVM on any environment.
+   - Before proceeding to the next step, please first follow
+   [the guide](multiarch-howto.md) to adjust APT sources.
+***
 
 2. Download, build, and install the host debian package:
 
    ```bash
+   sudo apt install -y git devscripts config-package-dev debhelper-compat golang
    git clone https://github.com/google/android-cuttlefish
    cd android-cuttlefish
    debuild -i -us -uc -b
-   sudo dpkg -i ../cuttlefish-common_*_amd64.deb || sudo apt-get install -f
+   sudo dpkg -i ../cuttlefish-common_*_*64.deb || sudo apt-get install -f
+   sudo usermod -aG kvm,cvdnetwork $USER
    sudo reboot
    ```
 
@@ -67,12 +78,3 @@
 WebRTC on Cuttlefish
 [documentation](https://source.android.com/setup/create/cuttlefish-ref-webrtc).
 
-## Launch Viewer (VNC)
-
-When launching with `--start_vnc_server=true` , You can use the
-[TightVNC JViewer](https://www.tightvnc.com/download.php). Once you have
-downloaded the *TightVNC Java Viewer JAR in a ZIP archive*, run it with
-
-   `$ java -jar tightvnc-jviewer.jar -ScalingFactor=50 -Tunneling=no -host=localhost -port=6444`
-
-Click "Connect" and you should see a lock screen!
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 4067d27..92e1712 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -19,6 +19,15 @@
     },
     {
       "name": "vts_ibase_test"
+    },
+    {
+      "name": "OverlayDeviceTests"
+    },
+    {
+      "name": "CtsNativeVerifiedBootTestCases"
+    },
+    {
+      "name": "CtsScopedStorageDeviceOnlyTest"
     }
   ]
 }
diff --git a/apex/com.android.hardware.core_permissions/Android.bp b/apex/com.android.hardware.core_permissions/Android.bp
new file mode 100644
index 0000000..11e28d7
--- /dev/null
+++ b/apex/com.android.hardware.core_permissions/Android.bp
@@ -0,0 +1,47 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+override_apex {
+    name: "com.google.aosp_cf_x86_64_phone.hardware.core_permissions",
+    base: "com.android.hardware.core_permissions",
+    prebuilts: [
+        "android.hardware.audio.low_latency.prebuilt.xml",
+        "android.hardware.biometrics.face.prebuilt.xml",
+        "android.hardware.camera.concurrent.prebuilt.xml",
+        "android.hardware.camera.flash-autofocus.prebuilt.xml",
+        "android.hardware.camera.front.prebuilt.xml",
+        "android.hardware.camera.full.prebuilt.xml",
+        "android.hardware.camera.raw.prebuilt.xml",
+        "android.hardware.ethernet.prebuilt.xml",
+        "android.hardware.faketouch.prebuilt.xml",
+        "android.hardware.fingerprint.prebuilt.xml",
+        "android.hardware.location.gps.prebuilt.xml",
+        "android.hardware.reboot_escrow.prebuilt.xml",
+        "android.hardware.vulkan.level-0.prebuilt.xml",
+        "android.hardware.vulkan.version-1_0_3.prebuilt.xml",
+        "android.software.device_id_attestation.prebuilt.xml",
+        "android.software.ipsec_tunnels.prebuilt.xml",
+        "android.software.opengles.deqp.level-2021-03-01.prebuilt.xml",
+        "android.software.sip.voip.prebuilt.xml",
+        "android.software.verified_boot.prebuilt.xml",
+        "android.software.vulkan.deqp.level-2021-03-01.prebuilt.xml",
+        "aosp_excluded_hardware.prebuilt.xml",
+        "cuttlefish_excluded_hardware.prebuilt.xml",
+        "handheld_core_hardware.prebuilt.xml",
+    ],
+}
diff --git a/apex/com.google.aosp_cf_x86_64_phone.rros/Android.bp b/apex/com.google.aosp_cf_x86_64_phone.rros/Android.bp
new file mode 100644
index 0000000..e988ecf
--- /dev/null
+++ b/apex/com.google.aosp_cf_x86_64_phone.rros/Android.bp
@@ -0,0 +1,34 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+apex {
+    name: "com.google.aosp_cf_x86_64_phone.rros",
+    manifest: "apex_manifest.json",
+    key: "com.google.cf.apex.key",
+    certificate: ":com.google.cf.apex.certificate",
+    file_contexts: "file_contexts",
+    use_vndk_as_stable: true,
+    updatable: false,
+    // Install the apex in /vendor/apex
+    soc_specific: true,
+    rros: [
+        "cuttlefish_overlay_frameworks_base_core",
+        "cuttlefish_overlay_settings_provider",
+        "cuttlefish_phone_overlay_frameworks_base_core",
+    ],
+}
diff --git a/apex/com.google.aosp_cf_x86_64_phone.rros/apex_manifest.json b/apex/com.google.aosp_cf_x86_64_phone.rros/apex_manifest.json
new file mode 100644
index 0000000..47cefb5
--- /dev/null
+++ b/apex/com.google.aosp_cf_x86_64_phone.rros/apex_manifest.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.google.aosp_cf_x86_64_phone.rros",
+  "version": 1
+}
diff --git a/apex/com.google.aosp_cf_x86_64_phone.rros/file_contexts b/apex/com.google.aosp_cf_x86_64_phone.rros/file_contexts
new file mode 100644
index 0000000..cb7fd8d
--- /dev/null
+++ b/apex/com.google.aosp_cf_x86_64_phone.rros/file_contexts
@@ -0,0 +1,2 @@
+(/.*)?		u:object_r:vendor_file:s0
+/overlay(/.*)?	u:object_r:vendor_overlay_file:s0
diff --git a/apex/com.google.cf.bt/Android.bp b/apex/com.google.cf.bt/Android.bp
new file mode 100644
index 0000000..438db02
--- /dev/null
+++ b/apex/com.google.cf.bt/Android.bp
@@ -0,0 +1,45 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+prebuilt_etc {
+    name: "com.google.cf.bt.rc",
+    src: "com.google.cf.bt.rc",
+    installable: false,
+}
+
+apex {
+    name: "com.google.cf.bt",
+    manifest: "manifest.json",
+    file_contexts: "file_contexts",
+    key: "com.google.cf.apex.key",
+    certificate: ":com.google.cf.apex.certificate",
+    use_vndk_as_stable: true,
+    updatable: false,
+    soc_specific: true,
+    binaries: [
+        "[email protected]",
+        "bt_vhci_forwarder",
+    ],
+    prebuilts: [
+        "android.hardware.bluetooth_le.prebuilt.xml",
+        "android.hardware.bluetooth.prebuilt.xml",
+        "com.google.cf.bt.rc",
+    ],
+    init_rc: ["com.google.cf.bt.trig.rc"],
+    vintf_fragments: [":[email protected]"],
+}
diff --git a/apex/com.google.cf.bt/com.google.cf.bt.rc b/apex/com.google.cf.bt/com.google.cf.bt.rc
new file mode 100644
index 0000000..a5f2ae7
--- /dev/null
+++ b/apex/com.google.cf.bt/com.google.cf.bt.rc
@@ -0,0 +1,9 @@
+service bt_vhci_forwarder /apex/com.google.cf.bt/bin/bt_vhci_forwarder -virtio_console_dev=${vendor.ser.bt-uart}
+    user bluetooth
+    group bluetooth
+
+service btlinux-1.1 /apex/com.google.cf.bt/bin/hw/[email protected]
+    class hal
+    user bluetooth
+    group bluetooth net_admin net_bt_admin
+    capabilities NET_ADMIN
diff --git a/apex/com.google.cf.bt/com.google.cf.bt.trig.rc b/apex/com.google.cf.bt/com.google.cf.bt.trig.rc
new file mode 100644
index 0000000..a082c18
--- /dev/null
+++ b/apex/com.google.cf.bt/com.google.cf.bt.trig.rc
@@ -0,0 +1,6 @@
+## Init files within the APEX do not support triggers (b/202731768)
+## By adding this as an init_rc parameter of the APEX the file will be installed
+## outside of the APEX and instead be installed under /vendor/etc/init.
+on post-fs-data
+    start bt_vhci_forwarder
+
diff --git a/apex/com.google.cf.bt/file_contexts b/apex/com.google.cf.bt/file_contexts
new file mode 100644
index 0000000..b148753
--- /dev/null
+++ b/apex/com.google.cf.bt/file_contexts
@@ -0,0 +1,4 @@
+(/.*)?                                                 u:object_r:vendor_file:s0
+/bin/hw/[email protected] u:object_r:hal_bluetooth_btlinux_exec:s0
+/bin/bt_vhci_forwarder                                 u:object_r:bt_vhci_forwarder_exec:s0
+/etc/permissions(/.*)?                                 u:object_r:vendor_configs_file:s0
\ No newline at end of file
diff --git a/apex/com.google.cf.bt/manifest.json b/apex/com.google.cf.bt/manifest.json
new file mode 100644
index 0000000..0436efe
--- /dev/null
+++ b/apex/com.google.cf.bt/manifest.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.google.cf.bt",
+  "version": 1
+}
diff --git a/apex/com.google.cf.input.config/Android.bp b/apex/com.google.cf.input.config/Android.bp
new file mode 100644
index 0000000..00edee9
--- /dev/null
+++ b/apex/com.google.cf.input.config/Android.bp
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+apex {
+    name: "com.google.cf.input.config",
+    // InputDevice expects input config files in /apex/com.android.input.config/etc
+    apex_name: "com.android.input.config",
+    manifest: "apex_manifest.json",
+    key: "com.google.cf.apex.key",
+    certificate: ":com.google.cf.apex.certificate",
+    file_contexts: "file_contexts",
+    use_vndk_as_stable: true,
+    updatable: false,
+    // Install the apex in /vendor/apex
+    soc_specific: true,
+    prebuilts: [
+        "Crosvm_Virtio_Multitouch_Touchscreen_0.idc",
+        "Crosvm_Virtio_Multitouch_Touchscreen_1.idc",
+        "Crosvm_Virtio_Multitouch_Touchscreen_2.idc",
+        "Crosvm_Virtio_Multitouch_Touchscreen_3.idc",
+    ],
+}
diff --git a/apex/com.google.cf.input.config/apex_manifest.json b/apex/com.google.cf.input.config/apex_manifest.json
new file mode 100644
index 0000000..dce7ad4
--- /dev/null
+++ b/apex/com.google.cf.input.config/apex_manifest.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.android.input.config",
+  "version": 1
+}
diff --git a/apex/com.google.cf.input.config/file_contexts b/apex/com.google.cf.input.config/file_contexts
new file mode 100644
index 0000000..e982bd5
--- /dev/null
+++ b/apex/com.google.cf.input.config/file_contexts
@@ -0,0 +1,4 @@
+(/.*)?                          u:object_r:vendor_file:s0
+/etc/usr/keylayout(/.*)?\.kl    u:object_r:vendor_keylayout_file:s0
+/etc/usr/keychars(/.*)?\.kcm    u:object_r:vendor_keychars_file:s0
+/etc/usr/idc(/.*)?\.idc         u:object_r:vendor_idc_file:s0
diff --git a/apex/com.google.cf.rild/Android.bp b/apex/com.google.cf.rild/Android.bp
new file mode 100644
index 0000000..ecea755
--- /dev/null
+++ b/apex/com.google.cf.rild/Android.bp
@@ -0,0 +1,52 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+prebuilt_etc {
+    name: "com.google.cf.rild.rc",
+    src: "com.google.cf.rild.rc",
+    installable: false,
+}
+
+apex {
+    name: "com.google.cf.rild",
+    manifest: "apex_manifest.json",
+    key: "com.google.cf.apex.key",
+    certificate: ":com.google.cf.apex.certificate",
+    file_contexts: "file_contexts",
+    use_vndk_as_stable: true,
+    updatable: false,
+    // Install the apex in /vendor/apex
+    soc_specific: true,
+    binaries: [
+        "libcuttlefish-rild",
+    ],
+    native_shared_libs: [
+        "libcuttlefish-ril-2",
+    ],
+    prebuilts: [
+        "android.hardware.telephony.gsm.prebuilt.xml",
+        "android.hardware.telephony.ims.prebuilt.xml",
+        "com.google.cf.rild.rc",
+    ],
+    vintf_fragments: [":libril-modem-lib-manifests"],
+    overrides: [
+        "libril",
+        "libreference-ril",
+        "rild",
+    ],
+}
diff --git a/apex/com.google.cf.rild/apex_manifest.json b/apex/com.google.cf.rild/apex_manifest.json
new file mode 100644
index 0000000..c096789
--- /dev/null
+++ b/apex/com.google.cf.rild/apex_manifest.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.google.cf.rild",
+  "version": 1
+}
diff --git a/apex/com.google.cf.rild/com.google.cf.rild.rc b/apex/com.google.cf.rild/com.google.cf.rild.rc
new file mode 100644
index 0000000..ff8b888
--- /dev/null
+++ b/apex/com.google.cf.rild/com.google.cf.rild.rc
@@ -0,0 +1,5 @@
+service vendor.ril-daemon /apex/com.google.cf.rild/bin/hw/libcuttlefish-rild
+    class main
+    user radio
+    group radio inet misc audio log readproc wakelock
+    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
diff --git a/apex/com.google.cf.rild/file_contexts b/apex/com.google.cf.rild/file_contexts
new file mode 100644
index 0000000..fc0d328
--- /dev/null
+++ b/apex/com.google.cf.rild/file_contexts
@@ -0,0 +1,3 @@
+(/.*)?                        u:object_r:vendor_file:s0
+/bin/hw/libcuttlefish-rild    u:object_r:libcuttlefish_rild_exec:s0
+/etc/permissions(/.*)?        u:object_r:vendor_configs_file:s0
diff --git a/apex/com.google.cf.wifi/Android.bp b/apex/com.google.cf.wifi/Android.bp
new file mode 100644
index 0000000..a60f233
--- /dev/null
+++ b/apex/com.google.cf.wifi/Android.bp
@@ -0,0 +1,72 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+prebuilt_etc {
+    name: "com.google.cf.wifi.rc",
+    src: "com.google.cf.wifi.rc",
+    installable: false,
+}
+
+prebuilt_etc {
+    name: "wpa_supplicant.conf.cf",
+    src: ":wpa_supplicant_template.conf",
+    filename: "wpa_supplicant.conf",
+    relative_install_path: "wifi",
+    installable: false,
+}
+
+apex_defaults {
+    name: "com.google.cf.wifi.defaults",
+    // Name expected by wpa_supplicant when it looks for config files.
+    apex_name: "com.android.wifi.hal",
+    manifest: "apex_manifest.json",
+    key: "com.google.cf.apex.key",
+    certificate: ":com.google.cf.apex.certificate",
+    file_contexts: "file_contexts",
+    use_vndk_as_stable: true,
+    updatable: false,
+    // Install the apex in /vendor/apex
+    soc_specific: true,
+    binaries: [
+        "rename_netiface",
+        "setup_wifi",
+        "wpa_supplicant_cf",
+    ],
+    prebuilts: [
+        "android.hardware.wifi.prebuilt.xml",
+        "com.google.cf.wifi.rc",
+        "wpa_supplicant.conf.cf",
+        "wpa_supplicant_overlay.conf.cf",
+    ],
+    // TODO(b/202992812): Use the vintf_fragment from the wpa_supplicant project.
+    vintf_fragments: ["com.google.cf.wifi.xml"],
+}
+
+apex {
+    name: "com.google.cf.wifi",
+    defaults: ["com.google.cf.wifi.defaults"],
+    prebuilts: [
+        "android.hardware.wifi.passpoint.prebuilt.xml",
+    ],
+}
+
+apex {
+    name: "com.google.cf.wifi.no-passpoint",
+    defaults: ["com.google.cf.wifi.defaults"],
+    multi_install_skip_symbol_files: true,
+}
diff --git a/apex/com.google.cf.wifi/apex_manifest.json b/apex/com.google.cf.wifi/apex_manifest.json
new file mode 100644
index 0000000..ffd1a2c
--- /dev/null
+++ b/apex/com.google.cf.wifi/apex_manifest.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.android.wifi.hal",
+  "version": 1
+}
diff --git a/apex/com.google.cf.wifi/com.google.cf.wifi.rc b/apex/com.google.cf.wifi/com.google.cf.wifi.rc
new file mode 100644
index 0000000..87c798c
--- /dev/null
+++ b/apex/com.google.cf.wifi/com.google.cf.wifi.rc
@@ -0,0 +1,16 @@
+service rename_eth0 /apex/com.android.wifi.hal/bin/rename_netiface eth0 rmnet0
+    oneshot
+
+service setup_wifi /apex/com.android.wifi.hal/bin/setup_wifi
+    oneshot
+
+service wpa_supplicant /apex/com.android.wifi.hal/bin/hw/wpa_supplicant_cf -g@android:wpa_wlan0
+    interface [email protected]::ISupplicant default
+    interface [email protected]::ISupplicant default
+    interface [email protected]::ISupplicant default
+    interface [email protected]::ISupplicant default
+    interface [email protected]::ISupplicant default
+    socket wpa_wlan0 dgram 660 wifi wifi
+    group system wifi inet
+    disabled
+    oneshot
diff --git a/apex/com.google.cf.wifi/com.google.cf.wifi.xml b/apex/com.google.cf.wifi/com.google.cf.wifi.xml
new file mode 100644
index 0000000..772096c
--- /dev/null
+++ b/apex/com.google.cf.wifi/com.google.cf.wifi.xml
@@ -0,0 +1,11 @@
+<manifest version="1.0" type="device">
+    <hal format="hidl">
+        <name>android.hardware.wifi.supplicant</name>
+        <transport>hwbinder</transport>
+        <version>1.4</version>
+        <interface>
+            <name>ISupplicant</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+</manifest>
diff --git a/apex/com.google.cf.wifi/file_contexts b/apex/com.google.cf.wifi/file_contexts
new file mode 100644
index 0000000..b11e272
--- /dev/null
+++ b/apex/com.google.cf.wifi/file_contexts
@@ -0,0 +1,5 @@
+(/.*)?                       u:object_r:vendor_file:s0
+/bin/rename_netiface         u:object_r:rename_netiface_exec:s0
+/bin/setup_wifi              u:object_r:setup_wifi_exec:s0
+/bin/hw/wpa_supplicant_cf    u:object_r:hal_wifi_supplicant_default_exec:s0
+/etc/permissions(/.*)?       u:object_r:vendor_configs_file:s0
diff --git a/host/commands/tapsetiff/Android.bp b/apex/keys/Android.bp
similarity index 67%
rename from host/commands/tapsetiff/Android.bp
rename to apex/keys/Android.bp
index 1d7dedb..85184bc 100644
--- a/host/commands/tapsetiff/Android.bp
+++ b/apex/keys/Android.bp
@@ -1,5 +1,4 @@
-//
-// Copyright (C) 2020 The Android Open Source Project
+// Copyright (C) 2021 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -17,7 +16,13 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-sh_binary_host {
-    name: "tapsetiff",
-    src: "tapsetiff.py",
+apex_key {
+    name: "com.google.cf.apex.key",
+    public_key: "com.google.cf.apex.avbpubkey",
+    private_key: "com.google.cf.apex.pem",
+}
+
+android_app_certificate {
+    name: "com.google.cf.apex.certificate",
+    certificate: "com.google.cf.apex",
 }
diff --git a/apex/keys/com.google.cf.apex.avbpubkey b/apex/keys/com.google.cf.apex.avbpubkey
new file mode 100644
index 0000000..1fc39e1
--- /dev/null
+++ b/apex/keys/com.google.cf.apex.avbpubkey
Binary files differ
diff --git a/apex/keys/com.google.cf.apex.pem b/apex/keys/com.google.cf.apex.pem
new file mode 100644
index 0000000..59de332
--- /dev/null
+++ b/apex/keys/com.google.cf.apex.pem
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIJKQIBAAKCAgEAvAG5AIYljraeMBaaVr+UYPFZ/GEDn1+irto2iWtPJxaSIQwU
+t0GMU5DtRMds3XK0PaQOYusoQXQnf3nnb6Ake8NtifsI+pw2HRnx+bwlbvoUBlA4
+g0hpMQThdryevg1hT8bdgQDRm8LI/xIGZ/HH5jKgNHcEmxJuVTmBfSjokaIJDb/M
+ZrTr9agFALIHh6JAdRDXUE4Myr3a8pzeAN71Y5Ll99c1Ni3uc5Fx/83q+vtlL5qE
+zDCsBj1q7gvkdiYFtEGsm+tJ5+sG5/aUKaOq05u0vZRsLInlacub/6Vy5G+uBAXc
+Lzx14rXvzcKkcvgbkpmedPdbv3JR4Pg0oGtgPXG9Qh3bU1XsjaYUzp9c1jhQjs+q
+qBGKOKex1sVF/6/Wn6EjYGKawxHPQtFEp5DcIv7nrQDPFWy6GA4CmO/vaWfQcmIA
+9ikCZGuqDhKJpmJ4WO145u1qgnNHsBLwHMtxHoz7nq0bJUcdCxbrNutUkn4lFuFs
+JUUZdFxKeJkYcT+0+Ml1P6girGXaiLE8JyYBTps+Y91mGnMuNDezseZBEYpX1rP+
+Qx5pdbMFt8anp5bOar76dyGI/wq12kgfnpyweItXRULiIS9EsPxT6birh1BzXtpq
+jnsdEpC5uXidise1rvdNkrgbpCZC9ZDpRzBORWz1OW8+EhmoGhtvBPD6wLsCAwEA
+AQKCAgAW5SrPaoa2W3zmJEqFV+1M5Pdtaa8UQIRCQOa1U3EfNHt1NNBtBLl/D74l
+Sxfx298hRpJN749GcUvCFWleyaTHwaPcUsrkIhPg9WDnZcc1PZUks64+JppQ0uRW
+HmBCisSX/4LIC/56tnzduyc2j1YlrXKfEQNpkxQGousm/81att3dY8cTluLJVr3N
+OOD73oF1ACkIaYjbQ8WfGAVdG8nMZ35D8VxUjcFlJ4g3e68rA2RuKKYVa7P3SpF0
+DdSzoqu9KOZJUpz8dj2wD/I5I+pQvLyE/ccyoVRjztzfhBl6wjLx4HjQ887zXe6n
+IxX9vkM1Vina2qi8psJb4D4gbxMYEvXnOhequ1TSvd03f91gR5D9KFxspGF8NHRA
+gkzKT7QGqgOS31IANC0wIdH5tVrLSVxhtq5BKxdxywTZz4wA/Gy32o7D7phX9PhH
+MZDSplwi92ft1UoU1VLM5eCRSDJf9LM3HVXTpzlmMwCalR+AVnCxNa6rKvDfAbmn
+BVOoh8vNkEfRBwmI6ctXaC7VVA+E4JdWMKk7BbKqU4yUVHrdSCyjwxomAh3G539w
+0YnS7mR8kw/D9ppkQ5bm6ndtu8ABd+VfBPzlvc3kgLjlco7zENNqMOhgrm5lKZsS
+s5WCrZ4feeeC4FZAUXf17SYas6WfB9Hr64Fs81vZmwfNpmgMGQKCAQEA6CsiJCh4
+FAbuLZAAJtJ3z/4uoJTLqfHPOHZFww2PJ7f5CwYIdOxBQ4/PBjz8wreajur3eYai
+T9uhKbG2+elO48ReMREytcpGox9t36wbxrrE185XpI4lQITvEyOv9fsV0af4Vk7W
+KljV5IMMauYwwouUwYV4VPQHVOUMKNy0u/68A6NTjIAXU41pQHzo+bCtyCjpw8ol
+7dQxHzOFbngoSv0s+FT1a+myDJPSAj0BjDTlsaD+Gplcvag4qMOA28IBjcFiv4l5
+e75RF0CIWzRvOJsR3G7WkhxTH1jn4HYOjoYRAZ5YTHq7QM5/xZdulA0sT2zWzY6V
+YlOICG9jZTpI/wKCAQEAz04eDQtDme2jvzdMft0OebsEXuRudCpGiZ3hkPthBelk
+eeFEt9yl2oU9fOOQhjY369gLK3tkN+O6hpGV9bWC2Iua1o7gsSZDp8CKZFOK9JD7
+aqvmND0R3tRCqVaaraIqgWx7kFg5x7Lfgi/KFuXZy7umCbVQqtxDBaSW+Nso2m9m
+0mnr41r9Z52gqJV+z1zyjRY4wswtAmUDcRDnwkJsX6hKFxTRvxRvy1JK1whBgflM
+3oHjUNQFSeeKa2rdZzDSy7ZRCTwl5gZI2CsURX3XmFvYOXdioDACUlpcjzK8Trcq
+/2+gz/2nLmMgVvp5tHYhYHovEks8BoAyAofFyQbsRQKCAQBSH5/OBnqjKuhpOXy0
+PtKewhygNMHt9VkFceCvZEZ1GECBw7qOEVvsmBv06vHFtsh3MWoklJkpglj5tKEy
+uXJsYvOmi5zSbSCbZuyop+qTW1FxvM2HqbhHoD4pGQCPFCfdp3rSnMRo6k+Oq0Rj
+M9Wfm1wdMCcmdcN6JiMs+RT9QtgiuU0+b7jQlz7ZztViLTrriH1YAlN0UxClJsZW
+Ey69h9y2YucFKv8OL+OjYwz/GV7+fCImKoWBmNWh7LXSBkgianuRoQFV4jYw8WTK
+TjvhXAjvXk2MFXTZq8spvNjdVVMCrY4yT1+ZRvIvZKd6u0YnOiqpP3xb8Yw235/b
+GMjlAoIBAQCav7ubDR+Hlme34/XMdgPKRxr6Ixd4y94f+KVbbut8WD9S5CBCCAoe
+13uQ8Ob/6RVRjtK3wMKNHggtUBxbcQWd1IjfRYTheKjkXsxwHBUMf/XOKUgNEtF2
+P4kLk8SffQCx4GNU2yc2tYY3TqlS8n3koc1OTfVLtmSpn7W7Sw5yENr2k28tJs0n
+PfmiHwaskLvXKhFxCK1IrlMlYfM/hgoUVjIIjNgOBZl2c5W+c0FDXvBM4TTpL3xL
+MPaZPQrNbxrMSuqvNCEuVt6lz3KwdUItT9JXA5Gx9mSlSSLzGnKLaBxG1fN7j+Pu
+srx/cTbMyaoctNjSlSrXx3aNgQDaEbrpAoIBAQCxwuK5O9dVHIL8KDh20GrUSVrI
+OapyM7xEjiOJbqEhRbfww3ZHJmw6KYahOnJ5M4gT+23olqRK0pkV80O1H0hfBOF6
+WUlYxW/fBB2egSM568mZ0lXZAMDRxF19XpxzbPUlzTVoA9sZm9Djq6uqWCjYL0Rk
+0aj3DlMMPNMf3EBZJr2pI/GT1WssqKpvTv5gYXvsdoqvpGucW6z/MvilKgbU+RvQ
+V6zDyNdAepw65MCrH+doNroe9NEKS6Fg7RTgMKBWaHTaHJuayj+5/IvkHJ7ULTpW
+NoKv6EkvL2FuVsVa4fY+3KMhJamr4IkhCHhKeNDrAxEyHZ1QjAjhH9W0QDP0
+-----END RSA PRIVATE KEY-----
diff --git a/apex/keys/com.google.cf.apex.pk8 b/apex/keys/com.google.cf.apex.pk8
new file mode 100644
index 0000000..424387a
--- /dev/null
+++ b/apex/keys/com.google.cf.apex.pk8
Binary files differ
diff --git a/apex/keys/com.google.cf.apex.x509.pem b/apex/keys/com.google.cf.apex.x509.pem
new file mode 100644
index 0000000..db073ba
--- /dev/null
+++ b/apex/keys/com.google.cf.apex.x509.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFyTCCA7ECFEDbudaUmJ6QxCAviuzTSQwh55rKMA0GCSqGSIb3DQEBCwUAMIGf
+MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91
+bnRhaW4gVmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEi
+MCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTEbMBkGA1UEAwwSY29t
+Lmdvb2dsZS5jZi5yaWxkMCAXDTIxMTAwMTE3MjQyMVoYDzQ3NTkwODI4MTcyNDIx
+WjCBnzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
+DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB0FuZHJvaWQxEDAOBgNVBAsMB0FuZHJv
+aWQxIjAgBgkqhkiG9w0BCQEWE2FuZHJvaWRAYW5kcm9pZC5jb20xGzAZBgNVBAMM
+EmNvbS5nb29nbGUuY2YucmlsZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBAKGd7f1fKnpky183oJHp5xAam+LeyMcCMg+VPaRMg5T2Uw4kPlJrwxDx0n6S
+WNtqVvcZMRfUREw6BW6mWhOae1rarVSJDxo+pzcju66zVYMf38FqzrBLPSzkKOvK
+pC3WiTs193+lrWsL6a3XtNx3gN3J4cc4f+gEASiE93mbN/pHirIgpLwmZMpaHAXd
+KZBk8iXPrwusdCAi0F6v9AxP0JUhYBmqr+/q5mFHevRq7UBykBjRqNTylmDPjjxu
+fRDkOmnzs8/htToT03NXrDhxod5GIZ/+NsVaTECZ4PK/+BBnMBg/FRE4kPpolMkp
+Nt72pkGDL0whz7RrUxhHfFDVKngmmspBpBIF4bVXQz5yuYqDaEiZv/7x8yjsbkkF
++eraEi9HBy6klhlbYV2XDA/qvV8twocJS/5Qql9bGmH/fHX3SbXTI/RD4kiopxXL
+rCLiV5ABjaFEUp5ub2IHP4W/lXpWqc1GFZfg59wL6NO/dJGO7UsHW/M2euJ4RU4i
+w3kl0J2TmjM1mCbWPsYkyCtW+QwkSz1RpB2cI2v+oYc5vmIceZuu3OY80mzvhqEK
+45Nu1qGoExmrdgVqF6h8LHMSRAMAlx+13Glt2QNEdaEsc9E1oPxXXK0oOLEI/F0B
+9pGGMgVZFPSGtQ8nWNAxy2v+WwtzNQO9p5ra6atYHkbwfhcdAgMBAAEwDQYJKoZI
+hvcNAQELBQADggIBAFpj7pYQHw75MK1Np27IVwhegZrJNb2g8lpYuD/Qzx9bPBTg
+BJ6hSnjPQwgFeAA1mtyh9CzJPzBRrGXJz/zp/VojFs1G4vqm3if+MC+ONKzxtlf1
+q4IPd/DsFce9Ak2NDyAp6IFDZhtEQxv48CclYy2JsIVqlPh2aWN2/VbHQ2e/D8ZK
+MIrTiSPjogDSPcK4MLbavSCQlxZIr+bfNhqm78oWhrpTrJu0+6rXNDJ82LpobmEV
+lp2UmFPVc1sm+Al317Wo5durfF99YSDOF2u9lKO81X4b5Jjc0a6n1q/hHlrMSMuq
++5wn+KVtKRAZf5dU7YGRTPLYKq1Yf0Zygd5lXxG2xhtwaHnwTY3g5cgKLHGzJ9hk
+FbLxVR86ZXiFnZyEncfC8PjUBX6fK2hy1bi1GZSj6jRwsUTx6ay5m28Y4EA+ix89
+hcqrXNR2dumpZTtjirjIrr2hbQB/Mf+LGSmUSZzLaL8vF6Owaxrqg7r3L4NnY6o7
+P45QehDTmm6DQg/8y47KPeKuHIf3JjW2WavcyUF0d/FtjXtPGB+t9Uskfhmv+qIm
+/3RAGckgLIi1+38bwVeHI+EnljZ2PLaXarEFjecI9HmA7A40MQWxaQns91nIjKDE
+8jpIVI+lTRpCPNJAfEm+txvE6PnlAXqDCIhIfl/sX/sIJguqoI/NV+1xJYQg
+-----END CERTIFICATE-----
diff --git a/build/Android.bp b/build/Android.bp
index d516313..1fd858c 100644
--- a/build/Android.bp
+++ b/build/Android.bp
@@ -23,6 +23,7 @@
     module_type: "cvd_host_package",
     config_namespace: "cvd",
     value_variables: [
+        "grub_config",
         "launch_configs",
         "custom_action_config",
         "custom_action_servers",
@@ -33,21 +34,28 @@
     "android.hardware.automotive.vehicle@2.0-virtualization-grpc-server",
     "adb",
     "adb_connector",
-    "adbshell",
     "allocd",
     "allocd_client",
     "assemble_cvd",
+    "avbtool",
     "bt_connector",
     "common_crosvm",
     "config_server",
     "console_forwarder",
     "crosvm",
+    "cvd",
+    "cvd_internal_host_bugreport",
+    "cvd_internal_start",
+    "cvd_internal_status",
+    "cvd_internal_stop",
     "cvd_host_bugreport",
+    "cvd_server",
     "cvd_status",
     "extract-ikconfig",
     "extract-vmlinux",
     "fsck.f2fs",
     "gnss_grpc_proxy",
+    "health",
     "kernel_log_monitor",
     "launch_cvd",
     "libgrpc++",
@@ -64,24 +72,31 @@
     "mkenvimage",
     "modem_simulator",
     "ms-tpm-20-ref",
+    "mcopy",
+    "mmd",
+    "mtools",
     "newfs_msdos",
     "powerwash_cvd",
     "restart_cvd",
     "root-canal",
-    // TODO(b/186487510): remove libchrome and libbacktrace when ASan-related dependency issue is resolved.
-    "libchrome",
-    "libbacktrace",
     "run_cvd",
     "secure_env",
     "socket_vsock_proxy",
     "stop_cvd",
-    "tapsetiff",
     "tombstone_receiver",
     "toybox",
     "unpack_bootimg",
-    "vnc_server",
     "webRTC",
     "webrtc_operator",
+    "operator_proxy",
+    "wmediumd",
+    "wmediumd_control",
+    "wmediumd_gen_config",
+]
+
+cvd_openwrt_images = [
+    "kernel_for_openwrt",
+    "openwrt_rootfs",
 ]
 
 cvd_bluetooth_config_files = [
@@ -97,14 +112,18 @@
 cvd_host_webrtc_assets = [
     "webrtc_adb.js",
     "webrtc_app.js",
+    "webrtc_index.js",
     "webrtc_controls.js",
     "webrtc_cf.js",
+    "webrtc_server_connector.js",
     "webrtc_index.html",
+    "webrtc_client.html",
     "webrtc_rootcanal.js",
     "webrtc_server.crt",
     "webrtc_server.key",
     "webrtc_server.p12",
     "webrtc_style.css",
+    "webrtc_index.css",
     "webrtc_controls.css",
     "webrtc_trusted.pem",
 ]
@@ -159,6 +178,12 @@
     "xhci.policy_aarch64",
 ]
 
+cvd_host_qemu_bootloader = [
+    "bootloader_qemu_x86_64",
+    "bootloader_qemu_aarch64",
+    "bootloader_qemu_arm",
+]
+
 cvd_host_package_customization {
     name: "cvd-host_package",
     deps: cvd_host_tools +
@@ -167,7 +192,9 @@
         common: {
             deps: cvd_host_webrtc_assets +
                 cvd_host_model_simulator_files +
-                cvd_bluetooth_config_files,
+                cvd_host_qemu_bootloader +
+                cvd_bluetooth_config_files +
+                cvd_openwrt_images,
         },
     },
 
diff --git a/build/README.md b/build/README.md
index dc66c0a..18565a9 100644
--- a/build/README.md
+++ b/build/README.md
@@ -3,8 +3,8 @@
 To add custom actions to the WebRTC control panel, create a custom action config
 JSON file in your virtual device product makefile directory, create a
 `prebuilt_etc_host` module for the JSON file with `sub_dir`
-`cvd_custom_action_config`, then set the build variable
-`SOONG_CONFIG_cvd_custom_action_config` to the name of that module. For example:
+`cvd_custom_action_config`, then set the Soong config variable `custom_action_config`
+in the `cvd` namespace to the name of that module. For example:
 
 ```
 Android.bp:
@@ -16,9 +16,7 @@
   }
 
 my_virtual_device.mk:
-  SOONG_CONFIG_NAMESPACES += cvd
-  SOONG_CONFIG_cvd += custom_action_config
-  SOONG_CONFIG_cvd_custom_action_config := my_custom_action_config.json
+  $(call soong_config_set, cvd, custom_action_config, my_custom_action_config.json)
 ```
 
 TODO(b/171709037): Add documentation to source.android.com
diff --git a/build/cvd-host-package.go b/build/cvd-host-package.go
index b025386..d157083 100644
--- a/build/cvd-host-package.go
+++ b/build/cvd-host-package.go
@@ -56,6 +56,12 @@
 		{Mutator: "arch", Variation: android.Common.String()},
 	}
 	for _, dep := range strings.Split(
+		ctx.Config().VendorConfig("cvd").String("grub_config"), " ") {
+		if ctx.OtherModuleExists(dep) {
+			ctx.AddVariationDependencies(variations, cvdHostPackageDependencyTag, dep)
+		}
+	}
+	for _, dep := range strings.Split(
 		ctx.Config().VendorConfig("cvd").String("launch_configs"), " ") {
 		if ctx.OtherModuleExists(dep) {
 			ctx.AddVariationDependencies(variations, cvdHostPackageDependencyTag, dep)
diff --git a/common/frontend/socket_vsock_proxy/Android.bp b/common/frontend/socket_vsock_proxy/Android.bp
index 9335408..f04251b 100644
--- a/common/frontend/socket_vsock_proxy/Android.bp
+++ b/common/frontend/socket_vsock_proxy/Android.bp
@@ -23,6 +23,7 @@
         "main.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
diff --git a/common/libs/concurrency/multiplexer.h b/common/libs/concurrency/multiplexer.h
index 065c1a2..478963f 100644
--- a/common/libs/concurrency/multiplexer.h
+++ b/common/libs/concurrency/multiplexer.h
@@ -17,6 +17,7 @@
 #pragma once
 
 #include <condition_variable>
+#include <functional>
 #include <memory>
 #include <vector>
 
@@ -24,55 +25,64 @@
 #include "common/libs/concurrency/thread_safe_queue.h"
 
 namespace cuttlefish {
-namespace confui {
-template <typename T>
+template <typename T, typename Queue>
 class Multiplexer {
  public:
-  Multiplexer(int n_qs, int max_elements) : sem_items_{0}, next_{0} {
-    auto drop_new = [](typename ThreadSafeQueue<T>::QueueImpl* internal_q) {
-      internal_q->pop_front();
-    };
-    for (int i = 0; i < n_qs; i++) {
-      auto queue = std::make_unique<ThreadSafeQueue<T>>(max_elements, drop_new);
-      queues_.push_back(std::move(queue));
-    }
+  using QueuePtr = std::unique_ptr<Queue>;
+  using QueueSelector = std::function<int(void)>;
+
+  template <typename... Args>
+  static QueuePtr CreateQueue(Args&&... args) {
+    auto raw_ptr = new Queue(std::forward<Args>(args)...);
+    return QueuePtr(raw_ptr);
   }
 
-  int GetNewQueueId() {
-    CHECK(next_ < queues_.size())
-        << "can't get more queues than " << queues_.size();
-    return next_++;
+  Multiplexer() : sem_items_{0} {}
+
+  int RegisterQueue(QueuePtr&& queue) {
+    const int id_to_return = queues_.size();
+    queues_.push_back(std::move(queue));
+    return id_to_return;
   }
 
   void Push(const int idx, T&& t) {
     CheckIdx(idx);
-    queues_[idx]->Push(t);
+    queues_[idx]->Push(std::move(t));
     sem_items_.SemPost();
   }
 
-  T Pop() {
-    // the idx must have an item!
-    // no waiting in fn()!
-    sem_items_.SemWait();
-    for (auto& q : queues_) {
-      if (q->IsEmpty()) {
-        continue;
-      }
-      return q->Pop();
-    }
-    CHECK(false) << "Multiplexer.Pop() should be able to return an item";
-    // must not reach here
-    return T{};
+  T Pop(QueueSelector selector) {
+    SemWait();
+    int q_id = selector();
+    CheckIdx(q_id);  // check, if weird, will die there
+    QueuePtr& queue = queues_[q_id];
+    CHECK(queue) << "queue must not be null.";
+    return queue->Pop();
   }
 
+  T Pop() {
+    auto default_selector = [this]() -> int {
+      for (int i = 0; i < queues_.size(); i++) {
+        if (!queues_[i]->IsEmpty()) {
+          return i;
+        }
+      }
+      return -1;
+    };
+    return Pop(default_selector);
+  }
+
+  bool IsEmpty(const int idx) { return queues_[idx]->IsEmpty(); }
+
+  void SemWait() { sem_items_.SemWait(); }
+
  private:
   void CheckIdx(const int idx) {
     CHECK(idx >= 0 && idx < queues_.size()) << "queues_ array out of bound";
   }
   // total items across the queues
   Semaphore sem_items_;
-  std::vector<std::unique_ptr<ThreadSafeQueue<T>>> queues_;
-  int next_;
+  std::vector<QueuePtr> queues_;
+  QueuePtr null_ptr_;
 };
-}  // end of namespace confui
 }  // end of namespace cuttlefish
diff --git a/common/libs/concurrency/thread_safe_queue.h b/common/libs/concurrency/thread_safe_queue.h
index 9105299..ae16bef 100644
--- a/common/libs/concurrency/thread_safe_queue.h
+++ b/common/libs/concurrency/thread_safe_queue.h
@@ -20,6 +20,7 @@
 #include <deque>
 #include <iterator>
 #include <mutex>
+#include <type_traits>
 #include <utility>
 
 namespace cuttlefish {
@@ -34,9 +35,11 @@
 class ThreadSafeQueue {
  public:
   using QueueImpl = std::deque<T>;
+  using QueueFullHandler = std::function<void(QueueImpl*)>;
+
   ThreadSafeQueue() = default;
   explicit ThreadSafeQueue(std::size_t max_elements,
-                           std::function<void(QueueImpl*)> max_elements_handler)
+                           QueueFullHandler max_elements_handler)
       : max_elements_{max_elements},
         max_elements_handler_{std::move(max_elements_handler)} {}
 
@@ -58,18 +61,17 @@
     return std::move(items_);
   }
 
-  void Push(T&& t) {
+  template <typename U>
+  bool Push(U&& u) {
+    static_assert(std::is_assignable_v<T, decltype(u)>);
     std::lock_guard<std::mutex> guard(m_);
-    DropItemsIfAtCapacity();
-    items_.push_back(std::move(t));
+    const bool has_room = DropItemsIfAtCapacity();
+    if (!has_room) {
+      return false;
+    }
+    items_.push_back(std::forward<U>(u));
     new_item_.notify_one();
-  }
-
-  void Push(const T& t) {
-    std::lock_guard<std::mutex> guard(m_);
-    DropItemsIfAtCapacity();
-    items_.push_back(t);
-    new_item_.notify_one();
+    return true;
   }
 
   bool IsEmpty() {
@@ -83,15 +85,22 @@
   }
 
  private:
-  void DropItemsIfAtCapacity() {
+  // return whether there's room to push
+  bool DropItemsIfAtCapacity() {
     if (max_elements_ && max_elements_ == items_.size()) {
       max_elements_handler_(&items_);
     }
+    if (max_elements_ && max_elements_ == items_.size()) {
+      // handler intends to ignore the newly coming element or
+      // did not empty the room for whatever reason
+      return false;
+    }
+    return true;
   }
 
   std::mutex m_;
   std::size_t max_elements_{};
-  std::function<void(QueueImpl*)> max_elements_handler_{};
+  QueueFullHandler max_elements_handler_{};
   std::condition_variable new_item_;
   QueueImpl items_;
 };
diff --git a/common/libs/confui/Android.bp b/common/libs/confui/Android.bp
index 13ff2fd..ca6348a 100644
--- a/common/libs/confui/Android.bp
+++ b/common/libs/confui/Android.bp
@@ -20,13 +20,16 @@
 cc_library_static {
     name: "libcuttlefish_confui",
     srcs: [
+        "packet_types.cpp",
         "packet.cpp",
+        "protocol_types.cpp",
         "protocol.cpp",
     ],
     static: {
         static_libs: [
             "libbase",
             "libcuttlefish_fs",
+	    "libteeui",
         ],
         shared_libs: [
           "libcrypto", // libcrypto_static is not accessible from all targets
diff --git a/common/libs/confui/confui.h b/common/libs/confui/confui.h
index 957fca1..18dec37 100644
--- a/common/libs/confui/confui.h
+++ b/common/libs/confui/confui.h
@@ -23,15 +23,5 @@
  * header file(s)
  *
  */
-#include "common/libs/confui/packet.h"
 #include "common/libs/confui/protocol.h"
 #include "common/libs/confui/utils.h"
-
-namespace cuttlefish {
-namespace confui {
-using packet::RecvConfUiMsg;
-using packet::SendAck;
-using packet::SendCmd;
-using packet::SendResponse;
-}  // end of namespace confui
-}  // end of namespace cuttlefish
diff --git a/common/libs/confui/packet.cpp b/common/libs/confui/packet.cpp
index d5be03a..debaeb8 100644
--- a/common/libs/confui/packet.cpp
+++ b/common/libs/confui/packet.cpp
@@ -16,82 +16,30 @@
 #include "common/libs/confui/packet.h"
 
 #include <algorithm>
-#include <iostream>
-
-#include <android-base/logging.h>
-#include <android-base/strings.h>
-
-#include "common/libs/confui/protocol.h"
-#include "common/libs/confui/utils.h"
-#include "common/libs/fs/shared_buf.h"
 
 namespace cuttlefish {
 namespace confui {
 namespace packet {
-ConfUiMessage PayloadToConfUiMessage(const std::string& str_to_parse) {
-  auto tokens = android::base::Split(str_to_parse, ":");
-  ConfUiCheck(tokens.size() >= 3)
-      << "PayloadToConfUiMessage takes \"" + str_to_parse + "\""
-      << "and does not have 3 tokens";
-  std::string msg;
-  std::for_each(tokens.begin() + 2, tokens.end() - 1,
-                [&msg](auto& token) { msg.append(token + ":"); });
-  msg.append(*tokens.rbegin());
-  return {tokens[0], tokens[1], msg};
-}
-
-// Use only this function to make a packet to send over the confirmation
-// ui packet layer
-template <typename... Args>
-static Payload ToPayload(const ConfUiCmd cmd, const std::string& session_id,
-                         Args&&... args) {
-  std::string cmd_str = ToString(cmd);
-  std::string msg =
-      ArgsToString(session_id, ":", cmd_str, ":", std::forward<Args>(args)...);
-  PayloadHeader header;
-  header.payload_length_ = msg.size();
-  return {header, msg};
-}
-
-template <typename... Args>
-static bool WritePayload(SharedFD d, const ConfUiCmd cmd,
-                         const std::string& session_id, Args&&... args) {
-  if (!d->IsOpen()) {
-    LOG(ERROR) << "file, socket, etc, is not open to write";
-    return false;
-  }
-  auto [payload, msg] = ToPayload(cmd, session_id, std::forward<Args>(args)...);
-
-  auto nwrite =
-      WriteAll(d, reinterpret_cast<const char*>(&payload), sizeof(payload));
-  if (nwrite != sizeof(payload)) {
-    return false;
-  }
-  nwrite = cuttlefish::WriteAll(d, msg.c_str(), msg.size());
-  if (nwrite != msg.size()) {
-    return false;
-  }
-  return true;
-}
-
-static std::optional<ConfUiMessage> ReadPayload(SharedFD s) {
+static std::optional<std::vector<std::uint8_t>> ReadRawData(SharedFD s) {
   if (!s->IsOpen()) {
-    LOG(ERROR) << "file, socket, etc, is not open to read";
+    ConfUiLog(ERROR) << "file, socket, etc, is not open to read";
     return std::nullopt;
   }
-  PayloadHeader p;
+  packet::PayloadHeader p;
   auto nread = ReadExactBinary(s, &p);
 
   if (nread != sizeof(p)) {
+    ConfUiLog(ERROR) << nread << " and sizeof(p) = " << sizeof(p)
+                     << " not matching";
     return std::nullopt;
   }
-
   if (p.payload_length_ == 0) {
-    return {{SESSION_ANY, ToString(ConfUiCmd::kUnknown), std::string{""}}};
+    return {{}};
   }
 
-  if (p.payload_length_ >= kMaxPayloadLength) {
-    LOG(ERROR) << "Payload length must be less than " << kMaxPayloadLength;
+  if (p.payload_length_ >= packet::kMaxPayloadLength) {
+    ConfUiLog(ERROR) << "Payload length must be less than "
+                     << packet::kMaxPayloadLength;
     return std::nullopt;
   }
 
@@ -99,33 +47,109 @@
   nread = ReadExact(s, buf.get(), p.payload_length_);
   buf[p.payload_length_] = 0;
   if (nread != p.payload_length_) {
+    ConfUiLog(ERROR) << "The length ReadRawData read does not match.";
     return std::nullopt;
   }
-  std::string msg_to_parse{buf.get()};
-  auto [session_id, type, contents] = PayloadToConfUiMessage(msg_to_parse);
-  return {{session_id, type, contents}};
+  std::vector<std::uint8_t> result{buf.get(), buf.get() + nread};
+
+  return {result};
 }
 
-std::optional<ConfUiMessage> RecvConfUiMsg(SharedFD fd) {
-  return ReadPayload(fd);
+static std::optional<ParsedPacket> ParseRawData(
+    const std::vector<std::uint8_t>& data_to_parse) {
+  /*
+   * data_to_parse has 0 in it, so it is not exactly "your (text) std::string."
+   * If we type-cast data_to_parse to std::string and use 3rd party std::string-
+   * processing libraries, the outcome might be incorrect. However, the header
+   * part has no '\0' in it, and is actually a sequence of letters, or a text.
+   * So, we use android::base::Split() to take the header
+   *
+   */
+  std::string as_string{data_to_parse.begin(), data_to_parse.end()};
+  auto tokens = android::base::Split(as_string, ":");
+  CHECK(tokens.size() >= 3)
+      << "Raw packet for confirmation UI must have at least"
+      << " three components.";
+  /**
+   * Here is how the raw data, i.e. tokens[2:] looks like
+   *
+   * n:l[0]:l[1]:l[2]:...:l[n-1]:data[0]data[1]data[2]...data[n]
+   *
+   * Thus it basically has the number of items, the lengths of each item,
+   * and the byte representation of each item. n and l[i] are separated by ':'
+   * Note that the byte representation may have ':' in it. This could mess
+   * up the parsing if we totally depending on ':' separation.
+   *
+   * However, it is safe to assume that there's no ':' inside n or
+   * the string for l[i]. So, we do anyway split the data_to_parse by ':',
+   * and take n and from l[0] through l[n-1] only.
+   */
+  std::string session_id = tokens[0];
+  std::string cmd_type = tokens[1];
+  if (!IsOnlyDigits(tokens[2])) {
+    ConfUiLog(ERROR) << "Token[2] of the ConfUi packet should be a number";
+    return std::nullopt;
+  }
+  const int n = std::stoi(tokens[2]);
+
+  if (n + 2 > tokens.size()) {
+    ConfUiLog(ERROR) << "The ConfUi packet is ill-formatted.";
+    return std::nullopt;
+  }
+  ConfUiPacketInfo data_to_return;
+  std::vector<int> lengths;
+  for (int i = 1; i <= n; i++) {
+    if (!IsOnlyDigits(tokens[2 + i])) {
+      ConfUiLog(ERROR) << tokens[2 + i] << " should be a number but is not.";
+      return std::nullopt;
+    }
+    lengths.emplace_back(std::stoi(tokens[2 + i]));
+  }
+  // to find the first position of the non-header part
+  int pos = 0;
+  // 3 for three ":"s
+  pos += tokens[0].size() + tokens[1].size() + tokens[2].size() + 3;
+  for (int i = 1; i <= n; i++) {
+    pos += tokens[2 + i].size() + 1;
+  }
+  int expected_total_length = pos;
+  for (auto const len : lengths) {
+    expected_total_length += len;
+  }
+  if (expected_total_length != data_to_parse.size()) {
+    ConfUiLog(ERROR) << "expected length in ParseRawData is "
+                     << expected_total_length << " while the actual length is "
+                     << data_to_parse.size();
+    return std::nullopt;
+  }
+  for (const auto len : lengths) {
+    if (len == 0) {
+      // push null vector or whatever empty, appropriately-typed
+      // container
+      data_to_return.emplace_back(std::vector<std::uint8_t>{});
+      continue;
+    }
+    data_to_return.emplace_back(data_to_parse.begin() + pos,
+                                data_to_parse.begin() + pos + len);
+    pos = pos + len;
+  }
+  ParsedPacket result{session_id, cmd_type, data_to_return};
+  return {result};
 }
 
-bool SendCmd(SharedFD fd, const std::string& session_id, ConfUiCmd cmd,
-             const std::string& additional_info) {
-  return WritePayload(fd, cmd, session_id, additional_info);
+std::optional<ParsedPacket> ReadPayload(SharedFD s) {
+  auto raw_data = ReadRawData(s);
+  if (!raw_data) {
+    ConfUiLog(ERROR) << "raw data returned std::nullopt";
+    return std::nullopt;
+  }
+  auto parsed_result = ParseRawData(raw_data.value());
+  if (!parsed_result) {
+    ConfUiLog(ERROR) << "parsed result returns nullopt";
+    return std::nullopt;
+  }
+  return parsed_result;
 }
-
-bool SendAck(SharedFD fd, const std::string& session_id, const bool is_success,
-             const std::string& additional_info) {
-  return WritePayload(fd, ConfUiCmd::kCliAck, session_id,
-                      ToCliAckMessage(is_success, additional_info));
-}
-
-bool SendResponse(SharedFD fd, const std::string& session_id,
-                  const std::string& additional_info) {
-  return WritePayload(fd, ConfUiCmd::kCliRespond, session_id, additional_info);
-}
-
 }  // end of namespace packet
 }  // end of namespace confui
 }  // end of namespace cuttlefish
diff --git a/common/libs/confui/packet.h b/common/libs/confui/packet.h
index 848eb29..e109a61 100644
--- a/common/libs/confui/packet.h
+++ b/common/libs/confui/packet.h
@@ -15,56 +15,122 @@
 
 #pragma once
 
+#include <algorithm>
 #include <cstdint>
-#include <functional>
 #include <optional>
 #include <string>
 #include <tuple>
+#include <type_traits>
+#include <vector>
 
-#include "common/libs/confui/protocol.h"
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+
+#include "common/libs/confui/packet_types.h"
+#include "common/libs/confui/utils.h"
+#include "common/libs/fs/shared_buf.h"
 #include "common/libs/fs/shared_fd.h"
 
+/**
+ * @file packet.h
+ *
+ * @brief lowest-level packet for communication between host & guest
+ *
+ * Each packet has three fields
+ *  1. session_id_: the name of the currently active confirmation UI session
+ *  2. type_: the type of command/response. E.g. start, stop, ack, abort, etc
+ *  3. additional_info_: all the other additional information
+ *
+ * The binary represenation of each packet is as follows:
+ *  n:L[1]:L[2]:...:L[n]:data[1]data[2]data[3]...data[n]
+ *
+ * The additional_info_ is in general a variable number of items, each
+ * is either a byte vector (e.g. std::vector<uint8_t>) or a string.
+ *
+ * n is the number of items. L[i] is the length of i th item. data[i]
+ * is the binary representation of the i th item
+ *
+ */
 namespace cuttlefish {
 namespace confui {
 namespace packet {
+
 /*
- * for communication between Confirmation UI guest and host.
+ * methods in namespace impl is not intended for public use
  *
- * Payload is actually the header. When we send/recv, besides Payload,
- * the "payload_length_" bytes should be additionally sent/recv'ed.
- *
- * The payload is assumed to be a text (e.g. char[N])
- * The WritePayload will create the string. When read, however,
- * the receiver should parse it
- *
- * The format we use for confirmation UI is:
- *  session_id:type:contents
- *
- * e.g. GooglePay10354:start:my confirmaton message
+ * For exposed APIs, skip to "start of public APIs
+ * or, skip the namespace impl
  */
-struct PayloadHeader {
-  std::uint32_t payload_length_;
-};
+namespace impl {
+template <typename Buffer, typename... Args>
+void AppendToBuffer(Buffer& buffer, Args&&... args) {
+  (buffer.insert(buffer.end(), std::begin(std::forward<Args>(args)),
+                 std::end(std::forward<Args>(args))),
+   ...);
+}
 
-// PayloadHeader + the message actually being sent
-using Payload = std::tuple<PayloadHeader, std::string>;
+template <typename... Args>
+std::vector<int> MakeSizeHeader(Args&&... args) {
+  std::vector<int> lengths;
+  (lengths.push_back(std::distance(std::begin(args), std::end(args))), ...);
+  return lengths;
+}
 
-// msg will look like "334522:start:Hello I am Here!"
-// this function returns 334522, start, "Hello I am Here!"
-// if no session id is given, it is regarded as SESSION_ANY
-ConfUiMessage PayloadToConfUiMessage(const std::string& str_to_parse);
+// Use only this function to make a packet to send over the confirmation
+// ui packet layer
+template <typename... Args>
+Payload ToPayload(const std::string& cmd_str, const std::string& session_id,
+                  Args&&... args) {
+  using namespace cuttlefish::confui::packet::impl;
+  constexpr auto n_args = sizeof...(Args);
+  std::stringstream ss;
+  ss << ArgsToString(session_id, ":", cmd_str, ":", n_args, ":");
+  // create size header
+  std::vector<int> size_info =
+      impl::MakeSizeHeader(std::forward<Args>(args)...);
+  for (const auto sz : size_info) {
+    ss << sz << ":";
+  }
+  std::string header = ss.str();
+  std::vector<std::uint8_t> payload_buffer{header.begin(), header.end()};
+  impl::AppendToBuffer(payload_buffer, std::forward<Args>(args)...);
 
-std::optional<ConfUiMessage> RecvConfUiMsg(SharedFD fd);
-bool SendAck(SharedFD fd, const std::string& session_id, const bool is_success,
-             const std::string& additional_info);
-bool SendResponse(SharedFD fd, const std::string& session_id,
-                  const std::string& additional_info);
-// for HAL
-bool SendCmd(SharedFD fd, const std::string& session_id, ConfUiCmd cmd,
-             const std::string& additional_info);
+  PayloadHeader ph;
+  ph.payload_length_ = payload_buffer.size();
+  return {ph, payload_buffer};
+}
+}  // namespace impl
 
-// this is for short messages
-constexpr const ssize_t kMaxPayloadLength = 1000;
+/*
+ * start of public methods
+ */
+std::optional<ParsedPacket> ReadPayload(SharedFD s);
+
+template <typename... Args>
+bool WritePayload(SharedFD d, const std::string& cmd_str,
+                  const std::string& session_id, Args&&... args) {
+  // TODO(kwstephenkim): type check Args... so that they are either
+  // kind of std::string or std::vector<1 byte>
+  if (!d->IsOpen()) {
+    ConfUiLog(ERROR) << "file, socket, etc, is not open to write";
+    return false;
+  }
+  auto [payload_header, data_to_send] =
+      impl::ToPayload(cmd_str, session_id, std::forward<Args>(args)...);
+  const std::string data_in_str(data_to_send.cbegin(), data_to_send.cend());
+
+  auto nwrite = WriteAll(d, reinterpret_cast<const char*>(&payload_header),
+                         sizeof(payload_header));
+  if (nwrite != sizeof(payload_header)) {
+    return false;
+  }
+  nwrite = WriteAll(d, reinterpret_cast<const char*>(data_to_send.data()),
+                    data_to_send.size());
+  if (nwrite != data_to_send.size()) {
+    return false;
+  }
+  return true;
+}
 
 }  // end of namespace packet
 }  // end of namespace confui
diff --git a/common/libs/confui/packet_types.cpp b/common/libs/confui/packet_types.cpp
new file mode 100644
index 0000000..f3108b5
--- /dev/null
+++ b/common/libs/confui/packet_types.cpp
@@ -0,0 +1,44 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#include "common/libs/confui/packet_types.h"
+
+#include <sstream>
+
+namespace cuttlefish {
+namespace confui {
+namespace packet {
+std::string ToString(const ParsedPacket& packet) {
+  std::stringstream ss;
+  ss << "[" << packet.session_id_ << "," << packet.type_ << ",";
+  for (auto const& vec : packet.additional_info_) {
+    if (vec.empty()) {
+      ss << ",";
+      continue;
+    }
+    std::string token(vec.cbegin(), vec.cend());
+    ss << token << ",";
+  }
+  std::string result = ss.str();
+  bool is_remove_one_comma = (!packet.additional_info_.empty());
+  if (is_remove_one_comma) {
+    result.pop_back();
+  }
+  result.append("]");
+  return result;
+}
+}  // end of namespace packet
+}  // end of namespace confui
+}  // end of namespace cuttlefish
diff --git a/common/libs/confui/packet_types.h b/common/libs/confui/packet_types.h
new file mode 100644
index 0000000..73f2745
--- /dev/null
+++ b/common/libs/confui/packet_types.h
@@ -0,0 +1,49 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#pragma once
+
+#include <cstdint>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <vector>
+
+namespace cuttlefish {
+namespace confui {
+namespace packet {
+struct PayloadHeader {
+  std::uint32_t payload_length_;
+};
+
+using BufferType = std::vector<std::uint8_t>;
+
+// PayloadHeader + the byte size sent over the channel
+using Payload = std::tuple<PayloadHeader, BufferType>;
+
+// this is for short messages
+constexpr const ssize_t kMaxPayloadLength = 10000;
+
+using ConfUiPacketInfo = std::vector<std::vector<std::uint8_t>>;
+struct ParsedPacket {
+  std::string session_id_;
+  std::string type_;
+  ConfUiPacketInfo additional_info_;
+};
+
+std::string ToString(const ParsedPacket& packet);
+}  // end of namespace packet
+}  // end of namespace confui
+}  // end of namespace cuttlefish
diff --git a/common/libs/confui/protocol.cpp b/common/libs/confui/protocol.cpp
index 6784034..03ca4cc 100644
--- a/common/libs/confui/protocol.cpp
+++ b/common/libs/confui/protocol.cpp
@@ -15,88 +15,259 @@
 
 #include "common/libs/confui/protocol.h"
 
-#include <map>
 #include <sstream>
-#include <unordered_map>
 #include <vector>
 
 #include <android-base/strings.h>
 
+#include "common/libs/confui/packet.h"
 #include "common/libs/confui/utils.h"
+#include "common/libs/fs/shared_buf.h"
 
 namespace cuttlefish {
 namespace confui {
-std::string ToDebugString(const ConfUiCmd& cmd, const bool is_debug) {
-  std::stringstream ss;
-  ss << "of " << Enum2Base(cmd);
-  std::string suffix = "";
-  if (is_debug) {
-    suffix.append(ss.str());
-  }
-  static std::unordered_map<ConfUiCmd, std::string> look_up_tab{
-      {ConfUiCmd::kUnknown, "kUnknown"},
-      {ConfUiCmd::kStart, "kStart"},
-      {ConfUiCmd::kStop, "kStop"},
-      {ConfUiCmd::kCliAck, "kCliAck"},
-      {ConfUiCmd::kCliRespond, "kCliRespond"},
-      {ConfUiCmd::kAbort, "kAbort"},
-      {ConfUiCmd::kSuspend, "kSuspend"},
-      {ConfUiCmd::kRestore, "kRestore"},
-      {ConfUiCmd::kUserInputEvent, "kUserInputEvent"}};
-  if (look_up_tab.find(cmd) != look_up_tab.end()) {
-    return look_up_tab[cmd] + suffix;
-  }
-  return "kUnknown" + suffix;
+namespace {
+// default implementation of ToConfUiMessage
+template <ConfUiCmd C>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage(
+    const packet::ParsedPacket& message) {
+  return std::make_unique<ConfUiGenericMessage<C>>(message.session_id_);
 }
 
-std::string ToString(const ConfUiCmd& cmd) { return ToDebugString(cmd, false); }
+// these are specialized, and defined below
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kCliAck>(
+    const packet::ParsedPacket& message);
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kStart>(
+    const packet::ParsedPacket& message);
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kUserInputEvent>(
+    const packet::ParsedPacket& message);
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kUserTouchEvent>(
+    const packet::ParsedPacket& message);
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kCliRespond>(
+    const packet::ParsedPacket& message);
 
-ConfUiCmd ToCmd(std::uint32_t i) {
-  std::vector<ConfUiCmd> all_cmds{
-      ConfUiCmd::kStart,      ConfUiCmd::kStop,           ConfUiCmd::kCliAck,
-      ConfUiCmd::kCliRespond, ConfUiCmd::kAbort,          ConfUiCmd::kSuspend,
-      ConfUiCmd::kRestore,    ConfUiCmd::kUserInputEvent, ConfUiCmd::kUnknown};
+std::unique_ptr<ConfUiMessage> ToConfUiMessage(
+    const packet::ParsedPacket& confui_packet) {
+  const auto confui_cmd = ToCmd(confui_packet.type_);
+  switch (confui_cmd) {
+    // customized ConfUiMessage
+    case ConfUiCmd::kStart:
+      return ToConfUiMessage<ConfUiCmd::kStart>(confui_packet);
+    case ConfUiCmd::kCliAck:
+      return ToConfUiMessage<ConfUiCmd::kCliAck>(confui_packet);
+    case ConfUiCmd::kCliRespond:
+      return ToConfUiMessage<ConfUiCmd::kCliRespond>(confui_packet);
+    case ConfUiCmd::kUserInputEvent:
+      return ToConfUiMessage<ConfUiCmd::kUserInputEvent>(confui_packet);
+    case ConfUiCmd::kUserTouchEvent:
+      return ToConfUiMessage<ConfUiCmd::kUserTouchEvent>(confui_packet);
+      // default ConfUiMessage with session & type only
+    case ConfUiCmd::kAbort:
+      return ToConfUiMessage<ConfUiCmd::kAbort>(confui_packet);
+    case ConfUiCmd::kStop:
+      return ToConfUiMessage<ConfUiCmd::kStop>(confui_packet);
+      // these are errors
+    case ConfUiCmd::kUnknown:
+    default:
+      ConfUiLog(ERROR) << "ConfUiCmd value is not good for ToConfUiMessage: "
+                       << ToString(confui_cmd);
+      break;
+  }
+  return {nullptr};
+}
+}  // end of unnamed namespace
 
-  for (auto& cmd : all_cmds) {
-    if (i == Enum2Base(cmd)) {
-      return cmd;
+std::string ToString(const ConfUiMessage& msg) { return msg.ToString(); }
+
+std::unique_ptr<ConfUiMessage> RecvConfUiMsg(SharedFD fd) {
+  if (!fd->IsOpen()) {
+    ConfUiLog(ERROR) << "file, socket, etc, is not open to read";
+    return {nullptr};
+  }
+  auto confui_packet_opt = packet::ReadPayload(fd);
+  if (!confui_packet_opt) {
+    ConfUiLog(ERROR) << "ReadPayload returns but with std::nullptr";
+    return {nullptr};
+  }
+
+  auto confui_packet = confui_packet_opt.value();
+  return ToConfUiMessage(confui_packet);
+}
+
+std::unique_ptr<ConfUiMessage> RecvConfUiMsg(const std::string& session_id,
+                                             SharedFD fd) {
+  auto conf_ui_msg = RecvConfUiMsg(fd);
+  if (!conf_ui_msg) {
+    return {nullptr};
+  }
+  auto recv_session_id = conf_ui_msg->GetSessionId();
+  if (session_id != recv_session_id) {
+    ConfUiLog(ERROR) << "Received Session ID (" << recv_session_id
+                     << ") is not the expected one (" << session_id << ")";
+    return {nullptr};
+  }
+  return conf_ui_msg;
+}
+
+bool SendAbortCmd(SharedFD fd, const std::string& session_id) {
+  ConfUiGenericMessage<ConfUiCmd::kAbort> confui_msg{session_id};
+  return confui_msg.SendOver(fd);
+}
+
+bool SendStopCmd(SharedFD fd, const std::string& session_id) {
+  ConfUiGenericMessage<ConfUiCmd::kStop> confui_msg{session_id};
+  return confui_msg.SendOver(fd);
+}
+
+bool SendAck(SharedFD fd, const std::string& session_id, const bool is_success,
+             const std::string& status_message) {
+  ConfUiAckMessage confui_msg{session_id, is_success, status_message};
+  return confui_msg.SendOver(fd);
+}
+
+bool SendResponse(SharedFD fd, const std::string& session_id,
+                  const UserResponse::type& plain_selection,
+                  const std::vector<std::uint8_t>& signed_response,
+                  const std::vector<std::uint8_t>& message) {
+  ConfUiCliResponseMessage confui_msg{session_id, plain_selection,
+                                      signed_response, message};
+  return confui_msg.SendOver(fd);
+}
+
+bool SendStartCmd(SharedFD fd, const std::string& session_id,
+                  const std::string& prompt_text,
+                  const std::vector<std::uint8_t>& extra_data,
+                  const std::string& locale,
+                  const std::vector<teeui::UIOption>& ui_opts) {
+  ConfUiStartMessage confui_msg{session_id, prompt_text, extra_data, locale,
+                                ui_opts};
+  return confui_msg.SendOver(fd);
+}
+
+// this is only for deliverSecureInputEvent
+bool SendUserSelection(SharedFD fd, const std::string& session_id,
+                       const UserResponse::type& confirm_cancel) {
+  ConfUiUserSelectionMessage confui_msg{session_id, confirm_cancel};
+  return confui_msg.SendOver(fd);
+}
+
+// specialized ToConfUiMessage()
+namespace {
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kCliAck>(
+    const packet::ParsedPacket& message) {
+  auto type = ToCmd(message.type_);
+  auto& contents = message.additional_info_;
+  if (type != ConfUiCmd::kCliAck) {
+    ConfUiLog(ERROR) << "Received cmd is not ack but " << ToString(type);
+    return {nullptr};
+  }
+
+  if (contents.size() != 2) {
+    ConfUiLog(ERROR)
+        << "Ack message should only have pass/fail and a status message";
+    return {nullptr};
+  }
+
+  const std::string success_str(contents[0].begin(), contents[0].end());
+  const bool is_success = (success_str == "success");
+  const std::string status_message(contents[1].begin(), contents[1].end());
+  return std::make_unique<ConfUiAckMessage>(message.session_id_, is_success,
+                                            status_message);
+}
+
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kStart>(
+    const packet::ParsedPacket& message) {
+  /*
+   * additional_info_[0]: prompt text
+   * additional_info_[1]: extra data
+   * additional_info_[2]: locale
+   * additional_info_[3]: UIOptions
+   *
+   */
+  if (message.additional_info_.size() < 3) {
+    ConfUiLog(ERROR) << "ConfUiMessage for kStart is ill-formatted: "
+                     << packet::ToString(message);
+    return {nullptr};
+  }
+  std::vector<teeui::UIOption> ui_opts;
+  bool has_ui_option = (message.additional_info_.size() == 4) &&
+                       !(message.additional_info_[3].empty());
+  if (has_ui_option) {
+    std::string ui_opts_string{message.additional_info_[3].begin(),
+                               message.additional_info_[3].end()};
+    auto tokens = android::base::Split(ui_opts_string, ",");
+    for (auto token : tokens) {
+      auto ui_opt_optional = ToUiOption(token);
+      if (!ui_opt_optional) {
+        ConfUiLog(ERROR) << "Wrong UiOption String : " << token;
+        return {nullptr};
+      }
+      ui_opts.emplace_back(ui_opt_optional.value());
     }
   }
-  return ConfUiCmd::kUnknown;
+  auto sm = std::make_unique<ConfUiStartMessage>(
+      message.session_id_,
+      std::string(message.additional_info_[0].begin(),
+                  message.additional_info_[0].end()),
+      message.additional_info_[1],
+      std::string(message.additional_info_[2].begin(),
+                  message.additional_info_[2].end()),
+      ui_opts);
+  return sm;
 }
 
-ConfUiCmd ToCmd(const std::string& cmd_str) {
-  static std::map<std::string, ConfUiCmd> cmds = {
-      {"kStart", ConfUiCmd::kStart},
-      {"kStop", ConfUiCmd::kStop},
-      {"kCliAck", ConfUiCmd::kCliAck},
-      {"kCliRespond", ConfUiCmd::kCliRespond},
-      {"kAbort", ConfUiCmd::kAbort},
-      {"kSuspend", ConfUiCmd::kSuspend},
-      {"kRestore", ConfUiCmd::kRestore},
-      {"kUserInputEvent", ConfUiCmd::kUserInputEvent},
-  };
-  if (cmds.find(cmd_str) != cmds.end()) {
-    return cmds[cmd_str];
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kUserInputEvent>(
+    const packet::ParsedPacket& message) {
+  if (message.additional_info_.size() < 1) {
+    ConfUiLog(ERROR)
+        << "kUserInputEvent message should have at least one additional_info_";
+    return {nullptr};
   }
-  return ConfUiCmd::kUnknown;
+  auto response = std::string{message.additional_info_[0].begin(),
+                              message.additional_info_[0].end()};
+  return std::make_unique<ConfUiUserSelectionMessage>(message.session_id_,
+                                                      response);
 }
 
-std::string ToCliAckMessage(const bool is_success, const std::string& message) {
-  std::string header = "error:";
-  if (is_success) {
-    header = "success:";
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kUserTouchEvent>(
+    const packet::ParsedPacket& message) {
+  if (message.additional_info_.size() < 2) {
+    ConfUiLog(ERROR)
+        << "kUserTouchEvent message should have at least two additional_info_";
+    return {nullptr};
   }
-  return header + message;
+  auto x = std::string(message.additional_info_[0].begin(),
+                       message.additional_info_[0].end());
+  auto y = std::string(message.additional_info_[1].begin(),
+                       message.additional_info_[1].end());
+  return std::make_unique<ConfUiUserTouchMessage>(message.session_id_,
+                                                  std::stoi(x), std::stoi(y));
 }
 
-std::string ToCliAckSuccessMsg(const std::string& message) {
-  return ToCliAckMessage(true, message);
+template <>
+std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kCliRespond>(
+    const packet::ParsedPacket& message) {
+  if (message.additional_info_.size() < 3) {
+    ConfUiLog(ERROR)
+        << "kCliRespond message should have at least two additional info";
+    return {nullptr};
+  }
+  auto response = std::string{message.additional_info_[0].begin(),
+                              message.additional_info_[0].end()};
+  auto sign = message.additional_info_[1];
+  auto msg = message.additional_info_[2];
+  return std::make_unique<ConfUiCliResponseMessage>(message.session_id_,
+                                                    response, sign, msg);
 }
-
-std::string ToCliAckErrorMsg(const std::string& message) {
-  return ToCliAckMessage(false, message);
-}
-
+}  // end of unnamed namespace
 }  // end of namespace confui
 }  // end of namespace cuttlefish
diff --git a/common/libs/confui/protocol.h b/common/libs/confui/protocol.h
index 582b43e..f41afc4 100644
--- a/common/libs/confui/protocol.h
+++ b/common/libs/confui/protocol.h
@@ -16,48 +16,55 @@
 #pragma once
 
 #include <cstdint>
+#include <optional>
 #include <string>
+#include <tuple>
+
+#include <teeui/common_message_types.h>  // /system/teeui/libteeui/.../include
+
+#include "common/libs/confui/packet_types.h"
+#include "common/libs/confui/protocol_types.h"
+#include "common/libs/fs/shared_fd.h"
 
 namespace cuttlefish {
 namespace confui {
-// When you update this, please update all the utility functions
-// in conf.cpp: e.g. ToString, etc
-enum class ConfUiCmd : std::uint32_t {
-  kUnknown = 100,
-  kStart = 111,   // start rendering, send confirmation msg, & wait respond
-  kStop = 112,    // start rendering, send confirmation msg, & wait respond
-  kCliAck = 113,  // client acknowledged. "error:err_msg" or "success:command"
-  kCliRespond = 114,  //  with "confirm" or "cancel"
-  kAbort = 115,       // to abort the current session
-  kSuspend = 116,     // to suspend, so do save the context
-  kRestore = 117,
-  kUserInputEvent = 200
-};
 
-std::string ToString(const ConfUiCmd& cmd);
-std::string ToDebugString(const ConfUiCmd& cmd, const bool is_debug);
-ConfUiCmd ToCmd(const std::string& cmd_str);
-ConfUiCmd ToCmd(std::uint32_t i);
+std::string ToString(const ConfUiMessage& msg);
 
-struct UserResponse {
-  using type = std::string;
-  constexpr static const auto kConfirm = "user_confirm";
-  constexpr static const auto kCancel = "user_cancel";
-  constexpr static const auto kUnknown = "user_unknown";
-};
+constexpr auto SESSION_ANY = "";
+/*
+ * received confirmation UI message on the guest could be abort or
+ * ack/response. Thus, the guest APIs should call RecvConfUiMsg(fd),
+ * see which is it, and then use Into*(conf_ui_message) to
+ * parse & use it.
+ *
+ */
+std::unique_ptr<ConfUiMessage> RecvConfUiMsg(SharedFD fd);
+std::unique_ptr<ConfUiMessage> RecvConfUiMsg(const std::string& session_id,
+                                             SharedFD fd);
 
-// invalid/ignored session id
-constexpr char SESSION_ANY[] = "";
+bool SendAbortCmd(SharedFD fd, const std::string& session_id);
 
-std::string ToCliAckMessage(const bool is_success, const std::string& message);
-std::string ToCliAckErrorMsg(const std::string& message);
-std::string ToCliAckSuccessMsg(const std::string& message);
+bool SendAck(SharedFD fd, const std::string& session_id, const bool is_success,
+             const std::string& status_message);
+bool SendResponse(SharedFD fd, const std::string& session_id,
+                  const UserResponse::type& plain_selection,
+                  const std::vector<std::uint8_t>& signed_response,
+                  // signing is a function of message, key
+                  const std::vector<std::uint8_t>& message);
 
-struct ConfUiMessage {
-  std::string session_id_;
-  std::string type_;  // cmd, which cmd? ack, response, etc
-  std::string msg_;
-};
+// for HAL
+bool SendStartCmd(SharedFD fd, const std::string& session_id,
+                  const std::string& prompt_text,
+                  const std::vector<std::uint8_t>& extra_data,
+                  const std::string& locale,
+                  const std::vector<teeui::UIOption>& ui_opts);
+
+bool SendStopCmd(SharedFD fd, const std::string& session_id);
+
+// for HAL::deliverSecureInputEvent
+bool SendUserSelection(SharedFD fd, const std::string& session_id,
+                       const UserResponse::type& confirm_cancel);
 
 }  // end of namespace confui
 }  // end of namespace cuttlefish
diff --git a/common/libs/confui/protocol_types.cpp b/common/libs/confui/protocol_types.cpp
new file mode 100644
index 0000000..3a8d9a6
--- /dev/null
+++ b/common/libs/confui/protocol_types.cpp
@@ -0,0 +1,164 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#include "common/libs/confui/protocol_types.h"
+
+#include <map>
+#include <sstream>
+#include <unordered_map>
+
+#include "common/libs/confui/packet.h"
+#include "common/libs/confui/utils.h"
+
+namespace cuttlefish {
+namespace confui {
+std::string ToDebugString(const ConfUiCmd& cmd, const bool is_verbose) {
+  std::stringstream ss;
+  ss << " of " << Enum2Base(cmd);
+  std::string suffix = "";
+  if (is_verbose) {
+    suffix.append(ss.str());
+  }
+  static std::unordered_map<ConfUiCmd, std::string> look_up_tab{
+      {ConfUiCmd::kUnknown, "kUnknown"},
+      {ConfUiCmd::kStart, "kStart"},
+      {ConfUiCmd::kStop, "kStop"},
+      {ConfUiCmd::kCliAck, "kCliAck"},
+      {ConfUiCmd::kCliRespond, "kCliRespond"},
+      {ConfUiCmd::kAbort, "kAbort"},
+      {ConfUiCmd::kUserInputEvent, "kUserInputEvent"},
+      {ConfUiCmd::kUserInputEvent, "kUserTouchEvent"}};
+  if (look_up_tab.find(cmd) != look_up_tab.end()) {
+    return look_up_tab[cmd] + suffix;
+  }
+  return "kUnknown" + suffix;
+}
+
+std::string ToString(const ConfUiCmd& cmd) { return ToDebugString(cmd, false); }
+
+ConfUiCmd ToCmd(std::uint32_t i) {
+  std::vector<ConfUiCmd> all_cmds{
+      ConfUiCmd::kStart,          ConfUiCmd::kStop,
+      ConfUiCmd::kCliAck,         ConfUiCmd::kCliRespond,
+      ConfUiCmd::kAbort,          ConfUiCmd::kUserInputEvent,
+      ConfUiCmd::kUserTouchEvent, ConfUiCmd::kUnknown};
+
+  for (auto& cmd : all_cmds) {
+    if (i == Enum2Base(cmd)) {
+      return cmd;
+    }
+  }
+  return ConfUiCmd::kUnknown;
+}
+
+ConfUiCmd ToCmd(const std::string& cmd_str) {
+  static std::map<std::string, ConfUiCmd> cmds = {
+      {"kStart", ConfUiCmd::kStart},
+      {"kStop", ConfUiCmd::kStop},
+      {"kCliAck", ConfUiCmd::kCliAck},
+      {"kCliRespond", ConfUiCmd::kCliRespond},
+      {"kAbort", ConfUiCmd::kAbort},
+      {"kUserInputEvent", ConfUiCmd::kUserInputEvent},
+      {"kUserTouchEvent", ConfUiCmd::kUserTouchEvent},
+  };
+  if (cmds.find(cmd_str) != cmds.end()) {
+    return cmds[cmd_str];
+  }
+  return ConfUiCmd::kUnknown;
+}
+
+std::string ToString(const teeui::UIOption ui_opt) {
+  return std::to_string(static_cast<int>(ui_opt));
+}
+
+std::optional<teeui::UIOption> ToUiOption(const std::string& src) {
+  if (!IsOnlyDigits(src)) {
+    return std::nullopt;
+  }
+  return {static_cast<teeui::UIOption>(std::stoi(src))};
+}
+
+template <typename T>
+static std::string ByteVecToString(const std::vector<T>& v) {
+  static_assert(sizeof(T) == 1);
+  std::string result{v.begin(), v.end()};
+  return result;
+}
+
+std::string ConfUiAckMessage::ToString() const {
+  return CreateString(session_id_, confui::ToString(GetType()),
+                      (is_success_ ? "success" : "fail"), status_message_);
+}
+
+bool ConfUiAckMessage::SendOver(SharedFD fd) {
+  return Send_(fd, GetType(), session_id_,
+               std::string(is_success_ ? "success" : "fail"), status_message_);
+}
+
+std::string ConfUiCliResponseMessage::ToString() const {
+  return CreateString(session_id_, confui::ToString(GetType()), response_,
+                      ByteVecToString(sign_), ByteVecToString(message_));
+}
+
+bool ConfUiCliResponseMessage::SendOver(SharedFD fd) {
+  return Send_(fd, GetType(), session_id_, response_, sign_, message_);
+}
+
+std::string ConfUiStartMessage::UiOptsToString() const {
+  std::stringstream ss;
+  for (const auto& ui_opt : ui_opts_) {
+    ss << cuttlefish::confui::ToString(ui_opt) << ",";
+  }
+  auto ui_opt_str = ss.str();
+  if (!ui_opt_str.empty()) {
+    ui_opt_str.pop_back();
+  }
+  return ui_opt_str;
+}
+
+std::string ConfUiStartMessage::ToString() const {
+  auto ui_opts_str = UiOptsToString();
+  return CreateString(
+      session_id_, confui::ToString(GetType()), prompt_text_, locale_,
+      std::string(extra_data_.begin(), extra_data_.end()), ui_opts_str);
+}
+
+bool ConfUiStartMessage::SendOver(SharedFD fd) {
+  return Send_(fd, GetType(), session_id_, prompt_text_, extra_data_, locale_,
+               UiOptsToString());
+}
+
+std::string ConfUiUserSelectionMessage::ToString() const {
+  return CreateString(session_id_, confui::ToString(GetType()), response_);
+}
+
+bool ConfUiUserSelectionMessage::SendOver(SharedFD fd) {
+  return Send_(fd, GetType(), session_id_, response_);
+}
+
+std::string ConfUiUserTouchMessage::ToString() const {
+  std::stringstream ss;
+  ss << "(" << x_ << "," << y_ << ")";
+  auto pos = ss.str();
+  return CreateString(session_id_, confui::ToString(GetType()), response_, pos);
+}
+
+bool ConfUiUserTouchMessage::SendOver(SharedFD fd) {
+  return Send_(fd, GetType(), session_id_, std::to_string(x_),
+               std::to_string(y_));
+}
+
+}  // end of namespace confui
+}  // end of namespace cuttlefish
diff --git a/common/libs/confui/protocol_types.h b/common/libs/confui/protocol_types.h
new file mode 100644
index 0000000..609b533
--- /dev/null
+++ b/common/libs/confui/protocol_types.h
@@ -0,0 +1,231 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#pragma once
+
+#include <cstdint>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <teeui/common_message_types.h>  // /system/teeui/libteeui/.../include
+
+#include "common/libs/confui/packet.h"
+#include "common/libs/confui/packet_types.h"
+
+#include "common/libs/confui/utils.h"
+#include "common/libs/fs/shared_fd.h"
+
+namespace cuttlefish {
+namespace confui {
+// When you update this, please update all the utility functions
+// in conf.cpp: e.g. ToString, etc
+enum class ConfUiCmd : std::uint32_t {
+  kUnknown = 100,
+  kStart = 111,   // start rendering, send confirmation msg, & wait respond
+  kStop = 112,    // start rendering, send confirmation msg, & wait respond
+  kCliAck = 113,  // client acknowledged. "error:err_msg" or "success:command"
+  kCliRespond = 114,  //  with "confirm" or "cancel" or "abort"
+  kAbort = 115,       // to abort the current session
+  kUserInputEvent = 200,
+  kUserTouchEvent = 201
+};
+
+// this is for short messages
+constexpr const ssize_t kMaxMessageLength = packet::kMaxPayloadLength;
+
+std::string ToString(const ConfUiCmd& cmd);
+std::string ToDebugString(const ConfUiCmd& cmd, const bool is_debug);
+ConfUiCmd ToCmd(const std::string& cmd_str);
+ConfUiCmd ToCmd(std::uint32_t i);
+
+std::string ToString(const teeui::UIOption ui_opt);
+std::optional<teeui::UIOption> ToUiOption(const std::string&);
+
+struct HostError {
+  static constexpr char kSystemError[] = "system_error";
+  static constexpr char kUIError[] = "ui_error";
+  static constexpr char kMessageTooLongError[] = "msg_too_long_error";
+  static constexpr char kIncorrectUTF8[] = "msg_incorrect_utf8";
+};
+
+struct UserResponse {
+  using type = std::string;
+  constexpr static const auto kConfirm = "user_confirm";
+  constexpr static const auto kCancel = "user_cancel";
+  constexpr static const auto kTouchEvent = "user_touch";
+  // user may close x button on the virtual window or so
+  // or.. scroll the session up and throw to trash bin
+  constexpr static const auto kUserAbort = "user_abort";
+  constexpr static const auto kUnknown = "user_unknown";
+};
+
+class ConfUiMessage {
+ public:
+  ConfUiMessage(const std::string& session_id) : session_id_{session_id} {}
+  virtual ~ConfUiMessage() = default;
+  virtual std::string ToString() const = 0;
+  void SetSessionId(const std::string session_id) { session_id_ = session_id; }
+  std::string GetSessionId() const { return session_id_; }
+  virtual ConfUiCmd GetType() const = 0;
+  virtual bool SendOver(SharedFD fd) = 0;
+
+ protected:
+  std::string session_id_;
+  template <typename... Args>
+  static std::string CreateString(Args&&... args) {
+    return "[" + ArgsToStringWithDelim(",", std::forward<Args>(args)...) + "]";
+  }
+  template <typename... Args>
+  static bool Send_(SharedFD fd, const ConfUiCmd cmd,
+                    const std::string& session_id, Args&&... args) {
+    return packet::WritePayload(fd, confui::ToString(cmd), session_id,
+                                std::forward<Args>(args)...);
+  }
+};
+
+template <ConfUiCmd cmd>
+class ConfUiGenericMessage : public ConfUiMessage {
+ public:
+  ConfUiGenericMessage(const std::string& session_id)
+      : ConfUiMessage{session_id} {}
+  virtual ~ConfUiGenericMessage() = default;
+  std::string ToString() const override {
+    return CreateString(session_id_, confui::ToString(GetType()));
+  }
+  ConfUiCmd GetType() const override { return cmd; }
+  bool SendOver(SharedFD fd) override {
+    return Send_(fd, GetType(), session_id_);
+  }
+};
+
+class ConfUiAckMessage : public ConfUiMessage {
+ public:
+  ConfUiAckMessage(const std::string& session_id, const bool is_success,
+                   const std::string& status)
+      : ConfUiMessage{session_id},
+        is_success_(is_success),
+        status_message_(status) {}
+  virtual ~ConfUiAckMessage() = default;
+  std::string ToString() const override;
+  ConfUiCmd GetType() const override { return ConfUiCmd::kCliAck; }
+  bool SendOver(SharedFD fd) override;
+  bool IsSuccess() const { return is_success_; }
+  std::string GetStatusMessage() const { return status_message_; }
+
+ private:
+  bool is_success_;
+  std::string status_message_;
+};
+
+// the signed user response sent to the guest
+class ConfUiCliResponseMessage : public ConfUiMessage {
+ public:
+  ConfUiCliResponseMessage(const std::string& session_id,
+                           const UserResponse::type& response,
+                           const std::vector<std::uint8_t>& sign = {},
+                           const std::vector<std::uint8_t>& msg = {})
+      : ConfUiMessage(session_id),
+        response_(response),
+        sign_(sign),
+        message_{msg} {}
+  virtual ~ConfUiCliResponseMessage() = default;
+  std::string ToString() const override;
+  ConfUiCmd GetType() const override { return ConfUiCmd::kCliRespond; }
+  auto GetResponse() const { return response_; }
+  auto GetMessage() const { return message_; }
+  auto GetSign() const { return sign_; }
+  bool SendOver(SharedFD fd) override;
+
+ private:
+  UserResponse::type response_;     // plain format
+  std::vector<std::uint8_t> sign_;  // signed format
+  // second argument to pass via resultCB of promptUserConfirmation
+  std::vector<std::uint8_t> message_;
+};
+
+class ConfUiStartMessage : public ConfUiMessage {
+ public:
+  ConfUiStartMessage(const std::string session_id,
+                     const std::string& prompt_text = "",
+                     const std::vector<std::uint8_t>& extra_data = {},
+                     const std::string& locale = "C",
+                     const std::vector<teeui::UIOption> ui_opts = {})
+      : ConfUiMessage(session_id),
+        prompt_text_(prompt_text),
+        extra_data_(extra_data),
+        locale_(locale),
+        ui_opts_(ui_opts) {}
+  virtual ~ConfUiStartMessage() = default;
+  std::string ToString() const override;
+  ConfUiCmd GetType() const override { return ConfUiCmd::kStart; }
+  std::string GetPromptText() const { return prompt_text_; }
+  std::vector<std::uint8_t> GetExtraData() const { return extra_data_; }
+  std::string GetLocale() const { return locale_; }
+  std::vector<teeui::UIOption> GetUiOpts() const { return ui_opts_; }
+  bool SendOver(SharedFD fd) override;
+
+ private:
+  std::string prompt_text_;
+  std::vector<std::uint8_t> extra_data_;
+  std::string locale_;
+  std::vector<teeui::UIOption> ui_opts_;
+
+  std::string UiOptsToString() const;
+};
+
+// this one is for deliverSecureInputEvent() as well as
+// physical-input based implementation
+class ConfUiUserSelectionMessage : public ConfUiMessage {
+ public:
+  ConfUiUserSelectionMessage(const std::string& session_id,
+                             const UserResponse::type& response)
+      : ConfUiMessage(session_id), response_(response) {}
+  virtual ~ConfUiUserSelectionMessage() = default;
+  std::string ToString() const override;
+  ConfUiCmd GetType() const override { return ConfUiCmd::kUserInputEvent; }
+  auto GetResponse() const { return response_; }
+  bool SendOver(SharedFD fd) override;
+
+ private:
+  UserResponse::type response_;
+};
+
+class ConfUiUserTouchMessage : public ConfUiMessage {
+ public:
+  ConfUiUserTouchMessage(const std::string& session_id, const int x,
+                         const int y)
+      : ConfUiMessage(session_id),
+        x_(x),
+        y_(y),
+        response_(UserResponse::kTouchEvent) {}
+  virtual ~ConfUiUserTouchMessage() = default;
+  std::string ToString() const override;
+  ConfUiCmd GetType() const override { return ConfUiCmd::kUserTouchEvent; }
+  auto GetResponse() const { return response_; }
+  bool SendOver(SharedFD fd) override;
+  std::pair<int, int> GetLocation() { return {x_, y_}; }
+
+ private:
+  int x_;
+  int y_;
+  UserResponse::type response_;
+};
+
+using ConfUiAbortMessage = ConfUiGenericMessage<ConfUiCmd::kAbort>;
+using ConfUiStopMessage = ConfUiGenericMessage<ConfUiCmd::kStop>;
+
+}  // end of namespace confui
+}  // end of namespace cuttlefish
diff --git a/common/libs/confui/utils.h b/common/libs/confui/utils.h
index 2e4ac04..1f3814f 100644
--- a/common/libs/confui/utils.h
+++ b/common/libs/confui/utils.h
@@ -15,6 +15,7 @@
 
 #pragma once
 
+#include <algorithm>
 #include <sstream>
 #include <string>
 #include <type_traits>
@@ -35,7 +36,14 @@
 std::string ArgsToStringWithDelim(Delim&& delim, Args&&... args) {
   std::stringstream ss;
   ([&ss, &delim](auto& arg) { ss << arg << delim; }(args), ...);
-  return ss.str();
+  auto result = ss.str();
+  std::string delim_str(delim);
+  if (!result.empty() && !delim_str.empty()) {
+    for (int i = 0; i < delim_str.size(); i++) {
+      result.pop_back();
+    }
+  }
+  return result;
 }
 
 // make t... to a single string with no blank in between
@@ -44,6 +52,11 @@
   return ArgsToStringWithDelim("", std::forward<Args>(args)...);
 }
 
+inline bool IsOnlyDigits(const std::string& src) {
+  return std::all_of(src.begin(), src.end(),
+                     [](int c) -> bool { return std::isdigit(c); });
+}
+
 // note that no () surrounding LOG(level) << "ConfUI:" is crucial
 #define ConfUiLog(LOG_LEVEL) LOG(LOG_LEVEL) << "ConfUI: "
 
diff --git a/common/libs/fs/shared_buf.cc b/common/libs/fs/shared_buf.cc
index 61ff51e..f4b24dd 100644
--- a/common/libs/fs/shared_buf.cc
+++ b/common/libs/fs/shared_buf.cc
@@ -33,32 +33,34 @@
 ssize_t WriteAll(SharedFD fd, const char* buf, size_t size) {
   size_t total_written = 0;
   ssize_t written = 0;
-  while ((written = fd->Write((void*)&(buf[total_written]), size - total_written)) > 0) {
-    if (written < 0) {
-      errno = fd->GetErrno();
-      return written;
+  do {
+    written = fd->Write((void*)&(buf[total_written]), size - total_written);
+    if (written <= 0) {
+      if (written < 0) {
+        errno = fd->GetErrno();
+        return written;
+      }
+      return total_written;
     }
     total_written += written;
-    if (total_written == size) {
-      break;
-    }
-  }
+  } while (total_written < size);
   return total_written;
 }
 
 ssize_t ReadExact(SharedFD fd, char* buf, size_t size) {
   size_t total_read = 0;
   ssize_t read = 0;
-  while ((read = fd->Read((void*)&(buf[total_read]), size - total_read)) > 0) {
-    if (read < 0) {
-      errno = fd->GetErrno();
-      return read;
+  do {
+    read = fd->Read((void*)&(buf[total_read]), size - total_read);
+    if (read <= 0) {
+      if (read < 0) {
+        errno = fd->GetErrno();
+        return read;
+      }
+      return total_read;
     }
     total_read += read;
-    if (total_read == size) {
-      break;
-    }
-  }
+  } while (total_read < size);
   return total_read;
 }
 
diff --git a/common/libs/fs/shared_buf.h b/common/libs/fs/shared_buf.h
index eb63174..f1a02c2 100644
--- a/common/libs/fs/shared_buf.h
+++ b/common/libs/fs/shared_buf.h
@@ -30,6 +30,7 @@
  *
  * If a read error is encountered, returns -1. buf will contain any data read
  * up until that point and errno will be set.
+ *
  */
 ssize_t ReadAll(SharedFD fd, std::string* buf);
 
@@ -40,6 +41,11 @@
  *
  * If a read error is encountered, returns -1. buf will contain any data read
  * up until that point and errno will be set.
+ *
+ * If the size of buf is 0, read(fd, buf, 0) is effectively called, which means
+ * error(s) might be detected. If detected, the return value would be -1.
+ * If not detected, the return value will be 0.
+ *
  */
 ssize_t ReadExact(SharedFD fd, std::string* buf);
 
@@ -50,6 +56,11 @@
  *
  * If a read error is encountered, returns -1. buf will contain any data read
  * up until that point and errno will be set.
+ *
+ * If the size of buf is 0, read(fd, buf, 0) is effectively called, which means
+ * error(s) might be detected. If detected, the return value would be -1.
+ * If not detected, the return value will be 0.
+ *
  */
 ssize_t ReadExact(SharedFD fd, std::vector<char>* buf);
 
@@ -60,6 +71,11 @@
  *
  * If a read error is encountered, returns -1. buf will contain any data read
  * up until that point and errno will be set.
+ *
+ * When the size is 0, read(fd, buf, 0) is effectively called, which means
+ * error(s) might be detected. If detected, the return value would be -1.
+ * If not detected, the return value will be 0.
+ *
  */
 ssize_t ReadExact(SharedFD fd, char* buf, size_t size);
 
@@ -83,6 +99,12 @@
  *
  * If a write error is encountered, returns -1. Some data may have already been
  * written to fd at that point.
+ *
+ * If the size of buf is 0, WriteAll returns 0 with no error set unless
+ * the fd is a regular file. If fd is a regular file, write(fd, buf, 0) is
+ * effectively called. It may detect errors; if detected, errno is set and
+ * -1 is returned. If not detected, 0 is returned with errno unchanged.
+ *
  */
 ssize_t WriteAll(SharedFD fd, const std::string& buf);
 
@@ -93,6 +115,12 @@
  *
  * If a write error is encountered, returns -1. Some data may have already been
  * written to fd at that point.
+ *
+ * If the size of buf is 0, WriteAll returns 0 with no error set unless
+ * the fd is a regular file. If fd is a regular file, write(fd, buf, 0) is
+ * effectively called. It may detect errors; if detected, errno is set and
+ * -1 is returned. If not detected, 0 is returned with errno unchanged.
+ *
  */
 ssize_t WriteAll(SharedFD fd, const std::vector<char>& buf);
 
@@ -103,6 +131,12 @@
  *
  * If a write error is encountered, returns -1. Some data may have already been
  * written to fd at that point.
+ *
+ * If size is 0, WriteAll returns 0 with no error set unless
+ * the fd is a regular file. If fd is a regular file, write(fd, buf, 0) is
+ * effectively called. It may detect errors; if detected, errno is set and
+ * -1 is returned. If not detected, 0 is returned with errno unchanged.
+ *
  */
 ssize_t WriteAll(SharedFD fd, const char* buf, size_t size);
 
@@ -113,6 +147,12 @@
  *
  * If a write error is encountered, returns -1. Some data may have already been
  * written to fd at that point.
+ *
+ * If ever sizeof(T) is 0, WriteAll returns 0 with no error set unless
+ * the fd is a regular file. If fd is a regular file, write(fd, buf, 0) is
+ * effectively called. It may detect errors; if detected, errno is set and
+ * -1 is returned. If not detected, 0 is returned with errno unchanged.
+ *
  */
 template<typename T>
 ssize_t WriteAllBinary(SharedFD fd, const T* binary_data) {
diff --git a/common/libs/fs/shared_fd.cpp b/common/libs/fs/shared_fd.cpp
index b770a38..8723d8f 100644
--- a/common/libs/fs/shared_fd.cpp
+++ b/common/libs/fs/shared_fd.cpp
@@ -83,6 +83,14 @@
 #endif
 }
 
+bool IsRegularFile(const int fd) {
+  struct stat info;
+  if (fstat(fd, &info) < 0) {
+    return false;
+  }
+  return S_ISREG(info.st_mode);
+}
+
 }  // namespace
 
 bool FileInstance::CopyFrom(FileInstance& in, size_t length) {
@@ -310,6 +318,21 @@
   return SharedFD::Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode);
 }
 
+SharedFD SharedFD::Fifo(const std::string& path, mode_t mode) {
+  struct stat st;
+  if (TEMP_FAILURE_RETRY(stat(path.c_str(), &st)) == 0) {
+    if (TEMP_FAILURE_RETRY(remove(path.c_str())) != 0) {
+      return ErrorFD(errno);
+    }
+  }
+
+  int fd = TEMP_FAILURE_RETRY(mkfifo(path.c_str(), mode));
+  if (fd == -1) {
+    return ErrorFD(errno);
+  }
+  return Open(path, mode);
+}
+
 SharedFD SharedFD::Socket(int domain, int socket_type, int protocol) {
   int fd = TEMP_FAILURE_RETRY(socket(domain, socket_type, protocol));
   if (fd == -1) {
@@ -455,12 +478,14 @@
   addr.svm_cid = cid;
   auto casted_addr = reinterpret_cast<sockaddr*>(&addr);
   if (vsock->Bind(casted_addr, sizeof(addr)) == -1) {
-    LOG(ERROR) << "Bind failed (" << vsock->StrError() << ")";
+    LOG(ERROR) << "Port " << port << " Bind failed (" << vsock->StrError()
+               << ")";
     return SharedFD::ErrorFD(vsock->GetErrno());
   }
   if (type == SOCK_STREAM || type == SOCK_SEQPACKET) {
     if (vsock->Listen(4) < 0) {
-      LOG(ERROR) << "Listen failed (" << vsock->StrError() << ")";
+      LOG(ERROR) << "Port" << port << " Listen failed (" << vsock->StrError()
+                 << ")";
       return SharedFD::ErrorFD(vsock->GetErrno());
     }
   }
@@ -511,4 +536,233 @@
   }
 }
 
+/* static */ std::shared_ptr<FileInstance> FileInstance::ClosedInstance() {
+  return std::shared_ptr<FileInstance>(new FileInstance(-1, EBADF));
+}
+
+int FileInstance::Bind(const struct sockaddr* addr, socklen_t addrlen) {
+  errno = 0;
+  int rval = bind(fd_, addr, addrlen);
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::Connect(const struct sockaddr* addr, socklen_t addrlen) {
+  errno = 0;
+  int rval = connect(fd_, addr, addrlen);
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::UNMANAGED_Dup() {
+  errno = 0;
+  int rval = TEMP_FAILURE_RETRY(dup(fd_));
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::UNMANAGED_Dup2(int newfd) {
+  errno = 0;
+  int rval = TEMP_FAILURE_RETRY(dup2(fd_, newfd));
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::Fcntl(int command, int value) {
+  errno = 0;
+  int rval = TEMP_FAILURE_RETRY(fcntl(fd_, command, value));
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::GetSockName(struct sockaddr* addr, socklen_t* addrlen) {
+  errno = 0;
+  int rval = TEMP_FAILURE_RETRY(getsockname(fd_, addr, addrlen));
+  if (rval == -1) {
+    errno_ = errno;
+  }
+  return rval;
+}
+
+unsigned int FileInstance::VsockServerPort() {
+  struct sockaddr_vm vm_socket;
+  socklen_t length = sizeof(vm_socket);
+  GetSockName(reinterpret_cast<struct sockaddr*>(&vm_socket), &length);
+  return vm_socket.svm_port;
+}
+
+int FileInstance::Ioctl(int request, void* val) {
+  errno = 0;
+  int rval = TEMP_FAILURE_RETRY(ioctl(fd_, request, val));
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::LinkAtCwd(const std::string& path) {
+  std::string name = "/proc/self/fd/";
+  name += std::to_string(fd_);
+  errno = 0;
+  int rval =
+      linkat(-1, name.c_str(), AT_FDCWD, path.c_str(), AT_SYMLINK_FOLLOW);
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::Listen(int backlog) {
+  errno = 0;
+  int rval = listen(fd_, backlog);
+  errno_ = errno;
+  return rval;
+}
+
+off_t FileInstance::LSeek(off_t offset, int whence) {
+  errno = 0;
+  off_t rval = TEMP_FAILURE_RETRY(lseek(fd_, offset, whence));
+  errno_ = errno;
+  return rval;
+}
+
+ssize_t FileInstance::Recv(void* buf, size_t len, int flags) {
+  errno = 0;
+  ssize_t rval = TEMP_FAILURE_RETRY(recv(fd_, buf, len, flags));
+  errno_ = errno;
+  return rval;
+}
+
+ssize_t FileInstance::RecvMsg(struct msghdr* msg, int flags) {
+  errno = 0;
+  ssize_t rval = TEMP_FAILURE_RETRY(recvmsg(fd_, msg, flags));
+  errno_ = errno;
+  return rval;
+}
+
+ssize_t FileInstance::Read(void* buf, size_t count) {
+  errno = 0;
+  ssize_t rval = TEMP_FAILURE_RETRY(read(fd_, buf, count));
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::EventfdRead(eventfd_t* value) {
+  errno = 0;
+  auto rval = eventfd_read(fd_, value);
+  errno_ = errno;
+  return rval;
+}
+
+ssize_t FileInstance::Send(const void* buf, size_t len, int flags) {
+  errno = 0;
+  ssize_t rval = TEMP_FAILURE_RETRY(send(fd_, buf, len, flags));
+  errno_ = errno;
+  return rval;
+}
+
+ssize_t FileInstance::SendMsg(const struct msghdr* msg, int flags) {
+  errno = 0;
+  ssize_t rval = TEMP_FAILURE_RETRY(sendmsg(fd_, msg, flags));
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::Shutdown(int how) {
+  errno = 0;
+  int rval = shutdown(fd_, how);
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::SetSockOpt(int level, int optname, const void* optval,
+                             socklen_t optlen) {
+  errno = 0;
+  int rval = setsockopt(fd_, level, optname, optval, optlen);
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::GetSockOpt(int level, int optname, void* optval,
+                             socklen_t* optlen) {
+  errno = 0;
+  int rval = getsockopt(fd_, level, optname, optval, optlen);
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::SetTerminalRaw() {
+  errno = 0;
+  termios terminal_settings;
+  int rval = tcgetattr(fd_, &terminal_settings);
+  errno_ = errno;
+  if (rval < 0) {
+    return rval;
+  }
+  cfmakeraw(&terminal_settings);
+  rval = tcsetattr(fd_, TCSANOW, &terminal_settings);
+  errno_ = errno;
+  return rval;
+}
+
+std::string FileInstance::StrError() const {
+  errno = 0;
+  return std::string(strerror(errno_));
+}
+
+ScopedMMap FileInstance::MMap(void* addr, size_t length, int prot, int flags,
+                              off_t offset) {
+  errno = 0;
+  auto ptr = mmap(addr, length, prot, flags, fd_, offset);
+  errno_ = errno;
+  return ScopedMMap(ptr, length);
+}
+
+ssize_t FileInstance::Truncate(off_t length) {
+  errno = 0;
+  ssize_t rval = TEMP_FAILURE_RETRY(ftruncate(fd_, length));
+  errno_ = errno;
+  return rval;
+}
+
+ssize_t FileInstance::Write(const void* buf, size_t count) {
+  if (count == 0 && !IsRegular()) {
+    return 0;
+  }
+  errno = 0;
+  ssize_t rval = TEMP_FAILURE_RETRY(write(fd_, buf, count));
+  errno_ = errno;
+  return rval;
+}
+
+int FileInstance::EventfdWrite(eventfd_t value) {
+  errno = 0;
+  int rval = eventfd_write(fd_, value);
+  errno_ = errno;
+  return rval;
+}
+
+bool FileInstance::IsATTY() {
+  errno = 0;
+  int rval = isatty(fd_);
+  errno_ = errno;
+  return rval;
+}
+
+FileInstance::FileInstance(int fd, int in_errno)
+    : fd_(fd), errno_(in_errno), is_regular_file_(IsRegularFile(fd_)) {
+  // Ensure every file descriptor managed by a FileInstance has the CLOEXEC
+  // flag
+  TEMP_FAILURE_RETRY(fcntl(fd, F_SETFD, FD_CLOEXEC));
+  std::stringstream identity;
+  identity << "fd=" << fd << " @" << this;
+  identity_ = identity.str();
+}
+
+FileInstance* FileInstance::Accept(struct sockaddr* addr,
+                                   socklen_t* addrlen) const {
+  int fd = TEMP_FAILURE_RETRY(accept(fd_, addr, addrlen));
+  if (fd == -1) {
+    return new FileInstance(fd, errno);
+  } else {
+    return new FileInstance(fd, 0);
+  }
+}
+
 }  // namespace cuttlefish
diff --git a/common/libs/fs/shared_fd.h b/common/libs/fs/shared_fd.h
index 114d199..da9d2fd 100644
--- a/common/libs/fs/shared_fd.h
+++ b/common/libs/fs/shared_fd.h
@@ -126,6 +126,7 @@
   // Fcntl or Dup functions.
   static SharedFD Open(const std::string& pathname, int flags, mode_t mode = 0);
   static SharedFD Creat(const std::string& pathname, mode_t mode);
+  static SharedFD Fifo(const std::string& pathname, mode_t mode);
   static bool Pipe(SharedFD* fd0, SharedFD* fd1);
   static SharedFD Event(int initval = 0, int flags = 0);
   static SharedFD MemfdCreate(const std::string& name, unsigned int flags = 0);
@@ -232,27 +233,12 @@
   virtual ~FileInstance() { Close(); }
 
   // This can't be a singleton because our shared_ptr's aren't thread safe.
-  static std::shared_ptr<FileInstance> ClosedInstance() {
-    return std::shared_ptr<FileInstance>(new FileInstance(-1, EBADF));
-  }
+  static std::shared_ptr<FileInstance> ClosedInstance();
 
-  int Bind(const struct sockaddr* addr, socklen_t addrlen) {
-    errno = 0;
-    int rval = bind(fd_, addr, addrlen);
-    errno_ = errno;
-    return rval;
-  }
-
-  int Connect(const struct sockaddr* addr, socklen_t addrlen) {
-    errno = 0;
-    int rval = connect(fd_, addr, addrlen);
-    errno_ = errno;
-    return rval;
-  }
-
+  int Bind(const struct sockaddr* addr, socklen_t addrlen);
+  int Connect(const struct sockaddr* addr, socklen_t addrlen);
   int ConnectWithTimeout(const struct sockaddr* addr, socklen_t addrlen,
                          struct timeval* timeout);
-
   void Close();
 
   // Returns true if the entire input was copied.
@@ -261,57 +247,24 @@
   // reference type.
   bool CopyFrom(FileInstance& in, size_t length);
 
-  int UNMANAGED_Dup() {
-    errno = 0;
-    int rval = TEMP_FAILURE_RETRY(dup(fd_));
-    errno_ = errno;
-    return rval;
-  }
-
-  int UNMANAGED_Dup2(int newfd) {
-    errno = 0;
-    int rval = TEMP_FAILURE_RETRY(dup2(fd_, newfd));
-    errno_ = errno;
-    return rval;
-  }
-
-  int Fcntl(int command, int value) {
-    errno = 0;
-    int rval = TEMP_FAILURE_RETRY(fcntl(fd_, command, value));
-    errno_ = errno;
-    return rval;
-  }
+  int UNMANAGED_Dup();
+  int UNMANAGED_Dup2(int newfd);
+  int Fcntl(int command, int value);
 
   int GetErrno() const { return errno_; }
+  int GetSockName(struct sockaddr* addr, socklen_t* addrlen);
 
-  int GetSockName(struct sockaddr* addr, socklen_t* addrlen) {
-    errno = 0;
-    int rval = TEMP_FAILURE_RETRY(getsockname(fd_, addr, addrlen));
-    if (rval == -1) {
-      errno_ = errno;
-    }
-    return rval;
-  }
+  unsigned int VsockServerPort();
 
-  unsigned int VsockServerPort() {
-    struct sockaddr_vm vm_socket;
-    socklen_t length = sizeof(vm_socket);
-    GetSockName(reinterpret_cast<struct sockaddr*>(&vm_socket), &length);
-    return vm_socket.svm_port;
-  }
-
-  int Ioctl(int request, void* val = nullptr) {
-    errno = 0;
-    int rval = TEMP_FAILURE_RETRY(ioctl(fd_, request, val));
-    errno_ = errno;
-    return rval;
-  }
-
+  int Ioctl(int request, void* val = nullptr);
   bool IsOpen() const { return fd_ != -1; }
 
   // in probably isn't modified, but the API spec doesn't have const.
   bool IsSet(fd_set* in) const;
 
+  // whether this is a regular file or not
+  bool IsRegular() const { return is_regular_file_; }
+
   /**
    * Adds a hard link to a file descriptor, based on the current working
    * directory of the process or to some absolute path.
@@ -321,73 +274,16 @@
    * Using this on a file opened with O_TMPFILE can link it into the filesystem.
    */
   // Used with O_TMPFILE files to attach them to the filesystem.
-  int LinkAtCwd(const std::string& path) {
-    std::string name = "/proc/self/fd/";
-    name += std::to_string(fd_);
-    errno = 0;
-    int rval = linkat(
-        -1, name.c_str(), AT_FDCWD, path.c_str(), AT_SYMLINK_FOLLOW);
-    errno_ = errno;
-    return rval;
-  }
-
-  int Listen(int backlog) {
-    errno = 0;
-    int rval = listen(fd_, backlog);
-    errno_ = errno;
-    return rval;
-  }
-
+  int LinkAtCwd(const std::string& path);
+  int Listen(int backlog);
   static void Log(const char* message);
-
-  off_t LSeek(off_t offset, int whence) {
-    errno = 0;
-    off_t rval = TEMP_FAILURE_RETRY(lseek(fd_, offset, whence));
-    errno_ = errno;
-    return rval;
-  }
-
-  ssize_t Recv(void* buf, size_t len, int flags) {
-    errno = 0;
-    ssize_t rval = TEMP_FAILURE_RETRY(recv(fd_, buf, len, flags));
-    errno_ = errno;
-    return rval;
-  }
-
-  ssize_t RecvMsg(struct msghdr* msg, int flags) {
-    errno = 0;
-    ssize_t rval = TEMP_FAILURE_RETRY(recvmsg(fd_, msg, flags));
-    errno_ = errno;
-    return rval;
-  }
-
-  ssize_t Read(void* buf, size_t count) {
-    errno = 0;
-    ssize_t rval = TEMP_FAILURE_RETRY(read(fd_, buf, count));
-    errno_ = errno;
-    return rval;
-  }
-
-  int EventfdRead(eventfd_t* value) {
-    errno = 0;
-    auto rval = eventfd_read(fd_, value);
-    errno_ = errno;
-    return rval;
-  }
-
-  ssize_t Send(const void* buf, size_t len, int flags) {
-    errno = 0;
-    ssize_t rval = TEMP_FAILURE_RETRY(send(fd_, buf, len, flags));
-    errno_ = errno;
-    return rval;
-  }
-
-  ssize_t SendMsg(const struct msghdr* msg, int flags) {
-    errno = 0;
-    ssize_t rval = TEMP_FAILURE_RETRY(sendmsg(fd_, msg, flags));
-    errno_ = errno;
-    return rval;
-  }
+  off_t LSeek(off_t offset, int whence);
+  ssize_t Recv(void* buf, size_t len, int flags);
+  ssize_t RecvMsg(struct msghdr* msg, int flags);
+  ssize_t Read(void* buf, size_t count);
+  int EventfdRead(eventfd_t* value);
+  ssize_t Send(const void* buf, size_t len, int flags);
+  ssize_t SendMsg(const struct msghdr* msg, int flags);
 
   template <typename... Args>
   ssize_t SendFileDescriptors(const void* buf, size_t len, Args&&... sent_fds) {
@@ -399,118 +295,34 @@
     return ret;
   }
 
-  int Shutdown(int how) {
-    errno = 0;
-    int rval = shutdown(fd_, how);
-    errno_ = errno;
-    return rval;
-  }
-
+  int Shutdown(int how);
   void Set(fd_set* dest, int* max_index) const;
-
-  int SetSockOpt(int level, int optname, const void* optval, socklen_t optlen) {
-    errno = 0;
-    int rval = setsockopt(fd_, level, optname, optval, optlen);
-    errno_ = errno;
-    return rval;
-  }
-
-  int GetSockOpt(int level, int optname, void* optval, socklen_t* optlen) {
-    errno = 0;
-    int rval = getsockopt(fd_, level, optname, optval, optlen);
-    errno_ = errno;
-    return rval;
-  }
-
-  int SetTerminalRaw() {
-    errno = 0;
-    termios terminal_settings;
-    int rval = tcgetattr(fd_, &terminal_settings);
-    errno_ = errno;
-    if (rval < 0) {
-      return rval;
-    }
-    cfmakeraw(&terminal_settings);
-    rval = tcsetattr(fd_, TCSANOW, &terminal_settings);
-    errno_ = errno;
-    return rval;
-  }
-
-  const char* StrError() const {
-    errno = 0;
-    FileInstance* s = const_cast<FileInstance*>(this);
-    char* out = strerror_r(errno_, s->strerror_buf_, sizeof(strerror_buf_));
-
-    // From man page:
-    //  strerror_r() returns a pointer to a string containing the error message.
-    //  This may be either a pointer to a string that the function stores in
-    //  buf, or a pointer to some (immutable) static string (in which case buf
-    //  is unused).
-    if (out != s->strerror_buf_) {
-      strncpy(s->strerror_buf_, out, sizeof(strerror_buf_));
-    }
-    return strerror_buf_;
-  }
-
-  ScopedMMap MMap(void* addr, size_t length, int prot, int flags,
-                  off_t offset) {
-    errno = 0;
-    auto ptr = mmap(addr, length, prot, flags, fd_, offset);
-    errno_ = errno;
-    return ScopedMMap(ptr, length);
-  }
-
-  ssize_t Truncate(off_t length) {
-    errno = 0;
-    ssize_t rval = TEMP_FAILURE_RETRY(ftruncate(fd_, length));
-    errno_ = errno;
-    return rval;
-  }
-
-  ssize_t Write(const void* buf, size_t count) {
-    errno = 0;
-    ssize_t rval = TEMP_FAILURE_RETRY(write(fd_, buf, count));
-    errno_ = errno;
-    return rval;
-  }
-
-  int EventfdWrite(eventfd_t value) {
-    errno = 0;
-    int rval = eventfd_write(fd_, value);
-    errno_ = errno;
-    return rval;
-  }
-
-  bool IsATTY() {
-    errno = 0;
-    int rval = isatty(fd_);
-    errno_ = errno;
-    return rval;
-  }
+  int SetSockOpt(int level, int optname, const void* optval, socklen_t optlen);
+  int GetSockOpt(int level, int optname, void* optval, socklen_t* optlen);
+  int SetTerminalRaw();
+  std::string StrError() const;
+  ScopedMMap MMap(void* addr, size_t length, int prot, int flags, off_t offset);
+  ssize_t Truncate(off_t length);
+  /*
+   * If the file is a regular file and the count is 0, Write() may detect
+   * error(s) by calling write(fd, buf, 0) declared in <unistd.h>. If detected,
+   * it will return -1. If not, 0 will be returned. For non-regular files such
+   * as socket or pipe, write(fd, buf, 0) is not specified. Write(), however,
+   * will do nothing and just return 0.
+   *
+   */
+  ssize_t Write(const void* buf, size_t count);
+  int EventfdWrite(eventfd_t value);
+  bool IsATTY();
 
  private:
-  FileInstance(int fd, int in_errno) : fd_(fd), errno_(in_errno) {
-    // Ensure every file descriptor managed by a FileInstance has the CLOEXEC
-    // flag
-    TEMP_FAILURE_RETRY(fcntl(fd, F_SETFD, FD_CLOEXEC));
-    std::stringstream identity;
-    identity << "fd=" << fd << " @" << this;
-    identity_ = identity.str();
-  }
-
-  FileInstance* Accept(struct sockaddr* addr, socklen_t* addrlen) const {
-    int fd = TEMP_FAILURE_RETRY(accept(fd_, addr, addrlen));
-    if (fd == -1) {
-      return new FileInstance(fd, errno);
-    } else {
-      return new FileInstance(fd, 0);
-    }
-  }
+  FileInstance(int fd, int in_errno);
+  FileInstance* Accept(struct sockaddr* addr, socklen_t* addrlen) const;
 
   int fd_;
   int errno_;
   std::string identity_;
-  char strerror_buf_[160];
+  bool is_regular_file_;
 };
 
 /* Methods that need both a fully defined SharedFD and a fully defined
diff --git a/common/libs/net/netlink_client.cpp b/common/libs/net/netlink_client.cpp
index 7b2404f..b245f7e 100644
--- a/common/libs/net/netlink_client.cpp
+++ b/common/libs/net/netlink_client.cpp
@@ -54,9 +54,14 @@
   char buf[4096];
   struct iovec iov = { buf, sizeof(buf) };
   struct sockaddr_nl sa;
-  struct msghdr msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
+  struct msghdr msg {};
   struct nlmsghdr *nh;
 
+  msg.msg_name = &sa;
+  msg.msg_namelen = sizeof(sa);
+  msg.msg_iov = &iov;
+  msg.msg_iovlen = 1;
+
   int result = netlink_fd_->RecvMsg(&msg, 0);
   if (result  < 0) {
     LOG(ERROR) << "Netlink error: " << strerror(errno);
diff --git a/common/libs/security/keymaster_channel.cpp b/common/libs/security/keymaster_channel.cpp
index 7b3ab86..cfc427b 100644
--- a/common/libs/security/keymaster_channel.cpp
+++ b/common/libs/security/keymaster_channel.cpp
@@ -25,7 +25,7 @@
 
 ManagedKeymasterMessage CreateKeymasterMessage(
     AndroidKeymasterCommand command, bool is_response, size_t payload_size) {
-  auto memory = new uint8_t[payload_size + sizeof(keymaster_message)];
+  auto memory = std::malloc(payload_size + sizeof(keymaster_message));
   auto message = reinterpret_cast<keymaster_message*>(memory);
   message->cmd = command;
   message->is_response = is_response;
@@ -37,7 +37,7 @@
   {
     keymaster::Eraser(ptr, sizeof(keymaster_message) + ptr->payload_size);
   }
-  delete reinterpret_cast<uint8_t*>(ptr);
+  std::free(ptr);
 }
 
 KeymasterChannel::KeymasterChannel(SharedFD input, SharedFD output)
diff --git a/common/libs/time/monotonic_time.h b/common/libs/time/monotonic_time.h
deleted file mode 100644
index 2839001..0000000
--- a/common/libs/time/monotonic_time.h
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * 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.
- */
-#pragma once
-
-#include <stdint.h>
-#include <time.h>
-
-namespace cuttlefish {
-namespace time {
-
-static const int64_t kNanosecondsPerSecond = 1000000000;
-
-class TimeDifference {
- public:
-  TimeDifference(time_t seconds, long nanoseconds, int64_t scale) :
-      scale_(scale), truncated_(false) {
-    ts_.tv_sec = seconds;
-    ts_.tv_nsec = nanoseconds;
-    if (scale_ == kNanosecondsPerSecond) {
-      truncated_ = true;
-      truncated_ns_ = 0;
-    }
-  }
-
-  TimeDifference(const TimeDifference& in, int64_t scale) :
-      scale_(scale), truncated_(false) {
-    ts_ = in.GetTS();
-    if (scale_ == kNanosecondsPerSecond) {
-      truncated_ = true;
-      truncated_ns_ = 0;
-    } else if ((in.scale_ % scale_) == 0) {
-      truncated_ = true;
-      truncated_ns_ = ts_.tv_nsec;
-    }
-  }
-
-  TimeDifference(const struct timespec& in, int64_t scale) :
-      ts_(in), scale_(scale), truncated_(false) { }
-
-  TimeDifference operator*(const uint32_t factor) {
-    TimeDifference rval = *this;
-    rval.ts_.tv_sec = ts_.tv_sec * factor;
-    // Create temporary variable to hold the multiplied
-    // nanoseconds so that no overflow is possible.
-    // Nanoseconds must be in [0, 10^9) and so all are less
-    // then 2^30. Even multiplied by the largest uint32
-    // this will fit in a 64-bit int without overflow.
-    int64_t tv_nsec = static_cast<int64_t>(ts_.tv_nsec) * factor;
-    rval.ts_.tv_sec += (tv_nsec / kNanosecondsPerSecond);
-    rval.ts_.tv_nsec = tv_nsec % kNanosecondsPerSecond;
-    return rval;
-  }
-
-  TimeDifference operator+(const TimeDifference& other) const {
-    struct timespec ret = ts_;
-    ret.tv_nsec = (ts_.tv_nsec + other.ts_.tv_nsec) % 1000000000;
-    ret.tv_sec = (ts_.tv_sec + other.ts_.tv_sec) +
-                  (ts_.tv_nsec + other.ts_.tv_nsec) / 1000000000;
-    return TimeDifference(ret, scale_ < other.scale_ ? scale_: other.scale_);
-  }
-
-  TimeDifference operator-(const TimeDifference& other) const {
-    struct timespec ret = ts_;
-    // Keeps nanoseconds positive and allow negative numbers only on
-    // seconds.
-    ret.tv_nsec = (1000000000 + ts_.tv_nsec - other.ts_.tv_nsec) % 1000000000;
-    ret.tv_sec = (ts_.tv_sec - other.ts_.tv_sec) -
-                  (ts_.tv_nsec < other.ts_.tv_nsec ? 1 : 0);
-    return TimeDifference(ret, scale_ < other.scale_ ? scale_: other.scale_);
-  }
-
-  bool operator<(const TimeDifference& other) const {
-    return ts_.tv_sec < other.ts_.tv_sec ||
-           (ts_.tv_sec == other.ts_.tv_sec && ts_.tv_nsec < other.ts_.tv_nsec);
-  }
-
-  int64_t count() const {
-    return ts_.tv_sec * (kNanosecondsPerSecond / scale_) + ts_.tv_nsec / scale_;
-  }
-
-  time_t seconds() const {
-    return ts_.tv_sec;
-  }
-
-  long subseconds_in_ns() const {
-    if (!truncated_) {
-      truncated_ns_ = (ts_.tv_nsec / scale_) * scale_;
-      truncated_ = true;
-    }
-    return truncated_ns_;
-  }
-
-  struct timespec GetTS() const {
-    // We can't assume C++11, so avoid extended initializer lists.
-    struct timespec rval = { ts_.tv_sec, subseconds_in_ns()};
-    return rval;
-  }
-
- protected:
-  struct timespec ts_;
-  int64_t scale_;
-  mutable bool truncated_;
-  mutable long truncated_ns_;
-};
-
-class MonotonicTimePoint {
- public:
-  static MonotonicTimePoint Now() {
-    struct timespec ts;
-#ifdef CLOCK_MONOTONIC_RAW
-    // WARNING:
-    // While we do have CLOCK_MONOTONIC_RAW, we can't depend on it until:
-    // - ALL places relying on MonotonicTimePoint are fixed,
-    // - pthread supports pthread_timewait_monotonic.
-    //
-    // This is currently observable as a LEGITIMATE problem while running
-    // pthread_test. DO NOT revert this to CLOCK_MONOTONIC_RAW until test
-    // passes.
-    clock_gettime(CLOCK_MONOTONIC, &ts);
-#else
-    clock_gettime(CLOCK_MONOTONIC, &ts);
-#endif
-    return MonotonicTimePoint(ts);
-  }
-
-  MonotonicTimePoint() {
-    ts_.tv_sec = 0;
-    ts_.tv_nsec = 0;
-  }
-
-  explicit MonotonicTimePoint(const struct timespec& ts) {
-    ts_ = ts;
-  }
-
-  TimeDifference SinceEpoch() const {
-    return TimeDifference(ts_, 1);
-  }
-
-  TimeDifference operator-(const MonotonicTimePoint& other) const {
-    struct timespec rval;
-    rval.tv_sec = ts_.tv_sec - other.ts_.tv_sec;
-    rval.tv_nsec = ts_.tv_nsec - other.ts_.tv_nsec;
-    if (rval.tv_nsec < 0) {
-      --rval.tv_sec;
-      rval.tv_nsec += kNanosecondsPerSecond;
-    }
-    return TimeDifference(rval, 1);
-  }
-
-  MonotonicTimePoint operator+(const TimeDifference& other) const {
-    MonotonicTimePoint rval = *this;
-    rval.ts_.tv_sec += other.seconds();
-    rval.ts_.tv_nsec += other.subseconds_in_ns();
-    if (rval.ts_.tv_nsec >= kNanosecondsPerSecond) {
-      ++rval.ts_.tv_sec;
-      rval.ts_.tv_nsec -= kNanosecondsPerSecond;
-    }
-    return rval;
-  }
-
-  bool operator==(const MonotonicTimePoint& other) const {
-    return (ts_.tv_sec == other.ts_.tv_sec) &&
-        (ts_.tv_nsec == other.ts_.tv_nsec);
-  }
-
-  bool operator!=(const MonotonicTimePoint& other) const {
-    return !(*this == other);
-  }
-
-  bool operator<(const MonotonicTimePoint& other) const {
-    return ((ts_.tv_sec - other.ts_.tv_sec) < 0) ||
-        ((ts_.tv_sec == other.ts_.tv_sec) &&
-         (ts_.tv_nsec < other.ts_.tv_nsec));
-  }
-
-  bool operator>(const MonotonicTimePoint& other) const {
-    return other < *this;
-  }
-
-  bool operator<=(const MonotonicTimePoint& other) const {
-    return !(*this > other);
-  }
-
-  bool operator>=(const MonotonicTimePoint& other) const {
-    return !(*this < other);
-  }
-
-  MonotonicTimePoint& operator+=(const TimeDifference& other) {
-    ts_.tv_sec += other.seconds();
-    ts_.tv_nsec += other.subseconds_in_ns();
-    if (ts_.tv_nsec >= kNanosecondsPerSecond) {
-      ++ts_.tv_sec;
-      ts_.tv_nsec -= kNanosecondsPerSecond;
-    }
-    return *this;
-  }
-
-  MonotonicTimePoint& operator-=(const TimeDifference& other) {
-    ts_.tv_sec -= other.seconds();
-    ts_.tv_nsec -= other.subseconds_in_ns();
-    if (ts_.tv_nsec < 0) {
-      --ts_.tv_sec;
-      ts_.tv_nsec += kNanosecondsPerSecond;
-    }
-    return *this;
-  }
-
-  void ToTimespec(struct timespec* dest) const {
-    *dest = ts_;
-  }
-
- protected:
-  struct timespec ts_;
-};
-
-class Seconds : public TimeDifference {
- public:
-  explicit Seconds(const TimeDifference& difference) :
-      TimeDifference(difference, kNanosecondsPerSecond) { }
-
-  Seconds(int64_t seconds) :
-      TimeDifference(seconds, 0, kNanosecondsPerSecond) { }
-};
-
-class Milliseconds : public TimeDifference {
- public:
-  explicit Milliseconds(const TimeDifference& difference) :
-      TimeDifference(difference, kScale) { }
-
-  Milliseconds(int64_t ms) : TimeDifference(
-      ms / 1000, (ms % 1000) * kScale, kScale) { }
-
- protected:
-  static const int kScale = kNanosecondsPerSecond / 1000;
-};
-
-class Microseconds : public TimeDifference {
- public:
-  explicit Microseconds(const TimeDifference& difference) :
-      TimeDifference(difference, kScale) { }
-
-  Microseconds(int64_t micros) : TimeDifference(
-      micros / 1000000, (micros % 1000000) * kScale, kScale) { }
-
- protected:
-  static const int kScale = kNanosecondsPerSecond / 1000000;
-};
-
-class Nanoseconds : public TimeDifference {
- public:
-  explicit Nanoseconds(const TimeDifference& difference) :
-      TimeDifference(difference, 1) { }
-  Nanoseconds(int64_t ns) : TimeDifference(ns / kNanosecondsPerSecond,
-                                           ns % kNanosecondsPerSecond, 1) { }
-};
-
-}  // namespace time
-}  // namespace cuttlefish
-
-/**
- * Legacy support for microseconds. Use MonotonicTimePoint in new code.
- */
-static const int64_t kSecsToUsecs = static_cast<int64_t>(1000) * 1000;
-
-static inline int64_t get_monotonic_usecs() {
-  return cuttlefish::time::Microseconds(
-      cuttlefish::time::MonotonicTimePoint::Now().SinceEpoch()).count();
-}
diff --git a/common/libs/utils/Android.bp b/common/libs/utils/Android.bp
index 860b684..5190d2b 100644
--- a/common/libs/utils/Android.bp
+++ b/common/libs/utils/Android.bp
@@ -23,13 +23,15 @@
         "archive.cpp",
         "subprocess.cpp",
         "environment.cpp",
-        "size_utils.cpp",
+        "flag_parser.cpp",
+        "shared_fd_flag.cpp",
         "files.cpp",
         "users.cpp",
         "network.cpp",
         "base64.cpp",
         "tcp_socket.cpp",
         "tee_logging.cpp",
+        "unix_sockets.cpp",
         "vsock_connection.cpp",
     ],
     shared: {
@@ -53,6 +55,28 @@
     defaults: ["cuttlefish_host"],
 }
 
+cc_test_host {
+    name: "libcuttlefish_utils_test",
+    srcs: [
+        "flag_parser_test.cpp",
+        "unix_sockets_test.cpp",
+    ],
+    static_libs: [
+        "libbase",
+        "libcuttlefish_fs",
+        "libcuttlefish_utils",
+    ],
+    shared_libs: [
+        "libcrypto",
+        "liblog",
+        "libxml2",
+    ],
+    test_options: {
+        unit_test: true,
+    },
+    defaults: ["cuttlefish_host"],
+}
+
 cc_library {
     name: "libvsock_utils",
     srcs: ["vsock_connection.cpp"],
diff --git a/common/libs/utils/archive.cpp b/common/libs/utils/archive.cpp
index 05fbf5f..2748fd1 100644
--- a/common/libs/utils/archive.cpp
+++ b/common/libs/utils/archive.cpp
@@ -79,15 +79,15 @@
   bsdtar_cmd.AddParameter(file);
   bsdtar_cmd.AddParameter("-O");
   bsdtar_cmd.AddParameter(path);
-  std::string stdout, stderr;
-  auto ret = RunWithManagedStdio(std::move(bsdtar_cmd), nullptr, &stdout,
-                                 nullptr);
+  std::string stdout_str;
+  auto ret =
+      RunWithManagedStdio(std::move(bsdtar_cmd), nullptr, &stdout_str, nullptr);
   if (ret != 0) {
     LOG(ERROR) << "Could not extract \"" << path << "\" from \"" << file
                << "\" to memory.";
     return "";
   }
-  return stdout;
+  return stdout_str;
 }
 
 } // namespace cuttlefish
diff --git a/common/libs/utils/files.cpp b/common/libs/utils/files.cpp
index ea84b32..3a33763 100644
--- a/common/libs/utils/files.cpp
+++ b/common/libs/utils/files.cpp
@@ -18,25 +18,26 @@
 
 #include <android-base/logging.h>
 
+#include <dirent.h>
+#include <ftw.h>
+#include <libgen.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
 #include <array>
 #include <climits>
 #include <cstdio>
 #include <cstdlib>
 #include <fstream>
-#include <libgen.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <dirent.h>
 #include <vector>
 
 #include "common/libs/fs/shared_fd.h"
 
 namespace cuttlefish {
 
-bool FileExists(const std::string& path) {
+bool FileExists(const std::string& path, bool follow_symlinks) {
   struct stat st;
-  return stat(path.c_str(), &st) == 0;
+  return (follow_symlinks ? stat : lstat)(path.c_str(), &st) == 0;
 }
 
 bool FileHasContent(const std::string& path) {
@@ -56,9 +57,9 @@
   return ret;
 }
 
-bool DirectoryExists(const std::string& path) {
+bool DirectoryExists(const std::string& path, bool follow_symlinks) {
   struct stat st;
-  if (stat(path.c_str(), &st) == -1) {
+  if ((follow_symlinks ? stat : lstat)(path.c_str(), &st) == -1) {
     return false;
   }
   if ((st.st_mode & S_IFMT) != S_IFDIR) {
@@ -88,6 +89,40 @@
   return true;
 }
 
+bool RecursivelyRemoveDirectory(const std::string& path) {
+  // Copied from libbase TemporaryDir destructor.
+  auto callback = [](const char* child, const struct stat*, int file_type,
+                     struct FTW*) -> int {
+    switch (file_type) {
+      case FTW_D:
+      case FTW_DP:
+      case FTW_DNR:
+        if (rmdir(child) == -1) {
+          PLOG(ERROR) << "rmdir " << child;
+        }
+        break;
+      case FTW_NS:
+      default:
+        if (rmdir(child) != -1) {
+          break;
+        }
+        // FALLTHRU (for gcc, lint, pcc, etc; and following for clang)
+        FALLTHROUGH_INTENDED;
+      case FTW_F:
+      case FTW_SL:
+      case FTW_SLN:
+        if (unlink(child) == -1) {
+          PLOG(ERROR) << "unlink " << child;
+        }
+        break;
+    }
+    return 0;
+  };
+
+  return nftw(path.c_str(), callback, 128, FTW_DEPTH | FTW_MOUNT | FTW_PHYS) ==
+         0;
+}
+
 std::string AbsolutePath(const std::string& path) {
   if (path.empty()) {
     return {};
@@ -117,6 +152,11 @@
   return st.st_size;
 }
 
+bool MakeFileExecutable(const std::string& path) {
+  LOG(DEBUG) << "Making " << path << " executable";
+  return chmod(path.c_str(), S_IRWXU) == 0;
+}
+
 // TODO(schuffelen): Use std::filesystem::last_write_time when on C++17
 std::chrono::system_clock::time_point FileModificationTime(const std::string& path) {
   struct stat st;
@@ -138,11 +178,10 @@
 }
 
 bool RemoveFile(const std::string& file) {
-  LOG(DEBUG) << "Removing " << file;
+  LOG(DEBUG) << "Removing file " << file;
   return remove(file.c_str()) == 0;
 }
 
-
 std::string ReadFile(const std::string& file) {
   std::string contents;
   std::ifstream in(file, std::ios::in | std::ios::binary);
@@ -222,4 +261,10 @@
   return ret;
 }
 
+bool FileIsSocket(const std::string& path) {
+  struct stat st;
+  return stat(path.c_str(), &st) == 0 && S_ISSOCK(st.st_mode);
+}
+
+
 }  // namespace cuttlefish
diff --git a/common/libs/utils/files.h b/common/libs/utils/files.h
index ff1c8d3..cc784ab 100644
--- a/common/libs/utils/files.h
+++ b/common/libs/utils/files.h
@@ -21,18 +21,22 @@
 #include <string>
 
 namespace cuttlefish {
-bool FileExists(const std::string& path);
+bool FileExists(const std::string& path, bool follow_symlinks = true);
 bool FileHasContent(const std::string& path);
 std::vector<std::string> DirectoryContents(const std::string& path);
-bool DirectoryExists(const std::string& path);
+bool DirectoryExists(const std::string& path, bool follow_symlinks = true);
 bool IsDirectoryEmpty(const std::string& path);
+bool RecursivelyRemoveDirectory(const std::string& path);
 off_t FileSize(const std::string& path);
 bool RemoveFile(const std::string& file);
 bool RenameFile(const std::string& old_name, const std::string& new_name);
 std::string ReadFile(const std::string& file);
+bool MakeFileExecutable(const std::string& path);
 std::chrono::system_clock::time_point FileModificationTime(const std::string& path);
 std::string cpp_dirname(const std::string& str);
 std::string cpp_basename(const std::string& str);
+// Whether a file exists and is a unix socket
+bool FileIsSocket(const std::string& path);
 
 // The returned value may contain .. or . if these are present in the path
 // argument.
diff --git a/common/libs/utils/flag_parser.cpp b/common/libs/utils/flag_parser.cpp
new file mode 100644
index 0000000..e011de6
--- /dev/null
+++ b/common/libs/utils/flag_parser.cpp
@@ -0,0 +1,444 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <common/libs/utils/flag_parser.h>
+
+#include <algorithm>
+#include <iostream>
+#include <iterator>
+#include <unordered_set>
+
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+
+namespace cuttlefish {
+
+std::ostream& operator<<(std::ostream& out, const FlagAlias& alias) {
+  switch (alias.mode) {
+    case FlagAliasMode::kFlagExact:
+      return out << alias.name;
+    case FlagAliasMode::kFlagPrefix:
+      return out << alias.name << "*";
+    case FlagAliasMode::kFlagConsumesFollowing:
+      return out << alias.name << " *";
+    default:
+      LOG(FATAL) << "Unexpected flag alias mode " << (int)alias.mode;
+  }
+  return out;
+}
+
+Flag& Flag::UnvalidatedAlias(const FlagAlias& alias) & {
+  aliases_.push_back(alias);
+  return *this;
+}
+Flag Flag::UnvalidatedAlias(const FlagAlias& alias) && {
+  aliases_.push_back(alias);
+  return *this;
+}
+
+void Flag::ValidateAlias(const FlagAlias& alias) {
+  using android::base::EndsWith;
+  using android::base::StartsWith;
+
+  CHECK(StartsWith(alias.name, "-")) << "Flags should start with \"-\"";
+  if (alias.mode == FlagAliasMode::kFlagPrefix) {
+    CHECK(EndsWith(alias.name, "=")) << "Prefix flags shold end with \"=\"";
+  }
+
+  CHECK(!HasAlias(alias)) << "Duplicate flag alias: " << alias.name;
+  if (alias.mode == FlagAliasMode::kFlagConsumesFollowing) {
+    CHECK(!HasAlias({FlagAliasMode::kFlagExact, alias.name}))
+        << "Overlapping flag aliases for " << alias.name;
+  } else if (alias.mode == FlagAliasMode::kFlagExact) {
+    CHECK(!HasAlias({FlagAliasMode::kFlagExact, alias.name}))
+        << "Overlapping flag aliases for " << alias.name;
+  }
+}
+
+Flag& Flag::Alias(const FlagAlias& alias) & {
+  ValidateAlias(alias);
+  aliases_.push_back(alias);
+  return *this;
+}
+Flag Flag::Alias(const FlagAlias& alias) && {
+  ValidateAlias(alias);
+  aliases_.push_back(alias);
+  return *this;
+}
+
+Flag& Flag::Help(const std::string& help) & {
+  help_ = help;
+  return *this;
+}
+Flag Flag::Help(const std::string& help) && {
+  help_ = help;
+  return *this;
+}
+
+Flag& Flag::Getter(std::function<std::string()> fn) & {
+  getter_ = std::move(fn);
+  return *this;
+}
+Flag Flag::Getter(std::function<std::string()> fn) && {
+  getter_ = std::move(fn);
+  return *this;
+}
+
+Flag& Flag::Setter(std::function<bool(const FlagMatch&)> fn) & {
+  setter_ = std::move(fn);
+  return *this;
+}
+Flag Flag::Setter(std::function<bool(const FlagMatch&)> fn) && {
+  setter_ = std::move(fn);
+  return *this;
+}
+
+Flag::FlagProcessResult Flag::Process(
+    const std::string& arg, const std::optional<std::string>& next_arg) const {
+  if (!setter_ && aliases_.size() > 0) {
+    LOG(ERROR) << "No setter for flag with alias " << aliases_[0].name;
+    return FlagProcessResult::kFlagError;
+  }
+  for (auto& alias : aliases_) {
+    switch (alias.mode) {
+      case FlagAliasMode::kFlagConsumesFollowing:
+        if (arg != alias.name) {
+          continue;
+        }
+        if (!next_arg) {
+          LOG(ERROR) << "Expected an argument after \"" << arg << "\"";
+          return FlagProcessResult::kFlagError;
+        }
+        if (!(*setter_)({arg, *next_arg})) {
+          LOG(ERROR) << "Processing \"" << arg << "\" \"" << *next_arg
+                     << "\" failed";
+          return FlagProcessResult::kFlagError;
+        }
+        return FlagProcessResult::kFlagConsumedWithFollowing;
+      case FlagAliasMode::kFlagExact:
+        if (arg != alias.name) {
+          continue;
+        }
+        if (!(*setter_)({arg, arg})) {
+          LOG(ERROR) << "Processing \"" << arg << "\" failed";
+          return FlagProcessResult::kFlagError;
+        }
+        return FlagProcessResult::kFlagConsumed;
+      case FlagAliasMode::kFlagPrefix:
+        if (!android::base::StartsWith(arg, alias.name)) {
+          continue;
+        }
+        if (!(*setter_)({alias.name, arg.substr(alias.name.size())})) {
+          LOG(ERROR) << "Processing \"" << arg << "\" failed";
+          return FlagProcessResult::kFlagError;
+        }
+        return FlagProcessResult::kFlagConsumed;
+      default:
+        LOG(ERROR) << "Unknown flag alias mode: " << (int)alias.mode;
+        return FlagProcessResult::kFlagError;
+    }
+  }
+  return FlagProcessResult::kFlagSkip;
+}
+
+bool Flag::Parse(std::vector<std::string>& arguments) const {
+  for (int i = 0; i < arguments.size();) {
+    std::string arg = arguments[i];
+    std::optional<std::string> next_arg;
+    if (i < arguments.size() - 1) {
+      next_arg = arguments[i + 1];
+    }
+    auto result = Process(arg, next_arg);
+    if (result == FlagProcessResult::kFlagError) {
+      LOG(ERROR) << "Failure in parsing \"" << arg << "\"";
+      return false;
+    } else if (result == FlagProcessResult::kFlagConsumed) {
+      arguments.erase(arguments.begin() + i);
+    } else if (result == FlagProcessResult::kFlagConsumedWithFollowing) {
+      arguments.erase(arguments.begin() + i, arguments.begin() + i + 2);
+    } else if (result == FlagProcessResult::kFlagSkip) {
+      i++;
+      continue;
+    } else {
+      LOG(ERROR) << "Unknown FlagProcessResult: " << (int)result;
+      return false;
+    }
+  }
+  return true;
+}
+bool Flag::Parse(std::vector<std::string>&& arguments) const {
+  return Parse(static_cast<std::vector<std::string>&>(arguments));
+}
+
+bool Flag::HasAlias(const FlagAlias& test) const {
+  for (const auto& alias : aliases_) {
+    if (alias.mode == test.mode && alias.name == test.name) {
+      return true;
+    }
+  }
+  return false;
+}
+
+static std::string XmlEscape(const std::string& s) {
+  using android::base::StringReplace;
+  return StringReplace(StringReplace(s, "<", "&lt;", true), ">", "&gt;", true);
+}
+
+bool Flag::WriteGflagsCompatXml(std::ostream& out) const {
+  std::unordered_set<std::string> name_guesses;
+  for (const auto& alias : aliases_) {
+    std::string_view name = alias.name;
+    if (!android::base::ConsumePrefix(&name, "-")) {
+      continue;
+    }
+    android::base::ConsumePrefix(&name, "-");
+    if (alias.mode == FlagAliasMode::kFlagExact) {
+      android::base::ConsumePrefix(&name, "no");
+      name_guesses.insert(std::string{name});
+    } else if (alias.mode == FlagAliasMode::kFlagConsumesFollowing) {
+      name_guesses.insert(std::string{name});
+    } else if (alias.mode == FlagAliasMode::kFlagPrefix) {
+      if (!android::base::ConsumeSuffix(&name, "=")) {
+        continue;
+      }
+      name_guesses.insert(std::string{name});
+    }
+  }
+  bool found_alias = false;
+  for (const auto& name : name_guesses) {
+    bool has_bool_aliases =
+        HasAlias({FlagAliasMode::kFlagPrefix, "-" + name + "="}) &&
+        HasAlias({FlagAliasMode::kFlagPrefix, "--" + name + "="}) &&
+        HasAlias({FlagAliasMode::kFlagExact, "-" + name}) &&
+        HasAlias({FlagAliasMode::kFlagExact, "--" + name}) &&
+        HasAlias({FlagAliasMode::kFlagExact, "-no" + name}) &&
+        HasAlias({FlagAliasMode::kFlagExact, "--no" + name});
+    bool has_other_aliases =
+        HasAlias({FlagAliasMode::kFlagPrefix, "-" + name + "="}) &&
+        HasAlias({FlagAliasMode::kFlagPrefix, "--" + name + "="}) &&
+        HasAlias({FlagAliasMode::kFlagConsumesFollowing, "-" + name}) &&
+        HasAlias({FlagAliasMode::kFlagConsumesFollowing, "--" + name});
+    if (has_bool_aliases && has_other_aliases) {
+      LOG(ERROR) << "Expected exactly one of has_bool_aliases and "
+                 << "has_other_aliases, got both for \"" << name << "\".";
+      return false;
+    } else if (!has_bool_aliases && !has_other_aliases) {
+      continue;
+    }
+    found_alias = true;
+    // Lifted from external/gflags/src/gflags_reporting.cc:DescribeOneFlagInXML
+    out << "<flag>\n";
+    out << "  <file>file.cc</file>\n";
+    out << "  <name>" << XmlEscape(name) << "</name>\n";
+    auto help = help_ ? XmlEscape(*help_) : std::string{""};
+    out << "  <meaning>" << help << "</meaning>\n";
+    auto value = getter_ ? XmlEscape((*getter_)()) : std::string{""};
+    out << "  <default>" << value << "</default>\n";
+    out << "  <current>" << value << "</current>\n";
+    out << "  <type>" << (has_bool_aliases ? "bool" : "string") << "</type>\n";
+    out << "</flag>\n";
+  }
+  return found_alias;
+}
+
+std::ostream& operator<<(std::ostream& out, const Flag& flag) {
+  out << "[";
+  for (auto it = flag.aliases_.begin(); it != flag.aliases_.end(); it++) {
+    if (it != flag.aliases_.begin()) {
+      out << ", ";
+    }
+    out << *it;
+  }
+  out << "]\n";
+  if (flag.help_) {
+    out << "(" << *flag.help_ << ")\n";
+  }
+  if (flag.getter_) {
+    out << "(Current value: \"" << (*flag.getter_)() << "\")\n";
+  }
+  return out;
+}
+
+std::vector<std::string> ArgsToVec(int argc, char** argv) {
+  std::vector<std::string> args;
+  for (int i = 0; i < argc; i++) {
+    args.push_back(argv[i]);
+  }
+  return args;
+}
+
+bool ParseFlags(const std::vector<Flag>& flags,
+                std::vector<std::string>& args) {
+  for (const auto& flag : flags) {
+    if (!flag.Parse(args)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+bool ParseFlags(const std::vector<Flag>& flags,
+                std::vector<std::string>&& args) {
+  for (const auto& flag : flags) {
+    if (!flag.Parse(args)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+bool WriteGflagsCompatXml(const std::vector<Flag>& flags, std::ostream& out) {
+  for (const auto& flag : flags) {
+    if (!flag.WriteGflagsCompatXml(out)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+Flag HelpFlag(const std::vector<Flag>& flags, const std::string& text) {
+  auto setter = [&](FlagMatch) {
+    if (text.size() > 0) {
+      LOG(INFO) << text;
+    }
+    for (const auto& flag : flags) {
+      LOG(INFO) << flag;
+    }
+    return false;
+  };
+  return Flag()
+      .Alias({FlagAliasMode::kFlagExact, "-help"})
+      .Alias({FlagAliasMode::kFlagExact, "--help"})
+      .Setter(setter);
+}
+
+Flag InvalidFlagGuard() {
+  return Flag()
+      .UnvalidatedAlias({FlagAliasMode::kFlagPrefix, "-"})
+      .Help(
+          "This executable only supports the flags in `-help`. Positional "
+          "arguments may be supported.")
+      .Setter([](const FlagMatch& match) {
+        LOG(ERROR) << "Unknown flag " << match.value;
+        return false;
+      });
+}
+
+Flag UnexpectedArgumentGuard() {
+  return Flag()
+      .UnvalidatedAlias({FlagAliasMode::kFlagPrefix, ""})
+      .Help(
+          "This executable only supports the flags in `-help`. Positional "
+          "arguments are not supported.")
+      .Setter([](const FlagMatch& match) {
+        LOG(ERROR) << "Unexpected argument \"" << match.value << "\"";
+        return false;
+      });
+}
+
+Flag GflagsCompatFlag(const std::string& name) {
+  return Flag()
+      .Alias({FlagAliasMode::kFlagPrefix, "-" + name + "="})
+      .Alias({FlagAliasMode::kFlagPrefix, "--" + name + "="})
+      .Alias({FlagAliasMode::kFlagConsumesFollowing, "-" + name})
+      .Alias({FlagAliasMode::kFlagConsumesFollowing, "--" + name});
+};
+
+Flag GflagsCompatFlag(const std::string& name, std::string& value) {
+  return GflagsCompatFlag(name)
+      .Getter([&value]() { return value; })
+      .Setter([&value](const FlagMatch& match) {
+        value = match.value;
+        return true;
+      });
+}
+
+template <typename T>
+std::optional<T> ParseInteger(const std::string& value) {
+  if (value.size() == 0) {
+    return {};
+  }
+  const char* base = value.c_str();
+  char* end = nullptr;
+  errno = 0;
+  auto r = strtoll(base, &end, /* auto-detect */ 0);
+  if (errno != 0 || end != base + value.size()) {
+    return {};
+  }
+  if (static_cast<T>(r) != r) {
+    return {};
+  }
+  return r;
+}
+
+template <typename T>
+static Flag GflagsCompatNumericFlagGeneric(const std::string& name, T& value) {
+  return GflagsCompatFlag(name)
+      .Getter([&value]() { return std::to_string(value); })
+      .Setter([&value](const FlagMatch& match) {
+        auto parsed = ParseInteger<T>(match.value);
+        if (parsed) {
+          value = *parsed;
+          return true;
+        } else {
+          LOG(ERROR) << "Failed to parse \"" << match.value
+                     << "\" as an integer";
+          return false;
+        }
+      });
+}
+
+Flag GflagsCompatFlag(const std::string& name, int32_t& value) {
+  return GflagsCompatNumericFlagGeneric(name, value);
+}
+
+Flag GflagsCompatFlag(const std::string& name, bool& value) {
+  return Flag()
+      .Alias({FlagAliasMode::kFlagPrefix, "-" + name + "="})
+      .Alias({FlagAliasMode::kFlagPrefix, "--" + name + "="})
+      .Alias({FlagAliasMode::kFlagExact, "-" + name})
+      .Alias({FlagAliasMode::kFlagExact, "--" + name})
+      .Alias({FlagAliasMode::kFlagExact, "-no" + name})
+      .Alias({FlagAliasMode::kFlagExact, "--no" + name})
+      .Getter([&value]() { return value ? "true" : "false"; })
+      .Setter([name, &value](const FlagMatch& match) {
+        const auto& key = match.key;
+        if (key == "-" + name || key == "--" + name) {
+          value = true;
+          return true;
+        } else if (key == "-no" + name || key == "--no" + name) {
+          value = false;
+          return true;
+        } else if (key == "-" + name + "=" || key == "--" + name + "=") {
+          if (match.value == "true") {
+            value = true;
+            return true;
+          } else if (match.value == "false") {
+            value = false;
+            return true;
+          } else {
+            LOG(ERROR) << "Unexpected boolean value \"" << match.value << "\""
+                       << " for \"" << name << "\"";
+            return false;
+          }
+        }
+        LOG(ERROR) << "Unexpected key \"" << match.key << "\""
+                   << " for \"" << name << "\"";
+        return false;
+      });
+};
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/flag_parser.h b/common/libs/utils/flag_parser.h
new file mode 100644
index 0000000..9f66ded
--- /dev/null
+++ b/common/libs/utils/flag_parser.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <functional>
+#include <optional>
+#include <set>
+#include <string>
+#include <vector>
+
+#include <android-base/logging.h>
+
+/* Support for parsing individual flags out of a larger list of flags. This
+ * supports externally determining the order that flags are evaluated in, and
+ * incrementally integrating with existing flag parsing implementations.
+ *
+ * Start with Flag() or one of the GflagsCompatFlag(...) functions to create new
+ * flags. These flags should be aggregated through the application through some
+ * other mechanism and then evaluated individually with Flag::Parse or together
+ * with ParseFlags on arguments. */
+
+namespace cuttlefish {
+
+/* The matching behavior used with the name in `FlagAlias::name`. */
+enum class FlagAliasMode {
+  /* Match arguments of the form `<name><value>`. In practice, <name> usually
+   * looks like "-flag=" or "--flag=", where the "-" and "=" are included in
+   * parsing. */
+  kFlagPrefix,
+  /* Match arguments of the form `<name>`. In practice, <name> will look like
+   * "-flag" or "--flag". */
+  kFlagExact,
+  /* Match a pair of arguments of the form `<name>` `<value>`. In practice,
+   * <name> will look like "-flag" or "--flag". */
+  kFlagConsumesFollowing,
+};
+
+/* A single matching rule for a `Flag`. One `Flag` can have multiple rules. */
+struct FlagAlias {
+  FlagAliasMode mode;
+  std::string name;
+};
+
+std::ostream& operator<<(std::ostream&, const FlagAlias&);
+
+/* A successful match in an argument list from a `FlagAlias` inside a `Flag`.
+ * The `key` value corresponds to `FlagAlias::name`. For a match of
+ * `FlagAliasMode::kFlagExact`, `key` and `value` will both be the `name`. */
+struct FlagMatch {
+  std::string key;
+  std::string value;
+};
+
+class Flag {
+ public:
+  /* Add an alias that triggers matches and calls to the `Setter` function. */
+  Flag& Alias(const FlagAlias& alias) &;
+  Flag Alias(const FlagAlias& alias) &&;
+  /* Set help text, visible in the class ostream writer method. Optional. */
+  Flag& Help(const std::string&) &;
+  Flag Help(const std::string&) &&;
+  /* Set a loader that displays the current value in help text. Optional. */
+  Flag& Getter(std::function<std::string()>) &;
+  Flag Getter(std::function<std::string()>) &&;
+  /* Set the callback for matches. The callback be invoked multiple times. */
+  Flag& Setter(std::function<bool(const FlagMatch&)>) &;
+  Flag Setter(std::function<bool(const FlagMatch&)>) &&;
+
+  /* Examines a list of arguments, removing any matches from the list and
+   * invoking the `Setter` for every match. Returns `false` if the callback ever
+   * returns `false`. Non-matches are left in place. */
+  bool Parse(std::vector<std::string>& flags) const;
+  bool Parse(std::vector<std::string>&& flags) const;
+
+  /* Write gflags `--helpxml` style output for a string-type flag. */
+  bool WriteGflagsCompatXml(std::ostream&) const;
+
+ private:
+  /* Reports whether `Process` wants to consume zero, one, or two arguments. */
+  enum class FlagProcessResult {
+    /* Error in handling a flag, exit flag handling with an error result. */
+    kFlagError,
+    kFlagSkip,                  /* Flag skipped; consume no arguments. */
+    kFlagConsumed,              /* Flag processed; consume one argument. */
+    kFlagConsumedWithFollowing, /* Flag processed; consume 2 arguments. */
+  };
+
+  void ValidateAlias(const FlagAlias& alias);
+  Flag& UnvalidatedAlias(const FlagAlias& alias) &;
+  Flag UnvalidatedAlias(const FlagAlias& alias) &&;
+
+  /* Attempt to match a single argument. */
+  FlagProcessResult Process(const std::string& argument,
+                            const std::optional<std::string>& next_arg) const;
+
+  bool HasAlias(const FlagAlias&) const;
+
+  friend std::ostream& operator<<(std::ostream&, const Flag&);
+  friend Flag InvalidFlagGuard();
+  friend Flag UnexpectedArgumentGuard();
+
+  std::vector<FlagAlias> aliases_;
+  std::optional<std::string> help_;
+  std::optional<std::function<std::string()>> getter_;
+  std::optional<std::function<bool(const FlagMatch&)>> setter_;
+};
+
+std::ostream& operator<<(std::ostream&, const Flag&);
+
+std::vector<std::string> ArgsToVec(int argc, char** argv);
+
+/* Handles a list of flags. Flags are matched in the order given in case two
+ * flags match the same argument. Matched flags are removed, leaving only
+ * unmatched arguments. */
+bool ParseFlags(const std::vector<Flag>& flags, std::vector<std::string>& args);
+bool ParseFlags(const std::vector<Flag>& flags, std::vector<std::string>&&);
+
+bool WriteGflagsCompatXml(const std::vector<Flag>&, std::ostream&);
+
+/* If any of these are used, they should be evaluated after all other flags, and
+ * in the order defined here (help before invalid flags, invalid flags before
+ * unexpected arguments). */
+
+/* If a "-help" or "--help" flag is present, prints all the flags and fails. */
+Flag HelpFlag(const std::vector<Flag>& flags, const std::string& text = "");
+/* Catches unrecognized arguments that begin with `-`, and errors out. This
+ * effectively denies unknown flags. */
+Flag InvalidFlagGuard();
+/* Catches any arguments not extracted by other Flag matchers and errors out.
+ * This effectively denies unknown flags and any positional arguments. */
+Flag UnexpectedArgumentGuard();
+
+// Create a flag resembling a gflags argument of the given type. This includes
+// "-[-]flag=*",support for all types, "-[-]noflag" support for booleans, and
+// "-flag *", "--flag *", support for other types. The value passed in the flag
+// is saved to the defined reference.
+Flag GflagsCompatFlag(const std::string& name);
+Flag GflagsCompatFlag(const std::string& name, std::string& value);
+Flag GflagsCompatFlag(const std::string& name, std::int32_t& value);
+Flag GflagsCompatFlag(const std::string& name, bool& value);
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/flag_parser_test.cpp b/common/libs/utils/flag_parser_test.cpp
new file mode 100644
index 0000000..ab16c84
--- /dev/null
+++ b/common/libs/utils/flag_parser_test.cpp
@@ -0,0 +1,267 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <common/libs/utils/flag_parser.h>
+
+#include <gtest/gtest.h>
+#include <libxml/tree.h>
+#include <map>
+#include <optional>
+#include <sstream>
+#include <string>
+#include <vector>
+
+namespace cuttlefish {
+
+TEST(FlagParser, DuplicateAlias) {
+  FlagAlias alias = {FlagAliasMode::kFlagExact, "--flag"};
+  ASSERT_DEATH({ Flag().Alias(alias).Alias(alias); }, "Duplicate flag alias");
+}
+
+TEST(FlagParser, ConflictingAlias) {
+  FlagAlias exact_alias = {FlagAliasMode::kFlagExact, "--flag"};
+  FlagAlias following_alias = {FlagAliasMode::kFlagConsumesFollowing, "--flag"};
+  ASSERT_DEATH({ Flag().Alias(exact_alias).Alias(following_alias); },
+               "Overlapping flag aliases");
+}
+
+TEST(FlagParser, StringFlag) {
+  std::string value;
+  auto flag = GflagsCompatFlag("myflag", value);
+  ASSERT_TRUE(flag.Parse({"-myflag=a"}));
+  ASSERT_EQ(value, "a");
+  ASSERT_TRUE(flag.Parse({"--myflag=b"}));
+  ASSERT_EQ(value, "b");
+  ASSERT_TRUE(flag.Parse({"-myflag", "c"}));
+  ASSERT_EQ(value, "c");
+  ASSERT_TRUE(flag.Parse({"--myflag", "d"}));
+  ASSERT_EQ(value, "d");
+  ASSERT_TRUE(flag.Parse({"--myflag="}));
+  ASSERT_EQ(value, "");
+}
+
+std::optional<std::map<std::string, std::string>> flagXml(const Flag& f) {
+  std::stringstream xml_stream;
+  if (!f.WriteGflagsCompatXml(xml_stream)) {
+    return {};
+  }
+  auto xml = xml_stream.str();
+  // Holds all memory for the parsed structure.
+  std::unique_ptr<xmlDoc, xmlFreeFunc> doc(
+      xmlReadMemory(xml.c_str(), xml.size(), nullptr, nullptr, 0), xmlFree);
+  if (!doc) {
+    return {};
+  }
+  xmlNodePtr root_element = xmlDocGetRootElement(doc.get());
+  std::map<std::string, std::string> elements_map;
+  for (auto elem = root_element->children; elem != nullptr; elem = elem->next) {
+    if (elem->type != xmlElementType::XML_ELEMENT_NODE) {
+      continue;
+    }
+    elements_map[(char*)elem->name] = "";
+    if (elem->children == nullptr) {
+      continue;
+    }
+    if (elem->children->type != XML_TEXT_NODE) {
+      continue;
+    }
+    elements_map[(char*)elem->name] = (char*)elem->children->content;
+  }
+  return elements_map;
+}
+
+TEST(FlagParser, GflagsIncompatibleFlag) {
+  auto flag = Flag().Alias({FlagAliasMode::kFlagExact, "--flag"});
+  ASSERT_FALSE(flagXml(flag));
+}
+
+TEST(FlagParser, StringFlagXml) {
+  std::string value = "somedefault";
+  auto flag = GflagsCompatFlag("myflag", value).Help("somehelp");
+  auto xml = flagXml(flag);
+  ASSERT_TRUE(xml);
+  ASSERT_NE((*xml)["file"], "");
+  ASSERT_EQ((*xml)["name"], "myflag");
+  ASSERT_EQ((*xml)["meaning"], "somehelp");
+  ASSERT_EQ((*xml)["default"], "somedefault");
+  ASSERT_EQ((*xml)["current"], "somedefault");
+  ASSERT_EQ((*xml)["type"], "string");
+}
+
+TEST(FlagParser, RepeatedStringFlag) {
+  std::string value;
+  auto flag = GflagsCompatFlag("myflag", value);
+  ASSERT_TRUE(flag.Parse({"-myflag=a", "--myflag", "b"}));
+  ASSERT_EQ(value, "b");
+}
+
+TEST(FlagParser, RepeatedListFlag) {
+  std::vector<std::string> elems;
+  auto flag = GflagsCompatFlag("myflag");
+  flag.Setter([&elems](const FlagMatch& match) {
+    elems.push_back(match.value);
+    return true;
+  });
+  ASSERT_TRUE(flag.Parse({"-myflag=a", "--myflag", "b"}));
+  ASSERT_EQ(elems, (std::vector<std::string>{"a", "b"}));
+}
+
+TEST(FlagParser, FlagRemoval) {
+  std::string value;
+  auto flag = GflagsCompatFlag("myflag", value);
+  std::vector<std::string> flags = {"-myflag=a", "-otherflag=c"};
+  ASSERT_TRUE(flag.Parse(flags));
+  ASSERT_EQ(value, "a");
+  ASSERT_EQ(flags, std::vector<std::string>{"-otherflag=c"});
+  flags = {"-otherflag=a", "-myflag=c"};
+  ASSERT_TRUE(flag.Parse(flags));
+  ASSERT_EQ(value, "c");
+  ASSERT_EQ(flags, std::vector<std::string>{"-otherflag=a"});
+}
+
+TEST(FlagParser, IntFlag) {
+  std::int32_t value = 0;
+  auto flag = GflagsCompatFlag("myflag", value);
+  ASSERT_TRUE(flag.Parse({"-myflag=5"}));
+  ASSERT_EQ(value, 5);
+  ASSERT_TRUE(flag.Parse({"--myflag=6"}));
+  ASSERT_EQ(value, 6);
+  ASSERT_TRUE(flag.Parse({"-myflag", "7"}));
+  ASSERT_EQ(value, 7);
+  ASSERT_TRUE(flag.Parse({"--myflag", "8"}));
+  ASSERT_EQ(value, 8);
+}
+
+TEST(FlagParser, IntFlagXml) {
+  int value = 5;
+  auto flag = GflagsCompatFlag("myflag", value).Help("somehelp");
+  auto xml = flagXml(flag);
+  ASSERT_TRUE(xml);
+  ASSERT_NE((*xml)["file"], "");
+  ASSERT_EQ((*xml)["name"], "myflag");
+  ASSERT_EQ((*xml)["meaning"], "somehelp");
+  ASSERT_EQ((*xml)["default"], "5");
+  ASSERT_EQ((*xml)["current"], "5");
+  ASSERT_EQ((*xml)["type"], "string");
+}
+
+TEST(FlagParser, BoolFlag) {
+  bool value = false;
+  auto flag = GflagsCompatFlag("myflag", value);
+  ASSERT_TRUE(flag.Parse({"-myflag"}));
+  ASSERT_TRUE(value);
+
+  value = false;
+  ASSERT_TRUE(flag.Parse({"--myflag"}));
+  ASSERT_TRUE(value);
+
+  value = false;
+  ASSERT_TRUE(flag.Parse({"-myflag=true"}));
+  ASSERT_TRUE(value);
+
+  value = false;
+  ASSERT_TRUE(flag.Parse({"--myflag=true"}));
+  ASSERT_TRUE(value);
+
+  value = true;
+  ASSERT_TRUE(flag.Parse({"-nomyflag"}));
+  ASSERT_FALSE(value);
+
+  value = true;
+  ASSERT_TRUE(flag.Parse({"--nomyflag"}));
+  ASSERT_FALSE(value);
+
+  value = true;
+  ASSERT_TRUE(flag.Parse({"-myflag=false"}));
+  ASSERT_FALSE(value);
+
+  value = true;
+  ASSERT_TRUE(flag.Parse({"--myflag=false"}));
+  ASSERT_FALSE(value);
+
+  ASSERT_FALSE(flag.Parse({"--myflag=nonsense"}));
+}
+
+TEST(FlagParser, BoolFlagXml) {
+  bool value = true;
+  auto flag = GflagsCompatFlag("myflag", value).Help("somehelp");
+  auto xml = flagXml(flag);
+  ASSERT_TRUE(xml);
+  ASSERT_NE((*xml)["file"], "");
+  ASSERT_EQ((*xml)["name"], "myflag");
+  ASSERT_EQ((*xml)["meaning"], "somehelp");
+  ASSERT_EQ((*xml)["default"], "true");
+  ASSERT_EQ((*xml)["current"], "true");
+  ASSERT_EQ((*xml)["type"], "bool");
+}
+
+TEST(FlagParser, StringIntFlag) {
+  std::int32_t int_value = 0;
+  std::string string_value;
+  auto int_flag = GflagsCompatFlag("int", int_value);
+  auto string_flag = GflagsCompatFlag("string", string_value);
+  std::vector<Flag> flags = {int_flag, string_flag};
+  ASSERT_TRUE(ParseFlags(flags, {"-int=5", "-string=a"}));
+  ASSERT_EQ(int_value, 5);
+  ASSERT_EQ(string_value, "a");
+  ASSERT_TRUE(ParseFlags(flags, {"--int=6", "--string=b"}));
+  ASSERT_EQ(int_value, 6);
+  ASSERT_EQ(string_value, "b");
+  ASSERT_TRUE(ParseFlags(flags, {"-int", "7", "-string", "c"}));
+  ASSERT_EQ(int_value, 7);
+  ASSERT_EQ(string_value, "c");
+  ASSERT_TRUE(ParseFlags(flags, {"--int", "8", "--string", "d"}));
+  ASSERT_EQ(int_value, 8);
+  ASSERT_EQ(string_value, "d");
+}
+
+TEST(FlagParser, InvalidStringFlag) {
+  std::string value;
+  auto flag = GflagsCompatFlag("myflag", value);
+  ASSERT_FALSE(flag.Parse({"-myflag"}));
+  ASSERT_FALSE(flag.Parse({"--myflag"}));
+}
+
+TEST(FlagParser, InvalidIntFlag) {
+  int value;
+  auto flag = GflagsCompatFlag("myflag", value);
+  ASSERT_FALSE(flag.Parse({"-myflag"}));
+  ASSERT_FALSE(flag.Parse({"--myflag"}));
+  ASSERT_FALSE(flag.Parse({"-myflag=abc"}));
+  ASSERT_FALSE(flag.Parse({"--myflag=def"}));
+  ASSERT_FALSE(flag.Parse({"-myflag", "abc"}));
+  ASSERT_FALSE(flag.Parse({"--myflag", "def"}));
+}
+
+TEST(FlagParser, InvalidFlagGuard) {
+  auto flag = InvalidFlagGuard();
+  ASSERT_TRUE(flag.Parse({}));
+  ASSERT_TRUE(flag.Parse({"positional"}));
+  ASSERT_TRUE(flag.Parse({"positional", "positional2"}));
+  ASSERT_FALSE(flag.Parse({"-flag"}));
+  ASSERT_FALSE(flag.Parse({"-"}));
+}
+
+TEST(FlagParser, UnexpectedArgumentGuard) {
+  auto flag = UnexpectedArgumentGuard();
+  ASSERT_TRUE(flag.Parse({}));
+  ASSERT_FALSE(flag.Parse({"positional"}));
+  ASSERT_FALSE(flag.Parse({"positional", "positional2"}));
+  ASSERT_FALSE(flag.Parse({"-flag"}));
+  ASSERT_FALSE(flag.Parse({"-"}));
+}
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/network.cpp b/common/libs/utils/network.cpp
index d1f5f59..d8068b4 100644
--- a/common/libs/utils/network.cpp
+++ b/common/libs/utils/network.cpp
@@ -17,15 +17,19 @@
 #include "common/libs/utils/network.h"
 
 #include <arpa/inet.h>
-#include <linux/if.h>
-#include <linux/if_tun.h>
-#include <linux/types.h>
-#include <linux/if_packet.h>
+#include <net/if.h>
+#include <netinet/ether.h>
 #include <netinet/ip.h>
 #include <netinet/udp.h>
-#include <netinet/ether.h>
 #include <string.h>
 
+// Kernel headers don't mix well with userspace headers, but there is no
+// userspace header that provides the if_tun.h #defines.  Include the kernel
+// header, but move conflicting definitions out of the way using macros.
+#define ethhdr __kernel_ethhdr
+#include <linux/if_tun.h>
+#undef ethdhr
+
 #include <android-base/strings.h>
 #include "android-base/logging.h"
 
@@ -36,12 +40,6 @@
 namespace cuttlefish {
 namespace {
 
-static std::string DefaultHostArtifactsPath(const std::string& file_name) {
-  return (StringFromEnv("ANDROID_HOST_OUT", StringFromEnv("HOME", ".")) +
-          "/") +
-         file_name;
-}
-
 // This should be the size of virtio_net_hdr_v1, from linux/virtio_net.h, but
 // the version of that header that ships with android in Pie does not include
 // that struct (it was added in Q).
@@ -96,42 +94,28 @@
     return tap_fd;
   }
 
-  if (HostArch() == Arch::Arm64) {
-    auto tapsetiff_path = DefaultHostArtifactsPath("bin/tapsetiff");
-    Command cmd(tapsetiff_path);
-    cmd.AddParameter(tap_fd);
-    cmd.AddParameter(interface_name.c_str());
-    int ret = cmd.Start().Wait();
-    if (ret != 0) {
-      LOG(ERROR) << "Unable to run tapsetiff.py. Exited with status " << ret;
-      tap_fd->Close();
-      return SharedFD();
-    }
-  } else {
-    struct ifreq ifr;
-    memset(&ifr, 0, sizeof(ifr));
-    ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_VNET_HDR;
-    strncpy(ifr.ifr_name, interface_name.c_str(), IFNAMSIZ);
+  struct ifreq ifr;
+  memset(&ifr, 0, sizeof(ifr));
+  ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_VNET_HDR;
+  strncpy(ifr.ifr_name, interface_name.c_str(), IFNAMSIZ);
 
-    int err = tap_fd->Ioctl(TUNSETIFF, &ifr);
-    if (err < 0) {
-      LOG(ERROR) << "Unable to connect to " << interface_name
-                 << " tap interface: " << tap_fd->StrError();
-      tap_fd->Close();
-      return SharedFD();
-    }
-
-    // The interface's configuration may have been modified or just not set
-    // correctly on creation. While qemu checks this and enforces the right
-    // configuration, crosvm does not, so it needs to be set before it's passed to
-    // it.
-    tap_fd->Ioctl(TUNSETOFFLOAD,
-                  reinterpret_cast<void*>(TUN_F_CSUM | TUN_F_UFO | TUN_F_TSO4 |
-                                        TUN_F_TSO6));
-    int len = SIZE_OF_VIRTIO_NET_HDR_V1;
-    tap_fd->Ioctl(TUNSETVNETHDRSZ, &len);
+  int err = tap_fd->Ioctl(TUNSETIFF, &ifr);
+  if (err < 0) {
+    LOG(ERROR) << "Unable to connect to " << interface_name
+               << " tap interface: " << tap_fd->StrError();
+    tap_fd->Close();
+    return SharedFD();
   }
 
+  // The interface's configuration may have been modified or just not set
+  // correctly on creation. While qemu checks this and enforces the right
+  // configuration, crosvm does not, so it needs to be set before it's passed to
+  // it.
+  tap_fd->Ioctl(TUNSETOFFLOAD,
+                reinterpret_cast<void*>(TUN_F_CSUM | TUN_F_UFO | TUN_F_TSO4 |
+                                        TUN_F_TSO6));
+  int len = SIZE_OF_VIRTIO_NET_HDR_V1;
+  tap_fd->Ioctl(TUNSETVNETHDRSZ, &len);
   return tap_fd;
 }
 
@@ -139,9 +123,9 @@
   Command cmd("/bin/bash");
   cmd.AddParameter("-c");
   cmd.AddParameter("egrep -h -e \"^iff:.*\" /proc/*/fdinfo/*");
-  std::string stdin, stdout, stderr;
-  RunWithManagedStdio(std::move(cmd), &stdin, &stdout, &stderr);
-  auto lines = android::base::Split(stdout, "\n");
+  std::string stdin_str, stdout_str, stderr_str;
+  RunWithManagedStdio(std::move(cmd), &stdin_str, &stdout_str, &stderr_str);
+  auto lines = android::base::Split(stdout_str, "\n");
   std::set<std::string> tap_interfaces;
   for (const auto& line : lines) {
     if (line == "") {
@@ -310,4 +294,25 @@
   return true;
 }
 
+bool ReleaseDhcpLeases(const std::string& lease_path, SharedFD tap_fd,
+                       const std::uint8_t dhcp_server_ip[4]) {
+  auto lease_file_fd = SharedFD::Open(lease_path, O_RDONLY);
+  if (!lease_file_fd->IsOpen()) {
+    LOG(ERROR) << "Could not open leases file \"" << lease_path << '"';
+    return false;
+  }
+  bool success = true;
+  auto dhcp_leases = ParseDnsmasqLeases(lease_file_fd);
+  for (auto& lease : dhcp_leases) {
+    if (!ReleaseDhcp4(tap_fd, lease.mac_address, lease.ip_address,
+                      dhcp_server_ip)) {
+      LOG(ERROR) << "Failed to release " << lease;
+      success = false;
+    } else {
+      LOG(INFO) << "Successfully dropped " << lease;
+    }
+  }
+  return success;
+}
+
 }  // namespace cuttlefish
diff --git a/common/libs/utils/network.h b/common/libs/utils/network.h
index 64b562e..98cdf18 100644
--- a/common/libs/utils/network.h
+++ b/common/libs/utils/network.h
@@ -49,4 +49,6 @@
                   const std::uint8_t ip_address[4],
                   const std::uint8_t dhcp_server_ip[4]);
 
+bool ReleaseDhcpLeases(const std::string& lease_path, SharedFD tap_fd,
+                       const std::uint8_t dhcp_server_ip[4]);
 }
diff --git a/common/libs/utils/shared_fd_flag.cpp b/common/libs/utils/shared_fd_flag.cpp
new file mode 100644
index 0000000..9d5ad89
--- /dev/null
+++ b/common/libs/utils/shared_fd_flag.cpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+#include "common/libs/utils/shared_fd_flag.h"
+
+#include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <string>
+
+#include "common/libs/fs/shared_fd.h"
+#include "common/libs/utils/flag_parser.h"
+
+namespace cuttlefish {
+
+static bool Set(const FlagMatch& match, SharedFD& out) {
+  int raw_fd;
+  if (!android::base::ParseInt(match.value.c_str(), &raw_fd)) {
+    LOG(ERROR) << "Failed to parse value \"" << match.value
+               << "\" for fd flag \"" << match.key << "\"";
+    return false;
+  }
+  out = SharedFD::Dup(raw_fd);
+  if (out->IsOpen()) {
+    close(raw_fd);
+  }
+  return true;
+}
+
+Flag SharedFDFlag(SharedFD& out) {
+  return Flag().Setter([&](const FlagMatch& mat) { return Set(mat, out); });
+}
+Flag SharedFDFlag(const std::string& name, SharedFD& out) {
+  return GflagsCompatFlag(name).Setter(
+      [&out](const FlagMatch& mat) { return Set(mat, out); });
+}
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/size_utils.cpp b/common/libs/utils/shared_fd_flag.h
similarity index 69%
rename from common/libs/utils/size_utils.cpp
rename to common/libs/utils/shared_fd_flag.h
index 9f25445..33b1555 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/common/libs/utils/shared_fd_flag.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -13,16 +13,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#pragma once
 
-#include "common/libs/utils/size_utils.h"
+#include <string>
 
-#include <unistd.h>
+#include "common/libs/fs/shared_fd.h"
+#include "common/libs/utils/flag_parser.h"
 
 namespace cuttlefish {
 
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
-}
+Flag SharedFDFlag(SharedFD& out);
+Flag SharedFDFlag(const std::string& name, SharedFD& out);
 
 }  // namespace cuttlefish
diff --git a/common/libs/utils/size_utils.h b/common/libs/utils/size_utils.h
index 625cdd8..71bfea6 100644
--- a/common/libs/utils/size_utils.h
+++ b/common/libs/utils/size_utils.h
@@ -26,6 +26,9 @@
 constexpr int PARTITION_SIZE_SHIFT = 12;
 
 // Returns the smallest multiple of 2^align_log greater than or equal to val.
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log);
+constexpr uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
+  uint64_t align = 1ULL << align_log;
+  return ((val + (align - 1)) / align) * align;
+}
 
 }  // namespace cuttlefish
diff --git a/common/libs/utils/subprocess.cpp b/common/libs/utils/subprocess.cpp
index 7c05219..cb8e4c6 100644
--- a/common/libs/utils/subprocess.cpp
+++ b/common/libs/utils/subprocess.cpp
@@ -16,6 +16,7 @@
 
 #include "common/libs/utils/subprocess.h"
 
+#include <android-base/logging.h>
 #include <errno.h>
 #include <signal.h>
 #include <stdlib.h>
@@ -24,13 +25,15 @@
 #include <sys/wait.h>
 #include <unistd.h>
 
+#include <stdio.h>
 #include <map>
 #include <set>
 #include <thread>
 
-#include <android-base/logging.h>
-
 #include "common/libs/fs/shared_buf.h"
+#include "common/libs/utils/files.h"
+
+extern char** environ;
 
 namespace cuttlefish {
 namespace {
@@ -74,14 +77,35 @@
   ret.push_back(NULL);
   return ret;
 }
-
-void UnsetEnvironment(const std::unordered_set<std::string>& unenv) {
-  for (auto it = unenv.cbegin(); it != unenv.cend(); ++it) {
-    unsetenv(it->c_str());
-  }
-}
 }  // namespace
 
+SubprocessOptions& SubprocessOptions::Verbose(bool verbose) & {
+  verbose_ = verbose;
+  return *this;
+}
+SubprocessOptions SubprocessOptions::Verbose(bool verbose) && {
+  verbose_ = verbose;
+  return *this;
+}
+
+SubprocessOptions& SubprocessOptions::ExitWithParent(bool v) & {
+  exit_with_parent_ = v;
+  return *this;
+}
+SubprocessOptions SubprocessOptions::ExitWithParent(bool v) && {
+  exit_with_parent_ = v;
+  return *this;
+}
+
+SubprocessOptions& SubprocessOptions::InGroup(bool in_group) & {
+  in_group_ = in_group;
+  return *this;
+}
+SubprocessOptions SubprocessOptions::InGroup(bool in_group) && {
+  in_group_ = in_group;
+  return *this;
+}
+
 Subprocess::Subprocess(Subprocess&& subprocess)
     : pid_(subprocess.pid_),
       started_(subprocess.started_),
@@ -143,7 +167,7 @@
   return retval;
 }
 
-bool KillSubprocess(Subprocess* subprocess) {
+StopperResult KillSubprocess(Subprocess* subprocess) {
   auto pid = subprocess->pid();
   if (pid > 0) {
     auto pgid = getpgid(pid);
@@ -155,13 +179,23 @@
       // to the process and not a (non-existent) group
     }
     bool is_group_head = pid == pgid;
-    if (is_group_head) {
-      return killpg(pid, SIGKILL) == 0;
-    } else {
-      return kill(pid, SIGKILL) == 0;
+    auto kill_ret = (is_group_head ? killpg : kill)(pid, SIGKILL);
+    if (kill_ret == 0) {
+      return StopperResult::kStopSuccess;
     }
+    auto kill_cmd = is_group_head ? "killpg(" : "kill(";
+    PLOG(ERROR) << kill_cmd << pid << ", SIGKILL) failed: ";
+    return StopperResult::kStopFailure;
   }
-  return true;
+  return StopperResult::kStopSuccess;
+}
+
+Command::Command(const std::string& executable, SubprocessStopper stopper)
+    : subprocess_stopper_(stopper) {
+  for (char** env = environ; *env; env++) {
+    env_.emplace_back(*env);
+  }
+  command_.push_back(executable);
 }
 
 Command::~Command() {
@@ -175,41 +209,30 @@
   }
 }
 
-bool Command::BuildParameter(std::stringstream* stream, SharedFD shared_fd) {
+void Command::BuildParameter(std::stringstream* stream, SharedFD shared_fd) {
   int fd;
   if (inherited_fds_.count(shared_fd)) {
     fd = inherited_fds_[shared_fd];
   } else {
     fd = shared_fd->Fcntl(F_DUPFD_CLOEXEC, 3);
-    if (fd < 0) {
-      LOG(ERROR) << "Could not acquire a new file descriptor: " << shared_fd->StrError();
-      return false;
-    }
+    CHECK(fd >= 0) << "Could not acquire a new file descriptor: "
+                   << shared_fd->StrError();
     inherited_fds_[shared_fd] = fd;
   }
   *stream << fd;
-  return true;
 }
 
-bool Command::RedirectStdIO(Subprocess::StdIOChannel channel,
+void Command::RedirectStdIO(Subprocess::StdIOChannel channel,
                             SharedFD shared_fd) {
-  if (!shared_fd->IsOpen()) {
-    return false;
-  }
-  if (redirects_.count(channel)) {
-    LOG(ERROR) << "Attempted multiple redirections of fd: "
-               << static_cast<int>(channel);
-    return false;
-  }
+  CHECK(shared_fd->IsOpen());
+  CHECK(redirects_.count(channel) == 0)
+      << "Attempted multiple redirections of fd: " << static_cast<int>(channel);
   auto dup_fd = shared_fd->Fcntl(F_DUPFD_CLOEXEC, 3);
-  if (dup_fd < 0) {
-    LOG(ERROR) << "Could not acquire a new file descriptor: " << shared_fd->StrError();
-    return false;
-  }
+  CHECK(dup_fd >= 0) << "Could not acquire a new file descriptor: "
+                     << shared_fd->StrError();
   redirects_[channel] = dup_fd;
-  return true;
 }
-bool Command::RedirectStdIO(Subprocess::StdIOChannel subprocess_channel,
+void Command::RedirectStdIO(Subprocess::StdIOChannel subprocess_channel,
                             Subprocess::StdIOChannel parent_channel) {
   return RedirectStdIO(subprocess_channel,
                        SharedFD::Dup(static_cast<int>(parent_channel)));
@@ -243,17 +266,9 @@
       }
     }
     int rval;
-    // If use_parent_env_ is false, the current process's environment is used as
-    // the environment of the child process. To force an empty emvironment for
-    // the child process pass the address of a pointer to NULL
-    if (use_parent_env_) {
-      UnsetEnvironment(unenv_);
-      rval = execvp(cmd[0], const_cast<char* const*>(cmd.data()));
-    } else {
-      auto envp = ToCharPointers(env_);
-      rval = execvpe(cmd[0], const_cast<char* const*>(cmd.data()),
-                    const_cast<char* const*>(envp.data()));
-    }
+    auto envp = ToCharPointers(env_);
+    rval = execvpe(cmd[0], const_cast<char* const*>(cmd.data()),
+                   const_cast<char* const*>(envp.data()));
     // No need for an if: if exec worked it wouldn't have returned
     LOG(ERROR) << "exec of " << cmd[0] << " failed (" << strerror(errno)
                << ")";
@@ -276,6 +291,20 @@
   return Subprocess(pid, subprocess_stopper_);
 }
 
+std::string Command::AsBashScript(
+    const std::string& redirected_stdio_path) const {
+  CHECK(inherited_fds_.empty())
+      << "Bash wrapper will not have inheritied file descriptors.";
+  CHECK(redirects_.empty()) << "Bash wrapper will not have redirected stdio.";
+
+  std::string contents =
+      "#!/bin/bash\n\n" + android::base::Join(command_, " \\\n");
+  if (!redirected_stdio_path.empty()) {
+    contents += " &> " + AbsolutePath(redirected_stdio_path);
+  }
+  return contents;
+}
+
 // A class that waits for threads to exit in its destructor.
 class ThreadJoiner {
 std::vector<std::thread*> threads_;
@@ -290,8 +319,8 @@
   }
 };
 
-int RunWithManagedStdio(Command&& cmd_tmp, const std::string* stdin,
-                        std::string* stdout, std::string* stderr,
+int RunWithManagedStdio(Command&& cmd_tmp, const std::string* stdin_str,
+                        std::string* stdout_str, std::string* stderr_str,
                         SubprocessOptions options) {
   /*
    * The order of these declarations is necessary for safety. If the function
@@ -308,60 +337,48 @@
   ThreadJoiner thread_joiner({&stdin_thread, &stdout_thread, &stderr_thread});
   Command cmd = std::move(cmd_tmp);
   bool io_error = false;
-  if (stdin != nullptr) {
+  if (stdin_str != nullptr) {
     SharedFD pipe_read, pipe_write;
     if (!SharedFD::Pipe(&pipe_read, &pipe_write)) {
       LOG(ERROR) << "Could not create a pipe to write the stdin of \""
                 << cmd.GetShortName() << "\"";
       return -1;
     }
-    if (!cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdIn, pipe_read)) {
-      LOG(ERROR) << "Could not set stdout of \"" << cmd.GetShortName()
-                << "\", was already set.";
-      return -1;
-    }
-    stdin_thread = std::thread([pipe_write, stdin, &io_error]() {
-      int written = WriteAll(pipe_write, *stdin);
+    cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdIn, pipe_read);
+    stdin_thread = std::thread([pipe_write, stdin_str, &io_error]() {
+      int written = WriteAll(pipe_write, *stdin_str);
       if (written < 0) {
         io_error = true;
         LOG(ERROR) << "Error in writing stdin to process";
       }
     });
   }
-  if (stdout != nullptr) {
+  if (stdout_str != nullptr) {
     SharedFD pipe_read, pipe_write;
     if (!SharedFD::Pipe(&pipe_read, &pipe_write)) {
       LOG(ERROR) << "Could not create a pipe to read the stdout of \""
                 << cmd.GetShortName() << "\"";
       return -1;
     }
-    if (!cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdOut, pipe_write)) {
-      LOG(ERROR) << "Could not set stdout of \"" << cmd.GetShortName()
-                << "\", was already set.";
-      return -1;
-    }
-    stdout_thread = std::thread([pipe_read, stdout, &io_error]() {
-      int read = ReadAll(pipe_read, stdout);
+    cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdOut, pipe_write);
+    stdout_thread = std::thread([pipe_read, stdout_str, &io_error]() {
+      int read = ReadAll(pipe_read, stdout_str);
       if (read < 0) {
         io_error = true;
         LOG(ERROR) << "Error in reading stdout from process";
       }
     });
   }
-  if (stderr != nullptr) {
+  if (stderr_str != nullptr) {
     SharedFD pipe_read, pipe_write;
     if (!SharedFD::Pipe(&pipe_read, &pipe_write)) {
       LOG(ERROR) << "Could not create a pipe to read the stderr of \""
                 << cmd.GetShortName() << "\"";
       return -1;
     }
-    if (!cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdErr, pipe_write)) {
-      LOG(ERROR) << "Could not set stderr of \"" << cmd.GetShortName()
-                << "\", was already set.";
-      return -1;
-    }
-    stderr_thread = std::thread([pipe_read, stderr, &io_error]() {
-      int read = ReadAll(pipe_read, stderr);
+    cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdErr, pipe_write);
+    stderr_thread = std::thread([pipe_read, stderr_str, &io_error]() {
+      int read = ReadAll(pipe_read, stderr_str);
       if (read < 0) {
         io_error = true;
         LOG(ERROR) << "Error in reading stderr from process";
diff --git a/common/libs/utils/subprocess.h b/common/libs/utils/subprocess.h
index 777a026..b34a1c3 100644
--- a/common/libs/utils/subprocess.h
+++ b/common/libs/utils/subprocess.h
@@ -15,6 +15,9 @@
  */
 #pragma once
 
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+#include <common/libs/fs/shared_fd.h>
 #include <sys/types.h>
 
 #include <functional>
@@ -24,17 +27,20 @@
 #include <unordered_set>
 #include <vector>
 
-#include <android-base/logging.h>
-
-#include <common/libs/fs/shared_fd.h>
-
 namespace cuttlefish {
+
+enum class StopperResult {
+  kStopFailure, /* Failed to stop the subprocess. */
+  kStopCrash,   /* Attempted to stop the subprocess cleanly, but that failed. */
+  kStopSuccess, /* The subprocess exited in the expected way. */
+};
+
 class Command;
 class Subprocess;
 class SubprocessOptions;
-using SubprocessStopper = std::function<bool(Subprocess*)>;
+using SubprocessStopper = std::function<StopperResult(Subprocess*)>;
 // Kills a process by sending it the SIGKILL signal.
-bool KillSubprocess(Subprocess* subprocess);
+StopperResult KillSubprocess(Subprocess* subprocess);
 
 // Keeps track of a running (sub)process. Allows to wait for its completion.
 // It's an error to wait twice for the same subprocess.
@@ -65,7 +71,7 @@
   // completion of the command, that's what Wait is for.
   bool Started() const { return started_; }
   pid_t pid() const { return pid_; }
-  bool Stop() { return stopper_(this); }
+  StopperResult Stop() { return stopper_(this); }
 
  private:
   // Copy is disabled to avoid waiting twice for the same pid (the first wait
@@ -79,26 +85,26 @@
 };
 
 class SubprocessOptions {
-  bool verbose_;
-  bool exit_with_parent_;
-  bool in_group_;
-public:
-  SubprocessOptions() : verbose_(true), exit_with_parent_(true) {}
+ public:
+  SubprocessOptions()
+      : verbose_(true), exit_with_parent_(true), in_group_(false) {}
 
-  void Verbose(bool verbose) {
-    verbose_ = verbose;
-  }
-  void ExitWithParent(bool exit_with_parent) {
-    exit_with_parent_ = exit_with_parent;
-  }
+  SubprocessOptions& Verbose(bool verbose) &;
+  SubprocessOptions Verbose(bool verbose) &&;
+  SubprocessOptions& ExitWithParent(bool exit_with_parent) &;
+  SubprocessOptions ExitWithParent(bool exit_with_parent) &&;
   // The subprocess runs as head of its own process group.
-  void InGroup(bool in_group) {
-    in_group_ = in_group;
-  }
+  SubprocessOptions& InGroup(bool in_group) &;
+  SubprocessOptions InGroup(bool in_group) &&;
 
   bool Verbose() const { return verbose_; }
   bool ExitWithParent() const { return exit_with_parent_; }
   bool InGroup() const { return in_group_; }
+
+ private:
+  bool verbose_;
+  bool exit_with_parent_;
+  bool in_group_;
 };
 
 // An executable command. Multiple subprocesses can be started from the same
@@ -108,15 +114,15 @@
  private:
   template <typename T>
   // For every type other than SharedFD (for which there is a specialisation)
-  bool BuildParameter(std::stringstream* stream, T t) {
+  void BuildParameter(std::stringstream* stream, T t) {
     *stream << t;
-    return true;
   }
   // Special treatment for SharedFD
-  bool BuildParameter(std::stringstream* stream, SharedFD shared_fd);
+  void BuildParameter(std::stringstream* stream, SharedFD shared_fd);
   template <typename T, typename... Args>
-  bool BuildParameter(std::stringstream* stream, T t, Args... args) {
-    return BuildParameter(stream, t) && BuildParameter(stream, args...);
+  void BuildParameter(std::stringstream* stream, T t, Args... args) {
+    BuildParameter(stream, t);
+    BuildParameter(stream, args...);
   }
 
  public:
@@ -124,10 +130,7 @@
   // optional subprocess stopper. When not provided, stopper defaults to sending
   // SIGKILL to the subprocess.
   Command(const std::string& executable,
-          SubprocessStopper stopper = KillSubprocess)
-      : subprocess_stopper_(stopper) {
-    command_.push_back(executable);
-  }
+          SubprocessStopper stopper = KillSubprocess);
   Command(Command&&) = default;
   // The default copy constructor is unsafe because it would mean multiple
   // closing of the inherited file descriptors. If needed it can be implemented
@@ -136,18 +139,40 @@
   Command& operator=(const Command&) = delete;
   ~Command();
 
+  const std::string& Executable() const { return command_[0]; }
+
+  void SetExecutable(const std::string& executable) {
+    command_[0] = executable;
+  }
+
+  void SetStopper(SubprocessStopper stopper) { subprocess_stopper_ = stopper; }
+
   // Specify the environment for the subprocesses to be started. By default
   // subprocesses inherit the parent's environment.
   void SetEnvironment(const std::vector<std::string>& env) {
-    use_parent_env_ = false;
     env_ = env;
   }
 
-  // Specify environment variables to be unset from the parent's environment
-  // for the subprocesses to be started.
-  void UnsetFromEnvironment(const std::vector<std::string>& env) {
-    use_parent_env_ = true;
-    std::copy(env.cbegin(), env.cend(), std::inserter(unenv_, unenv_.end()));
+  void AddEnvironmentVariable(const std::string& env_var,
+                              const std::string& value) {
+    return AddEnvironmentVariable(env_var + "=" + value);
+  }
+
+  void AddEnvironmentVariable(const std::string& env_var) {
+    env_.push_back(env_var);
+  }
+
+  // Specify an environment variable to be unset from the parent's
+  // environment for the subprocesses to be started.
+  void UnsetFromEnvironment(const std::string& env_var) {
+    auto it = env_.begin();
+    while (it != env_.end()) {
+      if (android::base::StartsWith(*it, env_var + "=")) {
+        it = env_.erase(it);
+      } else {
+        ++it;
+      }
+    }
   }
 
   // Adds a single parameter to the command. All arguments are concatenated into
@@ -156,33 +181,24 @@
   // object is destroyed. To add multiple parameters to the command the function
   // must be called multiple times, one per parameter.
   template <typename... Args>
-  bool AddParameter(Args... args) {
+  void AddParameter(Args... args) {
     std::stringstream ss;
-    if (BuildParameter(&ss, args...)) {
-      command_.push_back(ss.str());
-      return true;
-    }
-    return false;
+    BuildParameter(&ss, args...);
+    command_.push_back(ss.str());
   }
   // Similar to AddParameter, except the args are appended to the last (most
   // recently-added) parameter in the command.
   template <typename... Args>
-  bool AppendToLastParameter(Args... args) {
-    if (command_.empty()) {
-      LOG(ERROR) << "There is no parameter to append to.";
-      return false;
-    }
+  void AppendToLastParameter(Args... args) {
+    CHECK(!command_.empty()) << "There is no parameter to append to.";
     std::stringstream ss;
-    if (BuildParameter(&ss, args...)) {
-      command_[command_.size()-1] += ss.str();
-      return true;
-    }
-    return false;
+    BuildParameter(&ss, args...);
+    command_[command_.size() - 1] += ss.str();
   }
 
   // Redirects the standard IO of the command.
-  bool RedirectStdIO(Subprocess::StdIOChannel channel, SharedFD shared_fd);
-  bool RedirectStdIO(Subprocess::StdIOChannel subprocess_channel,
+  void RedirectStdIO(Subprocess::StdIOChannel channel, SharedFD shared_fd);
+  void RedirectStdIO(Subprocess::StdIOChannel subprocess_channel,
                      Subprocess::StdIOChannel parent_channel);
 
   // Starts execution of the command. This method can be called multiple times,
@@ -195,13 +211,17 @@
     return command_[0];
   }
 
+  // Generates the contents for a bash script that can be used to run this
+  // command. Note that this command must not require any file descriptors
+  // or stdio redirects as those would not be available when the bash script
+  // is run.
+  std::string AsBashScript(const std::string& redirected_stdio_path = "") const;
+
  private:
   std::vector<std::string> command_;
   std::map<SharedFD, int> inherited_fds_{};
   std::map<Subprocess::StdIOChannel, int> redirects_{};
-  bool use_parent_env_ = true;
   std::vector<std::string> env_{};
-  std::unordered_set<std::string> unenv_{};
   SubprocessStopper subprocess_stopper_;
 };
 
diff --git a/common/libs/utils/unix_sockets.cpp b/common/libs/utils/unix_sockets.cpp
new file mode 100644
index 0000000..c275525
--- /dev/null
+++ b/common/libs/utils/unix_sockets.cpp
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+#include "common/libs/utils/unix_sockets.h"
+
+#include <android-base/logging.h>
+#include <android-base/result.h>
+
+#include <numeric>
+#include <vector>
+
+#include "common/libs/fs/shared_fd.h"
+
+using android::base::Error;
+using android::base::Result;
+
+// This would use android::base::ReceiveFileDescriptors, but it silently drops
+// SCM_CREDENTIALS control messages.
+
+namespace cuttlefish {
+
+ControlMessage ControlMessage::FromRaw(const cmsghdr* cmsg) {
+  ControlMessage message;
+  message.data_ =
+      std::vector<char>((char*)cmsg, ((char*)cmsg) + cmsg->cmsg_len);
+  if (message.IsFileDescriptors()) {
+    size_t fdcount =
+        static_cast<size_t>(cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int);
+    for (int i = 0; i < fdcount; i++) {
+      // Use memcpy as CMSG_DATA may be unaligned
+      int fd = -1;
+      memcpy(&fd, CMSG_DATA(cmsg) + (i * sizeof(int)), sizeof(fd));
+      message.fds_.push_back(fd);
+    }
+  }
+  return message;
+}
+
+Result<ControlMessage> ControlMessage::FromFileDescriptors(
+    const std::vector<SharedFD>& fds) {
+  ControlMessage message;
+  message.data_.resize(CMSG_SPACE(fds.size() * sizeof(int)), 0);
+  message.Raw()->cmsg_len = CMSG_LEN(fds.size() * sizeof(int));
+  message.Raw()->cmsg_level = SOL_SOCKET;
+  message.Raw()->cmsg_type = SCM_RIGHTS;
+  for (int i = 0; i < fds.size(); i++) {
+    int fd_copy = fds[i]->Fcntl(F_DUPFD_CLOEXEC, 3);
+    if (fd_copy < 0) {
+      return Error() << "Failed to duplicate fd: " << fds[i]->StrError();
+    }
+    message.fds_.push_back(fd_copy);
+    // Following the CMSG_DATA spec, use memcpy to avoid alignment issues.
+    memcpy(CMSG_DATA(message.Raw()) + (i * sizeof(int)), &fd_copy, sizeof(int));
+  }
+  return message;
+}
+
+ControlMessage ControlMessage::FromCredentials(const ucred& credentials) {
+  ControlMessage message;
+  message.data_.resize(CMSG_SPACE(sizeof(ucred)), 0);
+  message.Raw()->cmsg_len = CMSG_LEN(sizeof(ucred));
+  message.Raw()->cmsg_level = SOL_SOCKET;
+  message.Raw()->cmsg_type = SCM_CREDENTIALS;
+  // Following the CMSG_DATA spec, use memcpy to avoid alignment issues.
+  memcpy(CMSG_DATA(message.Raw()), &credentials, sizeof(credentials));
+  return message;
+}
+
+ControlMessage::ControlMessage(ControlMessage&& existing) {
+  // Enforce that the old ControlMessage is left empty, so it doesn't try to
+  // close any file descriptors. https://stackoverflow.com/a/17735913
+  data_ = std::move(existing.data_);
+  existing.data_.clear();
+  fds_ = std::move(existing.fds_);
+  existing.fds_.clear();
+}
+
+ControlMessage& ControlMessage::operator=(ControlMessage&& existing) {
+  // Enforce that the old ControlMessage is left empty, so it doesn't try to
+  // close any file descriptors. https://stackoverflow.com/a/17735913
+  data_ = std::move(existing.data_);
+  existing.data_.clear();
+  fds_ = std::move(existing.fds_);
+  existing.fds_.clear();
+  return *this;
+}
+
+ControlMessage::~ControlMessage() {
+  for (const auto& fd : fds_) {
+    if (close(fd) != 0) {
+      PLOG(ERROR) << "Failed to close fd " << fd
+                  << ", may have leaked or closed prematurely";
+    }
+  }
+}
+
+cmsghdr* ControlMessage::Raw() {
+  return reinterpret_cast<cmsghdr*>(data_.data());
+}
+
+const cmsghdr* ControlMessage::Raw() const {
+  return reinterpret_cast<const cmsghdr*>(data_.data());
+}
+
+bool ControlMessage::IsCredentials() const {
+  bool right_level = Raw()->cmsg_level == SOL_SOCKET;
+  bool right_type = Raw()->cmsg_type == SCM_CREDENTIALS;
+  bool enough_data = Raw()->cmsg_len >= sizeof(cmsghdr) + sizeof(ucred);
+  return right_level && right_type && enough_data;
+}
+
+Result<ucred> ControlMessage::AsCredentials() const {
+  if (!IsCredentials()) {
+    return Error() << "Control message does not hold a credential";
+  }
+  ucred credentials;
+  memcpy(&credentials, CMSG_DATA(Raw()), sizeof(ucred));
+  return credentials;
+}
+
+bool ControlMessage::IsFileDescriptors() const {
+  bool right_level = Raw()->cmsg_level == SOL_SOCKET;
+  bool right_type = Raw()->cmsg_type == SCM_RIGHTS;
+  return right_level && right_type;
+}
+
+Result<std::vector<SharedFD>> ControlMessage::AsSharedFDs() const {
+  if (!IsFileDescriptors()) {
+    return Error() << "Message does not contain file descriptors";
+  }
+  size_t fdcount =
+      static_cast<size_t>(Raw()->cmsg_len - CMSG_LEN(0)) / sizeof(int);
+  std::vector<SharedFD> shared_fds;
+  for (int i = 0; i < fdcount; i++) {
+    // Use memcpy as CMSG_DATA may be unaligned
+    int fd = -1;
+    memcpy(&fd, CMSG_DATA(Raw()) + (i * sizeof(int)), sizeof(fd));
+    SharedFD shared_fd = SharedFD::Dup(fd);
+    if (!shared_fd->IsOpen()) {
+      return Error() << "Could not dup FD " << fd;
+    }
+    shared_fds.push_back(shared_fd);
+  }
+  return shared_fds;
+}
+
+bool UnixSocketMessage::HasFileDescriptors() {
+  for (const auto& control_message : control) {
+    if (control_message.IsFileDescriptors()) {
+      return true;
+    }
+  }
+  return false;
+}
+Result<std::vector<SharedFD>> UnixSocketMessage::FileDescriptors() {
+  std::vector<SharedFD> fds;
+  for (const auto& control_message : control) {
+    if (control_message.IsFileDescriptors()) {
+      auto additional_fds = control_message.AsSharedFDs();
+      if (!additional_fds.ok()) {
+        return Error() << "Failed to get FDs: " << additional_fds.error();
+      }
+      fds.insert(fds.end(), additional_fds->begin(), additional_fds->end());
+    }
+  }
+  return fds;
+}
+bool UnixSocketMessage::HasCredentials() {
+  for (const auto& control_message : control) {
+    if (control_message.IsCredentials()) {
+      return true;
+    }
+  }
+  return false;
+}
+Result<ucred> UnixSocketMessage::Credentials() {
+  std::vector<ucred> credentials;
+  for (const auto& control_message : control) {
+    if (control_message.IsCredentials()) {
+      auto creds = control_message.AsCredentials();
+      if (!creds.ok()) {
+        return Error() << "Message claims to have credentials but does not: "
+                       << creds.error();
+      }
+      credentials.push_back(*creds);
+    }
+  }
+  if (credentials.size() == 0) {
+    return Error() << "No credentials present";
+  } else if (credentials.size() == 1) {
+    return credentials[0];
+  } else {
+    return Error() << "Excepted 1 credential, received " << credentials.size();
+  }
+}
+
+UnixMessageSocket::UnixMessageSocket(SharedFD socket) : socket_(socket) {
+  socklen_t ln = sizeof(max_message_size_);
+  CHECK(socket->GetSockOpt(SOL_SOCKET, SO_SNDBUF, &max_message_size_, &ln) == 0)
+      << "error: can't retrieve socket max message size\n";
+}
+
+Result<void> UnixMessageSocket::EnableCredentials(bool enable) {
+  int flag = enable ? 1 : 0;
+  if (socket_->SetSockOpt(SOL_SOCKET, SO_PASSCRED, &flag, sizeof(flag)) != 0) {
+    return Error() << "Could not set credential status to " << enable << ": "
+                   << socket_->StrError();
+  }
+  return {};
+}
+
+Result<void> UnixMessageSocket::WriteMessage(const UnixSocketMessage& message) {
+  auto control_size = 0;
+  for (const auto& control : message.control) {
+    control_size += control.data_.size();
+  }
+  std::vector<char> message_control(control_size, 0);
+  msghdr message_header{};
+  message_header.msg_control = message_control.data();
+  message_header.msg_controllen = message_control.size();
+  auto cmsg = CMSG_FIRSTHDR(&message_header);
+  size_t calculated_control_len = 0;
+  for (const ControlMessage& control : message.control) {
+    if (cmsg == nullptr) {
+      return Error() << "Control messages did not fit in control buffer";
+    }
+    /* size() should match CMSG_SPACE */
+    memcpy(cmsg, control.data_.data(), control.data_.size());
+    calculated_control_len += control.data_.size();
+    cmsg = CMSG_NXTHDR(&message_header, cmsg);
+  }
+
+  iovec message_iovec;
+  message_iovec.iov_base = (void*)message.data.data();
+  message_iovec.iov_len = message.data.size();
+  message_header.msg_name = nullptr;
+  message_header.msg_namelen = 0;
+  message_header.msg_iov = &message_iovec;
+  message_header.msg_iovlen = 1;
+  message_header.msg_flags = 0;
+
+  auto bytes_sent = socket_->SendMsg(&message_header, MSG_NOSIGNAL);
+  if (bytes_sent < 0) {
+    return Error() << "Failed to send message: " << socket_->StrError();
+  } else if (bytes_sent != message.data.size()) {
+    return Error() << "Failed to send entire message. Sent " << bytes_sent
+                   << ", excepted to send " << message.data.size();
+  }
+  return {};
+}
+
+Result<UnixSocketMessage> UnixMessageSocket::ReadMessage() {
+  msghdr message_header{};
+  std::vector<char> message_control(max_message_size_, 0);
+  message_header.msg_control = message_control.data();
+  message_header.msg_controllen = message_control.size();
+  std::vector<char> message_data(max_message_size_, 0);
+  iovec message_iovec;
+  message_iovec.iov_base = message_data.data();
+  message_iovec.iov_len = message_data.size();
+  message_header.msg_iov = &message_iovec;
+  message_header.msg_iovlen = 1;
+  message_header.msg_name = nullptr;
+  message_header.msg_namelen = 0;
+  message_header.msg_flags = 0;
+
+  auto bytes_read = socket_->RecvMsg(&message_header, MSG_CMSG_CLOEXEC);
+  if (bytes_read < 0) {
+    return Error() << "Read error: " << socket_->StrError();
+  } else if (message_header.msg_flags & MSG_TRUNC) {
+    return Error() << "Message was truncated on read";
+  } else if (message_header.msg_flags & MSG_CTRUNC) {
+    return Error() << "Message control data was truncated on read";
+  } else if (message_header.msg_flags & MSG_ERRQUEUE) {
+    return Error() << "Error queue error";
+  }
+  UnixSocketMessage managed_message;
+  for (auto cmsg = CMSG_FIRSTHDR(&message_header); cmsg != nullptr;
+       cmsg = CMSG_NXTHDR(&message_header, cmsg)) {
+    managed_message.control.emplace_back(ControlMessage::FromRaw(cmsg));
+  }
+  message_data.resize(bytes_read);
+  managed_message.data = std::move(message_data);
+
+  return managed_message;
+}
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/unix_sockets.h b/common/libs/utils/unix_sockets.h
new file mode 100644
index 0000000..cd6995f
--- /dev/null
+++ b/common/libs/utils/unix_sockets.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+#pragma once
+
+#include <android-base/result.h>
+
+#include <cstdint>
+#include <variant>
+#include <vector>
+
+#include "common/libs/fs/shared_fd.h"
+
+namespace cuttlefish {
+
+class UnixMessageSocket;
+
+struct ControlMessage {
+ public:
+  static ControlMessage FromRaw(const cmsghdr*);
+  static android::base::Result<ControlMessage> FromFileDescriptors(
+      const std::vector<SharedFD>&);
+  static ControlMessage FromCredentials(const ucred&);
+  ControlMessage(const ControlMessage&) = delete;
+  ControlMessage(ControlMessage&&);
+  ~ControlMessage();
+  ControlMessage& operator=(const ControlMessage&) = delete;
+  ControlMessage& operator=(ControlMessage&&);
+
+  const cmsghdr* Raw() const;
+
+  bool IsCredentials() const;
+  android::base::Result<ucred> AsCredentials() const;
+
+  bool IsFileDescriptors() const;
+  android::base::Result<std::vector<SharedFD>> AsSharedFDs() const;
+
+ private:
+  friend class UnixMessageSocket;
+  ControlMessage() = default;
+  cmsghdr* Raw();
+
+  std::vector<char> data_;
+  std::vector<int> fds_;
+};
+
+struct UnixSocketMessage {
+  std::vector<char> data;
+  std::vector<ControlMessage> control;
+
+  bool HasFileDescriptors();
+  android::base::Result<std::vector<SharedFD>> FileDescriptors();
+  bool HasCredentials();
+  android::base::Result<ucred> Credentials();
+};
+
+class UnixMessageSocket {
+ public:
+  UnixMessageSocket(SharedFD);
+  [[nodiscard]] android::base::Result<void> WriteMessage(
+      const UnixSocketMessage&);
+  android::base::Result<UnixSocketMessage> ReadMessage();
+
+  [[nodiscard]] android::base::Result<void> EnableCredentials(bool);
+
+ private:
+  SharedFD socket_;
+  std::uint32_t max_message_size_;
+};
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/unix_sockets_test.cpp b/common/libs/utils/unix_sockets_test.cpp
new file mode 100644
index 0000000..4475064
--- /dev/null
+++ b/common/libs/utils/unix_sockets_test.cpp
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "common/libs/utils/unix_sockets.h"
+
+#include <android-base/logging.h>
+#include <android-base/result.h>
+#include <gtest/gtest.h>
+
+#include "common/libs/fs/shared_buf.h"
+#include "common/libs/fs/shared_fd.h"
+
+namespace cuttlefish {
+
+SharedFD CreateMemFDWithData(const std::string& data) {
+  auto memfd = SharedFD::MemfdCreate("");
+  CHECK(WriteAll(memfd, data) == data.size()) << memfd->StrError();
+  CHECK(memfd->LSeek(0, SEEK_SET) == 0);
+  return memfd;
+}
+
+std::string ReadAllFDData(SharedFD fd) {
+  std::string data;
+  CHECK(ReadAll(fd, &data) > 0) << fd->StrError();
+  return data;
+}
+
+TEST(UnixSocketMessage, ExtractFileDescriptors) {
+  auto memfd1 = CreateMemFDWithData("abc");
+  auto memfd2 = CreateMemFDWithData("def");
+
+  UnixSocketMessage message;
+  auto control1 = ControlMessage::FromFileDescriptors({memfd1});
+  ASSERT_TRUE(control1.ok()) << control1.error();
+  message.control.emplace_back(std::move(*control1));
+  auto control2 = ControlMessage::FromFileDescriptors({memfd2});
+  ASSERT_TRUE(control2.ok()) << control2.error();
+  message.control.emplace_back(std::move(*control2));
+
+  ASSERT_TRUE(message.HasFileDescriptors());
+  auto fds = message.FileDescriptors();
+  ASSERT_TRUE(fds.ok());
+  ASSERT_EQ("abc", ReadAllFDData((*fds)[0]));
+  ASSERT_EQ("def", ReadAllFDData((*fds)[1]));
+}
+
+std::pair<UnixMessageSocket, UnixMessageSocket> UnixMessageSocketPair() {
+  SharedFD sock1, sock2;
+  CHECK(SharedFD::SocketPair(AF_UNIX, SOCK_SEQPACKET, 0, &sock1, &sock2));
+  return {UnixMessageSocket(sock1), UnixMessageSocket(sock2)};
+}
+
+TEST(UnixMessageSocket, SendPlainMessage) {
+  auto [writer, reader] = UnixMessageSocketPair();
+  UnixSocketMessage message_in = {{1, 2, 3}, {}};
+  auto write_result = writer.WriteMessage(message_in);
+  ASSERT_TRUE(write_result.ok()) << write_result.error();
+
+  auto message_out = reader.ReadMessage();
+  ASSERT_TRUE(message_out.ok()) << message_out.error();
+  ASSERT_EQ(message_in.data, message_out->data);
+  ASSERT_EQ(0, message_out->control.size());
+}
+
+TEST(UnixMessageSocket, SendFileDescriptor) {
+  auto [writer, reader] = UnixMessageSocketPair();
+
+  UnixSocketMessage message_in = {{4, 5, 6}, {}};
+  auto control_in =
+      ControlMessage::FromFileDescriptors({CreateMemFDWithData("abc")});
+  ASSERT_TRUE(control_in.ok()) << control_in.error();
+  message_in.control.emplace_back(std::move(*control_in));
+  auto write_result = writer.WriteMessage(message_in);
+  ASSERT_TRUE(write_result.ok()) << write_result.error();
+
+  auto message_out = reader.ReadMessage();
+  ASSERT_TRUE(message_out.ok()) << message_out.error();
+  ASSERT_EQ(message_in.data, message_out->data);
+
+  ASSERT_EQ(1, message_out->control.size());
+  auto fds_out = message_out->control[0].AsSharedFDs();
+  ASSERT_TRUE(fds_out.ok()) << fds_out.error();
+  ASSERT_EQ(1, fds_out->size());
+  ASSERT_EQ("abc", ReadAllFDData((*fds_out)[0]));
+}
+
+TEST(UnixMessageSocket, SendTwoFileDescriptors) {
+  auto memfd1 = CreateMemFDWithData("abc");
+  auto memfd2 = CreateMemFDWithData("def");
+
+  auto [writer, reader] = UnixMessageSocketPair();
+  UnixSocketMessage message_in = {{7, 8, 9}, {}};
+  auto control_in = ControlMessage::FromFileDescriptors({memfd1, memfd2});
+  ASSERT_TRUE(control_in.ok()) << control_in.error();
+  message_in.control.emplace_back(std::move(*control_in));
+  auto write_result = writer.WriteMessage(message_in);
+  ASSERT_TRUE(write_result.ok()) << write_result.error();
+
+  auto message_out = reader.ReadMessage();
+  ASSERT_TRUE(message_out.ok()) << message_out.error();
+  ASSERT_EQ(message_in.data, message_out->data);
+
+  ASSERT_EQ(1, message_out->control.size());
+  auto fds_out = message_out->control[0].AsSharedFDs();
+  ASSERT_TRUE(fds_out.ok()) << fds_out.error();
+  ASSERT_EQ(2, fds_out->size());
+
+  ASSERT_EQ("abc", ReadAllFDData((*fds_out)[0]));
+  ASSERT_EQ("def", ReadAllFDData((*fds_out)[1]));
+}
+
+TEST(UnixMessageSocket, SendCredentials) {
+  auto [writer, reader] = UnixMessageSocketPair();
+  auto writer_creds_status = writer.EnableCredentials(true);
+  ASSERT_TRUE(writer_creds_status.ok()) << writer_creds_status.error();
+  auto reader_creds_status = reader.EnableCredentials(true);
+  ASSERT_TRUE(reader_creds_status.ok()) << reader_creds_status.error();
+
+  ucred credentials_in;
+  credentials_in.pid = getpid();
+  credentials_in.uid = getuid();
+  credentials_in.gid = getgid();
+  UnixSocketMessage message_in = {{1, 5, 9}, {}};
+  auto control_in = ControlMessage::FromCredentials(credentials_in);
+  message_in.control.emplace_back(std::move(control_in));
+  auto write_result = writer.WriteMessage(message_in);
+  ASSERT_TRUE(write_result.ok()) << write_result.error();
+
+  auto message_out = reader.ReadMessage();
+  ASSERT_TRUE(message_out.ok()) << message_out.error();
+  ASSERT_EQ(message_in.data, message_out->data);
+
+  ASSERT_EQ(1, message_out->control.size());
+  auto credentials_out = message_out->control[0].AsCredentials();
+  ASSERT_TRUE(credentials_out.ok()) << credentials_out.error();
+  ASSERT_EQ(credentials_in.pid, credentials_out->pid);
+  ASSERT_EQ(credentials_in.uid, credentials_out->uid);
+  ASSERT_EQ(credentials_in.gid, credentials_out->gid);
+}
+
+TEST(UnixMessageSocket, BadCredentialsBlocked) {
+  auto [writer, reader] = UnixMessageSocketPair();
+  auto writer_creds_status = writer.EnableCredentials(true);
+  ASSERT_TRUE(writer_creds_status.ok()) << writer_creds_status.error();
+  auto reader_creds_status = reader.EnableCredentials(true);
+  ASSERT_TRUE(reader_creds_status.ok()) << reader_creds_status.error();
+
+  ucred credentials_in;
+  // This assumes the test is running without root privileges
+  credentials_in.pid = getpid() + 1;
+  credentials_in.uid = getuid() + 1;
+  credentials_in.gid = getgid() + 1;
+
+  UnixSocketMessage message_in = {{2, 4, 6}, {}};
+  auto control_in = ControlMessage::FromCredentials(credentials_in);
+  message_in.control.emplace_back(std::move(control_in));
+  auto write_result = writer.WriteMessage(message_in);
+  ASSERT_FALSE(write_result.ok()) << write_result.error();
+}
+
+TEST(UnixMessageSocket, AutoCredentials) {
+  auto [writer, reader] = UnixMessageSocketPair();
+  auto writer_creds_status = writer.EnableCredentials(true);
+  ASSERT_TRUE(writer_creds_status.ok()) << writer_creds_status.error();
+  auto reader_creds_status = reader.EnableCredentials(true);
+  ASSERT_TRUE(reader_creds_status.ok()) << reader_creds_status.error();
+
+  UnixSocketMessage message_in = {{3, 6, 9}, {}};
+  auto write_result = writer.WriteMessage(message_in);
+  ASSERT_TRUE(write_result.ok()) << write_result.error();
+
+  auto message_out = reader.ReadMessage();
+  ASSERT_TRUE(message_out.ok()) << message_out.error();
+  ASSERT_EQ(message_in.data, message_out->data);
+
+  ASSERT_EQ(1, message_out->control.size());
+  auto credentials_out = message_out->control[0].AsCredentials();
+  ASSERT_TRUE(credentials_out.ok()) << credentials_out.error();
+  ASSERT_EQ(getpid(), credentials_out->pid);
+  ASSERT_EQ(getuid(), credentials_out->uid);
+  ASSERT_EQ(getgid(), credentials_out->gid);
+}
+
+}  // namespace cuttlefish
diff --git a/guest/commands/bt_vhci_forwarder/bt_vhci_forwarder.rc b/guest/commands/bt_vhci_forwarder/bt_vhci_forwarder.rc
new file mode 100644
index 0000000..8b7fb36
--- /dev/null
+++ b/guest/commands/bt_vhci_forwarder/bt_vhci_forwarder.rc
@@ -0,0 +1,7 @@
+on post-fs
+    start bt_vhci_forwarder
+
+service bt_vhci_forwarder /vendor/bin/bt_vhci_forwarder -virtio_console_dev=${vendor.ser.bt-uart}
+    user bluetooth
+    group bluetooth
+
diff --git a/host/commands/mk_cdisk/Android.bp b/guest/commands/dlkm_loader/Android.bp
similarity index 72%
copy from host/commands/mk_cdisk/Android.bp
copy to guest/commands/dlkm_loader/Android.bp
index a0cf8ba..ae91c02 100644
--- a/host/commands/mk_cdisk/Android.bp
+++ b/guest/commands/dlkm_loader/Android.bp
@@ -18,24 +18,16 @@
 }
 
 cc_binary {
-    name: "mk_cdisk",
+    name: "dlkm_loader",
     srcs: [
-        "mk_cdisk.cc",
-    ],
-    shared_libs: [
-        "libcuttlefish_fs",
-        "libcuttlefish_utils",
-        "libbase",
-        "libjsoncpp",
-        "liblog",
-        "libz",
+        "dlkm_loader.cpp",
     ],
     static_libs: [
-        "libcdisk_spec",
-        "libext2_uuid",
-        "libimage_aggregator",
-        "libprotobuf-cpp-lite",
-        "libsparse",
+        "libbase",
+        "libmodprobe",
     ],
-    defaults: ["cuttlefish_host"],
+    shared_libs: [
+        "liblog",
+    ],
+    defaults: ["cuttlefish_guest_only"]
 }
diff --git a/guest/commands/dlkm_loader/dlkm_loader.cpp b/guest/commands/dlkm_loader/dlkm_loader.cpp
new file mode 100644
index 0000000..0d22225
--- /dev/null
+++ b/guest/commands/dlkm_loader/dlkm_loader.cpp
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <android-base/logging.h>
+#include <modprobe/modprobe.h>
+
+int main(void) {
+  LOG(INFO) << "dlkm loader successfully initialized";
+  Modprobe m({"/vendor/lib/modules"}, "modules.load");
+  CHECK(m.LoadListedModules(true)) << "modules from vendor dlkm weren't loaded correctly";
+  LOG(INFO) << "module load count is " << m.GetModuleCount();
+  return 0;
+}
diff --git a/guest/commands/rename_netiface/Android.bp b/guest/commands/rename_netiface/Android.bp
index f7b71be..3cf4225 100644
--- a/guest/commands/rename_netiface/Android.bp
+++ b/guest/commands/rename_netiface/Android.bp
@@ -23,6 +23,7 @@
     srcs: [
         "main.cpp",
     ],
+    init_rc: ["rename_netiface.rc"],
     shared_libs: [
         "cuttlefish_net",
     ],
diff --git a/guest/commands/rename_netiface/rename_netiface.rc b/guest/commands/rename_netiface/rename_netiface.rc
new file mode 100644
index 0000000..bd82a39
--- /dev/null
+++ b/guest/commands/rename_netiface/rename_netiface.rc
@@ -0,0 +1,2 @@
+service rename_eth0 /vendor/bin/rename_netiface eth0 rmnet0
+    oneshot
diff --git a/guest/commands/setup_wifi/Android.bp b/guest/commands/setup_wifi/Android.bp
index 21472b1..e7a85bb 100644
--- a/guest/commands/setup_wifi/Android.bp
+++ b/guest/commands/setup_wifi/Android.bp
@@ -23,6 +23,7 @@
     srcs: [
         "main.cpp",
     ],
+    init_rc: ["setup_wifi.rc"],
     shared_libs: [
         "cuttlefish_net",
         "libbase",
diff --git a/guest/commands/setup_wifi/main.cpp b/guest/commands/setup_wifi/main.cpp
index 032f39e..4a91442 100644
--- a/guest/commands/setup_wifi/main.cpp
+++ b/guest/commands/setup_wifi/main.cpp
@@ -32,17 +32,15 @@
 #include "common/libs/net/network_interface.h"
 #include "common/libs/net/network_interface_manager.h"
 
-DEFINE_string(mac_address, "", "mac address to use for wlan0");
+DEFINE_string(mac_prefix, "", "mac prefix to use for wlan0");
 
-static std::array<unsigned char, 6> str_to_mac(const std::string& mac_str) {
+static std::array<unsigned char, 6> prefix_to_mac(
+    const std::string& mac_prefix) {
   std::array<unsigned char, 6> mac;
-  std::istringstream stream(mac_str);
-  for (int i = 0; i < 6; i++) {
-    int num;
-    stream >> std::hex >> num;
-    mac[i] = num;
-    stream.get();
-  }
+  int macPrefix = stoi(mac_prefix);
+  mac[0] = 0x02;
+  mac[1] = (macPrefix >> CHAR_BIT) & 0xFF;
+  mac[2] = macPrefix & 0xFF;
   return mac;
 }
 
@@ -51,7 +49,8 @@
   auto factory = cuttlefish::NetlinkClientFactory::Default();
   std::unique_ptr<cuttlefish::NetlinkClient> nl(factory->New(NETLINK_ROUTE));
 
-  LOG(INFO) << "Setting " << source << " mac address to " << FLAGS_mac_address;
+  LOG(INFO) << "Setting " << source << " mac address based on "
+            << FLAGS_mac_prefix;
   int32_t index = if_nametoindex(source.c_str());
   // Setting the address is available in RTM_SETLINK, but not RTM_NEWLINK.
   // https://elixir.bootlin.com/linux/v5.4.44/source/net/core/rtnetlink.c#L2785
@@ -64,7 +63,7 @@
     .ifi_index = index,
     .ifi_change = 0xFFFFFFFF,
   });
-  fix_mac_request.AddMacAddress(str_to_mac(FLAGS_mac_address));
+  fix_mac_request.AddMacAddress(prefix_to_mac(FLAGS_mac_prefix));
   bool fix_mac = nl->Send(fix_mac_request);
   if (!fix_mac) {
     LOG(ERROR) << "setup_network: could not fix mac address";
@@ -131,10 +130,10 @@
 }
 
 int main(int argc, char** argv) {
-  char wifi_address[PROPERTY_VALUE_MAX + 1];
-  property_get("ro.boot.wifi_mac_address", wifi_address, "");
+  char wifi_mac_prefix[PROPERTY_VALUE_MAX + 1];
+  property_get("ro.boot.wifi_mac_prefix", wifi_mac_prefix, "");
 
-  SetCommandLineOptionWithMode("mac_address", wifi_address,
+  SetCommandLineOptionWithMode("mac_prefix", wifi_mac_prefix,
                                google::FlagSettingMode::SET_FLAGS_DEFAULT);
 
   gflags::ParseCommandLineFlags(&argc, &argv, true);
diff --git a/guest/commands/setup_wifi/setup_wifi.rc b/guest/commands/setup_wifi/setup_wifi.rc
new file mode 100644
index 0000000..a2f1eb5
--- /dev/null
+++ b/guest/commands/setup_wifi/setup_wifi.rc
@@ -0,0 +1,2 @@
+service setup_wifi /vendor/bin/setup_wifi
+    oneshot
diff --git a/guest/hals/audio/audio_hw.c b/guest/hals/audio/audio_hw.c
deleted file mode 100644
index c0c705a..0000000
--- a/guest/hals/audio/audio_hw.c
+++ /dev/null
@@ -1,1854 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.
- *
- * This code was forked from device/generic/goldfish/audio/audio_hw.c
- *
- * At the time of forking, the code was identical except that a fallback
- * to a legacy HAL which does not use ALSA was removed, and the dependency
- * on libdl was also removed.
- */
-
-#define LOG_TAG "audio_hw_generic"
-
-#include <assert.h>
-#include <errno.h>
-#include <inttypes.h>
-#include <pthread.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include <dlfcn.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <log/log.h>
-#include <cutils/list.h>
-#include <cutils/str_parms.h>
-
-#include <hardware/hardware.h>
-#include <system/audio.h>
-#include <hardware/audio.h>
-#include <tinyalsa/asoundlib.h>
-
-#define PCM_CARD 0
-#define PCM_DEVICE 0
-
-#define OUT_PERIOD_MS 10
-#define OUT_PERIOD_COUNT 4
-
-#define IN_PERIOD_MS 10
-#define IN_PERIOD_COUNT 4
-
-struct generic_audio_device {
-    struct audio_hw_device device;          // Constant after init
-    pthread_mutex_t lock;
-    bool mic_mute;                          // Protected by this->lock
-    struct mixer* mixer;                    // Protected by this->lock
-    struct listnode out_streams;            // Record for output streams, protected by this->lock
-    struct listnode in_streams;             // Record for input streams, protected by this->lock
-    audio_patch_handle_t next_patch_handle; // Protected by this->lock
-};
-
-/* If not NULL, this is a pointer to the fallback module.
- * This really is the original goldfish audio device /dev/eac which we will use
- * if no alsa devices are detected.
- */
-static int adev_get_mic_mute(const struct audio_hw_device *dev, bool *state);
-static int adev_get_microphones(const audio_hw_device_t *dev,
-                                struct audio_microphone_characteristic_t *mic_array,
-                                size_t *mic_count);
-
-
-typedef struct audio_vbuffer {
-    pthread_mutex_t lock;
-    uint8_t *  data;
-    size_t     frame_size;
-    size_t     frame_count;
-    size_t     head;
-    size_t     tail;
-    size_t     live;
-} audio_vbuffer_t;
-
-static int audio_vbuffer_init (audio_vbuffer_t * audio_vbuffer, size_t frame_count,
-                              size_t frame_size) {
-    if (!audio_vbuffer) {
-        return -EINVAL;
-    }
-    audio_vbuffer->frame_size = frame_size;
-    audio_vbuffer->frame_count = frame_count;
-    size_t bytes = frame_count * frame_size;
-    audio_vbuffer->data = calloc(bytes, 1);
-    if (!audio_vbuffer->data) {
-        return -ENOMEM;
-    }
-    audio_vbuffer->head = 0;
-    audio_vbuffer->tail = 0;
-    audio_vbuffer->live = 0;
-    pthread_mutex_init (&audio_vbuffer->lock, (const pthread_mutexattr_t *) NULL);
-    return 0;
-}
-
-static int audio_vbuffer_destroy (audio_vbuffer_t * audio_vbuffer) {
-    if (!audio_vbuffer) {
-        return -EINVAL;
-    }
-    free(audio_vbuffer->data);
-    pthread_mutex_destroy(&audio_vbuffer->lock);
-    return 0;
-}
-
-static int audio_vbuffer_live (audio_vbuffer_t * audio_vbuffer) {
-    if (!audio_vbuffer) {
-        return -EINVAL;
-    }
-    pthread_mutex_lock (&audio_vbuffer->lock);
-    int live = audio_vbuffer->live;
-    pthread_mutex_unlock (&audio_vbuffer->lock);
-    return live;
-}
-
-#define MIN(a,b) (((a)<(b))?(a):(b))
-static size_t audio_vbuffer_write (audio_vbuffer_t * audio_vbuffer, const void * buffer, size_t frame_count) {
-    size_t frames_written = 0;
-    pthread_mutex_lock (&audio_vbuffer->lock);
-
-    while (frame_count != 0) {
-        int frames = 0;
-        if (audio_vbuffer->live == 0 || audio_vbuffer->head > audio_vbuffer->tail) {
-            frames = MIN(frame_count, audio_vbuffer->frame_count - audio_vbuffer->head);
-        } else if (audio_vbuffer->head < audio_vbuffer->tail) {
-            frames = MIN(frame_count, audio_vbuffer->tail - (audio_vbuffer->head));
-        } else {
-            // Full
-            break;
-        }
-        memcpy(&audio_vbuffer->data[audio_vbuffer->head*audio_vbuffer->frame_size],
-               &((uint8_t*)buffer)[frames_written*audio_vbuffer->frame_size],
-               frames*audio_vbuffer->frame_size);
-        audio_vbuffer->live += frames;
-        frames_written += frames;
-        frame_count -= frames;
-        audio_vbuffer->head = (audio_vbuffer->head + frames) % audio_vbuffer->frame_count;
-    }
-
-    pthread_mutex_unlock (&audio_vbuffer->lock);
-    return frames_written;
-}
-
-static size_t audio_vbuffer_read (audio_vbuffer_t * audio_vbuffer, void * buffer, size_t frame_count) {
-    size_t frames_read = 0;
-    pthread_mutex_lock (&audio_vbuffer->lock);
-
-    while (frame_count != 0) {
-        int frames = 0;
-        if (audio_vbuffer->live == audio_vbuffer->frame_count ||
-            audio_vbuffer->tail > audio_vbuffer->head) {
-            frames = MIN(frame_count, audio_vbuffer->frame_count - audio_vbuffer->tail);
-        } else if (audio_vbuffer->tail < audio_vbuffer->head) {
-            frames = MIN(frame_count, audio_vbuffer->head - audio_vbuffer->tail);
-        } else {
-            break;
-        }
-        memcpy(&((uint8_t*)buffer)[frames_read*audio_vbuffer->frame_size],
-               &audio_vbuffer->data[audio_vbuffer->tail*audio_vbuffer->frame_size],
-               frames*audio_vbuffer->frame_size);
-        audio_vbuffer->live -= frames;
-        frames_read += frames;
-        frame_count -= frames;
-        audio_vbuffer->tail = (audio_vbuffer->tail + frames) % audio_vbuffer->frame_count;
-    }
-
-    pthread_mutex_unlock (&audio_vbuffer->lock);
-    return frames_read;
-}
-
-struct generic_stream_out {
-    struct audio_stream_out stream;                 // Constant after init
-    pthread_mutex_t lock;
-    struct generic_audio_device *dev;               // Constant after init
-    uint32_t num_devices;                           // Protected by this->lock
-    audio_devices_t devices[AUDIO_PATCH_PORTS_MAX]; // Protected by this->lock
-    struct audio_config req_config;                 // Constant after init
-    struct pcm_config pcm_config;                   // Constant after init
-    audio_vbuffer_t buffer;                         // Constant after init
-
-    // Time & Position Keeping
-    bool standby;                      // Protected by this->lock
-    uint64_t underrun_position;        // Protected by this->lock
-    struct timespec underrun_time;     // Protected by this->lock
-    uint64_t last_write_time_us;       // Protected by this->lock
-    uint64_t frames_total_buffered;    // Protected by this->lock
-    uint64_t frames_written;           // Protected by this->lock
-    uint64_t frames_rendered;          // Protected by this->lock
-
-    // Worker
-    pthread_t worker_thread;          // Constant after init
-    pthread_cond_t worker_wake;       // Protected by this->lock
-    bool worker_standby;              // Protected by this->lock
-    bool worker_exit;                 // Protected by this->lock
-
-    audio_io_handle_t handle;          // Constant after init
-    audio_patch_handle_t patch_handle; // Protected by this->dev->lock
-
-    struct listnode stream_node;       // Protected by this->dev->lock
-};
-
-struct generic_stream_in {
-    struct audio_stream_in stream;    // Constant after init
-    pthread_mutex_t lock;
-    struct generic_audio_device *dev; // Constant after init
-    audio_devices_t device;           // Protected by this->lock
-    struct audio_config req_config;   // Constant after init
-    struct pcm *pcm;                  // Protected by this->lock
-    struct pcm_config pcm_config;     // Constant after init
-    int16_t *stereo_to_mono_buf;      // Protected by this->lock
-    size_t stereo_to_mono_buf_size;   // Protected by this->lock
-    audio_vbuffer_t buffer;           // Protected by this->lock
-
-    // Time & Position Keeping
-    bool standby;                     // Protected by this->lock
-    int64_t standby_position;         // Protected by this->lock
-    struct timespec standby_exit_time;// Protected by this->lock
-    int64_t standby_frames_read;      // Protected by this->lock
-
-    // Worker
-    pthread_t worker_thread;          // Constant after init
-    pthread_cond_t worker_wake;       // Protected by this->lock
-    bool worker_standby;              // Protected by this->lock
-    bool worker_exit;                 // Protected by this->lock
-
-    audio_io_handle_t handle;          // Constant after init
-    audio_patch_handle_t patch_handle; // Protected by this->dev->lock
-
-    struct listnode stream_node;       // Protected by this->dev->lock
-};
-
-static struct pcm_config pcm_config_out = {
-    .channels = 2,
-    .rate = 0,
-    .period_size = 0,
-    .period_count = OUT_PERIOD_COUNT,
-    .format = PCM_FORMAT_S16_LE,
-    .start_threshold = 0,
-};
-
-static struct pcm_config pcm_config_in = {
-    .channels = 2,
-    .rate = 0,
-    .period_size = 0,
-    .period_count = IN_PERIOD_COUNT,
-    .format = PCM_FORMAT_S16_LE,
-    .start_threshold = 0,
-    .stop_threshold = INT_MAX,
-};
-
-static pthread_mutex_t adev_init_lock = PTHREAD_MUTEX_INITIALIZER;
-static unsigned int audio_device_ref_count = 0;
-
-static uint32_t out_get_sample_rate(const struct audio_stream *stream)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    return out->req_config.sample_rate;
-}
-
-static int out_set_sample_rate(struct audio_stream *stream, uint32_t rate)
-{
-    return -ENOSYS;
-}
-
-static size_t out_get_buffer_size(const struct audio_stream *stream)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    int size = out->pcm_config.period_size *
-                audio_stream_out_frame_size(&out->stream);
-
-    return size;
-}
-
-static audio_channel_mask_t out_get_channels(const struct audio_stream *stream)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    return out->req_config.channel_mask;
-}
-
-static audio_format_t out_get_format(const struct audio_stream *stream)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-
-    return out->req_config.format;
-}
-
-static int out_set_format(struct audio_stream *stream, audio_format_t format)
-{
-    return -ENOSYS;
-}
-
-static int out_dump(const struct audio_stream *stream, int fd)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    pthread_mutex_lock(&out->lock);
-    dprintf(fd, "\tout_dump:\n"
-                "\t\tsample rate: %u\n"
-                "\t\tbuffer size: %zu\n"
-                "\t\tchannel mask: %08x\n"
-                "\t\tformat: %d\n"
-                "\t\tdevice(s): ",
-                out_get_sample_rate(stream),
-                out_get_buffer_size(stream),
-                out_get_channels(stream),
-                out_get_format(stream));
-    if (out->num_devices == 0) {
-        dprintf(fd, "%08x\n", AUDIO_DEVICE_NONE);
-    } else {
-        for (uint32_t i = 0; i < out->num_devices; i++) {
-            if (i != 0) {
-                dprintf(fd, ", ");
-            }
-            dprintf(fd, "%08x", out->devices[i]);
-        }
-        dprintf(fd, "\n");
-    }
-    dprintf(fd, "\t\taudio dev: %p\n\n", out->dev);
-    pthread_mutex_unlock(&out->lock);
-    return 0;
-}
-
-static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
-{
-    struct str_parms *parms;
-    char value[32];
-    int success;
-    int ret = -EINVAL;
-
-    if (kvpairs == NULL || kvpairs[0] == 0) {
-        return 0;
-    }
-    parms = str_parms_create_str(kvpairs);
-    success = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_ROUTING,
-            value, sizeof(value));
-    // As the hal version is 3.0, it must not use set parameters API to set audio devices.
-    // Instead, it should use create_audio_patch API.
-    assert(("Must not use set parameters API to set audio devices", success < 0));
-
-    if (str_parms_has_key(parms, AUDIO_PARAMETER_STREAM_FORMAT)) {
-        // match the return value of out_set_format
-        ret = -ENOSYS;
-    }
-
-    str_parms_destroy(parms);
-
-    if (ret == -EINVAL) {
-        ALOGW("%s(), unsupported parameter %s", __func__, kvpairs);
-        // There is not any key supported for set_parameters API.
-        // Return error when there is non-null value passed in.
-    }
-    return ret;
-}
-
-static char * out_get_parameters(const struct audio_stream *stream, const char *keys)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    struct str_parms *query = str_parms_create_str(keys);
-    char *str = NULL;
-    char value[256];
-    struct str_parms *reply = str_parms_create();
-    int ret;
-    bool get = false;
-
-    ret = str_parms_get_str(query, AUDIO_PARAMETER_STREAM_ROUTING, value, sizeof(value));
-    if (ret >= 0) {
-        pthread_mutex_lock(&out->lock);
-        audio_devices_t device = AUDIO_DEVICE_NONE;
-        for (uint32_t i = 0; i < out->num_devices; i++) {
-            device |= out->devices[i];
-        }
-        str_parms_add_int(reply, AUDIO_PARAMETER_STREAM_ROUTING, device);
-        pthread_mutex_unlock(&out->lock);
-        get = true;
-    }
-
-    if (str_parms_has_key(query, AUDIO_PARAMETER_STREAM_SUP_FORMATS)) {
-        value[0] = 0;
-        strcat(value, "AUDIO_FORMAT_PCM_16_BIT");
-        str_parms_add_str(reply, AUDIO_PARAMETER_STREAM_SUP_FORMATS, value);
-        get = true;
-    }
-
-    if (str_parms_has_key(query, AUDIO_PARAMETER_STREAM_FORMAT)) {
-        value[0] = 0;
-        strcat(value, "AUDIO_FORMAT_PCM_16_BIT");
-        str_parms_add_str(reply, AUDIO_PARAMETER_STREAM_FORMAT, value);
-        get = true;
-    }
-
-    if (get) {
-        str = str_parms_to_str(reply);
-    }
-    else {
-        ALOGD("%s Unsupported paramter: %s", __FUNCTION__, keys);
-    }
-
-    str_parms_destroy(query);
-    str_parms_destroy(reply);
-    return str;
-}
-
-static uint32_t out_get_latency(const struct audio_stream_out *stream)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    return (out->pcm_config.period_size * 1000) / out->pcm_config.rate;
-}
-
-static int out_set_volume(struct audio_stream_out *stream, float left,
-                          float right)
-{
-    return -ENOSYS;
-}
-
-static void *out_write_worker(void * args)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)args;
-    struct pcm *pcm = NULL;
-    uint8_t *buffer = NULL;
-    int buffer_frames;
-    int buffer_size;
-    bool restart = false;
-    bool shutdown = false;
-    while (true) {
-        pthread_mutex_lock(&out->lock);
-        while (out->worker_standby || restart) {
-            restart = false;
-            if (pcm) {
-                pcm_close(pcm); // Frees pcm
-                pcm = NULL;
-                free(buffer);
-                buffer=NULL;
-            }
-            if (out->worker_exit) {
-                break;
-            }
-            pthread_cond_wait(&out->worker_wake, &out->lock);
-        }
-
-        if (out->worker_exit) {
-            if (!out->worker_standby) {
-                ALOGE("Out worker not in standby before exiting");
-            }
-            shutdown = true;
-        }
-
-        while (!shutdown && audio_vbuffer_live(&out->buffer) == 0) {
-            pthread_cond_wait(&out->worker_wake, &out->lock);
-        }
-
-        if (shutdown) {
-            pthread_mutex_unlock(&out->lock);
-            break;
-        }
-
-        if (!pcm) {
-            pcm = pcm_open(PCM_CARD, PCM_DEVICE,
-                          PCM_OUT | PCM_MONOTONIC, &out->pcm_config);
-            if (!pcm_is_ready(pcm)) {
-                ALOGE("pcm_open(out) failed: %s: channels %d format %d rate %d",
-                  pcm_get_error(pcm),
-                  out->pcm_config.channels,
-                  out->pcm_config.format,
-                  out->pcm_config.rate
-                   );
-                pthread_mutex_unlock(&out->lock);
-                break;
-            }
-            buffer_frames = out->pcm_config.period_size;
-            buffer_size = pcm_frames_to_bytes(pcm, buffer_frames);
-            buffer = malloc(buffer_size);
-            if (!buffer) {
-                ALOGE("could not allocate write buffer");
-                pthread_mutex_unlock(&out->lock);
-                break;
-            }
-        }
-        int frames = audio_vbuffer_read(&out->buffer, buffer, buffer_frames);
-        pthread_mutex_unlock(&out->lock);
-        int ret = pcm_write(pcm, buffer, pcm_frames_to_bytes(pcm, frames));
-        if (ret != 0) {
-            ALOGE("pcm_write failed %s", pcm_get_error(pcm));
-            restart = true;
-        }
-    }
-    if (buffer) {
-        free(buffer);
-    }
-
-    return NULL;
-}
-
-// Call with in->lock held
-static void get_current_output_position(struct generic_stream_out *out,
-                                       uint64_t * position,
-                                       struct timespec * timestamp) {
-    struct timespec curtime = { .tv_sec = 0, .tv_nsec = 0 };
-    clock_gettime(CLOCK_MONOTONIC, &curtime);
-    const int64_t now_us = (curtime.tv_sec * 1000000000LL + curtime.tv_nsec) / 1000;
-    if (timestamp) {
-        *timestamp = curtime;
-    }
-    int64_t position_since_underrun;
-    if (out->standby) {
-        position_since_underrun = 0;
-    } else {
-        const int64_t first_us = (out->underrun_time.tv_sec * 1000000000LL +
-                                  out->underrun_time.tv_nsec) / 1000;
-        position_since_underrun = (now_us - first_us) *
-                out_get_sample_rate(&out->stream.common) /
-                1000000;
-        if (position_since_underrun < 0) {
-            position_since_underrun = 0;
-        }
-    }
-    *position = out->underrun_position + position_since_underrun;
-
-    // The device will reuse the same output stream leading to periods of
-    // underrun.
-    if (*position > out->frames_written) {
-        ALOGW("Not supplying enough data to HAL, expected position %" PRIu64 " , only wrote "
-              "%" PRIu64,
-              *position, out->frames_written);
-
-        *position = out->frames_written;
-        out->underrun_position = *position;
-        out->underrun_time = curtime;
-        out->frames_total_buffered = 0;
-    }
-}
-
-
-static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,
-                         size_t bytes)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    const size_t frames =  bytes / audio_stream_out_frame_size(stream);
-
-    pthread_mutex_lock(&out->lock);
-
-    if (out->worker_standby) {
-        out->worker_standby = false;
-    }
-
-    uint64_t current_position;
-    struct timespec current_time;
-
-    get_current_output_position(out, &current_position, &current_time);
-    const uint64_t now_us = (current_time.tv_sec * 1000000000LL +
-                             current_time.tv_nsec) / 1000;
-    if (out->standby) {
-        out->standby = false;
-        out->underrun_time = current_time;
-        out->frames_rendered = 0;
-        out->frames_total_buffered = 0;
-    }
-
-    size_t frames_written = audio_vbuffer_write(&out->buffer, buffer, frames);
-    pthread_cond_signal(&out->worker_wake);
-
-    /* Implementation just consumes bytes if we start getting backed up */
-    out->frames_written += frames;
-    out->frames_rendered += frames;
-    out->frames_total_buffered += frames;
-
-    // We simulate the audio device blocking when it's write buffers become
-    // full.
-
-    // At the beginning or after an underrun, try to fill up the vbuffer.
-    // This will be throttled by the PlaybackThread
-    int frames_sleep = out->frames_total_buffered < out->buffer.frame_count ? 0 : frames;
-
-    uint64_t sleep_time_us = frames_sleep * 1000000LL /
-                            out_get_sample_rate(&stream->common);
-
-    // If the write calls are delayed, subtract time off of the sleep to
-    // compensate
-    uint64_t time_since_last_write_us = now_us - out->last_write_time_us;
-    if (time_since_last_write_us < sleep_time_us) {
-        sleep_time_us -= time_since_last_write_us;
-    } else {
-        sleep_time_us = 0;
-    }
-    out->last_write_time_us = now_us + sleep_time_us;
-
-    pthread_mutex_unlock(&out->lock);
-
-    if (sleep_time_us > 0) {
-        usleep(sleep_time_us);
-    }
-
-    if (frames_written < frames) {
-        ALOGW("Hardware backing HAL too slow, could only write %zu of %zu frames", frames_written, frames);
-    }
-
-    /* Always consume all bytes */
-    return bytes;
-}
-
-static int out_get_presentation_position(const struct audio_stream_out *stream,
-                                   uint64_t *frames, struct timespec *timestamp)
-
-{
-    if (stream == NULL || frames == NULL || timestamp == NULL) {
-        return -EINVAL;
-    }
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-
-    pthread_mutex_lock(&out->lock);
-    get_current_output_position(out, frames, timestamp);
-    pthread_mutex_unlock(&out->lock);
-
-    return 0;
-}
-
-static int out_get_render_position(const struct audio_stream_out *stream,
-                                   uint32_t *dsp_frames)
-{
-    if (stream == NULL || dsp_frames == NULL) {
-        return -EINVAL;
-    }
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    pthread_mutex_lock(&out->lock);
-    *dsp_frames = out->frames_rendered;
-    pthread_mutex_unlock(&out->lock);
-    return 0;
-}
-
-// Must be called with out->lock held
-static void do_out_standby(struct generic_stream_out *out)
-{
-    int frames_sleep = 0;
-    uint64_t sleep_time_us = 0;
-    if (out->standby) {
-        return;
-    }
-    while (true) {
-        get_current_output_position(out, &out->underrun_position, NULL);
-        frames_sleep = out->frames_written - out->underrun_position;
-
-        if (frames_sleep == 0) {
-            break;
-        }
-
-        sleep_time_us = frames_sleep * 1000000LL /
-                        out_get_sample_rate(&out->stream.common);
-
-        pthread_mutex_unlock(&out->lock);
-        usleep(sleep_time_us);
-        pthread_mutex_lock(&out->lock);
-    }
-    out->worker_standby = true;
-    out->standby = true;
-}
-
-static int out_standby(struct audio_stream *stream)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    pthread_mutex_lock(&out->lock);
-    do_out_standby(out);
-    pthread_mutex_unlock(&out->lock);
-    return 0;
-}
-
-static int out_add_audio_effect(const struct audio_stream *stream, effect_handle_t effect)
-{
-    // out_add_audio_effect is a no op
-    return 0;
-}
-
-static int out_remove_audio_effect(const struct audio_stream *stream, effect_handle_t effect)
-{
-    // out_remove_audio_effect is a no op
-    return 0;
-}
-
-static int out_get_next_write_timestamp(const struct audio_stream_out *stream,
-                                        int64_t *timestamp)
-{
-    return -ENOSYS;
-}
-
-static uint32_t in_get_sample_rate(const struct audio_stream *stream)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    return in->req_config.sample_rate;
-}
-
-static int in_set_sample_rate(struct audio_stream *stream, uint32_t rate)
-{
-    return -ENOSYS;
-}
-
-static int refine_output_parameters(uint32_t *sample_rate, audio_format_t *format, audio_channel_mask_t *channel_mask)
-{
-    static const uint32_t sample_rates [] = {8000,11025,16000,22050,24000,32000,
-                                            44100,48000};
-    static const int sample_rates_count = sizeof(sample_rates)/sizeof(uint32_t);
-    bool inval = false;
-    if (*format != AUDIO_FORMAT_PCM_16_BIT) {
-        *format = AUDIO_FORMAT_PCM_16_BIT;
-        inval = true;
-    }
-
-    int channel_count = popcount(*channel_mask);
-    if (channel_count != 1 && channel_count != 2) {
-        *channel_mask = AUDIO_CHANNEL_IN_STEREO;
-        inval = true;
-    }
-
-    int i;
-    for (i = 0; i < sample_rates_count; i++) {
-        if (*sample_rate < sample_rates[i]) {
-            *sample_rate = sample_rates[i];
-            inval=true;
-            break;
-        }
-        else if (*sample_rate == sample_rates[i]) {
-            break;
-        }
-        else if (i == sample_rates_count-1) {
-            // Cap it to the highest rate we support
-            *sample_rate = sample_rates[i];
-            inval=true;
-        }
-    }
-
-    if (inval) {
-        return -EINVAL;
-    }
-    return 0;
-}
-
-static int refine_input_parameters(uint32_t *sample_rate, audio_format_t *format, audio_channel_mask_t *channel_mask)
-{
-    static const uint32_t sample_rates [] = {8000, 11025, 16000, 22050, 44100, 48000};
-    static const int sample_rates_count = sizeof(sample_rates)/sizeof(uint32_t);
-    bool inval = false;
-    // Only PCM_16_bit is supported. If this is changed, stereo to mono drop
-    // must be fixed in in_read
-    if (*format != AUDIO_FORMAT_PCM_16_BIT) {
-        *format = AUDIO_FORMAT_PCM_16_BIT;
-        inval = true;
-    }
-
-    int channel_count = popcount(*channel_mask);
-    if (channel_count != 1 && channel_count != 2) {
-        *channel_mask = AUDIO_CHANNEL_IN_STEREO;
-        inval = true;
-    }
-
-    int i;
-    for (i = 0; i < sample_rates_count; i++) {
-        if (*sample_rate < sample_rates[i]) {
-            *sample_rate = sample_rates[i];
-            inval=true;
-            break;
-        }
-        else if (*sample_rate == sample_rates[i]) {
-            break;
-        }
-        else if (i == sample_rates_count-1) {
-            // Cap it to the highest rate we support
-            *sample_rate = sample_rates[i];
-            inval=true;
-        }
-    }
-
-    if (inval) {
-        return -EINVAL;
-    }
-    return 0;
-}
-
-static int check_input_parameters(uint32_t sample_rate, audio_format_t format,
-                                  audio_channel_mask_t channel_mask)
-{
-    return refine_input_parameters(&sample_rate, &format, &channel_mask);
-}
-
-static size_t get_input_buffer_size(uint32_t sample_rate, audio_format_t format,
-                                    audio_channel_mask_t channel_mask)
-{
-    size_t size;
-    int channel_count = popcount(channel_mask);
-    if (check_input_parameters(sample_rate, format, channel_mask) != 0)
-        return 0;
-
-    size = sample_rate*IN_PERIOD_MS/1000;
-    // Audioflinger expects audio buffers to be multiple of 16 frames
-    size = ((size + 15) / 16) * 16;
-    size *= sizeof(short) * channel_count;
-
-    return size;
-}
-
-
-static size_t in_get_buffer_size(const struct audio_stream *stream)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    int size = get_input_buffer_size(in->req_config.sample_rate,
-                                 in->req_config.format,
-                                 in->req_config.channel_mask);
-
-    return size;
-}
-
-static audio_channel_mask_t in_get_channels(const struct audio_stream *stream)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    return in->req_config.channel_mask;
-}
-
-static audio_format_t in_get_format(const struct audio_stream *stream)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    return in->req_config.format;
-}
-
-static int in_set_format(struct audio_stream *stream, audio_format_t format)
-{
-    return -ENOSYS;
-}
-
-static int in_dump(const struct audio_stream *stream, int fd)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-
-    pthread_mutex_lock(&in->lock);
-    dprintf(fd, "\tin_dump:\n"
-                "\t\tsample rate: %u\n"
-                "\t\tbuffer size: %zu\n"
-                "\t\tchannel mask: %08x\n"
-                "\t\tformat: %d\n"
-                "\t\tdevice: %08x\n"
-                "\t\taudio dev: %p\n\n",
-                in_get_sample_rate(stream),
-                in_get_buffer_size(stream),
-                in_get_channels(stream),
-                in_get_format(stream),
-                in->device,
-                in->dev);
-    pthread_mutex_unlock(&in->lock);
-    return 0;
-}
-
-static int in_set_parameters(struct audio_stream *stream, const char *kvpairs)
-{
-    struct str_parms *parms;
-    char value[32];
-    int success;
-    int ret = -EINVAL;
-
-    if (kvpairs == NULL || kvpairs[0] == 0) {
-        return 0;
-    }
-    parms = str_parms_create_str(kvpairs);
-    success = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_ROUTING,
-            value, sizeof(value));
-    // As the hal version is 3.0, it must not use set parameters API to set audio device.
-    // Instead, it should use create_audio_patch API.
-    assert(("Must not use set parameters API to set audio devices", success < 0));
-
-    if (str_parms_has_key(parms, AUDIO_PARAMETER_STREAM_FORMAT)) {
-        // match the return value of in_set_format
-        ret = -ENOSYS;
-    }
-
-    str_parms_destroy(parms);
-
-    if (ret == -EINVAL) {
-        ALOGW("%s(), unsupported parameter %s", __func__, kvpairs);
-        // There is not any key supported for set_parameters API.
-        // Return error when there is non-null value passed in.
-    }
-    return ret;
-}
-
-static char * in_get_parameters(const struct audio_stream *stream,
-                                const char *keys)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    struct str_parms *query = str_parms_create_str(keys);
-    char *str = NULL;
-    char value[256];
-    struct str_parms *reply = str_parms_create();
-    int ret;
-    bool get = false;
-
-    ret = str_parms_get_str(query, AUDIO_PARAMETER_STREAM_ROUTING, value, sizeof(value));
-    if (ret >= 0) {
-        str_parms_add_int(reply, AUDIO_PARAMETER_STREAM_ROUTING, in->device);
-        get = true;
-    }
-
-    if (str_parms_has_key(query, AUDIO_PARAMETER_STREAM_SUP_FORMATS)) {
-        value[0] = 0;
-        strcat(value, "AUDIO_FORMAT_PCM_16_BIT");
-        str_parms_add_str(reply, AUDIO_PARAMETER_STREAM_SUP_FORMATS, value);
-        get = true;
-    }
-
-    if (str_parms_has_key(query, AUDIO_PARAMETER_STREAM_FORMAT)) {
-        value[0] = 0;
-        strcat(value, "AUDIO_FORMAT_PCM_16_BIT");
-        str_parms_add_str(reply, AUDIO_PARAMETER_STREAM_FORMAT, value);
-        get = true;
-    }
-
-    if (get) {
-        str = str_parms_to_str(reply);
-    }
-    else {
-        ALOGD("%s Unsupported paramter: %s", __FUNCTION__, keys);
-    }
-
-    str_parms_destroy(query);
-    str_parms_destroy(reply);
-    return str;
-}
-
-static int in_set_gain(struct audio_stream_in *stream, float gain)
-{
-    // in_set_gain is a no op
-    return 0;
-}
-
-// Call with in->lock held
-static void get_current_input_position(struct generic_stream_in *in,
-                                       int64_t * position,
-                                       struct timespec * timestamp) {
-    struct timespec t = { .tv_sec = 0, .tv_nsec = 0 };
-    clock_gettime(CLOCK_MONOTONIC, &t);
-    const int64_t now_us = (t.tv_sec * 1000000000LL + t.tv_nsec) / 1000;
-    if (timestamp) {
-        *timestamp = t;
-    }
-    int64_t position_since_standby;
-    if (in->standby) {
-        position_since_standby = 0;
-    } else {
-        const int64_t first_us = (in->standby_exit_time.tv_sec * 1000000000LL +
-                                  in->standby_exit_time.tv_nsec) / 1000;
-        position_since_standby = (now_us - first_us) *
-                in_get_sample_rate(&in->stream.common) /
-                1000000;
-        if (position_since_standby < 0) {
-            position_since_standby = 0;
-        }
-    }
-    *position = in->standby_position + position_since_standby;
-}
-
-// Must be called with in->lock held
-static void do_in_standby(struct generic_stream_in *in)
-{
-    if (in->standby) {
-        return;
-    }
-    in->worker_standby = true;
-    get_current_input_position(in, &in->standby_position, NULL);
-    in->standby = true;
-}
-
-static int in_standby(struct audio_stream *stream)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    pthread_mutex_lock(&in->lock);
-    do_in_standby(in);
-    pthread_mutex_unlock(&in->lock);
-    return 0;
-}
-
-static void *in_read_worker(void * args)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)args;
-    struct pcm *pcm = NULL;
-    uint8_t *buffer = NULL;
-    size_t buffer_frames;
-    int buffer_size;
-
-    bool restart = false;
-    bool shutdown = false;
-    while (true) {
-        pthread_mutex_lock(&in->lock);
-        while (in->worker_standby || restart) {
-            restart = false;
-            if (pcm) {
-                pcm_close(pcm); // Frees pcm
-                pcm = NULL;
-                free(buffer);
-                buffer=NULL;
-            }
-            if (in->worker_exit) {
-                break;
-            }
-            pthread_cond_wait(&in->worker_wake, &in->lock);
-        }
-
-        if (in->worker_exit) {
-            if (!in->worker_standby) {
-                ALOGE("In worker not in standby before exiting");
-            }
-            shutdown = true;
-        }
-        if (shutdown) {
-            pthread_mutex_unlock(&in->lock);
-            break;
-        }
-        if (!pcm) {
-            pcm = pcm_open(PCM_CARD, PCM_DEVICE,
-                          PCM_IN | PCM_MONOTONIC, &in->pcm_config);
-            if (!pcm_is_ready(pcm)) {
-                ALOGE("pcm_open(in) failed: %s: channels %d format %d rate %d",
-                  pcm_get_error(pcm),
-                  in->pcm_config.channels,
-                  in->pcm_config.format,
-                  in->pcm_config.rate
-                   );
-                pthread_mutex_unlock(&in->lock);
-                break;
-            }
-            buffer_frames = in->pcm_config.period_size;
-            buffer_size = pcm_frames_to_bytes(pcm, buffer_frames);
-            buffer = malloc(buffer_size);
-            if (!buffer) {
-                ALOGE("could not allocate worker read buffer");
-                pthread_mutex_unlock(&in->lock);
-                break;
-            }
-        }
-        pthread_mutex_unlock(&in->lock);
-        int ret = pcm_read(pcm, buffer, pcm_frames_to_bytes(pcm, buffer_frames));
-        if (ret != 0) {
-            ALOGW("pcm_read failed %s", pcm_get_error(pcm));
-            restart = true;
-            continue;
-        }
-
-        pthread_mutex_lock(&in->lock);
-        size_t frames_written = audio_vbuffer_write(&in->buffer, buffer, buffer_frames);
-        pthread_mutex_unlock(&in->lock);
-
-        if (frames_written != buffer_frames) {
-            ALOGW("in_read_worker only could write %zu / %zu frames", frames_written, buffer_frames);
-        }
-    }
-    if (buffer) {
-        free(buffer);
-    }
-    return NULL;
-}
-
-static ssize_t in_read(struct audio_stream_in *stream, void* buffer,
-                       size_t bytes)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    struct generic_audio_device *adev = in->dev;
-    const size_t frames =  bytes / audio_stream_in_frame_size(stream);
-    bool mic_mute = false;
-    size_t read_bytes = 0;
-
-    adev_get_mic_mute(&adev->device, &mic_mute);
-    pthread_mutex_lock(&in->lock);
-
-    if (in->worker_standby) {
-        in->worker_standby = false;
-    }
-    pthread_cond_signal(&in->worker_wake);
-
-    int64_t current_position;
-    struct timespec current_time;
-
-    get_current_input_position(in, &current_position, &current_time);
-    if (in->standby) {
-        in->standby = false;
-        in->standby_exit_time = current_time;
-        in->standby_frames_read = 0;
-    }
-
-    const int64_t frames_available = current_position - in->standby_position - in->standby_frames_read;
-    assert(frames_available >= 0);
-
-    const size_t frames_wait = ((uint64_t)frames_available > frames) ? 0 : frames - frames_available;
-
-    int64_t sleep_time_us  = frames_wait * 1000000LL /
-                             in_get_sample_rate(&stream->common);
-
-    pthread_mutex_unlock(&in->lock);
-
-    if (sleep_time_us > 0) {
-        usleep(sleep_time_us);
-    }
-
-    pthread_mutex_lock(&in->lock);
-    int read_frames = 0;
-    if (in->standby) {
-        ALOGW("Input put to sleep while read in progress");
-        goto exit;
-    }
-    in->standby_frames_read += frames;
-
-    if (popcount(in->req_config.channel_mask) == 1 &&
-        in->pcm_config.channels == 2) {
-        // Need to resample to mono
-        if (in->stereo_to_mono_buf_size < bytes*2) {
-            in->stereo_to_mono_buf = realloc(in->stereo_to_mono_buf,
-                                             bytes*2);
-            if (!in->stereo_to_mono_buf) {
-                ALOGE("Failed to allocate stereo_to_mono_buff");
-                goto exit;
-            }
-        }
-
-        read_frames = audio_vbuffer_read(&in->buffer, in->stereo_to_mono_buf, frames);
-
-        // Currently only pcm 16 is supported.
-        uint16_t *src = (uint16_t *)in->stereo_to_mono_buf;
-        uint16_t *dst = (uint16_t *)buffer;
-        size_t i;
-        // Resample stereo 16 to mono 16 by dropping one channel.
-        // The stereo stream is interleaved L-R-L-R
-        for (i = 0; i < frames; i++) {
-            *dst = *src;
-            src += 2;
-            dst += 1;
-        }
-    } else {
-        read_frames = audio_vbuffer_read(&in->buffer, buffer, frames);
-    }
-
-exit:
-    read_bytes = read_frames*audio_stream_in_frame_size(stream);
-
-    if (mic_mute) {
-        read_bytes = 0;
-    }
-
-    if (read_bytes < bytes) {
-        memset (&((uint8_t *)buffer)[read_bytes], 0, bytes-read_bytes);
-    }
-
-    pthread_mutex_unlock(&in->lock);
-
-    return bytes;
-}
-
-static uint32_t in_get_input_frames_lost(struct audio_stream_in *stream)
-{
-    return 0;
-}
-
-static int in_get_capture_position(const struct audio_stream_in *stream,
-                                int64_t *frames, int64_t *time)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    pthread_mutex_lock(&in->lock);
-    struct timespec current_time;
-    get_current_input_position(in, frames, &current_time);
-    *time = (current_time.tv_sec * 1000000000LL + current_time.tv_nsec);
-    pthread_mutex_unlock(&in->lock);
-    return 0;
-}
-
-static int in_get_active_microphones(const struct audio_stream_in *stream,
-                                     struct audio_microphone_characteristic_t *mic_array,
-                                     size_t *mic_count)
-{
-    return adev_get_microphones(NULL, mic_array, mic_count);
-}
-
-static int in_add_audio_effect(const struct audio_stream *stream, effect_handle_t effect)
-{
-    // in_add_audio_effect is a no op
-    return 0;
-}
-
-static int in_remove_audio_effect(const struct audio_stream *stream, effect_handle_t effect)
-{
-    // in_add_audio_effect is a no op
-    return 0;
-}
-
-static int adev_open_output_stream(struct audio_hw_device *dev,
-                                   audio_io_handle_t handle,
-                                   audio_devices_t devices,
-                                   audio_output_flags_t flags,
-                                   struct audio_config *config,
-                                   struct audio_stream_out **stream_out,
-                                   const char *address __unused)
-{
-    struct generic_audio_device *adev = (struct generic_audio_device *)dev;
-    struct generic_stream_out *out;
-    int ret = 0;
-
-    if (refine_output_parameters(&config->sample_rate, &config->format, &config->channel_mask)) {
-        ALOGE("Error opening output stream format %d, channel_mask %04x, sample_rate %u",
-              config->format, config->channel_mask, config->sample_rate);
-        ret = -EINVAL;
-        goto error;
-    }
-
-    out = (struct generic_stream_out *)calloc(1, sizeof(struct generic_stream_out));
-
-    if (!out)
-        return -ENOMEM;
-
-    out->stream.common.get_sample_rate = out_get_sample_rate;
-    out->stream.common.set_sample_rate = out_set_sample_rate;
-    out->stream.common.get_buffer_size = out_get_buffer_size;
-    out->stream.common.get_channels = out_get_channels;
-    out->stream.common.get_format = out_get_format;
-    out->stream.common.set_format = out_set_format;
-    out->stream.common.standby = out_standby;
-    out->stream.common.dump = out_dump;
-    out->stream.common.set_parameters = out_set_parameters;
-    out->stream.common.get_parameters = out_get_parameters;
-    out->stream.common.add_audio_effect = out_add_audio_effect;
-    out->stream.common.remove_audio_effect = out_remove_audio_effect;
-    out->stream.get_latency = out_get_latency;
-    out->stream.set_volume = out_set_volume;
-    out->stream.write = out_write;
-    out->stream.get_render_position = out_get_render_position;
-    out->stream.get_presentation_position = out_get_presentation_position;
-    out->stream.get_next_write_timestamp = out_get_next_write_timestamp;
-
-    out->handle = handle;
-
-    pthread_mutex_init(&out->lock, (const pthread_mutexattr_t *) NULL);
-    out->dev = adev;
-    // Only 1 device is expected despite the argument being named 'devices'
-    out->num_devices = 1;
-    out->devices[0] = devices;
-    memcpy(&out->req_config, config, sizeof(struct audio_config));
-    memcpy(&out->pcm_config, &pcm_config_out, sizeof(struct pcm_config));
-    out->pcm_config.rate = config->sample_rate;
-    out->pcm_config.period_size = out->pcm_config.rate*OUT_PERIOD_MS/1000;
-
-    out->standby = true;
-    out->underrun_position = 0;
-    out->underrun_time.tv_sec = 0;
-    out->underrun_time.tv_nsec = 0;
-    out->last_write_time_us = 0;
-    out->frames_total_buffered = 0;
-    out->frames_written = 0;
-    out->frames_rendered = 0;
-
-    ret = audio_vbuffer_init(&out->buffer,
-                      out->pcm_config.period_size*out->pcm_config.period_count,
-                      out->pcm_config.channels *
-                      pcm_format_to_bits(out->pcm_config.format) >> 3);
-    if (ret == 0) {
-        pthread_cond_init(&out->worker_wake, NULL);
-        out->worker_standby = true;
-        out->worker_exit = false;
-        pthread_create(&out->worker_thread, NULL, out_write_worker, out);
-
-    }
-
-    pthread_mutex_lock(&adev->lock);
-    list_add_tail(&adev->out_streams, &out->stream_node);
-    pthread_mutex_unlock(&adev->lock);
-
-    *stream_out = &out->stream;
-
-error:
-
-    return ret;
-}
-
-// This must be called with adev->lock held.
-struct generic_stream_out *get_stream_out_by_io_handle_l(
-        struct generic_audio_device *adev, audio_io_handle_t handle) {
-    struct listnode *node;
-
-    list_for_each(node, &adev->out_streams) {
-        struct generic_stream_out *out = node_to_item(
-                node, struct generic_stream_out, stream_node);
-        if (out->handle == handle) {
-            return out;
-        }
-    }
-    return NULL;
-}
-
-static void adev_close_output_stream(struct audio_hw_device *dev,
-                                     struct audio_stream_out *stream)
-{
-    struct generic_stream_out *out = (struct generic_stream_out *)stream;
-    pthread_mutex_lock(&out->lock);
-    do_out_standby(out);
-
-    out->worker_exit = true;
-    pthread_cond_signal(&out->worker_wake);
-    pthread_mutex_unlock(&out->lock);
-
-    pthread_join(out->worker_thread, NULL);
-    pthread_mutex_destroy(&out->lock);
-    audio_vbuffer_destroy(&out->buffer);
-
-    struct generic_audio_device *adev = (struct generic_audio_device *) dev;
-    pthread_mutex_lock(&adev->lock);
-    list_remove(&out->stream_node);
-    pthread_mutex_unlock(&adev->lock);
-    free(stream);
-}
-
-static int adev_set_parameters(struct audio_hw_device *dev, const char *kvpairs)
-{
-    return 0;
-}
-
-static char * adev_get_parameters(const struct audio_hw_device *dev,
-                                  const char *keys)
-{
-    return strdup("");
-}
-
-static int adev_get_audio_port(struct audio_hw_device *dev,
-                               struct audio_port *port)
-{
-    return 0;
-}
-
-static int adev_init_check(const struct audio_hw_device *dev)
-{
-    return 0;
-}
-
-static int adev_set_voice_volume(struct audio_hw_device *dev, float volume)
-{
-    // adev_set_voice_volume is a no op (simulates phones)
-    return 0;
-}
-
-static int adev_set_audio_port_config(struct audio_hw_device *dev,
-                                      const struct audio_port_config *config) {
-  return 0;
-}
-
-static int adev_set_master_volume(struct audio_hw_device *dev, float volume)
-{
-    return -ENOSYS;
-}
-
-static int adev_get_master_volume(struct audio_hw_device *dev, float *volume)
-{
-    return -ENOSYS;
-}
-
-static int adev_set_master_mute(struct audio_hw_device *dev, bool muted)
-{
-    return -ENOSYS;
-}
-
-static int adev_get_master_mute(struct audio_hw_device *dev, bool *muted)
-{
-    return -ENOSYS;
-}
-
-static int adev_set_mode(struct audio_hw_device *dev, audio_mode_t mode)
-{
-    // adev_set_mode is a no op (simulates phones)
-    return 0;
-}
-
-static int adev_set_mic_mute(struct audio_hw_device *dev, bool state)
-{
-    struct generic_audio_device *adev = (struct generic_audio_device *)dev;
-    pthread_mutex_lock(&adev->lock);
-    adev->mic_mute = state;
-    pthread_mutex_unlock(&adev->lock);
-    return 0;
-}
-
-static int adev_get_mic_mute(const struct audio_hw_device *dev, bool *state)
-{
-    struct generic_audio_device *adev = (struct generic_audio_device *)dev;
-    pthread_mutex_lock(&adev->lock);
-    *state = adev->mic_mute;
-    pthread_mutex_unlock(&adev->lock);
-    return 0;
-}
-
-
-static size_t adev_get_input_buffer_size(const struct audio_hw_device *dev,
-                                         const struct audio_config *config)
-{
-    return get_input_buffer_size(config->sample_rate, config->format, config->channel_mask);
-}
-
-// This must be called with adev->lock held.
-struct generic_stream_in *get_stream_in_by_io_handle_l(
-        struct generic_audio_device *adev, audio_io_handle_t handle) {
-    struct listnode *node;
-
-    list_for_each(node, &adev->in_streams) {
-        struct generic_stream_in *in = node_to_item(
-                node, struct generic_stream_in, stream_node);
-        if (in->handle == handle) {
-            return in;
-        }
-    }
-    return NULL;
-}
-
-static void adev_close_input_stream(struct audio_hw_device *dev,
-                                   struct audio_stream_in *stream)
-{
-    struct generic_stream_in *in = (struct generic_stream_in *)stream;
-    pthread_mutex_lock(&in->lock);
-    do_in_standby(in);
-
-    in->worker_exit = true;
-    pthread_cond_signal(&in->worker_wake);
-    pthread_mutex_unlock(&in->lock);
-    pthread_join(in->worker_thread, NULL);
-
-    if (in->stereo_to_mono_buf != NULL) {
-        free(in->stereo_to_mono_buf);
-        in->stereo_to_mono_buf_size = 0;
-    }
-
-    pthread_mutex_destroy(&in->lock);
-    audio_vbuffer_destroy(&in->buffer);
-
-    struct generic_audio_device *adev = (struct generic_audio_device *) dev;
-    pthread_mutex_lock(&adev->lock);
-    list_remove(&in->stream_node);
-    pthread_mutex_unlock(&adev->lock);
-    free(stream);
-}
-
-
-static int adev_open_input_stream(struct audio_hw_device *dev,
-                                  audio_io_handle_t handle,
-                                  audio_devices_t devices,
-                                  struct audio_config *config,
-                                  struct audio_stream_in **stream_in,
-                                  audio_input_flags_t flags __unused,
-                                  const char *address __unused,
-                                  audio_source_t source __unused)
-{
-    struct generic_audio_device *adev = (struct generic_audio_device *)dev;
-    struct generic_stream_in *in;
-    int ret = 0;
-    uint32_t orig_sample_rate = config->sample_rate;
-    audio_format_t orig_audio_format = config->format;
-    audio_channel_mask_t orig_channel_mask = config->channel_mask;
-    if (refine_input_parameters(&config->sample_rate, &config->format, &config->channel_mask)) {
-        ALOGE("Error opening input stream format %d, channel_mask %04x, sample_rate %u",
-              orig_audio_format, orig_channel_mask, orig_sample_rate);
-        ret = -EINVAL;
-        goto error;
-    }
-
-    in = (struct generic_stream_in *)calloc(1, sizeof(struct generic_stream_in));
-    if (!in) {
-        ret = -ENOMEM;
-        goto error;
-    }
-
-    in->stream.common.get_sample_rate = in_get_sample_rate;
-    in->stream.common.set_sample_rate = in_set_sample_rate;         // no op
-    in->stream.common.get_buffer_size = in_get_buffer_size;
-    in->stream.common.get_channels = in_get_channels;
-    in->stream.common.get_format = in_get_format;
-    in->stream.common.set_format = in_set_format;                   // no op
-    in->stream.common.standby = in_standby;
-    in->stream.common.dump = in_dump;
-    in->stream.common.set_parameters = in_set_parameters;
-    in->stream.common.get_parameters = in_get_parameters;
-    in->stream.common.add_audio_effect = in_add_audio_effect;       // no op
-    in->stream.common.remove_audio_effect = in_remove_audio_effect; // no op
-    in->stream.set_gain = in_set_gain;                              // no op
-    in->stream.read = in_read;
-    in->stream.get_input_frames_lost = in_get_input_frames_lost;    // no op
-    in->stream.get_capture_position = in_get_capture_position;
-    in->stream.get_active_microphones = in_get_active_microphones;
-
-    pthread_mutex_init(&in->lock, (const pthread_mutexattr_t *) NULL);
-    in->dev = adev;
-    in->device = devices;
-    memcpy(&in->req_config, config, sizeof(struct audio_config));
-    memcpy(&in->pcm_config, &pcm_config_in, sizeof(struct pcm_config));
-    in->pcm_config.rate = config->sample_rate;
-    in->pcm_config.period_size = in->pcm_config.rate*IN_PERIOD_MS/1000;
-
-    in->stereo_to_mono_buf = NULL;
-    in->stereo_to_mono_buf_size = 0;
-
-    in->standby = true;
-    in->standby_position = 0;
-    in->standby_exit_time.tv_sec = 0;
-    in->standby_exit_time.tv_nsec = 0;
-    in->standby_frames_read = 0;
-
-    ret = audio_vbuffer_init(&in->buffer,
-                      in->pcm_config.period_size*in->pcm_config.period_count,
-                      in->pcm_config.channels *
-                      pcm_format_to_bits(in->pcm_config.format) >> 3);
-    if (ret == 0) {
-        pthread_cond_init(&in->worker_wake, NULL);
-        in->worker_standby = true;
-        in->worker_exit = false;
-        pthread_create(&in->worker_thread, NULL, in_read_worker, in);
-    }
-    in->handle = handle;
-
-    pthread_mutex_lock(&adev->lock);
-    list_add_tail(&adev->in_streams, &in->stream_node);
-    pthread_mutex_unlock(&adev->lock);
-
-    *stream_in = &in->stream;
-
-error:
-    return ret;
-}
-
-
-static int adev_dump(const audio_hw_device_t *dev, int fd)
-{
-    return 0;
-}
-
-static int adev_get_microphones(const audio_hw_device_t *dev,
-                                struct audio_microphone_characteristic_t *mic_array,
-                                size_t *mic_count)
-{
-    if (mic_count == NULL) {
-        return -ENOSYS;
-    }
-
-    if (*mic_count == 0) {
-        *mic_count = 1;
-        return 0;
-    }
-
-    if (mic_array == NULL) {
-        return -ENOSYS;
-    }
-
-    strncpy(mic_array->device_id, "mic_goldfish", AUDIO_MICROPHONE_ID_MAX_LEN - 1);
-    mic_array->device = AUDIO_DEVICE_IN_BUILTIN_MIC;
-    strncpy(mic_array->address, AUDIO_BOTTOM_MICROPHONE_ADDRESS,
-            AUDIO_DEVICE_MAX_ADDRESS_LEN - 1);
-    memset(mic_array->channel_mapping, AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED,
-           sizeof(mic_array->channel_mapping));
-    mic_array->location = AUDIO_MICROPHONE_LOCATION_UNKNOWN;
-    mic_array->group = 0;
-    mic_array->index_in_the_group = 0;
-    mic_array->sensitivity = AUDIO_MICROPHONE_SENSITIVITY_UNKNOWN;
-    mic_array->max_spl = AUDIO_MICROPHONE_SPL_UNKNOWN;
-    mic_array->min_spl = AUDIO_MICROPHONE_SPL_UNKNOWN;
-    mic_array->directionality = AUDIO_MICROPHONE_DIRECTIONALITY_UNKNOWN;
-    mic_array->num_frequency_responses = 0;
-    mic_array->geometric_location.x = AUDIO_MICROPHONE_COORDINATE_UNKNOWN;
-    mic_array->geometric_location.y = AUDIO_MICROPHONE_COORDINATE_UNKNOWN;
-    mic_array->geometric_location.z = AUDIO_MICROPHONE_COORDINATE_UNKNOWN;
-    mic_array->orientation.x = AUDIO_MICROPHONE_COORDINATE_UNKNOWN;
-    mic_array->orientation.y = AUDIO_MICROPHONE_COORDINATE_UNKNOWN;
-    mic_array->orientation.z = AUDIO_MICROPHONE_COORDINATE_UNKNOWN;
-
-    *mic_count = 1;
-    return 0;
-}
-
-static int adev_create_audio_patch(struct audio_hw_device *dev,
-                                   unsigned int num_sources,
-                                   const struct audio_port_config *sources,
-                                   unsigned int num_sinks,
-                                   const struct audio_port_config *sinks,
-                                   audio_patch_handle_t *handle) {
-    if (num_sources != 1 || num_sinks == 0 || num_sinks > AUDIO_PATCH_PORTS_MAX) {
-        return -EINVAL;
-    }
-
-    if (sources[0].type == AUDIO_PORT_TYPE_DEVICE) {
-        // If source is a device, the number of sinks should be 1.
-        if (num_sinks != 1 || sinks[0].type != AUDIO_PORT_TYPE_MIX) {
-            return -EINVAL;
-        }
-    } else if (sources[0].type == AUDIO_PORT_TYPE_MIX) {
-        // If source is a mix, all sinks should be device.
-        for (unsigned int i = 0; i < num_sinks; i++) {
-            if (sinks[i].type != AUDIO_PORT_TYPE_DEVICE) {
-                ALOGE("%s() invalid sink type %#x for mix source", __func__, sinks[i].type);
-                return -EINVAL;
-            }
-        }
-    } else {
-        // All other cases are invalid.
-        return -EINVAL;
-    }
-
-    struct generic_audio_device* adev = (struct generic_audio_device*) dev;
-    int ret = 0;
-    bool generatedPatchHandle = false;
-    pthread_mutex_lock(&adev->lock);
-    if (*handle == AUDIO_PATCH_HANDLE_NONE) {
-        *handle = ++adev->next_patch_handle;
-        generatedPatchHandle = true;
-    }
-
-    // Only handle patches for mix->devices and device->mix case.
-    if (sources[0].type == AUDIO_PORT_TYPE_DEVICE) {
-        struct generic_stream_in *in =
-                get_stream_in_by_io_handle_l(adev, sinks[0].ext.mix.handle);
-        if (in == NULL) {
-            ALOGE("%s()can not find stream with handle(%d)", __func__, sources[0].ext.mix.handle);
-            ret = -EINVAL;
-            goto error;
-        }
-
-        // Check if the patch handle match the recorded one if a valid patch handle is passed.
-        if (!generatedPatchHandle && in->patch_handle != *handle) {
-            ALOGE("%s() the patch handle(%d) does not match recorded one(%d) for stream "
-                  "with handle(%d) when creating audio patch for device->mix",
-                  __func__, *handle, in->patch_handle, in->handle);
-            ret = -EINVAL;
-            goto error;
-        }
-        pthread_mutex_lock(&in->lock);
-        in->device = sources[0].ext.device.type;
-        pthread_mutex_unlock(&in->lock);
-        in->patch_handle = *handle;
-    } else {
-        struct generic_stream_out *out =
-                get_stream_out_by_io_handle_l(adev, sources[0].ext.mix.handle);
-        if (out == NULL) {
-            ALOGE("%s()can not find stream with handle(%d)", __func__, sources[0].ext.mix.handle);
-            ret = -EINVAL;
-            goto error;
-        }
-
-        // Check if the patch handle match the recorded one if a valid patch handle is passed.
-        if (!generatedPatchHandle && out->patch_handle != *handle) {
-            ALOGE("%s() the patch handle(%d) does not match recorded one(%d) for stream "
-                  "with handle(%d) when creating audio patch for mix->device",
-                  __func__, *handle, out->patch_handle, out->handle);
-            ret = -EINVAL;
-            pthread_mutex_unlock(&out->lock);
-            goto error;
-        }
-        pthread_mutex_lock(&out->lock);
-        for (out->num_devices = 0; out->num_devices < num_sinks; out->num_devices++) {
-            out->devices[out->num_devices] = sinks[out->num_devices].ext.device.type;
-        }
-        pthread_mutex_unlock(&out->lock);
-        out->patch_handle = *handle;
-    }
-
-error:
-    if (ret != 0 && generatedPatchHandle) {
-        *handle = AUDIO_PATCH_HANDLE_NONE;
-    }
-    pthread_mutex_unlock(&adev->lock);
-    return 0;
-}
-
-// This must be called with adev->lock held.
-struct generic_stream_out *get_stream_out_by_patch_handle_l(
-        struct generic_audio_device *adev, audio_patch_handle_t patch_handle) {
-    struct listnode *node;
-
-    list_for_each(node, &adev->out_streams) {
-        struct generic_stream_out *out = node_to_item(
-                node, struct generic_stream_out, stream_node);
-        if (out->patch_handle == patch_handle) {
-            return out;
-        }
-    }
-    return NULL;
-}
-
-// This must be called with adev->lock held.
-struct generic_stream_in *get_stream_in_by_patch_handle_l(
-        struct generic_audio_device *adev, audio_patch_handle_t patch_handle) {
-    struct listnode *node;
-
-    list_for_each(node, &adev->in_streams) {
-        struct generic_stream_in *in = node_to_item(
-                node, struct generic_stream_in, stream_node);
-        if (in->patch_handle == patch_handle) {
-            return in;
-        }
-    }
-    return NULL;
-}
-
-static int adev_release_audio_patch(struct audio_hw_device *dev,
-                                    audio_patch_handle_t patch_handle) {
-    struct generic_audio_device *adev = (struct generic_audio_device *) dev;
-
-    pthread_mutex_lock(&adev->lock);
-    struct generic_stream_out *out = get_stream_out_by_patch_handle_l(adev, patch_handle);
-    if (out != NULL) {
-        pthread_mutex_lock(&out->lock);
-        out->num_devices = 0;
-        memset(out->devices, 0, sizeof(out->devices));
-        pthread_mutex_unlock(&out->lock);
-        out->patch_handle = AUDIO_PATCH_HANDLE_NONE;
-        pthread_mutex_unlock(&adev->lock);
-        return 0;
-    }
-    struct generic_stream_in *in = get_stream_in_by_patch_handle_l(adev, patch_handle);
-    if (in != NULL) {
-        pthread_mutex_lock(&in->lock);
-        in->device = AUDIO_DEVICE_NONE;
-        pthread_mutex_unlock(&in->lock);
-        in->patch_handle = AUDIO_PATCH_HANDLE_NONE;
-        pthread_mutex_unlock(&adev->lock);
-        return 0;
-    }
-
-    pthread_mutex_unlock(&adev->lock);
-    ALOGW("%s() cannot find stream for patch handle: %d", __func__, patch_handle);
-    return -EINVAL;
-}
-
-static int adev_close(hw_device_t *dev)
-{
-    struct generic_audio_device *adev = (struct generic_audio_device *)dev;
-    int ret = 0;
-    if (!adev)
-        return 0;
-
-    pthread_mutex_lock(&adev_init_lock);
-
-    if (audio_device_ref_count == 0) {
-        ALOGE("adev_close called when ref_count 0");
-        ret = -EINVAL;
-        goto error;
-    }
-
-    if ((--audio_device_ref_count) == 0) {
-        if (adev->mixer) {
-            mixer_close(adev->mixer);
-        }
-        free(adev);
-    }
-
-error:
-    pthread_mutex_unlock(&adev_init_lock);
-    return ret;
-}
-
-static int adev_open(const hw_module_t* module, const char* name,
-                     hw_device_t** device)
-{
-    static struct generic_audio_device *adev;
-
-    if (strcmp(name, AUDIO_HARDWARE_INTERFACE) != 0)
-        return -EINVAL;
-
-    pthread_mutex_lock(&adev_init_lock);
-    if (audio_device_ref_count != 0) {
-        *device = &adev->device.common;
-        audio_device_ref_count++;
-        ALOGV("%s: returning existing instance of adev", __func__);
-        ALOGV("%s: exit", __func__);
-        goto unlock;
-    }
-    adev = calloc(1, sizeof(struct generic_audio_device));
-
-    pthread_mutex_init(&adev->lock, (const pthread_mutexattr_t *) NULL);
-
-    adev->device.common.tag = HARDWARE_DEVICE_TAG;
-    adev->device.common.version = AUDIO_DEVICE_API_VERSION_3_0;
-    adev->device.common.module = (struct hw_module_t *) module;
-    adev->device.common.close = adev_close;
-
-    adev->device.init_check = adev_init_check;               // no op
-    adev->device.set_voice_volume = adev_set_voice_volume;   // no op
-    adev->device.set_master_volume = adev_set_master_volume; // no op
-    adev->device.get_master_volume = adev_get_master_volume; // no op
-    adev->device.set_master_mute = adev_set_master_mute;     // no op
-    adev->device.get_master_mute = adev_get_master_mute;     // no op
-    adev->device.set_mode = adev_set_mode;                   // no op
-    adev->device.set_mic_mute = adev_set_mic_mute;
-    adev->device.get_mic_mute = adev_get_mic_mute;
-    adev->device.set_parameters = adev_set_parameters;       // no op
-    adev->device.get_parameters = adev_get_parameters;       // no op
-    adev->device.get_audio_port = adev_get_audio_port;       // no op
-    adev->device.set_audio_port_config = adev_set_audio_port_config;  // no op
-    adev->device.get_input_buffer_size = adev_get_input_buffer_size;
-    adev->device.open_output_stream = adev_open_output_stream;
-    adev->device.close_output_stream = adev_close_output_stream;
-    adev->device.open_input_stream = adev_open_input_stream;
-    adev->device.close_input_stream = adev_close_input_stream;
-    adev->device.dump = adev_dump;
-    adev->device.get_microphones = adev_get_microphones;
-    adev->device.create_audio_patch = adev_create_audio_patch;
-    adev->device.release_audio_patch = adev_release_audio_patch;
-
-    *device = &adev->device.common;
-
-    adev->next_patch_handle = AUDIO_PATCH_HANDLE_NONE;
-    list_init(&adev->out_streams);
-    list_init(&adev->in_streams);
-
-    adev->mixer = mixer_open(PCM_CARD);
-    struct mixer_ctl *ctl;
-
-    // Set default mixer ctls
-    // Enable channels and set volume
-    for (int i = 0; i < (int)mixer_get_num_ctls(adev->mixer); i++) {
-        ctl = mixer_get_ctl(adev->mixer, i);
-        ALOGD("mixer %d name %s", i, mixer_ctl_get_name(ctl));
-        if (!strcmp(mixer_ctl_get_name(ctl), "Master Playback Volume") ||
-            !strcmp(mixer_ctl_get_name(ctl), "Capture Volume")) {
-            for (int z = 0; z < (int)mixer_ctl_get_num_values(ctl); z++) {
-                ALOGD("set ctl %d to %d", z, 100);
-                mixer_ctl_set_percent(ctl, z, 100);
-            }
-            continue;
-        }
-        if (!strcmp(mixer_ctl_get_name(ctl), "Master Playback Switch") ||
-            !strcmp(mixer_ctl_get_name(ctl), "Capture Switch")) {
-            for (int z = 0; z < (int)mixer_ctl_get_num_values(ctl); z++) {
-                ALOGD("set ctl %d to %d", z, 1);
-                mixer_ctl_set_value(ctl, z, 1);
-            }
-            continue;
-        }
-    }
-
-    audio_device_ref_count++;
-
-unlock:
-    pthread_mutex_unlock(&adev_init_lock);
-    return 0;
-}
-
-static struct hw_module_methods_t hal_module_methods = {
-    .open = adev_open,
-};
-
-struct audio_module HAL_MODULE_INFO_SYM = {
-    .common = {
-        .tag = HARDWARE_MODULE_TAG,
-        .module_api_version = AUDIO_MODULE_API_VERSION_0_1,
-        .hal_api_version = HARDWARE_HAL_API_VERSION,
-        .id = AUDIO_HARDWARE_MODULE_ID,
-        .name = "Generic audio HW HAL",
-        .author = "The Android Open Source Project",
-        .methods = &hal_module_methods,
-    },
-};
diff --git a/guest/hals/bt/OWNERS b/guest/hals/bt/OWNERS
index e8a4a00..e791d83 100644
--- a/guest/hals/bt/OWNERS
+++ b/guest/hals/bt/OWNERS
@@ -1,2 +1,3 @@
+include device/google/cuttlefish:/OWNERS
 include platform/system/bt:/OWNERS
 [email protected]
\ No newline at end of file
diff --git a/guest/hals/camera/vsock_frame_provider.cpp b/guest/hals/camera/vsock_frame_provider.cpp
index 435d5f9..baa4c52 100644
--- a/guest/hals/camera/vsock_frame_provider.cpp
+++ b/guest/hals/camera/vsock_frame_provider.cpp
@@ -22,6 +22,16 @@
 
 namespace cuttlefish {
 
+namespace {
+bool writeJsonEventMessage(
+    std::shared_ptr<cuttlefish::VsockConnection> connection,
+    const std::string& message) {
+  Json::Value json_message;
+  json_message["event"] = message;
+  return connection && connection->WriteMessage(json_message);
+}
+}  // namespace
+
 VsockFrameProvider::~VsockFrameProvider() { stop(); }
 
 void VsockFrameProvider::start(
@@ -30,6 +40,7 @@
   stop();
   running_ = true;
   connection_ = connection;
+  writeJsonEventMessage(connection, "VIRTUAL_DEVICE_START_CAMERA_SESSION");
   reader_thread_ =
       std::thread([this, width, height] { VsockReadLoop(width, height); });
 }
@@ -40,6 +51,7 @@
   if (reader_thread_.joinable()) {
     reader_thread_.join();
   }
+  writeJsonEventMessage(connection_, "VIRTUAL_DEVICE_STOP_CAMERA_SESSION");
   connection_ = nullptr;
 }
 
@@ -53,11 +65,7 @@
 
 void VsockFrameProvider::requestJpeg() {
   jpeg_pending_ = true;
-  Json::Value message;
-  message["event"] = "VIRTUAL_DEVICE_CAPTURE_IMAGE";
-  if (connection_) {
-    connection_->WriteMessage(message);
-  }
+  writeJsonEventMessage(connection_, "VIRTUAL_DEVICE_CAPTURE_IMAGE");
 }
 
 void VsockFrameProvider::cancelJpegRequest() { jpeg_pending_ = false; }
diff --git a/guest/hals/confirmationui/.clang-format b/guest/hals/confirmationui/.clang-format
new file mode 100644
index 0000000..b0dc94c
--- /dev/null
+++ b/guest/hals/confirmationui/.clang-format
@@ -0,0 +1,10 @@
+BasedOnStyle: LLVM
+IndentWidth: 4
+UseTab: Never
+BreakBeforeBraces: Attach
+AllowShortFunctionsOnASingleLine: Inline
+AllowShortIfStatementsOnASingleLine: true
+IndentCaseLabels: false
+ColumnLimit: 100
+PointerBindsToType: true
+SpacesBeforeTrailingComments: 2
diff --git a/guest/hals/confirmationui/Android.bp b/guest/hals/confirmationui/Android.bp
new file mode 100644
index 0000000..168764a
--- /dev/null
+++ b/guest/hals/confirmationui/Android.bp
@@ -0,0 +1,90 @@
+// Copyright (C) 2021 The Android Open-Source Project
+//
+// 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.
+//
+
+// WARNING: Everything listed here will be built on ALL platforms,
+// including x86, the emulator, and the SDK.  Modules must be uniquely
+// named (liblights.panda), and must build everywhere, or limit themselves
+// to only building on ARM if they include assembly. Individual makefiles
+// are responsible for having their own logic, for fine-grained control.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_binary {
+    name: "[email protected]",
+    defaults: ["hidl_defaults", "cuttlefish_guest_only"],
+    relative_install_path: "hw",
+    vendor: true,
+    shared_libs: [
+        "[email protected]",
+        "[email protected]",
+        "libbase",
+        "libhidlbase",
+        "libutils",
+    ],
+    static_libs: [
+        "libcutils",
+        "libcuttlefish_confui",
+    ],
+
+    init_rc: ["[email protected]"],
+
+    vintf_fragments: ["[email protected]"],
+
+    srcs: [
+        "service.cpp",
+    ],
+
+    cflags: [
+        "-Wall",
+        "-Werror",
+        "-DTEEUI_USE_STD_VECTOR",
+    ],
+}
+
+cc_library {
+    name: "[email protected]",
+    defaults: ["hidl_defaults", "cuttlefish_guest_only"],
+    vendor: true,
+    shared_libs: [
+        "[email protected]",
+        "[email protected]",
+        "libbase",
+        "libdmabufheap",
+        "libhidlbase",
+        "libteeui_hal_support",
+        "libtrusty",
+        "libutils",
+    ],
+
+    export_include_dirs: ["include"],
+
+    srcs: [
+        "TrustyConfirmationUI.cpp",
+        "guest_session.cpp",
+    ],
+    static_libs: [
+        "libcutils",
+        "libcuttlefish_confui",
+        "libcuttlefish_fs",
+    ],
+    cflags: [
+        "-Wall",
+        "-Werror",
+        "-DTEEUI_USE_STD_VECTOR",
+    ],
+}
+
diff --git a/guest/hals/confirmationui/README b/guest/hals/confirmationui/README
new file mode 100644
index 0000000..45d4e76
--- /dev/null
+++ b/guest/hals/confirmationui/README
@@ -0,0 +1,20 @@
+## Secure UI Architecture
+
+To implement confirmationui a secure UI architecture is required. This entails a way
+to display the confirmation dialog driven by a reduced trusted computing base, typically
+a trusted execution environment (TEE), without having to rely on Linux and the Android
+system for integrity and authenticity of input events. This implementation provides
+neither. But it provides most of the functionlity required to run a full Android Protected
+Confirmation feature when integrated into a secure UI architecture.
+
+## Secure input (NotSoSecureInput)
+
+This implementation does not provide any security guaranties.
+The input method (NotSoSecureInput) runs a cryptographic protocols that is
+sufficiently secure IFF the end point is implemented on a trustworthy
+secure input device. But since the endpoint is currently in the HAL
+service itself this implementation is not secure.
+
+NOTE that a secure input device end point needs a good source of entropy
+for generating nonces. The current implementation (NotSoSecureInput.cpp#generateNonce)
+uses a constant nonce.
\ No newline at end of file
diff --git a/guest/hals/confirmationui/TrustyConfirmationUI.cpp b/guest/hals/confirmationui/TrustyConfirmationUI.cpp
new file mode 100644
index 0000000..7854332
--- /dev/null
+++ b/guest/hals/confirmationui/TrustyConfirmationUI.cpp
@@ -0,0 +1,248 @@
+/*
+ *
+ * Copyright 2019, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "TrustyConfirmationUI.h"
+
+#include <cutils/properties.h>
+
+namespace android {
+namespace hardware {
+namespace confirmationui {
+namespace V1_0 {
+namespace implementation {
+
+using ::teeui::MsgString;
+using ::teeui::MsgVector;
+using ::android::hardware::keymaster::V4_0::HardwareAuthToken;
+using TeeuiRc = ::teeui::ResponseCode;
+
+namespace {
+teeui::UIOption convertUIOption(UIOption uio) {
+    static_assert(uint32_t(UIOption::AccessibilityInverted) ==
+                          uint32_t(teeui::UIOption::AccessibilityInverted) &&
+                      uint32_t(UIOption::AccessibilityMagnified) ==
+                          uint32_t(teeui::UIOption::AccessibilityMagnified),
+                  "teeui::UIOPtion and ::android::hardware::confirmationui::V1_0::UIOption "
+                  "are out of sync");
+    return teeui::UIOption(uio);
+}
+
+inline MsgString hidl2MsgString(const hidl_string& s) {
+    return {s.c_str(), s.c_str() + s.size()};
+}
+template <typename T> inline MsgVector<T> hidl2MsgVector(const hidl_vec<T>& v) {
+    return {v};
+}
+
+inline MsgVector<teeui::UIOption> hidl2MsgVector(const hidl_vec<UIOption>& v) {
+    MsgVector<teeui::UIOption> result(v.size());
+    for (unsigned int i = 0; i < v.size(); ++i) {
+        result[i] = convertUIOption(v[i]);
+    }
+    return result;
+}
+}  // namespace
+
+cuttlefish::SharedFD TrustyConfirmationUI::ConnectToHost() {
+    using namespace std::chrono_literals;
+    while (true) {
+        auto host_fd = cuttlefish::SharedFD::VsockClient(2, host_vsock_port_, SOCK_STREAM);
+        if (host_fd->IsOpen()) {
+            ConfUiLog(INFO) << "Client connection is established";
+            return host_fd;
+        }
+        ConfUiLog(INFO) << "host service is not on. Sleep for 500 ms";
+        std::this_thread::sleep_for(500ms);
+    }
+}
+
+TrustyConfirmationUI::TrustyConfirmationUI()
+    : listener_state_(ListenerState::None),
+      prompt_result_(ResponseCode::Ignored), host_vsock_port_{static_cast<int>(property_get_int64(
+                                                 "ro.boot.vsock_confirmationui_port", 7700))},
+      current_session_id_{10} {
+    ConfUiLog(INFO) << "Connecting to Confirmation UI host listening on port " << host_vsock_port_;
+    host_fd_ = ConnectToHost();
+    auto fetching_cmd = [this]() { HostMessageFetcherLoop(); };
+    if (host_fd_->IsOpen()) {
+        host_cmd_fetcher_thread_ = std::thread(fetching_cmd);
+    }
+}
+
+TrustyConfirmationUI::~TrustyConfirmationUI() {
+    if (host_fd_->IsOpen()) {
+        host_fd_->Close();
+    }
+    if (host_cmd_fetcher_thread_.joinable()) {
+        host_cmd_fetcher_thread_.join();
+    }
+
+    if (listener_state_ != ListenerState::None) {
+        callback_thread_.join();
+    }
+}
+
+void TrustyConfirmationUI::HostMessageFetcherLoop() {
+    while (true) {
+        if (!host_fd_->IsOpen()) {
+            // this happens when TrustyConfirmationUI is destroyed
+            ConfUiLog(ERROR) << "host_fd_ is not open";
+            return;
+        }
+        auto msg = cuttlefish::confui::RecvConfUiMsg(host_fd_);
+        if (!msg) {
+            // socket is broken for now
+            return;
+        }
+        {
+            std::unique_lock<std::mutex> lk(current_session_lock_);
+            if (!current_session_ || msg->GetSessionId() != current_session_->GetSessionId()) {
+                if (!current_session_) {
+                    ConfUiLog(ERROR) << "msg is received but session is null";
+                    continue;
+                }
+                ConfUiLog(ERROR) << "session id mismatch, so ignored"
+                                 << "Received for " << msg->GetSessionId()
+                                 << " but currently running " << current_session_->GetSessionId();
+                continue;
+            }
+            current_session_->Push(std::move(msg));
+        }
+        listener_state_condv_.notify_all();
+    }
+}
+
+void TrustyConfirmationUI::RunSession(sp<IConfirmationResultCallback> resultCB,
+                                      hidl_string promptText, hidl_vec<uint8_t> extraData,
+                                      hidl_string locale, hidl_vec<UIOption> uiOptions) {
+    cuttlefish::SharedFD fd = host_fd_;
+    // ownership of the fd is passed to GuestSession
+    {
+        std::unique_lock<std::mutex> lk(current_session_lock_);
+        current_session_ = std::make_unique<GuestSession>(
+            current_session_id_, listener_state_, listener_state_lock_, listener_state_condv_, fd,
+            hidl2MsgString(promptText), hidl2MsgVector(extraData), hidl2MsgString(locale),
+            hidl2MsgVector(uiOptions));
+    }
+
+    auto [rc, msg, token] = current_session_->PromptUserConfirmation();
+
+    std::unique_lock<std::mutex> lock(listener_state_lock_);  // for listener_state_
+    bool do_callback = (listener_state_ == ListenerState::Interactive ||
+                        listener_state_ == ListenerState::SetupDone) &&
+                       resultCB;
+    prompt_result_ = rc;
+    listener_state_ = ListenerState::Terminating;
+    lock.unlock();
+    if (do_callback) {
+        auto error = resultCB->result(prompt_result_, msg, token);
+        if (!error.isOk()) {
+            ConfUiLog(ERROR) << "Result callback failed " << error.description();
+        }
+        ConfUiLog(INFO) << "Result callback returned.";
+    } else {
+        listener_state_condv_.notify_all();
+    }
+}
+
+// Methods from ::android::hardware::confirmationui::V1_0::IConfirmationUI
+// follow.
+Return<ResponseCode> TrustyConfirmationUI::promptUserConfirmation(
+    const sp<IConfirmationResultCallback>& resultCB, const hidl_string& promptText,
+    const hidl_vec<uint8_t>& extraData, const hidl_string& locale,
+    const hidl_vec<UIOption>& uiOptions) {
+    std::unique_lock<std::mutex> stateLock(listener_state_lock_, std::defer_lock);
+    ConfUiLog(INFO) << "promptUserConfirmation is called";
+
+    if (!stateLock.try_lock()) {
+        return ResponseCode::OperationPending;
+    }
+    switch (listener_state_) {
+    case ListenerState::None:
+        break;
+    case ListenerState::Starting:
+    case ListenerState::SetupDone:
+    case ListenerState::Interactive:
+        return ResponseCode::OperationPending;
+    case ListenerState::Terminating:
+        callback_thread_.join();
+        listener_state_ = ListenerState::None;
+        break;
+    default:
+        return ResponseCode::Unexpected;
+    }
+    assert(listener_state_ == ListenerState::None);
+    listener_state_ = ListenerState::Starting;
+    ConfUiLog(INFO) << "Per promptUserConfirmation, "
+                    << "an active TEE UI session starts";
+    current_session_id_++;
+    auto worker = [this](const sp<IConfirmationResultCallback>& resultCB,
+                         const hidl_string& promptText, const hidl_vec<uint8_t>& extraData,
+                         const hidl_string& locale, const hidl_vec<UIOption>& uiOptions) {
+        RunSession(resultCB, promptText, extraData, locale, uiOptions);
+    };
+    callback_thread_ = std::thread(worker, resultCB, promptText, extraData, locale, uiOptions);
+
+    listener_state_condv_.wait(stateLock, [this] {
+        return listener_state_ == ListenerState::SetupDone ||
+               listener_state_ == ListenerState::Interactive ||
+               listener_state_ == ListenerState::Terminating;
+    });
+    if (listener_state_ == ListenerState::Terminating) {
+        callback_thread_.join();
+        listener_state_ = ListenerState::None;
+        if (prompt_result_ == ResponseCode::Canceled) {
+            // VTS expects this
+            return ResponseCode::OK;
+        }
+        return prompt_result_;
+    }
+    return ResponseCode::OK;
+}
+
+Return<ResponseCode>
+TrustyConfirmationUI::deliverSecureInputEvent(const HardwareAuthToken& auth_token) {
+    ConfUiLog(INFO) << "deliverSecureInputEvent is called";
+    ResponseCode rc = ResponseCode::Ignored;
+    {
+        std::unique_lock<std::mutex> lock(current_session_lock_);
+        if (!current_session_) {
+            return rc;
+        }
+        return current_session_->DeliverSecureInputEvent(auth_token);
+    }
+}
+
+Return<void> TrustyConfirmationUI::abort() {
+    {
+        std::unique_lock<std::mutex> lock(current_session_lock_);
+        if (!current_session_) {
+            return Void();
+        }
+        return current_session_->Abort();
+    }
+}
+
+android::sp<IConfirmationUI> createTrustyConfirmationUI() {
+    return new TrustyConfirmationUI();
+}
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace confirmationui
+}  // namespace hardware
+}  // namespace android
diff --git a/guest/hals/confirmationui/TrustyConfirmationUI.h b/guest/hals/confirmationui/TrustyConfirmationUI.h
new file mode 100644
index 0000000..1742d88
--- /dev/null
+++ b/guest/hals/confirmationui/TrustyConfirmationUI.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_CONFIRMATIONUI_V1_0_TRUSTY_CONFIRMATIONUI_H
+#define ANDROID_HARDWARE_CONFIRMATIONUI_V1_0_TRUSTY_CONFIRMATIONUI_H
+
+#include <atomic>
+#include <condition_variable>
+#include <cstdint>
+#include <memory>
+#include <mutex>
+#include <thread>
+
+#include <android/hardware/confirmationui/1.0/IConfirmationUI.h>
+#include <android/hardware/keymaster/4.0/types.h>
+#include <hidl/Status.h>
+#include <teeui/generic_messages.h>
+
+#include "common/libs/concurrency/thread_safe_queue.h"
+#include "common/libs/confui/confui.h"
+#include "common/libs/fs/shared_fd.h"
+#include "guest_session.h"
+
+namespace android {
+namespace hardware {
+namespace confirmationui {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+
+class TrustyConfirmationUI : public IConfirmationUI {
+  public:
+    using ConfUiMessage = cuttlefish::confui::ConfUiMessage;
+    using ConfUiAckMessage = cuttlefish::confui::ConfUiAckMessage;
+    using ListenerState = GuestSession::ListenerState;
+
+    TrustyConfirmationUI();
+    virtual ~TrustyConfirmationUI();
+    // Methods from ::android::hardware::confirmationui::V1_0::IConfirmationUI
+    // follow.
+    Return<ResponseCode> promptUserConfirmation(const sp<IConfirmationResultCallback>& resultCB,
+                                                const hidl_string& promptText,
+                                                const hidl_vec<uint8_t>& extraData,
+                                                const hidl_string& locale,
+                                                const hidl_vec<UIOption>& uiOptions) override;
+    Return<ResponseCode> deliverSecureInputEvent(
+        const ::android::hardware::keymaster::V4_0::HardwareAuthToken& secureInputToken) override;
+
+    Return<void> abort() override;
+
+  private:
+    /*
+     * Note for implementation
+     *
+     * The TEE UI session cannot be pre-emptied normally. The session will have an
+     * exclusive control for the input and the screen. Only when something goes
+     * wrong, it can be aborted by abort().
+     *
+     * Another thing is that promptUserConfirmation() may return without waiting
+     * for the resultCB is completed. When it returns early, it still returns
+     * ResponseCode::OK. In that case, the promptUserConfirmation() could actually
+     * fail -- e.g. the input device is broken down afterwards, the user never
+     * gave an input until timeout, etc. Then, the resultCB would be called with
+     * an appropriate error code. However, even in that case, most of the time
+     * promptUserConfirmation() returns OK. Only when the initial set up for
+     * confirmation UI fails, promptUserConfirmation() may return non-OK.
+     *
+     * So, the implementation is roughly:
+     *   1. If there's another session going on, return with ResponseCode::Ignored
+     *      and the return is immediate
+     *   2. If there's a zombie, collect the zombie and go to 3
+     *   3. If there's nothing, start a new session in a new thread, and return
+     *      the promptUserConfirmation() call as early as possible
+     *
+     * Another issue is to maintain/define the ownership of vsock. For now,
+     * a message fetcher (from the host) will see if the vsock is ok, and
+     * reconnect if not. But, eventually, the new session should establish a
+     * new connection/client vsock, and the new session should own the fetcher
+     * thread.
+     */
+    std::thread callback_thread_;
+    ListenerState listener_state_;
+
+    std::mutex listener_state_lock_;
+    std::condition_variable listener_state_condv_;
+    ResponseCode prompt_result_;
+
+    // client socket to the host
+    int host_vsock_port_;
+    cuttlefish::SharedFD host_fd_;
+
+    // ack, response, command from the host, and the abort command from the guest
+    std::atomic<std::uint32_t> current_session_id_;
+    std::mutex current_session_lock_;
+    std::unique_ptr<GuestSession> current_session_;
+    std::thread host_cmd_fetcher_thread_;
+
+    cuttlefish::SharedFD ConnectToHost();
+    void HostMessageFetcherLoop();
+    void RunSession(sp<IConfirmationResultCallback> resultCB, hidl_string promptText,
+                    hidl_vec<uint8_t> extraData, hidl_string locale, hidl_vec<UIOption> uiOptions);
+};
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace confirmationui
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_CONFIRMATIONUI_V1_0_TRUSTY_CONFIRMATIONUI_H
diff --git a/guest/hals/confirmationui/[email protected] b/guest/hals/confirmationui/[email protected]
new file mode 100644
index 0000000..81dfd49
--- /dev/null
+++ b/guest/hals/confirmationui/[email protected]
@@ -0,0 +1,5 @@
+service confirmationui-1-0 /vendor/bin/hw/[email protected]
+    interface [email protected]::IConfirmationUI default
+    class hal
+    user system
+    group drmrpc input system
diff --git a/guest/hals/confirmationui/[email protected] b/guest/hals/confirmationui/[email protected]
new file mode 100644
index 0000000..9008b87
--- /dev/null
+++ b/guest/hals/confirmationui/[email protected]
@@ -0,0 +1,11 @@
+<manifest version="1.0" type="device">
+    <hal format="hidl">
+        <name>android.hardware.confirmationui</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+        <name>IConfirmationUI</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+</manifest>
diff --git a/guest/hals/confirmationui/guest_session.cpp b/guest/hals/confirmationui/guest_session.cpp
new file mode 100644
index 0000000..aa2ab12
--- /dev/null
+++ b/guest/hals/confirmationui/guest_session.cpp
@@ -0,0 +1,265 @@
+/*
+ *
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "guest_session.h"
+
+#include <future>
+
+namespace android {
+namespace hardware {
+namespace confirmationui {
+namespace V1_0 {
+namespace implementation {
+using TeeuiRc = teeui::ResponseCode;
+
+GuestSession::ResultTriple GuestSession::PromptUserConfirmation() {
+    std::unique_lock<std::mutex> stateLock(listener_state_lock_);
+    /*
+     * This is the main listener thread function. The listener thread life cycle
+     * is equivalent to the life cycle of a single confirmation request. The life
+     * cycle is divided in four phases.
+     *  * The starting phase:
+     *    * Drives the cuttlefish confirmation UI session on the host side, too
+     *
+     * Note: During the starting phase the hwbinder service thread is blocked and
+     * waiting for possible Errors. If the setup phase concludes successfully, the
+     * hwbinder service thread gets unblocked and returns successfully. Errors
+     * that occur after the first phase are delivered by callback interface.
+     *
+     * For cuttlefish, it means that the guest will conduct a blocking wait for
+     * an ack to kStart.
+     *
+     *  * The 2nd phase - non interactive phase
+     *    * After a grace period:
+     *      * guest will pick up cuttlefish host's ack to kStart
+     *
+     *  * The 3rd phase - interactive phase
+     *    * We wait to any external event
+     *      * Abort
+     *      * Secure user input asserted
+     *    * The result is fetched from the TA.
+     *
+     *  * The 4th phase - cleanup
+     *    * Sending the kStop command to the cuttlefish host, and wait for ack
+     */
+
+    GuestSession::ResultTriple error;
+    auto& error_rc = std::get<ResponseCode>(error);
+    error_rc = ResponseCode::SystemError;
+
+    CHECK(listener_state_ == ListenerState::Starting) << "ListenerState should be Starting";
+
+    // initiate prompt
+    ConfUiLog(INFO) << "Initiating prompt";
+    const std::uint32_t payload_lower_bound =
+        static_cast<std::uint32_t>(prompt_text_.size() + extra_data_.size());
+    const std::uint32_t upper_bound =
+        static_cast<std::uint32_t>(cuttlefish::confui::kMaxMessageLength);
+    if (payload_lower_bound > upper_bound) {
+        ConfUiLog(INFO) << "UI message too long to send to the host";
+        // message is too long anyway, and don't send it to the host
+        error_rc = ResponseCode::UIErrorMessageTooLong;
+        return error;
+    }
+    SerializedSend(cuttlefish::confui::SendStartCmd, host_fd_, session_name_, prompt_text_,
+                   extra_data_, locale_, ui_options_);
+    ConfUiLog(INFO) << "Session " << GetSessionId() << " started on both the guest and the host";
+
+    auto clean_up_and_get_first = [&]() -> std::unique_ptr<ConfUiMessage> {
+        // blocking wait to get the first msg that belongs to this session
+        while (true) {
+            auto first_curr_session_msg = incoming_msg_queue_.Pop();
+            if (!first_curr_session_msg ||
+                first_curr_session_msg->GetSessionId() != GetSessionId()) {
+                continue;
+            }
+            return std::move(first_curr_session_msg);
+        }
+    };
+
+    /*
+     * Unconditionally wait ack, or host abort
+     *
+     * First couple of messages could be from the previous session.
+     * We should clear them up.
+     *
+     * Even though the guest HAL sends kAbort to the host, the kAbort
+     * does not happen immediately. Between the incoming_msg_queue_.FlushAll()
+     * and the actual abort on the host, there could still be messages
+     * sent from the host to the guest. As these lines are the first read
+     * for the current session, we clear up the preceding messages
+     * from the previous session until we see the message for the current
+     * session.
+     *
+     * Note that abort() call puts the Abort command in the queue. So,
+     * it will also show up in incoming_msg_queue_
+     *
+     */
+    auto first_msg = std::move(clean_up_and_get_first());
+
+    cuttlefish::confui::ConfUiAckMessage& start_ack_msg =
+        static_cast<cuttlefish::confui::ConfUiAckMessage&>(*first_msg);
+    if (!start_ack_msg.IsSuccess()) {
+        // handle errors: MALFORMED_UTF8 or Message too long
+        const std::string error_msg = start_ack_msg.GetStatusMessage();
+        if (error_msg == cuttlefish::confui::HostError::kMessageTooLongError) {
+            ConfUiLog(ERROR) << "Message + Extra data + Meta info were too long";
+            error_rc = ResponseCode::UIErrorMessageTooLong;
+        }
+        if (error_msg == cuttlefish::confui::HostError::kIncorrectUTF8) {
+            ConfUiLog(ERROR) << "Message is incorrectly UTF-encoded";
+            error_rc = ResponseCode::UIErrorMalformedUTF8Encoding;
+        }
+        return error;
+    }
+
+    //  ############################## Start 2nd Phase #############################################
+    listener_state_ = ListenerState::SetupDone;
+    ConfUiLog(INFO) << "Transition to SetupDone";
+    stateLock.unlock();
+    listener_state_condv_.notify_all();
+
+    // cuttlefish does not need the second phase to implement HAL APIs
+    // input was already prepared before the confirmation UI screen was rendered
+
+    //  ############################## Start 3rd Phase - interactive phase #########################
+    stateLock.lock();
+    listener_state_ = ListenerState::Interactive;
+    ConfUiLog(INFO) << "Transition to Interactive";
+    stateLock.unlock();
+    listener_state_condv_.notify_all();
+
+    // give deliverSecureInputEvent a chance to interrupt
+
+    // wait for an input but should not block deliverSecureInputEvent or Abort
+    // Thus, it should not hold the stateLock
+    std::mutex input_ready_mtx;
+    std::condition_variable input_ready_cv_;
+    std::unique_lock<std::mutex> input_ready_lock(input_ready_mtx);
+    bool input_ready = false;
+    auto wait_input_and_signal = [&]() -> std::unique_ptr<ConfUiMessage> {
+        auto msg = incoming_msg_queue_.Pop();
+        {
+            std::unique_lock<std::mutex> lock(input_ready_mtx);
+            input_ready = true;
+            input_ready_cv_.notify_one();
+        }
+        return msg;
+    };
+    auto input_and_signal_future = std::async(std::launch::async, wait_input_and_signal);
+    input_ready_cv_.wait(input_ready_lock, [&]() { return input_ready; });
+    // now an input is ready, so let's acquire the stateLock
+
+    stateLock.lock();
+    auto user_or_abort = input_and_signal_future.get();
+
+    if (user_or_abort->GetType() == cuttlefish::confui::ConfUiCmd::kAbort) {
+        ConfUiLog(ERROR) << "Abort called or the user/host aborted"
+                         << " while waiting user response";
+        return {ResponseCode::Aborted, {}, {}};
+    }
+    if (user_or_abort->GetType() == cuttlefish::confui::ConfUiCmd::kCliAck) {
+        auto& ack_msg = static_cast<cuttlefish::confui::ConfUiAckMessage&>(*user_or_abort);
+        if (ack_msg.IsSuccess()) {
+            ConfUiLog(ERROR) << "When host failed, it is supposed to send "
+                             << "kCliAck with fail, but this is kCliAck with success";
+        }
+        error_rc = ResponseCode::SystemError;
+        return error;
+    }
+    cuttlefish::confui::ConfUiCliResponseMessage& user_response =
+        static_cast<cuttlefish::confui::ConfUiCliResponseMessage&>(*user_or_abort);
+
+    // pick, see if it is response, abort cmd
+    // handle abort or error response here
+    ConfUiLog(INFO) << "Making up the result";
+
+    // make up the result triple
+    if (user_response.GetResponse() == cuttlefish::confui::UserResponse::kCancel) {
+        SerializedSend(cuttlefish::confui::SendStopCmd, host_fd_, GetSessionId());
+        return {ResponseCode::Canceled, {}, {}};
+    }
+
+    if (user_response.GetResponse() != cuttlefish::confui::UserResponse::kConfirm) {
+        ConfUiLog(ERROR) << "Unexpected user response that is " << user_response.GetResponse();
+        return error;
+    }
+    SerializedSend(cuttlefish::confui::SendStopCmd, host_fd_, GetSessionId());
+    //  ############################## Start 4th Phase - cleanup ##################################
+    return {ResponseCode::OK, user_response.GetMessage(), user_response.GetSign()};
+}
+
+Return<ResponseCode> GuestSession::DeliverSecureInputEvent(
+    const android::hardware::keymaster::V4_0::HardwareAuthToken& auth_token) {
+    ResponseCode rc = ResponseCode::Ignored;
+    {
+        /*
+         * deliverSecureInputEvent is only used by the VTS test to mock human input. A correct
+         * implementation responds with a mock confirmation token signed with a test key. The
+         * problem is that the non interactive grace period was not formalized in the HAL spec,
+         * so that the VTS test does not account for the grace period. (It probably should.)
+         * This means we can only pass the VTS test if we block until the grace period is over
+         * (SetupDone -> Interactive) before we deliver the input event.
+         *
+         * The true secure input is delivered by a different mechanism and gets ignored -
+         * not queued - until the grace period is over.
+         *
+         */
+        std::unique_lock<std::mutex> stateLock(listener_state_lock_);
+        listener_state_condv_.wait(stateLock,
+                                   [this] { return listener_state_ != ListenerState::SetupDone; });
+        if (listener_state_ != ListenerState::Interactive) return ResponseCode::Ignored;
+        if (static_cast<TestModeCommands>(auth_token.challenge) == TestModeCommands::OK_EVENT) {
+            SerializedSend(cuttlefish::confui::SendUserSelection, host_fd_, GetSessionId(),
+                           cuttlefish::confui::UserResponse::kConfirm);
+        } else {
+            SerializedSend(cuttlefish::confui::SendUserSelection, host_fd_, GetSessionId(),
+                           cuttlefish::confui::UserResponse::kCancel);
+        }
+        rc = ResponseCode::OK;
+    }
+    listener_state_condv_.notify_all();
+    // VTS test expect an OK response if the event was successfully delivered.
+    // But since the TA returns the callback response now, we have to translate
+    // Canceled into OK. Canceled is only returned if the delivered event canceled
+    // the operation, which means that the event was successfully delivered. Thus
+    // we return OK.
+    if (rc == ResponseCode::Canceled) return ResponseCode::OK;
+    return rc;
+}
+
+Return<void> GuestSession::Abort() {
+    {
+        std::unique_lock<std::mutex> stateLock(listener_state_lock_);
+        if (listener_state_ == ListenerState::SetupDone ||
+            listener_state_ == ListenerState::Interactive) {
+            if (host_fd_->IsOpen()) {
+                SerializedSend(cuttlefish::confui::SendAbortCmd, host_fd_, GetSessionId());
+            }
+            using cuttlefish::confui::ConfUiAbortMessage;
+            auto local_abort_cmd = std::make_unique<ConfUiAbortMessage>(GetSessionId());
+            incoming_msg_queue_.Push(std::move(local_abort_cmd));
+        }
+    }
+    listener_state_condv_.notify_all();
+    return Void();
+}
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace confirmationui
+}  // namespace hardware
+}  // namespace android
diff --git a/guest/hals/confirmationui/guest_session.h b/guest/hals/confirmationui/guest_session.h
new file mode 100644
index 0000000..0dceffe
--- /dev/null
+++ b/guest/hals/confirmationui/guest_session.h
@@ -0,0 +1,146 @@
+/*
+ *
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <android-base/logging.h>
+#include <android/hardware/confirmationui/1.0/types.h>
+#include <android/hardware/keymaster/4.0/types.h>
+
+#include <condition_variable>
+#include <cstdint>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <tuple>
+#include <vector>
+
+#include "common/libs/concurrency/thread_safe_queue.h"
+#include "common/libs/confui/confui.h"
+#include "common/libs/fs/shared_fd.h"
+
+namespace android {
+namespace hardware {
+namespace confirmationui {
+namespace V1_0 {
+namespace implementation {
+class GuestSession {
+  public:
+    using ConfUiMessage = cuttlefish::confui::ConfUiMessage;
+    using ConfUiAckMessage = cuttlefish::confui::ConfUiAckMessage;
+    using Queue = cuttlefish::ThreadSafeQueue<std::unique_ptr<ConfUiMessage>>;
+    using QueueImpl = Queue::QueueImpl;
+
+    enum class ListenerState : uint32_t {
+        None = 0,
+        Starting = 1,
+        SetupDone = 2,
+        Interactive = 3,
+        Terminating = 4,
+    };
+
+    GuestSession(const std::uint32_t session_id, ListenerState& listener_state,
+                 std::mutex& listener_state_lock, std::condition_variable& listener_state_condv,
+                 cuttlefish::SharedFD host_fd, const teeui::MsgString& promptText,
+                 const teeui::MsgVector<uint8_t>& extraData, const teeui::MsgString& locale,
+                 const teeui::MsgVector<teeui::UIOption>& uiOptions)
+        : prompt_text_{promptText.begin(), promptText.end()}, extra_data_{extraData.begin(),
+                                                                          extraData.end()},
+          locale_{locale.begin(), locale.end()}, ui_options_{uiOptions.begin(), uiOptions.end()},
+          listener_state_(listener_state), listener_state_lock_(listener_state_lock),
+          listener_state_condv_(listener_state_condv), host_fd_{host_fd},
+          session_name_(MakeName(session_id)),
+          incoming_msg_queue_(
+              20, [this](GuestSession::QueueImpl* impl) { return QueueFullHandler(impl); }) {}
+
+    ~GuestSession() {
+        // the thread for PromptUserConfirmation is still alive
+        // the host_fd_ may be alive
+        auto state = listener_state_;
+        if (state == ListenerState::SetupDone || state == ListenerState::Interactive) {
+            Abort();
+        }
+        // TODO(kwstephenkim): close fd once Session takes the ownership of fd
+        // join host_cmd_fetcher_thread_ once Session takes the ownership of fd
+    }
+
+    using ResultTriple =
+        std::tuple<ResponseCode, teeui::MsgVector<uint8_t>, teeui::MsgVector<uint8_t>>;
+    ResultTriple PromptUserConfirmation();
+
+    Return<ResponseCode> DeliverSecureInputEvent(
+        const ::android::hardware::keymaster::V4_0::HardwareAuthToken& secureInputToken);
+
+    Return<void> Abort();
+    std::string GetSessionId() const { return session_name_; }
+
+    void Push(std::unique_ptr<ConfUiMessage>&& msg) { incoming_msg_queue_.Push(std::move(msg)); }
+
+  private:
+    template <typename F, typename... Args>
+    bool SerializedSend(F&& f, cuttlefish::SharedFD fd, Args&&... args) {
+        if (!fd->IsOpen()) {
+            return false;
+        }
+        std::unique_lock<std::mutex> lock(send_serializer_mtx_);
+        return f(fd, std::forward<Args>(args)...);
+    }
+
+    void QueueFullHandler(QueueImpl* queue_impl) {
+        if (!queue_impl) {
+            LOG(ERROR) << "Registered queue handler is "
+                       << "seeing nullptr for queue implementation.";
+            return;
+        }
+        const auto n = (queue_impl->size()) / 2;
+        // pop front half
+        queue_impl->erase(queue_impl->begin(), queue_impl->begin() + n);
+    }
+
+    std::string MakeName(const std::uint32_t i) const {
+        return "ConfirmationUiSession" + std::to_string(i);
+    }
+    std::string prompt_text_;
+    std::vector<std::uint8_t> extra_data_;
+    std::string locale_;
+    std::vector<teeui::UIOption> ui_options_;
+
+    /*
+     * lister_state_lock_ coordinates multiple threads that may
+     * call the three Confirmation UI HAL APIs concurrently
+     */
+    ListenerState& listener_state_;
+    std::mutex& listener_state_lock_;
+    std::condition_variable& listener_state_condv_;
+    cuttlefish::SharedFD host_fd_;
+
+    const std::string session_name_;
+    Queue incoming_msg_queue_;
+
+    /*
+     * multiple threads could try to write on the vsock at the
+     * same time. E.g. promptUserConfirmation() thread sends
+     * a command while abort() is being called. The abort() thread
+     * will try to write an abort command concurrently.
+     */
+    std::mutex send_serializer_mtx_;
+};
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace confirmationui
+}  // namespace hardware
+}  // namespace android
diff --git a/guest/hals/confirmationui/include/TrustyConfirmationuiHal.h b/guest/hals/confirmationui/include/TrustyConfirmationuiHal.h
new file mode 100644
index 0000000..2ab9389
--- /dev/null
+++ b/guest/hals/confirmationui/include/TrustyConfirmationuiHal.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <android/hardware/confirmationui/1.0/IConfirmationUI.h>
+
+namespace android {
+namespace hardware {
+namespace confirmationui {
+namespace V1_0 {
+namespace implementation {
+
+android::sp<IConfirmationUI> createTrustyConfirmationUI();
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace confirmationui
+}  // namespace hardware
+}  // namespace android
diff --git a/guest/hals/confirmationui/include/TrustyIpc.h b/guest/hals/confirmationui/include/TrustyIpc.h
new file mode 100644
index 0000000..eb764bc
--- /dev/null
+++ b/guest/hals/confirmationui/include/TrustyIpc.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <stdint.h>
+
+/*
+ * This interface is shared between Android and Trusty. There is a copy in each
+ * repository. They must be kept in sync.
+ */
+
+#define CONFIRMATIONUI_PORT "com.android.trusty.confirmationui"
+
+/**
+ * enum confirmationui_cmd - command identifiers for ConfirmationUI interface
+ * @CONFIRMATIONUI_RESP_BIT:  response bit set as part of response
+ * @CONFIRMATIONUI_REQ_SHIFT: number of bits used by response bit
+ * @CONFIRMATIONUI_CMD_INIT:  command to initialize session
+ * @CONFIRMATIONUI_CMD_MSG:   command to send ConfirmationUI messages
+ */
+enum confirmationui_cmd : uint32_t {
+    CONFIRMATIONUI_RESP_BIT = 1,
+    CONFIRMATIONUI_REQ_SHIFT = 1,
+
+    CONFIRMATIONUI_CMD_INIT = (1 << CONFIRMATIONUI_REQ_SHIFT),
+    CONFIRMATIONUI_CMD_MSG = (2 << CONFIRMATIONUI_REQ_SHIFT),
+};
+
+/**
+ * struct confirmationui_hdr - header for ConfirmationUI messages
+ * @cmd: command identifier
+ *
+ * Note that no messages return a status code. Any error on the server side
+ * results in the connection being closed. So, operations can be assumed to be
+ * successful if they return a response.
+ */
+struct confirmationui_hdr {
+    uint32_t cmd;
+};
+
+/**
+ * struct confirmationui_init_req - arguments for request to initialize a
+ *                                  session
+ * @shm_len: length of memory region being shared
+ *
+ * A handle to a memory region must be sent along with this message. This memory
+ * is send to ConfirmationUI messages.
+ */
+struct confirmationui_init_req {
+    uint32_t shm_len;
+};
+
+/**
+ * struct confirmationui_msg_args - arguments for sending a message
+ * @msg_len: length of message being sent
+ *
+ * Contents of the message are located in the shared memory region that is
+ * established using %CONFIRMATIONUI_CMD_INIT.
+ *
+ * ConfirmationUI messages can travel both ways.
+ */
+struct confirmationui_msg_args {
+    uint32_t msg_len;
+};
+
+#define CONFIRMATIONUI_MAX_MSG_SIZE 0x2000
diff --git a/guest/hals/confirmationui/service.cpp b/guest/hals/confirmationui/service.cpp
new file mode 100644
index 0000000..dd7e84b
--- /dev/null
+++ b/guest/hals/confirmationui/service.cpp
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <android-base/logging.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include <TrustyConfirmationuiHal.h>
+
+using android::sp;
+using android::hardware::confirmationui::V1_0::implementation::createTrustyConfirmationUI;
+
+int main() {
+    ::android::hardware::configureRpcThreadpool(1, true /*willJoinThreadpool*/);
+    auto service = createTrustyConfirmationUI();
+    auto status = service->registerAsService();
+    if (status != android::OK) {
+        LOG(FATAL) << "Could not register service for ConfirmationUI 1.0 (" << status << ")";
+        return -1;
+    }
+    ::android::hardware::joinRpcThreadpool();
+    return -1;
+}
diff --git a/guest/hals/health/Android.bp b/guest/hals/health/Android.bp
index 81d19a3..cb9d866 100644
--- a/guest/hals/health/Android.bp
+++ b/guest/hals/health/Android.bp
@@ -17,6 +17,58 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
+cc_defaults {
+    name: "android.hardware.health-service.cuttlefish-defaults",
+    relative_install_path: "hw",
+    vintf_fragments: ["android.hardware.health-service.cuttlefish.xml"],
+
+    srcs: [
+        "health-aidl.cpp",
+    ],
+
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+
+    static_libs: [
+        "android.hardware.health-translate-ndk",
+        "libbatterymonitor",
+        "libhealthloop",
+        "libhealth_aidl_impl",
+    ],
+
+    shared_libs: [
+        "libbase",
+        "libbinder_ndk",
+        "libcutils",
+        "libhidlbase",
+        "liblog",
+        "libutils",
+        "android.hardware.health-V1-ndk",
+    ],
+
+    defaults: ["enabled_on_p_and_later"],
+}
+
+cc_binary {
+    name: "android.hardware.health-service.cuttlefish",
+    defaults: ["android.hardware.health-service.cuttlefish-defaults"],
+    proprietary: true,
+    init_rc: ["android.hardware.health-service.cuttlefish.rc"],
+    overrides: ["charger"],
+}
+
+cc_binary {
+    name: "android.hardware.health-service.cuttlefish_recovery",
+    defaults: ["android.hardware.health-service.cuttlefish-defaults"],
+    recovery: true,
+    init_rc: ["android.hardware.health-service.cuttlefish_recovery.rc"],
+    overrides: ["charger.recovery"],
+}
+
+// Deprecated. Retained to be used on other devices. It is not installed on cuttlefish.
+// TODO(b/210183170): Delete once other devices transition to the AIDL HAL.
 cc_library_shared {
     name: "[email protected]",
     stem: "[email protected]",
@@ -26,7 +78,7 @@
     relative_install_path: "hw",
 
     srcs: [
-        "health.cpp",
+        "health-hidl.cpp",
     ],
 
     cflags: [
diff --git a/guest/hals/health/android.hardware.health-service.cuttlefish.rc b/guest/hals/health/android.hardware.health-service.cuttlefish.rc
new file mode 100644
index 0000000..8c2f153
--- /dev/null
+++ b/guest/hals/health/android.hardware.health-service.cuttlefish.rc
@@ -0,0 +1,8 @@
+service vendor.health-cuttlefish /vendor/bin/hw/android.hardware.health-service.cuttlefish
+    class hal
+    user system
+    group system
+    capabilities WAKE_ALARM BLOCK_SUSPEND
+    file /dev/kmsg w
+
+# cuttlefish has no charger mode.
diff --git a/guest/hals/health/android.hardware.health-service.cuttlefish.xml b/guest/hals/health/android.hardware.health-service.cuttlefish.xml
new file mode 100644
index 0000000..98026cb
--- /dev/null
+++ b/guest/hals/health/android.hardware.health-service.cuttlefish.xml
@@ -0,0 +1,7 @@
+<manifest version="1.0" type="device">
+    <hal format="aidl">
+        <name>android.hardware.health</name>
+        <version>1</version>
+        <fqname>IHealth/default</fqname>
+    </hal>
+</manifest>
diff --git a/guest/hals/health/android.hardware.health-service.cuttlefish_recovery.rc b/guest/hals/health/android.hardware.health-service.cuttlefish_recovery.rc
new file mode 100644
index 0000000..58e4405
--- /dev/null
+++ b/guest/hals/health/android.hardware.health-service.cuttlefish_recovery.rc
@@ -0,0 +1,7 @@
+service vendor.health-cuttlefish /system/bin/hw/android.hardware.health-service.cuttlefish_recovery
+    class hal
+    seclabel u:r:hal_health_default:s0
+    user system
+    group system
+    capabilities WAKE_ALARM BLOCK_SUSPEND
+    file /dev/kmsg w
diff --git a/guest/hals/health/health-aidl.cpp b/guest/hals/health/health-aidl.cpp
new file mode 100644
index 0000000..595971f
--- /dev/null
+++ b/guest/hals/health/health-aidl.cpp
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.
+ */
+#define LOG_TAG "android.hardware.health-service.cuttlefish"
+
+#include <memory>
+#include <string_view>
+
+#include <android-base/logging.h>
+#include <android/binder_interface_utils.h>
+#include <health-impl/Health.h>
+#include <health/utils.h>
+
+using ::aidl::android::hardware::health::BatteryHealth;
+using ::aidl::android::hardware::health::BatteryStatus;
+using ::aidl::android::hardware::health::HalHealthLoop;
+using ::aidl::android::hardware::health::Health;
+using ::aidl::android::hardware::health::HealthInfo;
+using ::aidl::android::hardware::health::IHealth;
+using ::android::hardware::health::InitHealthdConfig;
+using ::ndk::ScopedAStatus;
+using ::ndk::SharedRefBase;
+using namespace std::literals;
+
+namespace aidl::android::hardware::health {
+
+// Health HAL implementation for cuttlefish. Note that in this implementation,
+// cuttlefish pretends to be a device with a battery being charged.
+// Implementations on real devices should not insert these fake values. For
+// example, a battery-less device should report batteryPresent = false and
+// batteryStatus = UNKNOWN.
+
+class HealthImpl : public Health {
+ public:
+  // Inherit constructor.
+  using Health::Health;
+  virtual ~HealthImpl() {}
+
+  ScopedAStatus getChargeCounterUah(int32_t* out) override;
+  ScopedAStatus getCurrentNowMicroamps(int32_t* out) override;
+  ScopedAStatus getCurrentAverageMicroamps(int32_t* out) override;
+  ScopedAStatus getCapacity(int32_t* out) override;
+  ScopedAStatus getChargeStatus(BatteryStatus* out) override;
+
+ protected:
+  void UpdateHealthInfo(HealthInfo* health_info) override;
+};
+
+void HealthImpl::UpdateHealthInfo(HealthInfo* health_info) {
+  health_info->chargerAcOnline = true;
+  health_info->chargerUsbOnline = true;
+  health_info->chargerWirelessOnline = false;
+  health_info->maxChargingCurrentMicroamps = 500000;
+  health_info->maxChargingVoltageMicrovolts = 5000000;
+  health_info->batteryStatus = BatteryStatus::CHARGING;
+  health_info->batteryHealth = BatteryHealth::GOOD;
+  health_info->batteryPresent = true;
+  health_info->batteryLevel = 85;
+  health_info->batteryVoltageMillivolts = 3600;
+  health_info->batteryTemperatureTenthsCelsius = 350;
+  health_info->batteryCurrentMicroamps = 400000;
+  health_info->batteryCycleCount = 32;
+  health_info->batteryFullChargeUah = 4000000;
+  health_info->batteryChargeCounterUah = 1900000;
+  health_info->batteryTechnology = "Li-ion";
+}
+
+ScopedAStatus HealthImpl::getChargeCounterUah(int32_t* out) {
+  *out = 1900000;
+  return ScopedAStatus::ok();
+}
+
+ScopedAStatus HealthImpl::getCurrentNowMicroamps(int32_t* out) {
+  *out = 400000;
+  return ScopedAStatus::ok();
+}
+
+ScopedAStatus HealthImpl::getCurrentAverageMicroamps(int32_t*) {
+  return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+}
+
+ScopedAStatus HealthImpl::getCapacity(int32_t* out) {
+  *out = 85;
+  return ScopedAStatus::ok();
+}
+
+ScopedAStatus HealthImpl::getChargeStatus(BatteryStatus* out) {
+  *out = BatteryStatus::CHARGING;
+  return ScopedAStatus::ok();
+}
+
+}  // namespace aidl::android::hardware::health
+
+int main(int, [[maybe_unused]] char** argv) {
+#ifdef __ANDROID_RECOVERY__
+  android::base::InitLogging(argv, android::base::KernelLogger);
+#endif
+  // Cuttlefish does not support offline-charging mode, hence do not handle
+  // --charger option.
+  using aidl::android::hardware::health::HealthImpl;
+  LOG(INFO) << "Starting health HAL.";
+  auto config = std::make_unique<healthd_config>();
+  InitHealthdConfig(config.get());
+  auto binder = SharedRefBase::make<HealthImpl>("default", std::move(config));
+  auto hal_health_loop = std::make_shared<HalHealthLoop>(binder, binder);
+  return hal_health_loop->StartLoop();
+}
diff --git a/guest/hals/health/health.cpp b/guest/hals/health/health-hidl.cpp
similarity index 100%
rename from guest/hals/health/health.cpp
rename to guest/hals/health/health-hidl.cpp
diff --git a/guest/hals/health/storage/Android.bp b/guest/hals/health/storage/Android.bp
index dc57d0f..1ca807d1 100644
--- a/guest/hals/health/storage/Android.bp
+++ b/guest/hals/health/storage/Android.bp
@@ -38,7 +38,7 @@
     ],
 
     shared_libs: [
-        "android.hardware.health.storage-V1-ndk_platform",
+        "android.hardware.health.storage-V1-ndk",
         "libbase",
         "libbinder_ndk",
         "libutils",
diff --git a/guest/hals/identity/Android.bp b/guest/hals/identity/Android.bp
new file mode 100644
index 0000000..8596b39
--- /dev/null
+++ b/guest/hals/identity/Android.bp
@@ -0,0 +1,51 @@
+cc_binary {
+    name: "android.hardware.identity-service.remote",
+    relative_install_path: "hw",
+    init_rc: ["android.hardware.identity-service.remote.rc"],
+    vintf_fragments: ["android.hardware.identity-service.remote.xml"],
+    vendor: true,
+    cflags: [
+        "-Wall",
+        "-Wextra",
+        "-g",
+    ],
+    shared_libs: [
+        "liblog",
+        "libcrypto",
+        "libbinder_ndk",
+        "libkeymaster_messages",
+    ],
+    static_libs: [
+        "libbase",
+        "libcppbor_external",
+        "libcppcose_rkp",
+        "libutils",
+        "libsoft_attestation_cert",
+        "libkeymaster_portable",
+        "libsoft_attestation_cert",
+        "libpuresoftkeymasterdevice",
+        "android.hardware.identity-support-lib",
+        "android.hardware.identity-V3-ndk",
+        "android.hardware.keymaster-V3-ndk",
+        "android.hardware.security.keymint-V1-ndk",
+    ],
+    local_include_dirs: [
+        "common",
+        "libeic",
+    ],
+    srcs: [
+        "service.cpp",
+        "RemoteSecureHardwareProxy.cpp",
+        "common/IdentityCredential.cpp",
+        "common/IdentityCredentialStore.cpp",
+        "common/WritableIdentityCredential.cpp",
+        "libeic/EicCbor.c",
+        "libeic/EicPresentation.c",
+        "libeic/EicProvisioning.c",
+        "libeic/EicOpsImpl.cc",
+    ],
+    required: [
+        "android.hardware.identity_credential.xml",
+    ],
+}
+
diff --git a/guest/hals/identity/OWNERS b/guest/hals/identity/OWNERS
new file mode 100644
index 0000000..190f95c
--- /dev/null
+++ b/guest/hals/identity/OWNERS
@@ -0,0 +1 @@
+include /platform/hardware/interfaces:/identity/OWNERS
diff --git a/guest/hals/identity/RemoteSecureHardwareProxy.cpp b/guest/hals/identity/RemoteSecureHardwareProxy.cpp
new file mode 100644
index 0000000..3ec8aaa
--- /dev/null
+++ b/guest/hals/identity/RemoteSecureHardwareProxy.cpp
@@ -0,0 +1,412 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#define LOG_TAG "RemoteSecureHardwareProxy"
+
+#include "RemoteSecureHardwareProxy.h"
+
+#include <android/hardware/identity/support/IdentityCredentialSupport.h>
+
+#include <android-base/logging.h>
+#include <android-base/stringprintf.h>
+#include <string.h>
+
+#include <openssl/sha.h>
+
+#include <openssl/aes.h>
+#include <openssl/bn.h>
+#include <openssl/crypto.h>
+#include <openssl/ec.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/hkdf.h>
+#include <openssl/hmac.h>
+#include <openssl/objects.h>
+#include <openssl/pem.h>
+#include <openssl/pkcs12.h>
+#include <openssl/rand.h>
+#include <openssl/x509.h>
+#include <openssl/x509_vfy.h>
+
+#include <libeic.h>
+
+using ::std::optional;
+using ::std::string;
+using ::std::tuple;
+using ::std::vector;
+
+namespace android::hardware::identity {
+
+// ----------------------------------------------------------------------
+
+RemoteSecureHardwareProvisioningProxy::RemoteSecureHardwareProvisioningProxy() {
+}
+
+RemoteSecureHardwareProvisioningProxy::
+    ~RemoteSecureHardwareProvisioningProxy() {}
+
+bool RemoteSecureHardwareProvisioningProxy::shutdown() {
+  LOG(INFO) << "RemoteSecureHardwarePresentationProxy shutdown";
+  return true;
+}
+
+bool RemoteSecureHardwareProvisioningProxy::initialize(bool testCredential) {
+  LOG(INFO) << "RemoteSecureHardwareProvisioningProxy created, "
+               "sizeof(EicProvisioning): "
+            << sizeof(EicProvisioning);
+  return eicProvisioningInit(&ctx_, testCredential);
+}
+
+bool RemoteSecureHardwareProvisioningProxy::initializeForUpdate(
+    bool testCredential, string docType,
+    vector<uint8_t> encryptedCredentialKeys) {
+  return eicProvisioningInitForUpdate(
+      &ctx_, testCredential, docType.c_str(), docType.size(),
+      encryptedCredentialKeys.data(), encryptedCredentialKeys.size());
+}
+
+// Returns public key certificate.
+optional<vector<uint8_t>>
+RemoteSecureHardwareProvisioningProxy::createCredentialKey(
+    const vector<uint8_t>& challenge, const vector<uint8_t>& applicationId) {
+  uint8_t publicKeyCert[4096];
+  size_t publicKeyCertSize = sizeof publicKeyCert;
+  if (!eicProvisioningCreateCredentialKey(
+          &ctx_, challenge.data(), challenge.size(), applicationId.data(),
+          applicationId.size(), publicKeyCert, &publicKeyCertSize)) {
+    return {};
+  }
+  vector<uint8_t> pubKeyCert(publicKeyCertSize);
+  memcpy(pubKeyCert.data(), publicKeyCert, publicKeyCertSize);
+  return pubKeyCert;
+}
+
+bool RemoteSecureHardwareProvisioningProxy::startPersonalization(
+    int accessControlProfileCount, vector<int> entryCounts,
+    const string& docType, size_t expectedProofOfProvisioningSize) {
+  if (!eicProvisioningStartPersonalization(
+          &ctx_, accessControlProfileCount, entryCounts.data(),
+          entryCounts.size(), docType.c_str(), docType.size(),
+          expectedProofOfProvisioningSize)) {
+    return false;
+  }
+  return true;
+}
+
+// Returns MAC (28 bytes).
+optional<vector<uint8_t>>
+RemoteSecureHardwareProvisioningProxy::addAccessControlProfile(
+    int id, const vector<uint8_t>& readerCertificate,
+    bool userAuthenticationRequired, uint64_t timeoutMillis,
+    uint64_t secureUserId) {
+  vector<uint8_t> mac(28);
+  uint8_t scratchSpace[512];
+  if (!eicProvisioningAddAccessControlProfile(
+          &ctx_, id, readerCertificate.data(), readerCertificate.size(),
+          userAuthenticationRequired, timeoutMillis, secureUserId, mac.data(),
+          scratchSpace, sizeof(scratchSpace))) {
+    return {};
+  }
+  return mac;
+}
+
+bool RemoteSecureHardwareProvisioningProxy::beginAddEntry(
+    const vector<int>& accessControlProfileIds, const string& nameSpace,
+    const string& name, uint64_t entrySize) {
+  uint8_t scratchSpace[512];
+  vector<uint8_t> uint8AccessControlProfileIds;
+  for (size_t i = 0; i < accessControlProfileIds.size(); i++) {
+    uint8AccessControlProfileIds.push_back(accessControlProfileIds[i] & 0xFF);
+  }
+
+  return eicProvisioningBeginAddEntry(
+      &ctx_, uint8AccessControlProfileIds.data(),
+      uint8AccessControlProfileIds.size(), nameSpace.c_str(), nameSpace.size(),
+      name.c_str(), name.size(), entrySize, scratchSpace, sizeof(scratchSpace));
+}
+
+// Returns encryptedContent.
+optional<vector<uint8_t>> RemoteSecureHardwareProvisioningProxy::addEntryValue(
+    const vector<int>& accessControlProfileIds, const string& nameSpace,
+    const string& name, const vector<uint8_t>& content) {
+  vector<uint8_t> eicEncryptedContent;
+  uint8_t scratchSpace[512];
+  vector<uint8_t> uint8AccessControlProfileIds;
+  for (size_t i = 0; i < accessControlProfileIds.size(); i++) {
+    uint8AccessControlProfileIds.push_back(accessControlProfileIds[i] & 0xFF);
+  }
+
+  eicEncryptedContent.resize(content.size() + 28);
+  if (!eicProvisioningAddEntryValue(&ctx_, uint8AccessControlProfileIds.data(),
+                                    uint8AccessControlProfileIds.size(),
+                                    nameSpace.c_str(), nameSpace.size(),
+                                    name.c_str(), name.size(), content.data(),
+                                    content.size(), eicEncryptedContent.data(),
+                                    scratchSpace, sizeof(scratchSpace))) {
+    return {};
+  }
+  return eicEncryptedContent;
+}
+
+// Returns signatureOfToBeSigned (EIC_ECDSA_P256_SIGNATURE_SIZE bytes).
+optional<vector<uint8_t>>
+RemoteSecureHardwareProvisioningProxy::finishAddingEntries() {
+  vector<uint8_t> signatureOfToBeSigned(EIC_ECDSA_P256_SIGNATURE_SIZE);
+  if (!eicProvisioningFinishAddingEntries(&ctx_,
+                                          signatureOfToBeSigned.data())) {
+    return {};
+  }
+  return signatureOfToBeSigned;
+}
+
+// Returns encryptedCredentialKeys.
+optional<vector<uint8_t>>
+RemoteSecureHardwareProvisioningProxy::finishGetCredentialData(
+    const string& docType) {
+  vector<uint8_t> encryptedCredentialKeys(116);
+  size_t size = encryptedCredentialKeys.size();
+  if (!eicProvisioningFinishGetCredentialData(
+          &ctx_, docType.c_str(), docType.size(),
+          encryptedCredentialKeys.data(), &size)) {
+    return {};
+  }
+  encryptedCredentialKeys.resize(size);
+  return encryptedCredentialKeys;
+}
+
+// ----------------------------------------------------------------------
+
+RemoteSecureHardwarePresentationProxy::RemoteSecureHardwarePresentationProxy() {
+}
+
+RemoteSecureHardwarePresentationProxy::
+    ~RemoteSecureHardwarePresentationProxy() {}
+
+bool RemoteSecureHardwarePresentationProxy::initialize(
+    bool testCredential, string docType,
+    vector<uint8_t> encryptedCredentialKeys) {
+  LOG(INFO) << "RemoteSecureHardwarePresentationProxy created, "
+               "sizeof(EicPresentation): "
+            << sizeof(EicPresentation);
+  return eicPresentationInit(&ctx_, testCredential, docType.c_str(),
+                             docType.size(), encryptedCredentialKeys.data(),
+                             encryptedCredentialKeys.size());
+}
+
+// Returns publicKeyCert (1st component) and signingKeyBlob (2nd component)
+optional<pair<vector<uint8_t>, vector<uint8_t>>>
+RemoteSecureHardwarePresentationProxy::generateSigningKeyPair(string docType,
+                                                              time_t now) {
+  uint8_t publicKeyCert[512];
+  size_t publicKeyCertSize = sizeof(publicKeyCert);
+  vector<uint8_t> signingKeyBlob(60);
+
+  if (!eicPresentationGenerateSigningKeyPair(
+          &ctx_, docType.c_str(), docType.size(), now, publicKeyCert,
+          &publicKeyCertSize, signingKeyBlob.data())) {
+    return {};
+  }
+
+  vector<uint8_t> cert;
+  cert.resize(publicKeyCertSize);
+  memcpy(cert.data(), publicKeyCert, publicKeyCertSize);
+
+  return std::make_pair(cert, signingKeyBlob);
+}
+
+// Returns private key
+optional<vector<uint8_t>>
+RemoteSecureHardwarePresentationProxy::createEphemeralKeyPair() {
+  vector<uint8_t> priv(EIC_P256_PRIV_KEY_SIZE);
+  if (!eicPresentationCreateEphemeralKeyPair(&ctx_, priv.data())) {
+    return {};
+  }
+  return priv;
+}
+
+optional<uint64_t>
+RemoteSecureHardwarePresentationProxy::createAuthChallenge() {
+  uint64_t challenge;
+  if (!eicPresentationCreateAuthChallenge(&ctx_, &challenge)) {
+    return {};
+  }
+  return challenge;
+}
+
+bool RemoteSecureHardwarePresentationProxy::shutdown() {
+  LOG(INFO) << "RemoteSecureHardwarePresentationProxy shutdown";
+  return true;
+}
+
+bool RemoteSecureHardwarePresentationProxy::pushReaderCert(
+    const vector<uint8_t>& certX509) {
+  return eicPresentationPushReaderCert(&ctx_, certX509.data(), certX509.size());
+}
+
+bool RemoteSecureHardwarePresentationProxy::validateRequestMessage(
+    const vector<uint8_t>& sessionTranscript,
+    const vector<uint8_t>& requestMessage, int coseSignAlg,
+    const vector<uint8_t>& readerSignatureOfToBeSigned) {
+  return eicPresentationValidateRequestMessage(
+      &ctx_, sessionTranscript.data(), sessionTranscript.size(),
+      requestMessage.data(), requestMessage.size(), coseSignAlg,
+      readerSignatureOfToBeSigned.data(), readerSignatureOfToBeSigned.size());
+}
+
+bool RemoteSecureHardwarePresentationProxy::setAuthToken(
+    uint64_t challenge, uint64_t secureUserId, uint64_t authenticatorId,
+    int hardwareAuthenticatorType, uint64_t timeStamp,
+    const vector<uint8_t>& mac, uint64_t verificationTokenChallenge,
+    uint64_t verificationTokenTimestamp, int verificationTokenSecurityLevel,
+    const vector<uint8_t>& verificationTokenMac) {
+  return eicPresentationSetAuthToken(
+      &ctx_, challenge, secureUserId, authenticatorId,
+      hardwareAuthenticatorType, timeStamp, mac.data(), mac.size(),
+      verificationTokenChallenge, verificationTokenTimestamp,
+      verificationTokenSecurityLevel, verificationTokenMac.data(),
+      verificationTokenMac.size());
+}
+
+optional<bool>
+RemoteSecureHardwarePresentationProxy::validateAccessControlProfile(
+    int id, const vector<uint8_t>& readerCertificate,
+    bool userAuthenticationRequired, int timeoutMillis, uint64_t secureUserId,
+    const vector<uint8_t>& mac) {
+  bool accessGranted = false;
+  uint8_t scratchSpace[512];
+  if (!eicPresentationValidateAccessControlProfile(
+          &ctx_, id, readerCertificate.data(), readerCertificate.size(),
+          userAuthenticationRequired, timeoutMillis, secureUserId, mac.data(),
+          &accessGranted, scratchSpace, sizeof(scratchSpace))) {
+    return {};
+  }
+  return accessGranted;
+}
+
+bool RemoteSecureHardwarePresentationProxy::startRetrieveEntries() {
+  return eicPresentationStartRetrieveEntries(&ctx_);
+}
+
+bool RemoteSecureHardwarePresentationProxy::calcMacKey(
+    const vector<uint8_t>& sessionTranscript,
+    const vector<uint8_t>& readerEphemeralPublicKey,
+    const vector<uint8_t>& signingKeyBlob, const string& docType,
+    unsigned int numNamespacesWithValues,
+    size_t expectedProofOfProvisioningSize) {
+  if (signingKeyBlob.size() != 60) {
+    eicDebug("Unexpected size %zd of signingKeyBlob, expected 60",
+             signingKeyBlob.size());
+    return false;
+  }
+  return eicPresentationCalcMacKey(
+      &ctx_, sessionTranscript.data(), sessionTranscript.size(),
+      readerEphemeralPublicKey.data(), signingKeyBlob.data(), docType.c_str(),
+      docType.size(), numNamespacesWithValues, expectedProofOfProvisioningSize);
+}
+
+AccessCheckResult
+RemoteSecureHardwarePresentationProxy::startRetrieveEntryValue(
+    const string& nameSpace, const string& name,
+    unsigned int newNamespaceNumEntries, int32_t entrySize,
+    const vector<int32_t>& accessControlProfileIds) {
+  uint8_t scratchSpace[512];
+  vector<uint8_t> uint8AccessControlProfileIds;
+  for (size_t i = 0; i < accessControlProfileIds.size(); i++) {
+    uint8AccessControlProfileIds.push_back(accessControlProfileIds[i] & 0xFF);
+  }
+
+  EicAccessCheckResult result = eicPresentationStartRetrieveEntryValue(
+      &ctx_, nameSpace.c_str(), nameSpace.size(), name.c_str(), name.size(),
+      newNamespaceNumEntries, entrySize, uint8AccessControlProfileIds.data(),
+      uint8AccessControlProfileIds.size(), scratchSpace, sizeof(scratchSpace));
+  switch (result) {
+    case EIC_ACCESS_CHECK_RESULT_OK:
+      return AccessCheckResult::kOk;
+    case EIC_ACCESS_CHECK_RESULT_NO_ACCESS_CONTROL_PROFILES:
+      return AccessCheckResult::kNoAccessControlProfiles;
+    case EIC_ACCESS_CHECK_RESULT_FAILED:
+      return AccessCheckResult::kFailed;
+    case EIC_ACCESS_CHECK_RESULT_USER_AUTHENTICATION_FAILED:
+      return AccessCheckResult::kUserAuthenticationFailed;
+    case EIC_ACCESS_CHECK_RESULT_READER_AUTHENTICATION_FAILED:
+      return AccessCheckResult::kReaderAuthenticationFailed;
+  }
+  eicDebug("Unknown result with code %d, returning kFailed", (int)result);
+  return AccessCheckResult::kFailed;
+}
+
+optional<vector<uint8_t>>
+RemoteSecureHardwarePresentationProxy::retrieveEntryValue(
+    const vector<uint8_t>& encryptedContent, const string& nameSpace,
+    const string& name, const vector<int32_t>& accessControlProfileIds) {
+  uint8_t scratchSpace[512];
+  vector<uint8_t> uint8AccessControlProfileIds;
+  for (size_t i = 0; i < accessControlProfileIds.size(); i++) {
+    uint8AccessControlProfileIds.push_back(accessControlProfileIds[i] & 0xFF);
+  }
+
+  vector<uint8_t> content;
+  content.resize(encryptedContent.size() - 28);
+  if (!eicPresentationRetrieveEntryValue(
+          &ctx_, encryptedContent.data(), encryptedContent.size(),
+          content.data(), nameSpace.c_str(), nameSpace.size(), name.c_str(),
+          name.size(), uint8AccessControlProfileIds.data(),
+          uint8AccessControlProfileIds.size(), scratchSpace,
+          sizeof(scratchSpace))) {
+    return {};
+  }
+  return content;
+}
+
+optional<vector<uint8_t>>
+RemoteSecureHardwarePresentationProxy::finishRetrieval() {
+  vector<uint8_t> mac(32);
+  size_t macSize = 32;
+  if (!eicPresentationFinishRetrieval(&ctx_, mac.data(), &macSize)) {
+    return {};
+  }
+  mac.resize(macSize);
+  return mac;
+}
+
+optional<vector<uint8_t>>
+RemoteSecureHardwarePresentationProxy::deleteCredential(
+    const string& docType, const vector<uint8_t>& challenge,
+    bool includeChallenge, size_t proofOfDeletionCborSize) {
+  vector<uint8_t> signatureOfToBeSigned(EIC_ECDSA_P256_SIGNATURE_SIZE);
+  if (!eicPresentationDeleteCredential(
+          &ctx_, docType.c_str(), docType.size(), challenge.data(),
+          challenge.size(), includeChallenge, proofOfDeletionCborSize,
+          signatureOfToBeSigned.data())) {
+    return {};
+  }
+  return signatureOfToBeSigned;
+}
+
+optional<vector<uint8_t>> RemoteSecureHardwarePresentationProxy::proveOwnership(
+    const string& docType, bool testCredential,
+    const vector<uint8_t>& challenge, size_t proofOfOwnershipCborSize) {
+  vector<uint8_t> signatureOfToBeSigned(EIC_ECDSA_P256_SIGNATURE_SIZE);
+  if (!eicPresentationProveOwnership(&ctx_, docType.c_str(), docType.size(),
+                                     testCredential, challenge.data(),
+                                     challenge.size(), proofOfOwnershipCborSize,
+                                     signatureOfToBeSigned.data())) {
+    return {};
+  }
+  return signatureOfToBeSigned;
+}
+
+}  // namespace android::hardware::identity
diff --git a/guest/hals/identity/RemoteSecureHardwareProxy.h b/guest/hals/identity/RemoteSecureHardwareProxy.h
new file mode 100644
index 0000000..39cb422
--- /dev/null
+++ b/guest/hals/identity/RemoteSecureHardwareProxy.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_FAKESECUREHARDWAREPROXY_H
+#define ANDROID_HARDWARE_IDENTITY_FAKESECUREHARDWAREPROXY_H
+
+#include <libeic.h>
+
+#include "SecureHardwareProxy.h"
+
+namespace android::hardware::identity {
+
+// This implementation uses libEmbeddedIC in-process.
+//
+class RemoteSecureHardwareProvisioningProxy
+    : public SecureHardwareProvisioningProxy {
+ public:
+  RemoteSecureHardwareProvisioningProxy();
+  virtual ~RemoteSecureHardwareProvisioningProxy();
+
+  bool initialize(bool testCredential) override;
+
+  bool initializeForUpdate(bool testCredential, string docType,
+                           vector<uint8_t> encryptedCredentialKeys) override;
+
+  bool shutdown() override;
+
+  // Returns public key certificate.
+  optional<vector<uint8_t>> createCredentialKey(
+      const vector<uint8_t>& challenge,
+      const vector<uint8_t>& applicationId) override;
+
+  bool startPersonalization(int accessControlProfileCount,
+                            vector<int> entryCounts, const string& docType,
+                            size_t expectedProofOfProvisioningSize) override;
+
+  // Returns MAC (28 bytes).
+  optional<vector<uint8_t>> addAccessControlProfile(
+      int id, const vector<uint8_t>& readerCertificate,
+      bool userAuthenticationRequired, uint64_t timeoutMillis,
+      uint64_t secureUserId) override;
+
+  bool beginAddEntry(const vector<int>& accessControlProfileIds,
+                     const string& nameSpace, const string& name,
+                     uint64_t entrySize) override;
+
+  // Returns encryptedContent.
+  optional<vector<uint8_t>> addEntryValue(
+      const vector<int>& accessControlProfileIds, const string& nameSpace,
+      const string& name, const vector<uint8_t>& content) override;
+
+  // Returns signatureOfToBeSigned (EIC_ECDSA_P256_SIGNATURE_SIZE bytes).
+  optional<vector<uint8_t>> finishAddingEntries() override;
+
+  // Returns encryptedCredentialKeys (80 bytes).
+  optional<vector<uint8_t>> finishGetCredentialData(
+      const string& docType) override;
+
+ protected:
+  EicProvisioning ctx_;
+};
+
+// This implementation uses libEmbeddedIC in-process.
+//
+class RemoteSecureHardwarePresentationProxy
+    : public SecureHardwarePresentationProxy {
+ public:
+  RemoteSecureHardwarePresentationProxy();
+  virtual ~RemoteSecureHardwarePresentationProxy();
+
+  bool initialize(bool testCredential, string docType,
+                  vector<uint8_t> encryptedCredentialKeys) override;
+
+  // Returns publicKeyCert (1st component) and signingKeyBlob (2nd component)
+  optional<pair<vector<uint8_t>, vector<uint8_t>>> generateSigningKeyPair(
+      string docType, time_t now) override;
+
+  // Returns private key
+  optional<vector<uint8_t>> createEphemeralKeyPair() override;
+
+  optional<uint64_t> createAuthChallenge() override;
+
+  bool startRetrieveEntries() override;
+
+  bool setAuthToken(uint64_t challenge, uint64_t secureUserId,
+                    uint64_t authenticatorId, int hardwareAuthenticatorType,
+                    uint64_t timeStamp, const vector<uint8_t>& mac,
+                    uint64_t verificationTokenChallenge,
+                    uint64_t verificationTokenTimestamp,
+                    int verificationTokenSecurityLevel,
+                    const vector<uint8_t>& verificationTokenMac) override;
+
+  bool pushReaderCert(const vector<uint8_t>& certX509) override;
+
+  optional<bool> validateAccessControlProfile(
+      int id, const vector<uint8_t>& readerCertificate,
+      bool userAuthenticationRequired, int timeoutMillis, uint64_t secureUserId,
+      const vector<uint8_t>& mac) override;
+
+  bool validateRequestMessage(
+      const vector<uint8_t>& sessionTranscript,
+      const vector<uint8_t>& requestMessage, int coseSignAlg,
+      const vector<uint8_t>& readerSignatureOfToBeSigned) override;
+
+  bool calcMacKey(const vector<uint8_t>& sessionTranscript,
+                  const vector<uint8_t>& readerEphemeralPublicKey,
+                  const vector<uint8_t>& signingKeyBlob, const string& docType,
+                  unsigned int numNamespacesWithValues,
+                  size_t expectedProofOfProvisioningSize) override;
+
+  AccessCheckResult startRetrieveEntryValue(
+      const string& nameSpace, const string& name,
+      unsigned int newNamespaceNumEntries, int32_t entrySize,
+      const vector<int32_t>& accessControlProfileIds) override;
+
+  optional<vector<uint8_t>> retrieveEntryValue(
+      const vector<uint8_t>& encryptedContent, const string& nameSpace,
+      const string& name,
+      const vector<int32_t>& accessControlProfileIds) override;
+
+  optional<vector<uint8_t>> finishRetrieval() override;
+
+  optional<vector<uint8_t>> deleteCredential(
+      const string& docType, const vector<uint8_t>& challenge,
+      bool includeChallenge, size_t proofOfDeletionCborSize) override;
+
+  optional<vector<uint8_t>> proveOwnership(
+      const string& docType, bool testCredential,
+      const vector<uint8_t>& challenge,
+      size_t proofOfOwnershipCborSize) override;
+
+  bool shutdown() override;
+
+ protected:
+  EicPresentation ctx_;
+};
+
+// Factory implementation.
+//
+class RemoteSecureHardwareProxyFactory : public SecureHardwareProxyFactory {
+ public:
+  RemoteSecureHardwareProxyFactory() {}
+  virtual ~RemoteSecureHardwareProxyFactory() {}
+
+  sp<SecureHardwareProvisioningProxy> createProvisioningProxy() override {
+    return new RemoteSecureHardwareProvisioningProxy();
+  }
+
+  sp<SecureHardwarePresentationProxy> createPresentationProxy() override {
+    return new RemoteSecureHardwarePresentationProxy();
+  }
+};
+
+}  // namespace android::hardware::identity
+
+#endif  // ANDROID_HARDWARE_IDENTITY_FAKESECUREHARDWAREPROXY_H
diff --git a/guest/hals/identity/android.hardware.identity-service.remote.rc b/guest/hals/identity/android.hardware.identity-service.remote.rc
new file mode 100644
index 0000000..e1dc7a9
--- /dev/null
+++ b/guest/hals/identity/android.hardware.identity-service.remote.rc
@@ -0,0 +1,3 @@
+service vendor.identity-remote /vendor/bin/hw/android.hardware.identity-service.remote
+    class hal
+    user nobody
diff --git a/guest/hals/identity/android.hardware.identity-service.remote.xml b/guest/hals/identity/android.hardware.identity-service.remote.xml
new file mode 100644
index 0000000..a074250
--- /dev/null
+++ b/guest/hals/identity/android.hardware.identity-service.remote.xml
@@ -0,0 +1,10 @@
+<manifest version="1.0" type="device">
+    <hal format="aidl">
+        <name>android.hardware.identity</name>
+        <version>3</version>
+        <interface>
+            <name>IIdentityCredentialStore</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+</manifest>
diff --git a/guest/hals/identity/common/IdentityCredential.cpp b/guest/hals/identity/common/IdentityCredential.cpp
new file mode 100644
index 0000000..3555c53
--- /dev/null
+++ b/guest/hals/identity/common/IdentityCredential.cpp
@@ -0,0 +1,945 @@
+/*
+ * Copyright 2019, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#define LOG_TAG "IdentityCredential"
+
+#include "IdentityCredential.h"
+#include "IdentityCredentialStore.h"
+
+#include <android/hardware/identity/support/IdentityCredentialSupport.h>
+
+#include <string.h>
+
+#include <android-base/logging.h>
+#include <android-base/stringprintf.h>
+
+#include <cppbor.h>
+#include <cppbor_parse.h>
+
+#include "SecureHardwareProxy.h"
+#include "WritableIdentityCredential.h"
+
+namespace aidl::android::hardware::identity {
+
+using ::aidl::android::hardware::keymaster::Timestamp;
+using ::android::base::StringPrintf;
+using ::std::optional;
+
+using namespace ::android::hardware::identity;
+
+int IdentityCredential::initialize() {
+  if (credentialData_.size() == 0) {
+    LOG(ERROR) << "CredentialData is empty";
+    return IIdentityCredentialStore::STATUS_INVALID_DATA;
+  }
+  auto [item, _, message] = cppbor::parse(credentialData_);
+  if (item == nullptr) {
+    LOG(ERROR) << "CredentialData is not valid CBOR: " << message;
+    return IIdentityCredentialStore::STATUS_INVALID_DATA;
+  }
+
+  const cppbor::Array* arrayItem = item->asArray();
+  if (arrayItem == nullptr || arrayItem->size() != 3) {
+    LOG(ERROR) << "CredentialData is not an array with three elements";
+    return IIdentityCredentialStore::STATUS_INVALID_DATA;
+  }
+
+  const cppbor::Tstr* docTypeItem = (*arrayItem)[0]->asTstr();
+  const cppbor::Bool* testCredentialItem =
+      ((*arrayItem)[1]->asSimple() != nullptr
+           ? ((*arrayItem)[1]->asSimple()->asBool())
+           : nullptr);
+  const cppbor::Bstr* encryptedCredentialKeysItem = (*arrayItem)[2]->asBstr();
+  if (docTypeItem == nullptr || testCredentialItem == nullptr ||
+      encryptedCredentialKeysItem == nullptr) {
+    LOG(ERROR) << "CredentialData unexpected item types";
+    return IIdentityCredentialStore::STATUS_INVALID_DATA;
+  }
+
+  docType_ = docTypeItem->value();
+  testCredential_ = testCredentialItem->value();
+
+  encryptedCredentialKeys_ = encryptedCredentialKeysItem->value();
+  if (!hwProxy_->initialize(testCredential_, docType_,
+                            encryptedCredentialKeys_)) {
+    LOG(ERROR) << "hwProxy->initialize failed";
+    return false;
+  }
+
+  return IIdentityCredentialStore::STATUS_OK;
+}
+
+ndk::ScopedAStatus IdentityCredential::deleteCredential(
+    vector<uint8_t>* outProofOfDeletionSignature) {
+  return deleteCredentialCommon({}, false, outProofOfDeletionSignature);
+}
+
+ndk::ScopedAStatus IdentityCredential::deleteCredentialWithChallenge(
+    const vector<uint8_t>& challenge,
+    vector<uint8_t>* outProofOfDeletionSignature) {
+  return deleteCredentialCommon(challenge, true, outProofOfDeletionSignature);
+}
+
+ndk::ScopedAStatus IdentityCredential::deleteCredentialCommon(
+    const vector<uint8_t>& challenge, bool includeChallenge,
+    vector<uint8_t>* outProofOfDeletionSignature) {
+  if (challenge.size() > 32) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA, "Challenge too big"));
+  }
+
+  cppbor::Array array = {"ProofOfDeletion", docType_, testCredential_};
+  if (includeChallenge) {
+    array = {"ProofOfDeletion", docType_, challenge, testCredential_};
+  }
+
+  vector<uint8_t> proofOfDeletionCbor = array.encode();
+  vector<uint8_t> podDigest = support::sha256(proofOfDeletionCbor);
+
+  optional<vector<uint8_t>> signatureOfToBeSigned = hwProxy_->deleteCredential(
+      docType_, challenge, includeChallenge, proofOfDeletionCbor.size());
+  if (!signatureOfToBeSigned) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error signing ProofOfDeletion"));
+  }
+
+  optional<vector<uint8_t>> signature =
+      support::coseSignEcDsaWithSignature(signatureOfToBeSigned.value(),
+                                          proofOfDeletionCbor,  // data
+                                          {});  // certificateChain
+  if (!signature) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "Error signing data"));
+  }
+
+  *outProofOfDeletionSignature = signature.value();
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::proveOwnership(
+    const vector<uint8_t>& challenge,
+    vector<uint8_t>* outProofOfOwnershipSignature) {
+  if (challenge.size() > 32) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA, "Challenge too big"));
+  }
+
+  cppbor::Array array;
+  array = {"ProofOfOwnership", docType_, challenge, testCredential_};
+  vector<uint8_t> proofOfOwnershipCbor = array.encode();
+  vector<uint8_t> podDigest = support::sha256(proofOfOwnershipCbor);
+
+  optional<vector<uint8_t>> signatureOfToBeSigned = hwProxy_->proveOwnership(
+      docType_, testCredential_, challenge, proofOfOwnershipCbor.size());
+  if (!signatureOfToBeSigned) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error signing ProofOfOwnership"));
+  }
+
+  optional<vector<uint8_t>> signature =
+      support::coseSignEcDsaWithSignature(signatureOfToBeSigned.value(),
+                                          proofOfOwnershipCbor,  // data
+                                          {});  // certificateChain
+  if (!signature) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "Error signing data"));
+  }
+
+  *outProofOfOwnershipSignature = signature.value();
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::createEphemeralKeyPair(
+    vector<uint8_t>* outKeyPair) {
+  optional<vector<uint8_t>> ephemeralPriv = hwProxy_->createEphemeralKeyPair();
+  if (!ephemeralPriv) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error creating ephemeral key"));
+  }
+  optional<vector<uint8_t>> keyPair =
+      support::ecPrivateKeyToKeyPair(ephemeralPriv.value());
+  if (!keyPair) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error creating ephemeral key-pair"));
+  }
+
+  // Stash public key of this key-pair for later check in startRetrieval().
+  optional<vector<uint8_t>> publicKey =
+      support::ecKeyPairGetPublicKey(keyPair.value());
+  if (!publicKey) {
+    LOG(ERROR) << "Error getting public part of ephemeral key pair";
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error getting public part of ephemeral key pair"));
+  }
+  ephemeralPublicKey_ = publicKey.value();
+
+  *outKeyPair = keyPair.value();
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::setReaderEphemeralPublicKey(
+    const vector<uint8_t>& publicKey) {
+  readerPublicKey_ = publicKey;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::createAuthChallenge(
+    int64_t* outChallenge) {
+  optional<uint64_t> challenge = hwProxy_->createAuthChallenge();
+  if (!challenge) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "Error generating challenge"));
+  }
+  *outChallenge = challenge.value();
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::setRequestedNamespaces(
+    const vector<RequestNamespace>& requestNamespaces) {
+  requestNamespaces_ = requestNamespaces;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::setVerificationToken(
+    const VerificationToken& verificationToken) {
+  verificationToken_ = verificationToken;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::startRetrieval(
+    const vector<SecureAccessControlProfile>& accessControlProfiles,
+    const HardwareAuthToken& authToken, const vector<uint8_t>& itemsRequest,
+    const vector<uint8_t>& signingKeyBlob,
+    const vector<uint8_t>& sessionTranscript,
+    const vector<uint8_t>& readerSignature,
+    const vector<int32_t>& requestCounts) {
+  std::unique_ptr<cppbor::Item> sessionTranscriptItem;
+  if (sessionTranscript.size() > 0) {
+    auto [item, _, message] = cppbor::parse(sessionTranscript);
+    if (item == nullptr) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "SessionTranscript contains invalid CBOR"));
+    }
+    sessionTranscriptItem = std::move(item);
+  }
+  if (numStartRetrievalCalls_ > 0) {
+    if (sessionTranscript_ != sessionTranscript) {
+      LOG(ERROR) << "Session Transcript changed";
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_SESSION_TRANSCRIPT_MISMATCH,
+          "Passed-in SessionTranscript doesn't match previously used "
+          "SessionTranscript"));
+    }
+  }
+  sessionTranscript_ = sessionTranscript;
+
+  // This resets various state in the TA...
+  if (!hwProxy_->startRetrieveEntries()) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error starting retrieving entries"));
+  }
+
+  optional<vector<uint8_t>> signatureOfToBeSigned;
+  if (readerSignature.size() > 0) {
+    signatureOfToBeSigned = support::coseSignGetSignature(readerSignature);
+    if (!signatureOfToBeSigned) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_READER_SIGNATURE_CHECK_FAILED,
+          "Error extracting signatureOfToBeSigned from COSE_Sign1"));
+    }
+  }
+
+  // Feed the auth token to secure hardware only if they're valid.
+  if (authToken.timestamp.milliSeconds != 0) {
+    if (!hwProxy_->setAuthToken(
+            authToken.challenge, authToken.userId, authToken.authenticatorId,
+            int(authToken.authenticatorType), authToken.timestamp.milliSeconds,
+            authToken.mac, verificationToken_.challenge,
+            verificationToken_.timestamp.milliSeconds,
+            int(verificationToken_.securityLevel), verificationToken_.mac)) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA, "Invalid Auth Token"));
+    }
+  }
+
+  // We'll be feeding ACPs interleaved with certificates from the reader
+  // certificate chain...
+  vector<SecureAccessControlProfile> remainingAcps = accessControlProfiles;
+
+  // ... and we'll use those ACPs to build up a 32-bit mask indicating which
+  // of the possible 32 ACPs grants access.
+  uint32_t accessControlProfileMask = 0;
+
+  // If there is a signature, validate that it was made with the top-most key in
+  // the certificate chain embedded in the COSE_Sign1 structure.
+  optional<vector<uint8_t>> readerCertificateChain;
+  if (readerSignature.size() > 0) {
+    readerCertificateChain = support::coseSignGetX5Chain(readerSignature);
+    if (!readerCertificateChain) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_READER_SIGNATURE_CHECK_FAILED,
+          "Unable to get reader certificate chain from COSE_Sign1"));
+    }
+
+    // First, feed all the reader certificates to the secure hardware. We start
+    // at the end..
+    optional<vector<vector<uint8_t>>> splitCerts =
+        support::certificateChainSplit(readerCertificateChain.value());
+    if (!splitCerts || splitCerts.value().size() == 0) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_READER_SIGNATURE_CHECK_FAILED,
+          "Error splitting certificate chain from COSE_Sign1"));
+    }
+    for (ssize_t n = splitCerts.value().size() - 1; n >= 0; --n) {
+      const vector<uint8_t>& x509Cert = splitCerts.value()[n];
+      if (!hwProxy_->pushReaderCert(x509Cert)) {
+        return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+            IIdentityCredentialStore::STATUS_READER_SIGNATURE_CHECK_FAILED,
+            StringPrintf("Error validating reader certificate %zd", n)
+                .c_str()));
+      }
+
+      // If we have ACPs for that particular certificate, send them to the
+      // TA right now...
+      //
+      // Remember in this case certificate equality is done by comparing public
+      // keys, not bitwise comparison of the certificates.
+      //
+      optional<vector<uint8_t>> x509CertPubKey =
+          support::certificateChainGetTopMostKey(x509Cert);
+      if (!x509CertPubKey) {
+        return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+            IIdentityCredentialStore::STATUS_FAILED,
+            StringPrintf("Error getting public key from reader certificate %zd",
+                         n)
+                .c_str()));
+      }
+      vector<SecureAccessControlProfile>::iterator it = remainingAcps.begin();
+      while (it != remainingAcps.end()) {
+        const SecureAccessControlProfile& profile = *it;
+        if (profile.readerCertificate.encodedCertificate.size() == 0) {
+          ++it;
+          continue;
+        }
+        optional<vector<uint8_t>> profilePubKey =
+            support::certificateChainGetTopMostKey(
+                profile.readerCertificate.encodedCertificate);
+        if (!profilePubKey) {
+          return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+              IIdentityCredentialStore::STATUS_FAILED,
+              "Error getting public key from profile"));
+        }
+        if (profilePubKey.value() == x509CertPubKey.value()) {
+          optional<bool> res = hwProxy_->validateAccessControlProfile(
+              profile.id, profile.readerCertificate.encodedCertificate,
+              profile.userAuthenticationRequired, profile.timeoutMillis,
+              profile.secureUserId, profile.mac);
+          if (!res) {
+            return ndk::ScopedAStatus(
+                AStatus_fromServiceSpecificErrorWithMessage(
+                    IIdentityCredentialStore::STATUS_INVALID_DATA,
+                    "Error validating access control profile"));
+          }
+          if (res.value()) {
+            accessControlProfileMask |= (1 << profile.id);
+          }
+          it = remainingAcps.erase(it);
+        } else {
+          ++it;
+        }
+      }
+    }
+
+    // ... then pass the request message and have the TA check it's signed by
+    // the key in last certificate we pushed.
+    if (sessionTranscript.size() > 0 && itemsRequest.size() > 0 &&
+        readerSignature.size() > 0) {
+      optional<vector<uint8_t>> tbsSignature =
+          support::coseSignGetSignature(readerSignature);
+      if (!tbsSignature) {
+        return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+            IIdentityCredentialStore::STATUS_READER_SIGNATURE_CHECK_FAILED,
+            "Error extracting toBeSigned from COSE_Sign1"));
+      }
+      optional<int> coseSignAlg = support::coseSignGetAlg(readerSignature);
+      if (!coseSignAlg) {
+        return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+            IIdentityCredentialStore::STATUS_READER_SIGNATURE_CHECK_FAILED,
+            "Error extracting signature algorithm from COSE_Sign1"));
+      }
+      if (!hwProxy_->validateRequestMessage(sessionTranscript, itemsRequest,
+                                            coseSignAlg.value(),
+                                            tbsSignature.value())) {
+        return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+            IIdentityCredentialStore::STATUS_READER_SIGNATURE_CHECK_FAILED,
+            "readerMessage is not signed by top-level certificate"));
+      }
+    }
+  }
+
+  // Feed remaining access control profiles...
+  for (const SecureAccessControlProfile& profile : remainingAcps) {
+    optional<bool> res = hwProxy_->validateAccessControlProfile(
+        profile.id, profile.readerCertificate.encodedCertificate,
+        profile.userAuthenticationRequired, profile.timeoutMillis,
+        profile.secureUserId, profile.mac);
+    if (!res) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Error validating access control profile"));
+    }
+    if (res.value()) {
+      accessControlProfileMask |= (1 << profile.id);
+    }
+  }
+
+  // TODO: move this check to the TA
+#if 1
+  // To prevent replay-attacks, we check that the public part of the ephemeral
+  // key we previously created, is present in the DeviceEngagement part of
+  // SessionTranscript as a COSE_Key, in uncompressed form.
+  //
+  // We do this by just searching for the X and Y coordinates.
+  if (sessionTranscript.size() > 0) {
+    auto [getXYSuccess, ePubX, ePubY] =
+        support::ecPublicKeyGetXandY(ephemeralPublicKey_);
+    if (!getXYSuccess) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_EPHEMERAL_PUBLIC_KEY_NOT_FOUND,
+          "Error extracting X and Y from ePub"));
+    }
+    if (sessionTranscript.size() > 0 &&
+        !(memmem(sessionTranscript.data(), sessionTranscript.size(),
+                 ePubX.data(), ePubX.size()) != nullptr &&
+          memmem(sessionTranscript.data(), sessionTranscript.size(),
+                 ePubY.data(), ePubY.size()) != nullptr)) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_EPHEMERAL_PUBLIC_KEY_NOT_FOUND,
+          "Did not find ephemeral public key's X and Y coordinates in "
+          "SessionTranscript (make sure leading zeroes are not used)"));
+    }
+  }
+#endif
+
+  // itemsRequest: If non-empty, contains request data that may be signed by the
+  // reader.  The content can be defined in the way appropriate for the
+  // credential, but there are three requirements that must be met to work with
+  // this HAL:
+  if (itemsRequest.size() > 0) {
+    // 1. The content must be a CBOR-encoded structure.
+    auto [item, _, message] = cppbor::parse(itemsRequest);
+    if (item == nullptr) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_ITEMS_REQUEST_MESSAGE,
+          "Error decoding CBOR in itemsRequest"));
+    }
+
+    // 2. The CBOR structure must be a map.
+    const cppbor::Map* map = item->asMap();
+    if (map == nullptr) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_ITEMS_REQUEST_MESSAGE,
+          "itemsRequest is not a CBOR map"));
+    }
+
+    // 3. The map must contain a key "nameSpaces" whose value contains a map, as
+    // described in
+    //    the example below.
+    //
+    //   NameSpaces = {
+    //     + NameSpace => DataElements ; Requested data elements for each
+    //     NameSpace
+    //   }
+    //
+    //   NameSpace = tstr
+    //
+    //   DataElements = {
+    //     + DataElement => IntentToRetain
+    //   }
+    //
+    //   DataElement = tstr
+    //   IntentToRetain = bool
+    //
+    // Here's an example of an |itemsRequest| CBOR value satisfying above
+    // requirements 1. through 3.:
+    //
+    //    {
+    //        'docType' : 'org.iso.18013-5.2019',
+    //        'nameSpaces' : {
+    //            'org.iso.18013-5.2019' : {
+    //                'Last name' : false,
+    //                'Birth date' : false,
+    //                'First name' : false,
+    //                'Home address' : true
+    //            },
+    //            'org.aamva.iso.18013-5.2019' : {
+    //                'Real Id' : false
+    //            }
+    //        }
+    //    }
+    //
+    const cppbor::Map* nsMap = nullptr;
+    for (size_t n = 0; n < map->size(); n++) {
+      const auto& [keyItem, valueItem] = (*map)[n];
+      if (keyItem->type() == cppbor::TSTR &&
+          keyItem->asTstr()->value() == "nameSpaces" &&
+          valueItem->type() == cppbor::MAP) {
+        nsMap = valueItem->asMap();
+        break;
+      }
+    }
+    if (nsMap == nullptr) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_ITEMS_REQUEST_MESSAGE,
+          "No nameSpaces map in top-most map"));
+    }
+
+    for (size_t n = 0; n < nsMap->size(); n++) {
+      auto& [nsKeyItem, nsValueItem] = (*nsMap)[n];
+      const cppbor::Tstr* nsKey = nsKeyItem->asTstr();
+      const cppbor::Map* nsInnerMap = nsValueItem->asMap();
+      if (nsKey == nullptr || nsInnerMap == nullptr) {
+        return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+            IIdentityCredentialStore::STATUS_INVALID_ITEMS_REQUEST_MESSAGE,
+            "Type mismatch in nameSpaces map"));
+      }
+      string requestedNamespace = nsKey->value();
+      set<string> requestedKeys;
+      for (size_t m = 0; m < nsInnerMap->size(); m++) {
+        const auto& [innerMapKeyItem, innerMapValueItem] = (*nsInnerMap)[m];
+        const cppbor::Tstr* nameItem = innerMapKeyItem->asTstr();
+        const cppbor::Simple* simple = innerMapValueItem->asSimple();
+        const cppbor::Bool* intentToRetainItem =
+            (simple != nullptr) ? simple->asBool() : nullptr;
+        if (nameItem == nullptr || intentToRetainItem == nullptr) {
+          return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+              IIdentityCredentialStore::STATUS_INVALID_ITEMS_REQUEST_MESSAGE,
+              "Type mismatch in value in nameSpaces map"));
+        }
+        requestedKeys.insert(nameItem->value());
+      }
+      requestedNameSpacesAndNames_[requestedNamespace] = requestedKeys;
+    }
+  }
+
+  deviceNameSpacesMap_ = cppbor::Map();
+  currentNameSpaceDeviceNameSpacesMap_ = cppbor::Map();
+
+  requestCountsRemaining_ = requestCounts;
+  currentNameSpace_ = "";
+
+  itemsRequest_ = itemsRequest;
+  signingKeyBlob_ = signingKeyBlob;
+
+  // calculate the size of DeviceNameSpaces. We need to know it ahead of time.
+  calcDeviceNameSpacesSize(accessControlProfileMask);
+
+  // Count the number of non-empty namespaces
+  size_t numNamespacesWithValues = 0;
+  for (size_t n = 0; n < expectedNumEntriesPerNamespace_.size(); n++) {
+    if (expectedNumEntriesPerNamespace_[n] > 0) {
+      numNamespacesWithValues += 1;
+    }
+  }
+
+  // Finally, pass info so the HMAC key can be derived and the TA can start
+  // creating the DeviceNameSpaces CBOR...
+  if (sessionTranscript_.size() > 0 && readerPublicKey_.size() > 0 &&
+      signingKeyBlob.size() > 0) {
+    // We expect the reader ephemeral public key to be same size and curve
+    // as the ephemeral key we generated (e.g. P-256 key), otherwise ECDH
+    // won't work. So its length should be 65 bytes and it should be
+    // starting with 0x04.
+    if (readerPublicKey_.size() != 65 || readerPublicKey_[0] != 0x04) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_FAILED,
+          "Reader public key is not in expected format"));
+    }
+    vector<uint8_t> pubKeyP256(readerPublicKey_.begin() + 1,
+                               readerPublicKey_.end());
+    if (!hwProxy_->calcMacKey(sessionTranscript_, pubKeyP256, signingKeyBlob,
+                              docType_, numNamespacesWithValues,
+                              expectedDeviceNameSpacesSize_)) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_FAILED,
+          "Error starting retrieving entries"));
+    }
+  }
+
+  numStartRetrievalCalls_ += 1;
+  return ndk::ScopedAStatus::ok();
+}
+
+size_t cborNumBytesForLength(size_t length) {
+  if (length < 24) {
+    return 0;
+  } else if (length <= 0xff) {
+    return 1;
+  } else if (length <= 0xffff) {
+    return 2;
+  } else if (length <= 0xffffffff) {
+    return 4;
+  }
+  return 8;
+}
+
+size_t cborNumBytesForTstr(const string& value) {
+  return 1 + cborNumBytesForLength(value.size()) + value.size();
+}
+
+void IdentityCredential::calcDeviceNameSpacesSize(
+    uint32_t accessControlProfileMask) {
+  /*
+   * This is how DeviceNameSpaces is defined:
+   *
+   *        DeviceNameSpaces = {
+   *            * NameSpace => DeviceSignedItems
+   *        }
+   *        DeviceSignedItems = {
+   *            + DataItemName => DataItemValue
+   *        }
+   *
+   *        Namespace = tstr
+   *        DataItemName = tstr
+   *        DataItemValue = any
+   *
+   * This function will calculate its length using knowledge of how CBOR is
+   * encoded.
+   */
+  size_t ret = 0;
+  vector<unsigned int> numEntriesPerNamespace;
+  for (const RequestNamespace& rns : requestNamespaces_) {
+    vector<RequestDataItem> itemsToInclude;
+
+    for (const RequestDataItem& rdi : rns.items) {
+      // If we have a CBOR request message, skip if item isn't in it
+      if (itemsRequest_.size() > 0) {
+        const auto& it = requestedNameSpacesAndNames_.find(rns.namespaceName);
+        if (it == requestedNameSpacesAndNames_.end()) {
+          continue;
+        }
+        const set<string>& dataItemNames = it->second;
+        if (dataItemNames.find(rdi.name) == dataItemNames.end()) {
+          continue;
+        }
+      }
+
+      // Access is granted if at least one of the profiles grants access.
+      //
+      // If an item is configured without any profiles, access is denied.
+      //
+      bool authorized = false;
+      for (auto id : rdi.accessControlProfileIds) {
+        if (accessControlProfileMask & (1 << id)) {
+          authorized = true;
+          break;
+        }
+      }
+      if (!authorized) {
+        continue;
+      }
+
+      itemsToInclude.push_back(rdi);
+    }
+
+    numEntriesPerNamespace.push_back(itemsToInclude.size());
+
+    // If no entries are to be in the namespace, we don't include it in
+    // the CBOR...
+    if (itemsToInclude.size() == 0) {
+      continue;
+    }
+
+    // Key: NameSpace
+    ret += cborNumBytesForTstr(rns.namespaceName);
+
+    // Value: Open the DeviceSignedItems map
+    ret += 1 + cborNumBytesForLength(itemsToInclude.size());
+
+    for (const RequestDataItem& item : itemsToInclude) {
+      // Key: DataItemName
+      ret += cborNumBytesForTstr(item.name);
+
+      // Value: DataItemValue - entryData.size is the length of serialized CBOR
+      // so we use that.
+      ret += item.size;
+    }
+  }
+
+  // Now that we know the number of namespaces with values, we know how many
+  // bytes the DeviceNamespaces map in the beginning is going to take up.
+  ret += 1 + cborNumBytesForLength(numEntriesPerNamespace.size());
+
+  expectedDeviceNameSpacesSize_ = ret;
+  expectedNumEntriesPerNamespace_ = numEntriesPerNamespace;
+}
+
+ndk::ScopedAStatus IdentityCredential::startRetrieveEntryValue(
+    const string& nameSpace, const string& name, int32_t entrySize,
+    const vector<int32_t>& accessControlProfileIds) {
+  if (name.empty()) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA, "Name cannot be empty"));
+  }
+  if (nameSpace.empty()) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "Name space cannot be empty"));
+  }
+
+  if (requestCountsRemaining_.size() == 0) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "No more name spaces left to go through"));
+  }
+
+  bool newNamespace;
+  if (currentNameSpace_ == "") {
+    // First call.
+    currentNameSpace_ = nameSpace;
+    newNamespace = true;
+  }
+
+  if (nameSpace == currentNameSpace_) {
+    // Same namespace.
+    if (requestCountsRemaining_[0] == 0) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "No more entries to be retrieved in current name space"));
+    }
+    requestCountsRemaining_[0] -= 1;
+  } else {
+    // New namespace.
+    if (requestCountsRemaining_[0] != 0) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Moved to new name space but one or more entries need to be "
+          "retrieved "
+          "in current name space"));
+    }
+    if (currentNameSpaceDeviceNameSpacesMap_.size() > 0) {
+      deviceNameSpacesMap_.add(currentNameSpace_,
+                               std::move(currentNameSpaceDeviceNameSpacesMap_));
+    }
+    currentNameSpaceDeviceNameSpacesMap_ = cppbor::Map();
+
+    requestCountsRemaining_.erase(requestCountsRemaining_.begin());
+    currentNameSpace_ = nameSpace;
+    newNamespace = true;
+  }
+
+  // It's permissible to have an empty itemsRequest... but if non-empty you can
+  // only request what was specified in said itemsRequest. Enforce that.
+  if (itemsRequest_.size() > 0) {
+    const auto& it = requestedNameSpacesAndNames_.find(nameSpace);
+    if (it == requestedNameSpacesAndNames_.end()) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_NOT_IN_REQUEST_MESSAGE,
+          "Name space was not requested in startRetrieval"));
+    }
+    const set<string>& dataItemNames = it->second;
+    if (dataItemNames.find(name) == dataItemNames.end()) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_NOT_IN_REQUEST_MESSAGE,
+          "Data item name in name space was not requested in startRetrieval"));
+    }
+  }
+
+  unsigned int newNamespaceNumEntries = 0;
+  if (newNamespace) {
+    if (expectedNumEntriesPerNamespace_.size() == 0) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "No more populated name spaces left to go through"));
+    }
+    newNamespaceNumEntries = expectedNumEntriesPerNamespace_[0];
+    expectedNumEntriesPerNamespace_.erase(
+        expectedNumEntriesPerNamespace_.begin());
+  }
+
+  // Access control is enforced in the secure hardware.
+  //
+  // ... except for STATUS_NOT_IN_REQUEST_MESSAGE, that's handled above (TODO:
+  // consolidate).
+  //
+  AccessCheckResult res =
+      hwProxy_->startRetrieveEntryValue(nameSpace, name, newNamespaceNumEntries,
+                                        entrySize, accessControlProfileIds);
+  switch (res) {
+    case AccessCheckResult::kOk:
+      /* Do nothing. */
+      break;
+    case AccessCheckResult::kFailed:
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_FAILED,
+          "Access control check failed (failed)"));
+      break;
+    case AccessCheckResult::kNoAccessControlProfiles:
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_NO_ACCESS_CONTROL_PROFILES,
+          "Access control check failed (no access control profiles)"));
+      break;
+    case AccessCheckResult::kUserAuthenticationFailed:
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_USER_AUTHENTICATION_FAILED,
+          "Access control check failed (user auth)"));
+      break;
+    case AccessCheckResult::kReaderAuthenticationFailed:
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_READER_AUTHENTICATION_FAILED,
+          "Access control check failed (reader auth)"));
+      break;
+  }
+
+  currentName_ = name;
+  currentAccessControlProfileIds_ = accessControlProfileIds;
+  entryRemainingBytes_ = entrySize;
+  entryValue_.resize(0);
+
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::retrieveEntryValue(
+    const vector<uint8_t>& encryptedContent, vector<uint8_t>* outContent) {
+  optional<vector<uint8_t>> content = hwProxy_->retrieveEntryValue(
+      encryptedContent, currentNameSpace_, currentName_,
+      currentAccessControlProfileIds_);
+  if (!content) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "Error decrypting data"));
+  }
+
+  size_t chunkSize = content.value().size();
+
+  if (chunkSize > entryRemainingBytes_) {
+    LOG(ERROR) << "Retrieved chunk of size " << chunkSize
+               << " is bigger than remaining space of size "
+               << entryRemainingBytes_;
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "Retrieved chunk is bigger than remaining space"));
+  }
+
+  entryRemainingBytes_ -= chunkSize;
+  if (entryRemainingBytes_ > 0) {
+    if (chunkSize != IdentityCredentialStore::kGcmChunkSize) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Retrieved non-final chunk of size which isn't kGcmChunkSize"));
+    }
+  }
+
+  entryValue_.insert(entryValue_.end(), content.value().begin(),
+                     content.value().end());
+
+  if (entryRemainingBytes_ == 0) {
+    auto [entryValueItem, _, message] = cppbor::parse(entryValue_);
+    if (entryValueItem == nullptr) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Retrieved data which is invalid CBOR"));
+    }
+    currentNameSpaceDeviceNameSpacesMap_.add(currentName_,
+                                             std::move(entryValueItem));
+  }
+
+  *outContent = content.value();
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::finishRetrieval(
+    vector<uint8_t>* outMac, vector<uint8_t>* outDeviceNameSpaces) {
+  if (currentNameSpaceDeviceNameSpacesMap_.size() > 0) {
+    deviceNameSpacesMap_.add(currentNameSpace_,
+                             std::move(currentNameSpaceDeviceNameSpacesMap_));
+  }
+  vector<uint8_t> encodedDeviceNameSpaces = deviceNameSpacesMap_.encode();
+
+  if (encodedDeviceNameSpaces.size() != expectedDeviceNameSpacesSize_) {
+    LOG(ERROR) << "encodedDeviceNameSpaces is "
+               << encodedDeviceNameSpaces.size() << " bytes, "
+               << "was expecting " << expectedDeviceNameSpacesSize_;
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        StringPrintf("Unexpected CBOR size %zd for encodedDeviceNameSpaces, "
+                     "was expecting %zd",
+                     encodedDeviceNameSpaces.size(),
+                     expectedDeviceNameSpacesSize_)
+            .c_str()));
+  }
+
+  // If there's no signing key or no sessionTranscript or no reader ephemeral
+  // public key, we return the empty MAC.
+  optional<vector<uint8_t>> mac;
+  if (signingKeyBlob_.size() > 0 && sessionTranscript_.size() > 0 &&
+      readerPublicKey_.size() > 0) {
+    optional<vector<uint8_t>> digestToBeMaced = hwProxy_->finishRetrieval();
+    if (!digestToBeMaced || digestToBeMaced.value().size() != 32) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Error generating digestToBeMaced"));
+    }
+    // Now construct COSE_Mac0 from the returned MAC...
+    mac = support::coseMacWithDigest(digestToBeMaced.value(), {} /* data */);
+  }
+
+  *outMac = mac.value_or(vector<uint8_t>({}));
+  *outDeviceNameSpaces = encodedDeviceNameSpaces;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::generateSigningKeyPair(
+    vector<uint8_t>* outSigningKeyBlob, Certificate* outSigningKeyCertificate) {
+  time_t now = time(NULL);
+  optional<pair<vector<uint8_t>, vector<uint8_t>>> pair =
+      hwProxy_->generateSigningKeyPair(docType_, now);
+  if (!pair) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "Error creating signingKey"));
+  }
+
+  *outSigningKeyCertificate = Certificate();
+  outSigningKeyCertificate->encodedCertificate = pair->first;
+
+  *outSigningKeyBlob = pair->second;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredential::updateCredential(
+    shared_ptr<IWritableIdentityCredential>* outWritableCredential) {
+  sp<SecureHardwareProvisioningProxy> hwProxy =
+      hwProxyFactory_->createProvisioningProxy();
+  shared_ptr<WritableIdentityCredential> wc =
+      ndk::SharedRefBase::make<WritableIdentityCredential>(hwProxy, docType_,
+                                                           testCredential_);
+  if (!wc->initializeForUpdate(encryptedCredentialKeys_)) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error initializing WritableIdentityCredential for update"));
+  }
+  *outWritableCredential = wc;
+  return ndk::ScopedAStatus::ok();
+}
+
+}  // namespace aidl::android::hardware::identity
diff --git a/guest/hals/identity/common/IdentityCredential.h b/guest/hals/identity/common/IdentityCredential.h
new file mode 100644
index 0000000..aaf772a
--- /dev/null
+++ b/guest/hals/identity/common/IdentityCredential.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2019, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_IDENTITYCREDENTIAL_H
+#define ANDROID_HARDWARE_IDENTITY_IDENTITYCREDENTIAL_H
+
+#include <aidl/android/hardware/identity/BnIdentityCredential.h>
+#include <aidl/android/hardware/keymaster/HardwareAuthToken.h>
+#include <aidl/android/hardware/keymaster/VerificationToken.h>
+#include <android/hardware/identity/support/IdentityCredentialSupport.h>
+
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+#include <cppbor.h>
+
+#include "IdentityCredentialStore.h"
+#include "SecureHardwareProxy.h"
+
+namespace aidl::android::hardware::identity {
+
+using ::aidl::android::hardware::keymaster::HardwareAuthToken;
+using ::aidl::android::hardware::keymaster::VerificationToken;
+using ::android::sp;
+using ::android::hardware::identity::SecureHardwarePresentationProxy;
+using ::std::map;
+using ::std::set;
+using ::std::string;
+using ::std::vector;
+
+class IdentityCredential : public BnIdentityCredential {
+ public:
+  IdentityCredential(sp<SecureHardwareProxyFactory> hwProxyFactory,
+                     sp<SecureHardwarePresentationProxy> hwProxy,
+                     const vector<uint8_t>& credentialData)
+      : hwProxyFactory_(hwProxyFactory),
+        hwProxy_(hwProxy),
+        credentialData_(credentialData),
+        numStartRetrievalCalls_(0),
+        expectedDeviceNameSpacesSize_(0) {}
+
+  // Parses and decrypts credentialData_, return a status code from
+  // IIdentityCredentialStore. Must be called right after construction.
+  int initialize();
+
+  // Methods from IIdentityCredential follow.
+  ndk::ScopedAStatus deleteCredential(
+      vector<uint8_t>* outProofOfDeletionSignature) override;
+  ndk::ScopedAStatus deleteCredentialWithChallenge(
+      const vector<uint8_t>& challenge,
+      vector<uint8_t>* outProofOfDeletionSignature) override;
+  ndk::ScopedAStatus proveOwnership(
+      const vector<uint8_t>& challenge,
+      vector<uint8_t>* outProofOfOwnershipSignature) override;
+  ndk::ScopedAStatus createEphemeralKeyPair(
+      vector<uint8_t>* outKeyPair) override;
+  ndk::ScopedAStatus setReaderEphemeralPublicKey(
+      const vector<uint8_t>& publicKey) override;
+  ndk::ScopedAStatus createAuthChallenge(int64_t* outChallenge) override;
+  ndk::ScopedAStatus setRequestedNamespaces(
+      const vector<RequestNamespace>& requestNamespaces) override;
+  ndk::ScopedAStatus setVerificationToken(
+      const VerificationToken& verificationToken) override;
+  ndk::ScopedAStatus startRetrieval(
+      const vector<SecureAccessControlProfile>& accessControlProfiles,
+      const HardwareAuthToken& authToken, const vector<uint8_t>& itemsRequest,
+      const vector<uint8_t>& signingKeyBlob,
+      const vector<uint8_t>& sessionTranscript,
+      const vector<uint8_t>& readerSignature,
+      const vector<int32_t>& requestCounts) override;
+  ndk::ScopedAStatus startRetrieveEntryValue(
+      const string& nameSpace, const string& name, int32_t entrySize,
+      const vector<int32_t>& accessControlProfileIds) override;
+  ndk::ScopedAStatus retrieveEntryValue(const vector<uint8_t>& encryptedContent,
+                                        vector<uint8_t>* outContent) override;
+  ndk::ScopedAStatus finishRetrieval(
+      vector<uint8_t>* outMac, vector<uint8_t>* outDeviceNameSpaces) override;
+  ndk::ScopedAStatus generateSigningKeyPair(
+      vector<uint8_t>* outSigningKeyBlob,
+      Certificate* outSigningKeyCertificate) override;
+
+  ndk::ScopedAStatus updateCredential(
+      shared_ptr<IWritableIdentityCredential>* outWritableCredential) override;
+
+ private:
+  ndk::ScopedAStatus deleteCredentialCommon(
+      const vector<uint8_t>& challenge, bool includeChallenge,
+      vector<uint8_t>* outProofOfDeletionSignature);
+
+  // Set by constructor
+  sp<SecureHardwareProxyFactory> hwProxyFactory_;
+  sp<SecureHardwarePresentationProxy> hwProxy_;
+  vector<uint8_t> credentialData_;
+  int numStartRetrievalCalls_;
+
+  // Set by initialize()
+  string docType_;
+  bool testCredential_;
+  vector<uint8_t> encryptedCredentialKeys_;
+
+  // Set by createEphemeralKeyPair()
+  vector<uint8_t> ephemeralPublicKey_;
+
+  // Set by setReaderEphemeralPublicKey()
+  vector<uint8_t> readerPublicKey_;
+
+  // Set by setRequestedNamespaces()
+  vector<RequestNamespace> requestNamespaces_;
+
+  // Set by setVerificationToken().
+  VerificationToken verificationToken_;
+
+  // Set at startRetrieval() time.
+  vector<uint8_t> signingKeyBlob_;
+  vector<uint8_t> sessionTranscript_;
+  vector<uint8_t> itemsRequest_;
+  vector<int32_t> requestCountsRemaining_;
+  map<string, set<string>> requestedNameSpacesAndNames_;
+  cppbor::Map deviceNameSpacesMap_;
+  cppbor::Map currentNameSpaceDeviceNameSpacesMap_;
+
+  // Calculated at startRetrieval() time.
+  size_t expectedDeviceNameSpacesSize_;
+  vector<unsigned int> expectedNumEntriesPerNamespace_;
+
+  // Set at startRetrieveEntryValue() time.
+  string currentNameSpace_;
+  string currentName_;
+  vector<int32_t> currentAccessControlProfileIds_;
+  size_t entryRemainingBytes_;
+  vector<uint8_t> entryValue_;
+
+  void calcDeviceNameSpacesSize(uint32_t accessControlProfileMask);
+};
+
+}  // namespace aidl::android::hardware::identity
+
+#endif  // ANDROID_HARDWARE_IDENTITY_IDENTITYCREDENTIAL_H
diff --git a/guest/hals/identity/common/IdentityCredentialStore.cpp b/guest/hals/identity/common/IdentityCredentialStore.cpp
new file mode 100644
index 0000000..b98ee00
--- /dev/null
+++ b/guest/hals/identity/common/IdentityCredentialStore.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2019, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#define LOG_TAG "IdentityCredentialStore"
+
+#include <android-base/logging.h>
+
+#include "IdentityCredential.h"
+#include "IdentityCredentialStore.h"
+#include "WritableIdentityCredential.h"
+
+namespace aidl::android::hardware::identity {
+
+using ::aidl::android::hardware::security::keymint::
+    IRemotelyProvisionedComponent;
+
+ndk::ScopedAStatus IdentityCredentialStore::getHardwareInformation(
+    HardwareInformation* hardwareInformation) {
+  HardwareInformation hw;
+  hw.credentialStoreName = "Identity Credential Reference Implementation";
+  hw.credentialStoreAuthorName = "Google";
+  hw.dataChunkSize = kGcmChunkSize;
+  hw.isDirectAccess = false;
+  hw.supportedDocTypes = {};
+  *hardwareInformation = hw;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredentialStore::createCredential(
+    const string& docType, bool testCredential,
+    shared_ptr<IWritableIdentityCredential>* outWritableCredential) {
+  sp<SecureHardwareProvisioningProxy> hwProxy =
+      hwProxyFactory_->createProvisioningProxy();
+  shared_ptr<WritableIdentityCredential> wc =
+      ndk::SharedRefBase::make<WritableIdentityCredential>(hwProxy, docType,
+                                                           testCredential);
+  if (!wc->initialize()) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error initializing WritableIdentityCredential"));
+  }
+  *outWritableCredential = wc;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus IdentityCredentialStore::getCredential(
+    CipherSuite cipherSuite, const vector<uint8_t>& credentialData,
+    shared_ptr<IIdentityCredential>* outCredential) {
+  // We only support CIPHERSUITE_ECDHE_HKDF_ECDSA_WITH_AES_256_GCM_SHA256 right
+  // now.
+  if (cipherSuite !=
+      CipherSuite::CIPHERSUITE_ECDHE_HKDF_ECDSA_WITH_AES_256_GCM_SHA256) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_CIPHER_SUITE_NOT_SUPPORTED,
+        "Unsupported cipher suite"));
+  }
+
+  sp<SecureHardwarePresentationProxy> hwProxy =
+      hwProxyFactory_->createPresentationProxy();
+  shared_ptr<IdentityCredential> credential =
+      ndk::SharedRefBase::make<IdentityCredential>(hwProxyFactory_, hwProxy,
+                                                   credentialData);
+  auto ret = credential->initialize();
+  if (ret != IIdentityCredentialStore::STATUS_OK) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        int(ret), "Error initializing IdentityCredential"));
+  }
+  *outCredential = credential;
+  return ndk::ScopedAStatus::ok();
+}
+
+}  // namespace aidl::android::hardware::identity
diff --git a/guest/hals/identity/common/IdentityCredentialStore.h b/guest/hals/identity/common/IdentityCredentialStore.h
new file mode 100644
index 0000000..1d65b2c
--- /dev/null
+++ b/guest/hals/identity/common/IdentityCredentialStore.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2019, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_IDENTITYCREDENTIALSTORE_H
+#define ANDROID_HARDWARE_IDENTITY_IDENTITYCREDENTIALSTORE_H
+
+#include <aidl/android/hardware/identity/BnIdentityCredentialStore.h>
+#include <aidl/android/hardware/security/keymint/IRemotelyProvisionedComponent.h>
+
+#include "SecureHardwareProxy.h"
+
+namespace aidl::android::hardware::identity {
+
+using ::android::sp;
+using ::android::hardware::identity::SecureHardwareProxyFactory;
+using ::std::shared_ptr;
+using ::std::string;
+using ::std::vector;
+
+class IdentityCredentialStore : public BnIdentityCredentialStore {
+ public:
+  IdentityCredentialStore(sp<SecureHardwareProxyFactory> hwProxyFactory)
+      : hwProxyFactory_(hwProxyFactory) {}
+
+  // The GCM chunk size used by this implementation is 64 KiB.
+  static constexpr size_t kGcmChunkSize = 64 * 1024;
+
+  // Methods from IIdentityCredentialStore follow.
+  ndk::ScopedAStatus getHardwareInformation(
+      HardwareInformation* hardwareInformation) override;
+
+  ndk::ScopedAStatus createCredential(
+      const string& docType, bool testCredential,
+      shared_ptr<IWritableIdentityCredential>* outWritableCredential) override;
+
+  ndk::ScopedAStatus getCredential(
+      CipherSuite cipherSuite, const vector<uint8_t>& credentialData,
+      shared_ptr<IIdentityCredential>* outCredential) override;
+
+ private:
+  sp<SecureHardwareProxyFactory> hwProxyFactory_;
+};
+
+}  // namespace aidl::android::hardware::identity
+
+#endif  // ANDROID_HARDWARE_IDENTITY_IDENTITYCREDENTIALSTORE_H
diff --git a/guest/hals/identity/common/SecureHardwareProxy.h b/guest/hals/identity/common/SecureHardwareProxy.h
new file mode 100644
index 0000000..bd252a7
--- /dev/null
+++ b/guest/hals/identity/common/SecureHardwareProxy.h
@@ -0,0 +1,191 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_SECUREHARDWAREPROXY_H
+#define ANDROID_HARDWARE_IDENTITY_SECUREHARDWAREPROXY_H
+
+#include <utils/RefBase.h>
+#include <optional>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace android::hardware::identity {
+
+using ::android::RefBase;
+using ::std::optional;
+using ::std::pair;
+using ::std::string;
+using ::std::vector;
+
+// These classes are used to communicate with Secure Hardware. They mimic the
+// API in libEmbeddedIC 1:1 (except for using C++ types) as each call is
+// intended to be forwarded to the Secure Hardware.
+//
+// Instances are instantiated when a provisioning or presentation session
+// starts. When the session is complete, the shutdown() method is called.
+//
+
+// Forward declare.
+//
+class SecureHardwareProvisioningProxy;
+class SecureHardwarePresentationProxy;
+
+// This is a class used to create proxies.
+//
+class SecureHardwareProxyFactory : public RefBase {
+ public:
+  SecureHardwareProxyFactory() {}
+  virtual ~SecureHardwareProxyFactory() {}
+
+  virtual sp<SecureHardwareProvisioningProxy> createProvisioningProxy() = 0;
+  virtual sp<SecureHardwarePresentationProxy> createPresentationProxy() = 0;
+};
+
+// The proxy used for provisioning.
+//
+class SecureHardwareProvisioningProxy : public RefBase {
+ public:
+  SecureHardwareProvisioningProxy() {}
+  virtual ~SecureHardwareProvisioningProxy() {}
+
+  virtual bool initialize(bool testCredential) = 0;
+
+  virtual bool initializeForUpdate(bool testCredential, string docType,
+                                   vector<uint8_t> encryptedCredentialKeys) = 0;
+
+  // Returns public key certificate chain with attestation.
+  //
+  // This must return an entire certificate chain and its implementation must
+  // be coordinated with the implementation of eicOpsCreateCredentialKey() on
+  // the TA side (which may return just a single certificate or the entire
+  // chain).
+  virtual optional<vector<uint8_t>> createCredentialKey(
+      const vector<uint8_t>& challenge,
+      const vector<uint8_t>& applicationId) = 0;
+
+  virtual bool startPersonalization(int accessControlProfileCount,
+                                    vector<int> entryCounts,
+                                    const string& docType,
+                                    size_t expectedProofOfProvisioningSize) = 0;
+
+  // Returns MAC (28 bytes).
+  virtual optional<vector<uint8_t>> addAccessControlProfile(
+      int id, const vector<uint8_t>& readerCertificate,
+      bool userAuthenticationRequired, uint64_t timeoutMillis,
+      uint64_t secureUserId) = 0;
+
+  virtual bool beginAddEntry(const vector<int>& accessControlProfileIds,
+                             const string& nameSpace, const string& name,
+                             uint64_t entrySize) = 0;
+
+  // Returns encryptedContent.
+  virtual optional<vector<uint8_t>> addEntryValue(
+      const vector<int>& accessControlProfileIds, const string& nameSpace,
+      const string& name, const vector<uint8_t>& content) = 0;
+
+  // Returns signatureOfToBeSigned (EIC_ECDSA_P256_SIGNATURE_SIZE bytes).
+  virtual optional<vector<uint8_t>> finishAddingEntries() = 0;
+
+  // Returns encryptedCredentialKeys (80 bytes).
+  virtual optional<vector<uint8_t>> finishGetCredentialData(
+      const string& docType) = 0;
+
+  virtual bool shutdown() = 0;
+};
+
+enum AccessCheckResult {
+  kOk,
+  kFailed,
+  kNoAccessControlProfiles,
+  kUserAuthenticationFailed,
+  kReaderAuthenticationFailed,
+};
+
+// The proxy used for presentation.
+//
+class SecureHardwarePresentationProxy : public RefBase {
+ public:
+  SecureHardwarePresentationProxy() {}
+  virtual ~SecureHardwarePresentationProxy() {}
+
+  virtual bool initialize(bool testCredential, string docType,
+                          vector<uint8_t> encryptedCredentialKeys) = 0;
+
+  // Returns publicKeyCert (1st component) and signingKeyBlob (2nd component)
+  virtual optional<pair<vector<uint8_t>, vector<uint8_t>>>
+  generateSigningKeyPair(string docType, time_t now) = 0;
+
+  // Returns private key
+  virtual optional<vector<uint8_t>> createEphemeralKeyPair() = 0;
+
+  virtual optional<uint64_t> createAuthChallenge() = 0;
+
+  virtual bool startRetrieveEntries() = 0;
+
+  virtual bool setAuthToken(uint64_t challenge, uint64_t secureUserId,
+                            uint64_t authenticatorId,
+                            int hardwareAuthenticatorType, uint64_t timeStamp,
+                            const vector<uint8_t>& mac,
+                            uint64_t verificationTokenChallenge,
+                            uint64_t verificationTokenTimestamp,
+                            int verificationTokenSecurityLevel,
+                            const vector<uint8_t>& verificationTokenMac) = 0;
+
+  virtual bool pushReaderCert(const vector<uint8_t>& certX509) = 0;
+
+  virtual optional<bool> validateAccessControlProfile(
+      int id, const vector<uint8_t>& readerCertificate,
+      bool userAuthenticationRequired, int timeoutMillis, uint64_t secureUserId,
+      const vector<uint8_t>& mac) = 0;
+
+  virtual bool validateRequestMessage(
+      const vector<uint8_t>& sessionTranscript,
+      const vector<uint8_t>& requestMessage, int coseSignAlg,
+      const vector<uint8_t>& readerSignatureOfToBeSigned) = 0;
+
+  virtual bool calcMacKey(const vector<uint8_t>& sessionTranscript,
+                          const vector<uint8_t>& readerEphemeralPublicKey,
+                          const vector<uint8_t>& signingKeyBlob,
+                          const string& docType,
+                          unsigned int numNamespacesWithValues,
+                          size_t expectedProofOfProvisioningSize) = 0;
+
+  virtual AccessCheckResult startRetrieveEntryValue(
+      const string& nameSpace, const string& name,
+      unsigned int newNamespaceNumEntries, int32_t entrySize,
+      const vector<int32_t>& accessControlProfileIds) = 0;
+
+  virtual optional<vector<uint8_t>> retrieveEntryValue(
+      const vector<uint8_t>& encryptedContent, const string& nameSpace,
+      const string& name, const vector<int32_t>& accessControlProfileIds) = 0;
+
+  virtual optional<vector<uint8_t>> finishRetrieval();
+
+  virtual optional<vector<uint8_t>> deleteCredential(
+      const string& docType, const vector<uint8_t>& challenge,
+      bool includeChallenge, size_t proofOfDeletionCborSize) = 0;
+
+  virtual optional<vector<uint8_t>> proveOwnership(
+      const string& docType, bool testCredential,
+      const vector<uint8_t>& challenge, size_t proofOfOwnershipCborSize) = 0;
+
+  virtual bool shutdown() = 0;
+};
+
+}  // namespace android::hardware::identity
+
+#endif  // ANDROID_HARDWARE_IDENTITY_SECUREHARDWAREPROXY_H
diff --git a/guest/hals/identity/common/WritableIdentityCredential.cpp b/guest/hals/identity/common/WritableIdentityCredential.cpp
new file mode 100644
index 0000000..13ee244
--- /dev/null
+++ b/guest/hals/identity/common/WritableIdentityCredential.cpp
@@ -0,0 +1,424 @@
+/*
+ * Copyright 2019, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#define LOG_TAG "WritableIdentityCredential"
+
+#include "WritableIdentityCredential.h"
+
+#include <android/hardware/identity/support/IdentityCredentialSupport.h>
+
+#include <android-base/logging.h>
+#include <android-base/stringprintf.h>
+
+#include <cppbor.h>
+#include <cppbor_parse.h>
+
+#include <utility>
+
+#include "IdentityCredentialStore.h"
+
+#include "SecureHardwareProxy.h"
+
+namespace aidl::android::hardware::identity {
+
+using ::android::base::StringPrintf;
+using ::std::optional;
+using namespace ::android::hardware::identity;
+
+bool WritableIdentityCredential::initialize() {
+  if (!hwProxy_->initialize(testCredential_)) {
+    LOG(ERROR) << "hwProxy->initialize() failed";
+    return false;
+  }
+  startPersonalizationCalled_ = false;
+  firstEntry_ = true;
+
+  return true;
+}
+
+// Used when updating a credential. Returns false on failure.
+bool WritableIdentityCredential::initializeForUpdate(
+    const vector<uint8_t>& encryptedCredentialKeys) {
+  if (!hwProxy_->initializeForUpdate(testCredential_, docType_,
+                                     encryptedCredentialKeys)) {
+    LOG(ERROR) << "hwProxy->initializeForUpdate() failed";
+    return false;
+  }
+  startPersonalizationCalled_ = false;
+  firstEntry_ = true;
+
+  return true;
+}
+
+WritableIdentityCredential::~WritableIdentityCredential() {}
+
+ndk::ScopedAStatus WritableIdentityCredential::getAttestationCertificate(
+    const vector<uint8_t>& attestationApplicationId,
+    const vector<uint8_t>& attestationChallenge,
+    vector<Certificate>* outCertificateChain) {
+  if (getAttestationCertificateAlreadyCalled_) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error attestation certificate previously generated"));
+  }
+  getAttestationCertificateAlreadyCalled_ = true;
+
+  if (attestationChallenge.empty()) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "Challenge can not be empty"));
+  }
+
+  optional<vector<uint8_t>> certChain = hwProxy_->createCredentialKey(
+      attestationChallenge, attestationApplicationId);
+  if (!certChain) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error generating attestation certificate chain"));
+  }
+
+  optional<vector<vector<uint8_t>>> certs =
+      support::certificateChainSplit(certChain.value());
+  if (!certs) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error splitting chain into separate certificates"));
+  }
+
+  *outCertificateChain = vector<Certificate>();
+  for (const vector<uint8_t>& cert : certs.value()) {
+    Certificate c = Certificate();
+    c.encodedCertificate = cert;
+    outCertificateChain->push_back(std::move(c));
+  }
+
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus
+WritableIdentityCredential::setExpectedProofOfProvisioningSize(
+    int32_t expectedProofOfProvisioningSize) {
+  expectedProofOfProvisioningSize_ = expectedProofOfProvisioningSize;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus WritableIdentityCredential::startPersonalization(
+    int32_t accessControlProfileCount, const vector<int32_t>& entryCounts) {
+  if (startPersonalizationCalled_) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "startPersonalization called already"));
+  }
+  startPersonalizationCalled_ = true;
+
+  numAccessControlProfileRemaining_ = accessControlProfileCount;
+  remainingEntryCounts_ = entryCounts;
+  entryNameSpace_ = "";
+
+  signedDataAccessControlProfiles_ = cppbor::Array();
+  signedDataNamespaces_ = cppbor::Map();
+  signedDataCurrentNamespace_ = cppbor::Array();
+
+  if (!hwProxy_->startPersonalization(accessControlProfileCount, entryCounts,
+                                      docType_,
+                                      expectedProofOfProvisioningSize_)) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "eicStartPersonalization"));
+  }
+
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus WritableIdentityCredential::addAccessControlProfile(
+    int32_t id, const Certificate& readerCertificate,
+    bool userAuthenticationRequired, int64_t timeoutMillis,
+    int64_t secureUserId,
+    SecureAccessControlProfile* outSecureAccessControlProfile) {
+  if (numAccessControlProfileRemaining_ == 0) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "numAccessControlProfileRemaining_ is 0 and expected non-zero"));
+  }
+
+  if (accessControlProfileIds_.find(id) != accessControlProfileIds_.end()) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "Access Control Profile id must be unique"));
+  }
+  accessControlProfileIds_.insert(id);
+
+  if (id < 0 || id >= 32) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "Access Control Profile id must be non-negative and less than 32"));
+  }
+
+  // Spec requires if |userAuthenticationRequired| is false, then
+  // |timeoutMillis| must also be zero.
+  if (!userAuthenticationRequired && timeoutMillis != 0) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "userAuthenticationRequired is false but timeout is non-zero"));
+  }
+
+  optional<vector<uint8_t>> mac = hwProxy_->addAccessControlProfile(
+      id, readerCertificate.encodedCertificate, userAuthenticationRequired,
+      timeoutMillis, secureUserId);
+  if (!mac) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "eicAddAccessControlProfile"));
+  }
+
+  SecureAccessControlProfile profile;
+  profile.id = id;
+  profile.readerCertificate = readerCertificate;
+  profile.userAuthenticationRequired = userAuthenticationRequired;
+  profile.timeoutMillis = timeoutMillis;
+  profile.secureUserId = secureUserId;
+  profile.mac = mac.value();
+  cppbor::Map profileMap;
+  profileMap.add("id", profile.id);
+  if (profile.readerCertificate.encodedCertificate.size() > 0) {
+    profileMap.add("readerCertificate",
+                   cppbor::Bstr(profile.readerCertificate.encodedCertificate));
+  }
+  if (profile.userAuthenticationRequired) {
+    profileMap.add("userAuthenticationRequired",
+                   profile.userAuthenticationRequired);
+    profileMap.add("timeoutMillis", profile.timeoutMillis);
+  }
+  signedDataAccessControlProfiles_.add(std::move(profileMap));
+
+  numAccessControlProfileRemaining_--;
+
+  *outSecureAccessControlProfile = profile;
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus WritableIdentityCredential::beginAddEntry(
+    const vector<int32_t>& accessControlProfileIds, const string& nameSpace,
+    const string& name, int32_t entrySize) {
+  if (numAccessControlProfileRemaining_ != 0) {
+    LOG(ERROR) << "numAccessControlProfileRemaining_ is "
+               << numAccessControlProfileRemaining_ << " and expected zero";
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "numAccessControlProfileRemaining_ is not zero"));
+  }
+
+  // Ensure passed-in profile ids reference valid access control profiles
+  for (const int32_t id : accessControlProfileIds) {
+    if (accessControlProfileIds_.find(id) == accessControlProfileIds_.end()) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "An id in accessControlProfileIds references non-existing ACP"));
+    }
+  }
+
+  if (remainingEntryCounts_.size() == 0) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "No more namespaces to add to"));
+  }
+
+  // Handle initial beginEntry() call.
+  if (firstEntry_) {
+    firstEntry_ = false;
+    entryNameSpace_ = nameSpace;
+    allNameSpaces_.insert(nameSpace);
+  }
+
+  // If the namespace changed...
+  if (nameSpace != entryNameSpace_) {
+    if (allNameSpaces_.find(nameSpace) != allNameSpaces_.end()) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Name space cannot be added in interleaving fashion"));
+    }
+
+    // Then check that all entries in the previous namespace have been added..
+    if (remainingEntryCounts_[0] != 0) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "New namespace but a non-zero number of entries remain to be added"));
+    }
+    remainingEntryCounts_.erase(remainingEntryCounts_.begin());
+    remainingEntryCounts_[0] -= 1;
+    allNameSpaces_.insert(nameSpace);
+
+    if (signedDataCurrentNamespace_.size() > 0) {
+      signedDataNamespaces_.add(entryNameSpace_,
+                                std::move(signedDataCurrentNamespace_));
+      signedDataCurrentNamespace_ = cppbor::Array();
+    }
+  } else {
+    // Same namespace...
+    if (remainingEntryCounts_[0] == 0) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Same namespace but no entries remain to be added"));
+    }
+    remainingEntryCounts_[0] -= 1;
+  }
+
+  entryRemainingBytes_ = entrySize;
+  entryNameSpace_ = nameSpace;
+  entryName_ = name;
+  entryAccessControlProfileIds_ = accessControlProfileIds;
+  entryBytes_.resize(0);
+  // LOG(INFO) << "name=" << name << " entrySize=" << entrySize;
+
+  if (!hwProxy_->beginAddEntry(accessControlProfileIds, nameSpace, name,
+                               entrySize)) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "eicBeginAddEntry"));
+  }
+
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus WritableIdentityCredential::addEntryValue(
+    const vector<uint8_t>& content, vector<uint8_t>* outEncryptedContent) {
+  size_t contentSize = content.size();
+
+  if (contentSize > IdentityCredentialStore::kGcmChunkSize) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "Passed in chunk of is bigger than kGcmChunkSize"));
+  }
+  if (contentSize > entryRemainingBytes_) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "Passed in chunk is bigger than remaining space"));
+  }
+
+  entryBytes_.insert(entryBytes_.end(), content.begin(), content.end());
+  entryRemainingBytes_ -= contentSize;
+  if (entryRemainingBytes_ > 0) {
+    if (contentSize != IdentityCredentialStore::kGcmChunkSize) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Retrieved non-final chunk which isn't kGcmChunkSize"));
+    }
+  }
+
+  optional<vector<uint8_t>> encryptedContent = hwProxy_->addEntryValue(
+      entryAccessControlProfileIds_, entryNameSpace_, entryName_, content);
+  if (!encryptedContent) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "eicAddEntryValue"));
+  }
+
+  if (entryRemainingBytes_ == 0) {
+    // TODO: ideally do do this without parsing the data (but still validate
+    // data is valid CBOR).
+    auto [item, _, message] = cppbor::parse(entryBytes_);
+    if (item == nullptr) {
+      return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+          IIdentityCredentialStore::STATUS_INVALID_DATA,
+          "Data is not valid CBOR"));
+    }
+    cppbor::Map entryMap;
+    entryMap.add("name", entryName_);
+    entryMap.add("value", std::move(item));
+    cppbor::Array profileIdArray;
+    for (auto id : entryAccessControlProfileIds_) {
+      profileIdArray.add(id);
+    }
+    entryMap.add("accessControlProfiles", std::move(profileIdArray));
+    signedDataCurrentNamespace_.add(std::move(entryMap));
+  }
+
+  *outEncryptedContent = encryptedContent.value();
+  return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus WritableIdentityCredential::finishAddingEntries(
+    vector<uint8_t>* outCredentialData,
+    vector<uint8_t>* outProofOfProvisioningSignature) {
+  if (numAccessControlProfileRemaining_ != 0) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "numAccessControlProfileRemaining_ is not 0 and expected zero"));
+  }
+
+  if (remainingEntryCounts_.size() > 1 || remainingEntryCounts_[0] != 0) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        "More entry spaces remain than startPersonalization configured"));
+  }
+
+  if (signedDataCurrentNamespace_.size() > 0) {
+    signedDataNamespaces_.add(entryNameSpace_,
+                              std::move(signedDataCurrentNamespace_));
+  }
+  cppbor::Array popArray;
+  popArray.add("ProofOfProvisioning")
+      .add(docType_)
+      .add(std::move(signedDataAccessControlProfiles_))
+      .add(std::move(signedDataNamespaces_))
+      .add(testCredential_);
+  vector<uint8_t> encodedCbor = popArray.encode();
+
+  if (encodedCbor.size() != expectedProofOfProvisioningSize_) {
+    LOG(ERROR) << "CBOR for proofOfProvisioning is " << encodedCbor.size()
+               << " bytes, "
+               << "was expecting " << expectedProofOfProvisioningSize_;
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_INVALID_DATA,
+        StringPrintf("Unexpected CBOR size %zd for proofOfProvisioning, was "
+                     "expecting %zd",
+                     encodedCbor.size(), expectedProofOfProvisioningSize_)
+            .c_str()));
+  }
+
+  optional<vector<uint8_t>> signatureOfToBeSigned =
+      hwProxy_->finishAddingEntries();
+  if (!signatureOfToBeSigned) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "eicFinishAddingEntries"));
+  }
+
+  optional<vector<uint8_t>> signature =
+      support::coseSignEcDsaWithSignature(signatureOfToBeSigned.value(),
+                                          encodedCbor,  // data
+                                          {});          // certificateChain
+  if (!signature) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED, "Error signing data"));
+  }
+
+  optional<vector<uint8_t>> encryptedCredentialKeys =
+      hwProxy_->finishGetCredentialData(docType_);
+  if (!encryptedCredentialKeys) {
+    return ndk::ScopedAStatus(AStatus_fromServiceSpecificErrorWithMessage(
+        IIdentityCredentialStore::STATUS_FAILED,
+        "Error generating encrypted CredentialKeys"));
+  }
+  cppbor::Array array;
+  array.add(docType_);
+  array.add(testCredential_);
+  array.add(encryptedCredentialKeys.value());
+  vector<uint8_t> credentialData = array.encode();
+
+  *outCredentialData = credentialData;
+  *outProofOfProvisioningSignature = signature.value();
+  hwProxy_->shutdown();
+
+  return ndk::ScopedAStatus::ok();
+}
+
+}  // namespace aidl::android::hardware::identity
diff --git a/guest/hals/identity/common/WritableIdentityCredential.h b/guest/hals/identity/common/WritableIdentityCredential.h
new file mode 100644
index 0000000..47a22ad
--- /dev/null
+++ b/guest/hals/identity/common/WritableIdentityCredential.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2019, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_WRITABLEIDENTITYCREDENTIAL_H
+#define ANDROID_HARDWARE_IDENTITY_WRITABLEIDENTITYCREDENTIAL_H
+
+#include <aidl/android/hardware/identity/BnWritableIdentityCredential.h>
+#include <android/hardware/identity/support/IdentityCredentialSupport.h>
+
+#include <cppbor.h>
+#include <set>
+
+#include "IdentityCredentialStore.h"
+#include "SecureHardwareProxy.h"
+
+namespace aidl::android::hardware::identity {
+
+using ::android::sp;
+using ::android::hardware::identity::SecureHardwareProvisioningProxy;
+using ::std::set;
+using ::std::string;
+using ::std::vector;
+
+class WritableIdentityCredential : public BnWritableIdentityCredential {
+ public:
+  // For a new credential, call initialize() right after construction.
+  //
+  // For an updated credential, call initializeForUpdate() right after
+  // construction.
+  //
+  WritableIdentityCredential(sp<SecureHardwareProvisioningProxy> hwProxy,
+                             const string& docType, bool testCredential)
+      : hwProxy_(hwProxy), docType_(docType), testCredential_(testCredential) {}
+
+  ~WritableIdentityCredential();
+
+  // Creates the Credential Key. Returns false on failure.
+  bool initialize();
+
+  // Used when updating a credential. Returns false on failure.
+  bool initializeForUpdate(const vector<uint8_t>& encryptedCredentialKeys);
+
+  // Methods from IWritableIdentityCredential follow.
+  ndk::ScopedAStatus getAttestationCertificate(
+      const vector<uint8_t>& attestationApplicationId,
+      const vector<uint8_t>& attestationChallenge,
+      vector<Certificate>* outCertificateChain) override;
+
+  ndk::ScopedAStatus setExpectedProofOfProvisioningSize(
+      int32_t expectedProofOfProvisioningSize) override;
+
+  ndk::ScopedAStatus startPersonalization(
+      int32_t accessControlProfileCount,
+      const vector<int32_t>& entryCounts) override;
+
+  ndk::ScopedAStatus addAccessControlProfile(
+      int32_t id, const Certificate& readerCertificate,
+      bool userAuthenticationRequired, int64_t timeoutMillis,
+      int64_t secureUserId,
+      SecureAccessControlProfile* outSecureAccessControlProfile) override;
+
+  ndk::ScopedAStatus beginAddEntry(
+      const vector<int32_t>& accessControlProfileIds, const string& nameSpace,
+      const string& name, int32_t entrySize) override;
+  ndk::ScopedAStatus addEntryValue(
+      const vector<uint8_t>& content,
+      vector<uint8_t>* outEncryptedContent) override;
+
+  ndk::ScopedAStatus finishAddingEntries(
+      vector<uint8_t>* outCredentialData,
+      vector<uint8_t>* outProofOfProvisioningSignature) override;
+
+ private:
+  // Set by constructor.
+  sp<SecureHardwareProvisioningProxy> hwProxy_;
+  string docType_;
+  bool testCredential_;
+
+  // This is set in initialize().
+  bool startPersonalizationCalled_;
+  bool firstEntry_;
+
+  // This is set in getAttestationCertificate().
+  bool getAttestationCertificateAlreadyCalled_ = false;
+
+  // These fields are initialized during startPersonalization()
+  size_t numAccessControlProfileRemaining_;
+  vector<int32_t> remainingEntryCounts_;
+  cppbor::Array signedDataAccessControlProfiles_;
+  cppbor::Map signedDataNamespaces_;
+  cppbor::Array signedDataCurrentNamespace_;
+  size_t expectedProofOfProvisioningSize_;
+
+  // This field is initialized in addAccessControlProfile
+  set<int32_t> accessControlProfileIds_;
+
+  // These fields are initialized during beginAddEntry()
+  size_t entryRemainingBytes_;
+  string entryNameSpace_;
+  string entryName_;
+  vector<int32_t> entryAccessControlProfileIds_;
+  vector<uint8_t> entryBytes_;
+  set<string> allNameSpaces_;
+};
+
+}  // namespace aidl::android::hardware::identity
+
+#endif  // ANDROID_HARDWARE_IDENTITY_WRITABLEIDENTITYCREDENTIAL_H
diff --git a/guest/hals/identity/libeic/EicCbor.c b/guest/hals/identity/libeic/EicCbor.c
new file mode 100644
index 0000000..b496342
--- /dev/null
+++ b/guest/hals/identity/libeic/EicCbor.c
@@ -0,0 +1,256 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "EicCbor.h"
+
+void eicCborInit(EicCbor* cbor, uint8_t* buffer, size_t bufferSize) {
+  eicMemSet(cbor, '\0', sizeof(EicCbor));
+  cbor->size = 0;
+  cbor->bufferSize = bufferSize;
+  cbor->buffer = buffer;
+  cbor->digestType = EIC_CBOR_DIGEST_TYPE_SHA256;
+  eicOpsSha256Init(&cbor->digester.sha256);
+}
+
+void eicCborInitHmacSha256(EicCbor* cbor, uint8_t* buffer, size_t bufferSize,
+                           const uint8_t* hmacKey, size_t hmacKeySize) {
+  eicMemSet(cbor, '\0', sizeof(EicCbor));
+  cbor->size = 0;
+  cbor->bufferSize = bufferSize;
+  cbor->buffer = buffer;
+  cbor->digestType = EIC_CBOR_DIGEST_TYPE_HMAC_SHA256;
+  eicOpsHmacSha256Init(&cbor->digester.hmacSha256, hmacKey, hmacKeySize);
+}
+
+void eicCborEnableSecondaryDigesterSha256(EicCbor* cbor, EicSha256Ctx* sha256) {
+  cbor->secondaryDigesterSha256 = sha256;
+}
+
+void eicCborFinal(EicCbor* cbor, uint8_t digest[EIC_SHA256_DIGEST_SIZE]) {
+  switch (cbor->digestType) {
+    case EIC_CBOR_DIGEST_TYPE_SHA256:
+      eicOpsSha256Final(&cbor->digester.sha256, digest);
+      break;
+    case EIC_CBOR_DIGEST_TYPE_HMAC_SHA256:
+      eicOpsHmacSha256Final(&cbor->digester.hmacSha256, digest);
+      break;
+  }
+}
+
+void eicCborAppend(EicCbor* cbor, const uint8_t* data, size_t size) {
+  switch (cbor->digestType) {
+    case EIC_CBOR_DIGEST_TYPE_SHA256:
+      eicOpsSha256Update(&cbor->digester.sha256, data, size);
+      break;
+    case EIC_CBOR_DIGEST_TYPE_HMAC_SHA256:
+      eicOpsHmacSha256Update(&cbor->digester.hmacSha256, data, size);
+      break;
+  }
+  if (cbor->secondaryDigesterSha256 != NULL) {
+    eicOpsSha256Update(cbor->secondaryDigesterSha256, data, size);
+  }
+
+  if (cbor->size >= cbor->bufferSize) {
+    cbor->size += size;
+    return;
+  }
+
+  size_t numBytesLeft = cbor->bufferSize - cbor->size;
+  size_t numBytesToCopy = size;
+  if (numBytesToCopy > numBytesLeft) {
+    numBytesToCopy = numBytesLeft;
+  }
+  eicMemCpy(cbor->buffer + cbor->size, data, numBytesToCopy);
+
+  cbor->size += size;
+}
+
+size_t eicCborAdditionalLengthBytesFor(size_t size) {
+  if (size < 24) {
+    return 0;
+  } else if (size <= 0xff) {
+    return 1;
+  } else if (size <= 0xffff) {
+    return 2;
+  } else if (size <= 0xffffffff) {
+    return 4;
+  }
+  return 8;
+}
+
+void eicCborBegin(EicCbor* cbor, int majorType, uint64_t size) {
+  uint8_t data[9];
+
+  if (size < 24) {
+    data[0] = (majorType << 5) | size;
+    eicCborAppend(cbor, data, 1);
+  } else if (size <= 0xff) {
+    data[0] = (majorType << 5) | 24;
+    data[1] = size;
+    eicCborAppend(cbor, data, 2);
+  } else if (size <= 0xffff) {
+    data[0] = (majorType << 5) | 25;
+    data[1] = size >> 8;
+    data[2] = size & 0xff;
+    eicCborAppend(cbor, data, 3);
+  } else if (size <= 0xffffffff) {
+    data[0] = (majorType << 5) | 26;
+    data[1] = (size >> 24) & 0xff;
+    data[2] = (size >> 16) & 0xff;
+    data[3] = (size >> 8) & 0xff;
+    data[4] = size & 0xff;
+    eicCborAppend(cbor, data, 5);
+  } else {
+    data[0] = (majorType << 5) | 27;
+    data[1] = (((uint64_t)size) >> 56) & 0xff;
+    data[2] = (((uint64_t)size) >> 48) & 0xff;
+    data[3] = (((uint64_t)size) >> 40) & 0xff;
+    data[4] = (((uint64_t)size) >> 32) & 0xff;
+    data[5] = (((uint64_t)size) >> 24) & 0xff;
+    data[6] = (((uint64_t)size) >> 16) & 0xff;
+    data[7] = (((uint64_t)size) >> 8) & 0xff;
+    data[8] = ((uint64_t)size) & 0xff;
+    eicCborAppend(cbor, data, 9);
+  }
+}
+
+void eicCborAppendByteString(EicCbor* cbor, const uint8_t* data,
+                             size_t dataSize) {
+  eicCborBegin(cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING, dataSize);
+  eicCborAppend(cbor, data, dataSize);
+}
+
+void eicCborAppendString(EicCbor* cbor, const char* str, size_t strLength) {
+  eicCborBegin(cbor, EIC_CBOR_MAJOR_TYPE_STRING, strLength);
+  eicCborAppend(cbor, (const uint8_t*)str, strLength);
+}
+
+void eicCborAppendStringZ(EicCbor* cbor, const char* str) {
+  eicCborAppendString(cbor, str, eicStrLen(str));
+}
+
+void eicCborAppendSimple(EicCbor* cbor, uint8_t simpleValue) {
+  eicCborBegin(cbor, EIC_CBOR_MAJOR_TYPE_SIMPLE, simpleValue);
+}
+
+void eicCborAppendBool(EicCbor* cbor, bool value) {
+  uint8_t simpleValue =
+      value ? EIC_CBOR_SIMPLE_VALUE_TRUE : EIC_CBOR_SIMPLE_VALUE_FALSE;
+  eicCborAppendSimple(cbor, simpleValue);
+}
+
+void eicCborAppendSemantic(EicCbor* cbor, uint64_t value) {
+  size_t encoded = value;
+  eicCborBegin(cbor, EIC_CBOR_MAJOR_TYPE_SEMANTIC, encoded);
+}
+
+void eicCborAppendUnsigned(EicCbor* cbor, uint64_t value) {
+  uint64_t encoded = value;
+  eicCborBegin(cbor, EIC_CBOR_MAJOR_TYPE_UNSIGNED, encoded);
+}
+
+void eicCborAppendNumber(EicCbor* cbor, int64_t value) {
+  if (value < 0) {
+    uint64_t encoded = -1 - value;
+    eicCborBegin(cbor, EIC_CBOR_MAJOR_TYPE_NEGATIVE, encoded);
+  } else {
+    eicCborAppendUnsigned(cbor, value);
+  }
+}
+
+void eicCborAppendArray(EicCbor* cbor, size_t numElements) {
+  eicCborBegin(cbor, EIC_CBOR_MAJOR_TYPE_ARRAY, numElements);
+}
+
+void eicCborAppendMap(EicCbor* cbor, size_t numPairs) {
+  eicCborBegin(cbor, EIC_CBOR_MAJOR_TYPE_MAP, numPairs);
+}
+
+bool eicCborCalcAccessControl(EicCbor* cborBuilder, int id,
+                              const uint8_t* readerCertificate,
+                              size_t readerCertificateSize,
+                              bool userAuthenticationRequired,
+                              uint64_t timeoutMillis, uint64_t secureUserId) {
+  size_t numPairs = 1;
+  if (readerCertificateSize > 0) {
+    numPairs += 1;
+  }
+  if (userAuthenticationRequired) {
+    numPairs += 2;
+    if (secureUserId > 0) {
+      numPairs += 1;
+    }
+  }
+  eicCborAppendMap(cborBuilder, numPairs);
+  eicCborAppendStringZ(cborBuilder, "id");
+  eicCborAppendUnsigned(cborBuilder, id);
+  if (readerCertificateSize > 0) {
+    eicCborAppendStringZ(cborBuilder, "readerCertificate");
+    eicCborAppendByteString(cborBuilder, readerCertificate,
+                            readerCertificateSize);
+  }
+  if (userAuthenticationRequired) {
+    eicCborAppendStringZ(cborBuilder, "userAuthenticationRequired");
+    eicCborAppendBool(cborBuilder, userAuthenticationRequired);
+    eicCborAppendStringZ(cborBuilder, "timeoutMillis");
+    eicCborAppendUnsigned(cborBuilder, timeoutMillis);
+    if (secureUserId > 0) {
+      eicCborAppendStringZ(cborBuilder, "secureUserId");
+      eicCborAppendUnsigned(cborBuilder, secureUserId);
+    }
+  }
+
+  if (cborBuilder->size > cborBuilder->bufferSize) {
+    eicDebug("Buffer for ACP CBOR is too small (%zd) - need %zd bytes",
+             cborBuilder->bufferSize, cborBuilder->size);
+    return false;
+  }
+
+  return true;
+}
+
+bool eicCborCalcEntryAdditionalData(
+    const uint8_t* accessControlProfileIds, size_t numAccessControlProfileIds,
+    const char* nameSpace, size_t nameSpaceLength, const char* name,
+    size_t nameLength, uint8_t* cborBuffer, size_t cborBufferSize,
+    size_t* outAdditionalDataCborSize,
+    uint8_t additionalDataSha256[EIC_SHA256_DIGEST_SIZE]) {
+  EicCbor cborBuilder;
+
+  eicCborInit(&cborBuilder, cborBuffer, cborBufferSize);
+  eicCborAppendMap(&cborBuilder, 3);
+  eicCborAppendStringZ(&cborBuilder, "Namespace");
+  eicCborAppendString(&cborBuilder, nameSpace, nameSpaceLength);
+  eicCborAppendStringZ(&cborBuilder, "Name");
+  eicCborAppendString(&cborBuilder, name, nameLength);
+  eicCborAppendStringZ(&cborBuilder, "AccessControlProfileIds");
+  eicCborAppendArray(&cborBuilder, numAccessControlProfileIds);
+  for (size_t n = 0; n < numAccessControlProfileIds; n++) {
+    eicCborAppendNumber(&cborBuilder, accessControlProfileIds[n]);
+  }
+  if (cborBuilder.size > cborBufferSize) {
+    eicDebug(
+        "Not enough space for additionalData - buffer is only %zd bytes, "
+        "content is %zd",
+        cborBufferSize, cborBuilder.size);
+    return false;
+  }
+  if (outAdditionalDataCborSize != NULL) {
+    *outAdditionalDataCborSize = cborBuilder.size;
+  }
+  eicCborFinal(&cborBuilder, additionalDataSha256);
+  return true;
+}
diff --git a/guest/hals/identity/libeic/EicCbor.h b/guest/hals/identity/libeic/EicCbor.h
new file mode 100644
index 0000000..384766f
--- /dev/null
+++ b/guest/hals/identity/libeic/EicCbor.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_EIC_CBOR_H
+#define ANDROID_HARDWARE_IDENTITY_EIC_CBOR_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EicOps.h"
+
+typedef enum {
+  EIC_CBOR_DIGEST_TYPE_SHA256,
+  EIC_CBOR_DIGEST_TYPE_HMAC_SHA256,
+} EicCborDigestType;
+
+/* EicCbor is a utility class to build CBOR data structures and calculate
+ * digests on the fly.
+ */
+typedef struct {
+  // Contains the size of the built CBOR, even if it exceeds bufferSize (will
+  // never write to buffer beyond bufferSize though)
+  size_t size;
+
+  // The size of the buffer. Is zero if no data is recorded in which case
+  // only digesting is performed.
+  size_t bufferSize;
+
+  // Whether we're producing a SHA-256 or HMAC-SHA256 digest.
+  EicCborDigestType digestType;
+
+  // The SHA-256 digester object.
+  union {
+    EicSha256Ctx sha256;
+    EicHmacSha256Ctx hmacSha256;
+  } digester;
+
+  // The secondary digester, may be unset.
+  EicSha256Ctx* secondaryDigesterSha256;
+
+  // The buffer used for building up CBOR or NULL if bufferSize is 0.
+  uint8_t* buffer;
+} EicCbor;
+
+/* Initializes an EicCbor.
+ *
+ * The given buffer will be used, up to bufferSize.
+ *
+ * If bufferSize is 0, buffer may be NULL.
+ */
+void eicCborInit(EicCbor* cbor, uint8_t* buffer, size_t bufferSize);
+
+/* Like eicCborInit() but uses HMAC-SHA256 instead of SHA-256.
+ */
+void eicCborInitHmacSha256(EicCbor* cbor, uint8_t* buffer, size_t bufferSize,
+                           const uint8_t* hmacKey, size_t hmacKeySize);
+
+/* Enables a secondary digester.
+ *
+ * May be enabled midway through processing, this can be used to e.g. calculate
+ * a digest of Sig_structure (for COSE_Sign1) and a separate digest of its
+ * payload.
+ */
+void eicCborEnableSecondaryDigesterSha256(EicCbor* cbor, EicSha256Ctx* sha256);
+
+/* Finishes building CBOR and returns the digest. */
+void eicCborFinal(EicCbor* cbor, uint8_t digest[EIC_SHA256_DIGEST_SIZE]);
+
+/* Appends CBOR data to the EicCbor. */
+void eicCborAppend(EicCbor* cbor, const uint8_t* data, size_t size);
+
+#define EIC_CBOR_MAJOR_TYPE_UNSIGNED 0
+#define EIC_CBOR_MAJOR_TYPE_NEGATIVE 1
+#define EIC_CBOR_MAJOR_TYPE_BYTE_STRING 2
+#define EIC_CBOR_MAJOR_TYPE_STRING 3
+#define EIC_CBOR_MAJOR_TYPE_ARRAY 4
+#define EIC_CBOR_MAJOR_TYPE_MAP 5
+#define EIC_CBOR_MAJOR_TYPE_SEMANTIC 6
+#define EIC_CBOR_MAJOR_TYPE_SIMPLE 7
+
+#define EIC_CBOR_SIMPLE_VALUE_FALSE 20
+#define EIC_CBOR_SIMPLE_VALUE_TRUE 21
+
+#define EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR 24
+
+/* Begins a new CBOR value. */
+void eicCborBegin(EicCbor* cbor, int majorType, uint64_t size);
+
+/* Appends a bytestring. */
+void eicCborAppendByteString(EicCbor* cbor, const uint8_t* data,
+                             size_t dataSize);
+
+/* Appends a UTF-8 string. */
+void eicCborAppendString(EicCbor* cbor, const char* str, size_t strLength);
+
+/* Appends a NUL-terminated UTF-8 string. */
+void eicCborAppendStringZ(EicCbor* cbor, const char* str);
+
+/* Appends a simple value. */
+void eicCborAppendSimple(EicCbor* cbor, uint8_t simpleValue);
+
+/* Appends a boolean. */
+void eicCborAppendBool(EicCbor* cbor, bool value);
+
+/* Appends a semantic */
+void eicCborAppendSemantic(EicCbor* cbor, uint64_t value);
+
+/* Appends an unsigned number. */
+void eicCborAppendUnsigned(EicCbor* cbor, uint64_t value);
+
+/* Appends a number. */
+void eicCborAppendNumber(EicCbor* cbor, int64_t value);
+
+/* Starts appending an array.
+ *
+ * After this numElements CBOR elements must follow.
+ */
+void eicCborAppendArray(EicCbor* cbor, size_t numElements);
+
+/* Starts appending a map.
+ *
+ * After this numPairs pairs of CBOR elements must follow.
+ */
+void eicCborAppendMap(EicCbor* cbor, size_t numPairs);
+
+/* Calculates how many bytes are needed to store a size. */
+size_t eicCborAdditionalLengthBytesFor(size_t size);
+
+bool eicCborCalcAccessControl(EicCbor* cborBuilder, int id,
+                              const uint8_t* readerCertificate,
+                              size_t readerCertificateSize,
+                              bool userAuthenticationRequired,
+                              uint64_t timeoutMillis, uint64_t secureUserId);
+
+bool eicCborCalcEntryAdditionalData(
+    const uint8_t* accessControlProfileIds, size_t numAccessControlProfileIds,
+    const char* nameSpace, size_t nameSpaceLength, const char* name,
+    size_t nameLength, uint8_t* cborBuffer, size_t cborBufferSize,
+    size_t* outAdditionalDataCborSize,
+    uint8_t additionalDataSha256[EIC_SHA256_DIGEST_SIZE]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // ANDROID_HARDWARE_IDENTITY_EIC_CBOR_H
diff --git a/guest/hals/identity/libeic/EicCommon.h b/guest/hals/identity/libeic/EicCommon.h
new file mode 100644
index 0000000..1fab26a
--- /dev/null
+++ b/guest/hals/identity/libeic/EicCommon.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_EIC_COMMON_H
+#define ANDROID_HARDWARE_IDENTITY_EIC_COMMON_H
+
+// Feature version 202009:
+//
+//         CredentialKeys = [
+//              bstr,   ; storageKey, a 128-bit AES key
+//              bstr,   ; credentialPrivKey, the private key for credentialKey
+//         ]
+//
+// Feature version 202101:
+//
+//         CredentialKeys = [
+//              bstr,   ; storageKey, a 128-bit AES key
+//              bstr,   ; credentialPrivKey, the private key for credentialKey
+//              bstr    ; proofOfProvisioning SHA-256
+//         ]
+//
+// where storageKey is 16 bytes, credentialPrivateKey is 32 bytes, and
+// proofOfProvisioning SHA-256 is 32 bytes.
+#define EIC_CREDENTIAL_KEYS_CBOR_SIZE_FEATURE_VERSION_202009 52
+#define EIC_CREDENTIAL_KEYS_CBOR_SIZE_FEATURE_VERSION_202101 86
+
+#endif  // ANDROID_HARDWARE_IDENTITY_EIC_COMMON_H
diff --git a/guest/hals/identity/libeic/EicOps.h b/guest/hals/identity/libeic/EicOps.h
new file mode 100644
index 0000000..849d6fc
--- /dev/null
+++ b/guest/hals/identity/libeic/EicOps.h
@@ -0,0 +1,316 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_EIC_OPS_H
+#define ANDROID_HARDWARE_IDENTITY_EIC_OPS_H
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+// Uncomment or define if debug messages are needed.
+//
+//#define EIC_DEBUG
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// The following defines must be set to something appropriate
+//
+//   EIC_SHA256_CONTEXT_SIZE - the size of EicSha256Ctx
+//   EIC_HMAC_SHA256_CONTEXT_SIZE - the size of EicHmacSha256Ctx
+//
+// For example, if EicSha256Ctx is implemented using BoringSSL this would be
+// defined as sizeof(SHA256_CTX).
+//
+// We expect the implementation to provide a header file with the name
+// EicOpsImpl.h to do all this.
+//
+#include "EicOpsImpl.h"
+
+#define EIC_SHA256_DIGEST_SIZE 32
+
+// The size of a P-256 private key.
+//
+#define EIC_P256_PRIV_KEY_SIZE 32
+
+// The size of a P-256 public key in uncompressed form.
+//
+// The public key is stored in uncompressed form, first the X coordinate, then
+// the Y coordinate.
+//
+#define EIC_P256_PUB_KEY_SIZE 64
+
+// Size of one of the coordinates in a curve-point.
+//
+#define EIC_P256_COORDINATE_SIZE 32
+
+// The size of an ECSDA signature using P-256.
+//
+// The R and S values are stored here, first R then S.
+//
+#define EIC_ECDSA_P256_SIGNATURE_SIZE 64
+
+#define EIC_AES_128_KEY_SIZE 16
+
+// The following are definitions of implementation functions the
+// underlying platform must provide.
+//
+
+struct EicSha256Ctx {
+  uint8_t reserved[EIC_SHA256_CONTEXT_SIZE];
+};
+typedef struct EicSha256Ctx EicSha256Ctx;
+
+struct EicHmacSha256Ctx {
+  uint8_t reserved[EIC_HMAC_SHA256_CONTEXT_SIZE];
+};
+typedef struct EicHmacSha256Ctx EicHmacSha256Ctx;
+
+#ifdef EIC_DEBUG
+// Debug macro. Don't include a new-line in message.
+//
+#define eicDebug(...)                        \
+  do {                                       \
+    eicPrint("%s:%d: ", __FILE__, __LINE__); \
+    eicPrint(__VA_ARGS__);                   \
+    eicPrint("\n");                          \
+  } while (0)
+#else
+#define eicDebug(...) \
+  do {                \
+  } while (0)
+#endif
+
+// Prints message which should include new-line character. Can be no-op.
+//
+// Don't use this from code, use eicDebug() instead.
+//
+#ifdef EIC_DEBUG
+void eicPrint(const char* format, ...);
+#else
+inline void eicPrint(const char*, ...) {}
+#endif
+
+// Dumps data as pretty-printed hex. Can be no-op.
+//
+#ifdef EIC_DEBUG
+void eicHexdump(const char* message, const uint8_t* data, size_t dataSize);
+#else
+inline void eicHexdump(const char*, const uint8_t*, size_t) {}
+#endif
+
+// Pretty-prints encoded CBOR. Can be no-op.
+//
+// If a byte-string is larger than |maxBStrSize| its contents will not be
+// printed, instead the value of the form "<bstr size=1099016
+// sha1=ef549cca331f73dfae2090e6a37c04c23f84b07b>" will be printed. Pass zero
+// for |maxBStrSize| to disable this.
+//
+#ifdef EIC_DEBUG
+void eicCborPrettyPrint(const uint8_t* cborData, size_t cborDataSize,
+                        size_t maxBStrSize);
+#else
+inline void eicCborPrettyPrint(const uint8_t*, size_t, size_t) {}
+#endif
+
+// Memory setting, see memset(3).
+void* eicMemSet(void* s, int c, size_t n);
+
+// Memory copying, see memcpy(3).
+void* eicMemCpy(void* dest, const void* src, size_t n);
+
+// String length, see strlen(3).
+size_t eicStrLen(const char* s);
+
+// Memory compare, see CRYPTO_memcmp(3SSL)
+//
+// It takes an amount of time dependent on len, but independent of the contents
+// of the memory regions pointed to by s1 and s2.
+//
+int eicCryptoMemCmp(const void* s1, const void* s2, size_t n);
+
+// Random number generation.
+bool eicOpsRandom(uint8_t* buf, size_t numBytes);
+
+// If |testCredential| is true, returns the 128-bit AES Hardware-Bound Key (16
+// bytes).
+//
+// Otherwise returns all zeroes (16 bytes).
+//
+const uint8_t* eicOpsGetHardwareBoundKey(bool testCredential);
+
+// Encrypts |data| with |key| and |additionalAuthenticatedData| using |nonce|,
+// returns the resulting (nonce || ciphertext || tag) in |encryptedData| which
+// must be of size |dataSize| + 28.
+bool eicOpsEncryptAes128Gcm(
+    const uint8_t* key,    // Must be 16 bytes
+    const uint8_t* nonce,  // Must be 12 bytes
+    const uint8_t* data,   // May be NULL if size is 0
+    size_t dataSize,
+    const uint8_t* additionalAuthenticationData,  // May be NULL if size is 0
+    size_t additionalAuthenticationDataSize, uint8_t* encryptedData);
+
+// Decrypts |encryptedData| using |key| and |additionalAuthenticatedData|,
+// returns resulting plaintext in |data| must be of size |encryptedDataSize|
+// - 28.
+//
+// The format of |encryptedData| must be as specified in the
+// encryptAes128Gcm() function.
+bool eicOpsDecryptAes128Gcm(const uint8_t* key,  // Must be 16 bytes
+                            const uint8_t* encryptedData,
+                            size_t encryptedDataSize,
+                            const uint8_t* additionalAuthenticationData,
+                            size_t additionalAuthenticationDataSize,
+                            uint8_t* data);
+
+// Creates an EC key using the P-256 curve. The private key is written to
+// |privateKey|. The public key is written to |publicKey|.
+//
+bool eicOpsCreateEcKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
+                       uint8_t publicKey[EIC_P256_PUB_KEY_SIZE]);
+
+// Generates CredentialKey plus an attestation certificate.
+//
+// The attestation certificate will be signed by the attestation keys the secure
+// area has been provisioned with. The given |challenge| and |applicationId|
+// will be used as will |testCredential|.
+//
+// The generated certificate will be in X.509 format and returned in |cert|
+// and |certSize| must be set to the size of this array and this function will
+// set it to the size of the certification chain on successfully return.
+//
+// This may return either a single certificate or an entire certificate
+// chain. If it returns only a single certificate, the implementation of
+// SecureHardwareProvisioningProxy::createCredentialKey() should amend the
+// remainder of the certificate chain on the HAL side.
+//
+bool eicOpsCreateCredentialKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
+                               const uint8_t* challenge, size_t challengeSize,
+                               const uint8_t* applicationId,
+                               size_t applicationIdSize, bool testCredential,
+                               uint8_t* cert,
+                               size_t* certSize);  // inout
+
+// Generate an X.509 certificate for the key identified by |publicKey| which
+// must be of the form returned by eicOpsCreateEcKey().
+//
+// If proofOfBinding is not NULL, it will be included as an OCTET_STRING
+// X.509 extension at OID 1.3.6.1.4.1.11129.2.1.26.
+//
+// The certificate will be signed by the key identified by |signingKey| which
+// must be of the form returned by eicOpsCreateEcKey().
+//
+bool eicOpsSignEcKey(const uint8_t publicKey[EIC_P256_PUB_KEY_SIZE],
+                     const uint8_t signingKey[EIC_P256_PRIV_KEY_SIZE],
+                     unsigned int serial, const char* issuerName,
+                     const char* subjectName, time_t validityNotBefore,
+                     time_t validityNotAfter, const uint8_t* proofOfBinding,
+                     size_t proofOfBindingSize, uint8_t* cert,
+                     size_t* certSize);  // inout
+
+// Uses |privateKey| to create an ECDSA signature of some data (the SHA-256 must
+// be given by |digestOfData|). Returns the signature in |signature|.
+//
+bool eicOpsEcDsa(const uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
+                 const uint8_t digestOfData[EIC_SHA256_DIGEST_SIZE],
+                 uint8_t signature[EIC_ECDSA_P256_SIGNATURE_SIZE]);
+
+// Performs Elliptic Curve Diffie-Helman.
+//
+bool eicOpsEcdh(const uint8_t publicKey[EIC_P256_PUB_KEY_SIZE],
+                const uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
+                uint8_t sharedSecret[EIC_P256_COORDINATE_SIZE]);
+
+// Performs HKDF.
+//
+bool eicOpsHkdf(const uint8_t* sharedSecret, size_t sharedSecretSize,
+                const uint8_t* salt, size_t saltSize, const uint8_t* info,
+                size_t infoSize, uint8_t* output, size_t outputSize);
+
+// SHA-256 functions.
+void eicOpsSha256Init(EicSha256Ctx* ctx);
+void eicOpsSha256Update(EicSha256Ctx* ctx, const uint8_t* data, size_t len);
+void eicOpsSha256Final(EicSha256Ctx* ctx,
+                       uint8_t digest[EIC_SHA256_DIGEST_SIZE]);
+
+// HMAC SHA-256 functions.
+void eicOpsHmacSha256Init(EicHmacSha256Ctx* ctx, const uint8_t* key,
+                          size_t keySize);
+void eicOpsHmacSha256Update(EicHmacSha256Ctx* ctx, const uint8_t* data,
+                            size_t len);
+void eicOpsHmacSha256Final(EicHmacSha256Ctx* ctx,
+                           uint8_t digest[EIC_SHA256_DIGEST_SIZE]);
+
+// Extracts the public key in the given X.509 certificate.
+//
+// If the key is not an EC key, this function fails.
+//
+// Otherwise the public key is stored in uncompressed form in |publicKey| which
+// size should be set in |publicKeySize|. On successful return |publicKeySize|
+// is set to the length of the key. If there is not enough space, the function
+// fails.
+//
+// (The public key returned is not necessarily a P-256 key, even if it is note
+// that its size is not EIC_P256_PUBLIC_KEY_SIZE because of the leading 0x04.)
+//
+bool eicOpsX509GetPublicKey(const uint8_t* x509Cert, size_t x509CertSize,
+                            uint8_t* publicKey, size_t* publicKeySize);
+
+// Checks that the X.509 certificate given by |x509Cert| is signed by the public
+// key given by |publicKey| which must be an EC key in uncompressed form (e.g.
+// same formatt as returned by eicOpsX509GetPublicKey()).
+//
+bool eicOpsX509CertSignedByPublicKey(const uint8_t* x509Cert,
+                                     size_t x509CertSize,
+                                     const uint8_t* publicKey,
+                                     size_t publicKeySize);
+
+// Checks that |signature| is a signature of some data (given by |digest|),
+// signed by the public key given by |publicKey|.
+//
+// The key must be an EC key in uncompressed form (e.g.  same format as returned
+// by eicOpsX509GetPublicKey()).
+//
+// The format of the signature is the same encoding as the 'signature' field of
+// COSE_Sign1 - that is, it's the R and S integers both with the same length as
+// the key-size.
+//
+// The size of digest must match the size of the key.
+//
+bool eicOpsEcDsaVerifyWithPublicKey(const uint8_t* digest, size_t digestSize,
+                                    const uint8_t* signature,
+                                    size_t signatureSize,
+                                    const uint8_t* publicKey,
+                                    size_t publicKeySize);
+
+// Validates that the passed in data constitutes a valid auth- and verification
+// tokens.
+//
+bool eicOpsValidateAuthToken(
+    uint64_t challenge, uint64_t secureUserId, uint64_t authenticatorId,
+    int hardwareAuthenticatorType, uint64_t timeStamp, const uint8_t* mac,
+    size_t macSize, uint64_t verificationTokenChallenge,
+    uint64_t verificationTokenTimeStamp, int verificationTokenSecurityLevel,
+    const uint8_t* verificationTokenMac, size_t verificationTokenMacSize);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // ANDROID_HARDWARE_IDENTITY_EIC_OPS_H
diff --git a/guest/hals/identity/libeic/EicOpsImpl.cc b/guest/hals/identity/libeic/EicOpsImpl.cc
new file mode 100644
index 0000000..0921c72
--- /dev/null
+++ b/guest/hals/identity/libeic/EicOpsImpl.cc
@@ -0,0 +1,546 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#define LOG_TAG "EicOpsImpl"
+
+#include <optional>
+#include <tuple>
+#include <vector>
+
+#include <android-base/logging.h>
+#include <android-base/stringprintf.h>
+#include <string.h>
+
+#include <android/hardware/identity/support/IdentityCredentialSupport.h>
+
+#include <openssl/sha.h>
+
+#include <openssl/aes.h>
+#include <openssl/bn.h>
+#include <openssl/crypto.h>
+#include <openssl/ec.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/hkdf.h>
+#include <openssl/hmac.h>
+#include <openssl/objects.h>
+#include <openssl/pem.h>
+#include <openssl/pkcs12.h>
+#include <openssl/rand.h>
+#include <openssl/x509.h>
+#include <openssl/x509_vfy.h>
+
+#include "EicOps.h"
+
+using ::std::map;
+using ::std::optional;
+using ::std::string;
+using ::std::tuple;
+using ::std::vector;
+
+void* eicMemSet(void* s, int c, size_t n) { return memset(s, c, n); }
+
+void* eicMemCpy(void* dest, const void* src, size_t n) {
+  return memcpy(dest, src, n);
+}
+
+size_t eicStrLen(const char* s) { return strlen(s); }
+
+int eicCryptoMemCmp(const void* s1, const void* s2, size_t n) {
+  return CRYPTO_memcmp(s1, s2, n);
+}
+
+void eicOpsHmacSha256Init(EicHmacSha256Ctx* ctx, const uint8_t* key,
+                          size_t keySize) {
+  HMAC_CTX* realCtx = (HMAC_CTX*)ctx;
+  HMAC_CTX_init(realCtx);
+  if (HMAC_Init_ex(realCtx, key, keySize, EVP_sha256(), nullptr /* impl */) !=
+      1) {
+    LOG(ERROR) << "Error initializing HMAC_CTX";
+  }
+}
+
+void eicOpsHmacSha256Update(EicHmacSha256Ctx* ctx, const uint8_t* data,
+                            size_t len) {
+  HMAC_CTX* realCtx = (HMAC_CTX*)ctx;
+  if (HMAC_Update(realCtx, data, len) != 1) {
+    LOG(ERROR) << "Error updating HMAC_CTX";
+  }
+}
+
+void eicOpsHmacSha256Final(EicHmacSha256Ctx* ctx,
+                           uint8_t digest[EIC_SHA256_DIGEST_SIZE]) {
+  HMAC_CTX* realCtx = (HMAC_CTX*)ctx;
+  unsigned int size = 0;
+  if (HMAC_Final(realCtx, digest, &size) != 1) {
+    LOG(ERROR) << "Error finalizing HMAC_CTX";
+  }
+  if (size != EIC_SHA256_DIGEST_SIZE) {
+    LOG(ERROR) << "Expected 32 bytes from HMAC_Final, got " << size;
+  }
+}
+
+void eicOpsSha256Init(EicSha256Ctx* ctx) {
+  SHA256_CTX* realCtx = (SHA256_CTX*)ctx;
+  SHA256_Init(realCtx);
+}
+
+void eicOpsSha256Update(EicSha256Ctx* ctx, const uint8_t* data, size_t len) {
+  SHA256_CTX* realCtx = (SHA256_CTX*)ctx;
+  SHA256_Update(realCtx, data, len);
+}
+
+void eicOpsSha256Final(EicSha256Ctx* ctx,
+                       uint8_t digest[EIC_SHA256_DIGEST_SIZE]) {
+  SHA256_CTX* realCtx = (SHA256_CTX*)ctx;
+  SHA256_Final(digest, realCtx);
+}
+
+bool eicOpsRandom(uint8_t* buf, size_t numBytes) {
+  optional<vector<uint8_t>> bytes =
+      ::android::hardware::identity::support::getRandom(numBytes);
+  if (!bytes.has_value()) {
+    return false;
+  }
+  memcpy(buf, bytes.value().data(), numBytes);
+  return true;
+}
+
+bool eicOpsEncryptAes128Gcm(
+    const uint8_t* key,    // Must be 16 bytes
+    const uint8_t* nonce,  // Must be 12 bytes
+    const uint8_t* data,   // May be NULL if size is 0
+    size_t dataSize,
+    const uint8_t* additionalAuthenticationData,  // May be NULL if size is 0
+    size_t additionalAuthenticationDataSize, uint8_t* encryptedData) {
+  vector<uint8_t> cppKey;
+  cppKey.resize(16);
+  memcpy(cppKey.data(), key, 16);
+
+  vector<uint8_t> cppData;
+  cppData.resize(dataSize);
+  if (dataSize > 0) {
+    memcpy(cppData.data(), data, dataSize);
+  }
+
+  vector<uint8_t> cppAAD;
+  cppAAD.resize(additionalAuthenticationDataSize);
+  if (additionalAuthenticationDataSize > 0) {
+    memcpy(cppAAD.data(), additionalAuthenticationData,
+           additionalAuthenticationDataSize);
+  }
+
+  vector<uint8_t> cppNonce;
+  cppNonce.resize(12);
+  memcpy(cppNonce.data(), nonce, 12);
+
+  optional<vector<uint8_t>> cppEncryptedData =
+      android::hardware::identity::support::encryptAes128Gcm(cppKey, cppNonce,
+                                                             cppData, cppAAD);
+  if (!cppEncryptedData.has_value()) {
+    return false;
+  }
+
+  memcpy(encryptedData, cppEncryptedData.value().data(),
+         cppEncryptedData.value().size());
+  return true;
+}
+
+// Decrypts |encryptedData| using |key| and |additionalAuthenticatedData|,
+// returns resulting plaintext in |data| must be of size |encryptedDataSize|
+// - 28.
+//
+// The format of |encryptedData| must be as specified in the
+// encryptAes128Gcm() function.
+bool eicOpsDecryptAes128Gcm(const uint8_t* key,  // Must be 16 bytes
+                            const uint8_t* encryptedData,
+                            size_t encryptedDataSize,
+                            const uint8_t* additionalAuthenticationData,
+                            size_t additionalAuthenticationDataSize,
+                            uint8_t* data) {
+  vector<uint8_t> keyVec;
+  keyVec.resize(16);
+  memcpy(keyVec.data(), key, 16);
+
+  vector<uint8_t> encryptedDataVec;
+  encryptedDataVec.resize(encryptedDataSize);
+  if (encryptedDataSize > 0) {
+    memcpy(encryptedDataVec.data(), encryptedData, encryptedDataSize);
+  }
+
+  vector<uint8_t> aadVec;
+  aadVec.resize(additionalAuthenticationDataSize);
+  if (additionalAuthenticationDataSize > 0) {
+    memcpy(aadVec.data(), additionalAuthenticationData,
+           additionalAuthenticationDataSize);
+  }
+
+  optional<vector<uint8_t>> decryptedDataVec =
+      android::hardware::identity::support::decryptAes128Gcm(
+          keyVec, encryptedDataVec, aadVec);
+  if (!decryptedDataVec.has_value()) {
+    eicDebug("Error decrypting data");
+    return false;
+  }
+  if (decryptedDataVec.value().size() != encryptedDataSize - 28) {
+    eicDebug("Decrypted data is size %zd, expected %zd",
+             decryptedDataVec.value().size(), encryptedDataSize - 28);
+    return false;
+  }
+
+  if (decryptedDataVec.value().size() > 0) {
+    memcpy(data, decryptedDataVec.value().data(),
+           decryptedDataVec.value().size());
+  }
+  return true;
+}
+
+bool eicOpsCreateEcKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
+                       uint8_t publicKey[EIC_P256_PUB_KEY_SIZE]) {
+  optional<vector<uint8_t>> keyPair =
+      android::hardware::identity::support::createEcKeyPair();
+  if (!keyPair) {
+    eicDebug("Error creating EC keypair");
+    return false;
+  }
+  optional<vector<uint8_t>> privKey =
+      android::hardware::identity::support::ecKeyPairGetPrivateKey(
+          keyPair.value());
+  if (!privKey) {
+    eicDebug("Error extracting private key");
+    return false;
+  }
+  if (privKey.value().size() != EIC_P256_PRIV_KEY_SIZE) {
+    eicDebug("Private key is %zd bytes, expected %zd", privKey.value().size(),
+             (size_t)EIC_P256_PRIV_KEY_SIZE);
+    return false;
+  }
+
+  optional<vector<uint8_t>> pubKey =
+      android::hardware::identity::support::ecKeyPairGetPublicKey(
+          keyPair.value());
+  if (!pubKey) {
+    eicDebug("Error extracting public key");
+    return false;
+  }
+  // ecKeyPairGetPublicKey() returns 0x04 | x | y, we don't want the leading
+  // 0x04.
+  if (pubKey.value().size() != EIC_P256_PUB_KEY_SIZE + 1) {
+    eicDebug("Public key is %zd bytes long, expected %zd",
+             pubKey.value().size(), (size_t)EIC_P256_PRIV_KEY_SIZE + 1);
+    return false;
+  }
+
+  memcpy(privateKey, privKey.value().data(), EIC_P256_PRIV_KEY_SIZE);
+  memcpy(publicKey, pubKey.value().data() + 1, EIC_P256_PUB_KEY_SIZE);
+
+  return true;
+}
+
+bool eicOpsCreateCredentialKey(uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
+                               const uint8_t* challenge, size_t challengeSize,
+                               const uint8_t* applicationId,
+                               size_t applicationIdSize, bool testCredential,
+                               uint8_t* cert, size_t* certSize) {
+  vector<uint8_t> challengeVec(challengeSize);
+  memcpy(challengeVec.data(), challenge, challengeSize);
+
+  vector<uint8_t> applicationIdVec(applicationIdSize);
+  memcpy(applicationIdVec.data(), applicationId, applicationIdSize);
+
+  optional<std::pair<vector<uint8_t>, vector<vector<uint8_t>>>> ret =
+      android::hardware::identity::support::createEcKeyPairAndAttestation(
+          challengeVec, applicationIdVec, testCredential);
+  if (!ret) {
+    eicDebug("Error generating CredentialKey and attestation");
+    return false;
+  }
+
+  // Extract certificate chain.
+  vector<uint8_t> flatChain =
+      android::hardware::identity::support::certificateChainJoin(
+          ret.value().second);
+  if (*certSize < flatChain.size()) {
+    eicDebug("Buffer for certificate is only %zd bytes long, need %zd bytes",
+             *certSize, flatChain.size());
+    return false;
+  }
+  memcpy(cert, flatChain.data(), flatChain.size());
+  *certSize = flatChain.size();
+
+  // Extract private key.
+  optional<vector<uint8_t>> privKey =
+      android::hardware::identity::support::ecKeyPairGetPrivateKey(
+          ret.value().first);
+  if (!privKey) {
+    eicDebug("Error extracting private key");
+    return false;
+  }
+  if (privKey.value().size() != EIC_P256_PRIV_KEY_SIZE) {
+    eicDebug("Private key is %zd bytes, expected %zd", privKey.value().size(),
+             (size_t)EIC_P256_PRIV_KEY_SIZE);
+    return false;
+  }
+
+  memcpy(privateKey, privKey.value().data(), EIC_P256_PRIV_KEY_SIZE);
+
+  return true;
+}
+
+bool eicOpsSignEcKey(const uint8_t publicKey[EIC_P256_PUB_KEY_SIZE],
+                     const uint8_t signingKey[EIC_P256_PRIV_KEY_SIZE],
+                     unsigned int serial, const char* issuerName,
+                     const char* subjectName, time_t validityNotBefore,
+                     time_t validityNotAfter, const uint8_t* proofOfBinding,
+                     size_t proofOfBindingSize, uint8_t* cert,
+                     size_t* certSize) {  // inout
+  vector<uint8_t> signingKeyVec(EIC_P256_PRIV_KEY_SIZE);
+  memcpy(signingKeyVec.data(), signingKey, EIC_P256_PRIV_KEY_SIZE);
+
+  vector<uint8_t> pubKeyVec(EIC_P256_PUB_KEY_SIZE + 1);
+  pubKeyVec[0] = 0x04;
+  memcpy(pubKeyVec.data() + 1, publicKey, EIC_P256_PUB_KEY_SIZE);
+
+  string serialDecimal = android::base::StringPrintf("%d", serial);
+
+  map<string, vector<uint8_t>> extensions;
+  if (proofOfBinding != nullptr) {
+    vector<uint8_t> proofOfBindingVec(proofOfBinding,
+                                      proofOfBinding + proofOfBindingSize);
+    extensions["1.3.6.1.4.1.11129.2.1.26"] = proofOfBindingVec;
+  }
+
+  optional<vector<uint8_t>> certVec =
+      android::hardware::identity::support::ecPublicKeyGenerateCertificate(
+          pubKeyVec, signingKeyVec, serialDecimal, issuerName, subjectName,
+          validityNotBefore, validityNotAfter, extensions);
+  if (!certVec) {
+    eicDebug("Error generating certificate");
+    return false;
+  }
+
+  if (*certSize < certVec.value().size()) {
+    eicDebug("Buffer for certificate is only %zd bytes long, need %zd bytes",
+             *certSize, certVec.value().size());
+    return false;
+  }
+  memcpy(cert, certVec.value().data(), certVec.value().size());
+  *certSize = certVec.value().size();
+
+  return true;
+}
+
+bool eicOpsEcDsa(const uint8_t privateKey[EIC_P256_PRIV_KEY_SIZE],
+                 const uint8_t digestOfData[EIC_SHA256_DIGEST_SIZE],
+                 uint8_t signature[EIC_ECDSA_P256_SIGNATURE_SIZE]) {
+  vector<uint8_t> privKeyVec(EIC_P256_PRIV_KEY_SIZE);
+  memcpy(privKeyVec.data(), privateKey, EIC_P256_PRIV_KEY_SIZE);
+
+  vector<uint8_t> digestVec(EIC_SHA256_DIGEST_SIZE);
+  memcpy(digestVec.data(), digestOfData, EIC_SHA256_DIGEST_SIZE);
+
+  optional<vector<uint8_t>> derSignature =
+      android::hardware::identity::support::signEcDsaDigest(privKeyVec,
+                                                            digestVec);
+  if (!derSignature) {
+    eicDebug("Error signing data");
+    return false;
+  }
+
+  ECDSA_SIG* sig;
+  const unsigned char* p = derSignature.value().data();
+  sig = d2i_ECDSA_SIG(nullptr, &p, derSignature.value().size());
+  if (sig == nullptr) {
+    eicDebug("Error decoding DER signature");
+    return false;
+  }
+
+  if (BN_bn2binpad(sig->r, signature, 32) != 32) {
+    eicDebug("Error encoding r");
+    return false;
+  }
+  if (BN_bn2binpad(sig->s, signature + 32, 32) != 32) {
+    eicDebug("Error encoding s");
+    return false;
+  }
+
+  return true;
+}
+
+static const uint8_t hbkTest[16] = {0};
+static const uint8_t hbkReal[16] = {0, 1, 2,  3,  4,  5,  6,  7,
+                                    8, 9, 10, 11, 12, 13, 14, 15};
+
+const uint8_t* eicOpsGetHardwareBoundKey(bool testCredential) {
+  if (testCredential) {
+    return hbkTest;
+  }
+  return hbkReal;
+}
+
+bool eicOpsValidateAuthToken(uint64_t /* challenge */,
+                             uint64_t /* secureUserId */,
+                             uint64_t /* authenticatorId */,
+                             int /* hardwareAuthenticatorType */,
+                             uint64_t /* timeStamp */, const uint8_t* /* mac */,
+                             size_t /* macSize */,
+                             uint64_t /* verificationTokenChallenge */,
+                             uint64_t /* verificationTokenTimeStamp */,
+                             int /* verificationTokenSecurityLevel */,
+                             const uint8_t* /* verificationTokenMac */,
+                             size_t /* verificationTokenMacSize */) {
+  // Here's where we would validate the passed-in |authToken| to assure
+  // ourselves that it comes from the e.g. biometric hardware and wasn't made up
+  // by an attacker.
+  //
+  // However this involves calculating the MAC which requires access to the to
+  // a pre-shared key which we don't have...
+  //
+  return true;
+}
+
+bool eicOpsX509GetPublicKey(const uint8_t* x509Cert, size_t x509CertSize,
+                            uint8_t* publicKey, size_t* publicKeySize) {
+  vector<uint8_t> chain;
+  chain.resize(x509CertSize);
+  memcpy(chain.data(), x509Cert, x509CertSize);
+  optional<vector<uint8_t>> res =
+      android::hardware::identity::support::certificateChainGetTopMostKey(
+          chain);
+  if (!res) {
+    return false;
+  }
+  if (res.value().size() > *publicKeySize) {
+    eicDebug("Public key size is %zd but buffer only has room for %zd bytes",
+             res.value().size(), *publicKeySize);
+    return false;
+  }
+  *publicKeySize = res.value().size();
+  memcpy(publicKey, res.value().data(), *publicKeySize);
+  eicDebug("Extracted %zd bytes public key from %zd bytes X.509 cert",
+           *publicKeySize, x509CertSize);
+  return true;
+}
+
+bool eicOpsX509CertSignedByPublicKey(const uint8_t* x509Cert,
+                                     size_t x509CertSize,
+                                     const uint8_t* publicKey,
+                                     size_t publicKeySize) {
+  vector<uint8_t> certVec(x509Cert, x509Cert + x509CertSize);
+  vector<uint8_t> publicKeyVec(publicKey, publicKey + publicKeySize);
+  return android::hardware::identity::support::certificateSignedByPublicKey(
+      certVec, publicKeyVec);
+}
+
+bool eicOpsEcDsaVerifyWithPublicKey(const uint8_t* digest, size_t digestSize,
+                                    const uint8_t* signature,
+                                    size_t signatureSize,
+                                    const uint8_t* publicKey,
+                                    size_t publicKeySize) {
+  vector<uint8_t> digestVec(digest, digest + digestSize);
+  vector<uint8_t> signatureVec(signature, signature + signatureSize);
+  vector<uint8_t> publicKeyVec(publicKey, publicKey + publicKeySize);
+
+  vector<uint8_t> derSignature;
+  if (!android::hardware::identity::support::ecdsaSignatureCoseToDer(
+          signatureVec, derSignature)) {
+    LOG(ERROR) << "Error convering signature to DER format";
+    return false;
+  }
+
+  if (!android::hardware::identity::support::checkEcDsaSignature(
+          digestVec, derSignature, publicKeyVec)) {
+    LOG(ERROR) << "Signature check failed";
+    return false;
+  }
+  return true;
+}
+
+bool eicOpsEcdh(const uint8_t publicKey[EIC_P256_PUB_KEY_SIZE],
+                const uint8_t privateKey[EIC_P256_PUB_KEY_SIZE],
+                uint8_t sharedSecret[EIC_P256_COORDINATE_SIZE]) {
+  vector<uint8_t> pubKeyVec(EIC_P256_PUB_KEY_SIZE + 1);
+  pubKeyVec[0] = 0x04;
+  memcpy(pubKeyVec.data() + 1, publicKey, EIC_P256_PUB_KEY_SIZE);
+
+  vector<uint8_t> privKeyVec(EIC_P256_PRIV_KEY_SIZE);
+  memcpy(privKeyVec.data(), privateKey, EIC_P256_PRIV_KEY_SIZE);
+
+  optional<vector<uint8_t>> shared =
+      android::hardware::identity::support::ecdh(pubKeyVec, privKeyVec);
+  if (!shared) {
+    LOG(ERROR) << "Error performing ECDH";
+    return false;
+  }
+  if (shared.value().size() != EIC_P256_COORDINATE_SIZE) {
+    LOG(ERROR) << "Unexpected size of shared secret " << shared.value().size()
+               << " expected " << EIC_P256_COORDINATE_SIZE << " bytes";
+    return false;
+  }
+  memcpy(sharedSecret, shared.value().data(), EIC_P256_COORDINATE_SIZE);
+  return true;
+}
+
+bool eicOpsHkdf(const uint8_t* sharedSecret, size_t sharedSecretSize,
+                const uint8_t* salt, size_t saltSize, const uint8_t* info,
+                size_t infoSize, uint8_t* output, size_t outputSize) {
+  vector<uint8_t> sharedSecretVec(sharedSecretSize);
+  memcpy(sharedSecretVec.data(), sharedSecret, sharedSecretSize);
+  vector<uint8_t> saltVec(saltSize);
+  memcpy(saltVec.data(), salt, saltSize);
+  vector<uint8_t> infoVec(infoSize);
+  memcpy(infoVec.data(), info, infoSize);
+
+  optional<vector<uint8_t>> result = android::hardware::identity::support::hkdf(
+      sharedSecretVec, saltVec, infoVec, outputSize);
+  if (!result) {
+    LOG(ERROR) << "Error performing HKDF";
+    return false;
+  }
+  if (result.value().size() != outputSize) {
+    LOG(ERROR) << "Unexpected size of HKDF " << result.value().size()
+               << " expected " << outputSize;
+    return false;
+  }
+  memcpy(output, result.value().data(), outputSize);
+  return true;
+}
+
+#ifdef EIC_DEBUG
+
+void eicPrint(const char* format, ...) {
+  va_list args;
+  va_start(args, format);
+  vfprintf(stderr, format, args);
+  va_end(args);
+}
+
+void eicHexdump(const char* message, const uint8_t* data, size_t dataSize) {
+  vector<uint8_t> dataVec(dataSize);
+  memcpy(dataVec.data(), data, dataSize);
+  android::hardware::identity::support::hexdump(message, dataVec);
+}
+
+void eicCborPrettyPrint(const uint8_t* cborData, size_t cborDataSize,
+                        size_t maxBStrSize) {
+  vector<uint8_t> cborDataVec(cborDataSize);
+  memcpy(cborDataVec.data(), cborData, cborDataSize);
+  string str = android::hardware::identity::support::cborPrettyPrint(
+      cborDataVec, maxBStrSize, {});
+  fprintf(stderr, "%s\n", str.c_str());
+}
+
+#endif  // EIC_DEBUG
diff --git a/guest/hals/identity/libeic/EicOpsImpl.h b/guest/hals/identity/libeic/EicOpsImpl.h
new file mode 100644
index 0000000..333cdce
--- /dev/null
+++ b/guest/hals/identity/libeic/EicOpsImpl.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_EIC_OPS_IMPL_H
+#define ANDROID_HARDWARE_IDENTITY_EIC_OPS_IMPL_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+// Add whatever includes are needed for definitions below.
+//
+
+#include <openssl/hmac.h>
+#include <openssl/sha.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Set the following defines to match the implementation of the supplied
+// eicOps*() operations. See EicOps.h for details.
+//
+
+#define EIC_SHA256_CONTEXT_SIZE sizeof(SHA256_CTX)
+
+#define EIC_HMAC_SHA256_CONTEXT_SIZE sizeof(HMAC_CTX)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // ANDROID_HARDWARE_IDENTITY_EMBEDDED_IC_H
diff --git a/guest/hals/identity/libeic/EicPresentation.c b/guest/hals/identity/libeic/EicPresentation.c
new file mode 100644
index 0000000..520c2c2
--- /dev/null
+++ b/guest/hals/identity/libeic/EicPresentation.c
@@ -0,0 +1,916 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "EicPresentation.h"
+#include "EicCommon.h"
+
+#include <inttypes.h>
+
+bool eicPresentationInit(EicPresentation* ctx, bool testCredential,
+                         const char* docType, size_t docTypeLength,
+                         const uint8_t* encryptedCredentialKeys,
+                         size_t encryptedCredentialKeysSize) {
+  uint8_t credentialKeys[EIC_CREDENTIAL_KEYS_CBOR_SIZE_FEATURE_VERSION_202101];
+  bool expectPopSha256 = false;
+
+  // For feature version 202009 it's 52 bytes long and for feature version
+  // 202101 it's 86 bytes (the additional data is the ProofOfProvisioning
+  // SHA-256). We need to support loading all feature versions.
+  //
+  if (encryptedCredentialKeysSize ==
+      EIC_CREDENTIAL_KEYS_CBOR_SIZE_FEATURE_VERSION_202009 + 28) {
+    /* do nothing */
+  } else if (encryptedCredentialKeysSize ==
+             EIC_CREDENTIAL_KEYS_CBOR_SIZE_FEATURE_VERSION_202101 + 28) {
+    expectPopSha256 = true;
+  } else {
+    eicDebug("Unexpected size %zd for encryptedCredentialKeys",
+             encryptedCredentialKeysSize);
+    return false;
+  }
+
+  eicMemSet(ctx, '\0', sizeof(EicPresentation));
+
+  if (!eicOpsDecryptAes128Gcm(
+          eicOpsGetHardwareBoundKey(testCredential), encryptedCredentialKeys,
+          encryptedCredentialKeysSize,
+          // DocType is the additionalAuthenticatedData
+          (const uint8_t*)docType, docTypeLength, credentialKeys)) {
+    eicDebug("Error decrypting CredentialKeys");
+    return false;
+  }
+
+  // It's supposed to look like this;
+  //
+  // Feature version 202009:
+  //
+  //         CredentialKeys = [
+  //              bstr,   ; storageKey, a 128-bit AES key
+  //              bstr,   ; credentialPrivKey, the private key for credentialKey
+  //         ]
+  //
+  // Feature version 202101:
+  //
+  //         CredentialKeys = [
+  //              bstr,   ; storageKey, a 128-bit AES key
+  //              bstr,   ; credentialPrivKey, the private key for credentialKey
+  //              bstr    ; proofOfProvisioning SHA-256
+  //         ]
+  //
+  // where storageKey is 16 bytes, credentialPrivateKey is 32 bytes, and
+  // proofOfProvisioning SHA-256 is 32 bytes.
+  //
+  if (credentialKeys[0] !=
+          (expectPopSha256 ? 0x83 : 0x82) ||  // array of two or three elements
+      credentialKeys[1] != 0x50 ||            // 16-byte bstr
+      credentialKeys[18] != 0x58 ||
+      credentialKeys[19] != 0x20) {  // 32-byte bstr
+    eicDebug("Invalid CBOR for CredentialKeys");
+    return false;
+  }
+  if (expectPopSha256) {
+    if (credentialKeys[52] != 0x58 ||
+        credentialKeys[53] != 0x20) {  // 32-byte bstr
+      eicDebug("Invalid CBOR for CredentialKeys");
+      return false;
+    }
+  }
+  eicMemCpy(ctx->storageKey, credentialKeys + 2, EIC_AES_128_KEY_SIZE);
+  eicMemCpy(ctx->credentialPrivateKey, credentialKeys + 20,
+            EIC_P256_PRIV_KEY_SIZE);
+  ctx->testCredential = testCredential;
+  if (expectPopSha256) {
+    eicMemCpy(ctx->proofOfProvisioningSha256, credentialKeys + 54,
+              EIC_SHA256_DIGEST_SIZE);
+  }
+  return true;
+}
+
+bool eicPresentationGenerateSigningKeyPair(EicPresentation* ctx,
+                                           const char* docType,
+                                           size_t docTypeLength, time_t now,
+                                           uint8_t* publicKeyCert,
+                                           size_t* publicKeyCertSize,
+                                           uint8_t signingKeyBlob[60]) {
+  uint8_t signingKeyPriv[EIC_P256_PRIV_KEY_SIZE];
+  uint8_t signingKeyPub[EIC_P256_PUB_KEY_SIZE];
+  uint8_t cborBuf[64];
+
+  // Generate the ProofOfBinding CBOR to include in the X.509 certificate in
+  // IdentityCredentialAuthenticationKeyExtension CBOR. This CBOR is defined
+  // by the following CDDL
+  //
+  //   ProofOfBinding = [
+  //     "ProofOfBinding",
+  //     bstr,                  // Contains the SHA-256 of ProofOfProvisioning
+  //   ]
+  //
+  // This array may grow in the future if other information needs to be
+  // conveyed.
+  //
+  // The bytes of ProofOfBinding is is represented as an OCTET_STRING
+  // and stored at OID 1.3.6.1.4.1.11129.2.1.26.
+  //
+
+  EicCbor cbor;
+  eicCborInit(&cbor, cborBuf, sizeof cborBuf);
+  eicCborAppendArray(&cbor, 2);
+  eicCborAppendStringZ(&cbor, "ProofOfBinding");
+  eicCborAppendByteString(&cbor, ctx->proofOfProvisioningSha256,
+                          EIC_SHA256_DIGEST_SIZE);
+  if (cbor.size > sizeof(cborBuf)) {
+    eicDebug("Exceeded buffer size");
+    return false;
+  }
+  const uint8_t* proofOfBinding = cborBuf;
+  size_t proofOfBindingSize = cbor.size;
+
+  if (!eicOpsCreateEcKey(signingKeyPriv, signingKeyPub)) {
+    eicDebug("Error creating signing key");
+    return false;
+  }
+
+  const int secondsInOneYear = 365 * 24 * 60 * 60;
+  time_t validityNotBefore = now;
+  time_t validityNotAfter = now + secondsInOneYear;  // One year from now.
+  if (!eicOpsSignEcKey(
+          signingKeyPub, ctx->credentialPrivateKey, 1,
+          "Android Identity Credential Key",                 // issuer CN
+          "Android Identity Credential Authentication Key",  // subject CN
+          validityNotBefore, validityNotAfter, proofOfBinding,
+          proofOfBindingSize, publicKeyCert, publicKeyCertSize)) {
+    eicDebug("Error creating certificate for signing key");
+    return false;
+  }
+
+  uint8_t nonce[12];
+  if (!eicOpsRandom(nonce, 12)) {
+    eicDebug("Error getting random");
+    return false;
+  }
+  if (!eicOpsEncryptAes128Gcm(
+          ctx->storageKey, nonce, signingKeyPriv, sizeof(signingKeyPriv),
+          // DocType is the additionalAuthenticatedData
+          (const uint8_t*)docType, docTypeLength, signingKeyBlob)) {
+    eicDebug("Error encrypting signing key");
+    return false;
+  }
+
+  return true;
+}
+
+bool eicPresentationCreateEphemeralKeyPair(
+    EicPresentation* ctx, uint8_t ephemeralPrivateKey[EIC_P256_PRIV_KEY_SIZE]) {
+  uint8_t ephemeralPublicKey[EIC_P256_PUB_KEY_SIZE];
+  if (!eicOpsCreateEcKey(ctx->ephemeralPrivateKey, ephemeralPublicKey)) {
+    eicDebug("Error creating ephemeral key");
+    return false;
+  }
+  eicMemCpy(ephemeralPrivateKey, ctx->ephemeralPrivateKey,
+            EIC_P256_PRIV_KEY_SIZE);
+  return true;
+}
+
+bool eicPresentationCreateAuthChallenge(EicPresentation* ctx,
+                                        uint64_t* authChallenge) {
+  do {
+    if (!eicOpsRandom((uint8_t*)&(ctx->authChallenge), sizeof(uint64_t))) {
+      eicDebug("Failed generating random challenge");
+      return false;
+    }
+  } while (ctx->authChallenge == 0);
+  eicDebug("Created auth challenge %" PRIu64, ctx->authChallenge);
+  *authChallenge = ctx->authChallenge;
+  return true;
+}
+
+// From "COSE Algorithms" registry
+//
+#define COSE_ALG_ECDSA_256 -7
+
+bool eicPresentationValidateRequestMessage(
+    EicPresentation* ctx, const uint8_t* sessionTranscript,
+    size_t sessionTranscriptSize, const uint8_t* requestMessage,
+    size_t requestMessageSize, int coseSignAlg,
+    const uint8_t* readerSignatureOfToBeSigned,
+    size_t readerSignatureOfToBeSignedSize) {
+  if (ctx->readerPublicKeySize == 0) {
+    eicDebug("No public key for reader");
+    return false;
+  }
+
+  // Right now we only support ECDSA with SHA-256 (e.g. ES256).
+  //
+  if (coseSignAlg != COSE_ALG_ECDSA_256) {
+    eicDebug(
+        "COSE Signature algorithm for reader signature is %d, "
+        "only ECDSA with SHA-256 is supported right now",
+        coseSignAlg);
+    return false;
+  }
+
+  // What we're going to verify is the COSE ToBeSigned structure which
+  // looks like the following:
+  //
+  //   Sig_structure = [
+  //     context : "Signature" / "Signature1" / "CounterSignature",
+  //     body_protected : empty_or_serialized_map,
+  //     ? sign_protected : empty_or_serialized_map,
+  //     external_aad : bstr,
+  //     payload : bstr
+  //   ]
+  //
+  // So we're going to build that CBOR...
+  //
+  EicCbor cbor;
+  eicCborInit(&cbor, NULL, 0);
+  eicCborAppendArray(&cbor, 4);
+  eicCborAppendStringZ(&cbor, "Signature1");
+
+  // The COSE Encoded protected headers is just a single field with
+  // COSE_LABEL_ALG (1) -> coseSignAlg (e.g. -7). For simplicitly we just
+  // hard-code the CBOR encoding:
+  static const uint8_t coseEncodedProtectedHeaders[] = {0xa1, 0x01, 0x26};
+  eicCborAppendByteString(&cbor, coseEncodedProtectedHeaders,
+                          sizeof(coseEncodedProtectedHeaders));
+
+  // External_aad is the empty bstr
+  static const uint8_t externalAad[0] = {};
+  eicCborAppendByteString(&cbor, externalAad, sizeof(externalAad));
+
+  // For the payload, the _encoded_ form follows here. We handle this by simply
+  // opening a bstr, and then writing the CBOR. This requires us to know the
+  // size of said bstr, ahead of time... the CBOR to be written is
+  //
+  //   ReaderAuthentication = [
+  //      "ReaderAuthentication",
+  //      SessionTranscript,
+  //      ItemsRequestBytes
+  //   ]
+  //
+  //   ItemsRequestBytes = #6.24(bstr .cbor ItemsRequest)
+  //
+  //   ReaderAuthenticationBytes = #6.24(bstr .cbor ReaderAuthentication)
+  //
+  // which is easily calculated below
+  //
+  size_t calculatedSize = 0;
+  calculatedSize += 1;  // Array of size 3
+  calculatedSize += 1;  // "ReaderAuthentication" less than 24 bytes
+  calculatedSize +=
+      sizeof("ReaderAuthentication") - 1;   // Don't include trailing NUL
+  calculatedSize += sessionTranscriptSize;  // Already CBOR encoded
+  calculatedSize += 2;  // Semantic tag EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR (24)
+  calculatedSize += 1 + eicCborAdditionalLengthBytesFor(requestMessageSize);
+  calculatedSize += requestMessageSize;
+
+  // However note that we're authenticating ReaderAuthenticationBytes which
+  // is a tagged bstr of the bytes of ReaderAuthentication. So need to get
+  // that in front.
+  size_t rabCalculatedSize = 0;
+  rabCalculatedSize +=
+      2;  // Semantic tag EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR (24)
+  rabCalculatedSize += 1 + eicCborAdditionalLengthBytesFor(calculatedSize);
+  rabCalculatedSize += calculatedSize;
+
+  // Begin the bytestring for ReaderAuthenticationBytes;
+  eicCborBegin(&cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING, rabCalculatedSize);
+
+  eicCborAppendSemantic(&cbor, EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR);
+
+  // Begins the bytestring for ReaderAuthentication;
+  eicCborBegin(&cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING, calculatedSize);
+
+  // And now that we know the size, let's fill it in...
+  //
+  size_t payloadOffset = cbor.size;
+  eicCborBegin(&cbor, EIC_CBOR_MAJOR_TYPE_ARRAY, 3);
+  eicCborAppendStringZ(&cbor, "ReaderAuthentication");
+  eicCborAppend(&cbor, sessionTranscript, sessionTranscriptSize);
+  eicCborAppendSemantic(&cbor, EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR);
+  eicCborBegin(&cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING, requestMessageSize);
+  eicCborAppend(&cbor, requestMessage, requestMessageSize);
+
+  if (cbor.size != payloadOffset + calculatedSize) {
+    eicDebug("CBOR size is %zd but we expected %zd", cbor.size,
+             payloadOffset + calculatedSize);
+    return false;
+  }
+  uint8_t toBeSignedDigest[EIC_SHA256_DIGEST_SIZE];
+  eicCborFinal(&cbor, toBeSignedDigest);
+
+  if (!eicOpsEcDsaVerifyWithPublicKey(
+          toBeSignedDigest, EIC_SHA256_DIGEST_SIZE, readerSignatureOfToBeSigned,
+          readerSignatureOfToBeSignedSize, ctx->readerPublicKey,
+          ctx->readerPublicKeySize)) {
+    eicDebug("Request message is not signed by public key");
+    return false;
+  }
+  ctx->requestMessageValidated = true;
+  return true;
+}
+
+// Validates the next certificate in the reader certificate chain.
+bool eicPresentationPushReaderCert(EicPresentation* ctx,
+                                   const uint8_t* certX509,
+                                   size_t certX509Size) {
+  // If we had a previous certificate, use its public key to validate this
+  // certificate.
+  if (ctx->readerPublicKeySize > 0) {
+    if (!eicOpsX509CertSignedByPublicKey(certX509, certX509Size,
+                                         ctx->readerPublicKey,
+                                         ctx->readerPublicKeySize)) {
+      eicDebug(
+          "Certificate is not signed by public key in the previous "
+          "certificate");
+      return false;
+    }
+  }
+
+  // Store the key of this certificate, this is used to validate the next
+  // certificate and also ACPs with certificates that use the same public key...
+  ctx->readerPublicKeySize = EIC_PRESENTATION_MAX_READER_PUBLIC_KEY_SIZE;
+  if (!eicOpsX509GetPublicKey(certX509, certX509Size, ctx->readerPublicKey,
+                              &ctx->readerPublicKeySize)) {
+    eicDebug("Error extracting public key from certificate");
+    return false;
+  }
+  if (ctx->readerPublicKeySize == 0) {
+    eicDebug("Zero-length public key in certificate");
+    return false;
+  }
+
+  return true;
+}
+
+bool eicPresentationSetAuthToken(
+    EicPresentation* ctx, uint64_t challenge, uint64_t secureUserId,
+    uint64_t authenticatorId, int hardwareAuthenticatorType, uint64_t timeStamp,
+    const uint8_t* mac, size_t macSize, uint64_t verificationTokenChallenge,
+    uint64_t verificationTokenTimestamp, int verificationTokenSecurityLevel,
+    const uint8_t* verificationTokenMac, size_t verificationTokenMacSize) {
+  // It doesn't make sense to accept any tokens if
+  // eicPresentationCreateAuthChallenge() was never called.
+  if (ctx->authChallenge == 0) {
+    eicDebug(
+        "Trying validate tokens when no auth-challenge was previously "
+        "generated");
+    return false;
+  }
+  // At least the verification-token must have the same challenge as what was
+  // generated.
+  if (verificationTokenChallenge != ctx->authChallenge) {
+    eicDebug(
+        "Challenge in verification token does not match the challenge "
+        "previously generated");
+    return false;
+  }
+  if (!eicOpsValidateAuthToken(
+          challenge, secureUserId, authenticatorId, hardwareAuthenticatorType,
+          timeStamp, mac, macSize, verificationTokenChallenge,
+          verificationTokenTimestamp, verificationTokenSecurityLevel,
+          verificationTokenMac, verificationTokenMacSize)) {
+    return false;
+  }
+  ctx->authTokenChallenge = challenge;
+  ctx->authTokenSecureUserId = secureUserId;
+  ctx->authTokenTimestamp = timeStamp;
+  ctx->verificationTokenTimestamp = verificationTokenTimestamp;
+  return true;
+}
+
+static bool checkUserAuth(EicPresentation* ctx, bool userAuthenticationRequired,
+                          int timeoutMillis, uint64_t secureUserId) {
+  if (!userAuthenticationRequired) {
+    return true;
+  }
+
+  if (secureUserId != ctx->authTokenSecureUserId) {
+    eicDebug("secureUserId in profile differs from userId in authToken");
+    return false;
+  }
+
+  // Only ACP with auth-on-every-presentation - those with timeout == 0 - need
+  // the challenge to match...
+  if (timeoutMillis == 0) {
+    if (ctx->authTokenChallenge != ctx->authChallenge) {
+      eicDebug("Challenge in authToken (%" PRIu64
+               ") doesn't match the challenge "
+               "that was created (%" PRIu64 ") for this session",
+               ctx->authTokenChallenge, ctx->authChallenge);
+      return false;
+    }
+  }
+
+  uint64_t now = ctx->verificationTokenTimestamp;
+  if (ctx->authTokenTimestamp > now) {
+    eicDebug("Timestamp in authToken is in the future");
+    return false;
+  }
+
+  if (timeoutMillis > 0) {
+    if (now > ctx->authTokenTimestamp + timeoutMillis) {
+      eicDebug("Deadline for authToken is in the past");
+      return false;
+    }
+  }
+
+  return true;
+}
+
+static bool checkReaderAuth(EicPresentation* ctx,
+                            const uint8_t* readerCertificate,
+                            size_t readerCertificateSize) {
+  uint8_t publicKey[EIC_PRESENTATION_MAX_READER_PUBLIC_KEY_SIZE];
+  size_t publicKeySize;
+
+  if (readerCertificateSize == 0) {
+    return true;
+  }
+
+  // Remember in this case certificate equality is done by comparing public
+  // keys, not bitwise comparison of the certificates.
+  //
+  publicKeySize = EIC_PRESENTATION_MAX_READER_PUBLIC_KEY_SIZE;
+  if (!eicOpsX509GetPublicKey(readerCertificate, readerCertificateSize,
+                              publicKey, &publicKeySize)) {
+    eicDebug("Error extracting public key from certificate");
+    return false;
+  }
+  if (publicKeySize == 0) {
+    eicDebug("Zero-length public key in certificate");
+    return false;
+  }
+
+  if ((ctx->readerPublicKeySize != publicKeySize) ||
+      (eicCryptoMemCmp(ctx->readerPublicKey, publicKey,
+                       ctx->readerPublicKeySize) != 0)) {
+    return false;
+  }
+  return true;
+}
+
+// Note: This function returns false _only_ if an error occurred check for
+// access, _not_ whether access is granted. Whether access is granted is
+// returned in |accessGranted|.
+//
+bool eicPresentationValidateAccessControlProfile(
+    EicPresentation* ctx, int id, const uint8_t* readerCertificate,
+    size_t readerCertificateSize, bool userAuthenticationRequired,
+    int timeoutMillis, uint64_t secureUserId, const uint8_t mac[28],
+    bool* accessGranted, uint8_t* scratchSpace, size_t scratchSpaceSize) {
+  *accessGranted = false;
+  if (id < 0 || id >= 32) {
+    eicDebug("id value of %d is out of allowed range [0, 32[", id);
+    return false;
+  }
+
+  // Validate the MAC
+  EicCbor cborBuilder;
+  eicCborInit(&cborBuilder, scratchSpace, scratchSpaceSize);
+  if (!eicCborCalcAccessControl(
+          &cborBuilder, id, readerCertificate, readerCertificateSize,
+          userAuthenticationRequired, timeoutMillis, secureUserId)) {
+    return false;
+  }
+  if (!eicOpsDecryptAes128Gcm(ctx->storageKey, mac, 28, cborBuilder.buffer,
+                              cborBuilder.size, NULL)) {
+    eicDebug("MAC for AccessControlProfile doesn't match");
+    return false;
+  }
+
+  bool passedUserAuth = checkUserAuth(ctx, userAuthenticationRequired,
+                                      timeoutMillis, secureUserId);
+  bool passedReaderAuth =
+      checkReaderAuth(ctx, readerCertificate, readerCertificateSize);
+
+  ctx->accessControlProfileMaskValidated |= (1U << id);
+  if (readerCertificateSize > 0) {
+    ctx->accessControlProfileMaskUsesReaderAuth |= (1U << id);
+  }
+  if (!passedReaderAuth) {
+    ctx->accessControlProfileMaskFailedReaderAuth |= (1U << id);
+  }
+  if (!passedUserAuth) {
+    ctx->accessControlProfileMaskFailedUserAuth |= (1U << id);
+  }
+
+  if (passedUserAuth && passedReaderAuth) {
+    *accessGranted = true;
+    eicDebug("Access granted for id %d", id);
+  }
+  return true;
+}
+
+bool eicPresentationCalcMacKey(
+    EicPresentation* ctx, const uint8_t* sessionTranscript,
+    size_t sessionTranscriptSize,
+    const uint8_t readerEphemeralPublicKey[EIC_P256_PUB_KEY_SIZE],
+    const uint8_t signingKeyBlob[60], const char* docType, size_t docTypeLength,
+    unsigned int numNamespacesWithValues, size_t expectedDeviceNamespacesSize) {
+  uint8_t signingKeyPriv[EIC_P256_PRIV_KEY_SIZE];
+  if (!eicOpsDecryptAes128Gcm(ctx->storageKey, signingKeyBlob, 60,
+                              (const uint8_t*)docType, docTypeLength,
+                              signingKeyPriv)) {
+    eicDebug("Error decrypting signingKeyBlob");
+    return false;
+  }
+
+  uint8_t sharedSecret[EIC_P256_COORDINATE_SIZE];
+  if (!eicOpsEcdh(readerEphemeralPublicKey, signingKeyPriv, sharedSecret)) {
+    eicDebug("ECDH failed");
+    return false;
+  }
+
+  EicCbor cbor;
+  eicCborInit(&cbor, NULL, 0);
+  eicCborAppendSemantic(&cbor, EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR);
+  eicCborAppendByteString(&cbor, sessionTranscript, sessionTranscriptSize);
+  uint8_t salt[EIC_SHA256_DIGEST_SIZE];
+  eicCborFinal(&cbor, salt);
+
+  const uint8_t info[7] = {'E', 'M', 'a', 'c', 'K', 'e', 'y'};
+  uint8_t derivedKey[32];
+  if (!eicOpsHkdf(sharedSecret, EIC_P256_COORDINATE_SIZE, salt, sizeof(salt),
+                  info, sizeof(info), derivedKey, sizeof(derivedKey))) {
+    eicDebug("HKDF failed");
+    return false;
+  }
+
+  eicCborInitHmacSha256(&ctx->cbor, NULL, 0, derivedKey, sizeof(derivedKey));
+  ctx->buildCbor = true;
+
+  // What we're going to calculate the HMAC-SHA256 is the COSE ToBeMaced
+  // structure which looks like the following:
+  //
+  // MAC_structure = [
+  //   context : "MAC" / "MAC0",
+  //   protected : empty_or_serialized_map,
+  //   external_aad : bstr,
+  //   payload : bstr
+  // ]
+  //
+  eicCborAppendArray(&ctx->cbor, 4);
+  eicCborAppendStringZ(&ctx->cbor, "MAC0");
+
+  // The COSE Encoded protected headers is just a single field with
+  // COSE_LABEL_ALG (1) -> COSE_ALG_HMAC_256_256 (5). For simplicitly we just
+  // hard-code the CBOR encoding:
+  static const uint8_t coseEncodedProtectedHeaders[] = {0xa1, 0x01, 0x05};
+  eicCborAppendByteString(&ctx->cbor, coseEncodedProtectedHeaders,
+                          sizeof(coseEncodedProtectedHeaders));
+
+  // We currently don't support Externally Supplied Data (RFC 8152 section 4.3)
+  // so external_aad is the empty bstr
+  static const uint8_t externalAad[0] = {};
+  eicCborAppendByteString(&ctx->cbor, externalAad, sizeof(externalAad));
+
+  // For the payload, the _encoded_ form follows here. We handle this by simply
+  // opening a bstr, and then writing the CBOR. This requires us to know the
+  // size of said bstr, ahead of time... the CBOR to be written is
+  //
+  //   DeviceAuthentication = [
+  //      "DeviceAuthentication",
+  //      SessionTranscript,
+  //      DocType,                ; DocType as used in Documents structure in
+  //      OfflineResponse DeviceNameSpacesBytes
+  //   ]
+  //
+  //   DeviceNameSpacesBytes = #6.24(bstr .cbor DeviceNameSpaces)
+  //
+  //   DeviceAuthenticationBytes = #6.24(bstr .cbor DeviceAuthentication)
+  //
+  // which is easily calculated below
+  //
+  size_t calculatedSize = 0;
+  calculatedSize += 1;  // Array of size 4
+  calculatedSize += 1;  // "DeviceAuthentication" less than 24 bytes
+  calculatedSize +=
+      sizeof("DeviceAuthentication") - 1;   // Don't include trailing NUL
+  calculatedSize += sessionTranscriptSize;  // Already CBOR encoded
+  calculatedSize +=
+      1 + eicCborAdditionalLengthBytesFor(docTypeLength) + docTypeLength;
+  calculatedSize += 2;  // Semantic tag EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR (24)
+  calculatedSize +=
+      1 + eicCborAdditionalLengthBytesFor(expectedDeviceNamespacesSize);
+  calculatedSize += expectedDeviceNamespacesSize;
+
+  // However note that we're authenticating DeviceAuthenticationBytes which
+  // is a tagged bstr of the bytes of DeviceAuthentication. So need to get
+  // that in front.
+  size_t dabCalculatedSize = 0;
+  dabCalculatedSize +=
+      2;  // Semantic tag EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR (24)
+  dabCalculatedSize += 1 + eicCborAdditionalLengthBytesFor(calculatedSize);
+  dabCalculatedSize += calculatedSize;
+
+  // Begin the bytestring for DeviceAuthenticationBytes;
+  eicCborBegin(&ctx->cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING, dabCalculatedSize);
+
+  eicCborAppendSemantic(&ctx->cbor, EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR);
+
+  // Begins the bytestring for DeviceAuthentication;
+  eicCborBegin(&ctx->cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING, calculatedSize);
+
+  eicCborAppendArray(&ctx->cbor, 4);
+  eicCborAppendStringZ(&ctx->cbor, "DeviceAuthentication");
+  eicCborAppend(&ctx->cbor, sessionTranscript, sessionTranscriptSize);
+  eicCborAppendString(&ctx->cbor, docType, docTypeLength);
+
+  // For the payload, the _encoded_ form follows here. We handle this by simply
+  // opening a bstr, and then writing the CBOR. This requires us to know the
+  // size of said bstr, ahead of time.
+  eicCborAppendSemantic(&ctx->cbor, EIC_CBOR_SEMANTIC_TAG_ENCODED_CBOR);
+  eicCborBegin(&ctx->cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING,
+               expectedDeviceNamespacesSize);
+  ctx->expectedCborSizeAtEnd = expectedDeviceNamespacesSize + ctx->cbor.size;
+
+  eicCborAppendMap(&ctx->cbor, numNamespacesWithValues);
+  return true;
+}
+
+bool eicPresentationStartRetrieveEntries(EicPresentation* ctx) {
+  // HAL may use this object multiple times to retrieve data so need to reset
+  // various state objects here.
+  ctx->requestMessageValidated = false;
+  ctx->buildCbor = false;
+  ctx->accessControlProfileMaskValidated = 0;
+  ctx->accessControlProfileMaskUsesReaderAuth = 0;
+  ctx->accessControlProfileMaskFailedReaderAuth = 0;
+  ctx->accessControlProfileMaskFailedUserAuth = 0;
+  ctx->readerPublicKeySize = 0;
+  return true;
+}
+
+EicAccessCheckResult eicPresentationStartRetrieveEntryValue(
+    EicPresentation* ctx, const char* nameSpace, size_t nameSpaceLength,
+    const char* name, size_t nameLength, unsigned int newNamespaceNumEntries,
+    int32_t entrySize, const uint8_t* accessControlProfileIds,
+    size_t numAccessControlProfileIds, uint8_t* scratchSpace,
+    size_t scratchSpaceSize) {
+  (void)entrySize;
+  uint8_t* additionalDataCbor = scratchSpace;
+  size_t additionalDataCborBufferSize = scratchSpaceSize;
+  size_t additionalDataCborSize;
+
+  if (newNamespaceNumEntries > 0) {
+    eicCborAppendString(&ctx->cbor, nameSpace, nameSpaceLength);
+    eicCborAppendMap(&ctx->cbor, newNamespaceNumEntries);
+  }
+
+  // We'll need to calc and store a digest of additionalData to check that it's
+  // the same additionalData being passed in for every
+  // eicPresentationRetrieveEntryValue() call...
+  //
+  ctx->accessCheckOk = false;
+  if (!eicCborCalcEntryAdditionalData(
+          accessControlProfileIds, numAccessControlProfileIds, nameSpace,
+          nameSpaceLength, name, nameLength, additionalDataCbor,
+          additionalDataCborBufferSize, &additionalDataCborSize,
+          ctx->additionalDataSha256)) {
+    return EIC_ACCESS_CHECK_RESULT_FAILED;
+  }
+
+  if (numAccessControlProfileIds == 0) {
+    return EIC_ACCESS_CHECK_RESULT_NO_ACCESS_CONTROL_PROFILES;
+  }
+
+  // Access is granted if at least one of the profiles grants access.
+  //
+  // If an item is configured without any profiles, access is denied.
+  //
+  EicAccessCheckResult result = EIC_ACCESS_CHECK_RESULT_FAILED;
+  for (size_t n = 0; n < numAccessControlProfileIds; n++) {
+    int id = accessControlProfileIds[n];
+    uint32_t idBitMask = (1 << id);
+
+    // If the access control profile wasn't validated, this is an error and we
+    // fail immediately.
+    bool validated =
+        ((ctx->accessControlProfileMaskValidated & idBitMask) != 0);
+    if (!validated) {
+      eicDebug("No ACP for profile id %d", id);
+      return EIC_ACCESS_CHECK_RESULT_FAILED;
+    }
+
+    // Otherwise, we _did_ validate the profile. If none of the checks
+    // failed, we're done
+    bool failedUserAuth =
+        ((ctx->accessControlProfileMaskFailedUserAuth & idBitMask) != 0);
+    bool failedReaderAuth =
+        ((ctx->accessControlProfileMaskFailedReaderAuth & idBitMask) != 0);
+    if (!failedUserAuth && !failedReaderAuth) {
+      result = EIC_ACCESS_CHECK_RESULT_OK;
+      break;
+    }
+    // One of the checks failed, convey which one
+    if (failedUserAuth) {
+      result = EIC_ACCESS_CHECK_RESULT_USER_AUTHENTICATION_FAILED;
+    } else {
+      result = EIC_ACCESS_CHECK_RESULT_READER_AUTHENTICATION_FAILED;
+    }
+  }
+  eicDebug("Result %d for name %s", result, name);
+
+  if (result == EIC_ACCESS_CHECK_RESULT_OK) {
+    eicCborAppendString(&ctx->cbor, name, nameLength);
+    ctx->accessCheckOk = true;
+  }
+  return result;
+}
+
+// Note: |content| must be big enough to hold |encryptedContentSize| - 28 bytes.
+bool eicPresentationRetrieveEntryValue(
+    EicPresentation* ctx, const uint8_t* encryptedContent,
+    size_t encryptedContentSize, uint8_t* content, const char* nameSpace,
+    size_t nameSpaceLength, const char* name, size_t nameLength,
+    const uint8_t* accessControlProfileIds, size_t numAccessControlProfileIds,
+    uint8_t* scratchSpace, size_t scratchSpaceSize) {
+  uint8_t* additionalDataCbor = scratchSpace;
+  size_t additionalDataCborBufferSize = scratchSpaceSize;
+  size_t additionalDataCborSize;
+
+  uint8_t calculatedSha256[EIC_SHA256_DIGEST_SIZE];
+  if (!eicCborCalcEntryAdditionalData(
+          accessControlProfileIds, numAccessControlProfileIds, nameSpace,
+          nameSpaceLength, name, nameLength, additionalDataCbor,
+          additionalDataCborBufferSize, &additionalDataCborSize,
+          calculatedSha256)) {
+    return false;
+  }
+
+  if (eicCryptoMemCmp(calculatedSha256, ctx->additionalDataSha256,
+                      EIC_SHA256_DIGEST_SIZE) != 0) {
+    eicDebug("SHA-256 mismatch of additionalData");
+    return false;
+  }
+  if (!ctx->accessCheckOk) {
+    eicDebug("Attempting to retrieve a value for which access is not granted");
+    return false;
+  }
+
+  if (!eicOpsDecryptAes128Gcm(ctx->storageKey, encryptedContent,
+                              encryptedContentSize, additionalDataCbor,
+                              additionalDataCborSize, content)) {
+    eicDebug("Error decrypting content");
+    return false;
+  }
+
+  eicCborAppend(&ctx->cbor, content, encryptedContentSize - 28);
+
+  return true;
+}
+
+bool eicPresentationFinishRetrieval(EicPresentation* ctx,
+                                    uint8_t* digestToBeMaced,
+                                    size_t* digestToBeMacedSize) {
+  if (!ctx->buildCbor) {
+    *digestToBeMacedSize = 0;
+    return true;
+  }
+  if (*digestToBeMacedSize != 32) {
+    return false;
+  }
+
+  // This verifies that the correct expectedDeviceNamespacesSize value was
+  // passed in at eicPresentationCalcMacKey() time.
+  if (ctx->cbor.size != ctx->expectedCborSizeAtEnd) {
+    eicDebug("CBOR size is %zd, was expecting %zd", ctx->cbor.size,
+             ctx->expectedCborSizeAtEnd);
+    return false;
+  }
+  eicCborFinal(&ctx->cbor, digestToBeMaced);
+  return true;
+}
+
+bool eicPresentationDeleteCredential(
+    EicPresentation* ctx, const char* docType, size_t docTypeLength,
+    const uint8_t* challenge, size_t challengeSize, bool includeChallenge,
+    size_t proofOfDeletionCborSize,
+    uint8_t signatureOfToBeSigned[EIC_ECDSA_P256_SIGNATURE_SIZE]) {
+  EicCbor cbor;
+
+  eicCborInit(&cbor, NULL, 0);
+
+  // What we're going to sign is the COSE ToBeSigned structure which
+  // looks like the following:
+  //
+  // Sig_structure = [
+  //   context : "Signature" / "Signature1" / "CounterSignature",
+  //   body_protected : empty_or_serialized_map,
+  //   ? sign_protected : empty_or_serialized_map,
+  //   external_aad : bstr,
+  //   payload : bstr
+  //  ]
+  //
+  eicCborAppendArray(&cbor, 4);
+  eicCborAppendStringZ(&cbor, "Signature1");
+
+  // The COSE Encoded protected headers is just a single field with
+  // COSE_LABEL_ALG (1) -> COSE_ALG_ECSDA_256 (-7). For simplicitly we just
+  // hard-code the CBOR encoding:
+  static const uint8_t coseEncodedProtectedHeaders[] = {0xa1, 0x01, 0x26};
+  eicCborAppendByteString(&cbor, coseEncodedProtectedHeaders,
+                          sizeof(coseEncodedProtectedHeaders));
+
+  // We currently don't support Externally Supplied Data (RFC 8152 section 4.3)
+  // so external_aad is the empty bstr
+  static const uint8_t externalAad[0] = {};
+  eicCborAppendByteString(&cbor, externalAad, sizeof(externalAad));
+
+  // For the payload, the _encoded_ form follows here. We handle this by simply
+  // opening a bstr, and then writing the CBOR. This requires us to know the
+  // size of said bstr, ahead of time.
+  eicCborBegin(&cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING, proofOfDeletionCborSize);
+
+  // Finally, the CBOR that we're actually signing.
+  eicCborAppendArray(&cbor, includeChallenge ? 4 : 3);
+  eicCborAppendStringZ(&cbor, "ProofOfDeletion");
+  eicCborAppendString(&cbor, docType, docTypeLength);
+  if (includeChallenge) {
+    eicCborAppendByteString(&cbor, challenge, challengeSize);
+  }
+  eicCborAppendBool(&cbor, ctx->testCredential);
+
+  uint8_t cborSha256[EIC_SHA256_DIGEST_SIZE];
+  eicCborFinal(&cbor, cborSha256);
+  if (!eicOpsEcDsa(ctx->credentialPrivateKey, cborSha256,
+                   signatureOfToBeSigned)) {
+    eicDebug("Error signing proofOfDeletion");
+    return false;
+  }
+
+  return true;
+}
+
+bool eicPresentationProveOwnership(
+    EicPresentation* ctx, const char* docType, size_t docTypeLength,
+    bool testCredential, const uint8_t* challenge, size_t challengeSize,
+    size_t proofOfOwnershipCborSize,
+    uint8_t signatureOfToBeSigned[EIC_ECDSA_P256_SIGNATURE_SIZE]) {
+  EicCbor cbor;
+
+  eicCborInit(&cbor, NULL, 0);
+
+  // What we're going to sign is the COSE ToBeSigned structure which
+  // looks like the following:
+  //
+  // Sig_structure = [
+  //   context : "Signature" / "Signature1" / "CounterSignature",
+  //   body_protected : empty_or_serialized_map,
+  //   ? sign_protected : empty_or_serialized_map,
+  //   external_aad : bstr,
+  //   payload : bstr
+  //  ]
+  //
+  eicCborAppendArray(&cbor, 4);
+  eicCborAppendStringZ(&cbor, "Signature1");
+
+  // The COSE Encoded protected headers is just a single field with
+  // COSE_LABEL_ALG (1) -> COSE_ALG_ECSDA_256 (-7). For simplicitly we just
+  // hard-code the CBOR encoding:
+  static const uint8_t coseEncodedProtectedHeaders[] = {0xa1, 0x01, 0x26};
+  eicCborAppendByteString(&cbor, coseEncodedProtectedHeaders,
+                          sizeof(coseEncodedProtectedHeaders));
+
+  // We currently don't support Externally Supplied Data (RFC 8152 section 4.3)
+  // so external_aad is the empty bstr
+  static const uint8_t externalAad[0] = {};
+  eicCborAppendByteString(&cbor, externalAad, sizeof(externalAad));
+
+  // For the payload, the _encoded_ form follows here. We handle this by simply
+  // opening a bstr, and then writing the CBOR. This requires us to know the
+  // size of said bstr, ahead of time.
+  eicCborBegin(&cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING,
+               proofOfOwnershipCborSize);
+
+  // Finally, the CBOR that we're actually signing.
+  eicCborAppendArray(&cbor, 4);
+  eicCborAppendStringZ(&cbor, "ProofOfOwnership");
+  eicCborAppendString(&cbor, docType, docTypeLength);
+  eicCborAppendByteString(&cbor, challenge, challengeSize);
+  eicCborAppendBool(&cbor, testCredential);
+
+  uint8_t cborSha256[EIC_SHA256_DIGEST_SIZE];
+  eicCborFinal(&cbor, cborSha256);
+  if (!eicOpsEcDsa(ctx->credentialPrivateKey, cborSha256,
+                   signatureOfToBeSigned)) {
+    eicDebug("Error signing proofOfDeletion");
+    return false;
+  }
+
+  return true;
+}
diff --git a/guest/hals/identity/libeic/EicPresentation.h b/guest/hals/identity/libeic/EicPresentation.h
new file mode 100644
index 0000000..72d8401
--- /dev/null
+++ b/guest/hals/identity/libeic/EicPresentation.h
@@ -0,0 +1,264 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_EIC_PRESENTATION_H
+#define ANDROID_HARDWARE_IDENTITY_EIC_PRESENTATION_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EicCbor.h"
+
+// The maximum size we support for public keys in reader certificates.
+#define EIC_PRESENTATION_MAX_READER_PUBLIC_KEY_SIZE 65
+
+typedef struct {
+  int featureLevel;
+
+  uint8_t storageKey[EIC_AES_128_KEY_SIZE];
+  uint8_t credentialPrivateKey[EIC_P256_PRIV_KEY_SIZE];
+
+  uint8_t ephemeralPrivateKey[EIC_P256_PRIV_KEY_SIZE];
+
+  // The challenge generated with eicPresentationCreateAuthChallenge()
+  uint64_t authChallenge;
+
+  // Set by eicPresentationSetAuthToken() and contains the fields
+  // from the passed in authToken and verificationToken.
+  //
+  uint64_t authTokenChallenge;
+  uint64_t authTokenSecureUserId;
+  uint64_t authTokenTimestamp;
+  uint64_t verificationTokenTimestamp;
+
+  // The public key for the reader.
+  //
+  // (During the process of pushing reader certificates, this is also used to
+  // store the public key of the previously pushed certificate.)
+  //
+  uint8_t readerPublicKey[EIC_PRESENTATION_MAX_READER_PUBLIC_KEY_SIZE];
+  size_t readerPublicKeySize;
+
+  // This is set to true only if eicPresentationValidateRequestMessage()
+  // successfully validated the requestMessage.
+  //
+  // Why even record this? Because there's no requirement the HAL actually calls
+  // that function and we validate ACPs before it's called... so it's possible
+  // that a compromised HAL could trick us into marking ACPs as authorized while
+  // they in fact aren't.
+  bool requestMessageValidated;
+  bool buildCbor;
+
+  // Set to true initialized as a test credential.
+  bool testCredential;
+
+  // Set to true if the evaluation of access control checks in
+  // eicPresentationStartRetrieveEntryValue() resulted
+  // EIC_ACCESS_CHECK_RESULT_OK
+  bool accessCheckOk;
+
+  // These are bitmasks indicating which of the possible 32 access control
+  // profiles are authorized. They are built up by
+  // eicPresentationValidateAccessControlProfile().
+  //
+  uint32_t
+      accessControlProfileMaskValidated;  // True if the profile was validated.
+  uint32_t accessControlProfileMaskUsesReaderAuth;  // True if the ACP is using
+                                                    // reader auth
+  uint32_t
+      accessControlProfileMaskFailedReaderAuth;  // True if failed reader auth
+  uint32_t accessControlProfileMaskFailedUserAuth;  // True if failed user auth
+
+  // SHA-256 for AdditionalData, updated for each entry.
+  uint8_t additionalDataSha256[EIC_SHA256_DIGEST_SIZE];
+
+  // SHA-256 of ProofOfProvisioning. Set to NUL-bytes or initialized from
+  // CredentialKeys data if credential was created with feature version 202101
+  // or later.
+  uint8_t proofOfProvisioningSha256[EIC_SHA256_DIGEST_SIZE];
+
+  size_t expectedCborSizeAtEnd;
+  EicCbor cbor;
+} EicPresentation;
+
+bool eicPresentationInit(EicPresentation* ctx, bool testCredential,
+                         const char* docType, size_t docTypeLength,
+                         const uint8_t* encryptedCredentialKeys,
+                         size_t encryptedCredentialKeysSize);
+
+bool eicPresentationGenerateSigningKeyPair(EicPresentation* ctx,
+                                           const char* docType,
+                                           size_t docTypeLength, time_t now,
+                                           uint8_t* publicKeyCert,
+                                           size_t* publicKeyCertSize,
+                                           uint8_t signingKeyBlob[60]);
+
+// Create an ephemeral key-pair.
+//
+// The private key is stored in |ctx->ephemeralPrivateKey| and also returned in
+// |ephemeralPrivateKey|.
+//
+bool eicPresentationCreateEphemeralKeyPair(
+    EicPresentation* ctx, uint8_t ephemeralPrivateKey[EIC_P256_PRIV_KEY_SIZE]);
+
+// Returns a non-zero challenge in |authChallenge|.
+bool eicPresentationCreateAuthChallenge(EicPresentation* ctx,
+                                        uint64_t* authChallenge);
+
+// Starts retrieving entries.
+//
+bool eicPresentationStartRetrieveEntries(EicPresentation* ctx);
+
+// Sets the auth-token.
+bool eicPresentationSetAuthToken(
+    EicPresentation* ctx, uint64_t challenge, uint64_t secureUserId,
+    uint64_t authenticatorId, int hardwareAuthenticatorType, uint64_t timeStamp,
+    const uint8_t* mac, size_t macSize, uint64_t verificationTokenChallenge,
+    uint64_t verificationTokenTimeStamp, int verificationTokenSecurityLevel,
+    const uint8_t* verificationTokenMac, size_t verificationTokenMacSize);
+
+// Function to push certificates in the reader certificate chain.
+//
+// This should start with the root certificate (e.g. the last in the chain) and
+// continue up the chain, ending with the certificate for the reader.
+//
+// Calls to this function should be interleaved with calls to the
+// eicPresentationValidateAccessControlProfile() function, see below.
+//
+bool eicPresentationPushReaderCert(EicPresentation* ctx,
+                                   const uint8_t* certX509,
+                                   size_t certX509Size);
+
+// Checks an access control profile.
+//
+// Returns false if an error occurred while checking the profile (e.g. MAC
+// doesn't check out).
+//
+// Returns in |accessGranted| whether access is granted.
+//
+// If |readerCertificate| is non-empty and the public key of one of those
+// certificates appear in the chain presented by the reader, this function must
+// be called after pushing that certificate using
+// eicPresentationPushReaderCert().
+//
+// The scratchSpace should be set to a buffer at least 512 bytes. It's done
+// this way to avoid allocating stack space.
+//
+bool eicPresentationValidateAccessControlProfile(
+    EicPresentation* ctx, int id, const uint8_t* readerCertificate,
+    size_t readerCertificateSize, bool userAuthenticationRequired,
+    int timeoutMillis, uint64_t secureUserId, const uint8_t mac[28],
+    bool* accessGranted, uint8_t* scratchSpace, size_t scratchSpaceSize);
+
+// Validates that the given requestMessage is signed by the public key in the
+// certificate last set with eicPresentationPushReaderCert().
+//
+// The format of the signature is the same encoding as the 'signature' field of
+// COSE_Sign1 - that is, it's the R and S integers both with the same length as
+// the key-size.
+//
+// Must be called after eicPresentationPushReaderCert() have been used to push
+// the final certificate. Which is the certificate of the reader itself.
+//
+bool eicPresentationValidateRequestMessage(
+    EicPresentation* ctx, const uint8_t* sessionTranscript,
+    size_t sessionTranscriptSize, const uint8_t* requestMessage,
+    size_t requestMessageSize, int coseSignAlg,
+    const uint8_t* readerSignatureOfToBeSigned,
+    size_t readerSignatureOfToBeSignedSize);
+
+typedef enum {
+  // Returned if access is granted.
+  EIC_ACCESS_CHECK_RESULT_OK,
+
+  // Returned if an error occurred checking for access.
+  EIC_ACCESS_CHECK_RESULT_FAILED,
+
+  // Returned if access was denied because item is configured without any
+  // access control profiles.
+  EIC_ACCESS_CHECK_RESULT_NO_ACCESS_CONTROL_PROFILES,
+
+  // Returned if access was denied because of user authentication.
+  EIC_ACCESS_CHECK_RESULT_USER_AUTHENTICATION_FAILED,
+
+  // Returned if access was denied because of reader authentication.
+  EIC_ACCESS_CHECK_RESULT_READER_AUTHENTICATION_FAILED,
+} EicAccessCheckResult;
+
+// Passes enough information to calculate the MACing key
+//
+bool eicPresentationCalcMacKey(
+    EicPresentation* ctx, const uint8_t* sessionTranscript,
+    size_t sessionTranscriptSize,
+    const uint8_t readerEphemeralPublicKey[EIC_P256_PUB_KEY_SIZE],
+    const uint8_t signingKeyBlob[60], const char* docType, size_t docTypeLength,
+    unsigned int numNamespacesWithValues, size_t expectedDeviceNamespacesSize);
+
+// The scratchSpace should be set to a buffer at least 512 bytes (ideally 1024
+// bytes, the bigger the better). It's done this way to avoid allocating stack
+// space.
+//
+EicAccessCheckResult eicPresentationStartRetrieveEntryValue(
+    EicPresentation* ctx, const char* nameSpace, size_t nameSpaceLength,
+    const char* name, size_t nameLength, unsigned int newNamespaceNumEntries,
+    int32_t entrySize, const uint8_t* accessControlProfileIds,
+    size_t numAccessControlProfileIds, uint8_t* scratchSpace,
+    size_t scratchSpaceSize);
+
+// Note: |content| must be big enough to hold |encryptedContentSize| - 28 bytes.
+//
+// The scratchSpace should be set to a buffer at least 512 bytes. It's done this
+// way to avoid allocating stack space.
+//
+bool eicPresentationRetrieveEntryValue(
+    EicPresentation* ctx, const uint8_t* encryptedContent,
+    size_t encryptedContentSize, uint8_t* content, const char* nameSpace,
+    size_t nameSpaceLength, const char* name, size_t nameLength,
+    const uint8_t* accessControlProfileIds, size_t numAccessControlProfileIds,
+    uint8_t* scratchSpace, size_t scratchSpaceSize);
+
+// Returns the HMAC-SHA256 of |ToBeMaced| as per RFC 8051 "6.3. How to Compute
+// and Verify a MAC".
+bool eicPresentationFinishRetrieval(EicPresentation* ctx,
+                                    uint8_t* digestToBeMaced,
+                                    size_t* digestToBeMacedSize);
+
+// The data returned in |signatureOfToBeSigned| contains the ECDSA signature of
+// the ToBeSigned CBOR from RFC 8051 "4.4. Signing and Verification Process"
+// where content is set to the ProofOfDeletion CBOR.
+//
+bool eicPresentationDeleteCredential(
+    EicPresentation* ctx, const char* docType, size_t docTypeLength,
+    const uint8_t* challenge, size_t challengeSize, bool includeChallenge,
+    size_t proofOfDeletionCborSize,
+    uint8_t signatureOfToBeSigned[EIC_ECDSA_P256_SIGNATURE_SIZE]);
+
+// The data returned in |signatureOfToBeSigned| contains the ECDSA signature of
+// the ToBeSigned CBOR from RFC 8051 "4.4. Signing and Verification Process"
+// where content is set to the ProofOfOwnership CBOR.
+//
+bool eicPresentationProveOwnership(
+    EicPresentation* ctx, const char* docType, size_t docTypeLength,
+    bool testCredential, const uint8_t* challenge, size_t challengeSize,
+    size_t proofOfOwnershipCborSize,
+    uint8_t signatureOfToBeSigned[EIC_ECDSA_P256_SIGNATURE_SIZE]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // ANDROID_HARDWARE_IDENTITY_EIC_PRESENTATION_H
diff --git a/guest/hals/identity/libeic/EicProvisioning.c b/guest/hals/identity/libeic/EicProvisioning.c
new file mode 100644
index 0000000..1f691cd
--- /dev/null
+++ b/guest/hals/identity/libeic/EicProvisioning.c
@@ -0,0 +1,403 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "EicProvisioning.h"
+#include "EicCommon.h"
+
+bool eicProvisioningInit(EicProvisioning* ctx, bool testCredential) {
+  eicMemSet(ctx, '\0', sizeof(EicProvisioning));
+  ctx->testCredential = testCredential;
+  if (!eicOpsRandom(ctx->storageKey, EIC_AES_128_KEY_SIZE)) {
+    return false;
+  }
+
+  return true;
+}
+
+bool eicProvisioningInitForUpdate(EicProvisioning* ctx, bool testCredential,
+                                  const char* docType, size_t docTypeLength,
+                                  const uint8_t* encryptedCredentialKeys,
+                                  size_t encryptedCredentialKeysSize) {
+  uint8_t credentialKeys[EIC_CREDENTIAL_KEYS_CBOR_SIZE_FEATURE_VERSION_202101];
+
+  // For feature version 202009 it's 52 bytes long and for feature version
+  // 202101 it's 86 bytes (the additional data is the ProofOfProvisioning
+  // SHA-256). We need to support loading all feature versions.
+  //
+  bool expectPopSha256 = false;
+  if (encryptedCredentialKeysSize ==
+      EIC_CREDENTIAL_KEYS_CBOR_SIZE_FEATURE_VERSION_202009 + 28) {
+    /* do nothing */
+  } else if (encryptedCredentialKeysSize ==
+             EIC_CREDENTIAL_KEYS_CBOR_SIZE_FEATURE_VERSION_202101 + 28) {
+    expectPopSha256 = true;
+  } else {
+    eicDebug("Unexpected size %zd for encryptedCredentialKeys",
+             encryptedCredentialKeysSize);
+    return false;
+  }
+
+  eicMemSet(ctx, '\0', sizeof(EicProvisioning));
+  ctx->testCredential = testCredential;
+
+  if (!eicOpsDecryptAes128Gcm(
+          eicOpsGetHardwareBoundKey(testCredential), encryptedCredentialKeys,
+          encryptedCredentialKeysSize,
+          // DocType is the additionalAuthenticatedData
+          (const uint8_t*)docType, docTypeLength, credentialKeys)) {
+    eicDebug("Error decrypting CredentialKeys");
+    return false;
+  }
+
+  // It's supposed to look like this;
+  //
+  // Feature version 202009:
+  //
+  //         CredentialKeys = [
+  //              bstr,   ; storageKey, a 128-bit AES key
+  //              bstr,   ; credentialPrivKey, the private key for credentialKey
+  //         ]
+  //
+  // Feature version 202101:
+  //
+  //         CredentialKeys = [
+  //              bstr,   ; storageKey, a 128-bit AES key
+  //              bstr,   ; credentialPrivKey, the private key for credentialKey
+  //              bstr    ; proofOfProvisioning SHA-256
+  //         ]
+  //
+  // where storageKey is 16 bytes, credentialPrivateKey is 32 bytes, and
+  // proofOfProvisioning SHA-256 is 32 bytes.
+  //
+  if (credentialKeys[0] !=
+          (expectPopSha256 ? 0x83 : 0x82) ||  // array of two or three elements
+      credentialKeys[1] != 0x50 ||            // 16-byte bstr
+      credentialKeys[18] != 0x58 ||
+      credentialKeys[19] != 0x20) {  // 32-byte bstr
+    eicDebug("Invalid CBOR for CredentialKeys");
+    return false;
+  }
+  if (expectPopSha256) {
+    if (credentialKeys[52] != 0x58 ||
+        credentialKeys[53] != 0x20) {  // 32-byte bstr
+      eicDebug("Invalid CBOR for CredentialKeys");
+      return false;
+    }
+  }
+  eicMemCpy(ctx->storageKey, credentialKeys + 2, EIC_AES_128_KEY_SIZE);
+  eicMemCpy(ctx->credentialPrivateKey, credentialKeys + 20,
+            EIC_P256_PRIV_KEY_SIZE);
+  // Note: We don't care about the previous ProofOfProvisioning SHA-256
+  ctx->isUpdate = true;
+  return true;
+}
+
+bool eicProvisioningCreateCredentialKey(
+    EicProvisioning* ctx, const uint8_t* challenge, size_t challengeSize,
+    const uint8_t* applicationId, size_t applicationIdSize,
+    uint8_t* publicKeyCert, size_t* publicKeyCertSize) {
+  if (ctx->isUpdate) {
+    eicDebug("Cannot create CredentialKey on update");
+    return false;
+  }
+
+  if (!eicOpsCreateCredentialKey(ctx->credentialPrivateKey, challenge,
+                                 challengeSize, applicationId,
+                                 applicationIdSize, ctx->testCredential,
+                                 publicKeyCert, publicKeyCertSize)) {
+    return false;
+  }
+  return true;
+}
+
+bool eicProvisioningStartPersonalization(
+    EicProvisioning* ctx, int accessControlProfileCount, const int* entryCounts,
+    size_t numEntryCounts, const char* docType, size_t docTypeLength,
+    size_t expectedProofOfProvisioningSize) {
+  if (numEntryCounts >= EIC_MAX_NUM_NAMESPACES) {
+    return false;
+  }
+  if (accessControlProfileCount >= EIC_MAX_NUM_ACCESS_CONTROL_PROFILE_IDS) {
+    return false;
+  }
+
+  ctx->numEntryCounts = numEntryCounts;
+  if (numEntryCounts > EIC_MAX_NUM_NAMESPACES) {
+    return false;
+  }
+  for (size_t n = 0; n < numEntryCounts; n++) {
+    if (entryCounts[n] >= 256) {
+      return false;
+    }
+    ctx->entryCounts[n] = entryCounts[n];
+  }
+  ctx->curNamespace = -1;
+  ctx->curNamespaceNumProcessed = 0;
+
+  eicCborInit(&ctx->cbor, NULL, 0);
+
+  // What we're going to sign is the COSE ToBeSigned structure which
+  // looks like the following:
+  //
+  // Sig_structure = [
+  //   context : "Signature" / "Signature1" / "CounterSignature",
+  //   body_protected : empty_or_serialized_map,
+  //   ? sign_protected : empty_or_serialized_map,
+  //   external_aad : bstr,
+  //   payload : bstr
+  //  ]
+  //
+  eicCborAppendArray(&ctx->cbor, 4);
+  eicCborAppendStringZ(&ctx->cbor, "Signature1");
+
+  // The COSE Encoded protected headers is just a single field with
+  // COSE_LABEL_ALG (1) -> COSE_ALG_ECSDA_256 (-7). For simplicitly we just
+  // hard-code the CBOR encoding:
+  static const uint8_t coseEncodedProtectedHeaders[] = {0xa1, 0x01, 0x26};
+  eicCborAppendByteString(&ctx->cbor, coseEncodedProtectedHeaders,
+                          sizeof(coseEncodedProtectedHeaders));
+
+  // We currently don't support Externally Supplied Data (RFC 8152 section 4.3)
+  // so external_aad is the empty bstr
+  static const uint8_t externalAad[0] = {};
+  eicCborAppendByteString(&ctx->cbor, externalAad, sizeof(externalAad));
+
+  // For the payload, the _encoded_ form follows here. We handle this by simply
+  // opening a bstr, and then writing the CBOR. This requires us to know the
+  // size of said bstr, ahead of time.
+  eicCborBegin(&ctx->cbor, EIC_CBOR_MAJOR_TYPE_BYTE_STRING,
+               expectedProofOfProvisioningSize);
+  ctx->expectedCborSizeAtEnd = expectedProofOfProvisioningSize + ctx->cbor.size;
+
+  eicOpsSha256Init(&ctx->proofOfProvisioningDigester);
+  eicCborEnableSecondaryDigesterSha256(&ctx->cbor,
+                                       &ctx->proofOfProvisioningDigester);
+
+  eicCborAppendArray(&ctx->cbor, 5);
+  eicCborAppendStringZ(&ctx->cbor, "ProofOfProvisioning");
+  eicCborAppendString(&ctx->cbor, docType, docTypeLength);
+
+  eicCborAppendArray(&ctx->cbor, accessControlProfileCount);
+
+  return true;
+}
+
+bool eicProvisioningAddAccessControlProfile(
+    EicProvisioning* ctx, int id, const uint8_t* readerCertificate,
+    size_t readerCertificateSize, bool userAuthenticationRequired,
+    uint64_t timeoutMillis, uint64_t secureUserId, uint8_t outMac[28],
+    uint8_t* scratchSpace, size_t scratchSpaceSize) {
+  EicCbor cborBuilder;
+  eicCborInit(&cborBuilder, scratchSpace, scratchSpaceSize);
+
+  if (!eicCborCalcAccessControl(
+          &cborBuilder, id, readerCertificate, readerCertificateSize,
+          userAuthenticationRequired, timeoutMillis, secureUserId)) {
+    return false;
+  }
+
+  // Calculate and return MAC
+  uint8_t nonce[12];
+  if (!eicOpsRandom(nonce, 12)) {
+    return false;
+  }
+  if (!eicOpsEncryptAes128Gcm(ctx->storageKey, nonce, NULL, 0,
+                              cborBuilder.buffer, cborBuilder.size, outMac)) {
+    return false;
+  }
+
+  // The ACP CBOR in the provisioning receipt doesn't include secureUserId so
+  // build it again.
+  eicCborInit(&cborBuilder, scratchSpace, scratchSpaceSize);
+  if (!eicCborCalcAccessControl(
+          &cborBuilder, id, readerCertificate, readerCertificateSize,
+          userAuthenticationRequired, timeoutMillis, 0 /* secureUserId */)) {
+    return false;
+  }
+
+  // Append the CBOR from the local builder to the digester.
+  eicCborAppend(&ctx->cbor, cborBuilder.buffer, cborBuilder.size);
+
+  return true;
+}
+
+bool eicProvisioningBeginAddEntry(EicProvisioning* ctx,
+                                  const uint8_t* accessControlProfileIds,
+                                  size_t numAccessControlProfileIds,
+                                  const char* nameSpace, size_t nameSpaceLength,
+                                  const char* name, size_t nameLength,
+                                  uint64_t entrySize, uint8_t* scratchSpace,
+                                  size_t scratchSpaceSize) {
+  uint8_t* additionalDataCbor = scratchSpace;
+  const size_t additionalDataCborBufSize = scratchSpaceSize;
+  size_t additionalDataCborSize;
+
+  // We'll need to calc and store a digest of additionalData to check that it's
+  // the same additionalData being passed in for every
+  // eicProvisioningAddEntryValue() call...
+  if (!eicCborCalcEntryAdditionalData(
+          accessControlProfileIds, numAccessControlProfileIds, nameSpace,
+          nameSpaceLength, name, nameLength, additionalDataCbor,
+          additionalDataCborBufSize, &additionalDataCborSize,
+          ctx->additionalDataSha256)) {
+    return false;
+  }
+
+  if (ctx->curNamespace == -1) {
+    ctx->curNamespace = 0;
+    ctx->curNamespaceNumProcessed = 0;
+    // Opens the main map: { * Namespace => [ + Entry ] }
+    eicCborAppendMap(&ctx->cbor, ctx->numEntryCounts);
+    eicCborAppendString(&ctx->cbor, nameSpace, nameSpaceLength);
+    // Opens the per-namespace array: [ + Entry ]
+    eicCborAppendArray(&ctx->cbor, ctx->entryCounts[ctx->curNamespace]);
+  }
+
+  if (ctx->curNamespaceNumProcessed == ctx->entryCounts[ctx->curNamespace]) {
+    ctx->curNamespace += 1;
+    ctx->curNamespaceNumProcessed = 0;
+    eicCborAppendString(&ctx->cbor, nameSpace, nameSpaceLength);
+    // Opens the per-namespace array: [ + Entry ]
+    eicCborAppendArray(&ctx->cbor, ctx->entryCounts[ctx->curNamespace]);
+  }
+
+  eicCborAppendMap(&ctx->cbor, 3);
+  eicCborAppendStringZ(&ctx->cbor, "name");
+  eicCborAppendString(&ctx->cbor, name, nameLength);
+
+  ctx->curEntrySize = entrySize;
+  ctx->curEntryNumBytesReceived = 0;
+
+  eicCborAppendStringZ(&ctx->cbor, "value");
+
+  ctx->curNamespaceNumProcessed += 1;
+  return true;
+}
+
+bool eicProvisioningAddEntryValue(
+    EicProvisioning* ctx, const uint8_t* accessControlProfileIds,
+    size_t numAccessControlProfileIds, const char* nameSpace,
+    size_t nameSpaceLength, const char* name, size_t nameLength,
+    const uint8_t* content, size_t contentSize, uint8_t* outEncryptedContent,
+    uint8_t* scratchSpace, size_t scratchSpaceSize) {
+  uint8_t* additionalDataCbor = scratchSpace;
+  const size_t additionalDataCborBufSize = scratchSpaceSize;
+  size_t additionalDataCborSize;
+  uint8_t calculatedSha256[EIC_SHA256_DIGEST_SIZE];
+
+  if (!eicCborCalcEntryAdditionalData(
+          accessControlProfileIds, numAccessControlProfileIds, nameSpace,
+          nameSpaceLength, name, nameLength, additionalDataCbor,
+          additionalDataCborBufSize, &additionalDataCborSize,
+          calculatedSha256)) {
+    return false;
+  }
+  if (eicCryptoMemCmp(calculatedSha256, ctx->additionalDataSha256,
+                      EIC_SHA256_DIGEST_SIZE) != 0) {
+    eicDebug("SHA-256 mismatch of additionalData");
+    return false;
+  }
+
+  eicCborAppend(&ctx->cbor, content, contentSize);
+
+  uint8_t nonce[12];
+  if (!eicOpsRandom(nonce, 12)) {
+    return false;
+  }
+  if (!eicOpsEncryptAes128Gcm(ctx->storageKey, nonce, content, contentSize,
+                              additionalDataCbor, additionalDataCborSize,
+                              outEncryptedContent)) {
+    return false;
+  }
+
+  // If done with this entry, close the map
+  ctx->curEntryNumBytesReceived += contentSize;
+  if (ctx->curEntryNumBytesReceived == ctx->curEntrySize) {
+    eicCborAppendStringZ(&ctx->cbor, "accessControlProfiles");
+    eicCborAppendArray(&ctx->cbor, numAccessControlProfileIds);
+    for (size_t n = 0; n < numAccessControlProfileIds; n++) {
+      eicCborAppendNumber(&ctx->cbor, accessControlProfileIds[n]);
+    }
+  }
+  return true;
+}
+
+bool eicProvisioningFinishAddingEntries(
+    EicProvisioning* ctx,
+    uint8_t signatureOfToBeSigned[EIC_ECDSA_P256_SIGNATURE_SIZE]) {
+  uint8_t cborSha256[EIC_SHA256_DIGEST_SIZE];
+
+  eicCborAppendBool(&ctx->cbor, ctx->testCredential);
+  eicCborFinal(&ctx->cbor, cborSha256);
+
+  // This verifies that the correct expectedProofOfProvisioningSize value was
+  // passed in at eicStartPersonalization() time.
+  if (ctx->cbor.size != ctx->expectedCborSizeAtEnd) {
+    eicDebug("CBOR size is %zd, was expecting %zd", ctx->cbor.size,
+             ctx->expectedCborSizeAtEnd);
+    return false;
+  }
+
+  if (!eicOpsEcDsa(ctx->credentialPrivateKey, cborSha256,
+                   signatureOfToBeSigned)) {
+    eicDebug("Error signing proofOfProvisioning");
+    return false;
+  }
+
+  return true;
+}
+
+bool eicProvisioningFinishGetCredentialData(
+    EicProvisioning* ctx, const char* docType, size_t docTypeLength,
+    uint8_t* encryptedCredentialKeys, size_t* encryptedCredentialKeysSize) {
+  EicCbor cbor;
+  uint8_t cborBuf[86];
+
+  if (*encryptedCredentialKeysSize < 86 + 28) {
+    eicDebug("encryptedCredentialKeysSize is %zd which is insufficient");
+    return false;
+  }
+
+  eicCborInit(&cbor, cborBuf, sizeof(cborBuf));
+  eicCborAppendArray(&cbor, 3);
+  eicCborAppendByteString(&cbor, ctx->storageKey, EIC_AES_128_KEY_SIZE);
+  eicCborAppendByteString(&cbor, ctx->credentialPrivateKey,
+                          EIC_P256_PRIV_KEY_SIZE);
+  uint8_t popSha256[EIC_SHA256_DIGEST_SIZE];
+  eicOpsSha256Final(&ctx->proofOfProvisioningDigester, popSha256);
+  eicCborAppendByteString(&cbor, popSha256, EIC_SHA256_DIGEST_SIZE);
+  if (cbor.size > sizeof(cborBuf)) {
+    eicDebug("Exceeded buffer size");
+    return false;
+  }
+
+  uint8_t nonce[12];
+  if (!eicOpsRandom(nonce, 12)) {
+    eicDebug("Error getting random");
+    return false;
+  }
+  if (!eicOpsEncryptAes128Gcm(eicOpsGetHardwareBoundKey(ctx->testCredential),
+                              nonce, cborBuf, cbor.size,
+                              // DocType is the additionalAuthenticatedData
+                              (const uint8_t*)docType, docTypeLength,
+                              encryptedCredentialKeys)) {
+    eicDebug("Error encrypting CredentialKeys");
+    return false;
+  }
+  *encryptedCredentialKeysSize = cbor.size + 28;
+
+  return true;
+}
diff --git a/guest/hals/identity/libeic/EicProvisioning.h b/guest/hals/identity/libeic/EicProvisioning.h
new file mode 100644
index 0000000..245a6e6
--- /dev/null
+++ b/guest/hals/identity/libeic/EicProvisioning.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_EIC_PROVISIONING_H
+#define ANDROID_HARDWARE_IDENTITY_EIC_PROVISIONING_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EicCbor.h"
+
+#define EIC_MAX_NUM_NAMESPACES 32
+#define EIC_MAX_NUM_ACCESS_CONTROL_PROFILE_IDS 32
+
+typedef struct {
+  // Set by eicCreateCredentialKey() OR eicProvisioningInitForUpdate()
+  uint8_t credentialPrivateKey[EIC_P256_PRIV_KEY_SIZE];
+
+  int numEntryCounts;
+  uint8_t entryCounts[EIC_MAX_NUM_NAMESPACES];
+
+  int curNamespace;
+  int curNamespaceNumProcessed;
+
+  size_t curEntrySize;
+  size_t curEntryNumBytesReceived;
+
+  // Set by eicProvisioningInit() OR eicProvisioningInitForUpdate()
+  uint8_t storageKey[EIC_AES_128_KEY_SIZE];
+
+  size_t expectedCborSizeAtEnd;
+
+  // SHA-256 for AdditionalData, updated for each entry.
+  uint8_t additionalDataSha256[EIC_SHA256_DIGEST_SIZE];
+
+  // Digester just for ProofOfProvisioning (without Sig_structure).
+  EicSha256Ctx proofOfProvisioningDigester;
+
+  EicCbor cbor;
+
+  bool testCredential;
+
+  // Set to true if this is an update.
+  bool isUpdate;
+} EicProvisioning;
+
+bool eicProvisioningInit(EicProvisioning* ctx, bool testCredential);
+
+bool eicProvisioningInitForUpdate(EicProvisioning* ctx, bool testCredential,
+                                  const char* docType, size_t docTypeLength,
+                                  const uint8_t* encryptedCredentialKeys,
+                                  size_t encryptedCredentialKeysSize);
+
+bool eicProvisioningCreateCredentialKey(
+    EicProvisioning* ctx, const uint8_t* challenge, size_t challengeSize,
+    const uint8_t* applicationId, size_t applicationIdSize,
+    uint8_t* publicKeyCert, size_t* publicKeyCertSize);
+
+bool eicProvisioningStartPersonalization(
+    EicProvisioning* ctx, int accessControlProfileCount, const int* entryCounts,
+    size_t numEntryCounts, const char* docType, size_t docTypeLength,
+    size_t expectedProofOfProvisioningingSize);
+
+// The scratchSpace should be set to a buffer at least 512 bytes. It's done this
+// way to avoid allocating stack space.
+//
+bool eicProvisioningAddAccessControlProfile(
+    EicProvisioning* ctx, int id, const uint8_t* readerCertificate,
+    size_t readerCertificateSize, bool userAuthenticationRequired,
+    uint64_t timeoutMillis, uint64_t secureUserId, uint8_t outMac[28],
+    uint8_t* scratchSpace, size_t scratchSpaceSize);
+
+// The scratchSpace should be set to a buffer at least 512 bytes. It's done this
+// way to avoid allocating stack space.
+//
+bool eicProvisioningBeginAddEntry(EicProvisioning* ctx,
+                                  const uint8_t* accessControlProfileIds,
+                                  size_t numAccessControlProfileIds,
+                                  const char* nameSpace, size_t nameSpaceLength,
+                                  const char* name, size_t nameLength,
+                                  uint64_t entrySize, uint8_t* scratchSpace,
+                                  size_t scratchSpaceSize);
+
+// The outEncryptedContent array must be contentSize + 28 bytes long.
+//
+// The scratchSpace should be set to a buffer at least 512 bytes. It's done this
+// way to avoid allocating stack space.
+//
+bool eicProvisioningAddEntryValue(
+    EicProvisioning* ctx, const uint8_t* accessControlProfileIds,
+    size_t numAccessControlProfileIds, const char* nameSpace,
+    size_t nameSpaceLength, const char* name, size_t nameLength,
+    const uint8_t* content, size_t contentSize, uint8_t* outEncryptedContent,
+    uint8_t* scratchSpace, size_t scratchSpaceSize);
+
+// The data returned in |signatureOfToBeSigned| contains the ECDSA signature of
+// the ToBeSigned CBOR from RFC 8051 "4.4. Signing and Verification Process"
+// where content is set to the ProofOfProvisioninging CBOR.
+//
+bool eicProvisioningFinishAddingEntries(
+    EicProvisioning* ctx,
+    uint8_t signatureOfToBeSigned[EIC_ECDSA_P256_SIGNATURE_SIZE]);
+
+//
+//
+// The |encryptedCredentialKeys| array is set to AES-GCM-ENC(HBK, R,
+// CredentialKeys, docType) where
+//
+//   CredentialKeys = [
+//     bstr,   ; storageKey, a 128-bit AES key
+//     bstr    ; credentialPrivKey, the private key for credentialKey
+//     bstr    ; SHA-256(ProofOfProvisioning)
+//   ]
+//
+// for feature version 202101. For feature version 202009 the third field was
+// not present.
+//
+// Since |storageKey| is 16 bytes and |credentialPrivKey| is 32 bytes, the
+// encoded CBOR for CredentialKeys is 86 bytes and consequently
+// |encryptedCredentialKeys| will be no longer than 86 + 28 = 114 bytes.
+//
+bool eicProvisioningFinishGetCredentialData(
+    EicProvisioning* ctx, const char* docType, size_t docTypeLength,
+    uint8_t* encryptedCredentialKeys, size_t* encryptedCredentialKeysSize);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // ANDROID_HARDWARE_IDENTITY_EIC_PROVISIONING_H
diff --git a/guest/hals/identity/libeic/libeic.h b/guest/hals/identity/libeic/libeic.h
new file mode 100644
index 0000000..8674ce3
--- /dev/null
+++ b/guest/hals/identity/libeic/libeic.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2020, The Android Open Source Project
+ *
+ * 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 ANDROID_HARDWARE_IDENTITY_LIBEIC_H
+#define ANDROID_HARDWARE_IDENTITY_LIBEIC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The EIC_INSIDE_LIBEIC_H preprocessor symbol is used to enforce
+ * library users to include only this file. All public interfaces, and
+ * only public interfaces, must be included here.
+ */
+#define EIC_INSIDE_LIBEIC_H
+#include "EicCbor.h"
+#include "EicCommon.h"
+#include "EicOps.h"
+#include "EicPresentation.h"
+#include "EicProvisioning.h"
+#undef EIC_INSIDE_LIBEIC_H
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // ANDROID_HARDWARE_IDENTITY_LIBEIC_H
diff --git a/guest/hals/identity/service.cpp b/guest/hals/identity/service.cpp
new file mode 100644
index 0000000..b40dba4
--- /dev/null
+++ b/guest/hals/identity/service.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#define LOG_TAG "android.hardware.identity-service"
+
+#include <android-base/logging.h>
+#include <android/binder_manager.h>
+#include <android/binder_process.h>
+
+#include "IdentityCredentialStore.h"
+
+#include "RemoteSecureHardwareProxy.h"
+
+using ::android::sp;
+using ::android::base::InitLogging;
+using ::android::base::StderrLogger;
+
+using ::aidl::android::hardware::identity::IdentityCredentialStore;
+using ::android::hardware::identity::RemoteSecureHardwareProxyFactory;
+using ::android::hardware::identity::SecureHardwareProxyFactory;
+
+int main(int /*argc*/, char* argv[]) {
+  InitLogging(argv, StderrLogger);
+
+  sp<SecureHardwareProxyFactory> hwProxyFactory =
+      new RemoteSecureHardwareProxyFactory();
+
+  ABinderProcess_setThreadPoolMaxThreadCount(0);
+  std::shared_ptr<IdentityCredentialStore> store =
+      ndk::SharedRefBase::make<IdentityCredentialStore>(hwProxyFactory);
+
+  const std::string instance =
+      std::string(IdentityCredentialStore::descriptor) + "/default";
+  binder_status_t status =
+      AServiceManager_addService(store->asBinder().get(), instance.c_str());
+  CHECK_EQ(status, STATUS_OK);
+
+  ABinderProcess_joinThreadPool();
+  return EXIT_FAILURE;  // should not reach
+}
diff --git a/guest/hals/keymint/remote/Android.bp b/guest/hals/keymint/remote/Android.bp
index a383c45..4944d37 100644
--- a/guest/hals/keymint/remote/Android.bp
+++ b/guest/hals/keymint/remote/Android.bp
@@ -32,9 +32,8 @@
         "-Wextra",
     ],
     shared_libs: [
-        "android.hardware.security.keymint-V1-ndk_platform",
-        "android.hardware.security.secureclock-V1-ndk_platform",
-        "android.hardware.security.sharedsecret-V1-ndk_platform",
+        "android.hardware.security.secureclock-V1-ndk",
+        "android.hardware.security.sharedsecret-V1-ndk",
         "lib_android_keymaster_keymint_utils",
         "libbase",
         "libbinder_ndk",
@@ -52,11 +51,24 @@
         "remote_keymint_device.cpp",
         "remote_keymint_operation.cpp",
         "remote_keymaster.cpp",
+        "remote_remotely_provisioned_component.cpp",
         "remote_secure_clock.cpp",
         "remote_shared_secret.cpp",
         "service.cpp",
     ],
     defaults: [
         "cuttlefish_guest_only",
+        "keymint_use_latest_hal_aidl_ndk_shared",
     ],
+    required: [
+        "RemoteProvisioner",
+        "android.hardware.hardware_keystore.remote-keymint.xml",
+    ],
+}
+
+prebuilt_etc {
+    name: "android.hardware.hardware_keystore.remote-keymint.xml",
+    sub_dir: "permissions",
+    vendor: true,
+    src: "android.hardware.hardware_keystore.remote-keymint.xml",
 }
diff --git a/guest/hals/keymint/remote/android.hardware.hardware_keystore.remote-keymint.xml b/guest/hals/keymint/remote/android.hardware.hardware_keystore.remote-keymint.xml
new file mode 100644
index 0000000..e5a9345
--- /dev/null
+++ b/guest/hals/keymint/remote/android.hardware.hardware_keystore.remote-keymint.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 The Android Open Source Project
+
+     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.
+-->
+<permissions>
+  <feature name="android.hardware.hardware_keystore" version="100" />
+</permissions>
diff --git a/guest/hals/keymint/remote/android.hardware.security.keymint-service.remote.xml b/guest/hals/keymint/remote/android.hardware.security.keymint-service.remote.xml
index 4aa05ef..a4d0302 100644
--- a/guest/hals/keymint/remote/android.hardware.security.keymint-service.remote.xml
+++ b/guest/hals/keymint/remote/android.hardware.security.keymint-service.remote.xml
@@ -1,10 +1,12 @@
 <manifest version="1.0" type="device">
     <hal format="aidl">
         <name>android.hardware.security.keymint</name>
+        <version>2</version>
         <fqname>IKeyMintDevice/default</fqname>
     </hal>
     <hal format="aidl">
         <name>android.hardware.security.keymint</name>
+        <version>2</version>
         <fqname>IRemotelyProvisionedComponent/default</fqname>
     </hal>
 </manifest>
diff --git a/guest/hals/keymint/remote/remote_keymaster.cpp b/guest/hals/keymint/remote/remote_keymaster.cpp
index 5eee143..9739a6b 100644
--- a/guest/hals/keymint/remote/remote_keymaster.cpp
+++ b/guest/hals/keymint/remote/remote_keymaster.cpp
@@ -17,6 +17,8 @@
 #include "remote_keymaster.h"
 
 #include <android-base/logging.h>
+#include <android-base/properties.h>
+#include <android-base/strings.h>
 #include <keymaster/android_keymaster_messages.h>
 #include <keymaster/keymaster_configuration.h>
 
@@ -67,6 +69,33 @@
     return false;
   }
 
+  // Set the vendor patchlevel to value retrieved from system property (which
+  // requires SELinux permission).
+  ConfigureVendorPatchlevelRequest vendor_req(message_version());
+  vendor_req.vendor_patchlevel = GetVendorPatchlevel();
+  ConfigureVendorPatchlevelResponse vendor_rsp =
+      ConfigureVendorPatchlevel(vendor_req);
+  if (vendor_rsp.error != KM_ERROR_OK) {
+    LOG(ERROR) << "Failed to configure keymaster vendor patchlevel: "
+               << vendor_rsp.error;
+    return false;
+  }
+
+  // Set the boot patchlevel to value retrieved from system property (which
+  // requires SELinux permission).
+  ConfigureBootPatchlevelRequest boot_req(message_version());
+  static constexpr char boot_prop_name[] = "ro.vendor.boot_security_patch";
+  auto boot_prop_value = android::base::GetProperty(boot_prop_name, "");
+  boot_prop_value = android::base::StringReplace(boot_prop_value.data(), "-",
+                                                 "", /* all */ true);
+  boot_req.boot_patchlevel = std::stoi(boot_prop_value);
+  ConfigureBootPatchlevelResponse boot_rsp = ConfigureBootPatchlevel(boot_req);
+  if (boot_rsp.error != KM_ERROR_OK) {
+    LOG(ERROR) << "Failed to configure keymaster boot patchlevel: "
+               << boot_rsp.error;
+    return false;
+  }
+
   return true;
 }
 
@@ -122,15 +151,25 @@
 
 void RemoteKeymaster::GenerateKey(const GenerateKeyRequest& request,
                                   GenerateKeyResponse* response) {
-  GenerateKeyRequest datedRequest(request.message_version);
-  datedRequest.key_description = request.key_description;
-
-  if (!request.key_description.Contains(TAG_CREATION_DATETIME)) {
+  if (message_version_ < MessageVersion(KmVersion::KEYMINT_1) &&
+      !request.key_description.Contains(TAG_CREATION_DATETIME)) {
+    GenerateKeyRequest datedRequest(request.message_version);
     datedRequest.key_description.push_back(TAG_CREATION_DATETIME,
                                            java_time(time(NULL)));
+    ForwardCommand(GENERATE_KEY, datedRequest, response);
+  } else {
+    ForwardCommand(GENERATE_KEY, request, response);
   }
+}
 
-  ForwardCommand(GENERATE_KEY, datedRequest, response);
+void RemoteKeymaster::GenerateRkpKey(const GenerateRkpKeyRequest& request,
+                                     GenerateRkpKeyResponse* response) {
+  ForwardCommand(GENERATE_RKP_KEY, request, response);
+}
+
+void RemoteKeymaster::GenerateCsr(const GenerateCsrRequest& request,
+                                  GenerateCsrResponse* response) {
+  ForwardCommand(GENERATE_CSR, request, response);
 }
 
 void RemoteKeymaster::GetKeyCharacteristics(
@@ -234,8 +273,21 @@
 void RemoteKeymaster::GenerateTimestampToken(
     GenerateTimestampTokenRequest& request,
     GenerateTimestampTokenResponse* response) {
-  // TODO(aosp/1641315): Send a message to the host.
   ForwardCommand(GENERATE_TIMESTAMP_TOKEN, request, response);
 }
 
+ConfigureVendorPatchlevelResponse RemoteKeymaster::ConfigureVendorPatchlevel(
+    const ConfigureVendorPatchlevelRequest& request) {
+  ConfigureVendorPatchlevelResponse response(message_version());
+  ForwardCommand(CONFIGURE_VENDOR_PATCHLEVEL, request, &response);
+  return response;
+}
+
+ConfigureBootPatchlevelResponse RemoteKeymaster::ConfigureBootPatchlevel(
+    const ConfigureBootPatchlevelRequest& request) {
+  ConfigureBootPatchlevelResponse response(message_version());
+  ForwardCommand(CONFIGURE_BOOT_PATCHLEVEL, request, &response);
+  return response;
+}
+
 }  // namespace keymaster
diff --git a/guest/hals/keymint/remote/remote_keymaster.h b/guest/hals/keymint/remote/remote_keymaster.h
index bd86012..d7c7abf 100644
--- a/guest/hals/keymint/remote/remote_keymaster.h
+++ b/guest/hals/keymint/remote/remote_keymaster.h
@@ -55,6 +55,10 @@
   void Configure(const ConfigureRequest& request, ConfigureResponse* response);
   void GenerateKey(const GenerateKeyRequest& request,
                    GenerateKeyResponse* response);
+  void GenerateRkpKey(const GenerateRkpKeyRequest& request,
+                      GenerateRkpKeyResponse* response);
+  void GenerateCsr(const GenerateCsrRequest& request,
+                   GenerateCsrResponse* response);
   void GetKeyCharacteristics(const GetKeyCharacteristicsRequest& request,
                              GetKeyCharacteristicsResponse* response);
   void ImportKey(const ImportKeyRequest& request, ImportKeyResponse* response);
@@ -82,6 +86,10 @@
       const VerifyAuthorizationRequest& request);
   DeviceLockedResponse DeviceLocked(const DeviceLockedRequest& request);
   EarlyBootEndedResponse EarlyBootEnded();
+  ConfigureVendorPatchlevelResponse ConfigureVendorPatchlevel(
+      const ConfigureVendorPatchlevelRequest& request);
+  ConfigureBootPatchlevelResponse ConfigureBootPatchlevel(
+      const ConfigureBootPatchlevelRequest& request);
   void GenerateTimestampToken(GenerateTimestampTokenRequest& request,
                               GenerateTimestampTokenResponse* response);
 
diff --git a/guest/hals/keymint/remote/remote_keymint_device.cpp b/guest/hals/keymint/remote/remote_keymint_device.cpp
index 55903b7..bef3230 100644
--- a/guest/hals/keymint/remote/remote_keymint_device.cpp
+++ b/guest/hals/keymint/remote/remote_keymint_device.cpp
@@ -37,17 +37,19 @@
 namespace {
 
 vector<KeyCharacteristics> convertKeyCharacteristics(
-    SecurityLevel keyMintSecurityLevel, const AuthorizationSet& sw_enforced,
-    const AuthorizationSet& hw_enforced) {
+    const vector<KeyParameter>& keyParams, SecurityLevel keyMintSecurityLevel,
+    const AuthorizationSet& sw_enforced, const AuthorizationSet& hw_enforced,
+    bool include_keystore_enforced = true) {
   KeyCharacteristics keyMintEnforced{keyMintSecurityLevel, {}};
 
   if (keyMintSecurityLevel != SecurityLevel::SOFTWARE) {
     // We're pretending to be TRUSTED_ENVIRONMENT or STRONGBOX.
     keyMintEnforced.authorizations = kmParamSet2Aidl(hw_enforced);
-    // Put all the software authorizations in the keystore list.
-    KeyCharacteristics keystoreEnforced{SecurityLevel::KEYSTORE,
-                                        kmParamSet2Aidl(sw_enforced)};
-    return {std::move(keyMintEnforced), std::move(keystoreEnforced)};
+    if (include_keystore_enforced && !sw_enforced.empty()) {
+      return {std::move(keyMintEnforced),
+              {SecurityLevel::KEYSTORE, kmParamSet2Aidl(sw_enforced)}};
+    }
+    return {std::move(keyMintEnforced)};
   }
 
   KeyCharacteristics keystoreEnforced{SecurityLevel::KEYSTORE, {}};
@@ -77,6 +79,11 @@
 
       /* Unenforceable */
       case KM_TAG_CREATION_DATETIME:
+        for (const auto& p : keyParams) {
+          if (p.tag == Tag::CREATION_DATETIME) {
+            keystoreEnforced.authorizations.push_back(kmParam2Aidl(entry));
+          }
+        }
         break;
 
       /* Disallowed in KeyCharacteristics */
@@ -160,10 +167,12 @@
 
   vector<KeyCharacteristics> retval;
   retval.reserve(2);
-  if (!keyMintEnforced.authorizations.empty())
+  if (!keyMintEnforced.authorizations.empty()) {
     retval.push_back(std::move(keyMintEnforced));
-  if (!keystoreEnforced.authorizations.empty())
+  }
+  if (include_keystore_enforced && !keystoreEnforced.authorizations.empty()) {
     retval.push_back(std::move(keystoreEnforced));
+  }
 
   return retval;
 }
@@ -245,7 +254,7 @@
 
   creationResult->keyBlob = kmBlob2vector(response.key_blob);
   creationResult->keyCharacteristics = convertKeyCharacteristics(
-      securityLevel_, response.unenforced, response.enforced);
+      keyParams, securityLevel_, response.unenforced, response.enforced);
   creationResult->certificateChain =
       convertCertificateChain(response.certificate_chain);
   return ScopedAStatus::ok();
@@ -279,7 +288,7 @@
 
   creationResult->keyBlob = kmBlob2vector(response.key_blob);
   creationResult->keyCharacteristics = convertKeyCharacteristics(
-      securityLevel_, response.unenforced, response.enforced);
+      keyParams, securityLevel_, response.unenforced, response.enforced);
   creationResult->certificateChain =
       convertCertificateChain(response.certificate_chain);
 
@@ -310,7 +319,7 @@
 
   creationResult->keyBlob = kmBlob2vector(response.key_blob);
   creationResult->keyCharacteristics = convertKeyCharacteristics(
-      securityLevel_, response.unenforced, response.enforced);
+      unwrappingParams, securityLevel_, response.unenforced, response.enforced);
   creationResult->certificateChain =
       convertCertificateChain(response.certificate_chain);
 
@@ -413,10 +422,25 @@
 }
 
 ScopedAStatus RemoteKeyMintDevice::getKeyCharacteristics(
-    const std::vector<uint8_t>& /* storageKeyBlob */,
-    const std::vector<uint8_t>& /* appId */,
-    const std::vector<uint8_t>& /* appData */,
-    std::vector<KeyCharacteristics>* /* keyCharacteristics */) {
-  return kmError2ScopedAStatus(KM_ERROR_UNIMPLEMENTED);
+    const std::vector<uint8_t>& storageKeyBlob,
+    const std::vector<uint8_t>& appId, const std::vector<uint8_t>& appData,
+    std::vector<KeyCharacteristics>* keyCharacteristics) {
+  GetKeyCharacteristicsRequest request(impl_.message_version());
+  request.SetKeyMaterial(storageKeyBlob.data(), storageKeyBlob.size());
+  addClientAndAppData(appId, appData, &request.additional_params);
+
+  GetKeyCharacteristicsResponse response(impl_.message_version());
+  impl_.GetKeyCharacteristics(request, &response);
+
+  if (response.error != KM_ERROR_OK) {
+    return kmError2ScopedAStatus(response.error);
+  }
+
+  *keyCharacteristics = convertKeyCharacteristics(
+      {} /*keyParams*/, securityLevel_, response.unenforced, response.enforced,
+      false /*include_keystore_enforced*/);
+
+  return ScopedAStatus::ok();
 }
+
 }  // namespace aidl::android::hardware::security::keymint
diff --git a/guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp b/guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp
new file mode 100644
index 0000000..7d2eca1
--- /dev/null
+++ b/guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <aidl/android/hardware/security/keymint/RpcHardwareInfo.h>
+#include <cppbor.h>
+#include <cppbor_parse.h>
+#include <keymaster/cppcose/cppcose.h>
+#include <keymaster/keymaster_configuration.h>
+#include <openssl/bn.h>
+#include <openssl/ec.h>
+#include <openssl/rand.h>
+#include <openssl/x509.h>
+
+#include <variant>
+
+#include "KeyMintUtils.h"
+#include "android/binder_auto_utils.h"
+#include "remote_remotely_provisioned_component.h"
+
+namespace aidl::android::hardware::security::keymint {
+namespace {
+using namespace cppcose;
+using namespace keymaster;
+
+using ::aidl::android::hardware::security::keymint::km_utils::kmBlob2vector;
+using ::ndk::ScopedAStatus;
+
+// Error codes from the provisioning stack are negated.
+ndk::ScopedAStatus toKeymasterError(const KeymasterResponse& response) {
+  auto error =
+      static_cast<keymaster_error_t>(-static_cast<int32_t>(response.error));
+  return ::aidl::android::hardware::security::keymint::km_utils::
+      kmError2ScopedAStatus(error);
+}
+
+}  // namespace
+
+RemoteRemotelyProvisionedComponent::RemoteRemotelyProvisionedComponent(
+    keymaster::RemoteKeymaster& impl)
+    : impl_(impl) {}
+
+ScopedAStatus RemoteRemotelyProvisionedComponent::getHardwareInfo(
+    RpcHardwareInfo* info) {
+  info->versionNumber = 1;
+  info->rpcAuthorName = "Google";
+  info->supportedEekCurve = RpcHardwareInfo::CURVE_25519;
+  return ScopedAStatus::ok();
+}
+
+ScopedAStatus RemoteRemotelyProvisionedComponent::generateEcdsaP256KeyPair(
+    bool testMode, MacedPublicKey* macedPublicKey,
+    std::vector<uint8_t>* privateKeyHandle) {
+  GenerateRkpKeyRequest request(impl_.message_version());
+  request.test_mode = testMode;
+  GenerateRkpKeyResponse response(impl_.message_version());
+  impl_.GenerateRkpKey(request, &response);
+  if (response.error != KM_ERROR_OK) {
+    return toKeymasterError(response);
+  }
+
+  macedPublicKey->macedKey = km_utils::kmBlob2vector(response.maced_public_key);
+  *privateKeyHandle = km_utils::kmBlob2vector(response.key_blob);
+  return ScopedAStatus::ok();
+}
+
+ScopedAStatus RemoteRemotelyProvisionedComponent::generateCertificateRequest(
+    bool testMode, const std::vector<MacedPublicKey>& keysToSign,
+    const std::vector<uint8_t>& endpointEncCertChain,
+    const std::vector<uint8_t>& challenge, DeviceInfo* deviceInfo,
+    ProtectedData* protectedData, std::vector<uint8_t>* keysToSignMac) {
+  GenerateCsrRequest request(impl_.message_version());
+  request.test_mode = testMode;
+  request.num_keys = keysToSign.size();
+  request.keys_to_sign_array = new KeymasterBlob[keysToSign.size()];
+  for (size_t i = 0; i < keysToSign.size(); i++) {
+    request.SetKeyToSign(i, keysToSign[i].macedKey.data(),
+                         keysToSign[i].macedKey.size());
+  }
+  request.SetEndpointEncCertChain(endpointEncCertChain.data(),
+                                  endpointEncCertChain.size());
+  request.SetChallenge(challenge.data(), challenge.size());
+  GenerateCsrResponse response(impl_.message_version());
+  impl_.GenerateCsr(request, &response);
+
+  if (response.error != KM_ERROR_OK) {
+    return toKeymasterError(response);
+  }
+  deviceInfo->deviceInfo = km_utils::kmBlob2vector(response.device_info_blob);
+  protectedData->protectedData =
+      km_utils::kmBlob2vector(response.protected_data_blob);
+  *keysToSignMac = km_utils::kmBlob2vector(response.keys_to_sign_mac);
+  return ScopedAStatus::ok();
+}
+
+}  // namespace aidl::android::hardware::security::keymint
diff --git a/guest/hals/keymint/remote/remote_remotely_provisioned_component.h b/guest/hals/keymint/remote/remote_remotely_provisioned_component.h
new file mode 100644
index 0000000..35e182a
--- /dev/null
+++ b/guest/hals/keymint/remote/remote_remotely_provisioned_component.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <cstdint>
+#include <vector>
+
+#include <aidl/android/hardware/security/keymint/BnRemotelyProvisionedComponent.h>
+#include <aidl/android/hardware/security/keymint/MacedPublicKey.h>
+#include <aidl/android/hardware/security/keymint/RpcHardwareInfo.h>
+#include <aidl/android/hardware/security/keymint/SecurityLevel.h>
+
+#include "KeyMintUtils.h"
+#include "guest/hals/keymint/remote/remote_keymaster.h"
+
+namespace aidl::android::hardware::security::keymint {
+
+class RemoteRemotelyProvisionedComponent
+    : public BnRemotelyProvisionedComponent {
+ public:
+  explicit RemoteRemotelyProvisionedComponent(keymaster::RemoteKeymaster& impl);
+
+  ndk::ScopedAStatus getHardwareInfo(RpcHardwareInfo* info) override;
+
+  ndk::ScopedAStatus generateEcdsaP256KeyPair(
+      bool testMode, MacedPublicKey* macedPublicKey,
+      std::vector<uint8_t>* privateKeyHandle) override;
+
+  ndk::ScopedAStatus generateCertificateRequest(
+      bool testMode, const std::vector<MacedPublicKey>& keysToSign,
+      const std::vector<uint8_t>& endpointEncCertChain,
+      const std::vector<uint8_t>& challenge, DeviceInfo* deviceInfo,
+      ProtectedData* protectedData,
+      std::vector<uint8_t>* keysToSignMac) override;
+
+ private:
+  keymaster::RemoteKeymaster& impl_;
+};
+
+}  // namespace aidl::android::hardware::security::keymint
diff --git a/guest/hals/keymint/remote/service.cpp b/guest/hals/keymint/remote/service.cpp
index 404df77..1fb0143 100644
--- a/guest/hals/keymint/remote/service.cpp
+++ b/guest/hals/keymint/remote/service.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "android.hardware.security.keymint-service"
+#define LOG_TAG "android.hardware.security.keymint-service.remote"
 
 #include <android-base/logging.h>
 #include <android/binder_manager.h>
@@ -23,24 +23,31 @@
 #include <keymaster/android_keymaster_messages.h>
 #include <keymaster/km_version.h>
 #include <keymaster/soft_keymaster_logger.h>
-#include "guest/hals/keymint/remote/remote_keymint_device.h"
 
+#include <aidl/android/hardware/security/keymint/SecurityLevel.h>
 #include <guest/hals/keymint/remote/remote_keymaster.h>
 #include <guest/hals/keymint/remote/remote_keymint_device.h>
+#include <guest/hals/keymint/remote/remote_remotely_provisioned_component.h>
 #include <guest/hals/keymint/remote/remote_secure_clock.h>
 #include <guest/hals/keymint/remote/remote_shared_secret.h>
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/security/keymaster_channel.h"
 
-static const char device[] = "/dev/hvc3";
+namespace {
+
+const char device[] = "/dev/hvc3";
 
 using aidl::android::hardware::security::keymint::RemoteKeyMintDevice;
+using aidl::android::hardware::security::keymint::
+    RemoteRemotelyProvisionedComponent;
 using aidl::android::hardware::security::keymint::SecurityLevel;
 using aidl::android::hardware::security::secureclock::RemoteSecureClock;
 using aidl::android::hardware::security::sharedsecret::RemoteSharedSecret;
+using keymaster::GenerateTimestampTokenRequest;
+using keymaster::GenerateTimestampTokenResponse;
 
 template <typename T, class... Args>
-static std::shared_ptr<T> addService(Args&&... args) {
+std::shared_ptr<T> addService(Args&&... args) {
   std::shared_ptr<T> ser =
       ndk::SharedRefBase::make<T>(std::forward<Args>(args)...);
   auto instanceName = std::string(T::descriptor) + "/default";
@@ -51,6 +58,21 @@
   return ser;
 }
 
+SecurityLevel getSecurityLevel(::keymaster::RemoteKeymaster& remote_keymaster) {
+  GenerateTimestampTokenRequest request(remote_keymaster.message_version());
+  GenerateTimestampTokenResponse response(remote_keymaster.message_version());
+  remote_keymaster.GenerateTimestampToken(request, &response);
+
+  if (response.error != STATUS_OK) {
+    LOG(FATAL) << "Error getting timestamp token from remote keymaster: "
+               << response.error;
+  }
+
+  return static_cast<SecurityLevel>(response.token.security_level);
+}
+
+}  // namespace
+
 int main(int, char** argv) {
   android::base::InitLogging(argv, android::base::KernelLogger);
   // Zero threads seems like a useless pool, but below we'll join this thread to
@@ -71,12 +93,17 @@
 
   keymaster::RemoteKeymaster remote_keymaster(
       &keymasterChannel, keymaster::MessageVersion(
-                             keymaster::KmVersion::KEYMINT_1, 0 /* km_date */));
+                             keymaster::KmVersion::KEYMINT_2, 0 /* km_date */));
+
+  if (!remote_keymaster.Initialize()) {
+    LOG(FATAL) << "Could not initialize keymaster";
+  }
 
   addService<RemoteKeyMintDevice>(remote_keymaster,
-                                  SecurityLevel::TRUSTED_ENVIRONMENT);
+                                  getSecurityLevel(remote_keymaster));
   addService<RemoteSecureClock>(remote_keymaster);
   addService<RemoteSharedSecret>(remote_keymaster);
+  addService<RemoteRemotelyProvisionedComponent>(remote_keymaster);
 
   ABinderProcess_joinThreadPool();
   return EXIT_FAILURE;  // should not reach
diff --git a/guest/hals/ril/reference-libril/Android.bp b/guest/hals/ril/reference-libril/Android.bp
index 687f95f..b6525ac 100644
--- a/guest/hals/ril/reference-libril/Android.bp
+++ b/guest/hals/ril/reference-libril/Android.bp
@@ -56,7 +56,7 @@
         "libutils",
     ],
     static_libs: [
-        "libprotobuf-c-nano-enable_malloc"
+        "libprotobuf-c-nano-enable_malloc",
     ],
 }
 
@@ -67,4 +67,3 @@
         "[email protected]",
     ],
 }
-
diff --git a/guest/hals/ril/reference-libril/ril.h b/guest/hals/ril/reference-libril/ril.h
index 586de42..f7bc2c5 100644
--- a/guest/hals/ril/reference-libril/ril.h
+++ b/guest/hals/ril/reference-libril/ril.h
@@ -6202,7 +6202,7 @@
  *
  * "data" is NULL
  *
- * "response" is an array of  RIL_CellInfo_v12.
+ * "response" is an array of RIL_CellInfo_v12.
  *
  * Valid errors:
  *  SUCCESS
@@ -7543,8 +7543,12 @@
 
 #define RIL_REQUEST_UPDATE_SIM_PHONEBOOK_RECORDS 172
 
+/**
+ * Same as RIL_REQUEST_GET_CELL_INFO_LIST but "response" is an array of RIL_CellInfo_v16.
+ */
+#define RIL_REQUEST_GET_CELL_INFO_LIST_1_6 173
 
-#define RIL_REQUEST_LAST RIL_REQUEST_UPDATE_SIM_PHONEBOOK_RECORDS
+#define RIL_REQUEST_LAST RIL_REQUEST_GET_CELL_INFO_LIST_1_6
 
 /***********************************************************************/
 
diff --git a/guest/hals/ril/reference-libril/ril_commands.h b/guest/hals/ril/reference-libril/ril_commands.h
index a100b48..4b1c48d 100644
--- a/guest/hals/ril/reference-libril/ril_commands.h
+++ b/guest/hals/ril/reference-libril/ril_commands.h
@@ -14,176 +14,193 @@
 ** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
-    {0, NULL},                   //none
-    {RIL_REQUEST_GET_SIM_STATUS, radio_1_6::getIccCardStatusResponse},
-    {RIL_REQUEST_ENTER_SIM_PIN, radio_1_6::supplyIccPinForAppResponse},
-    {RIL_REQUEST_ENTER_SIM_PUK, radio_1_6::supplyIccPukForAppResponse},
-    {RIL_REQUEST_ENTER_SIM_PIN2, radio_1_6::supplyIccPin2ForAppResponse},
-    {RIL_REQUEST_ENTER_SIM_PUK2, radio_1_6::supplyIccPuk2ForAppResponse},
-    {RIL_REQUEST_CHANGE_SIM_PIN, radio_1_6::changeIccPinForAppResponse},
-    {RIL_REQUEST_CHANGE_SIM_PIN2, radio_1_6::changeIccPin2ForAppResponse},
-    {RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION, radio_1_6::supplyNetworkDepersonalizationResponse},
-    {RIL_REQUEST_GET_CURRENT_CALLS, radio_1_6::getCurrentCallsResponse},
-    {RIL_REQUEST_DIAL, radio_1_6::dialResponse},
-    {RIL_REQUEST_GET_IMSI, radio_1_6::getIMSIForAppResponse},
-    {RIL_REQUEST_HANGUP, radio_1_6::hangupConnectionResponse},
-    {RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND, radio_1_6::hangupWaitingOrBackgroundResponse},
-    {RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND, radio_1_6::hangupForegroundResumeBackgroundResponse},
-    {RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE, radio_1_6::switchWaitingOrHoldingAndActiveResponse},
-    {RIL_REQUEST_CONFERENCE, radio_1_6::conferenceResponse},
-    {RIL_REQUEST_UDUB, radio_1_6::rejectCallResponse},
-    {RIL_REQUEST_LAST_CALL_FAIL_CAUSE, radio_1_6::getLastCallFailCauseResponse},
-    {RIL_REQUEST_SIGNAL_STRENGTH, radio_1_6::getSignalStrengthResponse},
-    {RIL_REQUEST_VOICE_REGISTRATION_STATE, radio_1_6::getVoiceRegistrationStateResponse},
-    {RIL_REQUEST_DATA_REGISTRATION_STATE, radio_1_6::getDataRegistrationStateResponse},
-    {RIL_REQUEST_OPERATOR, radio_1_6::getOperatorResponse},
-    {RIL_REQUEST_RADIO_POWER, radio_1_6::setRadioPowerResponse},
-    {RIL_REQUEST_DTMF, radio_1_6::sendDtmfResponse},
-    {RIL_REQUEST_SEND_SMS, radio_1_6::sendSmsResponse},
-    {RIL_REQUEST_SEND_SMS_EXPECT_MORE, radio_1_6::sendSmsExpectMoreResponse},
-    {RIL_REQUEST_SETUP_DATA_CALL, radio_1_6::setupDataCallResponse},
-    {RIL_REQUEST_SIM_IO, radio_1_6::iccIOForAppResponse},
-    {RIL_REQUEST_SEND_USSD, radio_1_6::sendUssdResponse},
-    {RIL_REQUEST_CANCEL_USSD, radio_1_6::cancelPendingUssdResponse},
-    {RIL_REQUEST_GET_CLIR, radio_1_6::getClirResponse},
-    {RIL_REQUEST_SET_CLIR, radio_1_6::setClirResponse},
-    {RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, radio_1_6::getCallForwardStatusResponse},
-    {RIL_REQUEST_SET_CALL_FORWARD, radio_1_6::setCallForwardResponse},
-    {RIL_REQUEST_QUERY_CALL_WAITING, radio_1_6::getCallWaitingResponse},
-    {RIL_REQUEST_SET_CALL_WAITING, radio_1_6::setCallWaitingResponse},
-    {RIL_REQUEST_SMS_ACKNOWLEDGE, radio_1_6::acknowledgeLastIncomingGsmSmsResponse},
-    {RIL_REQUEST_GET_IMEI, NULL},
-    {RIL_REQUEST_GET_IMEISV, NULL},
-    {RIL_REQUEST_ANSWER, radio_1_6::acceptCallResponse},
-    {RIL_REQUEST_DEACTIVATE_DATA_CALL, radio_1_6::deactivateDataCallResponse},
-    {RIL_REQUEST_QUERY_FACILITY_LOCK, radio_1_6::getFacilityLockForAppResponse},
-    {RIL_REQUEST_SET_FACILITY_LOCK, radio_1_6::setFacilityLockForAppResponse},
-    {RIL_REQUEST_CHANGE_BARRING_PASSWORD, radio_1_6::setBarringPasswordResponse},
-    {RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE, radio_1_6::getNetworkSelectionModeResponse},
-    {RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC, radio_1_6::setNetworkSelectionModeAutomaticResponse},
-    {RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL, radio_1_6::setNetworkSelectionModeManualResponse},
-    {RIL_REQUEST_QUERY_AVAILABLE_NETWORKS , radio_1_6::getAvailableNetworksResponse},
-    {RIL_REQUEST_DTMF_START, radio_1_6::startDtmfResponse},
-    {RIL_REQUEST_DTMF_STOP, radio_1_6::stopDtmfResponse},
-    {RIL_REQUEST_BASEBAND_VERSION, radio_1_6::getBasebandVersionResponse},
-    {RIL_REQUEST_SEPARATE_CONNECTION, radio_1_6::separateConnectionResponse},
-    {RIL_REQUEST_SET_MUTE, radio_1_6::setMuteResponse},
-    {RIL_REQUEST_GET_MUTE, radio_1_6::getMuteResponse},
-    {RIL_REQUEST_QUERY_CLIP, radio_1_6::getClipResponse},
-    {RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE, NULL},
-    {RIL_REQUEST_DATA_CALL_LIST, radio_1_6::getDataCallListResponse},
-    {RIL_REQUEST_RESET_RADIO, NULL},
-    {RIL_REQUEST_OEM_HOOK_RAW, radio_1_6::sendRequestRawResponse},
-    {RIL_REQUEST_OEM_HOOK_STRINGS, radio_1_6::sendRequestStringsResponse},
-    {RIL_REQUEST_SCREEN_STATE, radio_1_6::sendDeviceStateResponse},   // Note the response function is different.
-    {RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, radio_1_6::setSuppServiceNotificationsResponse},
-    {RIL_REQUEST_WRITE_SMS_TO_SIM, radio_1_6::writeSmsToSimResponse},
-    {RIL_REQUEST_DELETE_SMS_ON_SIM, radio_1_6::deleteSmsOnSimResponse},
-    {RIL_REQUEST_SET_BAND_MODE, radio_1_6::setBandModeResponse},
-    {RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE, radio_1_6::getAvailableBandModesResponse},
-    {RIL_REQUEST_STK_GET_PROFILE, NULL},
-    {RIL_REQUEST_STK_SET_PROFILE, NULL},
-    {RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, radio_1_6::sendEnvelopeResponse},
-    {RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, radio_1_6::sendTerminalResponseToSimResponse},
-    {RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM, radio_1_6::handleStkCallSetupRequestFromSimResponse},
-    {RIL_REQUEST_EXPLICIT_CALL_TRANSFER, radio_1_6::explicitCallTransferResponse},
-    {RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, radio_1_6::setPreferredNetworkTypeResponse},
-    {RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, radio_1_6::getPreferredNetworkTypeResponse},
-    {RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, radio_1_6::getNeighboringCidsResponse},
-    {RIL_REQUEST_SET_LOCATION_UPDATES, radio_1_6::setLocationUpdatesResponse},
-    {RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, radio_1_6::setCdmaSubscriptionSourceResponse},
-    {RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, radio_1_6::setCdmaRoamingPreferenceResponse},
-    {RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, radio_1_6::getCdmaRoamingPreferenceResponse},
-    {RIL_REQUEST_SET_TTY_MODE, radio_1_6::setTTYModeResponse},
-    {RIL_REQUEST_QUERY_TTY_MODE, radio_1_6::getTTYModeResponse},
-    {RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE, radio_1_6::setPreferredVoicePrivacyResponse},
-    {RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE, radio_1_6::getPreferredVoicePrivacyResponse},
-    {RIL_REQUEST_CDMA_FLASH, radio_1_6::sendCDMAFeatureCodeResponse},
-    {RIL_REQUEST_CDMA_BURST_DTMF, radio_1_6::sendBurstDtmfResponse},
-    {RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY, NULL},
-    {RIL_REQUEST_CDMA_SEND_SMS, radio_1_6::sendCdmaSmsResponse},
-    {RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, radio_1_6::acknowledgeLastIncomingCdmaSmsResponse},
-    {RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG, radio_1_6::getGsmBroadcastConfigResponse},
-    {RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG, radio_1_6::setGsmBroadcastConfigResponse},
-    {RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION, radio_1_6::setGsmBroadcastActivationResponse},
-    {RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG, radio_1_6::getCdmaBroadcastConfigResponse},
-    {RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG, radio_1_6::setCdmaBroadcastConfigResponse},
-    {RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION, radio_1_6::setCdmaBroadcastActivationResponse},
-    {RIL_REQUEST_CDMA_SUBSCRIPTION, radio_1_6::getCDMASubscriptionResponse},
-    {RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM, radio_1_6::writeSmsToRuimResponse},
-    {RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM, radio_1_6::deleteSmsOnRuimResponse},
-    {RIL_REQUEST_DEVICE_IDENTITY, radio_1_6::getDeviceIdentityResponse},
-    {RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, radio_1_6::exitEmergencyCallbackModeResponse},
-    {RIL_REQUEST_GET_SMSC_ADDRESS, radio_1_6::getSmscAddressResponse},
-    {RIL_REQUEST_SET_SMSC_ADDRESS, radio_1_6::setSmscAddressResponse},
-    {RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, radio_1_6::reportSmsMemoryStatusResponse},
-    {RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, radio_1_6::reportStkServiceIsRunningResponse},
-    {RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, radio_1_6::getCdmaSubscriptionSourceResponse},
-    {RIL_REQUEST_ISIM_AUTHENTICATION, radio_1_6::requestIsimAuthenticationResponse},
-    {RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU, radio_1_6::acknowledgeIncomingGsmSmsWithPduResponse},
-    {RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, radio_1_6::sendEnvelopeWithStatusResponse},
-    {RIL_REQUEST_VOICE_RADIO_TECH, radio_1_6::getVoiceRadioTechnologyResponse},
-    {RIL_REQUEST_GET_CELL_INFO_LIST, radio_1_6::getCellInfoListResponse},
-    {RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE, radio_1_6::setCellInfoListRateResponse},
-    {RIL_REQUEST_SET_INITIAL_ATTACH_APN, radio_1_6::setInitialAttachApnResponse},
-    {RIL_REQUEST_IMS_REGISTRATION_STATE, radio_1_6::getImsRegistrationStateResponse},
-    {RIL_REQUEST_IMS_SEND_SMS, radio_1_6::sendImsSmsResponse},
-    {RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC, radio_1_6::iccTransmitApduBasicChannelResponse},
-    {RIL_REQUEST_SIM_OPEN_CHANNEL, radio_1_6::iccOpenLogicalChannelResponse},
-    {RIL_REQUEST_SIM_CLOSE_CHANNEL, radio_1_6::iccCloseLogicalChannelResponse},
-    {RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL, radio_1_6::iccTransmitApduLogicalChannelResponse},
-    {RIL_REQUEST_NV_READ_ITEM, radio_1_6::nvReadItemResponse},
-    {RIL_REQUEST_NV_WRITE_ITEM, radio_1_6::nvWriteItemResponse},
-    {RIL_REQUEST_NV_WRITE_CDMA_PRL, radio_1_6::nvWriteCdmaPrlResponse},
-    {RIL_REQUEST_NV_RESET_CONFIG, radio_1_6::nvResetConfigResponse},
-    {RIL_REQUEST_SET_UICC_SUBSCRIPTION, radio_1_6::setUiccSubscriptionResponse},
-    {RIL_REQUEST_ALLOW_DATA, radio_1_6::setDataAllowedResponse},
-    {RIL_REQUEST_GET_HARDWARE_CONFIG, radio_1_6::getHardwareConfigResponse},
-    {RIL_REQUEST_SIM_AUTHENTICATION, radio_1_6::requestIccSimAuthenticationResponse},
-    {RIL_REQUEST_GET_DC_RT_INFO, NULL},
-    {RIL_REQUEST_SET_DC_RT_INFO_RATE, NULL},
-    {RIL_REQUEST_SET_DATA_PROFILE, radio_1_6::setDataProfileResponse},
-    {RIL_REQUEST_SHUTDOWN, radio_1_6::requestShutdownResponse},
-    {RIL_REQUEST_GET_RADIO_CAPABILITY, radio_1_6::getRadioCapabilityResponse},
-    {RIL_REQUEST_SET_RADIO_CAPABILITY, radio_1_6::setRadioCapabilityResponse},
-    {RIL_REQUEST_START_LCE, radio_1_6::startLceServiceResponse},
-    {RIL_REQUEST_STOP_LCE, radio_1_6::stopLceServiceResponse},
-    {RIL_REQUEST_PULL_LCEDATA, radio_1_6::pullLceDataResponse},
-    {RIL_REQUEST_GET_ACTIVITY_INFO, radio_1_6::getModemActivityInfoResponse},
-    {RIL_REQUEST_SET_CARRIER_RESTRICTIONS, radio_1_6::setAllowedCarriersResponse},
-    {RIL_REQUEST_GET_CARRIER_RESTRICTIONS, radio_1_6::getAllowedCarriersResponse},
-    {RIL_REQUEST_SEND_DEVICE_STATE, radio_1_6::sendDeviceStateResponse},
-    {RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER, radio_1_6::setIndicationFilterResponse},
-    {RIL_REQUEST_SET_SIM_CARD_POWER, radio_1_6::setSimCardPowerResponse},
-    {RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION, radio_1_6::setCarrierInfoForImsiEncryptionResponse},
-    {RIL_REQUEST_START_NETWORK_SCAN, radio_1_6::startNetworkScanResponse},
-    {RIL_REQUEST_STOP_NETWORK_SCAN, radio_1_6::stopNetworkScanResponse},
-    {RIL_REQUEST_START_KEEPALIVE, radio_1_6::startKeepaliveResponse},
-    {RIL_REQUEST_STOP_KEEPALIVE, radio_1_6::stopKeepaliveResponse},
-    {RIL_REQUEST_GET_MODEM_STACK_STATUS, radio_1_6::getModemStackStatusResponse},
-    {RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE_BITMAP, radio_1_6::getPreferredNetworkTypeBitmapResponse},
-    {RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE_BITMAP, radio_1_6::setPreferredNetworkTypeBitmapResponse},
-    {RIL_REQUEST_EMERGENCY_DIAL, radio_1_6::emergencyDialResponse},
-    {RIL_REQUEST_SET_SYSTEM_SELECTION_CHANNELS, radio_1_6::setSystemSelectionChannelsResponse},
-    {RIL_REQUEST_ENABLE_MODEM, radio_1_6::enableModemResponse},
-    {RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA, radio_1_6::setSignalStrengthReportingCriteriaResponse},
-    {RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA, radio_1_6::setLinkCapacityReportingCriteriaResponse},
-    {RIL_REQUEST_ENABLE_UICC_APPLICATIONS, radio_1_6::enableUiccApplicationsResponse},
-    {RIL_REQUEST_ARE_UICC_APPLICATIONS_ENABLED, radio_1_6::areUiccApplicationsEnabledResponse},
-    {RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION, radio_1_6::supplySimDepersonalizationResponse},
-    {RIL_REQUEST_CDMA_SEND_SMS_EXPECT_MORE, radio_1_6::sendCdmaSmsExpectMoreResponse},
-    {RIL_REQUEST_GET_BARRING_INFO, radio_1_6::getBarringInfoResponse},
-    {RIL_REQUEST_ENABLE_NR_DUAL_CONNECTIVITY, radio_1_6::setNrDualConnectivityStateResponse},
-    {RIL_REQUEST_IS_NR_DUAL_CONNECTIVITY_ENABLED, radio_1_6::isNrDualConnectivityEnabledResponse},
-    {RIL_REQUEST_ALLOCATE_PDU_SESSION_ID, radio_1_6::allocatePduSessionIdResponse},
-    {RIL_REQUEST_RELEASE_PDU_SESSION_ID, radio_1_6::releasePduSessionIdResponse},
-    {RIL_REQUEST_START_HANDOVER, radio_1_6::startHandoverResponse},
-    {RIL_REQUEST_CANCEL_HANDOVER, radio_1_6::cancelHandoverResponse},
-    {RIL_REQUEST_SET_ALLOWED_NETWORK_TYPES_BITMAP, radio_1_6::setAllowedNetworkTypesBitmapResponse},
-    {RIL_REQUEST_SET_DATA_THROTTLING, radio_1_6::setDataThrottlingResponse},
-    {RIL_REQUEST_GET_SYSTEM_SELECTION_CHANNELS, radio_1_6::getSystemSelectionChannelsResponse},
-    {RIL_REQUEST_GET_ALLOWED_NETWORK_TYPES_BITMAP, radio_1_6::getAllowedNetworkTypesBitmapResponse},
-    {RIL_REQUEST_GET_SLICING_CONFIG, radio_1_6::getSlicingConfigResponse},
-    {RIL_REQUEST_GET_SIM_PHONEBOOK_RECORDS, radio_1_6::getSimPhonebookRecordsResponse},
-    {RIL_REQUEST_GET_SIM_PHONEBOOK_CAPACITY, radio_1_6::getSimPhonebookCapacityResponse},
-    {RIL_REQUEST_UPDATE_SIM_PHONEBOOK_RECORDS, radio_1_6::updateSimPhonebookRecordsResponse}
+{0, NULL},  // none
+        {RIL_REQUEST_GET_SIM_STATUS, radio_1_6::getIccCardStatusResponse},
+        {RIL_REQUEST_ENTER_SIM_PIN, radio_1_6::supplyIccPinForAppResponse},
+        {RIL_REQUEST_ENTER_SIM_PUK, radio_1_6::supplyIccPukForAppResponse},
+        {RIL_REQUEST_ENTER_SIM_PIN2, radio_1_6::supplyIccPin2ForAppResponse},
+        {RIL_REQUEST_ENTER_SIM_PUK2, radio_1_6::supplyIccPuk2ForAppResponse},
+        {RIL_REQUEST_CHANGE_SIM_PIN, radio_1_6::changeIccPinForAppResponse},
+        {RIL_REQUEST_CHANGE_SIM_PIN2, radio_1_6::changeIccPin2ForAppResponse},
+        {RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION,
+         radio_1_6::supplyNetworkDepersonalizationResponse},
+        {RIL_REQUEST_GET_CURRENT_CALLS, radio_1_6::getCurrentCallsResponse},
+        {RIL_REQUEST_DIAL, radio_1_6::dialResponse},
+        {RIL_REQUEST_GET_IMSI, radio_1_6::getIMSIForAppResponse},
+        {RIL_REQUEST_HANGUP, radio_1_6::hangupConnectionResponse},
+        {RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND, radio_1_6::hangupWaitingOrBackgroundResponse},
+        {RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND,
+         radio_1_6::hangupForegroundResumeBackgroundResponse},
+        {RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE,
+         radio_1_6::switchWaitingOrHoldingAndActiveResponse},
+        {RIL_REQUEST_CONFERENCE, radio_1_6::conferenceResponse},
+        {RIL_REQUEST_UDUB, radio_1_6::rejectCallResponse},
+        {RIL_REQUEST_LAST_CALL_FAIL_CAUSE, radio_1_6::getLastCallFailCauseResponse},
+        {RIL_REQUEST_SIGNAL_STRENGTH, radio_1_6::getSignalStrengthResponse},
+        {RIL_REQUEST_VOICE_REGISTRATION_STATE, radio_1_6::getVoiceRegistrationStateResponse},
+        {RIL_REQUEST_DATA_REGISTRATION_STATE, radio_1_6::getDataRegistrationStateResponse},
+        {RIL_REQUEST_OPERATOR, radio_1_6::getOperatorResponse},
+        {RIL_REQUEST_RADIO_POWER, radio_1_6::setRadioPowerResponse},
+        {RIL_REQUEST_DTMF, radio_1_6::sendDtmfResponse},
+        {RIL_REQUEST_SEND_SMS, radio_1_6::sendSmsResponse},
+        {RIL_REQUEST_SEND_SMS_EXPECT_MORE, radio_1_6::sendSmsExpectMoreResponse},
+        {RIL_REQUEST_SETUP_DATA_CALL, radio_1_6::setupDataCallResponse},
+        {RIL_REQUEST_SIM_IO, radio_1_6::iccIOForAppResponse},
+        {RIL_REQUEST_SEND_USSD, radio_1_6::sendUssdResponse},
+        {RIL_REQUEST_CANCEL_USSD, radio_1_6::cancelPendingUssdResponse},
+        {RIL_REQUEST_GET_CLIR, radio_1_6::getClirResponse},
+        {RIL_REQUEST_SET_CLIR, radio_1_6::setClirResponse},
+        {RIL_REQUEST_QUERY_CALL_FORWARD_STATUS, radio_1_6::getCallForwardStatusResponse},
+        {RIL_REQUEST_SET_CALL_FORWARD, radio_1_6::setCallForwardResponse},
+        {RIL_REQUEST_QUERY_CALL_WAITING, radio_1_6::getCallWaitingResponse},
+        {RIL_REQUEST_SET_CALL_WAITING, radio_1_6::setCallWaitingResponse},
+        {RIL_REQUEST_SMS_ACKNOWLEDGE, radio_1_6::acknowledgeLastIncomingGsmSmsResponse},
+        {RIL_REQUEST_GET_IMEI, NULL}, {RIL_REQUEST_GET_IMEISV, NULL},
+        {RIL_REQUEST_ANSWER, radio_1_6::acceptCallResponse},
+        {RIL_REQUEST_DEACTIVATE_DATA_CALL, radio_1_6::deactivateDataCallResponse},
+        {RIL_REQUEST_QUERY_FACILITY_LOCK, radio_1_6::getFacilityLockForAppResponse},
+        {RIL_REQUEST_SET_FACILITY_LOCK, radio_1_6::setFacilityLockForAppResponse},
+        {RIL_REQUEST_CHANGE_BARRING_PASSWORD, radio_1_6::setBarringPasswordResponse},
+        {RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE, radio_1_6::getNetworkSelectionModeResponse},
+        {RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,
+         radio_1_6::setNetworkSelectionModeAutomaticResponse},
+        {RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,
+         radio_1_6::setNetworkSelectionModeManualResponse},
+        {RIL_REQUEST_QUERY_AVAILABLE_NETWORKS, radio_1_6::getAvailableNetworksResponse},
+        {RIL_REQUEST_DTMF_START, radio_1_6::startDtmfResponse},
+        {RIL_REQUEST_DTMF_STOP, radio_1_6::stopDtmfResponse},
+        {RIL_REQUEST_BASEBAND_VERSION, radio_1_6::getBasebandVersionResponse},
+        {RIL_REQUEST_SEPARATE_CONNECTION, radio_1_6::separateConnectionResponse},
+        {RIL_REQUEST_SET_MUTE, radio_1_6::setMuteResponse},
+        {RIL_REQUEST_GET_MUTE, radio_1_6::getMuteResponse},
+        {RIL_REQUEST_QUERY_CLIP, radio_1_6::getClipResponse},
+        {RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE, NULL},
+        {RIL_REQUEST_DATA_CALL_LIST, radio_1_6::getDataCallListResponse},
+        {RIL_REQUEST_RESET_RADIO, NULL},
+        {RIL_REQUEST_OEM_HOOK_RAW, radio_1_6::sendRequestRawResponse},
+        {RIL_REQUEST_OEM_HOOK_STRINGS, radio_1_6::sendRequestStringsResponse},
+        {RIL_REQUEST_SCREEN_STATE,
+         radio_1_6::sendDeviceStateResponse},  // Note the response function is different.
+        {RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, radio_1_6::setSuppServiceNotificationsResponse},
+        {RIL_REQUEST_WRITE_SMS_TO_SIM, radio_1_6::writeSmsToSimResponse},
+        {RIL_REQUEST_DELETE_SMS_ON_SIM, radio_1_6::deleteSmsOnSimResponse},
+        {RIL_REQUEST_SET_BAND_MODE, radio_1_6::setBandModeResponse},
+        {RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE, radio_1_6::getAvailableBandModesResponse},
+        {RIL_REQUEST_STK_GET_PROFILE, NULL}, {RIL_REQUEST_STK_SET_PROFILE, NULL},
+        {RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND, radio_1_6::sendEnvelopeResponse},
+        {RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE, radio_1_6::sendTerminalResponseToSimResponse},
+        {RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM,
+         radio_1_6::handleStkCallSetupRequestFromSimResponse},
+        {RIL_REQUEST_EXPLICIT_CALL_TRANSFER, radio_1_6::explicitCallTransferResponse},
+        {RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE, radio_1_6::setPreferredNetworkTypeResponse},
+        {RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE, radio_1_6::getPreferredNetworkTypeResponse},
+        {RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, radio_1_6::getNeighboringCidsResponse},
+        {RIL_REQUEST_SET_LOCATION_UPDATES, radio_1_6::setLocationUpdatesResponse},
+        {RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE, radio_1_6::setCdmaSubscriptionSourceResponse},
+        {RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE, radio_1_6::setCdmaRoamingPreferenceResponse},
+        {RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE, radio_1_6::getCdmaRoamingPreferenceResponse},
+        {RIL_REQUEST_SET_TTY_MODE, radio_1_6::setTTYModeResponse},
+        {RIL_REQUEST_QUERY_TTY_MODE, radio_1_6::getTTYModeResponse},
+        {RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE,
+         radio_1_6::setPreferredVoicePrivacyResponse},
+        {RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE,
+         radio_1_6::getPreferredVoicePrivacyResponse},
+        {RIL_REQUEST_CDMA_FLASH, radio_1_6::sendCDMAFeatureCodeResponse},
+        {RIL_REQUEST_CDMA_BURST_DTMF, radio_1_6::sendBurstDtmfResponse},
+        {RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY, NULL},
+        {RIL_REQUEST_CDMA_SEND_SMS, radio_1_6::sendCdmaSmsResponse},
+        {RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, radio_1_6::acknowledgeLastIncomingCdmaSmsResponse},
+        {RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG, radio_1_6::getGsmBroadcastConfigResponse},
+        {RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG, radio_1_6::setGsmBroadcastConfigResponse},
+        {RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION, radio_1_6::setGsmBroadcastActivationResponse},
+        {RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG, radio_1_6::getCdmaBroadcastConfigResponse},
+        {RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG, radio_1_6::setCdmaBroadcastConfigResponse},
+        {RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION, radio_1_6::setCdmaBroadcastActivationResponse},
+        {RIL_REQUEST_CDMA_SUBSCRIPTION, radio_1_6::getCDMASubscriptionResponse},
+        {RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM, radio_1_6::writeSmsToRuimResponse},
+        {RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM, radio_1_6::deleteSmsOnRuimResponse},
+        {RIL_REQUEST_DEVICE_IDENTITY, radio_1_6::getDeviceIdentityResponse},
+        {RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE, radio_1_6::exitEmergencyCallbackModeResponse},
+        {RIL_REQUEST_GET_SMSC_ADDRESS, radio_1_6::getSmscAddressResponse},
+        {RIL_REQUEST_SET_SMSC_ADDRESS, radio_1_6::setSmscAddressResponse},
+        {RIL_REQUEST_REPORT_SMS_MEMORY_STATUS, radio_1_6::reportSmsMemoryStatusResponse},
+        {RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING, radio_1_6::reportStkServiceIsRunningResponse},
+        {RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE, radio_1_6::getCdmaSubscriptionSourceResponse},
+        {RIL_REQUEST_ISIM_AUTHENTICATION, radio_1_6::requestIsimAuthenticationResponse},
+        {RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU,
+         radio_1_6::acknowledgeIncomingGsmSmsWithPduResponse},
+        {RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS, radio_1_6::sendEnvelopeWithStatusResponse},
+        {RIL_REQUEST_VOICE_RADIO_TECH, radio_1_6::getVoiceRadioTechnologyResponse},
+        {RIL_REQUEST_GET_CELL_INFO_LIST, radio_1_6::getCellInfoListResponse},
+        {RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE, radio_1_6::setCellInfoListRateResponse},
+        {RIL_REQUEST_SET_INITIAL_ATTACH_APN, radio_1_6::setInitialAttachApnResponse},
+        {RIL_REQUEST_IMS_REGISTRATION_STATE, radio_1_6::getImsRegistrationStateResponse},
+        {RIL_REQUEST_IMS_SEND_SMS, radio_1_6::sendImsSmsResponse},
+        {RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC, radio_1_6::iccTransmitApduBasicChannelResponse},
+        {RIL_REQUEST_SIM_OPEN_CHANNEL, radio_1_6::iccOpenLogicalChannelResponse},
+        {RIL_REQUEST_SIM_CLOSE_CHANNEL, radio_1_6::iccCloseLogicalChannelResponse},
+        {RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL, radio_1_6::iccTransmitApduLogicalChannelResponse},
+        {RIL_REQUEST_NV_READ_ITEM, radio_1_6::nvReadItemResponse},
+        {RIL_REQUEST_NV_WRITE_ITEM, radio_1_6::nvWriteItemResponse},
+        {RIL_REQUEST_NV_WRITE_CDMA_PRL, radio_1_6::nvWriteCdmaPrlResponse},
+        {RIL_REQUEST_NV_RESET_CONFIG, radio_1_6::nvResetConfigResponse},
+        {RIL_REQUEST_SET_UICC_SUBSCRIPTION, radio_1_6::setUiccSubscriptionResponse},
+        {RIL_REQUEST_ALLOW_DATA, radio_1_6::setDataAllowedResponse},
+        {RIL_REQUEST_GET_HARDWARE_CONFIG, radio_1_6::getHardwareConfigResponse},
+        {RIL_REQUEST_SIM_AUTHENTICATION, radio_1_6::requestIccSimAuthenticationResponse},
+        {RIL_REQUEST_GET_DC_RT_INFO, NULL}, {RIL_REQUEST_SET_DC_RT_INFO_RATE, NULL},
+        {RIL_REQUEST_SET_DATA_PROFILE, radio_1_6::setDataProfileResponse},
+        {RIL_REQUEST_SHUTDOWN, radio_1_6::requestShutdownResponse},
+        {RIL_REQUEST_GET_RADIO_CAPABILITY, radio_1_6::getRadioCapabilityResponse},
+        {RIL_REQUEST_SET_RADIO_CAPABILITY, radio_1_6::setRadioCapabilityResponse},
+        {RIL_REQUEST_START_LCE, radio_1_6::startLceServiceResponse},
+        {RIL_REQUEST_STOP_LCE, radio_1_6::stopLceServiceResponse},
+        {RIL_REQUEST_PULL_LCEDATA, radio_1_6::pullLceDataResponse},
+        {RIL_REQUEST_GET_ACTIVITY_INFO, radio_1_6::getModemActivityInfoResponse},
+        {RIL_REQUEST_SET_CARRIER_RESTRICTIONS, radio_1_6::setAllowedCarriersResponse},
+        {RIL_REQUEST_GET_CARRIER_RESTRICTIONS, radio_1_6::getAllowedCarriersResponse},
+        {RIL_REQUEST_SEND_DEVICE_STATE, radio_1_6::sendDeviceStateResponse},
+        {RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER, radio_1_6::setIndicationFilterResponse},
+        {RIL_REQUEST_SET_SIM_CARD_POWER, radio_1_6::setSimCardPowerResponse},
+        {RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION,
+         radio_1_6::setCarrierInfoForImsiEncryptionResponse},
+        {RIL_REQUEST_START_NETWORK_SCAN, radio_1_6::startNetworkScanResponse},
+        {RIL_REQUEST_STOP_NETWORK_SCAN, radio_1_6::stopNetworkScanResponse},
+        {RIL_REQUEST_START_KEEPALIVE, radio_1_6::startKeepaliveResponse},
+        {RIL_REQUEST_STOP_KEEPALIVE, radio_1_6::stopKeepaliveResponse},
+        {RIL_REQUEST_GET_MODEM_STACK_STATUS, radio_1_6::getModemStackStatusResponse},
+        {RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE_BITMAP,
+         radio_1_6::getPreferredNetworkTypeBitmapResponse},
+        {RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE_BITMAP,
+         radio_1_6::setPreferredNetworkTypeBitmapResponse},
+        {RIL_REQUEST_EMERGENCY_DIAL, radio_1_6::emergencyDialResponse},
+        {RIL_REQUEST_SET_SYSTEM_SELECTION_CHANNELS, radio_1_6::setSystemSelectionChannelsResponse},
+        {RIL_REQUEST_ENABLE_MODEM, radio_1_6::enableModemResponse},
+        {RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA,
+         radio_1_6::setSignalStrengthReportingCriteriaResponse},
+        {RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA,
+         radio_1_6::setLinkCapacityReportingCriteriaResponse},
+        {RIL_REQUEST_ENABLE_UICC_APPLICATIONS, radio_1_6::enableUiccApplicationsResponse},
+        {RIL_REQUEST_ARE_UICC_APPLICATIONS_ENABLED, radio_1_6::areUiccApplicationsEnabledResponse},
+        {RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION, radio_1_6::supplySimDepersonalizationResponse},
+        {RIL_REQUEST_CDMA_SEND_SMS_EXPECT_MORE, radio_1_6::sendCdmaSmsExpectMoreResponse},
+        {RIL_REQUEST_GET_BARRING_INFO, radio_1_6::getBarringInfoResponse},
+        {RIL_REQUEST_ENABLE_NR_DUAL_CONNECTIVITY, radio_1_6::setNrDualConnectivityStateResponse},
+        {RIL_REQUEST_IS_NR_DUAL_CONNECTIVITY_ENABLED,
+         radio_1_6::isNrDualConnectivityEnabledResponse},
+        {RIL_REQUEST_ALLOCATE_PDU_SESSION_ID, radio_1_6::allocatePduSessionIdResponse},
+        {RIL_REQUEST_RELEASE_PDU_SESSION_ID, radio_1_6::releasePduSessionIdResponse},
+        {RIL_REQUEST_START_HANDOVER, radio_1_6::startHandoverResponse},
+        {RIL_REQUEST_CANCEL_HANDOVER, radio_1_6::cancelHandoverResponse},
+        {RIL_REQUEST_SET_ALLOWED_NETWORK_TYPES_BITMAP,
+         radio_1_6::setAllowedNetworkTypesBitmapResponse},
+        {RIL_REQUEST_SET_DATA_THROTTLING, radio_1_6::setDataThrottlingResponse},
+        {RIL_REQUEST_GET_SYSTEM_SELECTION_CHANNELS, radio_1_6::getSystemSelectionChannelsResponse},
+        {RIL_REQUEST_GET_ALLOWED_NETWORK_TYPES_BITMAP,
+         radio_1_6::getAllowedNetworkTypesBitmapResponse},
+        {RIL_REQUEST_GET_SLICING_CONFIG, radio_1_6::getSlicingConfigResponse},
+        {RIL_REQUEST_GET_SIM_PHONEBOOK_RECORDS, radio_1_6::getSimPhonebookRecordsResponse},
+        {RIL_REQUEST_GET_SIM_PHONEBOOK_CAPACITY, radio_1_6::getSimPhonebookCapacityResponse},
+        {RIL_REQUEST_UPDATE_SIM_PHONEBOOK_RECORDS, radio_1_6::updateSimPhonebookRecordsResponse},
+        {RIL_REQUEST_GET_CELL_INFO_LIST_1_6, radio_1_6::getCellInfoListResponse
+}
diff --git a/guest/hals/ril/reference-libril/ril_service.cpp b/guest/hals/ril/reference-libril/ril_service.cpp
index c7b80a6..8f2b948 100644
--- a/guest/hals/ril/reference-libril/ril_service.cpp
+++ b/guest/hals/ril/reference-libril/ril_service.cpp
@@ -119,26 +119,46 @@
 void convertRilSignalStrengthToHal(void *response, size_t responseLen,
         SignalStrength& signalStrength);
 
-void convertRilDataCallToHal(RIL_Data_Call_Response_v11 *dcResponse,
-        SetupDataCallResult& dcResult);
+void convertRilSignalStrengthToHal_1_2(void* response, size_t responseLen,
+                                       V1_2::SignalStrength& signalStrength);
 
 void convertRilSignalStrengthToHal_1_4(void *response, size_t responseLen,
         V1_4::SignalStrength& signalStrength);
 
-void convertRilDataCallToHal(RIL_Data_Call_Response_v11 *dcResponse,
-        ::android::hardware::radio::V1_4::SetupDataCallResult& dcResult);
+void convertRilSignalStrengthToHal_1_6(void* response, size_t responseLen,
+                                       V1_6::SignalStrength& signalStrength);
 
-void convertRilDataCallToHal(RIL_Data_Call_Response_v12 *dcResponse,
-        ::android::hardware::radio::V1_5::SetupDataCallResult& dcResult);
+void convertRilDataCallToHal(RIL_Data_Call_Response_v11* dcResponse, SetupDataCallResult& dcResult);
 
-void convertRilDataCallToHal(RIL_Data_Call_Response_v12 *dcResponse,
-        ::android::hardware::radio::V1_6::SetupDataCallResult& dcResult);
+void convertRilDataCallToHal(RIL_Data_Call_Response_v11* dcResponse,
+                             V1_4::SetupDataCallResult& dcResult);
+
+void convertRilDataCallToHal(RIL_Data_Call_Response_v12* dcResponse,
+                             V1_5::SetupDataCallResult& dcResult);
+
+void convertRilDataCallToHal(RIL_Data_Call_Response_v12* dcResponse,
+                             V1_6::SetupDataCallResult& dcResult);
 
 void convertRilDataCallListToHal(void *response, size_t responseLen,
         hidl_vec<SetupDataCallResult>& dcResultList);
 
+void convertRilDataCallListToHal_1_4(void* response, size_t responseLen,
+                                     hidl_vec<V1_4::SetupDataCallResult>& dcResultList);
+
+void convertRilDataCallListToHal_1_5(void* response, size_t responseLen,
+                                     hidl_vec<V1_5::SetupDataCallResult>& dcResultList);
+
+void convertRilDataCallListToHal_1_6(void* response, size_t responseLen,
+                                     hidl_vec<V1_6::SetupDataCallResult>& dcResultList);
+
 void convertRilCellInfoListToHal(void *response, size_t responseLen, hidl_vec<CellInfo>& records);
 void convertRilCellInfoListToHal_1_2(void *response, size_t responseLen, hidl_vec<V1_2::CellInfo>& records);
+void convertRilCellInfoListToHal_1_4(void* response, size_t responseLen,
+                                     hidl_vec<V1_4::CellInfo>& records);
+void convertRilCellInfoListToHal_1_5(void* response, size_t responseLen,
+                                     hidl_vec<V1_5::CellInfo>& records);
+void convertRilCellInfoListToHal_1_6(void* response, size_t responseLen,
+                                     hidl_vec<V1_6::CellInfo>& records);
 
 void populateResponseInfo(RadioResponseInfo& responseInfo, int serial, int responseType,
                          RIL_Errno e);
@@ -2428,7 +2448,7 @@
 #if VDBG
     RLOGD("getCellInfoList_1_6: serial %d", serial);
 #endif
-    dispatchVoid(serial, mSlotId, RIL_REQUEST_GET_CELL_INFO_LIST);
+    dispatchVoid(serial, mSlotId, RIL_REQUEST_GET_CELL_INFO_LIST_1_6);
     return Void();
 }
 
@@ -3501,12 +3521,14 @@
              e = RIL_E_SUCCESS;
          }
          populateResponseInfo(responseInfo, serial, RESPONSE_SOLICITED, e);
-         Return<void> retStatus
-                   = radioService[mSlotId]->mRadioResponseV1_2->setSignalStrengthReportingCriteriaResponse(responseInfo);
+         Return<void> retStatus =
+                 radioService[mSlotId]
+                         ->mRadioResponseV1_2->setSignalStrengthReportingCriteriaResponse(
+                                 responseInfo);
          radioService[mSlotId]->checkReturnStatus(retStatus);
     } else {
-        RLOGE("setIndicationFilterResponse: radioService[%d]->mRadioResponse == NULL",
-           mSlotId);
+        RLOGE("setSignalStrengthReportingCriteria: radioService[%d]->mRadioResponse == NULL",
+              mSlotId);
     }
     return Void();
 }
@@ -4458,8 +4480,9 @@
     populateResponseInfo(responseInfo, serial, RESPONSE_SOLICITED, RIL_E_SUCCESS);
 
     if (radioService[mSlotId]->mRadioResponseV1_5 != NULL) {
-        Return<void> retStatus
-                = radioService[mSlotId]->mRadioResponseV1_5->setInitialAttachApnResponse(responseInfo);
+        Return<void> retStatus =
+                radioService[mSlotId]->mRadioResponseV1_5->setInitialAttachApnResponse_1_5(
+                        responseInfo);
     } else if (radioService[mSlotId]->mRadioResponseV1_4 != NULL) {
         Return<void> retStatus
                 = radioService[mSlotId]->mRadioResponseV1_4->setInitialAttachApnResponse(responseInfo);
@@ -4487,8 +4510,8 @@
     populateResponseInfo(responseInfo, serial, RESPONSE_SOLICITED, RIL_E_SUCCESS);
 
     if (radioService[mSlotId]->mRadioResponseV1_5 != NULL) {
-        Return<void> retStatus
-                = radioService[mSlotId]->mRadioResponseV1_5->setDataProfileResponse(responseInfo);
+        Return<void> retStatus =
+                radioService[mSlotId]->mRadioResponseV1_5->setDataProfileResponse_1_5(responseInfo);
     } else if (radioService[mSlotId]->mRadioResponseV1_4 != NULL) {
         Return<void> retStatus
                 = radioService[mSlotId]->mRadioResponseV1_4->setDataProfileResponse(responseInfo);
@@ -5123,57 +5146,134 @@
     return 0;
 }
 
-int radio_1_6::getCurrentCallsResponse(int slotId,
-                                  int responseType, int serial, RIL_Errno e,
-                                  void *response, size_t responseLen) {
+int radio_1_6::getCurrentCallsResponse(int slotId, int responseType, int serial, RIL_Errno e,
+                                       void* response, size_t responseLen) {
 #if VDBG
     RLOGD("getCurrentCallsResponse: serial %d", serial);
 #endif
 
-    if (radioService[slotId]->mRadioResponse != NULL) {
+    if (radioService[slotId]->mRadioResponseV1_6 != NULL ||
+        radioService[slotId]->mRadioResponseV1_2 != NULL ||
+        radioService[slotId]->mRadioResponse != NULL) {
+        V1_6::RadioResponseInfo responseInfo16 = {};
         RadioResponseInfo responseInfo = {};
-        populateResponseInfo(responseInfo, serial, responseType, e);
-
-        hidl_vec<Call> calls;
-        if ((response == NULL && responseLen != 0)
-                || (responseLen % sizeof(RIL_Call *)) != 0) {
-            RLOGE("getCurrentCallsResponse: Invalid response");
-            if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
+        if (radioService[slotId]->mRadioResponseV1_6 != NULL) {
+            populateResponseInfo_1_6(responseInfo16, serial, responseType, e);
         } else {
-            int num = responseLen / sizeof(RIL_Call *);
-            calls.resize(num);
-
-            for (int i = 0 ; i < num ; i++) {
-                RIL_Call *p_cur = ((RIL_Call **) response)[i];
-                /* each call info */
-                calls[i].state = (CallState) p_cur->state;
-                calls[i].index = p_cur->index;
-                calls[i].toa = p_cur->toa;
-                calls[i].isMpty = p_cur->isMpty;
-                calls[i].isMT = p_cur->isMT;
-                calls[i].als = p_cur->als;
-                calls[i].isVoice = p_cur->isVoice;
-                calls[i].isVoicePrivacy = p_cur->isVoicePrivacy;
-                calls[i].number = convertCharPtrToHidlString(p_cur->number);
-                calls[i].numberPresentation = (CallPresentation) p_cur->numberPresentation;
-                calls[i].name = convertCharPtrToHidlString(p_cur->name);
-                calls[i].namePresentation = (CallPresentation) p_cur->namePresentation;
-                if (p_cur->uusInfo != NULL && p_cur->uusInfo->uusData != NULL) {
-                    RIL_UUS_Info *uusInfo = p_cur->uusInfo;
-                    calls[i].uusInfo.resize(1);
-                    calls[i].uusInfo[0].uusType = (UusType) uusInfo->uusType;
-                    calls[i].uusInfo[0].uusDcs = (UusDcs) uusInfo->uusDcs;
-                    // convert uusInfo->uusData to a null-terminated string
-                    char *nullTermStr = strndup(uusInfo->uusData, uusInfo->uusLength);
-                    calls[i].uusInfo[0].uusData = nullTermStr;
-                    free(nullTermStr);
-                }
-            }
+            populateResponseInfo(responseInfo, serial, responseType, e);
         }
+        if ((response == NULL && responseLen != 0) || (responseLen % sizeof(RIL_Call*)) != 0) {
+            RLOGE("getCurrentCallsResponse: Invalid response");
+            if (e == RIL_E_SUCCESS) {
+                responseInfo16.error = V1_6::RadioError::INVALID_RESPONSE;
+                responseInfo.error = RadioError::INVALID_RESPONSE;
+            }
+            return 0;
+        } else {
+            Return<void> retStatus;
+            if (radioService[slotId]->mRadioResponseV1_6 != NULL) {
+                hidl_vec<V1_6::Call> calls;
+                int num = responseLen / sizeof(RIL_Call*);
+                calls.resize(num);
 
-        Return<void> retStatus = radioService[slotId]->mRadioResponse->
-                getCurrentCallsResponse(responseInfo, calls);
-        radioService[slotId]->checkReturnStatus(retStatus);
+                for (int i = 0; i < num; i++) {
+                    RIL_Call* p_cur = ((RIL_Call**)response)[i];
+                    /* each call info */
+                    calls[i].base.base.state = (CallState)p_cur->state;
+                    calls[i].base.base.index = p_cur->index;
+                    calls[i].base.base.toa = p_cur->toa;
+                    calls[i].base.base.isMpty = p_cur->isMpty;
+                    calls[i].base.base.isMT = p_cur->isMT;
+                    calls[i].base.base.als = p_cur->als;
+                    calls[i].base.base.isVoice = p_cur->isVoice;
+                    calls[i].base.base.isVoicePrivacy = p_cur->isVoicePrivacy;
+                    calls[i].base.base.number = convertCharPtrToHidlString(p_cur->number);
+                    calls[i].base.base.numberPresentation =
+                            (CallPresentation)p_cur->numberPresentation;
+                    calls[i].base.base.name = convertCharPtrToHidlString(p_cur->name);
+                    calls[i].base.base.namePresentation = (CallPresentation)p_cur->namePresentation;
+                    if (p_cur->uusInfo != NULL && p_cur->uusInfo->uusData != NULL) {
+                        RIL_UUS_Info* uusInfo = p_cur->uusInfo;
+                        calls[i].base.base.uusInfo.resize(1);
+                        calls[i].base.base.uusInfo[0].uusType = (UusType)uusInfo->uusType;
+                        calls[i].base.base.uusInfo[0].uusDcs = (UusDcs)uusInfo->uusDcs;
+                        // convert uusInfo->uusData to a null-terminated string
+                        char* nullTermStr = strndup(uusInfo->uusData, uusInfo->uusLength);
+                        calls[i].base.base.uusInfo[0].uusData = nullTermStr;
+                        free(nullTermStr);
+                    }
+                }
+                retStatus = radioService[slotId]->mRadioResponseV1_6->getCurrentCallsResponse_1_6(
+                        responseInfo16, calls);
+            } else if (radioService[slotId]->mRadioResponseV1_2 != NULL) {
+                hidl_vec<V1_2::Call> calls;
+                int num = responseLen / sizeof(RIL_Call*);
+                calls.resize(num);
+
+                for (int i = 0; i < num; i++) {
+                    RIL_Call* p_cur = ((RIL_Call**)response)[i];
+                    /* each call info */
+                    calls[i].base.state = (CallState)p_cur->state;
+                    calls[i].base.index = p_cur->index;
+                    calls[i].base.toa = p_cur->toa;
+                    calls[i].base.isMpty = p_cur->isMpty;
+                    calls[i].base.isMT = p_cur->isMT;
+                    calls[i].base.als = p_cur->als;
+                    calls[i].base.isVoice = p_cur->isVoice;
+                    calls[i].base.isVoicePrivacy = p_cur->isVoicePrivacy;
+                    calls[i].base.number = convertCharPtrToHidlString(p_cur->number);
+                    calls[i].base.numberPresentation = (CallPresentation)p_cur->numberPresentation;
+                    calls[i].base.name = convertCharPtrToHidlString(p_cur->name);
+                    calls[i].base.namePresentation = (CallPresentation)p_cur->namePresentation;
+                    if (p_cur->uusInfo != NULL && p_cur->uusInfo->uusData != NULL) {
+                        RIL_UUS_Info* uusInfo = p_cur->uusInfo;
+                        calls[i].base.uusInfo.resize(1);
+                        calls[i].base.uusInfo[0].uusType = (UusType)uusInfo->uusType;
+                        calls[i].base.uusInfo[0].uusDcs = (UusDcs)uusInfo->uusDcs;
+                        // convert uusInfo->uusData to a null-terminated string
+                        char* nullTermStr = strndup(uusInfo->uusData, uusInfo->uusLength);
+                        calls[i].base.uusInfo[0].uusData = nullTermStr;
+                        free(nullTermStr);
+                    }
+                }
+                retStatus = radioService[slotId]->mRadioResponseV1_2->getCurrentCallsResponse_1_2(
+                        responseInfo, calls);
+            } else {
+                hidl_vec<Call> calls;
+                int num = responseLen / sizeof(RIL_Call*);
+                calls.resize(num);
+
+                for (int i = 0; i < num; i++) {
+                    RIL_Call* p_cur = ((RIL_Call**)response)[i];
+                    /* each call info */
+                    calls[i].state = (CallState)p_cur->state;
+                    calls[i].index = p_cur->index;
+                    calls[i].toa = p_cur->toa;
+                    calls[i].isMpty = p_cur->isMpty;
+                    calls[i].isMT = p_cur->isMT;
+                    calls[i].als = p_cur->als;
+                    calls[i].isVoice = p_cur->isVoice;
+                    calls[i].isVoicePrivacy = p_cur->isVoicePrivacy;
+                    calls[i].number = convertCharPtrToHidlString(p_cur->number);
+                    calls[i].numberPresentation = (CallPresentation)p_cur->numberPresentation;
+                    calls[i].name = convertCharPtrToHidlString(p_cur->name);
+                    calls[i].namePresentation = (CallPresentation)p_cur->namePresentation;
+                    if (p_cur->uusInfo != NULL && p_cur->uusInfo->uusData != NULL) {
+                        RIL_UUS_Info* uusInfo = p_cur->uusInfo;
+                        calls[i].uusInfo.resize(1);
+                        calls[i].uusInfo[0].uusType = (UusType)uusInfo->uusType;
+                        calls[i].uusInfo[0].uusDcs = (UusDcs)uusInfo->uusDcs;
+                        // convert uusInfo->uusData to a null-terminated string
+                        char* nullTermStr = strndup(uusInfo->uusData, uusInfo->uusLength);
+                        calls[i].uusInfo[0].uusData = nullTermStr;
+                        free(nullTermStr);
+                    }
+                }
+                retStatus = radioService[slotId]->mRadioResponse->getCurrentCallsResponse(
+                        responseInfo, calls);
+            }
+            radioService[slotId]->checkReturnStatus(retStatus);
+        }
     } else {
         RLOGE("getCurrentCallsResponse: radioService[%d]->mRadioResponse == NULL", slotId);
     }
@@ -5268,19 +5368,19 @@
                                                     RIL_Errno e, void *response,
                                                     size_t responseLen) {
 #if VDBG
-    RLOGD("hangupWaitingOrBackgroundResponse: serial %d", serial);
+    RLOGD("hangupForegroundResumeBackgroundResponse: serial %d", serial);
 #endif
 
     if (radioService[slotId]->mRadioResponse != NULL) {
         RadioResponseInfo responseInfo = {};
         populateResponseInfo(responseInfo, serial, responseType, e);
         Return<void> retStatus =
-                radioService[slotId]->mRadioResponse->hangupWaitingOrBackgroundResponse(
-                responseInfo);
+                radioService[slotId]->mRadioResponse->hangupForegroundResumeBackgroundResponse(
+                        responseInfo);
         radioService[slotId]->checkReturnStatus(retStatus);
     } else {
-        RLOGE("hangupWaitingOrBackgroundResponse: radioService[%d]->mRadioResponse == NULL",
-                slotId);
+        RLOGE("hangupForegroundResumeBackgroundResponse: radioService[%d]->mRadioResponse == NULL",
+              slotId);
     }
 
     return 0;
@@ -5362,7 +5462,7 @@
         LastCallFailCauseInfo info = {};
         info.vendorCause = hidl_string();
         if (response == NULL) {
-            RLOGE("getCurrentCallsResponse Invalid response: NULL");
+            RLOGE("getLastCallFailCauseResponse Invalid response: NULL");
             if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
         } else if (responseLen == sizeof(int)) {
             int *pInt = (int *) response;
@@ -5372,7 +5472,7 @@
             info.causeCode = (LastCallFailCause) pFailCauseInfo->cause_code;
             info.vendorCause = convertCharPtrToHidlString(pFailCauseInfo->vendor_cause);
         } else {
-            RLOGE("getCurrentCallsResponse Invalid response: NULL");
+            RLOGE("getLastCallFailCauseResponse Invalid response: NULL");
             if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
         }
 
@@ -5387,46 +5487,59 @@
     return 0;
 }
 
-int radio_1_6::getSignalStrengthResponse(int slotId,
-                                     int responseType, int serial, RIL_Errno e,
-                                     void *response, size_t responseLen) {
+int radio_1_6::getSignalStrengthResponse(int slotId, int responseType, int serial, RIL_Errno e,
+                                         void* response, size_t responseLen) {
 #if VDBG
     RLOGD("getSignalStrengthResponse: serial %d", serial);
 #endif
 
-    if (radioService[slotId]->mRadioResponseV1_4 != NULL) {
-        RadioResponseInfo responseInfo = {};
-        populateResponseInfo(responseInfo, serial, responseType, e);
-        ::android::hardware::radio::V1_4::SignalStrength signalStrength_1_4 = {};
-        if (response == NULL || responseLen != sizeof(RIL_SignalStrength_v12)) {
-            RLOGE("getSignalStrengthResponse: Invalid response");
-            if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
-        } else {
-            convertRilSignalStrengthToHal_1_4(response, responseLen, signalStrength_1_4);
-        }
-
-        //TODO: future implementation needs to fill tdScdma, wcdma and nr signal strength.
-
-        Return<void> retStatus = radioService[slotId]->mRadioResponseV1_4->
-                getSignalStrengthResponse_1_4(responseInfo, signalStrength_1_4);
-        radioService[slotId]->checkReturnStatus(retStatus);
-    } else if (radioService[slotId]->mRadioResponse != NULL) {
-        RadioResponseInfo responseInfo = {};
-        populateResponseInfo(responseInfo, serial, responseType, e);
-        SignalStrength signalStrength = {};
-        if (response == NULL || responseLen != sizeof(RIL_SignalStrength_v12)) {
-            RLOGE("getSignalStrengthResponse: Invalid response");
-            if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
-        } else {
-            convertRilSignalStrengthToHal(response, responseLen, signalStrength);
-        }
-
-        Return<void> retStatus = radioService[slotId]->mRadioResponse->getSignalStrengthResponse(
-                responseInfo, signalStrength);
-        radioService[slotId]->checkReturnStatus(retStatus);
+    V1_6::RadioResponseInfo responseInfo16 = {};
+    RadioResponseInfo responseInfo = {};
+    if (radioService[slotId]->mRadioResponseV1_6 != NULL) {
+        populateResponseInfo_1_6(responseInfo16, serial, responseType, e);
     } else {
-        RLOGE("getSignalStrengthResponse: radioService[%d]->mRadioResponse == NULL",
-                slotId);
+        populateResponseInfo(responseInfo, serial, responseType, e);
+    }
+
+    if (response == NULL || responseLen != sizeof(RIL_SignalStrength_v12)) {
+        RLOGE("getSignalStrengthResponse: Invalid response");
+        if (e == RIL_E_SUCCESS) {
+            responseInfo16.error = V1_6::RadioError::INVALID_RESPONSE;
+            responseInfo.error = RadioError::INVALID_RESPONSE;
+        }
+    } else {
+        if (radioService[slotId]->mRadioResponseV1_6 != NULL) {
+            V1_6::SignalStrength signalStrength_1_6 = {};
+            convertRilSignalStrengthToHal_1_6(response, responseLen, signalStrength_1_6);
+            Return<void> retStatus =
+                    radioService[slotId]->mRadioResponseV1_6->getSignalStrengthResponse_1_6(
+                            responseInfo16, signalStrength_1_6);
+            radioService[slotId]->checkReturnStatus(retStatus);
+        } else if (radioService[slotId]->mRadioResponseV1_4 != NULL) {
+            V1_4::SignalStrength signalStrength_1_4 = {};
+            convertRilSignalStrengthToHal_1_4(response, responseLen, signalStrength_1_4);
+            // TODO: future implementation needs to fill tdScdma, wcdma and nr signal strength.
+            Return<void> retStatus =
+                    radioService[slotId]->mRadioResponseV1_4->getSignalStrengthResponse_1_4(
+                            responseInfo, signalStrength_1_4);
+            radioService[slotId]->checkReturnStatus(retStatus);
+        } else if (radioService[slotId]->mRadioResponseV1_2 != NULL) {
+            V1_2::SignalStrength signalStrength_1_2 = {};
+            convertRilSignalStrengthToHal_1_2(response, responseLen, signalStrength_1_2);
+            Return<void> retStatus =
+                    radioService[slotId]->mRadioResponseV1_2->getSignalStrengthResponse_1_2(
+                            responseInfo, signalStrength_1_2);
+            radioService[slotId]->checkReturnStatus(retStatus);
+        } else if (radioService[slotId]->mRadioResponse != NULL) {
+            SignalStrength signalStrength = {};
+            convertRilSignalStrengthToHal(response, responseLen, signalStrength);
+            Return<void> retStatus =
+                    radioService[slotId]->mRadioResponse->getSignalStrengthResponse(responseInfo,
+                                                                                    signalStrength);
+            radioService[slotId]->checkReturnStatus(retStatus);
+        } else {
+            RLOGE("getSignalStrengthResponse: radioService[%d]->mRadioResponse == NULL", slotId);
+        }
     }
 
     return 0;
@@ -6483,9 +6596,8 @@
     return 0;
 }
 
-int radio_1_6::getDataRegistrationStateResponse(int slotId,
-                                           int responseType, int serial, RIL_Errno e,
-                                           void *response, size_t responseLen) {
+int radio_1_6::getDataRegistrationStateResponse(int slotId, int responseType, int serial,
+                                                RIL_Errno e, void* response, size_t responseLen) {
 #if VDBG
     RLOGD("getDataRegistrationStateResponse: serial %d", serial);
 #endif
@@ -6547,11 +6659,11 @@
                 }
 
                 Return<void> retStatus =
-                    radioService[slotId]
-                        ->mRadioResponseV1_6
-                        ->getVoiceRegistrationStateResponse_1_6(
-                            responseInfo_1_6, regResponse);
+                        radioService[slotId]
+                                ->mRadioResponseV1_6->getDataRegistrationStateResponse_1_6(
+                                        responseInfo_1_6, regResponse);
                 radioService[slotId]->checkReturnStatus(retStatus);
+                return 0;
             }
         } else if (s_vendorFunctions->version <= 14 &&
                    radioService[slotId]->mRadioResponseV1_5 != NULL) {
@@ -6587,11 +6699,11 @@
                         numStrings, resp);
 
                 Return<void> retStatus =
-                    radioService[slotId]
-                        ->mRadioResponseV1_5
-                        ->getDataRegistrationStateResponse_1_5(
-                            responseInfo, regResponse);
+                        radioService[slotId]
+                                ->mRadioResponseV1_5->getDataRegistrationStateResponse_1_5(
+                                        responseInfo, regResponse);
                 radioService[slotId]->checkReturnStatus(retStatus);
+                return 0;
             }
         } else if (s_vendorFunctions->version <= 14 &&
                     radioService[slotId]->mRadioResponseV1_2 != NULL) {
@@ -6611,6 +6723,7 @@
                 Return<void> retStatus = radioService[slotId]->mRadioResponseV1_2->
                         getDataRegistrationStateResponse_1_2(responseInfo, dataRegResponse);
                 radioService[slotId]->checkReturnStatus(retStatus);
+                return 0;
             }
       } else if (s_vendorFunctions->version <= 14) {
             int numStrings = responseLen / sizeof(char *);
@@ -7605,29 +7718,56 @@
     return 0;
 }
 
-int radio_1_6::getDataCallListResponse(int slotId,
-                                   int responseType, int serial, RIL_Errno e,
-                                   void *response, size_t responseLen) {
+int radio_1_6::getDataCallListResponse(int slotId, int responseType, int serial, RIL_Errno e,
+                                       void* response, size_t responseLen) {
 #if VDBG
     RLOGD("getDataCallListResponse: serial %d", serial);
 #endif
 
-    if (radioService[slotId]->mRadioResponse != NULL) {
+    if (radioService[slotId]->mRadioResponse != NULL ||
+        radioService[slotId]->mRadioResponseV1_4 != NULL ||
+        radioService[slotId]->mRadioResponseV1_5 != NULL ||
+        radioService[slotId]->mRadioResponseV1_6 != NULL) {
+        V1_6::RadioResponseInfo responseInfo16 = {};
         RadioResponseInfo responseInfo = {};
-        populateResponseInfo(responseInfo, serial, responseType, e);
+        if (radioService[slotId]->mRadioResponseV1_6 != NULL) {
+            populateResponseInfo_1_6(responseInfo16, serial, responseType, e);
+        } else {
+            populateResponseInfo(responseInfo, serial, responseType, e);
+        }
 
-        hidl_vec<SetupDataCallResult> ret;
         if ((response == NULL && responseLen != 0)
                 || responseLen % sizeof(RIL_Data_Call_Response_v11) != 0) {
             RLOGE("getDataCallListResponse: invalid response");
-            if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
+            if (e == RIL_E_SUCCESS) {
+                responseInfo16.error = V1_6::RadioError::INVALID_RESPONSE;
+                responseInfo.error = RadioError::INVALID_RESPONSE;
+            }
         } else {
-            convertRilDataCallListToHal(response, responseLen, ret);
+            Return<void> retStatus;
+            if (radioService[slotId]->mRadioResponseV1_6 != NULL) {
+                hidl_vec<V1_6::SetupDataCallResult> ret;
+                convertRilDataCallListToHal_1_6(response, responseLen, ret);
+                retStatus = radioService[slotId]->mRadioResponseV1_6->getDataCallListResponse_1_6(
+                        responseInfo16, ret);
+            } else if (radioService[slotId]->mRadioResponseV1_5 != NULL) {
+                hidl_vec<V1_5::SetupDataCallResult> ret;
+                convertRilDataCallListToHal_1_5(response, responseLen, ret);
+                retStatus = radioService[slotId]->mRadioResponseV1_5->getDataCallListResponse_1_5(
+                        responseInfo, ret);
+            } else if (radioService[slotId]->mRadioResponseV1_4 != NULL) {
+                hidl_vec<V1_4::SetupDataCallResult> ret;
+                convertRilDataCallListToHal_1_4(response, responseLen, ret);
+                retStatus = radioService[slotId]->mRadioResponseV1_4->getDataCallListResponse_1_4(
+                        responseInfo, ret);
+            } else {
+                hidl_vec<SetupDataCallResult> ret;
+                convertRilDataCallListToHal(response, responseLen, ret);
+                retStatus = radioService[slotId]->mRadioResponse->getDataCallListResponse(
+                        responseInfo, ret);
+            }
+            radioService[slotId]->checkReturnStatus(retStatus);
         }
-
-        Return<void> retStatus = radioService[slotId]->mRadioResponse->getDataCallListResponse(
-                responseInfo, ret);
-        radioService[slotId]->checkReturnStatus(retStatus);
     } else {
         RLOGE("getDataCallListResponse: radioService[%d]->mRadioResponse == NULL", slotId);
     }
@@ -8794,47 +8934,72 @@
     return 0;
 }
 
-int radio_1_6::getCellInfoListResponse(int slotId,
-                                   int responseType,
-                                   int serial, RIL_Errno e, void *response,
-                                   size_t responseLen) {
+int radio_1_6::getCellInfoListResponse(int slotId, int responseType, int serial, RIL_Errno e,
+                                       void* response, size_t responseLen) {
 #if VDBG
     RLOGD("getCellInfoListResponse: serial %d", serial);
 #endif
-
-    if (radioService[slotId]->mRadioResponse != NULL ||
-        radioService[slotId]->mRadioResponseV1_2 != NULL) {
+    if (radioService[slotId]->mRadioResponseV1_6 != NULL) {
+        V1_6::RadioResponseInfo responseInfo = {};
+        populateResponseInfo_1_6(responseInfo, serial, responseType, e);
+        hidl_vec<V1_6::CellInfo> ret;
+        Return<void> retStatus;
+        if (response != NULL && responseLen != 0 && responseLen % sizeof(RIL_CellInfo_v16) == 0) {
+            convertRilCellInfoListToHal_1_6(response, responseLen, ret);
+        } else {
+            RLOGE("getCellInfoListResponse_1_6: Invalid response");
+            if (e == RIL_E_SUCCESS) responseInfo.error = V1_6::RadioError::INVALID_RESPONSE;
+        }
+        retStatus = radioService[slotId]->mRadioResponseV1_6->getCellInfoListResponse_1_6(
+                responseInfo, ret);
+        radioService[slotId]->checkReturnStatus(retStatus);
+    } else if (radioService[slotId]->mRadioResponse != NULL ||
+               radioService[slotId]->mRadioResponseV1_2 != NULL ||
+               radioService[slotId]->mRadioResponseV1_4 != NULL ||
+               radioService[slotId]->mRadioResponseV1_5 != NULL) {
         RadioResponseInfo responseInfo = {};
         populateResponseInfo(responseInfo, serial, responseType, e);
-
+        bool error = response == NULL && responseLen != 0;
         Return<void> retStatus;
-        hidl_vec<CellInfo> ret;
-        if ((response == NULL && responseLen != 0)
-                || responseLen % sizeof(RIL_CellInfo_v12) != 0) {
-            RLOGE("getCellInfoListResponse: Invalid response");
-            if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
-
-            if (radioService[slotId]->mRadioResponseV1_2 != NULL) {
-                hidl_vec<V1_2::CellInfo> ret;
-                retStatus = radioService[slotId]->mRadioResponseV1_2->
-                        getCellInfoListResponse_1_2(responseInfo, ret);
+        if (radioService[slotId]->mRadioResponseV1_5 != NULL) {
+            hidl_vec<V1_5::CellInfo> ret;
+            if (!error && responseLen % sizeof(RIL_CellInfo_v16) != 0) {
+                convertRilCellInfoListToHal_1_5(response, responseLen, ret);
             } else {
-                hidl_vec<CellInfo> ret;
-                retStatus = radioService[slotId]->mRadioResponse->
-                        getCellInfoListResponse(responseInfo, ret);
+                RLOGE("getCellInfoListResponse_1_5: Invalid response");
+                if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
             }
-        } else {
-            if (radioService[slotId]->mRadioResponseV1_2 != NULL) {
-                hidl_vec<V1_2::CellInfo> ret;
+            retStatus = radioService[slotId]->mRadioResponseV1_5->getCellInfoListResponse_1_5(
+                    responseInfo, ret);
+        } else if (radioService[slotId]->mRadioResponseV1_4 != NULL) {
+            hidl_vec<V1_4::CellInfo> ret;
+            if (!error && responseLen % sizeof(RIL_CellInfo_v16) != 0) {
+                convertRilCellInfoListToHal_1_4(response, responseLen, ret);
+            } else {
+                RLOGE("getCellInfoListResponse_1_4: Invalid response");
+                if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
+            }
+            radioService[slotId]->mRadioResponseV1_4->getCellInfoListResponse_1_4(responseInfo,
+                                                                                  ret);
+        } else if (radioService[slotId]->mRadioResponseV1_2 != NULL) {
+            hidl_vec<V1_2::CellInfo> ret;
+            if (!error && responseLen % sizeof(RIL_CellInfo_v12) != 0) {
                 convertRilCellInfoListToHal_1_2(response, responseLen, ret);
-                retStatus = radioService[slotId]->mRadioResponseV1_2->
-                        getCellInfoListResponse_1_2(responseInfo, ret);
             } else {
-                hidl_vec<CellInfo> ret;
-                convertRilCellInfoListToHal(response, responseLen, ret);
-                retStatus = radioService[slotId]->mRadioResponse->
-                        getCellInfoListResponse(responseInfo, ret);
+                RLOGE("getCellInfoListResponse_1_2: Invalid response");
+                if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
             }
+            radioService[slotId]->mRadioResponseV1_2->getCellInfoListResponse_1_2(responseInfo,
+                                                                                  ret);
+        } else {
+            hidl_vec<CellInfo> ret;
+            if (!error && responseLen % sizeof(RIL_CellInfo) != 0) {
+                convertRilCellInfoListToHal(response, responseLen, ret);
+            } else {
+                RLOGE("getCellInfoListResponse: Invalid response");
+                if (e == RIL_E_SUCCESS) responseInfo.error = RadioError::INVALID_RESPONSE;
+            }
+            radioService[slotId]->mRadioResponse->getCellInfoListResponse(responseInfo, ret);
         }
         radioService[slotId]->checkReturnStatus(retStatus);
     } else {
@@ -8866,9 +9031,8 @@
     return 0;
 }
 
-int radio_1_6::setInitialAttachApnResponse(int slotId,
-                                       int responseType, int serial, RIL_Errno e,
-                                       void *response, size_t responseLen) {
+int radio_1_6::setInitialAttachApnResponse(int slotId, int responseType, int serial, RIL_Errno e,
+                                           void* response, size_t responseLen) {
 #if VDBG
     RLOGD("setInitialAttachApnResponse: serial %d", serial);
 #endif
@@ -8876,18 +9040,18 @@
     if (radioService[slotId]->mRadioResponseV1_5 != NULL) {
         RadioResponseInfo responseInfo = {};
         populateResponseInfo(responseInfo, serial, responseType, e);
-        Return<void> retStatus
-                = radioService[slotId]->mRadioResponseV1_5->setInitialAttachApnResponse_1_5(
-                responseInfo);
+        Return<void> retStatus =
+                radioService[slotId]->mRadioResponseV1_5->setInitialAttachApnResponse_1_5(
+                        responseInfo);
+        radioService[slotId]->checkReturnStatus(retStatus);
     } else if (radioService[slotId]->mRadioResponse != NULL) {
         RadioResponseInfo responseInfo = {};
         populateResponseInfo(responseInfo, serial, responseType, e);
-        Return<void> retStatus
-                = radioService[slotId]->mRadioResponse->setInitialAttachApnResponse(responseInfo);
+        Return<void> retStatus =
+                radioService[slotId]->mRadioResponse->setInitialAttachApnResponse(responseInfo);
         radioService[slotId]->checkReturnStatus(retStatus);
     } else {
-        RLOGE("setInitialAttachApnResponse: radioService[%d]->mRadioResponse == NULL",
-                slotId);
+        RLOGE("setInitialAttachApnResponse: radioService[%d]->mRadioResponse == NULL", slotId);
     }
 
     return 0;
@@ -10638,6 +10802,26 @@
     signalStrength.tdScdma.rscp = rilSignalStrength->TD_SCDMA_SignalStrength.rscp;
 }
 
+void convertRilSignalStrengthToHal_1_2(void* response, size_t responseLen,
+                                       V1_2::SignalStrength& signalStrength_1_2) {
+    SignalStrength signalStrength = {};
+    convertRilSignalStrengthToHal(response, responseLen, signalStrength);
+    signalStrength_1_2.gsm = signalStrength.gw;
+    signalStrength_1_2.cdma = signalStrength.cdma;
+    signalStrength_1_2.evdo = signalStrength.evdo;
+    signalStrength_1_2.lte = signalStrength.lte;
+
+    RIL_SignalStrength_v12* rilSignalStrength = (RIL_SignalStrength_v12*)response;
+    signalStrength_1_2.wcdma.base.signalStrength =
+            rilSignalStrength->WCDMA_SignalStrength.signalStrength;
+    signalStrength_1_2.wcdma.base.bitErrorRate =
+            rilSignalStrength->WCDMA_SignalStrength.bitErrorRate;
+    signalStrength_1_2.wcdma.rscp = INT_MAX;
+    signalStrength_1_2.wcdma.ecno = INT_MAX;
+
+    signalStrength_1_2.tdScdma.rscp = INT_MAX;
+}
+
 void convertRilSignalStrengthToHal_1_4(void *response, size_t responseLen,
         V1_4::SignalStrength& signalStrength_1_4) {
     SignalStrength signalStrength = {};
@@ -10667,12 +10851,41 @@
     signalStrength_1_4.nr.csiSinr = rilSignalStrength->NR_SignalStrength.ssSinr;
 }
 
-int radio_1_6::currentSignalStrengthInd(int slotId,
-                                    int indicationType, int token, RIL_Errno e,
-                                    void *response, size_t responseLen) {
-    if (radioService[slotId] != NULL &&
-       (radioService[slotId]->mRadioIndication != NULL ||
-        radioService[slotId]->mRadioIndicationV1_4 != NULL)) {
+void convertRilSignalStrengthToHal_1_6(void* response, size_t responseLen,
+                                       V1_6::SignalStrength& signalStrength_1_6) {
+    SignalStrength signalStrength = {};
+    convertRilSignalStrengthToHal(response, responseLen, signalStrength);
+    signalStrength_1_6.gsm = signalStrength.gw;
+    signalStrength_1_6.cdma = signalStrength.cdma;
+    signalStrength_1_6.evdo = signalStrength.evdo;
+    signalStrength_1_6.lte.base = signalStrength.lte;
+
+    RIL_SignalStrength_v12* rilSignalStrength = (RIL_SignalStrength_v12*)response;
+    signalStrength_1_6.wcdma.base.signalStrength =
+            rilSignalStrength->WCDMA_SignalStrength.signalStrength;
+    signalStrength_1_6.wcdma.base.bitErrorRate =
+            rilSignalStrength->WCDMA_SignalStrength.bitErrorRate;
+    signalStrength_1_6.wcdma.rscp = INT_MAX;
+    signalStrength_1_6.wcdma.ecno = INT_MAX;
+
+    signalStrength_1_6.tdscdma.signalStrength = INT_MAX;
+    signalStrength_1_6.tdscdma.bitErrorRate = INT_MAX;
+    signalStrength_1_6.tdscdma.rscp = INT_MAX;
+
+    signalStrength_1_6.nr.base.ssRsrp = rilSignalStrength->NR_SignalStrength.ssRsrp;
+    signalStrength_1_6.nr.base.ssRsrq = rilSignalStrength->NR_SignalStrength.ssRsrq;
+    signalStrength_1_6.nr.base.ssSinr = rilSignalStrength->NR_SignalStrength.ssSinr;
+    signalStrength_1_6.nr.base.csiRsrp = rilSignalStrength->NR_SignalStrength.csiRsrp;
+    signalStrength_1_6.nr.base.csiRsrq = rilSignalStrength->NR_SignalStrength.csiRsrq;
+    signalStrength_1_6.nr.base.csiSinr = rilSignalStrength->NR_SignalStrength.ssSinr;
+}
+
+int radio_1_6::currentSignalStrengthInd(int slotId, int indicationType, int token, RIL_Errno e,
+                                        void* response, size_t responseLen) {
+    if (radioService[slotId] != NULL && (radioService[slotId]->mRadioIndication != NULL ||
+                                         radioService[slotId]->mRadioIndicationV1_2 != NULL ||
+                                         radioService[slotId]->mRadioIndicationV1_4 != NULL) ||
+        radioService[slotId]->mRadioIndicationV1_6 != NULL) {
         if (response == NULL || responseLen != sizeof(RIL_SignalStrength_v12)) {
             RLOGE("currentSignalStrengthInd: invalid response");
             return 0;
@@ -10682,16 +10895,26 @@
         RLOGD("currentSignalStrengthInd");
 #endif
         Return<void> retStatus;
-        if (radioService[slotId]->mRadioIndicationV1_4 != NULL) {
-          V1_4::SignalStrength signalStrength_1_4 = {};
-          convertRilSignalStrengthToHal_1_4(response, responseLen, signalStrength_1_4);
-          retStatus = radioService[slotId]->mRadioIndicationV1_4->currentSignalStrength_1_4(
-                          convertIntToRadioIndicationType(indicationType), signalStrength_1_4);
+        if (radioService[slotId]->mRadioIndicationV1_6 != NULL) {
+            V1_6::SignalStrength signalStrength_1_6 = {};
+            convertRilSignalStrengthToHal_1_6(response, responseLen, signalStrength_1_6);
+            retStatus = radioService[slotId]->mRadioIndicationV1_6->currentSignalStrength_1_6(
+                    convertIntToRadioIndicationType(indicationType), signalStrength_1_6);
+        } else if (radioService[slotId]->mRadioIndicationV1_4 != NULL) {
+            V1_4::SignalStrength signalStrength_1_4 = {};
+            convertRilSignalStrengthToHal_1_4(response, responseLen, signalStrength_1_4);
+            retStatus = radioService[slotId]->mRadioIndicationV1_4->currentSignalStrength_1_4(
+                    convertIntToRadioIndicationType(indicationType), signalStrength_1_4);
+        } else if (radioService[slotId]->mRadioIndicationV1_2 != NULL) {
+            V1_2::SignalStrength signalStrength_1_2 = {};
+            convertRilSignalStrengthToHal_1_2(response, responseLen, signalStrength_1_2);
+            retStatus = radioService[slotId]->mRadioIndicationV1_2->currentSignalStrength_1_2(
+                    convertIntToRadioIndicationType(indicationType), signalStrength_1_2);
         } else {
-          SignalStrength signalStrength = {};
-          convertRilSignalStrengthToHal(response, responseLen, signalStrength);
-          retStatus = radioService[slotId]->mRadioIndication->currentSignalStrength(
-                          convertIntToRadioIndicationType(indicationType), signalStrength);
+            SignalStrength signalStrength = {};
+            convertRilSignalStrengthToHal(response, responseLen, signalStrength);
+            retStatus = radioService[slotId]->mRadioIndication->currentSignalStrength(
+                    convertIntToRadioIndicationType(indicationType), signalStrength);
         }
         radioService[slotId]->checkReturnStatus(retStatus);
     } else {
@@ -10841,6 +11064,39 @@
     }
 }
 
+void convertRilDataCallListToHal_1_4(void* response, size_t responseLen,
+                                     hidl_vec<V1_4::SetupDataCallResult>& dcResultList) {
+    int num = responseLen / sizeof(RIL_Data_Call_Response_v11);
+
+    RIL_Data_Call_Response_v11* dcResponse = (RIL_Data_Call_Response_v11*)response;
+    dcResultList.resize(num);
+    for (int i = 0; i < num; i++) {
+        convertRilDataCallToHal(&dcResponse[i], dcResultList[i]);
+    }
+}
+
+void convertRilDataCallListToHal_1_5(void* response, size_t responseLen,
+                                     hidl_vec<V1_5::SetupDataCallResult>& dcResultList) {
+    int num = responseLen / sizeof(RIL_Data_Call_Response_v12);
+
+    RIL_Data_Call_Response_v12* dcResponse = (RIL_Data_Call_Response_v12*)response;
+    dcResultList.resize(num);
+    for (int i = 0; i < num; i++) {
+        convertRilDataCallToHal(&dcResponse[i], dcResultList[i]);
+    }
+}
+
+void convertRilDataCallListToHal_1_6(void* response, size_t responseLen,
+                                     hidl_vec<V1_6::SetupDataCallResult>& dcResultList) {
+    int num = responseLen / sizeof(RIL_Data_Call_Response_v12);
+
+    RIL_Data_Call_Response_v12* dcResponse = (RIL_Data_Call_Response_v12*)response;
+    dcResultList.resize(num);
+    for (int i = 0; i < num; i++) {
+        convertRilDataCallToHal(&dcResponse[i], dcResultList[i]);
+    }
+}
+
 int radio_1_6::dataCallListChangedInd(int slotId,
                                   int indicationType, int token, RIL_Errno e, void *response,
                                   size_t responseLen) {
@@ -12045,6 +12301,346 @@
     }
 }
 
+void convertRilCellInfoListToHal_1_5(void* response, size_t responseLen,
+                                     hidl_vec<V1_5::CellInfo>& records) {
+    int num = responseLen / sizeof(RIL_CellInfo_v16);
+    records.resize(num);
+    RIL_CellInfo_v16* rillCellInfo = (RIL_CellInfo_v16*)response;
+    for (int i = 0; i < num; i++) {
+        records[i].registered = rillCellInfo->registered;
+        records[i].connectionStatus = (V1_2::CellConnectionStatus)rillCellInfo->connectionStatus;
+
+        switch (rillCellInfo->cellInfoType) {
+            case RIL_CELL_INFO_TYPE_GSM: {
+                V1_5::CellInfoGsm cellInfoGsm;
+                cellInfoGsm.cellIdentityGsm.base.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.gsm.cellIdentityGsm.mcc);
+                cellInfoGsm.cellIdentityGsm.base.base.mnc =
+                        ril::util::mnc::decode(rillCellInfo->CellInfo.gsm.cellIdentityGsm.mnc);
+                cellInfoGsm.cellIdentityGsm.base.base.lac =
+                        rillCellInfo->CellInfo.gsm.cellIdentityGsm.lac;
+                cellInfoGsm.cellIdentityGsm.base.base.cid =
+                        rillCellInfo->CellInfo.gsm.cellIdentityGsm.cid;
+                cellInfoGsm.cellIdentityGsm.base.base.arfcn =
+                        rillCellInfo->CellInfo.gsm.cellIdentityGsm.arfcn;
+                cellInfoGsm.cellIdentityGsm.base.base.bsic =
+                        rillCellInfo->CellInfo.gsm.cellIdentityGsm.bsic;
+                cellInfoGsm.signalStrengthGsm.signalStrength =
+                        rillCellInfo->CellInfo.gsm.signalStrengthGsm.signalStrength;
+                cellInfoGsm.signalStrengthGsm.bitErrorRate =
+                        rillCellInfo->CellInfo.gsm.signalStrengthGsm.bitErrorRate;
+                cellInfoGsm.signalStrengthGsm.timingAdvance =
+                        rillCellInfo->CellInfo.gsm.signalStrengthGsm.timingAdvance;
+                records[i].ratSpecificInfo.gsm(cellInfoGsm);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_WCDMA: {
+                V1_5::CellInfoWcdma cellInfoWcdma;
+                cellInfoWcdma.cellIdentityWcdma.base.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.mcc);
+                cellInfoWcdma.cellIdentityWcdma.base.base.mnc =
+                        ril::util::mnc::decode(rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.mnc);
+                cellInfoWcdma.cellIdentityWcdma.base.base.lac =
+                        rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.lac;
+                cellInfoWcdma.cellIdentityWcdma.base.base.cid =
+                        rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.cid;
+                cellInfoWcdma.cellIdentityWcdma.base.base.psc =
+                        rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.psc;
+                cellInfoWcdma.cellIdentityWcdma.base.base.uarfcn =
+                        rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.uarfcn;
+                cellInfoWcdma.signalStrengthWcdma.base.signalStrength =
+                        rillCellInfo->CellInfo.wcdma.signalStrengthWcdma.signalStrength;
+                cellInfoWcdma.signalStrengthWcdma.base.bitErrorRate =
+                        rillCellInfo->CellInfo.wcdma.signalStrengthWcdma.bitErrorRate;
+                records[i].ratSpecificInfo.wcdma(cellInfoWcdma);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_CDMA: {
+                V1_2::CellInfoCdma cellInfoCdma;
+                cellInfoCdma.cellIdentityCdma.base.networkId =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.networkId;
+                cellInfoCdma.cellIdentityCdma.base.systemId =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.systemId;
+                cellInfoCdma.cellIdentityCdma.base.baseStationId =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.basestationId;
+                cellInfoCdma.cellIdentityCdma.base.longitude =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.longitude;
+                cellInfoCdma.cellIdentityCdma.base.latitude =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.latitude;
+                cellInfoCdma.signalStrengthCdma.dbm =
+                        rillCellInfo->CellInfo.cdma.signalStrengthCdma.dbm;
+                cellInfoCdma.signalStrengthCdma.ecio =
+                        rillCellInfo->CellInfo.cdma.signalStrengthCdma.ecio;
+                cellInfoCdma.signalStrengthEvdo.dbm =
+                        rillCellInfo->CellInfo.cdma.signalStrengthEvdo.dbm;
+                cellInfoCdma.signalStrengthEvdo.ecio =
+                        rillCellInfo->CellInfo.cdma.signalStrengthEvdo.ecio;
+                cellInfoCdma.signalStrengthEvdo.signalNoiseRatio =
+                        rillCellInfo->CellInfo.cdma.signalStrengthEvdo.signalNoiseRatio;
+                records[i].ratSpecificInfo.cdma(cellInfoCdma);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_LTE: {
+                V1_5::CellInfoLte cellInfoLte;
+                cellInfoLte.cellIdentityLte.base.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.lte.cellIdentityLte.mcc);
+                cellInfoLte.cellIdentityLte.base.base.mnc =
+                        ril::util::mnc::decode(rillCellInfo->CellInfo.lte.cellIdentityLte.mnc);
+                cellInfoLte.cellIdentityLte.base.base.ci =
+                        rillCellInfo->CellInfo.lte.cellIdentityLte.ci;
+                cellInfoLte.cellIdentityLte.base.base.pci =
+                        rillCellInfo->CellInfo.lte.cellIdentityLte.pci;
+                cellInfoLte.cellIdentityLte.base.base.tac =
+                        rillCellInfo->CellInfo.lte.cellIdentityLte.tac;
+                cellInfoLte.cellIdentityLte.base.base.earfcn =
+                        rillCellInfo->CellInfo.lte.cellIdentityLte.earfcn;
+                cellInfoLte.signalStrengthLte.signalStrength =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.signalStrength;
+                cellInfoLte.signalStrengthLte.rsrp =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.rsrp;
+                cellInfoLte.signalStrengthLte.rsrq =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.rsrq;
+                cellInfoLte.signalStrengthLte.rssnr =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.rssnr;
+                cellInfoLte.signalStrengthLte.cqi =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.cqi;
+                cellInfoLte.signalStrengthLte.timingAdvance =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.timingAdvance;
+                records[i].ratSpecificInfo.lte(cellInfoLte);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_TD_SCDMA: {
+                V1_5::CellInfoTdscdma cellInfoTdscdma;
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.mcc);
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.mnc = ril::util::mnc::decode(
+                        rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.mnc);
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.lac =
+                        rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.lac;
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.cid =
+                        rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.cid;
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.cpid =
+                        rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.cpid;
+                cellInfoTdscdma.signalStrengthTdscdma.rscp =
+                        rillCellInfo->CellInfo.tdscdma.signalStrengthTdscdma.rscp;
+                records[i].ratSpecificInfo.tdscdma(cellInfoTdscdma);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_NR: {
+                V1_5::CellInfoNr cellInfoNr;
+                cellInfoNr.cellIdentityNr.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.nr.cellidentity.mcc);
+                cellInfoNr.cellIdentityNr.base.mnc =
+                        ril::util::mnc::decode(rillCellInfo->CellInfo.nr.cellidentity.mnc);
+                cellInfoNr.cellIdentityNr.base.nci = rillCellInfo->CellInfo.nr.cellidentity.nci;
+                cellInfoNr.cellIdentityNr.base.pci = rillCellInfo->CellInfo.nr.cellidentity.pci;
+                cellInfoNr.cellIdentityNr.base.tac = rillCellInfo->CellInfo.nr.cellidentity.tac;
+                cellInfoNr.cellIdentityNr.base.nrarfcn =
+                        rillCellInfo->CellInfo.nr.cellidentity.nrarfcn;
+                cellInfoNr.cellIdentityNr.base.operatorNames.alphaLong = convertCharPtrToHidlString(
+                        rillCellInfo->CellInfo.nr.cellidentity.operatorNames.alphaLong);
+                cellInfoNr.cellIdentityNr.base.operatorNames.alphaShort =
+                        convertCharPtrToHidlString(
+                                rillCellInfo->CellInfo.nr.cellidentity.operatorNames.alphaShort);
+
+                cellInfoNr.signalStrengthNr.ssRsrp =
+                        rillCellInfo->CellInfo.nr.signalStrength.ssRsrp;
+                cellInfoNr.signalStrengthNr.ssRsrq =
+                        rillCellInfo->CellInfo.nr.signalStrength.ssRsrq;
+                cellInfoNr.signalStrengthNr.ssSinr =
+                        rillCellInfo->CellInfo.nr.signalStrength.ssSinr;
+                cellInfoNr.signalStrengthNr.csiRsrp =
+                        rillCellInfo->CellInfo.nr.signalStrength.csiRsrp;
+                cellInfoNr.signalStrengthNr.csiRsrq =
+                        rillCellInfo->CellInfo.nr.signalStrength.csiRsrq;
+                cellInfoNr.signalStrengthNr.csiSinr =
+                        rillCellInfo->CellInfo.nr.signalStrength.csiSinr;
+                records[i].ratSpecificInfo.nr(cellInfoNr);
+                break;
+            }
+            default: {
+                break;
+            }
+        }
+        rillCellInfo += 1;
+    }
+}
+
+void convertRilCellInfoListToHal_1_6(void* response, size_t responseLen,
+                                     hidl_vec<V1_6::CellInfo>& records) {
+    int num = responseLen / sizeof(RIL_CellInfo_v16);
+    records.resize(num);
+    RIL_CellInfo_v16* rillCellInfo = (RIL_CellInfo_v16*)response;
+    for (int i = 0; i < num; i++) {
+        records[i].registered = rillCellInfo->registered;
+        records[i].connectionStatus = (V1_2::CellConnectionStatus)rillCellInfo->connectionStatus;
+
+        switch (rillCellInfo->cellInfoType) {
+            case RIL_CELL_INFO_TYPE_GSM: {
+                V1_5::CellInfoGsm cellInfoGsm;
+                cellInfoGsm.cellIdentityGsm.base.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.gsm.cellIdentityGsm.mcc);
+                cellInfoGsm.cellIdentityGsm.base.base.mnc =
+                        ril::util::mnc::decode(rillCellInfo->CellInfo.gsm.cellIdentityGsm.mnc);
+                cellInfoGsm.cellIdentityGsm.base.base.lac =
+                        rillCellInfo->CellInfo.gsm.cellIdentityGsm.lac;
+                cellInfoGsm.cellIdentityGsm.base.base.cid =
+                        rillCellInfo->CellInfo.gsm.cellIdentityGsm.cid;
+                cellInfoGsm.cellIdentityGsm.base.base.arfcn =
+                        rillCellInfo->CellInfo.gsm.cellIdentityGsm.arfcn;
+                cellInfoGsm.cellIdentityGsm.base.base.bsic =
+                        rillCellInfo->CellInfo.gsm.cellIdentityGsm.bsic;
+                cellInfoGsm.signalStrengthGsm.signalStrength =
+                        rillCellInfo->CellInfo.gsm.signalStrengthGsm.signalStrength;
+                cellInfoGsm.signalStrengthGsm.bitErrorRate =
+                        rillCellInfo->CellInfo.gsm.signalStrengthGsm.bitErrorRate;
+                cellInfoGsm.signalStrengthGsm.timingAdvance =
+                        rillCellInfo->CellInfo.gsm.signalStrengthGsm.timingAdvance;
+                records[i].ratSpecificInfo.gsm(cellInfoGsm);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_WCDMA: {
+                V1_5::CellInfoWcdma cellInfoWcdma;
+                cellInfoWcdma.cellIdentityWcdma.base.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.mcc);
+                cellInfoWcdma.cellIdentityWcdma.base.base.mnc =
+                        ril::util::mnc::decode(rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.mnc);
+                cellInfoWcdma.cellIdentityWcdma.base.base.lac =
+                        rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.lac;
+                cellInfoWcdma.cellIdentityWcdma.base.base.cid =
+                        rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.cid;
+                cellInfoWcdma.cellIdentityWcdma.base.base.psc =
+                        rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.psc;
+                cellInfoWcdma.cellIdentityWcdma.base.base.uarfcn =
+                        rillCellInfo->CellInfo.wcdma.cellIdentityWcdma.uarfcn;
+                cellInfoWcdma.signalStrengthWcdma.base.signalStrength =
+                        rillCellInfo->CellInfo.wcdma.signalStrengthWcdma.signalStrength;
+                cellInfoWcdma.signalStrengthWcdma.base.bitErrorRate =
+                        rillCellInfo->CellInfo.wcdma.signalStrengthWcdma.bitErrorRate;
+                records[i].ratSpecificInfo.wcdma(cellInfoWcdma);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_CDMA: {
+                V1_2::CellInfoCdma cellInfoCdma;
+                cellInfoCdma.cellIdentityCdma.base.networkId =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.networkId;
+                cellInfoCdma.cellIdentityCdma.base.systemId =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.systemId;
+                cellInfoCdma.cellIdentityCdma.base.baseStationId =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.basestationId;
+                cellInfoCdma.cellIdentityCdma.base.longitude =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.longitude;
+                cellInfoCdma.cellIdentityCdma.base.latitude =
+                        rillCellInfo->CellInfo.cdma.cellIdentityCdma.latitude;
+                cellInfoCdma.signalStrengthCdma.dbm =
+                        rillCellInfo->CellInfo.cdma.signalStrengthCdma.dbm;
+                cellInfoCdma.signalStrengthCdma.ecio =
+                        rillCellInfo->CellInfo.cdma.signalStrengthCdma.ecio;
+                cellInfoCdma.signalStrengthEvdo.dbm =
+                        rillCellInfo->CellInfo.cdma.signalStrengthEvdo.dbm;
+                cellInfoCdma.signalStrengthEvdo.ecio =
+                        rillCellInfo->CellInfo.cdma.signalStrengthEvdo.ecio;
+                cellInfoCdma.signalStrengthEvdo.signalNoiseRatio =
+                        rillCellInfo->CellInfo.cdma.signalStrengthEvdo.signalNoiseRatio;
+                records[i].ratSpecificInfo.cdma(cellInfoCdma);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_LTE: {
+                V1_6::CellInfoLte cellInfoLte;
+                cellInfoLte.cellIdentityLte.base.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.lte.cellIdentityLte.mcc);
+                cellInfoLte.cellIdentityLte.base.base.mnc =
+                        ril::util::mnc::decode(rillCellInfo->CellInfo.lte.cellIdentityLte.mnc);
+                cellInfoLte.cellIdentityLte.base.base.ci =
+                        rillCellInfo->CellInfo.lte.cellIdentityLte.ci;
+                cellInfoLte.cellIdentityLte.base.base.pci =
+                        rillCellInfo->CellInfo.lte.cellIdentityLte.pci;
+                cellInfoLte.cellIdentityLte.base.base.tac =
+                        rillCellInfo->CellInfo.lte.cellIdentityLte.tac;
+                cellInfoLte.cellIdentityLte.base.base.earfcn =
+                        rillCellInfo->CellInfo.lte.cellIdentityLte.earfcn;
+                cellInfoLte.signalStrengthLte.base.signalStrength =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.signalStrength;
+                cellInfoLte.signalStrengthLte.base.rsrp =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.rsrp;
+                cellInfoLte.signalStrengthLte.base.rsrq =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.rsrq;
+                cellInfoLte.signalStrengthLte.base.rssnr =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.rssnr;
+                cellInfoLte.signalStrengthLte.base.cqi =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.cqi;
+                cellInfoLte.signalStrengthLte.base.timingAdvance =
+                        rillCellInfo->CellInfo.lte.signalStrengthLte.timingAdvance;
+                records[i].ratSpecificInfo.lte(cellInfoLte);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_TD_SCDMA: {
+                V1_5::CellInfoTdscdma cellInfoTdscdma;
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.mcc);
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.mnc = ril::util::mnc::decode(
+                        rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.mnc);
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.lac =
+                        rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.lac;
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.cid =
+                        rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.cid;
+                cellInfoTdscdma.cellIdentityTdscdma.base.base.cpid =
+                        rillCellInfo->CellInfo.tdscdma.cellIdentityTdscdma.cpid;
+                cellInfoTdscdma.signalStrengthTdscdma.rscp =
+                        rillCellInfo->CellInfo.tdscdma.signalStrengthTdscdma.rscp;
+                records[i].ratSpecificInfo.tdscdma(cellInfoTdscdma);
+                break;
+            }
+
+            case RIL_CELL_INFO_TYPE_NR: {
+                V1_6::CellInfoNr cellInfoNr;
+                cellInfoNr.cellIdentityNr.base.mcc =
+                        std::to_string(rillCellInfo->CellInfo.nr.cellidentity.mcc);
+                cellInfoNr.cellIdentityNr.base.mnc =
+                        ril::util::mnc::decode(rillCellInfo->CellInfo.nr.cellidentity.mnc);
+                cellInfoNr.cellIdentityNr.base.nci = rillCellInfo->CellInfo.nr.cellidentity.nci;
+                cellInfoNr.cellIdentityNr.base.pci = rillCellInfo->CellInfo.nr.cellidentity.pci;
+                cellInfoNr.cellIdentityNr.base.tac = rillCellInfo->CellInfo.nr.cellidentity.tac;
+                cellInfoNr.cellIdentityNr.base.nrarfcn =
+                        rillCellInfo->CellInfo.nr.cellidentity.nrarfcn;
+                cellInfoNr.cellIdentityNr.base.operatorNames.alphaLong = convertCharPtrToHidlString(
+                        rillCellInfo->CellInfo.nr.cellidentity.operatorNames.alphaLong);
+                cellInfoNr.cellIdentityNr.base.operatorNames.alphaShort =
+                        convertCharPtrToHidlString(
+                                rillCellInfo->CellInfo.nr.cellidentity.operatorNames.alphaShort);
+
+                cellInfoNr.signalStrengthNr.base.ssRsrp =
+                        rillCellInfo->CellInfo.nr.signalStrength.ssRsrp;
+                cellInfoNr.signalStrengthNr.base.ssRsrq =
+                        rillCellInfo->CellInfo.nr.signalStrength.ssRsrq;
+                cellInfoNr.signalStrengthNr.base.ssSinr =
+                        rillCellInfo->CellInfo.nr.signalStrength.ssSinr;
+                cellInfoNr.signalStrengthNr.base.csiRsrp =
+                        rillCellInfo->CellInfo.nr.signalStrength.csiRsrp;
+                cellInfoNr.signalStrengthNr.base.csiRsrq =
+                        rillCellInfo->CellInfo.nr.signalStrength.csiRsrq;
+                cellInfoNr.signalStrengthNr.base.csiSinr =
+                        rillCellInfo->CellInfo.nr.signalStrength.csiSinr;
+                records[i].ratSpecificInfo.nr(cellInfoNr);
+                break;
+            }
+            default: {
+                break;
+            }
+        }
+        rillCellInfo += 1;
+    }
+}
+
 int radio_1_6::cellInfoListInd(int slotId,
                            int indicationType, int token, RIL_Errno e, void *response,
                            size_t responseLen) {
@@ -12426,111 +13022,197 @@
     return 0;
 }
 
-int radio_1_6::networkScanResultInd(int slotId,
-                                int indicationType, int token, RIL_Errno e, void *response,
-                                size_t responseLen) {
+int radio_1_6::networkScanResultInd(int slotId, int indicationType, int token, RIL_Errno e,
+                                    void* response, size_t responseLen) {
 #if VDBG
     RLOGD("networkScanResultInd");
 #endif
-    if (radioService[slotId] != NULL && radioService[slotId]->mRadioIndicationV1_4 != NULL) {
+    if (radioService[slotId] != NULL && (radioService[slotId]->mRadioIndicationV1_6 != NULL ||
+                                         radioService[slotId]->mRadioIndicationV1_5 != NULL ||
+                                         radioService[slotId]->mRadioIndicationV1_4 != NULL ||
+                                         radioService[slotId]->mRadioIndicationV1_2 != NULL ||
+                                         radioService[slotId]->mRadioIndicationV1_1 != NULL)) {
         if (response == NULL || responseLen == 0) {
             RLOGE("networkScanResultInd: invalid response");
             return 0;
         }
         RLOGD("networkScanResultInd");
 
-#if VDBG
-        RLOGD("networkScanResultInd");
-#endif
-
         RIL_NetworkScanResult *networkScanResult = (RIL_NetworkScanResult *) response;
-
-        V1_1::NetworkScanResult result;
-        result.status = (V1_1::ScanStatus) networkScanResult->status;
-        result.error = (RadioError) networkScanResult->error;
-        convertRilCellInfoListToHal(
-                networkScanResult->network_infos,
-                networkScanResult->network_infos_length * sizeof(RIL_CellInfo_v12),
-                result.networkInfos);
-
-        Return<void> retStatus = radioService[slotId]->mRadioIndicationV1_4->networkScanResult(
-                convertIntToRadioIndicationType(indicationType), result);
+        Return<void> retStatus;
+        if (radioService[slotId]->mRadioIndicationV1_6 != NULL) {
+            V1_6::NetworkScanResult result;
+            result.status = (V1_1::ScanStatus)networkScanResult->status;
+            result.error = (V1_6::RadioError)networkScanResult->error;
+            convertRilCellInfoListToHal_1_6(
+                    networkScanResult->network_infos,
+                    networkScanResult->network_infos_length * sizeof(RIL_CellInfo_v16),
+                    result.networkInfos);
+            retStatus = radioService[slotId]->mRadioIndicationV1_6->networkScanResult_1_6(
+                    convertIntToRadioIndicationType(indicationType), result);
+        } else if (radioService[slotId]->mRadioIndicationV1_5 != NULL) {
+            V1_5::NetworkScanResult result;
+            result.status = (V1_1::ScanStatus)networkScanResult->status;
+            result.error = (RadioError)networkScanResult->error;
+            convertRilCellInfoListToHal_1_5(
+                    networkScanResult->network_infos,
+                    networkScanResult->network_infos_length * sizeof(RIL_CellInfo_v12),
+                    result.networkInfos);
+            retStatus = radioService[slotId]->mRadioIndicationV1_5->networkScanResult_1_5(
+                    convertIntToRadioIndicationType(indicationType), result);
+        } else if (radioService[slotId]->mRadioIndicationV1_4 != NULL) {
+            V1_4::NetworkScanResult result;
+            result.status = (V1_1::ScanStatus)networkScanResult->status;
+            result.error = (RadioError)networkScanResult->error;
+            convertRilCellInfoListToHal_1_4(
+                    networkScanResult->network_infos,
+                    networkScanResult->network_infos_length * sizeof(RIL_CellInfo_v12),
+                    result.networkInfos);
+            retStatus = radioService[slotId]->mRadioIndicationV1_4->networkScanResult_1_4(
+                    convertIntToRadioIndicationType(indicationType), result);
+        } else if (radioService[slotId]->mRadioIndicationV1_2 != NULL) {
+            V1_2::NetworkScanResult result;
+            result.status = (V1_1::ScanStatus)networkScanResult->status;
+            result.error = (RadioError)networkScanResult->error;
+            convertRilCellInfoListToHal_1_2(
+                    networkScanResult->network_infos,
+                    networkScanResult->network_infos_length * sizeof(RIL_CellInfo_v12),
+                    result.networkInfos);
+            retStatus = radioService[slotId]->mRadioIndicationV1_2->networkScanResult_1_2(
+                    convertIntToRadioIndicationType(indicationType), result);
+        } else {
+            V1_1::NetworkScanResult result;
+            result.status = (V1_1::ScanStatus)networkScanResult->status;
+            result.error = (RadioError)networkScanResult->error;
+            convertRilCellInfoListToHal(
+                    networkScanResult->network_infos,
+                    networkScanResult->network_infos_length * sizeof(RIL_CellInfo),
+                    result.networkInfos);
+            retStatus = radioService[slotId]->mRadioIndicationV1_1->networkScanResult(
+                    convertIntToRadioIndicationType(indicationType), result);
+        }
         radioService[slotId]->checkReturnStatus(retStatus);
     } else {
-        RLOGE("networkScanResultInd: radioService[%d]->mRadioIndicationV1_4 == NULL", slotId);
+        RLOGE("networkScanResultInd: radioService[%d]->mRadioIndication == NULL", slotId);
     }
     return 0;
 }
 
-int radio_1_6::carrierInfoForImsiEncryption(int slotId,
-                                  int indicationType, int token, RIL_Errno e, void *response,
-                                  size_t responseLen) {
-    if (radioService[slotId] != NULL && radioService[slotId]->mRadioIndicationV1_4 != NULL) {
+int radio_1_6::carrierInfoForImsiEncryption(int slotId, int indicationType, int token, RIL_Errno e,
+                                            void* response, size_t responseLen) {
+    if (radioService[slotId] != NULL && (radioService[slotId]->mRadioIndicationV1_2 != NULL)) {
         if (response == NULL || responseLen == 0) {
             RLOGE("carrierInfoForImsiEncryption: invalid response");
             return 0;
         }
         RLOGD("carrierInfoForImsiEncryption");
-        Return<void> retStatus = radioService[slotId]->mRadioIndicationV1_4->
-                carrierInfoForImsiEncryption(convertIntToRadioIndicationType(indicationType));
+        Return<void> retStatus =
+                radioService[slotId]->mRadioIndicationV1_2->carrierInfoForImsiEncryption(
+                        convertIntToRadioIndicationType(indicationType));
         radioService[slotId]->checkReturnStatus(retStatus);
     } else {
-        RLOGE("carrierInfoForImsiEncryption: radioService[%d]->mRadioIndicationV1_4 == NULL",
-                slotId);
+        RLOGE("carrierInfoForImsiEncryption: radioService[%d]->mRadioIndication == NULL", slotId);
     }
 
     return 0;
 }
 
-int radio_1_6::reportPhysicalChannelConfigs(int slotId, int indicationType,
-                                            int token, RIL_Errno e,
-                                            void *response,
-                                            size_t responseLen) {
-    if (radioService[slotId] != NULL &&
-        radioService[slotId]->mRadioIndicationV1_4 != NULL) {
-      int *configs = (int *)response;
-      ::android::hardware::hidl_vec<PhysicalChannelConfigV1_4> physChanConfig;
-      physChanConfig.resize(1);
-      physChanConfig[0].base.status =
-          (::android::hardware::radio::V1_2::CellConnectionStatus)configs[0];
-      physChanConfig[0].base.cellBandwidthDownlink = configs[1];
-      physChanConfig[0].rat =
-          (::android::hardware::radio::V1_4::RadioTechnology)configs[2];
-      physChanConfig[0].rfInfo.range(
-          (::android::hardware::radio::V1_4::FrequencyRange)configs[3]);
-      physChanConfig[0].contextIds.resize(1);
-      physChanConfig[0].contextIds[0] = configs[4];
-      RLOGD("reportPhysicalChannelConfigs: %d %d %d %d %d", configs[0],
-            configs[1], configs[2], configs[3], configs[4]);
-      Return<void> retStatus = radioService[slotId]
-          ->mRadioIndicationV1_4->currentPhysicalChannelConfigs_1_4(
-              RadioIndicationType::UNSOLICITED, physChanConfig);
-      radioService[slotId]->checkReturnStatus(retStatus);
-      {
-          // just send the link estimate along with physical channel
-          // config, as it has at least the downlink bandwidth.
-          // Note: the bandwidth is just some hardcoded
-          // value, as there is not way to get that reliably on
-          // virtual devices, as of now.
-          V1_2::LinkCapacityEstimate lce = {
-            .downlinkCapacityKbps = static_cast<uint32_t>(configs[1]),
-            .uplinkCapacityKbps = static_cast<uint32_t>(configs[1])
-          };
-        RLOGD("reporting link capacity estimate download: %d upload: %d",
-                        lce.downlinkCapacityKbps, lce.uplinkCapacityKbps );
-        Return<void> retStatus = radioService[slotId]->mRadioIndicationV1_4->
-            currentLinkCapacityEstimate(RadioIndicationType::UNSOLICITED, lce);
-        radioService[slotId]->checkReturnStatus(retStatus);
-      }
+int radio_1_6::reportPhysicalChannelConfigs(int slotId, int indicationType, int token, RIL_Errno e,
+                                            void* response, size_t responseLen) {
+    if (radioService[slotId] != NULL && (radioService[slotId]->mRadioIndicationV1_6 != NULL ||
+                                         radioService[slotId]->mRadioIndicationV1_4 != NULL ||
+                                         radioService[slotId]->mRadioIndicationV1_2 != NULL)) {
+        int* configs = (int*)response;
+        if (radioService[slotId]->mRadioIndicationV1_6 != NULL) {
+            hidl_vec<V1_6::PhysicalChannelConfig> physChanConfig;
+            physChanConfig.resize(1);
+            physChanConfig[0].status = (V1_2::CellConnectionStatus)configs[0];
+            physChanConfig[0].cellBandwidthDownlinkKhz = configs[1];
+            physChanConfig[0].rat = (V1_4::RadioTechnology)configs[2];
+            physChanConfig[0].contextIds.resize(1);
+            physChanConfig[0].contextIds[0] = configs[4];
+            RLOGD("reportPhysicalChannelConfigs_1_6: %d %d %d %d %d", configs[0], configs[1],
+                  configs[2], configs[3], configs[4]);
+            Return<void> retStatus =
+                    radioService[slotId]->mRadioIndicationV1_6->currentPhysicalChannelConfigs_1_6(
+                            RadioIndicationType::UNSOLICITED, physChanConfig);
+            radioService[slotId]->checkReturnStatus(retStatus);
+            {
+                // Just send the link estimate along with physical channel config, as it has
+                // at least the downlink bandwidth.
+                // Note: the bandwidth is just some hardcoded value, as there is not way to get
+                // that reliably on virtual devices, as of now.
+                V1_6::LinkCapacityEstimate lce = {
+                        .downlinkCapacityKbps = static_cast<uint32_t>(configs[1]),
+                        .uplinkCapacityKbps = static_cast<uint32_t>(configs[1])};
+                RLOGD("reporting link capacity estimate download: %d upload: %d",
+                      lce.downlinkCapacityKbps, lce.uplinkCapacityKbps);
+                Return<void> retStatus =
+                        radioService[slotId]->mRadioIndicationV1_6->currentLinkCapacityEstimate_1_6(
+                                RadioIndicationType::UNSOLICITED, lce);
+                radioService[slotId]->checkReturnStatus(retStatus);
+            }
+        } else if (radioService[slotId]->mRadioIndicationV1_4 != NULL) {
+            hidl_vec<PhysicalChannelConfigV1_4> physChanConfig;
+            physChanConfig.resize(1);
+            physChanConfig[0].base.status = (V1_2::CellConnectionStatus)configs[0];
+            physChanConfig[0].base.cellBandwidthDownlink = configs[1];
+            physChanConfig[0].rat = (V1_4::RadioTechnology)configs[2];
+            physChanConfig[0].rfInfo.range((V1_4::FrequencyRange)configs[3]);
+            physChanConfig[0].contextIds.resize(1);
+            physChanConfig[0].contextIds[0] = configs[4];
+            RLOGD("reportPhysicalChannelConfigs_1_4: %d %d %d %d %d", configs[0], configs[1],
+                  configs[2], configs[3], configs[4]);
+            Return<void> retStatus =
+                    radioService[slotId]->mRadioIndicationV1_4->currentPhysicalChannelConfigs_1_4(
+                            RadioIndicationType::UNSOLICITED, physChanConfig);
+            radioService[slotId]->checkReturnStatus(retStatus);
+            {
+                // Just send the link estimate along with physical channel config, as it has
+                // at least the downlink bandwidth.
+                // Note: the bandwidth is just some hardcoded value, as there is not way to get
+                // that reliably on virtual devices, as of now.
+                V1_2::LinkCapacityEstimate lce = {
+                        .downlinkCapacityKbps = static_cast<uint32_t>(configs[1]),
+                        .uplinkCapacityKbps = static_cast<uint32_t>(configs[1])};
+                RLOGD("reporting link capacity estimate download: %d upload: %d",
+                      lce.downlinkCapacityKbps, lce.uplinkCapacityKbps);
+                Return<void> retStatus =
+                        radioService[slotId]->mRadioIndicationV1_4->currentLinkCapacityEstimate(
+                                RadioIndicationType::UNSOLICITED, lce);
+                radioService[slotId]->checkReturnStatus(retStatus);
+            }
+        } else {
+            hidl_vec<V1_2::PhysicalChannelConfig> physChanConfig;
+            physChanConfig.resize(1);
+            physChanConfig[0].status = (V1_2::CellConnectionStatus)configs[0];
+            physChanConfig[0].cellBandwidthDownlink = configs[1];
+            RLOGD("reportPhysicalChannelConfigs_1_2: %d %d", configs[0], configs[1]);
+            Return<void> retStatus =
+                    radioService[slotId]->mRadioIndicationV1_2->currentPhysicalChannelConfigs(
+                            RadioIndicationType::UNSOLICITED, physChanConfig);
+            radioService[slotId]->checkReturnStatus(retStatus);
+            {
+                // Just send the link estimate along with physical channel config, as it has
+                // at least the downlink bandwidth.
+                // Note: the bandwidth is just some hardcoded value, as there is not way to get
+                // that reliably on virtual devices, as of now.
+                V1_2::LinkCapacityEstimate lce = {
+                        .downlinkCapacityKbps = static_cast<uint32_t>(configs[1]),
+                        .uplinkCapacityKbps = static_cast<uint32_t>(configs[1])};
+                RLOGD("reporting link capacity estimate download: %d upload: %d",
+                      lce.downlinkCapacityKbps, lce.uplinkCapacityKbps);
+                Return<void> retStatus =
+                        radioService[slotId]->mRadioIndicationV1_2->currentLinkCapacityEstimate(
+                                RadioIndicationType::UNSOLICITED, lce);
+                radioService[slotId]->checkReturnStatus(retStatus);
+            }
+        }
     } else {
-      RLOGE(
-          "reportPhysicalChannelConfigs: radioService[%d]->mRadioIndicationV1_4 "
-          "== NULL",
-          slotId);
-      return -1;
+        RLOGE("reportPhysicalChannelConfigs: radioService[%d]->mRadioIndication == NULL", slotId);
+        return -1;
     }
-
-  return 0;
+    return 0;
 }
 
 int radio_1_6::keepaliveStatusInd(int slotId,
diff --git a/guest/hals/ril/reference-ril/reference-ril.c b/guest/hals/ril/reference-ril/reference-ril.c
index c3452ae..81b87a2e 100644
--- a/guest/hals/ril/reference-ril/reference-ril.c
+++ b/guest/hals/ril/reference-ril/reference-ril.c
@@ -704,11 +704,10 @@
 {
     int onOff;
 
-    int err;
     ATResponse *p_response = NULL;
 
     if (sState != RADIO_STATE_OFF) {
-        err = at_send_command("AT+CFUN=0", &p_response);
+        at_send_command("AT+CFUN=0", &p_response);
         setRadioState(RADIO_STATE_UNAVAILABLE);
     }
 
@@ -1197,7 +1196,6 @@
     RIL_Dial *p_dial;
     char *cmd;
     const char *clir;
-    int ret;
 
     p_dial = (RIL_Dial *)data;
 
@@ -1210,7 +1208,7 @@
 
     asprintf(&cmd, "ATD%s%s;", p_dial->address, clir);
 
-    ret = at_send_command(cmd, NULL);
+    at_send_command(cmd, NULL);
 
     free(cmd);
 
@@ -1254,7 +1252,6 @@
 {
     int *p_line;
 
-    int ret;
     char *cmd;
 
     if (getSIMStatus() == SIM_ABSENT) {
@@ -1267,7 +1264,7 @@
     // "Releases a specific active call X"
     asprintf(&cmd, "AT+CHLD=1%d", p_line[0]);
 
-    ret = at_send_command(cmd, NULL);
+    at_send_command(cmd, NULL);
 
     free(cmd);
 
@@ -1289,6 +1286,7 @@
 
     memset(response, 0, sizeof(response));
 
+    // TODO(b/206814247): Rename AT+CSQ command.
     err = at_send_command_singleline("AT+CSQ", "+CSQ:", &p_response);
 
     if (err < 0 || p_response->success == 0) {
@@ -1672,9 +1670,11 @@
     char *line = str, *p;
     int *resp = NULL;
     int skip;
-    int count = 3;
     int commas;
 
+    s_lac = -1;
+    s_cid = -1;
+
     RLOGD("parseRegistrationState. Parsing: %s",str);
     err = at_tok_start(&line);
     if (err < 0) goto error;
@@ -1712,19 +1712,14 @@
         case 0: /* +CREG: <stat> */
             err = at_tok_nextint(&line, &resp[0]);
             if (err < 0) goto error;
-            resp[1] = -1;
-            resp[2] = -1;
-        break;
+            break;
 
         case 1: /* +CREG: <n>, <stat> */
             err = at_tok_nextint(&line, &skip);
             if (err < 0) goto error;
             err = at_tok_nextint(&line, &resp[0]);
             if (err < 0) goto error;
-            resp[1] = -1;
-            resp[2] = -1;
-            if (err < 0) goto error;
-        break;
+            break;
 
         case 2: /* +CREG: <stat>, <lac>, <cid> */
             err = at_tok_nextint(&line, &resp[0]);
@@ -1758,13 +1753,16 @@
             if (err < 0) goto error;
             err = at_tok_nextint(&line, &resp[3]);
             if (err < 0) goto error;
-            count = 4;
         break;
         default:
             goto error;
     }
-    s_lac = resp[1];
-    s_cid = resp[2];
+
+    if (commas >= 2) {
+        s_lac = resp[1];
+        s_cid = resp[2];
+    }
+
     if (response)
         *response = resp;
     if (items)
@@ -2615,7 +2613,6 @@
     RIL_UNUSED_PARM(datalen);
 
     int err, len;
-    int instruction = 0;
     char *cmd = NULL;
     char *line = NULL;
     RIL_SIM_APDU *p_args = NULL;
@@ -2660,7 +2657,6 @@
     sscanf(&(sr.simResponse[len - 4]), "%02x%02x", &(sr.sw1), &(sr.sw2));
     sr.simResponse[len - 4] = '\0';
 
-    instruction = p_args->instruction;
     RIL_onRequestComplete(t, RIL_E_SUCCESS, &sr, sizeof(sr));
     at_response_free(p_response);
     return;
@@ -2851,14 +2847,22 @@
 
     if (ackSuccess == 1) {
         err = at_send_command("AT+CNMA=1", NULL);
+        if (err < 0) {
+            goto error;
+        }
     } else if (ackSuccess == 0)  {
         err = at_send_command("AT+CNMA=2", NULL);
+        if (err < 0) {
+            goto error;
+        }
     } else {
         RLOGE("unsupported arg to RIL_REQUEST_SMS_ACKNOWLEDGE\n");
         goto error;
     }
 
     RIL_onRequestComplete(t, RIL_E_SUCCESS, NULL, 0);
+
+    return;
 error:
     RIL_onRequestComplete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
 }
@@ -3264,6 +3268,33 @@
     RIL_onRequestComplete(t, RIL_E_SUCCESS, ci, sizeof(ci));
 }
 
+static void requestGetCellInfoList_1_6(void* data __unused, size_t datalen __unused, RIL_Token t) {
+    uint64_t curTime = ril_nano_time();
+    RIL_CellInfo_v16 ci[1] = {{    // ci[0]
+                               1,  // cellInfoType
+                               1,  // registered
+                               CELL_CONNECTION_PRIMARY_SERVING,
+                               { // union CellInfo
+                                {// RIL_CellInfoGsm gsm
+                                 {
+                                         // gsm.cellIdneityGsm
+                                         s_mcc,  // mcc
+                                         s_mnc,  // mnc
+                                         s_lac,  // lac
+                                         s_cid,  // cid
+                                         0,      // arfcn unknown
+                                         0x1,    // Base Station Identity Code set to arbitrarily 1
+                                 },
+                                 {
+                                         // gsm.signalStrengthGsm
+                                         10,  // signalStrength
+                                         0    // bitErrorRate
+                                         ,
+                                         INT_MAX  // timingAdvance invalid value
+                                 }}}}};
+
+    RIL_onRequestComplete(t, RIL_E_SUCCESS, ci, sizeof(ci));
+}
 
 static void requestSetCellInfoListRate(void *data, size_t datalen __unused, RIL_Token t)
 {
@@ -4670,6 +4701,10 @@
             requestGetCellInfoList(data, datalen, t);
             break;
 
+        case RIL_REQUEST_GET_CELL_INFO_LIST_1_6:
+            requestGetCellInfoList_1_6(data, datalen, t);
+            break;
+
         case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE:
             requestSetCellInfoListRate(data, datalen, t);
             break;
@@ -6018,7 +6053,7 @@
             response, sizeof(response));
         free(line);
     } else if (strStartsWith(s, "+CUSATEND")) {  // session end
-      RIL_onUnsolicitedResponse(RIL_UNSOL_STK_SESSION_END, NULL, 0);
+        RIL_onUnsolicitedResponse(RIL_UNSOL_STK_SESSION_END, NULL, 0);
     } else if (strStartsWith(s, "+CUSATP:")) {
         line = p = strdup(s);
         if (!line) {
@@ -6235,6 +6270,10 @@
     pthread_attr_init (&attr);
     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
     ret = pthread_create(&s_tid_mainloop, &attr, mainLoop, NULL);
+    if (ret < 0) {
+        RLOGE("pthread_create: %s:", strerror(errno));
+        return NULL;
+    }
 
     return &s_callbacks;
 }
diff --git a/host/commands/tapsetiff/Android.bp b/guest/hals/wpa_supplicant/Android.bp
similarity index 64%
copy from host/commands/tapsetiff/Android.bp
copy to guest/hals/wpa_supplicant/Android.bp
index 1d7dedb..c82554d 100644
--- a/host/commands/tapsetiff/Android.bp
+++ b/guest/hals/wpa_supplicant/Android.bp
@@ -1,5 +1,4 @@
-//
-// Copyright (C) 2020 The Android Open Source Project
+// Copyright (C) 2021 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,10 +13,15 @@
 // limitations under the License.
 
 package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
+    default_applicable_licenses: [
+        "external_wpa_supplicant_8_wpa_supplicant_license",
+    ],
 }
 
-sh_binary_host {
-    name: "tapsetiff",
-    src: "tapsetiff.py",
+cc_binary {
+    name: "wpa_supplicant_cf",
+    defaults: ["wpa_supplicant_defaults"],
+    static_libs: [
+        "lib_driver_cmd_simulated_cf_bp",
+    ],
 }
diff --git a/guest/libs/wpa_supplicant_8_lib/Android.bp b/guest/libs/wpa_supplicant_8_lib/Android.bp
new file mode 100644
index 0000000..d09457e
--- /dev/null
+++ b/guest/libs/wpa_supplicant_8_lib/Android.bp
@@ -0,0 +1,18 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_library_static {
+    name: "lib_driver_cmd_simulated_cf_bp",
+    srcs: ["driver_cmd_nl80211.c"],
+    cflags: ["-DCONFIG_ANDROID_LOG"],
+    header_libs: [
+        "wpa_supplicant_headers",
+    ],
+    shared_libs: [
+        "libc",
+        "libcutils",
+        "libnl",
+    ],
+    soc_specific: true,
+}
diff --git a/guest/monitoring/cuttlefish_service/Android.bp b/guest/monitoring/cuttlefish_service/Android.bp
index 133d233..d33d0e7 100644
--- a/guest/monitoring/cuttlefish_service/Android.bp
+++ b/guest/monitoring/cuttlefish_service/Android.bp
@@ -20,6 +20,9 @@
     name: "CuttlefishService",
     vendor: true,
     srcs: ["java/**/*.java"],
+    resource_dirs: [
+        "res",
+    ],
     static_libs: ["guava"],
     sdk_version: "28",
     privileged: true,
diff --git a/guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java b/guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java
index 23d4fec..000a96d 100644
--- a/guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java
+++ b/guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java
@@ -16,6 +16,8 @@
 package com.android.google.gce.gceservice;
 
 import android.bluetooth.BluetoothAdapter;
+import android.content.Context;
+import android.content.res.Resources;
 import android.util.Log;
 
 /*
@@ -28,8 +30,13 @@
     private final GceFuture<Boolean> mEnabled = new GceFuture<Boolean>("Bluetooth");
 
 
-    public BluetoothChecker() {
+    public BluetoothChecker(Context context) {
         super(LOG_TAG);
+        Resources res = context.getResources();
+        if (!res.getBoolean(R.bool.config_bt_required)) {
+            Log.i(LOG_TAG, "Bluetooth not required, assuming enabled.");
+            mEnabled.set(true);
+        }
     }
 
 
diff --git a/guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java b/guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java
index 80d497a..ef0aa03 100644
--- a/guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java
+++ b/guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java
@@ -51,8 +51,8 @@
     private final JobExecutor mExecutor = new JobExecutor();
     private final EventReporter mEventReporter = new EventReporter();
     private final GceBroadcastReceiver mBroadcastReceiver = new GceBroadcastReceiver();
-    private final BluetoothChecker mBluetoothChecker = new BluetoothChecker();
 
+    private BluetoothChecker mBluetoothChecker = null;
     private ConnectivityChecker mConnChecker;
     private GceWifiManager mWifiManager = null;
     private String mMostRecentAction = null;
@@ -76,6 +76,7 @@
             mWindowManager = getSystemService(WindowManager.class);
             mConnChecker = new ConnectivityChecker(this, mEventReporter);
             mWifiManager = new GceWifiManager(this, mEventReporter, mExecutor);
+            mBluetoothChecker = new BluetoothChecker(this);
 
             mPreviousRotation = getRotation();
             mPreviousScreenBounds = getScreenBounds();
diff --git a/guest/monitoring/cuttlefish_service/res/values/config.xml b/guest/monitoring/cuttlefish_service/res/values/config.xml
new file mode 100644
index 0000000..692a686
--- /dev/null
+++ b/guest/monitoring/cuttlefish_service/res/values/config.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 The Android Open Source Project
+
+     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.
+-->
+<resources>
+    <!-- Is BT required for boot complete -->
+    <bool name="config_bt_required">true</bool>
+</resources>
diff --git a/guest/monitoring/tombstone_transmit/tombstone_transmit.cpp b/guest/monitoring/tombstone_transmit/tombstone_transmit.cpp
index 3d08780..b283fef 100644
--- a/guest/monitoring/tombstone_transmit/tombstone_transmit.cpp
+++ b/guest/monitoring/tombstone_transmit/tombstone_transmit.cpp
@@ -123,8 +123,9 @@
     }
 
     if (!log_fd->IsOpen()) {
+      auto error = log_fd->StrError();
       ALOGE("Unable to connect to vsock:%u:%u: %s", FLAGS_cid, FLAGS_port,
-        log_fd->StrError());
+            error.c_str());
     } else if (!ifs.is_open()) {
       ALOGE("%s closed in the middle of readout.", ts_path.c_str());
     } else {
diff --git a/guest/services/wifi/init.wifi.sh b/guest/services/wifi/init.wifi.sh
new file mode 100755
index 0000000..a23f174
--- /dev/null
+++ b/guest/services/wifi/init.wifi.sh
@@ -0,0 +1,7 @@
+#!/vendor/bin/sh
+
+wifi_mac_prefix=`getprop ro.boot.wifi_mac_prefix`
+if [ -n "$wifi_mac_prefix" ]; then
+    /vendor/bin/mac80211_create_radios 2 $wifi_mac_prefix || exit 1
+fi
+
diff --git a/host/commands/adbshell/main.cpp b/host/commands/adbshell/main.cpp
deleted file mode 100644
index 7263f4c..0000000
--- a/host/commands/adbshell/main.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-/* Utility that uses an adb connection as the login shell. */
-
-#include <array>
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <string>
-#include <vector>
-
-#include <errno.h>
-#include <unistd.h>
-
-#include "common/libs/utils/environment.h"
-#include "host/libs/config/cuttlefish_config.h"
-
-// Many of our users interact with CVDs via ssh. They expect to be able to
-// get an Android shell (as opposed to the host shell) with a single command.
-//
-// Our goals are to:
-//
-//   * Allow the user to select which CVD to connect to
-//
-//   * Avoid modifications to the host-side sshd and the protocol
-//
-// We accomplish this by using specialized accounts: vsoc-## and cvd-## and
-// specific Android serial numbers:
-//
-//    The vsoc-01 account provides a host-side shell that controls the first CVD
-//    The cvd-01 account is connected to the Andorid shell of the first CVD
-//    The first CVD has a serial number of CUTTLEFISHCVD01
-//
-// The code in the commands/launch directory also follows these conventions by
-// default.
-//
-
-namespace {
-std::string VsocUser() {
-  std::string user = cuttlefish::StringFromEnv("USER", "");
-  assert(!user_cstring.empty());
-
-  std::string cvd_prefix = "cvd-";
-  if (user.find(cvd_prefix) == 0) {
-    user.replace(0, cvd_prefix.size(), cuttlefish::kVsocUserPrefix);
-  }
-  return user;
-}
-
-std::string CuttlefishConfigLocation() {
-  return std::string("/home/") + VsocUser() +
-         "/cuttlefish_runtime/cuttlefish_config.json";
-}
-
-std::string CuttlefishFindAdb() {
-  std::string rval = std::string("/home/") + VsocUser() + "/bin/adb";
-  if (TEMP_FAILURE_RETRY(access(rval.c_str(), X_OK)) == -1) {
-    return "/usr/bin/adb";
-  }
-  return rval;
-}
-
-void SetCuttlefishConfigEnv() {
-  setenv(cuttlefish::kCuttlefishConfigEnvVarName, CuttlefishConfigLocation().c_str(),
-         true);
-}
-}  // namespace
-
-int main(int argc, char* argv[]) {
-  SetCuttlefishConfigEnv();
-  auto instance = cuttlefish::CuttlefishConfig::Get()
-      ->ForDefaultInstance().adb_device_name();
-  std::string adb_path = CuttlefishFindAdb();
-
-  std::vector<char*> new_argv = {
-      const_cast<char*>(adb_path.c_str()), const_cast<char*>("-s"),
-      const_cast<char*>(instance.c_str()), const_cast<char*>("shell"),
-      const_cast<char*>("/system/bin/sh")};
-
-  // Some important data is lost before this point, and there are
-  // no great recovery options:
-  // * ssh with no arguments comes in with 1 arg of -adbshell. The command
-  //   given above does the right thing if we don't invoke the shell.
-  if (argc == 1) {
-    new_argv.back() = nullptr;
-  }
-  // * simple shell commands come in with a -c and a single string. The
-  //   problem here is that adb doesn't preserve spaces, so we need
-  //   to do additional escaping. The best compromise seems to be to
-  //   throw double quotes around each string.
-  for (int i = 1; i < argc; ++i) {
-    size_t buf_size = std::strlen(argv[i]) + 4;
-    new_argv.push_back(new char[buf_size]);
-    std::snprintf(new_argv.back(), buf_size, "\"%s\"", argv[i]);
-  }
-  //
-  // * scp seems to be pathologically broken when paths contain spaces.
-  //   spaces aren't properly escaped by gcloud, so scp will fail with
-  //   "scp: with ambiguous target." We might be able to fix this with
-  //   some creative parsing of the arguments, but that seems like
-  //   overkill.
-  new_argv.push_back(nullptr);
-  execv(new_argv[0], new_argv.data());
-  // This never should happen
-  return 2;
-}
diff --git a/host/commands/append_squashfs_overlay/Android.bp b/host/commands/append_squashfs_overlay/Android.bp
new file mode 100644
index 0000000..882bcb9
--- /dev/null
+++ b/host/commands/append_squashfs_overlay/Android.bp
@@ -0,0 +1,12 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+rust_binary_host {
+    name: "append_squashfs_overlay",
+    crate_name: "append_squashfs_overlay",
+    srcs: ["src/main.rs"],
+    rustlibs: [
+        "libclap",
+    ],
+}
\ No newline at end of file
diff --git a/host/commands/append_squashfs_overlay/Cargo.toml b/host/commands/append_squashfs_overlay/Cargo.toml
new file mode 100644
index 0000000..5472580
--- /dev/null
+++ b/host/commands/append_squashfs_overlay/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "append_squashfs_overlay"
+version = "0.1.0"
+authors = ["Jeongik Cha <[email protected]>"]
+edition = 2021
+
+[dependencies]
+clap = "2.33"
\ No newline at end of file
diff --git a/host/commands/append_squashfs_overlay/OWNERS b/host/commands/append_squashfs_overlay/OWNERS
new file mode 100644
index 0000000..0930c9e
--- /dev/null
+++ b/host/commands/append_squashfs_overlay/OWNERS
@@ -0,0 +1 @@
[email protected]
\ No newline at end of file
diff --git a/host/commands/append_squashfs_overlay/src/main.rs b/host/commands/append_squashfs_overlay/src/main.rs
new file mode 100644
index 0000000..281aef8
--- /dev/null
+++ b/host/commands/append_squashfs_overlay/src/main.rs
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+//! `append_squashfs_overlay` generates a new squashfs image(dest) which contains an overlay image(overlay) on an squashfs image(src).
+//! The tool ignores the existing overlay image in src, that is, the overlay image could be replaced with a new overlay image.
+use std::fs::File;
+use std::io::{copy, Error, ErrorKind, Read, Result, Seek, SeekFrom};
+use std::path::Path;
+
+use clap::{App, Arg};
+
+// https://dr-emann.github.io/squashfs/squashfs.html
+const BYTES_USED_FIELD_POS: u64 = (32 * 5 + 16 * 6 + 64) / 8;
+const SQUASHFS_MAGIC: u32 = 0x73717368;
+
+// https://git.openwrt.org/?p=project/fstools.git;a=blob;f=libfstools/rootdisk.c;h=9f2317f14e8d8f12c71b30944138d7a6c877b406;hb=refs/heads/master#l125
+// 64kb alignment
+const ROOTDEV_OVERLAY_ALIGN: u64 = 64 * 1024;
+
+fn align_size(size: u64, alignment: u64) -> u64 {
+    assert!(
+        alignment > 0 && (alignment & (alignment - 1) == 0),
+        "alignment should be greater than 0 and a power of 2."
+    );
+    (size + (alignment - 1)) & !(alignment - 1)
+}
+
+fn merge_fs(src: &Path, overlay: &Path, dest: &Path, overwrite: bool) -> Result<()> {
+    if dest.exists() && !overwrite {
+        return Err(Error::new(
+            ErrorKind::AlreadyExists,
+            "The destination file already exists, add -w option to overwrite.",
+        ));
+    }
+    let mut buffer = [0; 4];
+
+    let mut src = File::open(src)?;
+
+    src.read_exact(&mut buffer)?;
+    let magic = u32::from_le_bytes(buffer);
+    if magic != SQUASHFS_MAGIC {
+        return Err(Error::new(ErrorKind::InvalidData, "The source image isn't a squashfs image."));
+    }
+    src.seek(SeekFrom::Start(BYTES_USED_FIELD_POS))?;
+    let mut buffer = [0; 8];
+    src.read_exact(&mut buffer)?;
+
+    // https://git.openwrt.org/?p=project/fstools.git;a=blob;f=libfstools/rootdisk.c;h=9f2317f14e8d8f12c71b30944138d7a6c877b406;hb=refs/heads/master#l125
+    // use little endian
+    let bytes_used = u64::from_le_bytes(buffer);
+    let mut dest = File::create(dest)?;
+    let mut overlay = File::open(overlay)?;
+
+    src.seek(SeekFrom::Start(0))?;
+    let mut src_handle = src.take(align_size(bytes_used, ROOTDEV_OVERLAY_ALIGN));
+    copy(&mut src_handle, &mut dest)?;
+    copy(&mut overlay, &mut dest)?;
+    Ok(())
+}
+
+fn main() -> Result<()> {
+    let matches = App::new("append_squashfs_overlay")
+        .arg(Arg::with_name("src").required(true))
+        .arg(Arg::with_name("overlay").required(true))
+        .arg(Arg::with_name("dest").required(true))
+        .arg(
+            Arg::with_name("overwrite")
+                .short("w")
+                .required(false)
+                .takes_value(false)
+                .help("whether the tool overwrite dest or not"),
+        )
+        .get_matches();
+
+    let src = matches.value_of("src").unwrap().as_ref();
+    let overlay = matches.value_of("overlay").unwrap().as_ref();
+    let dest = matches.value_of("dest").unwrap().as_ref();
+    let overwrite = matches.is_present("overwrite");
+
+    merge_fs(src, overlay, dest, overwrite)?;
+    Ok(())
+}
diff --git a/host/commands/assemble_cvd/Android.bp b/host/commands/assemble_cvd/Android.bp
index 4ed4452..2a4095c 100644
--- a/host/commands/assemble_cvd/Android.bp
+++ b/host/commands/assemble_cvd/Android.bp
@@ -27,6 +27,7 @@
         "clean.cc",
         "disk_flags.cc",
         "flags.cc",
+        "flag_feature.cpp",
         "misc_info.cc",
         "super_image_mixer.cc",
     ],
@@ -34,9 +35,11 @@
         "bootimg_headers",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libbase",
+        "libfruit",
         "libjsoncpp",
         "libnl",
         "libprotobuf-cpp-full",
@@ -51,6 +54,7 @@
         "libsparse",
         "libcuttlefish_graphics_detector",
         "libcuttlefish_host_config",
+        "libcuttlefish_host_config_adb",
         "libcuttlefish_vm_manager",
         "libgflags",
     ],
diff --git a/host/commands/assemble_cvd/assemble_cvd.cc b/host/commands/assemble_cvd/assemble_cvd.cc
index 27eadb5..77d0337 100644
--- a/host/commands/assemble_cvd/assemble_cvd.cc
+++ b/host/commands/assemble_cvd/assemble_cvd.cc
@@ -23,18 +23,24 @@
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/utils/environment.h"
 #include "common/libs/utils/files.h"
+#include "common/libs/utils/flag_parser.h"
 #include "common/libs/utils/tee_logging.h"
 #include "host/commands/assemble_cvd/clean.h"
 #include "host/commands/assemble_cvd/disk_flags.h"
+#include "host/commands/assemble_cvd/flag_feature.h"
 #include "host/commands/assemble_cvd/flags.h"
+#include "host/libs/config/adb/adb.h"
+#include "host/libs/config/config_flag.h"
+#include "host/libs/config/custom_actions.h"
 #include "host/libs/config/fetcher_config.h"
 
 using cuttlefish::StringFromEnv;
 
 DEFINE_string(assembly_dir, StringFromEnv("HOME", ".") + "/cuttlefish_assembly",
               "A directory to put generated files common between instances");
-DEFINE_string(instance_dir, StringFromEnv("HOME", ".") + "/cuttlefish_runtime",
-              "A directory to put all instance specific files");
+DEFINE_string(instance_dir, StringFromEnv("HOME", ".") + "/cuttlefish",
+              "This is a directory that will hold the cuttlefish generated"
+              "files, including both instance-specific and common files");
 DEFINE_bool(resume, true, "Resume using the disk from the last session, if "
                           "possible. i.e., if --noresume is passed, the disk "
                           "will be reset to the state it was initially launched "
@@ -88,32 +94,57 @@
   return true;
 }
 
-void ValidateAdbModeFlag(const CuttlefishConfig& config) {
-  auto adb_modes = config.adb_mode();
-  adb_modes.erase(AdbMode::Unknown);
-  if (adb_modes.size() < 1) {
-    LOG(INFO) << "ADB not enabled";
-  }
-}
-
 #ifndef O_TMPFILE
 # define O_TMPFILE (020000000 | O_DIRECTORY)
 #endif
 
-const CuttlefishConfig* InitFilesystemAndCreateConfig(
-    FetcherConfig fetcher_config, KernelConfig kernel_config) {
-  std::string assembly_dir_parent = AbsolutePath(FLAGS_assembly_dir);
-  while (assembly_dir_parent[assembly_dir_parent.size() - 1] == '/') {
-    assembly_dir_parent =
-        assembly_dir_parent.substr(0, FLAGS_assembly_dir.rfind('/'));
+void CreateLegacySymlinks(const CuttlefishConfig::InstanceSpecific& instance) {
+  std::string log_files[] = {
+      "kernel.log",  "launcher.log",        "logcat",
+      "metrics.log", "modem_simulator.log", "crosvm_openwrt.log",
+  };
+  for (const auto& log_file : log_files) {
+    auto symlink_location = instance.PerInstancePath(log_file.c_str());
+    auto log_target = "logs/" + log_file;  // Relative path
+    if (symlink(log_target.c_str(), symlink_location.c_str()) != 0) {
+      PLOG(FATAL) << "symlink(\"" << log_target << ", " << symlink_location
+                  << ") failed";
+    }
   }
-  assembly_dir_parent =
-      assembly_dir_parent.substr(0, FLAGS_assembly_dir.rfind('/'));
-  auto log =
-      SharedFD::Open(
-          assembly_dir_parent,
-          O_WRONLY | O_TMPFILE,
-          S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+  std::stringstream legacy_instance_path_stream;
+  legacy_instance_path_stream << FLAGS_instance_dir;
+  if (gflags::GetCommandLineFlagInfoOrDie("instance_dir").is_default) {
+    legacy_instance_path_stream << "_runtime";
+  }
+  legacy_instance_path_stream << "." << instance.id();
+  auto legacy_instance_path = legacy_instance_path_stream.str();
+
+  if (DirectoryExists(legacy_instance_path, /* follow_symlinks */ false)) {
+    CHECK(RecursivelyRemoveDirectory(legacy_instance_path))
+        << "Failed to remove legacy directory " << legacy_instance_path;
+  } else if (FileExists(legacy_instance_path, /* follow_symlinks */ false)) {
+    CHECK(RemoveFile(legacy_instance_path))
+        << "Failed to remove instance_dir symlink " << legacy_instance_path;
+  }
+  if (symlink(instance.instance_dir().c_str(), legacy_instance_path.c_str())) {
+    PLOG(FATAL) << "symlink(\"" << instance.instance_dir() << "\", \""
+                << legacy_instance_path << "\") failed";
+  }
+}
+
+const CuttlefishConfig* InitFilesystemAndCreateConfig(
+    FetcherConfig fetcher_config, KernelConfig kernel_config,
+    fruit::Injector<>& injector) {
+  std::string runtime_dir_parent = AbsolutePath(FLAGS_instance_dir);
+  while (runtime_dir_parent[runtime_dir_parent.size() - 1] == '/') {
+    runtime_dir_parent =
+        runtime_dir_parent.substr(0, FLAGS_instance_dir.rfind('/'));
+  }
+  runtime_dir_parent =
+      runtime_dir_parent.substr(0, FLAGS_instance_dir.rfind('/'));
+  auto log = SharedFD::Open(runtime_dir_parent, O_WRONLY | O_TMPFILE,
+                            S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
   if (!log->IsOpen()) {
     LOG(ERROR) << "Could not open O_TMPFILE precursor to assemble_cvd.log: "
                << log->StrError();
@@ -129,15 +160,18 @@
     // SaveConfig line below. Don't launch cuttlefish subprocesses between these
     // two operations, as those will assume they can read the config object from
     // disk.
-    auto config = InitializeCuttlefishConfiguration(
-        FLAGS_instance_dir, FLAGS_modem_simulator_count, kernel_config);
+    auto config = InitializeCuttlefishConfiguration(FLAGS_instance_dir,
+                                                    FLAGS_modem_simulator_count,
+                                                    kernel_config, injector);
     std::set<std::string> preserving;
-    if (FLAGS_resume && ShouldCreateAllCompositeDisks(config)) {
+    bool create_os_composite_disk = ShouldCreateOsCompositeDisk(config);
+    if (FLAGS_resume && create_os_composite_disk) {
       LOG(INFO) << "Requested resuming a previous session (the default behavior) "
                 << "but the base images have changed under the overlay, making the "
                 << "overlay incompatible. Wiping the overlay files.";
-    } else if (FLAGS_resume && !ShouldCreateAllCompositeDisks(config)) {
+    } else if (FLAGS_resume && !create_os_composite_disk) {
       preserving.insert("overlay.img");
+      preserving.insert("ap_overlay.img");
       preserving.insert("os_composite_disk_config.txt");
       preserving.insert("os_composite_gpt_header.img");
       preserving.insert("os_composite_gpt_footer.img");
@@ -165,16 +199,30 @@
         ss.str("");
       }
     }
-    CHECK(CleanPriorFiles(preserving, FLAGS_assembly_dir, FLAGS_instance_dir))
+    CHECK(CleanPriorFiles(preserving, config.assembly_dir(),
+                          config.instance_dirs()))
         << "Failed to clean prior files";
 
-    // Create assembly directory if it doesn't exist.
-    CHECK(EnsureDirectoryExists(FLAGS_assembly_dir));
+    CHECK(EnsureDirectoryExists(config.root_dir()));
+    CHECK(EnsureDirectoryExists(config.assembly_dir()));
+    CHECK(EnsureDirectoryExists(config.instances_dir()));
     if (log->LinkAtCwd(config.AssemblyPath("assemble_cvd.log"))) {
       LOG(ERROR) << "Unable to persist assemble_cvd log at "
                   << config.AssemblyPath("assemble_cvd.log")
                   << ": " << log->StrError();
     }
+
+    auto disk_config = GetOsCompositeDiskConfig();
+    if (auto it = std::find_if(disk_config.begin(), disk_config.end(),
+                               [](const auto& partition) {
+                                 return partition.label == "ap_rootfs";
+                               });
+        it != disk_config.end()) {
+      auto ap_image_idx = std::distance(disk_config.begin(), it) + 1;
+      std::stringstream ss;
+      ss << "/dev/vda" << ap_image_idx;
+      config.set_ap_image_dev_path(ss.str());
+    }
     for (const auto& instance : config.Instances()) {
       // Create instance directory if it doesn't exist.
       CHECK(EnsureDirectoryExists(instance.instance_dir()));
@@ -184,21 +232,41 @@
       CHECK(EnsureDirectoryExists(shared_dir));
       auto recording_dir = instance.instance_dir() + "/recording";
       CHECK(EnsureDirectoryExists(recording_dir));
+      CHECK(EnsureDirectoryExists(instance.PerInstanceLogPath("")));
+      // TODO(schuffelen): Move this code somewhere better
+      CreateLegacySymlinks(instance);
     }
     CHECK(SaveConfig(config)) << "Failed to initialize configuration";
   }
 
-  std::string first_instance = FLAGS_instance_dir + "." + std::to_string(GetInstance());
-  CHECK_EQ(symlink(first_instance.c_str(), FLAGS_instance_dir.c_str()), 0)
-      << "Could not symlink \"" << first_instance << "\" to \"" << FLAGS_instance_dir << "\"";
-
   // Do this early so that the config object is ready for anything that needs it
   auto config = CuttlefishConfig::Get();
   CHECK(config) << "Failed to obtain config singleton";
 
-  ValidateAdbModeFlag(*config);
+  if (DirectoryExists(FLAGS_assembly_dir, /* follow_symlinks */ false)) {
+    CHECK(RecursivelyRemoveDirectory(FLAGS_assembly_dir))
+        << "Failed to remove directory " << FLAGS_assembly_dir;
+  } else if (FileExists(FLAGS_assembly_dir, /* follow_symlinks */ false)) {
+    CHECK(RemoveFile(FLAGS_assembly_dir))
+        << "Failed to remove file" << FLAGS_assembly_dir;
+  }
+  if (symlink(config->assembly_dir().c_str(), FLAGS_assembly_dir.c_str())) {
+    PLOG(FATAL) << "symlink(\"" << config->assembly_dir() << "\", \""
+                << FLAGS_assembly_dir << "\") failed";
+  }
 
-  CreateDynamicDiskFiles(fetcher_config, config);
+  std::string first_instance = config->Instances()[0].instance_dir();
+  std::string double_legacy_instance_dir = FLAGS_instance_dir + "_runtime";
+  if (FileExists(double_legacy_instance_dir, /* follow_symlinks */ false)) {
+    CHECK(RemoveFile(double_legacy_instance_dir))
+        << "Failed to remove symlink " << double_legacy_instance_dir;
+  }
+  if (symlink(first_instance.c_str(), double_legacy_instance_dir.c_str())) {
+    PLOG(FATAL) << "Could not symlink \"" << first_instance << "\" to \""
+                << double_legacy_instance_dir << "\"";
+  }
+
+  CreateDynamicDiskFiles(fetcher_config, *config);
 
   return config;
 }
@@ -218,6 +286,17 @@
   SetCommandLineOptionWithMode("initramfs_path", discovered_ramdisk.c_str(),
                                google::FlagSettingMode::SET_FLAGS_DEFAULT);
 }
+
+fruit::Component<> FlagsComponent() {
+  return fruit::createComponent()
+      .install(AdbConfigComponent)
+      .install(AdbConfigFlagComponent)
+      .install(AdbConfigFragmentComponent)
+      .install(GflagsComponent)
+      .install(ConfigFlagComponent)
+      .install(CustomActionsComponent);
+}
+
 } // namespace
 
 int AssembleCvdMain(int argc, char** argv) {
@@ -247,10 +326,54 @@
   ExtractKernelParamsFromFetcherConfig(fetcher_config);
 
   KernelConfig kernel_config;
-  CHECK(ParseCommandLineFlags(&argc, &argv, &kernel_config)) << "Failed to parse arguments";
+  auto args = ArgsToVec(argc - 1, argv + 1);
 
-  auto config =
-      InitFilesystemAndCreateConfig(std::move(fetcher_config), kernel_config);
+  bool help = false;
+  std::string help_str;
+  bool helpxml = false;
+
+  std::vector<Flag> help_flags = {
+      GflagsCompatFlag("help", help),
+      GflagsCompatFlag("helpfull", help),
+      GflagsCompatFlag("helpshort", help),
+      GflagsCompatFlag("helpmatch", help_str),
+      GflagsCompatFlag("helpon", help_str),
+      GflagsCompatFlag("helppackage", help_str),
+      GflagsCompatFlag("helpxml", helpxml),
+  };
+  for (const auto& help_flag : help_flags) {
+    if (!help_flag.Parse(args)) {
+      LOG(ERROR) << "Failed to process help flag.";
+      return 1;
+    }
+  }
+
+  fruit::Injector<> injector(FlagsComponent);
+  auto flag_features = injector.getMultibindings<FlagFeature>();
+  if (!FlagFeature::ProcessFlags(flag_features, args)) {
+    LOG(ERROR) << "Failed to parse flags.";
+    return 1;
+  }
+
+  if (help || help_str != "") {
+    LOG(WARNING) << "TODO(schuffelen): Implement `--help` for assemble_cvd.";
+    LOG(WARNING) << "In the meantime, call `launch_cvd --help`";
+    return 1;
+  } else if (helpxml) {
+    if (!FlagFeature::WriteGflagsHelpXml(flag_features, std::cout)) {
+      LOG(ERROR) << "Failure in writing gflags helpxml output";
+    }
+    std::exit(1);  // For parity with gflags
+  }
+  // TODO(schuffelen): Put in "unknown flag" guards after gflags is removed.
+  // gflags either consumes all arguments that start with - or leaves all of
+  // them in place, and either errors out on unknown flags or accepts any flags.
+
+  CHECK(GetKernelConfigAndSetDefaults(&kernel_config))
+      << "Failed to parse arguments";
+
+  auto config = InitFilesystemAndCreateConfig(std::move(fetcher_config),
+                                              kernel_config, injector);
 
   std::cout << GetConfigFilePath(*config) << "\n";
   std::cout << std::flush;
diff --git a/host/commands/assemble_cvd/boot_config.cc b/host/commands/assemble_cvd/boot_config.cc
index b433940..99c0b61 100644
--- a/host/commands/assemble_cvd/boot_config.cc
+++ b/host/commands/assemble_cvd/boot_config.cc
@@ -29,6 +29,7 @@
 #include "common/libs/utils/environment.h"
 #include "common/libs/utils/files.h"
 #include "common/libs/utils/subprocess.h"
+#include "host/libs/config/bootconfig_args.h"
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/config/kernel_args.h"
 #include "host/libs/vm_manager/crosvm_manager.h"
@@ -43,10 +44,10 @@
 namespace {
 
 size_t WriteEnvironment(const CuttlefishConfig& config,
-                        const std::vector<std::string>& kernel_args,
+                        const std::string& kernel_args,
                         const std::string& env_path) {
   std::ostringstream env;
-  env << "bootargs=" << android::base::Join(kernel_args, " ") << '\0';
+  env << "bootargs=" << kernel_args << '\0';
   if (!config.boot_slot().empty()) {
       env << "android_slot_suffix=_" << config.boot_slot() << '\0';
   }
@@ -58,7 +59,7 @@
   }
 
   // Note that the 0 index points to the GPT table.
-  env << "bootcmd=boot_android virtio 0#misc" << '\0';
+  env << "bootcmd=verified_boot_android virtio 0#misc" << '\0';
   if (FLAGS_vm_manager == CrosvmManager::name() &&
       config.target_arch() == Arch::Arm64) {
     env << "fdtaddr=0x80000000" << '\0';
@@ -79,42 +80,89 @@
 
 }  // namespace
 
+class InitBootloaderEnvPartitionImpl : public InitBootloaderEnvPartition {
+ public:
+  INJECT(InitBootloaderEnvPartitionImpl(
+      const CuttlefishConfig& config,
+      const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
 
-bool InitBootloaderEnvPartition(const CuttlefishConfig& config,
-                                const CuttlefishConfig::InstanceSpecific& instance) {
-  auto boot_env_image_path = instance.uboot_env_image_path();
-  auto tmp_boot_env_image_path = boot_env_image_path + ".tmp";
-  auto uboot_env_path = instance.PerInstancePath("mkenvimg_input");
-  auto kernel_args = KernelCommandLineFromConfig(config);
-  if(!WriteEnvironment(config, kernel_args, uboot_env_path)) {
-    LOG(ERROR) << "Unable to write out plaintext env '" << uboot_env_path << ".'";
-    return false;
-  }
+  // Feature
+  std::string Name() const override { return "InitBootloaderEnvPartitionImpl"; }
+  bool Enabled() const override { return !config_.protected_vm(); }
 
-  auto mkimage_path = HostBinaryPath("mkenvimage");
-  Command cmd(mkimage_path);
-  cmd.AddParameter("-s");
-  cmd.AddParameter("4096");
-  cmd.AddParameter("-o");
-  cmd.AddParameter(tmp_boot_env_image_path);
-  cmd.AddParameter(uboot_env_path);
-  int success = cmd.Start().Wait();
-  if (success != 0) {
-    LOG(ERROR) << "Unable to run mkenvimage. Exited with status " << success;
-    return false;
-  }
-
-  if(!FileExists(boot_env_image_path) || ReadFile(boot_env_image_path) != ReadFile(tmp_boot_env_image_path)) {
-    if(!RenameFile(tmp_boot_env_image_path, boot_env_image_path)) {
-      LOG(ERROR) << "Unable to delete the old env image.";
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    auto boot_env_image_path = instance_.uboot_env_image_path();
+    auto tmp_boot_env_image_path = boot_env_image_path + ".tmp";
+    auto uboot_env_path = instance_.PerInstancePath("mkenvimg_input");
+    auto kernel_cmdline =
+        android::base::Join(KernelCommandLineFromConfig(config_), " ");
+    // If the bootconfig isn't supported in the guest kernel, the bootconfig
+    // args need to be passed in via the uboot env. This won't be an issue for
+    // protect kvm which is running a kernel with bootconfig support.
+    if (!config_.bootconfig_supported()) {
+      auto bootconfig_args = android::base::Join(
+          BootconfigArgsFromConfig(config_, instance_), " ");
+      // "androidboot.hardware" kernel parameter has changed to "hardware" in
+      // bootconfig and needs to be replaced before being used in the kernel
+      // cmdline.
+      bootconfig_args = android::base::StringReplace(
+          bootconfig_args, " hardware=", " androidboot.hardware=", true);
+      // TODO(b/182417593): Until we pass the module parameters through
+      // modules.options, we pass them through bootconfig using
+      // 'kernel.<key>=<value>' But if we don't support bootconfig, we need to
+      // rename them back to the old cmdline version
+      bootconfig_args =
+          android::base::StringReplace(bootconfig_args, " kernel.", " ", true);
+      kernel_cmdline += " ";
+      kernel_cmdline += bootconfig_args;
+    }
+    if (!WriteEnvironment(config_, kernel_cmdline, uboot_env_path)) {
+      LOG(ERROR) << "Unable to write out plaintext env '" << uboot_env_path
+                 << ".'";
       return false;
     }
-    LOG(DEBUG) << "Updated bootloader environment image.";
-  } else {
-    RemoveFile(tmp_boot_env_image_path);
+
+    auto mkimage_path = HostBinaryPath("mkenvimage");
+    Command cmd(mkimage_path);
+    cmd.AddParameter("-s");
+    cmd.AddParameter("4096");
+    cmd.AddParameter("-o");
+    cmd.AddParameter(tmp_boot_env_image_path);
+    cmd.AddParameter(uboot_env_path);
+    int success = cmd.Start().Wait();
+    if (success != 0) {
+      LOG(ERROR) << "Unable to run mkenvimage. Exited with status " << success;
+      return false;
+    }
+
+    if (!FileExists(boot_env_image_path) ||
+        ReadFile(boot_env_image_path) != ReadFile(tmp_boot_env_image_path)) {
+      if (!RenameFile(tmp_boot_env_image_path, boot_env_image_path)) {
+        LOG(ERROR) << "Unable to delete the old env image.";
+        return false;
+      }
+      LOG(DEBUG) << "Updated bootloader environment image.";
+    } else {
+      RemoveFile(tmp_boot_env_image_path);
+    }
+
+    return true;
   }
 
-  return true;
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+fruit::Component<fruit::Required<const CuttlefishConfig,
+                                 const CuttlefishConfig::InstanceSpecific>,
+                 InitBootloaderEnvPartition>
+InitBootloaderEnvPartitionComponent() {
+  return fruit::createComponent()
+      .bind<InitBootloaderEnvPartition, InitBootloaderEnvPartitionImpl>()
+      .addMultibinding<Feature, InitBootloaderEnvPartition>();
 }
 
 } // namespace cuttlefish
diff --git a/host/commands/assemble_cvd/boot_config.h b/host/commands/assemble_cvd/boot_config.h
index 1a81b79..74109dd 100644
--- a/host/commands/assemble_cvd/boot_config.h
+++ b/host/commands/assemble_cvd/boot_config.h
@@ -16,11 +16,19 @@
 #pragma once
 
 #include <string>
-#include <host/libs/config/cuttlefish_config.h>
+
+#include <fruit/fruit.h>
+
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/feature.h"
 
 namespace cuttlefish {
 
-bool InitBootloaderEnvPartition(const CuttlefishConfig& config,
-                                const CuttlefishConfig::InstanceSpecific& instance);
+class InitBootloaderEnvPartition : public Feature {};
+
+fruit::Component<fruit::Required<const CuttlefishConfig,
+                                 const CuttlefishConfig::InstanceSpecific>,
+                 InitBootloaderEnvPartition>
+InitBootloaderEnvPartitionComponent();
 
 } // namespace cuttlefish
diff --git a/host/commands/assemble_cvd/boot_image_utils.cc b/host/commands/assemble_cvd/boot_image_utils.cc
index cfad23f..5e1cbd5 100644
--- a/host/commands/assemble_cvd/boot_image_utils.cc
+++ b/host/commands/assemble_cvd/boot_image_utils.cc
@@ -222,11 +222,20 @@
     return false;
   }
 
-  auto fd = SharedFD::Open(tmp_boot_image_path, O_RDWR);
-  auto original_size = FileSize(boot_image_path);
-  CHECK(fd->Truncate(original_size) == 0)
-    << "`truncate --size=" << original_size << " " << tmp_boot_image_path << "` "
-    << "failed: " << fd->StrError();
+  auto avbtool_path = HostBinaryPath("avbtool");
+  Command avb_cmd(avbtool_path);
+  avb_cmd.AddParameter("add_hash_footer");
+  avb_cmd.AddParameter("--image");
+  avb_cmd.AddParameter(tmp_boot_image_path);
+  avb_cmd.AddParameter("--partition_size");
+  avb_cmd.AddParameter(FileSize(boot_image_path));
+  avb_cmd.AddParameter("--partition_name");
+  avb_cmd.AddParameter("boot");
+  success = avb_cmd.Start().Wait();
+  if (success != 0) {
+    LOG(ERROR) << "Unable to run avbtool. Exited with status " << success;
+    return false;
+  }
 
   return DeleteTmpFileIfNotChanged(tmp_boot_image_path, new_boot_image_path);
 }
@@ -235,8 +244,6 @@
                            const std::string& vendor_boot_image_path,
                            const std::string& new_vendor_boot_image_path,
                            const std::string& unpack_dir,
-                           const std::string& repack_dir,
-                           const std::vector<std::string>& bootconfig_args,
                            bool bootconfig_supported) {
   if (UnpackVendorBootImageIfNotUnpacked(vendor_boot_image_path, unpack_dir) ==
       false) {
@@ -255,23 +262,15 @@
     ramdisk_path = unpack_dir + "/" + CONCATENATED_VENDOR_RAMDISK;
   }
 
-  auto bootconfig_fd = SharedFD::Creat(repack_dir + "/bootconfig", 0666);
-  if (!bootconfig_fd->IsOpen()) {
-    LOG(ERROR) << "Unable to create intermediate bootconfig file: "
-               << bootconfig_fd->StrError();
-    return false;
-  }
   std::string bootconfig = ReadFile(unpack_dir + "/bootconfig");
-  bootconfig_fd->Write(bootconfig.c_str(), bootconfig.size());
   LOG(DEBUG) << "Bootconfig parameters from vendor boot image are "
-             << ReadFile(repack_dir + "/bootconfig");
+             << bootconfig;
   std::string vendor_boot_params = ReadFile(unpack_dir + "/vendor_boot_params");
   auto kernel_cmdline =
       ExtractValue(vendor_boot_params, "vendor command line args: ") +
       (bootconfig_supported
            ? ""
-           : " " + android::base::StringReplace(bootconfig, "\n", " ", true) +
-                 " " + android::base::Join(bootconfig_args, " "));
+           : " " + android::base::StringReplace(bootconfig, "\n", " ", true));
   if (!bootconfig_supported) {
     // TODO(b/182417593): Until we pass the module parameters through
     // modules.options, we pass them through bootconfig using
@@ -280,8 +279,7 @@
     kernel_cmdline = android::base::StringReplace(
         kernel_cmdline, " kernel.", " ", true);
   }
-  LOG(DEBUG) << "Cmdline from vendor boot image and config is "
-             << kernel_cmdline;
+  LOG(DEBUG) << "Cmdline from vendor boot image is " << kernel_cmdline;
 
   auto tmp_vendor_boot_image_path = new_vendor_boot_image_path + TMP_EXTENSION;
   auto repack_path = HostBinaryPath("mkbootimg");
@@ -298,7 +296,7 @@
   repack_cmd.AddParameter(unpack_dir + "/dtb");
   if (bootconfig_supported) {
     repack_cmd.AddParameter("--vendor_bootconfig");
-    repack_cmd.AddParameter(repack_dir + "/bootconfig");
+    repack_cmd.AddParameter(unpack_dir + "/bootconfig");
   }
 
   int success = repack_cmd.Start().Wait();
@@ -307,11 +305,20 @@
     return false;
   }
 
-  auto fd = SharedFD::Open(tmp_vendor_boot_image_path, O_RDWR);
-  auto original_size = FileSize(vendor_boot_image_path);
-  CHECK(fd->Truncate(original_size) == 0)
-    << "`truncate --size=" << original_size << " " << tmp_vendor_boot_image_path << "` "
-    << "failed: " << fd->StrError();
+  auto avbtool_path = HostBinaryPath("avbtool");
+  Command avb_cmd(avbtool_path);
+  avb_cmd.AddParameter("add_hash_footer");
+  avb_cmd.AddParameter("--image");
+  avb_cmd.AddParameter(tmp_vendor_boot_image_path);
+  avb_cmd.AddParameter("--partition_size");
+  avb_cmd.AddParameter(FileSize(vendor_boot_image_path));
+  avb_cmd.AddParameter("--partition_name");
+  avb_cmd.AddParameter("vendor_boot");
+  success = avb_cmd.Start().Wait();
+  if (success != 0) {
+    LOG(ERROR) << "Unable to run avbtool. Exited with status " << success;
+    return false;
+  }
 
   return DeleteTmpFileIfNotChanged(tmp_vendor_boot_image_path, new_vendor_boot_image_path);
 }
@@ -319,14 +326,11 @@
 bool RepackVendorBootImageWithEmptyRamdisk(
     const std::string& vendor_boot_image_path,
     const std::string& new_vendor_boot_image_path,
-    const std::string& unpack_dir, const std::string& repack_dir,
-    const std::vector<std::string>& bootconfig_args,
-    bool bootconfig_supported) {
+    const std::string& unpack_dir, bool bootconfig_supported) {
   auto empty_ramdisk_file =
       SharedFD::Creat(unpack_dir + "/empty_ramdisk", 0666);
   return RepackVendorBootImage(
       unpack_dir + "/empty_ramdisk", vendor_boot_image_path,
-      new_vendor_boot_image_path, unpack_dir, repack_dir, bootconfig_args,
-      bootconfig_supported);
+      new_vendor_boot_image_path, unpack_dir, bootconfig_supported);
 }
 } // namespace cuttlefish
diff --git a/host/commands/assemble_cvd/boot_image_utils.h b/host/commands/assemble_cvd/boot_image_utils.h
index fafb514..298fdb4 100644
--- a/host/commands/assemble_cvd/boot_image_utils.h
+++ b/host/commands/assemble_cvd/boot_image_utils.h
@@ -27,12 +27,9 @@
                            const std::string& vendor_boot_image_path,
                            const std::string& new_vendor_boot_image_path,
                            const std::string& unpack_dir,
-                           const std::string& repack_dir,
-                           const std::vector<std::string>& bootconfig_args,
                            bool bootconfig_supported);
 bool RepackVendorBootImageWithEmptyRamdisk(
     const std::string& vendor_boot_image_path,
     const std::string& new_vendor_boot_image_path,
-    const std::string& unpack_dir, const std::string& repack_dir,
-    const std::vector<std::string>& bootconfig_args, bool bootconfig_supported);
+    const std::string& unpack_dir, bool bootconfig_supported);
 }
diff --git a/host/commands/assemble_cvd/clean.cc b/host/commands/assemble_cvd/clean.cc
index 6197a8f..853e11f 100644
--- a/host/commands/assemble_cvd/clean.cc
+++ b/host/commands/assemble_cvd/clean.cc
@@ -113,10 +113,9 @@
 
 } // namespace
 
-bool CleanPriorFiles(
-    const std::set<std::string>& preserving,
-    const std::string& assembly_dir,
-    const std::string& instance_dir) {
+bool CleanPriorFiles(const std::set<std::string>& preserving,
+                     const std::string& assembly_dir,
+                     const std::vector<std::string>& instance_dirs) {
   std::vector<std::string> paths = {
     // Everything in the assembly directory
     assembly_dir,
@@ -125,19 +124,7 @@
     // The global link to the config file
     GetGlobalConfigFileLink(),
   };
-
-  std::string runtime_dir_parent = cpp_dirname(AbsolutePath(instance_dir));
-  std::string runtime_dirs_basename = cpp_basename(AbsolutePath(instance_dir));
-
-  std::regex instance_dir_regex("^.+\\.[1-9]\\d*$");
-  for (const auto& path : DirectoryContents(runtime_dir_parent)) {
-    std::string absl_path = runtime_dir_parent + "/" + path;
-    if((path.rfind(runtime_dirs_basename, 0) == 0) && std::regex_match(path, instance_dir_regex) &&
-        DirectoryExists(absl_path)) {
-      paths.push_back(absl_path);
-    }
-  }
-  paths.push_back(instance_dir);
+  paths.insert(paths.end(), instance_dirs.begin(), instance_dirs.end());
   return CleanPriorFiles(paths, preserving);
 }
 
diff --git a/host/commands/assemble_cvd/clean.h b/host/commands/assemble_cvd/clean.h
index 1f33685..febd5c1 100644
--- a/host/commands/assemble_cvd/clean.h
+++ b/host/commands/assemble_cvd/clean.h
@@ -20,10 +20,9 @@
 
 namespace cuttlefish {
 
-bool CleanPriorFiles(
-    const std::set<std::string>& preserving,
-    const std::string& assembly_dir,
-    const std::string& instance_dir);
+bool CleanPriorFiles(const std::set<std::string>& preserving,
+                     const std::string& assembly_dir,
+                     const std::vector<std::string>& instance_dirs);
 
 bool EnsureDirectoryExists(const std::string& directory_path);
 
diff --git a/host/commands/assemble_cvd/disk_flags.cc b/host/commands/assemble_cvd/disk_flags.cc
index e5ccac9..b046339 100644
--- a/host/commands/assemble_cvd/disk_flags.cc
+++ b/host/commands/assemble_cvd/disk_flags.cc
@@ -16,14 +16,14 @@
 
 #include "host/commands/assemble_cvd/disk_flags.h"
 
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+#include <fruit/fruit.h>
+#include <gflags/gflags.h>
 #include <sys/statvfs.h>
 
 #include <fstream>
 
-#include <android-base/logging.h>
-#include <android-base/strings.h>
-#include <gflags/gflags.h>
-
 #include "common/libs/fs/shared_buf.h"
 #include "common/libs/utils/environment.h"
 #include "common/libs/utils/files.h"
@@ -35,18 +35,20 @@
 #include "host/libs/config/bootconfig_args.h"
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/config/data_image.h"
-#include "host/libs/image_aggregator/image_aggregator.h"
 #include "host/libs/vm_manager/crosvm_manager.h"
 
 // Taken from external/avb/libavb/avb_slot_verify.c; this define is not in the headers
 #define VBMETA_MAX_SIZE 65536ul
 
-DEFINE_string(system_image_dir, cuttlefish::DefaultGuestImagePath(""),
-              "Location of the system partition images.");
+DECLARE_string(system_image_dir);
 
 DEFINE_string(boot_image, "",
               "Location of cuttlefish boot image. If empty it is assumed to be "
               "boot.img in the directory specified by -system_image_dir.");
+DEFINE_string(
+    init_boot_image, "",
+    "Location of cuttlefish init boot image. If empty it is assumed to "
+    "be init_boot.img in the directory specified by -system_image_dir.");
 DEFINE_string(data_image, "", "Location of the data partition image.");
 DEFINE_string(super_image, "", "Location of the super partition image.");
 DEFINE_string(misc_image, "",
@@ -63,13 +65,23 @@
 DEFINE_string(vbmeta_system_image, "",
               "Location of cuttlefish vbmeta_system image. If empty it is assumed to "
               "be vbmeta_system.img in the directory specified by -system_image_dir.");
-DEFINE_string(esp, "", "Path to ESP partition image (FAT formatted)");
+DEFINE_string(otheros_esp_image, "",
+              "Location of cuttlefish esp image. If the image does not exist, "
+              "and --otheros_root_image is specified, an esp partition image "
+              "is created with default bootloaders.");
+DEFINE_string(otheros_kernel_path, "",
+              "Location of cuttlefish otheros kernel.");
+DEFINE_string(otheros_initramfs_path, "",
+              "Location of cuttlefish otheros initramfs.img.");
+DEFINE_string(otheros_root_image, "",
+              "Location of cuttlefish otheros root filesystem image.");
 
 DEFINE_int32(blank_metadata_image_mb, 16,
              "The size of the blank metadata image to generate, MB.");
 DEFINE_int32(blank_sdcard_image_mb, 2048,
              "If enabled, the size of the blank sdcard image to generate, MB.");
 
+DECLARE_string(ap_rootfs_image);
 DECLARE_string(bootloader);
 DECLARE_bool(use_sdcard);
 DECLARE_string(initramfs_path);
@@ -92,6 +104,11 @@
   std::string default_boot_image = FLAGS_system_image_dir + "/boot.img";
   SetCommandLineOptionWithMode("boot_image", default_boot_image.c_str(),
                                google::FlagSettingMode::SET_FLAGS_DEFAULT);
+  std::string default_init_boot_image =
+      FLAGS_system_image_dir + "/init_boot.img";
+  SetCommandLineOptionWithMode("init_boot_image",
+                               default_init_boot_image.c_str(),
+                               google::FlagSettingMode::SET_FLAGS_DEFAULT);
   std::string default_data_image = FLAGS_system_image_dir + "/userdata.img";
   SetCommandLineOptionWithMode("data_image", default_data_image.c_str(),
                                google::FlagSettingMode::SET_FLAGS_DEFAULT);
@@ -104,6 +121,9 @@
   std::string default_misc_image = FLAGS_system_image_dir + "/misc.img";
   SetCommandLineOptionWithMode("misc_image", default_misc_image.c_str(),
                                google::FlagSettingMode::SET_FLAGS_DEFAULT);
+  std::string default_esp_image = FLAGS_system_image_dir + "/esp.img";
+  SetCommandLineOptionWithMode("otheros_esp_image", default_esp_image.c_str(),
+                               google::FlagSettingMode::SET_FLAGS_DEFAULT);
   std::string default_vendor_boot_image = FLAGS_system_image_dir
                                         + "/vendor_boot.img";
   SetCommandLineOptionWithMode("vendor_boot_image",
@@ -120,78 +140,108 @@
 
   return true;
 }
-
-std::vector<ImagePartition> os_composite_disk_config(
-    const CuttlefishConfig::InstanceSpecific& instance) {
+void create_overlay_image(const CuttlefishConfig& config,
+                          std::string overlay_path) {
+  bool missingOverlay = !FileExists(overlay_path);
+  bool newOverlay = FileModificationTime(overlay_path) <
+                    FileModificationTime(config.os_composite_disk_path());
+  if (missingOverlay || !FLAGS_resume || newOverlay) {
+    CreateQcowOverlay(config.crosvm_binary(), config.os_composite_disk_path(),
+                      overlay_path);
+  }
+}
+std::vector<ImagePartition> GetOsCompositeDiskConfig() {
   std::vector<ImagePartition> partitions;
-  partitions.push_back(ImagePartition {
-    .label = "misc",
-    .image_file_path = FLAGS_misc_image,
+  partitions.push_back(ImagePartition{
+      .label = "misc",
+      .image_file_path = FLAGS_misc_image,
+      .read_only = true,
   });
-  if (!FLAGS_esp.empty()) {
-    partitions.push_back(ImagePartition {
-      .label = "esp",
-      .image_file_path = FLAGS_esp,
-      .type = kEfiSystemPartition,
+  partitions.push_back(ImagePartition{
+      .label = "boot_a",
+      .image_file_path = FLAGS_boot_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "boot_b",
+      .image_file_path = FLAGS_boot_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "init_boot_a",
+      .image_file_path = FLAGS_init_boot_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "init_boot_b",
+      .image_file_path = FLAGS_init_boot_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "vendor_boot_a",
+      .image_file_path = FLAGS_vendor_boot_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "vendor_boot_b",
+      .image_file_path = FLAGS_vendor_boot_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "vbmeta_a",
+      .image_file_path = FLAGS_vbmeta_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "vbmeta_b",
+      .image_file_path = FLAGS_vbmeta_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "vbmeta_system_a",
+      .image_file_path = FLAGS_vbmeta_system_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "vbmeta_system_b",
+      .image_file_path = FLAGS_vbmeta_system_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "super",
+      .image_file_path = FLAGS_super_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "userdata",
+      .image_file_path = FLAGS_data_image,
+      .read_only = true,
+  });
+  partitions.push_back(ImagePartition{
+      .label = "metadata",
+      .image_file_path = FLAGS_metadata_image,
+      .read_only = true,
+  });
+  if (!FLAGS_otheros_root_image.empty()) {
+    partitions.push_back(ImagePartition{
+        .label = "otheros_esp",
+        .image_file_path = FLAGS_otheros_esp_image,
+        .type = kEfiSystemPartition,
+        .read_only = true,
+    });
+    partitions.push_back(ImagePartition{
+        .label = "otheros_root",
+        .image_file_path = FLAGS_otheros_root_image,
+        .read_only = true,
     });
   }
-  partitions.push_back(ImagePartition {
-    .label = "boot_a",
-    .image_file_path = FLAGS_boot_image,
-  });
-  partitions.push_back(ImagePartition {
-    .label = "boot_b",
-    .image_file_path = FLAGS_boot_image,
-  });
-  // Boot image repacking is not supported on protected VMs. Repacking requires
-  // resigning the image and keys on android hosts aren't trusted.
-  if (!FLAGS_protected_vm) {
+  if (!FLAGS_ap_rootfs_image.empty()) {
     partitions.push_back(ImagePartition{
-        .label = "vendor_boot_a",
-        .image_file_path = instance.vendor_boot_image_path(),
-    });
-    partitions.push_back(ImagePartition{
-        .label = "vendor_boot_b",
-        .image_file_path = instance.vendor_boot_image_path(),
-    });
-  } else {
-    partitions.push_back(ImagePartition{
-        .label = "vendor_boot_a",
-        .image_file_path = FLAGS_vendor_boot_image,
-    });
-    partitions.push_back(ImagePartition{
-        .label = "vendor_boot_b",
-        .image_file_path = FLAGS_vendor_boot_image,
+        .label = "ap_rootfs",
+        .image_file_path = FLAGS_ap_rootfs_image,
+        .read_only = true,
     });
   }
-  partitions.push_back(ImagePartition {
-    .label = "vbmeta_a",
-    .image_file_path = FLAGS_vbmeta_image,
-  });
-  partitions.push_back(ImagePartition {
-    .label = "vbmeta_b",
-    .image_file_path = FLAGS_vbmeta_image,
-  });
-  partitions.push_back(ImagePartition {
-    .label = "vbmeta_system_a",
-    .image_file_path = FLAGS_vbmeta_system_image,
-  });
-  partitions.push_back(ImagePartition {
-    .label = "vbmeta_system_b",
-    .image_file_path = FLAGS_vbmeta_system_image,
-  });
-  partitions.push_back(ImagePartition {
-    .label = "super",
-    .image_file_path = FLAGS_super_image,
-  });
-  partitions.push_back(ImagePartition {
-    .label = "userdata",
-    .image_file_path = FLAGS_data_image,
-  });
-  partitions.push_back(ImagePartition {
-    .label = "metadata",
-    .image_file_path = FLAGS_metadata_image,
-  });
   return partitions;
 }
 
@@ -235,31 +285,6 @@
   return ret;
 }
 
-bool ShouldCreateAllCompositeDisks(const CuttlefishConfig& config) {
-  std::chrono::system_clock::time_point youngest_disk_img;
-  for (auto& partition :
-       os_composite_disk_config(config.ForDefaultInstance())) {
-    auto partition_mod_time = FileModificationTime(partition.image_file_path);
-    if (partition_mod_time > youngest_disk_img) {
-      youngest_disk_img = partition_mod_time;
-    }
-  }
-
-  // If the youngest partition img is younger than any composite disk, this fact implies that
-  // the composite disks are all out of date and need to be reinitialized.
-  for (auto& instance : config.Instances()) {
-    if (!FileExists(instance.os_composite_disk_path())) {
-      continue;
-    }
-    if (youngest_disk_img >
-        FileModificationTime(instance.os_composite_disk_path())) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
 bool DoesCompositeMatchCurrentDiskConfig(
     const std::string& prior_disk_config_path,
     const std::vector<ImagePartition>& partitions) {
@@ -300,6 +325,11 @@
   return composite_age < LastUpdatedInputDisk(partitions);
 }
 
+bool ShouldCreateOsCompositeDisk(const CuttlefishConfig& config) {
+  return ShouldCreateCompositeDisk(config.os_composite_disk_path(),
+                                   GetOsCompositeDiskConfig());
+}
+
 static uint64_t AvailableSpaceAtPath(const std::string& path) {
   struct statvfs vfs;
   if (statvfs(path.c_str(), &vfs) != 0) {
@@ -312,12 +342,11 @@
   return static_cast<uint64_t>(vfs.f_frsize) * vfs.f_bavail;
 }
 
-bool CreateCompositeDisk(const CuttlefishConfig& config,
-                         const CuttlefishConfig::InstanceSpecific& instance) {
-  if (!SharedFD::Open(instance.os_composite_disk_path().c_str(),
+bool CreateOsCompositeDisk(const CuttlefishConfig& config) {
+  if (!SharedFD::Open(config.os_composite_disk_path().c_str(),
                       O_WRONLY | O_CREAT, 0644)
            ->IsOpen()) {
-    LOG(ERROR) << "Could not ensure " << instance.os_composite_disk_path()
+    LOG(ERROR) << "Could not ensure " << config.os_composite_disk_path()
                << " exists";
     return false;
   }
@@ -343,16 +372,15 @@
                  << existing_sizes.disk_size;
     }
     std::string header_path =
-        instance.PerInstancePath("os_composite_gpt_header.img");
+        config.AssemblyPath("os_composite_gpt_header.img");
     std::string footer_path =
-        instance.PerInstancePath("os_composite_gpt_footer.img");
-    CreateCompositeDisk(os_composite_disk_config(instance), header_path,
-                        footer_path, instance.os_composite_disk_path());
+        config.AssemblyPath("os_composite_gpt_footer.img");
+    CreateCompositeDisk(GetOsCompositeDiskConfig(), header_path, footer_path,
+                        config.os_composite_disk_path());
   } else {
     // If this doesn't fit into the disk, it will fail while aggregating. The
     // aggregator doesn't maintain any sparse attributes.
-    AggregateImage(os_composite_disk_config(instance),
-                   instance.os_composite_disk_path());
+    AggregateImage(GetOsCompositeDiskConfig(), config.os_composite_disk_path());
   }
   return true;
 }
@@ -381,132 +409,352 @@
   return true;
 }
 
-static void RepackAllBootImages(const CuttlefishConfig* config) {
-  CHECK(FileHasContent(FLAGS_boot_image))
-      << "File not found: " << FLAGS_boot_image;
+class BootImageRepacker : public Feature {
+ public:
+  INJECT(BootImageRepacker(const CuttlefishConfig& config)) : config_(config) {}
 
-  CHECK(FileHasContent(FLAGS_vendor_boot_image))
-      << "File not found: " << FLAGS_vendor_boot_image;
-
-  if (FLAGS_kernel_path.size()) {
-    const std::string new_boot_image_path =
-        config->AssemblyPath("boot_repacked.img");
-    bool success = RepackBootImage(FLAGS_kernel_path, FLAGS_boot_image,
-                                   new_boot_image_path, config->assembly_dir());
-    CHECK(success) << "Failed to regenerate the boot image with the new kernel";
-    SetCommandLineOptionWithMode("boot_image", new_boot_image_path.c_str(),
-                                 google::FlagSettingMode::SET_FLAGS_DEFAULT);
+  // Feature
+  std::string Name() const override { return "BootImageRepacker"; }
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Enabled() const override {
+    // If we are booting a protected VM, for now, assume that image repacking
+    // isn't trusted. Repacking requires resigning the image and keys from an
+    // android host aren't trusted.
+    return !config_.protected_vm();
   }
 
-  for (auto instance : config->Instances()) {
-    const std::string new_vendor_boot_image_path =
-        instance.vendor_boot_image_path();
-    const std::vector<std::string> boot_config_vector =
-        BootconfigArgsFromConfig(*config, instance);
+ protected:
+  bool Setup() override {
+    if (!FileHasContent(FLAGS_boot_image)) {
+      LOG(ERROR) << "File not found: " << FLAGS_boot_image;
+      return false;
+    }
+    // The init_boot partition is be optional for testing boot.img
+    // with the ramdisk inside.
+    if (!FileHasContent(FLAGS_init_boot_image)) {
+      LOG(WARNING) << "File not found: " << FLAGS_init_boot_image;
+    }
+
+    if (!FileHasContent(FLAGS_vendor_boot_image)) {
+      LOG(ERROR) << "File not found: " << FLAGS_vendor_boot_image;
+      return false;
+    }
+
+    if (FLAGS_kernel_path.size()) {
+      const std::string new_boot_image_path =
+          config_.AssemblyPath("boot_repacked.img");
+      bool success =
+          RepackBootImage(FLAGS_kernel_path, FLAGS_boot_image,
+                          new_boot_image_path, config_.assembly_dir());
+      if (!success) {
+        LOG(ERROR) << "Failed to regenerate the boot image with the new kernel";
+        return false;
+      }
+      SetCommandLineOptionWithMode("boot_image", new_boot_image_path.c_str(),
+                                   google::FlagSettingMode::SET_FLAGS_DEFAULT);
+    }
+
     if (FLAGS_kernel_path.size() || FLAGS_initramfs_path.size()) {
+      const std::string new_vendor_boot_image_path =
+          config_.AssemblyPath("vendor_boot_repacked.img");
       // Repack the vendor boot images if kernels and/or ramdisks are passed in.
       if (FLAGS_initramfs_path.size()) {
         bool success = RepackVendorBootImage(
             FLAGS_initramfs_path, FLAGS_vendor_boot_image,
-            new_vendor_boot_image_path, config->assembly_dir(),
-            instance.instance_dir(), boot_config_vector,
-            config->bootconfig_supported());
-        CHECK(success) << "Failed to regenerate the vendor boot image with the "
-                          "new ramdisk";
-      } else {
-        // This control flow implies a kernel with all configs built in.
-        // If it's just the kernel, repack the vendor boot image without a
-        // ramdisk.
-        bool success = RepackVendorBootImageWithEmptyRamdisk(
-            FLAGS_vendor_boot_image, new_vendor_boot_image_path,
-            config->assembly_dir(), instance.instance_dir(), boot_config_vector,
-            config->bootconfig_supported());
-        CHECK(success)
-            << "Failed to regenerate the vendor boot image without a ramdisk";
+            new_vendor_boot_image_path, config_.assembly_dir(),
+            config_.bootconfig_supported());
+        if (!success) {
+          LOG(ERROR) << "Failed to regenerate the vendor boot image with the "
+                        "new ramdisk";
+        } else {
+          // This control flow implies a kernel with all configs built in.
+          // If it's just the kernel, repack the vendor boot image without a
+          // ramdisk.
+          bool success = RepackVendorBootImageWithEmptyRamdisk(
+              FLAGS_vendor_boot_image, new_vendor_boot_image_path,
+              config_.assembly_dir(), config_.bootconfig_supported());
+          if (!success) {
+            LOG(ERROR) << "Failed to regenerate the vendor boot image without "
+                          "a ramdisk";
+            return false;
+          }
+        }
+        SetCommandLineOptionWithMode(
+            "vendor_boot_image", new_vendor_boot_image_path.c_str(),
+            google::FlagSettingMode::SET_FLAGS_DEFAULT);
       }
-    } else {
-      // Repack the vendor boot image to add the instance specific bootconfig
-      // parameters
-      bool success = RepackVendorBootImage(
-          std::string(), FLAGS_vendor_boot_image, new_vendor_boot_image_path,
-          config->assembly_dir(), instance.instance_dir(), boot_config_vector,
-          config->bootconfig_supported());
-      CHECK(success) << "Failed to regenerate the vendor boot image";
     }
+    return true;
   }
+
+ private:
+  const CuttlefishConfig& config_;
+};
+
+class GeneratePersistentBootconfig : public Feature {
+ public:
+  INJECT(GeneratePersistentBootconfig(
+      const CuttlefishConfig& config,
+      const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  // Feature
+  std::string Name() const override { return "GeneratePersistentBootconfig"; }
+  bool Enabled() const override { return !config_.protected_vm(); }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    const auto bootconfig_path = instance_.persistent_bootconfig_path();
+    if (!FileExists(bootconfig_path)) {
+      if (!CreateBlankImage(bootconfig_path, 1 /* mb */, "none")) {
+        LOG(ERROR) << "Failed to create image at " << bootconfig_path;
+        return false;
+      }
+    }
+
+    auto bootconfig_fd = SharedFD::Open(bootconfig_path, O_RDWR);
+    if (!bootconfig_fd->IsOpen()) {
+      LOG(ERROR) << "Unable to open bootconfig file: "
+                 << bootconfig_fd->StrError();
+      return false;
+    }
+
+    //  Cuttlefish for the time being won't be able to support OTA from a
+    //  non-bootconfig kernel to a bootconfig-kernel (or vice versa) IF the
+    //  device is stopped (via stop_cvd). This is rarely an issue since OTA
+    //  testing run on cuttlefish is done within one launch cycle of the device.
+    //  If this ever becomes an issue, this code will have to be rewritten.
+    if (!config_.bootconfig_supported()) {
+      return true;
+    }
+
+    const std::string bootconfig =
+        android::base::Join(BootconfigArgsFromConfig(config_, instance_),
+                            "\n") +
+        "\n";
+    ssize_t bytesWritten = WriteAll(bootconfig_fd, bootconfig);
+    if (bytesWritten != bootconfig.size()) {
+      LOG(ERROR) << "Failed to write contents of bootconfig to \""
+                 << bootconfig_path << "\"";
+      return false;
+    }
+    LOG(DEBUG) << "Bootconfig parameters from vendor boot image and config are "
+               << ReadFile(bootconfig_path);
+
+    const off_t bootconfig_size_bytes =
+        AlignToPowerOf2(bootconfig.size(), PARTITION_SIZE_SHIFT);
+    if (bootconfig_fd->Truncate(bootconfig_size_bytes) != 0) {
+      LOG(ERROR) << "`truncate --size=" << bootconfig_size_bytes << " bytes "
+                 << bootconfig_path << "` failed:" << bootconfig_fd->StrError();
+      return false;
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+class InitializeMetadataImage : public Feature {
+ public:
+  INJECT(InitializeMetadataImage()) {}
+
+  // Feature
+  std::string Name() const override { return "InitializeMetadataImage"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    if (!FileExists(FLAGS_metadata_image)) {
+      bool success = CreateBlankImage(FLAGS_metadata_image,
+                                      FLAGS_blank_metadata_image_mb, "none");
+      if (!success) {
+        LOG(ERROR) << "Failed to create \"" << FLAGS_metadata_image
+                   << "\" with size " << FLAGS_blank_metadata_image_mb;
+      }
+      return success;
+    }
+    return true;
+  }
+};
+
+class InitializeAccessKregistryImage : public Feature {
+ public:
+  INJECT(InitializeAccessKregistryImage(
+      const CuttlefishConfig& config,
+      const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  // Feature
+  std::string Name() const override { return "InitializeAccessKregistryImage"; }
+  bool Enabled() const override { return !config_.protected_vm(); }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() {
+    if (FileExists(instance_.access_kregistry_path())) {
+      return true;
+    }
+    bool success =
+        CreateBlankImage(instance_.access_kregistry_path(), 2 /* mb */, "none");
+    if (!success) {
+      LOG(ERROR) << "Failed to create access_kregistry_path \""
+                 << instance_.access_kregistry_path() << "\"";
+      return false;
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+class InitializePstore : public Feature {
+ public:
+  INJECT(InitializePstore(const CuttlefishConfig& config,
+                          const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  // Feature
+  std::string Name() const override { return "InitializePstore"; }
+  bool Enabled() const override { return !config_.protected_vm(); }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() {
+    if (FileExists(instance_.pstore_path())) {
+      return true;
+    }
+    bool success =
+        CreateBlankImage(instance_.pstore_path(), 2 /* mb */, "none");
+    if (!success) {
+      LOG(ERROR) << "Failed to create pstore_path \"" << instance_.pstore_path()
+                 << "\"";
+      return false;
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+class InitializeSdCard : public Feature {
+ public:
+  INJECT(InitializeSdCard(const CuttlefishConfig& config,
+                          const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  // Feature
+  std::string Name() const override { return "InitializeSdCard"; }
+  bool Enabled() const override {
+    return FLAGS_use_sdcard && !config_.protected_vm();
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() {
+    if (FileExists(instance_.sdcard_path())) {
+      return true;
+    }
+    bool success = CreateBlankImage(instance_.sdcard_path(),
+                                    FLAGS_blank_sdcard_image_mb, "sdcard");
+    if (!success) {
+      LOG(ERROR) << "Failed to create sdcard \"" << instance_.sdcard_path()
+                 << "\"";
+      return false;
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+class InitializeFactoryResetProtected : public Feature {
+ public:
+  INJECT(InitializeFactoryResetProtected(
+      const CuttlefishConfig& config,
+      const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  // Feature
+  std::string Name() const override { return "InitializeSdCard"; }
+  bool Enabled() const override { return !config_.protected_vm(); }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() {
+    if (FileExists(instance_.factory_reset_protected_path())) {
+      return true;
+    }
+    bool success = CreateBlankImage(instance_.factory_reset_protected_path(),
+                                    1 /* mb */, "none");
+    if (!success) {
+      LOG(ERROR) << "Failed to create FRP \""
+                 << instance_.factory_reset_protected_path() << "\"";
+      return false;
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+static fruit::Component<> DiskChangesComponent(const FetcherConfig* fetcher,
+                                               const CuttlefishConfig* config) {
+  return fruit::createComponent()
+      .bindInstance(*fetcher)
+      .bindInstance(*config)
+      .addMultibinding<Feature, InitializeMetadataImage>()
+      .addMultibinding<Feature, BootImageRepacker>()
+      .install(FixedMiscImagePathComponent, &FLAGS_misc_image)
+      .install(InitializeMiscImageComponent)
+      .install(FixedDataImagePathComponent, &FLAGS_data_image)
+      .install(InitializeDataImageComponent)
+      // Create esp if necessary
+      .install(InitializeEspImageComponent, &FLAGS_otheros_esp_image,
+               &FLAGS_otheros_kernel_path, &FLAGS_otheros_initramfs_path,
+               &FLAGS_otheros_root_image);
+}
+
+static fruit::Component<> DiskChangesPerInstanceComponent(
+    const FetcherConfig* fetcher, const CuttlefishConfig* config,
+    const CuttlefishConfig::InstanceSpecific* instance) {
+  return fruit::createComponent()
+      .bindInstance(*fetcher)
+      .bindInstance(*config)
+      .bindInstance(*instance)
+      .addMultibinding<Feature, InitializeAccessKregistryImage>()
+      .addMultibinding<Feature, InitializePstore>()
+      .addMultibinding<Feature, InitializeSdCard>()
+      .addMultibinding<Feature, InitializeFactoryResetProtected>()
+      .addMultibinding<Feature, GeneratePersistentBootconfig>()
+      .install(InitBootloaderEnvPartitionComponent);
 }
 
 void CreateDynamicDiskFiles(const FetcherConfig& fetcher_config,
-                            const CuttlefishConfig* config) {
-  // Create misc if necessary
-  CHECK(InitializeMiscImage(FLAGS_misc_image)) << "Failed to create misc image";
+                            const CuttlefishConfig& config) {
+  // TODO(schuffelen): Unify this with the other injector created in
+  // assemble_cvd.cpp
+  fruit::Injector<> injector(DiskChangesComponent, &fetcher_config, &config);
 
-  // Create data if necessary
-  DataImageResult dataImageResult = ApplyDataImagePolicy(*config, FLAGS_data_image);
-  CHECK(dataImageResult != DataImageResult::Error) << "Failed to set up userdata";
+  const auto& features = injector.getMultibindings<Feature>();
+  CHECK(Feature::RunSetup(features)) << "Failed to run feature setup.";
 
-  if (!FileExists(FLAGS_metadata_image)) {
-    CreateBlankImage(FLAGS_metadata_image, FLAGS_blank_metadata_image_mb, "none");
+  for (const auto& instance : config.Instances()) {
+    fruit::Injector<> instance_injector(DiskChangesPerInstanceComponent,
+                                        &fetcher_config, &config, &instance);
+    const auto& instance_features =
+        instance_injector.getMultibindings<Feature>();
+    CHECK(Feature::RunSetup(instance_features))
+        << "Failed to run instance feature setup.";
   }
 
-  // If we are booting a protected VM, for now, assume we want a super minimal
-  // environment with no userdata encryption, limited debug, no FRP emulation, a
-  // static env for the bootloader, no SD-Card and no resume-on-reboot HAL
-  // support. We can also assume that image repacking isn't trusted. Repacking
-  // requires resigning the image and keys from an android host aren't trusted.
-  if (!FLAGS_protected_vm) {
-    RepackAllBootImages(config);
-
-    for (const auto& instance : config->Instances()) {
-      if (!FileExists(instance.access_kregistry_path())) {
-        CreateBlankImage(instance.access_kregistry_path(), 2 /* mb */, "none");
-      }
-
-      if (!FileExists(instance.pstore_path())) {
-        CreateBlankImage(instance.pstore_path(), 2 /* mb */, "none");
-      }
-
-      if (FLAGS_use_sdcard && !FileExists(instance.sdcard_path())) {
-        CreateBlankImage(instance.sdcard_path(),
-                         FLAGS_blank_sdcard_image_mb, "sdcard");
-      }
-
-      CHECK(InitBootloaderEnvPartition(*config, instance))
-          << "Failed to create bootloader environment partition";
-
-      const auto frp = instance.factory_reset_protected_path();
-      if (!FileExists(frp)) {
-        CreateBlankImage(frp, 1 /* mb */, "none");
-      }
-
-      const auto bootconfig_path = instance.persistent_bootconfig_path();
-      if (!FileExists(bootconfig_path)) {
-        CreateBlankImage(bootconfig_path, 1 /* mb */, "none");
-      }
-
-      auto bootconfig_fd = SharedFD::Open(bootconfig_path, O_RDWR);
-      CHECK(bootconfig_fd->IsOpen())
-          << "Unable to open bootconfig file: " << bootconfig_fd->StrError();
-
-      const std::string bootconfig =
-          android::base::Join(BootconfigArgsFromConfig(*config, instance),
-                              "\n") +
-          "\n";
-      ssize_t bytesWritten = WriteAll(bootconfig_fd, bootconfig);
-      CHECK(bytesWritten == bootconfig.size());
-      LOG(DEBUG)
-          << "Bootconfig parameters from vendor boot image and config are "
-          << ReadFile(bootconfig_path);
-
-      const off_t bootconfig_size_bytes =
-          AlignToPowerOf2(bootconfig.size(), PARTITION_SIZE_SHIFT);
-      CHECK(bootconfig_fd->Truncate(bootconfig_size_bytes) == 0)
-          << "`truncate --size=" << bootconfig_size_bytes << " bytes "
-          << bootconfig_path << "` failed:" << bootconfig_fd->StrError();
-    }
-  }
-
-  for (const auto& instance : config->Instances()) {
+  for (const auto& instance : config.Instances()) {
     bool compositeMatchesDiskConfig = DoesCompositeMatchCurrentDiskConfig(
         instance.PerInstancePath("persistent_composite_disk_config.txt"),
         persistent_composite_disk_config(instance));
@@ -515,7 +763,7 @@
                                   persistent_composite_disk_config(instance));
 
     if (!compositeMatchesDiskConfig || oldCompositeDisk) {
-      CHECK(CreatePersistentCompositeDisk(*config, instance))
+      CHECK(CreatePersistentCompositeDisk(config, instance))
           << "Failed to create persistent composite disk";
     }
   }
@@ -534,33 +782,26 @@
   CHECK(FileHasContent(FLAGS_bootloader))
       << "File not found: " << FLAGS_bootloader;
 
-  if (!FLAGS_esp.empty()) {
-    CHECK(FileHasContent(FLAGS_esp))
-        << "File not found: " << FLAGS_esp;
-  }
-
-  if (SuperImageNeedsRebuilding(fetcher_config, *config)) {
-    bool success = RebuildSuperImage(fetcher_config, *config, FLAGS_super_image);
+  if (SuperImageNeedsRebuilding(fetcher_config, config)) {
+    bool success = RebuildSuperImage(fetcher_config, config, FLAGS_super_image);
     CHECK(success) << "Super image rebuilding requested but could not be completed.";
   }
 
-  bool newDataImage = dataImageResult == DataImageResult::FileUpdated;
+  bool oldOsCompositeDisk = ShouldCreateOsCompositeDisk(config);
+  bool osCompositeMatchesDiskConfig = DoesCompositeMatchCurrentDiskConfig(
+      config.AssemblyPath("os_composite_disk_config.txt"),
+      GetOsCompositeDiskConfig());
+  if (!osCompositeMatchesDiskConfig || oldOsCompositeDisk || !FLAGS_resume) {
+    CHECK(CreateOsCompositeDisk(config))
+        << "Failed to create OS composite disk";
 
-  for (auto instance : config->Instances()) {
-    bool compositeMatchesDiskConfig = DoesCompositeMatchCurrentDiskConfig(
-        instance.PerInstancePath("os_composite_disk_config.txt"),
-        os_composite_disk_config(instance));
-    bool oldCompositeDisk = ShouldCreateCompositeDisk(
-        instance.os_composite_disk_path(), os_composite_disk_config(instance));
-    if (!compositeMatchesDiskConfig || oldCompositeDisk || !FLAGS_resume || newDataImage) {
+    for (auto instance : config.Instances()) {
       if (FLAGS_resume) {
         LOG(INFO) << "Requested to continue an existing session, (the default) "
                   << "but the disk files have become out of date. Wiping the "
                   << "old session files and starting a new session for device "
                   << instance.serial_number();
       }
-      CHECK(CreateCompositeDisk(*config, instance))
-          << "Failed to create composite disk";
       if (FileExists(instance.access_kregistry_path())) {
         CreateBlankImage(instance.access_kregistry_path(), 2 /* mb */, "none");
       }
@@ -571,19 +812,16 @@
   }
 
   if (!FLAGS_protected_vm) {
-    for (auto instance : config->Instances()) {
-      auto overlay_path = instance.PerInstancePath("overlay.img");
-      bool missingOverlay = !FileExists(overlay_path);
-      bool newOverlay = FileModificationTime(overlay_path) <
-                        FileModificationTime(instance.os_composite_disk_path());
-      if (missingOverlay || !FLAGS_resume || newOverlay) {
-        CreateQcowOverlay(config->crosvm_binary(),
-                          instance.os_composite_disk_path(), overlay_path);
+    for (auto instance : config.Instances()) {
+      create_overlay_image(config, instance.PerInstancePath("overlay.img"));
+      if (instance.start_ap()) {
+        create_overlay_image(config,
+                             instance.PerInstancePath("ap_overlay.img"));
       }
     }
   }
 
-  for (auto instance : config->Instances()) {
+  for (auto instance : config.Instances()) {
     // Check that the files exist
     for (const auto& file : instance.virtual_disk_paths()) {
       if (!file.empty()) {
diff --git a/host/commands/assemble_cvd/disk_flags.h b/host/commands/assemble_cvd/disk_flags.h
index 3491c3a..3b6bb3c 100644
--- a/host/commands/assemble_cvd/disk_flags.h
+++ b/host/commands/assemble_cvd/disk_flags.h
@@ -22,12 +22,14 @@
 
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/config/fetcher_config.h"
+#include "host/libs/image_aggregator/image_aggregator.h"
 
 namespace cuttlefish {
 
 bool ResolveInstanceFiles();
-bool ShouldCreateAllCompositeDisks(const CuttlefishConfig& config);
+bool ShouldCreateOsCompositeDisk(const CuttlefishConfig& config);
 void CreateDynamicDiskFiles(const FetcherConfig& fetcher_config,
-                            const CuttlefishConfig* config);
+                            const CuttlefishConfig& config);
+std::vector<ImagePartition> GetOsCompositeDiskConfig();
 
 } // namespace cuttlefish
diff --git a/host/commands/assemble_cvd/flag_feature.cpp b/host/commands/assemble_cvd/flag_feature.cpp
new file mode 100644
index 0000000..a81c4a1
--- /dev/null
+++ b/host/commands/assemble_cvd/flag_feature.cpp
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+#include "host/commands/assemble_cvd/flag_feature.h"
+
+#include <android-base/strings.h>
+#include <fruit/fruit.h>
+#include <gflags/gflags.h>
+#include <string.h>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+#include "host/libs/config/feature.h"
+
+namespace cuttlefish {
+
+static std::string XmlEscape(const std::string& s) {
+  using android::base::StringReplace;
+  return StringReplace(StringReplace(s, "<", "&lt;", true), ">", "&gt;", true);
+}
+
+class ParseGflagsImpl : public ParseGflags {
+ public:
+  INJECT(ParseGflagsImpl(ConfigFlag& config)) : config_(config) {}
+
+  std::string Name() const override { return "ParseGflags"; }
+  std::unordered_set<FlagFeature*> Dependencies() const override {
+    return {static_cast<FlagFeature*>(&config_)};
+  }
+  bool Process(std::vector<std::string>& args) override {
+    std::string process_name = "assemble_cvd";
+    std::vector<char*> pseudo_argv = {process_name.data()};
+    for (auto& arg : args) {
+      pseudo_argv.push_back(arg.data());
+    }
+    int argc = pseudo_argv.size();
+    auto argv = pseudo_argv.data();
+    gflags::AllowCommandLineReparsing();  // Support future non-gflags flags
+    gflags::ParseCommandLineNonHelpFlags(&argc, &argv,
+                                         /* remove_flags */ false);
+    return true;
+  }
+  bool WriteGflagsCompatHelpXml(std::ostream& out) const override {
+    // Lifted from external/gflags/src/gflags_reporting.cc:ShowXMLOfFlags
+    std::vector<gflags::CommandLineFlagInfo> flags;
+    gflags::GetAllFlags(&flags);
+    for (const auto& flag : flags) {
+      // From external/gflags/src/gflags_reporting.cc:DescribeOneFlagInXML
+      out << "<flag>\n";
+      out << "  <file>" << XmlEscape(flag.filename) << "</file>\n";
+      out << "  <name>" << XmlEscape(flag.name) << "</name>\n";
+      out << "  <meaning>" << XmlEscape(flag.description) << "</meaning>\n";
+      out << "  <default>" << XmlEscape(flag.default_value) << "</default>\n";
+      out << "  <current>" << XmlEscape(flag.current_value) << "</current>\n";
+      out << "  <type>" << XmlEscape(flag.type) << "</type>\n";
+      out << "</flag>\n";
+    }
+    return true;
+  }
+
+ private:
+  ConfigFlag& config_;
+};
+
+fruit::Component<fruit::Required<ConfigFlag>, ParseGflags> GflagsComponent() {
+  return fruit::createComponent()
+      .bind<ParseGflags, ParseGflagsImpl>()
+      .addMultibinding<FlagFeature, ParseGflags>();
+}
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/size_utils.cpp b/host/commands/assemble_cvd/flag_feature.h
similarity index 67%
copy from common/libs/utils/size_utils.cpp
copy to host/commands/assemble_cvd/flag_feature.h
index 9f25445..da91a3d 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/host/commands/assemble_cvd/flag_feature.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -13,16 +13,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#pragma once
 
-#include "common/libs/utils/size_utils.h"
+#include <fruit/fruit.h>
 
-#include <unistd.h>
+#include "host/libs/config/config_flag.h"
+#include "host/libs/config/feature.h"
 
 namespace cuttlefish {
 
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
-}
+class ParseGflags : public FlagFeature {};
+
+fruit::Component<fruit::Required<ConfigFlag>, ParseGflags> GflagsComponent();
 
 }  // namespace cuttlefish
diff --git a/host/commands/assemble_cvd/flags.cc b/host/commands/assemble_cvd/flags.cc
index b12dfd2..eb08d93 100644
--- a/host/commands/assemble_cvd/flags.cc
+++ b/host/commands/assemble_cvd/flags.cc
@@ -19,12 +19,16 @@
 #include <sstream>
 #include <unordered_map>
 
+#include <fruit/fruit.h>
+
 #include "common/libs/utils/environment.h"
 #include "common/libs/utils/files.h"
+#include "common/libs/utils/flag_parser.h"
 #include "host/commands/assemble_cvd/alloc.h"
 #include "host/commands/assemble_cvd/boot_config.h"
 #include "host/commands/assemble_cvd/clean.h"
 #include "host/commands/assemble_cvd/disk_flags.h"
+#include "host/libs/config/config_flag.h"
 #include "host/libs/config/host_tools_version.h"
 #include "host/libs/graphics_detector/graphics_detector.h"
 #include "host/libs/vm_manager/crosvm_manager.h"
@@ -36,12 +40,7 @@
 using cuttlefish::StringFromEnv;
 using cuttlefish::vm_manager::CrosvmManager;
 using google::FlagSettingMode::SET_FLAGS_DEFAULT;
-
-DEFINE_string(config, "phone",
-              "Config preset name. Will automatically set flag fields "
-              "using the values from this file of presets. See "
-              "device/google/cuttlefish/shared/config/config_*.json "
-              "for possible values.");
+using google::FlagSettingMode::SET_FLAGS_VALUE;
 
 DEFINE_int32(cpus, 2, "Virtual CPU count.");
 DEFINE_string(data_policy, "use_existing", "How to handle userdata partition."
@@ -49,8 +48,6 @@
             "'always_create'.");
 DEFINE_int32(blank_data_image_mb, 0,
              "The size of the blank data image to generate, MB.");
-DEFINE_string(blank_data_image_fmt, "f2fs",
-              "The fs format for the blank data image. Used with mkfs.");
 DEFINE_int32(gdb_port, 0,
              "Port number to spawn kernel gdb on e.g. -gdb_port=1234. The"
              "kernel must have been built with CONFIG_RANDOMIZE_BASE "
@@ -85,6 +82,10 @@
 DEFINE_string(initramfs_path, "", "Path to the initramfs");
 DEFINE_string(extra_kernel_cmdline, "",
               "Additional flags to put on the kernel command line");
+DEFINE_string(extra_bootconfig_args, "",
+              "Space-separated list of extra bootconfig args. "
+              "Note: overwriting an existing bootconfig argument "
+              "requires ':=' instead of '='.");
 DEFINE_bool(guest_enforce_security, true,
             "Whether to run in enforcing mode (non permissive).");
 DEFINE_bool(guest_audit_security, true,
@@ -99,14 +100,19 @@
 DEFINE_string(gpu_mode, cuttlefish::kGpuModeAuto,
               "What gpu configuration to use, one of {auto, drm_virgl, "
               "gfxstream, guest_swiftshader}");
+DEFINE_string(hwcomposer, cuttlefish::kHwComposerAuto,
+              "What hardware composer to use, one of {auto, drm, ranchu} ");
+DEFINE_string(gpu_capture_binary, "",
+              "Path to the GPU capture binary to use when capturing GPU traces"
+              "(ngfx, renderdoc, etc)");
+DEFINE_bool(enable_gpu_udmabuf,
+            false,
+            "Use the udmabuf driver for zero-copy virtio-gpu");
 
 DEFINE_bool(deprecated_boot_completed, false, "Log boot completed message to"
             " host kernel. This is only used during transition of our clients."
             " Will be deprecated soon.");
-DEFINE_bool(start_vnc_server, false, "Whether to start the vnc server process. "
-                                     "The VNC server runs at port 6443 + i for "
-                                     "the vsoc-i user or CUTTLEFISH_INSTANCE=i, "
-                                     "starting from 1.");
+
 DEFINE_bool(use_allocd, false,
             "Acquire static resources from the resource allocator daemon.");
 DEFINE_bool(enable_minimal_mode, false,
@@ -173,13 +179,17 @@
         false,
         "[Experimental] If enabled, exposes local adb service through a websocket.");
 
+static constexpr auto HOST_OPERATOR_SOCKET_PATH = "/run/cuttlefish/operator";
+
 DEFINE_bool(
-    start_webrtc_sig_server, false,
+    // The actual default for this flag is set with SetCommandLineOption() in
+    // GetKernelConfigsAndSetDefaults() at the end of this file.
+    start_webrtc_sig_server, true,
     "Whether to start the webrtc signaling server. This option only applies to "
     "the first instance, if multiple instances are launched they'll share the "
     "same signaling server, which is owned by the first one.");
 
-DEFINE_string(webrtc_sig_server_addr, "0.0.0.0",
+DEFINE_string(webrtc_sig_server_addr, "",
               "The address of the webrtc signaling server.");
 
 DEFINE_int32(
@@ -202,9 +212,13 @@
               "The path section of the URL where the device should be "
               "registered with the signaling server.");
 
+DEFINE_bool(webrtc_sig_server_secure, true,
+            "Whether the WebRTC signaling server uses secure protocols (WSS vs WS).");
+
 DEFINE_bool(verify_sig_server_certificate, false,
             "Whether to verify the signaling server's certificate with a "
-            "trusted signing authority (Disallow self signed certificates).");
+            "trusted signing authority (Disallow self signed certificates). "
+            "This is ignored if an insecure server is configured.");
 
 DEFINE_string(sig_server_headers_file, "",
               "Path to a file containing HTTP headers to be included in the "
@@ -217,25 +231,12 @@
     "appearance of the substring '{num}' in the device id will be substituted "
     "with the instance number to support multiple instances");
 
-DEFINE_string(adb_mode, "vsock_half_tunnel",
-              "Mode for ADB connection."
-              "'vsock_tunnel' for a TCP connection tunneled through vsock, "
-              "'native_vsock' for a  direct connection to the guest ADB over "
-              "vsock, 'vsock_half_tunnel' for a TCP connection forwarded to "
-              "the guest ADB server, or a comma separated list of types as in "
-              "'native_vsock,vsock_half_tunnel'");
-DEFINE_bool(run_adb_connector, !cuttlefish::IsRunningInContainer(),
-            "Maintain adb connection by sending 'adb connect' commands to the "
-            "server. Only relevant with -adb_mode=tunnel or vsock_tunnel");
-
 DEFINE_string(uuid, cuttlefish::ForCurrentInstance(cuttlefish::kDefaultUuidPrefix),
               "UUID to use for the device. Random if not specified");
 DEFINE_bool(daemon, false,
             "Run cuttlefish in background, the launcher exits on boot "
             "completed/failed");
 
-DEFINE_string(device_title, "", "Human readable name for the instance, "
-              "used by the vnc_server for its server title");
 DEFINE_string(setupwizard_mode, "DISABLED",
             "One of DISABLED,OPTIONAL,REQUIRED");
 
@@ -247,17 +248,6 @@
 DEFINE_bool(restart_subprocesses, true, "Restart any crashed host process");
 DEFINE_bool(enable_vehicle_hal_grpc_server, true, "Enables the vehicle HAL "
             "emulation gRPC server on the host");
-DEFINE_string(custom_action_config, "",
-              "Path to a custom action config JSON. Defaults to the file provided by "
-              "build variable CVD_CUSTOM_ACTION_CONFIG. If this build variable "
-              "is empty then the custom action config will be empty as well.");
-DEFINE_string(custom_actions, "",
-              "Serialized JSON of an array of custom action objects (in the "
-              "same format as custom action config JSON files). For use "
-              "within --config preset config files; prefer "
-              "--custom_action_config to specify a custom config file on the "
-              "command line. Actions in this flag are combined with actions "
-              "in --custom_action_config.");
 DEFINE_string(bootloader, "", "Bootloader binary path");
 DEFINE_string(boot_slot, "", "Force booting into the given slot. If empty, "
              "the slot will be chosen based on the misc partition if using a "
@@ -287,6 +277,21 @@
 
 DEFINE_bool(vhost_net, false, "Enable vhost acceleration of networking");
 
+DEFINE_string(
+    vhost_user_mac80211_hwsim, "",
+    "Unix socket path for vhost-user of mac80211_hwsim, typically served by "
+    "wmediumd. You can set this when using an external wmediumd instance.");
+DEFINE_string(wmediumd_config, "",
+              "Path to the wmediumd config file. When missing, the default "
+              "configuration is used which adds MAC addresses for up to 16 "
+              "cuttlefish instances including AP.");
+DEFINE_string(ap_rootfs_image,
+              DefaultHostArtifactsPath("etc/openwrt/images/openwrt_rootfs"),
+              "rootfs image for AP instance");
+DEFINE_string(ap_kernel_image,
+              DefaultHostArtifactsPath("etc/openwrt/images/kernel_for_openwrt"),
+              "kernel image for AP instance");
+
 DEFINE_bool(record_screen, false, "Enable screen recording. "
                                   "Requires --start_webrtc");
 
@@ -321,6 +326,8 @@
 
 DEFINE_uint32(camera_server_port, 0, "camera vsock port");
 
+DEFINE_string(userdata_format, "f2fs", "The userdata filesystem format");
+
 DECLARE_string(assembly_dir);
 DECLARE_string(boot_image);
 DECLARE_string(system_image_dir);
@@ -331,10 +338,6 @@
 
 namespace {
 
-bool IsFlagSet(const std::string& flag) {
-  return !gflags::GetCommandLineFlagInfoOrDie(flag.c_str()).is_default;
-}
-
 std::pair<uint16_t, uint16_t> ParsePortRange(const std::string& flag) {
   static const std::regex rgx("[0-9]+:[0-9]+");
   CHECK(std::regex_match(flag, rgx))
@@ -348,11 +351,6 @@
   return port_range;
 }
 
-int NumStreamers() {
-  auto start_flags = {FLAGS_start_vnc_server, FLAGS_start_webrtc};
-  return std::count(start_flags.begin(), start_flags.end(), true);
-}
-
 std::string StrForInstance(const std::string& prefix, int num) {
   std::ostringstream stream;
   stream << prefix << std::setfill('0') << std::setw(2) << num;
@@ -469,13 +467,17 @@
 } // namespace
 
 CuttlefishConfig InitializeCuttlefishConfiguration(
-    const std::string& instance_dir, int modem_simulator_count,
-    KernelConfig kernel_config) {
-  // At most one streamer can be started.
-  CHECK(NumStreamers() <= 1);
-
+    const std::string& root_dir, int modem_simulator_count,
+    KernelConfig kernel_config, fruit::Injector<>& injector) {
   CuttlefishConfig tmp_config_obj;
-  tmp_config_obj.set_assembly_dir(FLAGS_assembly_dir);
+
+  for (const auto& fragment : injector.getMultibindings<ConfigFragment>()) {
+    CHECK(tmp_config_obj.SaveFragment(*fragment))
+        << "Failed to save fragment " << fragment->Name();
+  }
+
+  tmp_config_obj.set_root_dir(root_dir);
+
   tmp_config_obj.set_target_arch(kernel_config.target_arch);
   tmp_config_obj.set_bootconfig_supported(kernel_config.bootconfig_supported);
   auto vmm = GetVmManager(FLAGS_vm_manager, kernel_config.target_arch);
@@ -521,10 +523,9 @@
   const GraphicsAvailability graphics_availability =
     GetGraphicsAvailabilityWithSubprocessCheck();
 
-  LOG(VERBOSE) << graphics_availability;
+  LOG(DEBUG) << graphics_availability;
 
   tmp_config_obj.set_gpu_mode(FLAGS_gpu_mode);
-
   if (tmp_config_obj.gpu_mode() != kGpuModeAuto &&
       tmp_config_obj.gpu_mode() != kGpuModeDrmVirgl &&
       tmp_config_obj.gpu_mode() != kGpuModeGfxStream &&
@@ -559,15 +560,48 @@
                     "--gpu_mode=auto or --gpu_mode=guest_swiftshader.";
     }
   }
+
+  tmp_config_obj.set_restart_subprocesses(FLAGS_restart_subprocesses);
+  tmp_config_obj.set_gpu_capture_binary(FLAGS_gpu_capture_binary);
+  if (!tmp_config_obj.gpu_capture_binary().empty()) {
+    CHECK(tmp_config_obj.gpu_mode() == kGpuModeGfxStream)
+        << "GPU capture only supported with --gpu_mode=gfxstream";
+
+    // GPU capture runs in a detached mode where the "launcher" process
+    // intentionally exits immediately.
+    CHECK(!tmp_config_obj.restart_subprocesses())
+        << "GPU capture only supported with --norestart_subprocesses";
+  }
+
+  tmp_config_obj.set_hwcomposer(FLAGS_hwcomposer);
+  if (!tmp_config_obj.hwcomposer().empty()) {
+    if (tmp_config_obj.hwcomposer() == kHwComposerRanchu) {
+      CHECK(tmp_config_obj.gpu_mode() != kGpuModeDrmVirgl)
+        << "ranchu hwcomposer not supported with --gpu_mode=drm_virgl";
+    }
+  }
+
+  if (tmp_config_obj.hwcomposer() == kHwComposerAuto) {
+      if (tmp_config_obj.gpu_mode() == kGpuModeDrmVirgl) {
+        tmp_config_obj.set_hwcomposer(kHwComposerDrmMinigbm);
+      } else {
+        tmp_config_obj.set_hwcomposer(kHwComposerRanchu);
+      }
+  }
+
+  tmp_config_obj.set_enable_gpu_udmabuf(FLAGS_enable_gpu_udmabuf);
+
   // Sepolicy rules need to be updated to support gpu mode. Temporarily disable
   // auto-enabling sandbox when gpu is enabled (b/152323505).
   if (tmp_config_obj.gpu_mode() != kGpuModeGuestSwiftshader) {
     SetCommandLineOptionWithMode("enable_sandbox", "false", SET_FLAGS_DEFAULT);
   }
 
-  if (vmm->ConfigureGpuMode(tmp_config_obj.gpu_mode()).empty()) {
-    LOG(FATAL) << "Invalid gpu_mode=" << FLAGS_gpu_mode <<
-               " does not work with vm_manager=" << FLAGS_vm_manager;
+  if (vmm->ConfigureGraphics(tmp_config_obj.gpu_mode(),
+         tmp_config_obj.hwcomposer()).empty()) {
+    LOG(FATAL) << "Invalid (gpu_mode=," << FLAGS_gpu_mode <<
+               " hwcomposer= " << FLAGS_hwcomposer <<
+               ") does not work with vm_manager=" << FLAGS_vm_manager;
   }
 
   CHECK(!FLAGS_smt || FLAGS_cpus % 2 == 0)
@@ -585,12 +619,10 @@
 
   tmp_config_obj.set_gdb_port(FLAGS_gdb_port);
 
-  std::vector<std::string> adb = android::base::Split(FLAGS_adb_mode, ",");
-  tmp_config_obj.set_adb_mode(std::set<std::string>(adb.begin(), adb.end()));
-
   tmp_config_obj.set_guest_enforce_security(FLAGS_guest_enforce_security);
   tmp_config_obj.set_guest_audit_security(FLAGS_guest_audit_security);
   tmp_config_obj.set_extra_kernel_cmdline(FLAGS_extra_kernel_cmdline);
+  tmp_config_obj.set_extra_bootconfig_args(FLAGS_extra_bootconfig_args);
 
   if (FLAGS_console) {
     SetCommandLineOptionWithMode("enable_sandbox", "false", SET_FLAGS_DEFAULT);
@@ -607,13 +639,12 @@
   tmp_config_obj.set_crosvm_binary(FLAGS_crosvm_binary);
   tmp_config_obj.set_tpm_device(FLAGS_tpm_device);
 
-  tmp_config_obj.set_enable_vnc_server(FLAGS_start_vnc_server);
-
   tmp_config_obj.set_seccomp_policy_dir(FLAGS_seccomp_policy_dir);
 
   tmp_config_obj.set_enable_webrtc(FLAGS_start_webrtc);
   tmp_config_obj.set_webrtc_assets_dir(FLAGS_webrtc_assets_dir);
   tmp_config_obj.set_webrtc_certs_dir(FLAGS_webrtc_certs_dir);
+  tmp_config_obj.set_sig_server_secure(FLAGS_webrtc_sig_server_secure);
   // Note: This will be overridden if the sig server is started by us
   tmp_config_obj.set_sig_server_port(FLAGS_webrtc_sig_server_port);
   tmp_config_obj.set_sig_server_address(FLAGS_webrtc_sig_server_addr);
@@ -634,71 +665,15 @@
   tmp_config_obj.set_webrtc_enable_adb_websocket(
           FLAGS_webrtc_enable_adb_websocket);
 
-  tmp_config_obj.set_restart_subprocesses(FLAGS_restart_subprocesses);
-  tmp_config_obj.set_run_adb_connector(FLAGS_run_adb_connector);
   tmp_config_obj.set_run_as_daemon(FLAGS_daemon);
 
   tmp_config_obj.set_data_policy(FLAGS_data_policy);
   tmp_config_obj.set_blank_data_image_mb(FLAGS_blank_data_image_mb);
-  tmp_config_obj.set_blank_data_image_fmt(FLAGS_blank_data_image_fmt);
 
   tmp_config_obj.set_enable_gnss_grpc_proxy(FLAGS_start_gnss_proxy);
 
-  tmp_config_obj.set_enable_vehicle_hal_grpc_server(FLAGS_enable_vehicle_hal_grpc_server);
-  tmp_config_obj.set_vehicle_hal_grpc_server_binary(
-      HostBinaryPath("android.hardware.automotive.vehicle@2.0-virtualization-grpc-server"));
-
-  std::string custom_action_config;
-  if (!FLAGS_custom_action_config.empty()) {
-    custom_action_config = FLAGS_custom_action_config;
-  } else {
-    std::string custom_action_config_dir =
-        DefaultHostArtifactsPath("etc/cvd_custom_action_config");
-    if (DirectoryExists(custom_action_config_dir)) {
-      auto custom_action_configs = DirectoryContents(custom_action_config_dir);
-      // Two entries are always . and ..
-      if (custom_action_configs.size() > 3) {
-        LOG(ERROR) << "Expected at most one custom action config in "
-                   << custom_action_config_dir << ". Please delete extras.";
-      } else if (custom_action_configs.size() == 3) {
-        for (const auto& config : custom_action_configs) {
-          if (android::base::EndsWithIgnoreCase(config, ".json")) {
-            custom_action_config = custom_action_config_dir + "/" + config;
-          }
-        }
-      }
-    }
-  }
-  std::vector<CustomActionConfig> custom_actions;
-  Json::CharReaderBuilder builder;
-  Json::Value custom_action_array(Json::arrayValue);
-  if (custom_action_config != "") {
-    // Load the custom action config JSON.
-    std::ifstream ifs(custom_action_config);
-    std::string errorMessage;
-    if (!Json::parseFromStream(builder, ifs, &custom_action_array, &errorMessage)) {
-      LOG(FATAL) << "Could not read custom actions config file "
-                 << custom_action_config << ": "
-                 << errorMessage;
-    }
-    for (const auto& custom_action : custom_action_array) {
-      custom_actions.push_back(CustomActionConfig(custom_action));
-    }
-  }
-  if (FLAGS_custom_actions != "") {
-    // Load the custom action from the --config preset file.
-    std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
-    std::string errorMessage;
-    if (!reader->parse(&*FLAGS_custom_actions.begin(), &*FLAGS_custom_actions.end(),
-                       &custom_action_array, &errorMessage)) {
-      LOG(FATAL) << "Could not read custom actions config flag: "
-                 << errorMessage;
-    }
-    for (const auto& custom_action : custom_action_array) {
-      custom_actions.push_back(CustomActionConfig(custom_action));
-    }
-  }
-  tmp_config_obj.set_custom_actions(custom_actions);
+  tmp_config_obj.set_enable_vehicle_hal_grpc_server(
+      FLAGS_enable_vehicle_hal_grpc_server);
 
   tmp_config_obj.set_bootloader(FLAGS_bootloader);
 
@@ -716,12 +691,26 @@
 
   tmp_config_obj.set_vhost_net(FLAGS_vhost_net);
 
+  tmp_config_obj.set_vhost_user_mac80211_hwsim(FLAGS_vhost_user_mac80211_hwsim);
+
+  if ((FLAGS_ap_rootfs_image.empty()) != (FLAGS_ap_kernel_image.empty())) {
+    LOG(FATAL) << "Either both ap_rootfs_image and ap_kernel_image should be "
+                  "set or neither should be set.";
+  }
+
+  tmp_config_obj.set_ap_rootfs_image(FLAGS_ap_rootfs_image);
+  tmp_config_obj.set_ap_kernel_image(FLAGS_ap_kernel_image);
+
+  tmp_config_obj.set_wmediumd_config(FLAGS_wmediumd_config);
+
   tmp_config_obj.set_record_screen(FLAGS_record_screen);
 
   tmp_config_obj.set_enable_host_bluetooth(FLAGS_enable_host_bluetooth);
 
   tmp_config_obj.set_protected_vm(FLAGS_protected_vm);
 
+  tmp_config_obj.set_userdata_format(FLAGS_userdata_format);
+
   std::vector<int> num_instances;
   for (int i = 0; i < FLAGS_num_instances; i++) {
     num_instances.push_back(GetInstance() + i);
@@ -743,10 +732,7 @@
 
     auto instance = tmp_config_obj.ForInstance(num);
     auto const_instance =
-        const_cast<const CuttlefishConfig&>(tmp_config_obj)
-            .ForInstance(num);
-    // Set this first so that calls to PerInstancePath below are correct
-    instance.set_instance_dir(instance_dir + "." + std::to_string(num));
+        const_cast<const CuttlefishConfig&>(tmp_config_obj).ForInstance(num);
     instance.set_use_allocd(FLAGS_use_allocd);
     if (FLAGS_use_random_serial) {
       instance.set_serial_number(
@@ -770,17 +756,19 @@
 
     instance.set_uuid(FLAGS_uuid);
 
-    instance.set_vnc_server_port(6444 + num - 1);
-    instance.set_host_port(6520 + num - 1);
+    instance.set_modem_simulator_host_id(1000 + num);  // Must be 4 digits
+    // the deprecated vnc was 6444 + num - 1, and qemu_vnc was vnc - 5900
+    instance.set_qemu_vnc_server_port(544 + num - 1);
+    instance.set_adb_host_port(6520 + num - 1);
     instance.set_adb_ip_and_port("0.0.0.0:" + std::to_string(6520 + num - 1));
+    instance.set_confui_host_vsock_port(7700 + num - 1);
     instance.set_tombstone_receiver_port(calc_vsock_port(6600));
-    instance.set_vehicle_hal_server_port(9210 + num - 1);
+    instance.set_vehicle_hal_server_port(9300 + num - 1);
     instance.set_audiocontrol_server_port(9410);  /* OK to use the same port number across instances */
     instance.set_config_server_port(calc_vsock_port(6800));
 
     if (tmp_config_obj.gpu_mode() != kGpuModeDrmVirgl &&
         tmp_config_obj.gpu_mode() != kGpuModeGfxStream) {
-        instance.set_frames_server_port(calc_vsock_port(6900));
       if (FLAGS_vm_manager == QemuManager::name()) {
         instance.set_keyboard_server_port(calc_vsock_port(7000));
         instance.set_touch_server_port(calc_vsock_port(7100));
@@ -802,7 +790,6 @@
         FLAGS_bluetooth_default_commands_file);
 
     instance.set_camera_server_port(FLAGS_camera_server_port);
-    instance.set_device_title(FLAGS_device_title);
 
     if (FLAGS_protected_vm) {
       instance.set_virtual_disk_paths(
@@ -818,14 +805,10 @@
       instance.set_virtual_disk_paths(virtual_disk_paths);
     }
 
-    std::array<unsigned char, 6> mac_address;
-    mac_address[0] = 1 << 6; // locally administered
-    // TODO(schuffelen): Randomize these and preserve the state.
-    for (int i = 1; i < 5; i++) {
-      mac_address[i] = i;
-    }
-    mac_address[5] = num;
-    instance.set_wifi_mac_address(mac_address);
+    // We'd like to set mac prefix to be 5554, 5555, 5556, ... in normal cases.
+    // When --base_instance_num=3, this might be 5556, 5557, 5558, ... (skipping
+    // first two)
+    instance.set_wifi_mac_prefix(5554 + (num - 1));
 
     instance.set_start_webrtc_signaling_server(false);
 
@@ -840,14 +823,43 @@
       }
       instance.set_webrtc_device_id(device_id);
     }
-    if (FLAGS_start_webrtc_sig_server && is_first_instance) {
+    if (!is_first_instance || !FLAGS_start_webrtc) {
+      // Only the first instance starts the signaling server or proxy
+      instance.set_start_webrtc_signaling_server(false);
+      instance.set_start_webrtc_sig_server_proxy(false);
+    } else {
       auto port = 8443 + num - 1;
       // Change the signaling server port for all instances
       tmp_config_obj.set_sig_server_port(port);
-      instance.set_start_webrtc_signaling_server(true);
-    } else {
-      instance.set_start_webrtc_signaling_server(false);
+      // Either the signaling server or the proxy is started, never both
+      instance.set_start_webrtc_signaling_server(FLAGS_start_webrtc_sig_server);
+      // The proxy is only started if the host operator is available
+      instance.set_start_webrtc_sig_server_proxy(
+          cuttlefish::FileIsSocket(HOST_OPERATOR_SOCKET_PATH) &&
+          !FLAGS_start_webrtc_sig_server);
     }
+
+    // Start wmediumd process for the first instance if
+    // vhost_user_mac80211_hwsim is not specified.
+    const bool start_wmediumd =
+        FLAGS_vhost_user_mac80211_hwsim.empty() && is_first_instance;
+    if (start_wmediumd) {
+      // TODO(b/199020470) move this to the directory for shared resources
+      auto vhost_user_socket_path =
+          const_instance.PerInstanceInternalPath("vhost_user_mac80211");
+      auto wmediumd_api_socket_path =
+          const_instance.PerInstanceInternalPath("wmediumd_api_server");
+
+      tmp_config_obj.set_vhost_user_mac80211_hwsim(vhost_user_socket_path);
+      tmp_config_obj.set_wmediumd_api_server_socket(wmediumd_api_socket_path);
+      instance.set_start_wmediumd(true);
+    } else {
+      instance.set_start_wmediumd(false);
+    }
+
+    instance.set_start_ap(!FLAGS_ap_rootfs_image.empty() &&
+                          !FLAGS_ap_kernel_image.empty() && is_first_instance);
+
     is_first_instance = false;
 
     // instance.modem_simulator_ports := "" or "[port,]*port"
@@ -866,112 +878,61 @@
     }
   } // end of num_instances loop
 
+  std::vector<std::string> names;
+  for (const auto& instance : tmp_config_obj.Instances()) {
+    names.emplace_back(instance.instance_name());
+  }
+  tmp_config_obj.set_instance_names(names);
+
   tmp_config_obj.set_enable_sandbox(FLAGS_enable_sandbox);
 
-  // Audio is not available for VNC server
+  // Audio is not available for Arm64
   SetCommandLineOptionWithMode(
       "enable_audio",
-      (FLAGS_start_vnc_server || (cuttlefish::HostArch() == cuttlefish::Arch::Arm64))
-          ? "false"
-          : "true",
+      (cuttlefish::HostArch() == cuttlefish::Arch::Arm64) ? "false" : "true",
       SET_FLAGS_DEFAULT);
   tmp_config_obj.set_enable_audio(FLAGS_enable_audio);
 
   return tmp_config_obj;
 }
 
-void SetDefaultFlagsFromConfigPreset() {
-  std::string config_preset = FLAGS_config;  // The name of the preset config.
-  std::string config_file_path;  // The path to the preset config JSON.
-  std::set<std::string> allowed_config_presets;
-  for (const std::string& file :
-       DirectoryContents(DefaultHostArtifactsPath("etc/cvd_config"))) {
-    std::string_view local_file(file);
-    if (android::base::ConsumePrefix(&local_file, "cvd_config_") &&
-        android::base::ConsumeSuffix(&local_file, ".json")) {
-      allowed_config_presets.emplace(local_file);
-    }
-  }
-
-  // If the user specifies a --config name, then use that config
-  // preset option.
-  std::string android_info_path = FLAGS_system_image_dir + "/android-info.txt";
-  if (IsFlagSet("config")) {
-    if (!allowed_config_presets.count(config_preset)) {
-      LOG(FATAL) << "Invalid --config option '" << config_preset
-                 << "'. Valid options: "
-                 << android::base::Join(allowed_config_presets, ",");
-    }
-  } else if (FileExists(android_info_path)) {
-    // Otherwise try to load the correct preset using android-info.txt.
-    std::ifstream ifs(android_info_path);
-    if (ifs.is_open()) {
-      std::string android_info;
-      ifs >> android_info;
-      std::string_view local_android_info(android_info);
-      if (android::base::ConsumePrefix(&local_android_info, "config=")) {
-        config_preset = local_android_info;
-      }
-      if (!allowed_config_presets.count(config_preset)) {
-        LOG(WARNING) << android_info_path
-                     << " contains invalid config preset: '"
-                     << local_android_info << "'. Defaulting to 'phone'.";
-        config_preset = "phone";
-      }
-    }
-  }
-  LOG(INFO) << "Launching CVD using --config='" << config_preset << "'.";
-
-  config_file_path = DefaultHostArtifactsPath("etc/cvd_config/cvd_config_" +
-                                              config_preset + ".json");
-  Json::Value config;
-  Json::CharReaderBuilder builder;
-  std::ifstream ifs(config_file_path);
-  std::string errorMessage;
-  if (!Json::parseFromStream(builder, ifs, &config, &errorMessage)) {
-    LOG(FATAL) << "Could not read config file " << config_file_path << ": "
-               << errorMessage;
-  }
-  for (const std::string& flag : config.getMemberNames()) {
-    std::string value;
-    if (flag == "custom_actions") {
-      Json::StreamWriterBuilder factory;
-      value = Json::writeString(factory, config[flag]);
-    } else {
-      value = config[flag].asString();
-    }
-    if (gflags::SetCommandLineOptionWithMode(flag.c_str(), value.c_str(),
-                                             SET_FLAGS_DEFAULT)
-            .empty()) {
-      LOG(FATAL) << "Error setting flag '" << flag << "'.";
-    }
-  }
-}
-
-void SetDefaultFlagsForQemu() {
+void SetDefaultFlagsForQemu(Arch target_arch) {
   // for now, we don't set non-default options for QEMU
-  if (FLAGS_gpu_mode == kGpuModeGuestSwiftshader && NumStreamers() == 0) {
+  if (FLAGS_gpu_mode == kGpuModeGuestSwiftshader && !FLAGS_start_webrtc) {
     // This makes WebRTC the default streamer unless the user requests
     // another via a --star_<streamer> flag, while at the same time it's
     // possible to run without any streamer by setting --start_webrtc=false.
     SetCommandLineOptionWithMode("start_webrtc", "true", SET_FLAGS_DEFAULT);
   }
-  std::string default_bootloader = FLAGS_system_image_dir + "/bootloader.qemu";
+  std::string default_bootloader =
+      DefaultHostArtifactsPath("etc/bootloader_");
+  if(target_arch == Arch::Arm) {
+      // Bootloader is unstable >512MB RAM on 32-bit ARM
+      SetCommandLineOptionWithMode("memory_mb", "512", SET_FLAGS_VALUE);
+      default_bootloader += "arm";
+  } else if (target_arch == Arch::Arm64) {
+      default_bootloader += "aarch64";
+  } else {
+      default_bootloader += "x86_64";
+  }
+  default_bootloader += "/bootloader.qemu";
   SetCommandLineOptionWithMode("bootloader", default_bootloader.c_str(),
                                SET_FLAGS_DEFAULT);
 }
 
 void SetDefaultFlagsForCrosvm() {
-  if (NumStreamers() == 0) {
+  if (!FLAGS_start_webrtc) {
     // This makes WebRTC the default streamer unless the user requests
     // another via a --star_<streamer> flag, while at the same time it's
     // possible to run without any streamer by setting --start_webrtc=false.
     SetCommandLineOptionWithMode("start_webrtc", "true", SET_FLAGS_DEFAULT);
   }
 
-  // TODO(b/182484563): Re-enable autodetection when we fix the crosvm crashes
-  bool default_enable_sandbox = false;
-
+  std::set<Arch> supported_archs{Arch::X86_64};
+  bool default_enable_sandbox =
+      supported_archs.find(HostArch()) != supported_archs.end() &&
+      EnsureDirectoryExists(kCrosvmVarEmptyDir) &&
+      IsDirectoryEmpty(kCrosvmVarEmptyDir) && !IsRunningInContainer();
   SetCommandLineOptionWithMode("enable_sandbox",
                                (default_enable_sandbox ? "true" : "false"),
                                SET_FLAGS_DEFAULT);
@@ -981,10 +942,7 @@
                                SET_FLAGS_DEFAULT);
 }
 
-bool ParseCommandLineFlags(int* argc, char*** argv, KernelConfig* kernel_config) {
-  google::ParseCommandLineNonHelpFlags(argc, argv, true);
-  SetDefaultFlagsFromConfigPreset();
-  google::HandleCommandLineHelpFlags();
+bool GetKernelConfigAndSetDefaults(KernelConfig* kernel_config) {
   bool invalid_manager = false;
 
   if (!ResolveInstanceFiles()) {
@@ -1001,7 +959,7 @@
   }
 
   if (FLAGS_vm_manager == QemuManager::name()) {
-    SetDefaultFlagsForQemu();
+    SetDefaultFlagsForQemu(kernel_config->target_arch);
   } else if (FLAGS_vm_manager == CrosvmManager::name()) {
     SetDefaultFlagsForCrosvm();
   } else {
@@ -1009,11 +967,18 @@
               << std::endl;
     invalid_manager = true;
   }
-  // The default for starting signaling server is whether or not webrt is to be
-  // started.
-  SetCommandLineOptionWithMode("start_webrtc_sig_server",
-                               FLAGS_start_webrtc ? "true" : "false",
-                               SET_FLAGS_DEFAULT);
+  auto host_operator_present =
+      cuttlefish::FileIsSocket(HOST_OPERATOR_SOCKET_PATH);
+  // The default for starting signaling server depends on whether or not webrtc
+  // is to be started and the presence of the host orchestrator.
+  SetCommandLineOptionWithMode(
+      "start_webrtc_sig_server",
+      FLAGS_start_webrtc && !host_operator_present ? "true" : "false",
+      SET_FLAGS_DEFAULT);
+  SetCommandLineOptionWithMode(
+      "webrtc_sig_server_addr",
+      host_operator_present ? HOST_OPERATOR_SOCKET_PATH : "0.0.0.0",
+      SET_FLAGS_DEFAULT);
   if (invalid_manager) {
     return false;
   }
diff --git a/host/commands/assemble_cvd/flags.h b/host/commands/assemble_cvd/flags.h
index 3c02d92..961ac23 100644
--- a/host/commands/assemble_cvd/flags.h
+++ b/host/commands/assemble_cvd/flags.h
@@ -1,7 +1,10 @@
 #pragma once
 
+#include <fruit/fruit.h>
 #include <cstdint>
 #include <optional>
+#include <string>
+#include <vector>
 
 #include "common/libs/utils/environment.h"
 #include "host/libs/config/cuttlefish_config.h"
@@ -14,12 +17,12 @@
   bool bootconfig_supported;
 };
 
-bool ParseCommandLineFlags(int* argc, char*** argv,
-                           KernelConfig* kernel_config);
+bool GetKernelConfigAndSetDefaults(KernelConfig* kernel_config);
 // Must be called after ParseCommandLineFlags.
-CuttlefishConfig InitializeCuttlefishConfiguration(
-    const std::string& instance_dir, int modem_simulator_count,
-    KernelConfig kernel_config);
+CuttlefishConfig InitializeCuttlefishConfiguration(const std::string& root_dir,
+                                                   int modem_simulator_count,
+                                                   KernelConfig kernel_config,
+                                                   fruit::Injector<>& injector);
 
 std::string GetConfigFilePath(const CuttlefishConfig& config);
 std::string GetCuttlefishEnvPath();
diff --git a/host/commands/assemble_cvd/super_image_mixer.cc b/host/commands/assemble_cvd/super_image_mixer.cc
index c1e7eac..8478006 100644
--- a/host/commands/assemble_cvd/super_image_mixer.cc
+++ b/host/commands/assemble_cvd/super_image_mixer.cc
@@ -55,14 +55,9 @@
 
 const std::string kMiscInfoPath = "META/misc_info.txt";
 const std::set<std::string> kDefaultTargetImages = {
-  "IMAGES/boot.img",
-  "IMAGES/odm.img",
-  "IMAGES/odm_dlkm.img",
-  "IMAGES/recovery.img",
-  "IMAGES/userdata.img",
-  "IMAGES/vbmeta.img",
-  "IMAGES/vendor.img",
-  "IMAGES/vendor_dlkm.img",
+    "IMAGES/boot.img",     "IMAGES/init_boot.img", "IMAGES/odm.img",
+    "IMAGES/odm_dlkm.img", "IMAGES/recovery.img",  "IMAGES/userdata.img",
+    "IMAGES/vbmeta.img",   "IMAGES/vendor.img",    "IMAGES/vendor_dlkm.img",
 };
 const std::set<std::string> kDefaultTargetBuildProp = {
   "ODM/build.prop",
diff --git a/host/commands/bt_connector/Android.bp b/host/commands/bt_connector/Android.bp
index d617eaa..8703a76 100644
--- a/host/commands/bt_connector/Android.bp
+++ b/host/commands/bt_connector/Android.bp
@@ -24,6 +24,7 @@
         "main.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libjsoncpp",
diff --git a/host/commands/bt_connector/OWNERS b/host/commands/bt_connector/OWNERS
index e8a4a00..e791d83 100644
--- a/host/commands/bt_connector/OWNERS
+++ b/host/commands/bt_connector/OWNERS
@@ -1,2 +1,3 @@
+include device/google/cuttlefish:/OWNERS
 include platform/system/bt:/OWNERS
 [email protected]
\ No newline at end of file
diff --git a/host/commands/bt_connector/main.cpp b/host/commands/bt_connector/main.cpp
index fc17b31..a625768 100644
--- a/host/commands/bt_connector/main.cpp
+++ b/host/commands/bt_connector/main.cpp
@@ -14,7 +14,7 @@
  */
 
 #include <fcntl.h>
-#include <sys/poll.h>
+#include <poll.h>
 #include <unistd.h>
 #include <ios>
 #include <mutex>
diff --git a/host/commands/config_server/Android.bp b/host/commands/config_server/Android.bp
index b567bd9..51f3015 100644
--- a/host/commands/config_server/Android.bp
+++ b/host/commands/config_server/Android.bp
@@ -23,6 +23,7 @@
         "main.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libjsoncpp",
diff --git a/host/commands/console_forwarder/Android.bp b/host/commands/console_forwarder/Android.bp
index 230a0f7..c98c7aa 100644
--- a/host/commands/console_forwarder/Android.bp
+++ b/host/commands/console_forwarder/Android.bp
@@ -23,6 +23,7 @@
         "main.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libjsoncpp",
         "libcuttlefish_fs",
diff --git a/host/commands/cvd/Android.bp b/host/commands/cvd/Android.bp
new file mode 100644
index 0000000..3d2f853
--- /dev/null
+++ b/host/commands/cvd/Android.bp
@@ -0,0 +1,73 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_binary_host {
+    name: "cvd",
+    symlinks: ["acloud"],
+    srcs: [
+        "main.cc",
+    ],
+    shared_libs: [
+        "libext2_blkid",
+        "libbase",
+        "libcuttlefish_fs",
+        "libcuttlefish_utils",
+        "libjsoncpp",
+        "libprotobuf-cpp-lite",
+    ],
+    static_libs: [
+        "libbuildversion",
+        "libcuttlefish_cvd_proto",
+        "libcuttlefish_host_config",
+    ],
+    required: [
+        "cvd_internal_host_bugreport",
+        "cvd_internal_start",
+        "cvd_internal_status",
+        "cvd_internal_stop",
+        "cvd_server",
+    ],
+    defaults: [
+        "cuttlefish_host",
+    ],
+    use_version_lib: true,
+}
+
+cc_binary_host {
+    name: "cvd_server",
+    srcs: [
+        "server.cc",
+    ],
+    shared_libs: [
+        "libbase",
+        "libcuttlefish_fs",
+        "libcuttlefish_utils",
+        "libjsoncpp",
+        "libprotobuf-cpp-lite",
+    ],
+    static_libs: [
+        "libbuildversion",
+        "libcuttlefish_cvd_proto",
+        "libcuttlefish_host_config",
+    ],
+    defaults: [
+        "cuttlefish_host",
+    ],
+    use_version_lib: true,
+}
diff --git a/host/commands/cvd/main.cc b/host/commands/cvd/main.cc
new file mode 100644
index 0000000..e226e45
--- /dev/null
+++ b/host/commands/cvd/main.cc
@@ -0,0 +1,320 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <stdlib.h>
+#include <chrono>
+#include <iostream>
+#include <map>
+#include <optional>
+#include <string>
+#include <thread>
+#include <vector>
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/result.h>
+#include <build/version.h>
+
+#include "cvd_server.pb.h"
+
+#include "common/libs/fs/shared_fd.h"
+#include "common/libs/utils/environment.h"
+#include "common/libs/utils/files.h"
+#include "common/libs/utils/flag_parser.h"
+#include "common/libs/utils/subprocess.h"
+#include "common/libs/utils/unix_sockets.h"
+#include "host/commands/cvd/server.h"
+#include "host/libs/config/cuttlefish_config.h"
+
+namespace cuttlefish {
+namespace {
+
+class CvdClient {
+ public:
+  CvdClient(const SharedFD& server) { SetServer(server); }
+
+  void SetServer(const SharedFD& server) {
+    CHECK(server->IsOpen()) << "Unable to open connection to cvd_server.";
+    server_ = UnixMessageSocket(server);
+    CHECK(server_->EnableCredentials(true).ok())
+        << "Unable to enable UnixMessageSocket credentials.";
+  }
+
+  bool EnsureCvdServerRunning(const std::string& host_tool_directory,
+                              int num_retries = 1) {
+    cvd::Request request;
+    request.mutable_version_request();
+    auto response = SendRequest(request);
+
+    // If cvd_server is not running, start and wait before checking its version.
+    if (!response.ok()) {
+      StartCvdServer(host_tool_directory);
+      response = SendRequest(request);
+    }
+    CHECK(response.ok() && response->has_version_response())
+        << "GetVersion call missing VersionResponse.";
+    CheckStatus(response->status(), "GetVersion");
+
+    auto server_version = response->version_response().version();
+    if (server_version.major() != cvd::kVersionMajor) {
+      std::cout << "Major version difference: cvd(" << cvd::kVersionMajor << "."
+                << cvd::kVersionMinor << ") != cvd_server("
+                << server_version.major() << "." << server_version.minor()
+                << "). Try `cvd kill-server` or `pkill cvd_server`."
+                << std::endl;
+      return false;
+    }
+    if (server_version.minor() < cvd::kVersionMinor) {
+      std::cout << "Minor version of cvd_server is older than latest. "
+                << "Attempting to restart..." << std::endl;
+      StopCvdServer(/*clear=*/false);
+      StartCvdServer(host_tool_directory);
+      if (num_retries > 0) {
+        return EnsureCvdServerRunning(host_tool_directory, num_retries - 1);
+      } else {
+        std::cout << "Unable to start the cvd_server with version "
+                  << cvd::kVersionMajor << "." << cvd::kVersionMinor
+                  << std::endl;
+        return false;
+      }
+    }
+    if (server_version.build() != android::build::GetBuildNumber()) {
+      std::cout << "WARNING: cvd_server client version ("
+                << android::build::GetBuildNumber()
+                << ") does not match  server version ("
+                << server_version.build() << std::endl;
+    }
+    return true;
+  }
+
+  void StopCvdServer(bool clear) {
+    if (!server_) {
+      return;
+    }
+
+    cvd::Request request;
+    auto shutdown_request = request.mutable_shutdown_request();
+    if (clear) {
+      shutdown_request->set_clear(true);
+    }
+
+    // Send the server a pipe with the Shutdown request that it
+    // will close when it fully exits.
+    SharedFD read_pipe, write_pipe;
+    CHECK(cuttlefish::SharedFD::Pipe(&read_pipe, &write_pipe))
+        << "Unable to create shutdown pipe: " << strerror(errno);
+
+    auto response = SendRequest(request, /*extra_fd=*/write_pipe);
+
+    // If the server is already not running then SendRequest will fail.
+    // We treat this as success.
+    if (!response.ok()) {
+      server_.reset();
+      return;
+    }
+
+    CHECK(response->has_shutdown_response())
+        << "Shutdown call missing ShutdownResponse.";
+    CheckStatus(response->status(), "Shutdown");
+
+    // Clear out the server_ socket.
+    server_.reset();
+
+    // Close the write end of the pipe in this process. Now the only
+    // process that may have the write end still open is the cvd_server.
+    write_pipe->Close();
+
+    // Wait for the pipe to close by attempting to read from the pipe.
+    char buf[1];  // Any size >0 should work for read attempt.
+    CHECK(read_pipe->Read(buf, sizeof(buf)) <= 0)
+        << "Unexpected read value from cvd_server shutdown pipe.";
+  }
+
+  void HandleCommand(std::vector<std::string> args,
+                     std::vector<std::string> env) {
+    cvd::Request request;
+    auto command_request = request.mutable_command_request();
+    for (const std::string& arg : args) {
+      command_request->add_args(arg);
+    }
+    for (const std::string& e : env) {
+      auto eq_pos = e.find('=');
+      if (eq_pos == std::string::npos) {
+        LOG(WARNING) << "Environment var in unknown format: " << e;
+        continue;
+      }
+      (*command_request->mutable_env())[e.substr(0, eq_pos)] =
+          e.substr(eq_pos + 1);
+    }
+
+    auto response = SendRequest(request);
+    CHECK(response.ok() && response->has_command_response())
+        << "HandleCommand call missing CommandResponse.";
+    CheckStatus(response->status(), "GetVersion");
+  }
+
+ private:
+  std::optional<UnixMessageSocket> server_;
+
+  android::base::Result<cvd::Response> SendRequest(
+      const cvd::Request& request, std::optional<SharedFD> extra_fd = {}) {
+    if (!server_) {
+      return android::base::Error() << "server_ not set, cannot SendRequest.";
+    }
+    // Serialize and send the request.
+    std::string serialized;
+    if (!request.SerializeToString(&serialized)) {
+      return android::base::Error() << "Unable to serialize request proto.";
+    }
+    UnixSocketMessage request_message;
+
+    std::vector<SharedFD> control_fds = {
+        SharedFD::Dup(0),
+        SharedFD::Dup(1),
+        SharedFD::Dup(2),
+    };
+    if (extra_fd) {
+      control_fds.push_back(*extra_fd);
+    }
+    auto control = ControlMessage::FromFileDescriptors(control_fds);
+    CHECK(control.ok()) << control.error();
+    request_message.control.emplace_back(std::move(*control));
+
+    request_message.data =
+        std::vector<char>(serialized.begin(), serialized.end());
+    auto write_result = server_->WriteMessage(request_message);
+    if (!write_result.ok()) {
+      return android::base::Error() << write_result.error();
+    }
+
+    // Read and parse the response.
+    auto read_result = server_->ReadMessage();
+    if (!read_result.ok()) {
+      return android::base::Error() << read_result.error();
+    }
+    serialized =
+        std::string(read_result->data.begin(), read_result->data.end());
+    cvd::Response response;
+    if (!response.ParseFromString(serialized)) {
+      return android::base::Error()
+             << "Unable to parse serialized response proto.";
+    }
+
+    return response;
+  }
+
+  void StartCvdServer(const std::string& host_tool_directory) {
+    SharedFD server_fd =
+        SharedFD::SocketLocalServer(cvd::kServerSocketPath,
+                                    /*is_abstract=*/true, SOCK_STREAM, 0666);
+    CHECK(server_fd->IsOpen()) << server_fd->StrError();
+
+    // TODO(b/196114111): Investigate fully "daemonizing" the cvd_server.
+    CHECK(setenv("ANDROID_HOST_OUT", host_tool_directory.c_str(),
+                 /*overwrite=*/true) == 0);
+    Command command(HostBinaryPath("cvd_server"));
+    command.AddParameter("-server_fd=", server_fd);
+    SubprocessOptions options;
+    options.ExitWithParent(false);
+    command.Start(options);
+
+    // Connect to the server_fd, which waits for startup.
+    SetServer(SharedFD::SocketLocalClient(cvd::kServerSocketPath,
+                                          /*is_abstract=*/true, SOCK_STREAM));
+  }
+
+  void CheckStatus(const cvd::Status& status, const std::string& rpc) {
+    CHECK(status.code() == cvd::Status::OK)
+        << "Failed to call cvd_server " << rpc << " (" << status.code()
+        << "): " << status.message();
+  }
+};
+
+int CvdMain(int argc, char** argv, char** envp) {
+  android::base::InitLogging(argv, android::base::StderrLogger);
+
+  std::vector<std::string> args = ArgsToVec(argc, argv);
+  std::vector<Flag> flags;
+
+  // TODO(b/206893146): Make this decision inside the server.
+  if (args[0] == "acloud") {
+    bool passthrough = true;
+    ParseFlags({GflagsCompatFlag("acloud_passthrough", passthrough)}, args);
+    if (passthrough) {
+      auto android_top = StringFromEnv("ANDROID_BUILD_TOP", "");
+      if (android_top == "") {
+        LOG(ERROR) << "Could not find android environment. Please run "
+                   << "\"source build/envsetup.sh\".";
+        return 1;
+      }
+      // TODO(b/206893146): Detect what the platform actually is.
+      auto py_acloud_path =
+          android_top + "/prebuilts/asuite/acloud/linux-x86/acloud";
+      char** new_argv = new char*[args.size() + 1];
+      for (size_t i = 0; i < args.size(); i++) {
+        new_argv[i] = args[i].data();
+      }
+      new_argv[args.size()] = nullptr;
+      execv(py_acloud_path.data(), new_argv);
+      delete[] new_argv;
+      PLOG(ERROR) << "execv(" << py_acloud_path << ", ...) failed";
+      return 1;
+    }
+  }
+  bool clean = false;
+  flags.emplace_back(GflagsCompatFlag("clean", clean));
+
+  CHECK(ParseFlags(flags, args));
+
+  CvdClient client(SharedFD::SocketLocalClient(cvd::kServerSocketPath,
+                                               /*is_abstract=*/true,
+                                               SOCK_STREAM));
+
+  // Special case for `cvd kill-server`, handled by directly
+  // stopping the cvd_server.
+  if (argc > 1 && strcmp("kill-server", argv[1]) == 0) {
+    client.StopCvdServer(/*clear=*/true);
+    return 0;
+  }
+
+  // Special case for --clean flag, used to clear any existing state.
+  if (clean) {
+    LOG(INFO) << "cvd invoked with --clean; "
+              << "stopping the cvd_server before continuing.";
+    client.StopCvdServer(/*clear=*/true);
+    client = CvdClient(SharedFD::SocketLocalClient(
+        cvd::kServerSocketPath, /*is_abstract=*/true, SOCK_STREAM));
+  }
+
+  // Handle all remaining commands by forwarding them to the cvd_server.
+  CHECK(client.EnsureCvdServerRunning(
+      android::base::Dirname(android::base::GetExecutableDirectory())))
+      << "Unable to ensure cvd_server is running.";
+
+  std::vector<std::string> env;
+  for (char** e = envp; *e != 0; e++) {
+    env.emplace_back(*e);
+  }
+  client.HandleCommand(args, env);
+  return 0;
+}
+
+}  // namespace
+}  // namespace cuttlefish
+
+int main(int argc, char** argv, char** envp) {
+  return cuttlefish::CvdMain(argc, argv, envp);
+}
diff --git a/common/libs/utils/size_utils.cpp b/host/commands/cvd/proto/Android.bp
similarity index 60%
copy from common/libs/utils/size_utils.cpp
copy to host/commands/cvd/proto/Android.bp
index 9f25445..75de449 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/host/commands/cvd/proto/Android.bp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,15 +14,17 @@
  * limitations under the License.
  */
 
-#include "common/libs/utils/size_utils.h"
-
-#include <unistd.h>
-
-namespace cuttlefish {
-
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-}  // namespace cuttlefish
+cc_library_static {
+    name: "libcuttlefish_cvd_proto",
+    host_supported: true,
+    proto: {
+        export_proto_headers: true,
+        type: "lite",
+        //include_dirs: ["external/protobuf/src"],
+    },
+    srcs: ["cvd_server.proto"],
+}
diff --git a/host/commands/cvd/proto/cvd_server.proto b/host/commands/cvd/proto/cvd_server.proto
new file mode 100644
index 0000000..91194bc
--- /dev/null
+++ b/host/commands/cvd/proto/cvd_server.proto
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+syntax = "proto3";
+
+package cuttlefish.cvd;
+
+message Status {
+  // Subset of status codes from gRPC.
+  enum Code {
+    OK = 0;
+    FAILED_PRECONDITION = 9;
+  }
+
+  Code code = 1;
+  string message = 2;
+}
+
+message Request {
+  oneof contents {
+    // Returns the version of the CvdServer.
+    VersionRequest version_request = 1;
+    // Requests the CvdServer to shutdown.
+    ShutdownRequest shutdown_request = 2;
+    // Requests the CvdServer to execute a command on behalf of the client.
+    CommandRequest command_request = 3;
+  }
+}
+
+message Response {
+  Status status = 1;
+  oneof contents {
+    VersionResponse version_response = 2;
+    ShutdownResponse shutdown_response = 3;
+    CommandResponse command_response = 4;
+  }
+}
+
+message Version {
+  int32 major = 1;
+  int32 minor = 2;
+  string build = 3;
+}
+
+message VersionRequest {}
+message VersionResponse {
+  Version version = 1;
+}
+
+message ShutdownRequest {
+  // If true, clears instance and assembly state before shutting down.
+  bool clear = 1;
+}
+message ShutdownResponse {}
+
+message CommandRequest {
+  // The args that should be executed, including the subcommand.
+  repeated string args = 1;
+  // Environment variables that will be used by the subcommand.
+  map<string, string> env = 2;
+}
+message CommandResponse {}
diff --git a/host/commands/cvd/server.cc b/host/commands/cvd/server.cc
new file mode 100644
index 0000000..1c5b2ea
--- /dev/null
+++ b/host/commands/cvd/server.cc
@@ -0,0 +1,511 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/commands/cvd/server.h"
+
+#include <future>
+#include <map>
+#include <optional>
+#include <thread>
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <build/version.h>
+
+#include "cvd_server.pb.h"
+
+#include "common/libs/fs/shared_buf.h"
+#include "common/libs/fs/shared_fd.h"
+#include "common/libs/fs/shared_select.h"
+#include "common/libs/utils/files.h"
+#include "common/libs/utils/flag_parser.h"
+#include "common/libs/utils/shared_fd_flag.h"
+#include "common/libs/utils/subprocess.h"
+#include "common/libs/utils/unix_sockets.h"
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/known_paths.h"
+
+namespace cuttlefish {
+namespace {
+
+using android::base::Error;
+
+constexpr char kHostBugreportBin[] = "cvd_internal_host_bugreport";
+constexpr char kStartBin[] = "cvd_internal_start";
+constexpr char kStatusBin[] = "cvd_internal_status";
+constexpr char kStopBin[] = "cvd_internal_stop";
+
+constexpr char kClearBin[] = "clear_placeholder";  // Unused, runs CvdClear()
+constexpr char kFleetBin[] = "fleet_placeholder";  // Unused, runs CvdFleet()
+constexpr char kHelpBin[] = "help_placeholder";  // Unused, prints kHelpMessage.
+constexpr char kHelpMessage[] = R"(Cuttlefish Virtual Device (CVD) CLI.
+
+usage: cvd <command> <args>
+
+Commands:
+  help                Print this message.
+  help <command>      Print help for a command.
+  start               Start a device.
+  stop                Stop a running device.
+  clear               Stop all running devices and delete all instance and assembly directories.
+  fleet               View the current fleet status.
+  kill-server         Kill the cvd_server background process.
+  status              Check and print the state of a running instance.
+  host_bugreport      Capture a host bugreport, including configs, logs, and tombstones.
+
+Args:
+  <command args>      Each command has its own set of args. See cvd help <command>.
+  --clean             If provided, runs cvd kill-server before the requested command.
+)";
+
+const std::map<std::string, std::string> CommandToBinaryMap = {
+    {"help", kHelpBin},
+    {"host_bugreport", kHostBugreportBin},
+    {"cvd_host_bugreport", kHostBugreportBin},
+    {"start", kStartBin},
+    {"launch_cvd", kStartBin},
+    {"status", kStatusBin},
+    {"cvd_status", kStatusBin},
+    {"stop", kStopBin},
+    {"stop_cvd", kStopBin},
+    {"clear", kClearBin},
+    {"fleet", kFleetBin}};
+
+class CvdServer {
+ public:
+  void ServerLoop(const SharedFD& server) {
+    while (running_) {
+      SharedFDSet read_set;
+      read_set.Set(server);
+      int num_fds = Select(&read_set, nullptr, nullptr, nullptr);
+      if (num_fds <= 0) {  // Ignore select error
+        PLOG(ERROR) << "Select call returned error.";
+      } else if (read_set.IsSet(server)) {
+        auto client = SharedFD::Accept(*server);
+        while (true) {
+          android::base::Result<void> result = {};
+          auto request_with_stdio = GetRequest(client);
+          if (!request_with_stdio.ok()) {
+            client->Close();
+            break;
+          }
+          auto request = request_with_stdio->request;
+          auto in = request_with_stdio->in;
+          auto out = request_with_stdio->out;
+          auto err = request_with_stdio->err;
+          auto extra = request_with_stdio->extra;
+          switch (request.contents_case()) {
+            case cvd::Request::ContentsCase::CONTENTS_NOT_SET:
+              // No more messages from this client.
+              client->Close();
+              break;
+            case cvd::Request::ContentsCase::kVersionRequest:
+              result = GetVersion(client);
+              break;
+            case cvd::Request::ContentsCase::kShutdownRequest:
+              if (!extra) {
+                result = Error()
+                         << "Missing extra ShareFD for shutdown write_pipe";
+              } else {
+                result = Shutdown(client, request.shutdown_request(), out, err,
+                                  *extra);
+              }
+              break;
+            case cvd::Request::ContentsCase::kCommandRequest:
+              result = HandleCommand(client, request.command_request(), in, out,
+                                     err);
+              break;
+            default:
+              result = Error() << "Unknown request in cvd_server.";
+              break;
+          }
+          if (!result.ok()) {
+            LOG(ERROR) << result.error();
+            client->Close();
+          }
+        }
+      }
+    }
+  }
+
+  android::base::Result<void> GetVersion(const SharedFD& client) const {
+    cvd::Response response;
+    response.mutable_version_response()->mutable_version()->set_major(
+        cvd::kVersionMajor);
+    response.mutable_version_response()->mutable_version()->set_minor(
+        cvd::kVersionMinor);
+    response.mutable_version_response()->mutable_version()->set_build(
+        android::build::GetBuildNumber());
+    response.mutable_status()->set_code(cvd::Status::OK);
+    return SendResponse(client, response);
+  }
+
+  android::base::Result<void> Shutdown(const SharedFD& client,
+                                       const cvd::ShutdownRequest& request,
+                                       const SharedFD& out, const SharedFD& err,
+                                       const SharedFD& write_pipe) {
+    cvd::Response response;
+    response.mutable_shutdown_response();
+
+    if (request.clear()) {
+      *response.mutable_status() = CvdClear(out, err);
+      if (response.status().code() != cvd::Status::OK) {
+        return SendResponse(client, response);
+      }
+    }
+
+    if (!assemblies_.empty()) {
+      response.mutable_status()->set_code(cvd::Status::FAILED_PRECONDITION);
+      response.mutable_status()->set_message(
+          "Cannot shut down cvd_server while devices are being tracked. "
+          "Try `cvd kill-server`.");
+      return SendResponse(client, response);
+    }
+
+    // Intentionally leak the write_pipe fd so that it only closes
+    // when this process fully exits.
+    write_pipe->UNMANAGED_Dup();
+
+    WriteAll(out, "Stopping the cvd_server.\n");
+    running_ = false;
+    response.mutable_status()->set_code(cvd::Status::OK);
+    return SendResponse(client, response);
+  }
+
+  android::base::Result<void> HandleCommand(const SharedFD& client,
+                                            const cvd::CommandRequest& request,
+                                            const SharedFD& in,
+                                            const SharedFD& out,
+                                            const SharedFD& err) {
+    cvd::Response response;
+    response.mutable_command_response();
+
+    if (request.args_size() == 0) {
+      // No command to handle
+      response.mutable_status()->set_code(cvd::Status::FAILED_PRECONDITION);
+      response.mutable_status()->set_message("No args passed to HandleCommand");
+      return SendResponse(client, response);
+    }
+
+    std::vector<Flag> flags;
+
+    std::vector<std::string> args;
+    for (const std::string& arg : request.args()) {
+      args.push_back(arg);
+    }
+
+    std::string bin;
+    std::string program_name = cpp_basename(args[0]);
+    std::string subcommand_name = program_name;
+    if (program_name == "cvd") {
+      if (args.size() == 1) {
+        // Show help if user invokes `cvd` alone.
+        subcommand_name = "help";
+      } else {
+        subcommand_name = args[1];
+      }
+    }
+    auto subcommand_bin = CommandToBinaryMap.find(subcommand_name);
+    if (subcommand_bin == CommandToBinaryMap.end()) {
+      // Show help if subcommand not found.
+      bin = kHelpBin;
+    } else {
+      bin = subcommand_bin->second;
+    }
+
+    // Remove program name from args
+    size_t args_to_skip = 1;
+    if (program_name == "cvd" && args.size() > 1) {
+      args_to_skip = 2;
+    }
+    args.erase(args.begin(), args.begin() + args_to_skip);
+
+    // assembly_dir is used to possibly set CuttlefishConfig path env variable
+    // later. This env variable is used by subcommands when locating the config.
+    std::string assembly_dir =
+        StringFromEnv("HOME", ".") + "/cuttlefish_assembly";
+    flags.emplace_back(GflagsCompatFlag("assembly_dir", assembly_dir));
+
+    // Create a copy of args before parsing, to be passed to subcommands.
+    std::vector<std::string> args_copy = args;
+
+    CHECK(ParseFlags(flags, args));
+
+    auto host_artifacts_path = request.env().find("ANDROID_HOST_OUT");
+    if (host_artifacts_path == request.env().end()) {
+      response.mutable_status()->set_code(cvd::Status::FAILED_PRECONDITION);
+      response.mutable_status()->set_message(
+          "Missing ANDROID_HOST_OUT in client environment.");
+      return SendResponse(client, response);
+    }
+
+    if (bin == kHelpBin) {
+      // Handle `cvd help`
+      if (args.empty()) {
+        WriteAll(out, kHelpMessage);
+        response.mutable_status()->set_code(cvd::Status::OK);
+        return SendResponse(client, response);
+      }
+
+      // Certain commands have no detailed help text.
+      std::set<std::string> builtins = {"help", "clear", "kill-server"};
+      auto it = CommandToBinaryMap.find(args[0]);
+      if (it == CommandToBinaryMap.end() ||
+          builtins.find(args[0]) != builtins.end()) {
+        WriteAll(out, kHelpMessage);
+        response.mutable_status()->set_code(cvd::Status::OK);
+        return SendResponse(client, response);
+      }
+
+      // Handle `cvd help <subcommand>` by calling the subcommand with --help.
+      bin = it->second;
+      args_copy.push_back("--help");
+    } else if (bin == kClearBin) {
+      *response.mutable_status() = CvdClear(out, err);
+      return SendResponse(client, response);
+    } else if (bin == kFleetBin) {
+      *response.mutable_status() = CvdFleet(out);
+      return SendResponse(client, response);
+    } else if (bin == kStartBin) {
+      // Track this assembly_dir in the fleet.
+      AssemblyInfo info;
+      info.host_binaries_dir = host_artifacts_path->second + "/bin/";
+      assemblies_.emplace(assembly_dir, info);
+    }
+
+    Command command(assemblies_[assembly_dir].host_binaries_dir + bin);
+    for (const std::string& arg : args_copy) {
+      command.AddParameter(arg);
+    }
+
+    // Set CuttlefishConfig path based on assembly dir,
+    // used by subcommands when locating the CuttlefishConfig.
+    if (request.env().count(kCuttlefishConfigEnvVarName) == 0) {
+      auto config_path = GetCuttlefishConfigPath(assembly_dir);
+      if (config_path) {
+        command.AddEnvironmentVariable(kCuttlefishConfigEnvVarName,
+                                       *config_path);
+      }
+    }
+    for (auto& it : request.env()) {
+      command.AddEnvironmentVariable(it.first, it.second);
+    }
+
+    // Redirect stdin, stdout, stderr back to the cvd client
+    command.RedirectStdIO(Subprocess::StdIOChannel::kStdIn, in);
+    command.RedirectStdIO(Subprocess::StdIOChannel::kStdOut, out);
+    command.RedirectStdIO(Subprocess::StdIOChannel::kStdErr, err);
+    SubprocessOptions options;
+    options.ExitWithParent(false);
+    command.Start(options);
+
+    response.mutable_status()->set_code(cvd::Status::OK);
+    return SendResponse(client, response);
+  }
+
+ private:
+  using AssemblyDir = std::string;
+  struct AssemblyInfo {
+    std::string host_binaries_dir;
+  };
+  std::map<AssemblyDir, AssemblyInfo> assemblies_;
+  bool running_ = true;
+
+  struct RequestWithStdio {
+    cvd::Request request;
+    SharedFD in, out, err;
+    std::optional<SharedFD> extra;
+  };
+
+  std::optional<std::string> GetCuttlefishConfigPath(
+      const std::string& assembly_dir) const {
+    std::string assembly_dir_realpath;
+    if (DirectoryExists(assembly_dir)) {
+      CHECK(android::base::Realpath(assembly_dir, &assembly_dir_realpath));
+      std::string config_path =
+          AbsolutePath(assembly_dir_realpath + "/" + "cuttlefish_config.json");
+      if (FileExists(config_path)) {
+        return config_path;
+      }
+    }
+    return {};
+  }
+
+  UnixMessageSocket GetClient(const SharedFD& client) const {
+    UnixMessageSocket result = UnixMessageSocket(client);
+    CHECK(result.EnableCredentials(true).ok())
+        << "Unable to enable UnixMessageSocket credentials.";
+    return result;
+  }
+
+  android::base::Result<RequestWithStdio> GetRequest(
+      const SharedFD& client) const {
+    RequestWithStdio result;
+
+    UnixMessageSocket reader = GetClient(client);
+    auto read_result = reader.ReadMessage();
+    if (!read_result.ok()) {
+      return Error() << read_result.error();
+    }
+
+    if (read_result->data.empty()) {
+      return Error() << "Read empty packet, so the client has probably closed "
+                        "the connection.";
+    }
+
+    std::string serialized(read_result->data.begin(), read_result->data.end());
+    cvd::Request request;
+    if (!request.ParseFromString(serialized)) {
+      return Error() << "Unable to parse serialized request proto.";
+    }
+    result.request = request;
+
+    if (!read_result->HasFileDescriptors()) {
+      return Error() << "Missing stdio fds from request.";
+    }
+    auto fds = read_result->FileDescriptors();
+    if (!fds.ok() || (fds->size() != 3 && fds->size() != 4)) {
+      return Error() << "Error reading stdio fds from request: " << fds.error();
+    }
+    result.in = (*fds)[0];
+    result.out = (*fds)[1];
+    result.err = (*fds)[2];
+    if (fds->size() == 4) {
+      result.extra = (*fds)[3];
+    }
+
+    if (read_result->HasCredentials()) {
+      // TODO(b/198453477): Use Credentials to control command access.
+      LOG(DEBUG) << "Has credentials, uid=" << read_result->Credentials()->uid;
+    }
+
+    return result;
+  }
+
+  android::base::Result<void> SendResponse(
+      const SharedFD& client, const cvd::Response& response) const {
+    std::string serialized;
+    if (!response.SerializeToString(&serialized)) {
+      return android::base::Error() << "Unable to serialize response proto.";
+    }
+    UnixSocketMessage message;
+    message.data = std::vector<char>(serialized.begin(), serialized.end());
+
+    UnixMessageSocket writer = GetClient(client);
+    return writer.WriteMessage(message);
+  }
+
+  cvd::Status CvdClear(const SharedFD& out, const SharedFD& err) {
+    cvd::Status status;
+    for (const auto& it : assemblies_) {
+      const AssemblyDir& assembly_dir = it.first;
+      const AssemblyInfo& assembly_info = it.second;
+      auto config_path = GetCuttlefishConfigPath(assembly_dir);
+      if (config_path) {
+        // Stop all instances that are using this assembly dir.
+        Command command(assembly_info.host_binaries_dir + kStopBin);
+        // Delete the instance dirs.
+        command.AddParameter("--clear_instance_dirs");
+        command.RedirectStdIO(Subprocess::StdIOChannel::kStdOut, out);
+        command.RedirectStdIO(Subprocess::StdIOChannel::kStdErr, err);
+        command.AddEnvironmentVariable(kCuttlefishConfigEnvVarName,
+                                       *config_path);
+        if (int wait_result = command.Start().Wait(); wait_result != 0) {
+          WriteAll(
+              out,
+              "Warning: error stopping instances for assembly dir " +
+                  assembly_dir +
+                  ".\nThis can happen if instances are already stopped.\n");
+        }
+
+        // Delete the assembly dir.
+        WriteAll(out, "Deleting " + assembly_dir + "\n");
+        if (DirectoryExists(assembly_dir) &&
+            !RecursivelyRemoveDirectory(assembly_dir)) {
+          status.set_code(cvd::Status::FAILED_PRECONDITION);
+          status.set_message("Unable to rmdir " + assembly_dir);
+          return status;
+        }
+      }
+    }
+    RemoveFile(StringFromEnv("HOME", ".") + "/cuttlefish_runtime");
+    RemoveFile(GetGlobalConfigFileLink());
+    WriteAll(out,
+             "Stopped all known instances and deleted all "
+             "known assembly and instance dirs.\n");
+
+    assemblies_.clear();
+    status.set_code(cvd::Status::OK);
+    return status;
+  }
+
+  cvd::Status CvdFleet(const SharedFD& out) const {
+    for (const auto& it : assemblies_) {
+      const AssemblyDir& assembly_dir = it.first;
+      const AssemblyInfo& assembly_info = it.second;
+      auto config_path = GetCuttlefishConfigPath(assembly_dir);
+      if (config_path) {
+        // Reads CuttlefishConfig::instance_names(), which must remain stable
+        // across changes to config file format (within server.h major version).
+        auto config = CuttlefishConfig::GetFromFile(*config_path);
+        if (config) {
+          WriteAll(out, "Group:\n");
+          WriteAll(out, "  Assembly dir: " + assembly_dir + "\n");
+          WriteAll(out, "  Instances:\n");
+          for (const std::string& instance_name : config->instance_names()) {
+            Command command(assembly_info.host_binaries_dir + kStatusBin);
+            command.AddParameter("--print");
+            command.AddParameter("--instance_name=", instance_name);
+            command.RedirectStdIO(Subprocess::StdIOChannel::kStdOut, out);
+            command.AddEnvironmentVariable(kCuttlefishConfigEnvVarName,
+                                           *config_path);
+            if (int wait_result = command.Start().Wait(); wait_result != 0) {
+              WriteAll(out, "      (unknown instance status error)");
+            }
+          }
+        }
+      }
+    }
+    cvd::Status status;
+    status.set_code(cvd::Status::OK);
+    return status;
+  }
+};
+
+int CvdServerMain(int argc, char** argv) {
+  android::base::InitLogging(argv, android::base::StderrLogger);
+
+  std::vector<Flag> flags;
+  SharedFD server_fd;
+  flags.emplace_back(
+      SharedFDFlag("server_fd", server_fd)
+          .Help("File descriptor to an already created vsock server"));
+  std::vector<std::string> args =
+      ArgsToVec(argc - 1, argv + 1);  // Skip argv[0]
+  CHECK(ParseFlags(flags, args));
+
+  CHECK(server_fd->IsOpen()) << "Did not receive a valid cvd_server fd";
+  CvdServer server;
+  server.ServerLoop(server_fd);
+  return 0;
+}
+
+}  // namespace
+}  // namespace cuttlefish
+
+int main(int argc, char** argv) {
+  return cuttlefish::CvdServerMain(argc, argv);
+}
diff --git a/common/libs/utils/size_utils.cpp b/host/commands/cvd/server.h
similarity index 61%
copy from common/libs/utils/size_utils.cpp
copy to host/commands/cvd/server.h
index 9f25445..300c8c4 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/host/commands/cvd/server.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,15 +14,16 @@
  * limitations under the License.
  */
 
-#include "common/libs/utils/size_utils.h"
-
-#include <unistd.h>
-
 namespace cuttlefish {
+namespace cvd {
 
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
-}
+// Major version uprevs are backwards incompatible.
+// Minor version uprevs are backwards compatible within major version.
+constexpr int kVersionMajor = 1;
+constexpr int kVersionMinor = 1;
 
+// Pathname of the abstract cvd_server socket.
+constexpr char kServerSocketPath[] = "cvd_server";
+
+}  // namespace cvd
 }  // namespace cuttlefish
diff --git a/host/commands/cvd_status/Android.bp b/host/commands/cvd_status/Android.bp
deleted file mode 100644
index ae48d19..0000000
--- a/host/commands/cvd_status/Android.bp
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Copyright (C) 2018 The Android Open Source Project
-//
-// 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.
-
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-cc_binary {
-    name: "cvd_status",
-    srcs: [
-        "cvd_status.cc",
-    ],
-    shared_libs: [
-        "libbase",
-        "libcuttlefish_fs",
-        "libcuttlefish_utils",
-        "libjsoncpp",
-    ],
-    static_libs: [
-        "libcuttlefish_host_config",
-        "libcuttlefish_vm_manager",
-        "libgflags",
-    ],
-    defaults: ["cuttlefish_host", "cuttlefish_libicuuc"],
-}
diff --git a/host/commands/cvd_status/cvd_status.cc b/host/commands/cvd_status/cvd_status.cc
deleted file mode 100644
index 81436d4..0000000
--- a/host/commands/cvd_status/cvd_status.cc
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * 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.
- */
-
-#include <inttypes.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <signal.h>
-
-#include <algorithm>
-#include <cstdlib>
-#include <fstream>
-#include <iomanip>
-#include <memory>
-#include <sstream>
-#include <string>
-#include <vector>
-
-#include <gflags/gflags.h>
-#include <android-base/logging.h>
-
-#include "common/libs/fs/shared_fd.h"
-#include "common/libs/fs/shared_select.h"
-#include "common/libs/utils/environment.h"
-#include "host/commands/run_cvd/runner_defs.h"
-#include "host/libs/config/cuttlefish_config.h"
-#include "host/libs/vm_manager/vm_manager.h"
-
-DEFINE_int32(wait_for_launcher, 5,
-             "How many seconds to wait for the launcher to respond to the status "
-             "command. A value of zero means wait indefinetly");
-
-int main(int argc, char** argv) {
-  ::android::base::InitLogging(argv, android::base::StderrLogger);
-  google::ParseCommandLineFlags(&argc, &argv, true);
-
-  auto config = cuttlefish::CuttlefishConfig::Get();
-  if (!config) {
-    LOG(ERROR) << "Failed to obtain config object";
-    return 1;
-  }
-
-  auto instance = config->ForDefaultInstance();
-  auto monitor_path = instance.launcher_monitor_socket_path();
-  if (monitor_path.empty()) {
-    LOG(ERROR) << "No path to launcher monitor found";
-    return 2;
-  }
-  auto monitor_socket = cuttlefish::SharedFD::SocketLocalClient(
-      monitor_path.c_str(), false, SOCK_STREAM, FLAGS_wait_for_launcher);
-  if (!monitor_socket->IsOpen()) {
-    LOG(ERROR) << "Unable to connect to launcher monitor at " << monitor_path
-               << ": " << monitor_socket->StrError();
-    return 3;
-  }
-  auto request = cuttlefish::LauncherAction::kStatus;
-  auto bytes_sent = monitor_socket->Send(&request, sizeof(request), 0);
-  if (bytes_sent < 0) {
-    LOG(ERROR) << "Error sending launcher monitor the status command: "
-               << monitor_socket->StrError();
-    return 4;
-  }
-  // Perform a select with a timeout to guard against launcher hanging
-  cuttlefish::SharedFDSet read_set;
-  read_set.Set(monitor_socket);
-  struct timeval timeout = {FLAGS_wait_for_launcher, 0};
-  int selected = cuttlefish::Select(&read_set, nullptr, nullptr,
-                             FLAGS_wait_for_launcher <= 0 ? nullptr : &timeout);
-  if (selected < 0){
-    LOG(ERROR) << "Failed communication with the launcher monitor: "
-               << strerror(errno);
-    return 5;
-  }
-  if (selected == 0) {
-    LOG(ERROR) << "Timeout expired waiting for launcher monitor to respond";
-    return 6;
-  }
-  cuttlefish::LauncherResponse response;
-  auto bytes_recv = monitor_socket->Recv(&response, sizeof(response), 0);
-  if (bytes_recv < 0) {
-    LOG(ERROR) << "Error receiving response from launcher monitor: "
-               << monitor_socket->StrError();
-    return 7;
-  }
-  if (response != cuttlefish::LauncherResponse::kSuccess) {
-    LOG(ERROR) << "Received '" << static_cast<char>(response)
-               << "' response from launcher monitor";
-    return 8;
-  }
-  LOG(INFO) << "run_cvd is active.";
-  return 0;
-}
diff --git a/host/commands/fetcher/Android.bp b/host/commands/fetcher/Android.bp
index fdb97ec..f3dbbfd 100644
--- a/host/commands/fetcher/Android.bp
+++ b/host/commands/fetcher/Android.bp
@@ -29,6 +29,7 @@
     static_libs: [
         "libcuttlefish_host_config",
         "libgflags",
+        "libext2_blkid",
     ],
     target: {
         host: {
diff --git a/host/commands/fetcher/build_api.cc b/host/commands/fetcher/build_api.cc
index 16f95db..90eb640 100644
--- a/host/commands/fetcher/build_api.cc
+++ b/host/commands/fetcher/build_api.cc
@@ -80,8 +80,8 @@
   product = StringFromEnv("TARGET_PRODUCT", "");
 }
 
-BuildApi::BuildApi(std::unique_ptr<CredentialSource> credential_source)
-    : credential_source(std::move(credential_source)) {}
+BuildApi::BuildApi(CurlWrapper& curl, CredentialSource* credential_source)
+    : curl(curl), credential_source(credential_source) {}
 
 std::vector<std::string> BuildApi::Headers() {
   std::vector<std::string> headers;
@@ -93,59 +93,92 @@
 
 std::string BuildApi::LatestBuildId(const std::string& branch,
                                     const std::string& target) {
-  std::string url = BUILD_API + "/builds?branch=" + branch
-      + "&buildAttemptStatus=complete"
-      + "&buildType=submitted&maxResults=1&successful=true&target=" + target;
-  auto response = curl.DownloadToJson(url, Headers());
-  CHECK(!response.isMember("error")) << "Error fetching the latest build of \""
-      << target << "\" on \"" << branch << "\". Response was " << response;
+  std::string url =
+      BUILD_API + "/builds?branch=" + curl.UrlEscape(branch) +
+      "&buildAttemptStatus=complete" +
+      "&buildType=submitted&maxResults=1&successful=true&target=" +
+      curl.UrlEscape(target);
+  auto curl_response = curl.DownloadToJson(url, Headers());
+  const auto& json = curl_response.data;
+  if (!curl_response.HttpSuccess()) {
+    LOG(FATAL) << "Error fetching the latest build of \"" << target
+               << "\" on \"" << branch << "\". The server response was \""
+               << json << "\", and code was " << curl_response.http_code;
+  }
+  CHECK(!json.isMember("error"))
+      << "Response had \"error\" but had http success status. Received \""
+      << json << "\"";
 
-  if (!response.isMember("builds") || response["builds"].size() != 1) {
+  if (!json.isMember("builds") || json["builds"].size() != 1) {
     LOG(WARNING) << "expected to receive 1 build for \"" << target << "\" on \""
-        << branch << "\", but received " << response["builds"].size()
-        << ". Full response was " << response;
+                 << branch << "\", but received " << json["builds"].size()
+                 << ". Full response was " << json;
     return "";
   }
-  return response["builds"][0]["buildId"].asString();
+  return json["builds"][0]["buildId"].asString();
 }
 
 std::string BuildApi::BuildStatus(const DeviceBuild& build) {
-  std::string url = BUILD_API + "/builds/" + build.id + "/" + build.target;
-  auto response_json = curl.DownloadToJson(url, Headers());
-  CHECK(!response_json.isMember("error")) << "Error fetching the status of "
-      << "build " << build << ". Response was " << response_json;
+  std::string url = BUILD_API + "/builds/" + curl.UrlEscape(build.id) + "/" +
+                    curl.UrlEscape(build.target);
+  auto curl_response = curl.DownloadToJson(url, Headers());
+  const auto& json = curl_response.data;
+  if (!curl_response.HttpSuccess()) {
+    LOG(FATAL) << "Error fetching the status of \"" << build
+               << "\". The server response was \"" << json
+               << "\", and code was " << curl_response.http_code;
+  }
+  CHECK(!json.isMember("error"))
+      << "Response had \"error\" but had http success status. Received \""
+      << json << "\"";
 
-  return response_json["buildAttemptStatus"].asString();
+  return json["buildAttemptStatus"].asString();
 }
 
 std::string BuildApi::ProductName(const DeviceBuild& build) {
-  std::string url = BUILD_API + "/builds/" + build.id + "/" + build.target;
-  auto response_json = curl.DownloadToJson(url, Headers());
-  CHECK(!response_json.isMember("error")) << "Error fetching the status of "
-      << "build " << build << ". Response was " << response_json;
-  CHECK(response_json.isMember("target")) << "Build was missing target field.";
-  return response_json["target"]["product"].asString();
+  std::string url = BUILD_API + "/builds/" + curl.UrlEscape(build.id) + "/" +
+                    curl.UrlEscape(build.target);
+  auto curl_response = curl.DownloadToJson(url, Headers());
+  const auto& json = curl_response.data;
+  if (!curl_response.HttpSuccess()) {
+    LOG(FATAL) << "Error fetching the product name of \"" << build
+               << "\". The server response was \"" << json
+               << "\", and code was " << curl_response.http_code;
+  }
+  CHECK(!json.isMember("error"))
+      << "Response had \"error\" but had http success status. Received \""
+      << json << "\"";
+
+  CHECK(json.isMember("target")) << "Build was missing target field.";
+  return json["target"]["product"].asString();
 }
 
 std::vector<Artifact> BuildApi::Artifacts(const DeviceBuild& build) {
   std::string page_token = "";
   std::vector<Artifact> artifacts;
   do {
-    std::string url = BUILD_API + "/builds/" + build.id + "/" + build.target +
-                      "/attempts/latest/artifacts?maxResults=1000";
+    std::string url = BUILD_API + "/builds/" + curl.UrlEscape(build.id) + "/" +
+                      curl.UrlEscape(build.target) +
+                      "/attempts/latest/artifacts?maxResults=100";
     if (page_token != "") {
-      url += "&pageToken=" + page_token;
+      url += "&pageToken=" + curl.UrlEscape(page_token);
     }
-    auto artifacts_json = curl.DownloadToJson(url, Headers());
-    CHECK(!artifacts_json.isMember("error"))
-        << "Error fetching the artifacts of " << build << ". Response was "
-        << artifacts_json;
-    if (artifacts_json.isMember("nextPageToken")) {
-      page_token = artifacts_json["nextPageToken"].asString();
+    auto curl_response = curl.DownloadToJson(url, Headers());
+    const auto& json = curl_response.data;
+    if (!curl_response.HttpSuccess()) {
+      LOG(FATAL) << "Error fetching the artifacts of \"" << build
+                 << "\". The server response was \"" << json
+                 << "\", and code was " << curl_response.http_code;
+    }
+    CHECK(!json.isMember("error"))
+        << "Response had \"error\" but had http success status. Received \""
+        << json << "\"";
+    if (json.isMember("nextPageToken")) {
+      page_token = json["nextPageToken"].asString();
     } else {
       page_token = "";
     }
-    for (const auto& artifact_json : artifacts_json["artifacts"]) {
+    for (const auto& artifact_json : json["artifacts"]) {
       artifacts.emplace_back(artifact_json);
     }
   } while (page_token != "");
@@ -176,16 +209,27 @@
                               const std::string& artifact,
                               const std::string& path) {
   std::string download_url_endpoint =
-      BUILD_API + "/builds/" + build.id + "/" + build.target +
-      "/attempts/latest/artifacts/" + artifact + "/url";
-  auto download_url_json =
-      curl.DownloadToJson(download_url_endpoint, Headers());
-  if (!download_url_json.isMember("signedUrl")) {
-    LOG(ERROR) << "URL endpoint did not have json path: " << download_url_json;
+      BUILD_API + "/builds/" + curl.UrlEscape(build.id) + "/" +
+      curl.UrlEscape(build.target) + "/attempts/latest/artifacts/" +
+      curl.UrlEscape(artifact) + "/url";
+  auto curl_response = curl.DownloadToJson(download_url_endpoint, Headers());
+  const auto& json = curl_response.data;
+  if (!(curl_response.HttpSuccess() || curl_response.HttpRedirect())) {
+    LOG(ERROR) << "Error fetching the url of \"" << artifact << "\" for \""
+               << build << "\". The server response was \"" << json
+               << "\", and code was " << curl_response.http_code;
     return false;
   }
-  std::string url = download_url_json["signedUrl"].asString();
-  return curl.DownloadToFile(url, path);
+  if (json.isMember("error")) {
+    LOG(ERROR) << "Response had \"error\" but had http success status. "
+               << "Received \"" << json << "\"";
+  }
+  if (!json.isMember("signedUrl")) {
+    LOG(ERROR) << "URL endpoint did not have json path: " << json;
+    return false;
+  }
+  std::string url = json["signedUrl"].asString();
+  return curl.DownloadToFile(url, path).HttpSuccess();
 }
 
 bool BuildApi::ArtifactToFile(const DirectoryBuild& build,
diff --git a/host/commands/fetcher/build_api.h b/host/commands/fetcher/build_api.h
index 505ad4b..769893f 100644
--- a/host/commands/fetcher/build_api.h
+++ b/host/commands/fetcher/build_api.h
@@ -81,34 +81,34 @@
 std::ostream& operator<<(std::ostream&, const Build&);
 
 class BuildApi {
-  CurlWrapper curl;
-  std::unique_ptr<CredentialSource> credential_source;
+  CurlWrapper& curl;
+  CredentialSource* credential_source;
 
   std::vector<std::string> Headers();
 public:
-  BuildApi(std::unique_ptr<CredentialSource> credential_source);
-  ~BuildApi() = default;
+ BuildApi(CurlWrapper&, CredentialSource*);
+ ~BuildApi() = default;
 
-  std::string LatestBuildId(const std::string& branch,
-                            const std::string& target);
+ std::string LatestBuildId(const std::string& branch,
+                           const std::string& target);
 
-  std::string BuildStatus(const DeviceBuild&);
+ std::string BuildStatus(const DeviceBuild&);
 
-  std::string ProductName(const DeviceBuild&);
+ std::string ProductName(const DeviceBuild&);
 
-  std::vector<Artifact> Artifacts(const DeviceBuild&);
+ std::vector<Artifact> Artifacts(const DeviceBuild&);
 
-  bool ArtifactToFile(const DeviceBuild& build, const std::string& artifact,
-                      const std::string& path);
+ bool ArtifactToFile(const DeviceBuild& build, const std::string& artifact,
+                     const std::string& path);
 
-  std::vector<Artifact> Artifacts(const DirectoryBuild&);
+ std::vector<Artifact> Artifacts(const DirectoryBuild&);
 
-  bool ArtifactToFile(const DirectoryBuild& build, const std::string& artifact,
-                      const std::string& path);
+ bool ArtifactToFile(const DirectoryBuild& build, const std::string& artifact,
+                     const std::string& path);
 
-  std::vector<Artifact> Artifacts(const Build& build) {
-    return std::visit([this](auto&& arg) { return Artifacts(arg); }, build);
-  }
+ std::vector<Artifact> Artifacts(const Build& build) {
+   return std::visit([this](auto&& arg) { return Artifacts(arg); }, build);
+ }
 
   bool ArtifactToFile(const Build& build, const std::string& artifact,
                       const std::string& path) {
diff --git a/host/commands/fetcher/credential_source.cc b/host/commands/fetcher/credential_source.cc
index 0144e2d..b1b70f4 100644
--- a/host/commands/fetcher/credential_source.cc
+++ b/host/commands/fetcher/credential_source.cc
@@ -27,7 +27,8 @@
 
 } // namespace
 
-GceMetadataCredentialSource::GceMetadataCredentialSource() {
+GceMetadataCredentialSource::GceMetadataCredentialSource(CurlWrapper& curl)
+    : curl(curl) {
   latest_credential = "";
   expiration = std::chrono::steady_clock::now();
 }
@@ -40,25 +41,33 @@
 }
 
 void GceMetadataCredentialSource::RefreshCredential() {
-  Json::Value credential_json =
+  auto curl_response =
       curl.DownloadToJson(REFRESH_URL, {"Metadata-Flavor: Google"});
+  const auto& json = curl_response.data;
+  if (!curl_response.HttpSuccess()) {
+    LOG(FATAL) << "Error fetching credentials. The server response was \""
+               << json << "\", and code was " << curl_response.http_code;
+  }
+  CHECK(!json.isMember("error"))
+      << "Response had \"error\" but had http success status. Received \""
+      << json << "\"";
 
-  CHECK(!credential_json.isMember("error")) << "Error fetching credentials. " <<
-      "Response was " << credential_json;
-  bool has_access_token = credential_json.isMember("access_token");
-  bool has_expires_in = credential_json.isMember("expires_in");
+  bool has_access_token = json.isMember("access_token");
+  bool has_expires_in = json.isMember("expires_in");
   if (!has_access_token || !has_expires_in) {
     LOG(FATAL) << "GCE credential was missing access_token or expires_in. "
-        << "Full response was " << credential_json << "";
+               << "Full response was " << json << "";
   }
 
-  expiration = std::chrono::steady_clock::now()
-      + std::chrono::seconds(credential_json["expires_in"].asInt());
-  latest_credential = credential_json["access_token"].asString();
+  expiration = std::chrono::steady_clock::now() +
+               std::chrono::seconds(json["expires_in"].asInt());
+  latest_credential = json["access_token"].asString();
 }
 
-std::unique_ptr<CredentialSource> GceMetadataCredentialSource::make() {
-  return std::unique_ptr<CredentialSource>(new GceMetadataCredentialSource());
+std::unique_ptr<CredentialSource> GceMetadataCredentialSource::make(
+    CurlWrapper& curl) {
+  return std::unique_ptr<CredentialSource>(
+      new GceMetadataCredentialSource(curl));
 }
 
 FixedCredentialSource::FixedCredentialSource(const std::string& credential) {
diff --git a/host/commands/fetcher/credential_source.h b/host/commands/fetcher/credential_source.h
index 78ec51a..902e334 100644
--- a/host/commands/fetcher/credential_source.h
+++ b/host/commands/fetcher/credential_source.h
@@ -29,18 +29,18 @@
 };
 
 class GceMetadataCredentialSource : public CredentialSource {
-  CurlWrapper curl;
+  CurlWrapper& curl;
   std::string latest_credential;
   std::chrono::steady_clock::time_point expiration;
 
   void RefreshCredential();
 public:
-  GceMetadataCredentialSource();
-  GceMetadataCredentialSource(GceMetadataCredentialSource&&) = default;
+ GceMetadataCredentialSource(CurlWrapper&);
+ GceMetadataCredentialSource(GceMetadataCredentialSource&&) = default;
 
-  virtual std::string Credential();
+ virtual std::string Credential();
 
-  static std::unique_ptr<CredentialSource> make();
+ static std::unique_ptr<CredentialSource> make(CurlWrapper&);
 };
 
 class FixedCredentialSource : public CredentialSource {
diff --git a/host/commands/fetcher/curl_wrapper.cc b/host/commands/fetcher/curl_wrapper.cc
index c32f4ce..60b2d23 100644
--- a/host/commands/fetcher/curl_wrapper.cc
+++ b/host/commands/fetcher/curl_wrapper.cc
@@ -13,14 +13,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "curl_wrapper.h"
+#include "host/commands/fetcher/curl_wrapper.h"
 
-#include <sstream>
-#include <string>
 #include <stdio.h>
 
-#include <android-base/logging.h>
+#include <mutex>
+#include <sstream>
+#include <string>
+#include <thread>
 
+#include <android-base/logging.h>
 #include <curl/curl.h>
 #include <json/json.h>
 
@@ -49,113 +51,188 @@
   return curl_headers;
 }
 
-} // namespace
-
-CurlWrapper::CurlWrapper() {
-  curl = curl_easy_init();
-  if (!curl) {
-    LOG(ERROR) << "failed to initialize curl";
-    return;
+class CurlWrapperImpl : public CurlWrapper {
+ public:
+  CurlWrapperImpl() {
+    curl_ = curl_easy_init();
+    if (!curl_) {
+      LOG(ERROR) << "failed to initialize curl";
+      return;
+    }
   }
+  ~CurlWrapperImpl() { curl_easy_cleanup(curl_); }
+
+  CurlResponse<std::string> DownloadToFile(
+      const std::string& url, const std::string& path,
+      const std::vector<std::string>& headers) {
+    std::lock_guard<std::mutex> lock(mutex_);
+    LOG(INFO) << "Attempting to save \"" << url << "\" to \"" << path << "\"";
+    if (!curl_) {
+      LOG(ERROR) << "curl was not initialized\n";
+      return {"", -1};
+    }
+    curl_slist* curl_headers = build_slist(headers);
+    curl_easy_reset(curl_);
+    curl_easy_setopt(curl_, CURLOPT_CAINFO,
+                     "/etc/ssl/certs/ca-certificates.crt");
+    curl_easy_setopt(curl_, CURLOPT_HTTPHEADER, curl_headers);
+    curl_easy_setopt(curl_, CURLOPT_URL, url.c_str());
+    char error_buf[CURL_ERROR_SIZE];
+    curl_easy_setopt(curl_, CURLOPT_ERRORBUFFER, error_buf);
+    curl_easy_setopt(curl_, CURLOPT_VERBOSE, 1L);
+    FILE* file = fopen(path.c_str(), "w");
+    if (!file) {
+      LOG(ERROR) << "could not open file " << path;
+      return {"", -1};
+    }
+    curl_easy_setopt(curl_, CURLOPT_WRITEDATA, (void*)file);
+    CURLcode res = curl_easy_perform(curl_);
+    if (curl_headers) {
+      curl_slist_free_all(curl_headers);
+    }
+    fclose(file);
+    if (res != CURLE_OK) {
+      LOG(ERROR) << "curl_easy_perform() failed. "
+                 << "Code was \"" << res << "\". "
+                 << "Strerror was \"" << curl_easy_strerror(res) << "\". "
+                 << "Error buffer was \"" << error_buf << "\".";
+      return {{}, -1};
+    }
+    long http_code = 0;
+    curl_easy_getinfo(curl_, CURLINFO_RESPONSE_CODE, &http_code);
+    return {path, http_code};
+  }
+
+  CurlResponse<std::string> DownloadToString(
+      const std::string& url, const std::vector<std::string>& headers) {
+    std::lock_guard<std::mutex> lock(mutex_);
+    LOG(INFO) << "Attempting to download \"" << url << "\"";
+    if (!curl_) {
+      LOG(ERROR) << "curl was not initialized\n";
+      return {"", -1};
+    }
+    curl_slist* curl_headers = build_slist(headers);
+    curl_easy_reset(curl_);
+    curl_easy_setopt(curl_, CURLOPT_CAINFO,
+                     "/etc/ssl/certs/ca-certificates.crt");
+    curl_easy_setopt(curl_, CURLOPT_HTTPHEADER, curl_headers);
+    curl_easy_setopt(curl_, CURLOPT_URL, url.c_str());
+    std::stringstream data;
+    curl_easy_setopt(curl_, CURLOPT_WRITEFUNCTION, file_write_callback);
+    curl_easy_setopt(curl_, CURLOPT_WRITEDATA, &data);
+    char error_buf[CURL_ERROR_SIZE];
+    curl_easy_setopt(curl_, CURLOPT_ERRORBUFFER, error_buf);
+    curl_easy_setopt(curl_, CURLOPT_VERBOSE, 1L);
+    CURLcode res = curl_easy_perform(curl_);
+    if (curl_headers) {
+      curl_slist_free_all(curl_headers);
+    }
+    if (res != CURLE_OK) {
+      LOG(ERROR) << "curl_easy_perform() failed. "
+                 << "Code was \"" << res << "\". "
+                 << "Strerror was \"" << curl_easy_strerror(res) << "\". "
+                 << "Error buffer was \"" << error_buf << "\".";
+      return {"", -1};
+    }
+    long http_code = 0;
+    curl_easy_getinfo(curl_, CURLINFO_RESPONSE_CODE, &http_code);
+    return {data.str(), http_code};
+  }
+
+  CurlResponse<Json::Value> DownloadToJson(
+      const std::string& url, const std::vector<std::string>& headers) {
+    CurlResponse<std::string> response = DownloadToString(url, headers);
+    const std::string& contents = response.data;
+    Json::CharReaderBuilder builder;
+    std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
+    Json::Value json;
+    std::string errorMessage;
+    if (!reader->parse(&*contents.begin(), &*contents.end(), &json,
+                       &errorMessage)) {
+      LOG(ERROR) << "Could not parse json: " << errorMessage;
+      json["error"] = "Failed to parse json.";
+      json["response"] = contents;
+    }
+    return {json, response.http_code};
+  }
+
+  std::string UrlEscape(const std::string& text) override {
+    char* escaped_str = curl_easy_escape(curl_, text.c_str(), text.size());
+    std::string ret{escaped_str};
+    curl_free(escaped_str);
+    return ret;
+  }
+
+ private:
+  CURL* curl_;
+  std::mutex mutex_;
+};
+
+class CurlServerErrorRetryingWrapper : public CurlWrapper {
+ public:
+  CurlServerErrorRetryingWrapper(CurlWrapper& inner, int retry_attempts,
+                                 std::chrono::milliseconds retry_delay)
+      : inner_curl_(inner),
+        retry_attempts_(retry_attempts),
+        retry_delay_(retry_delay) {}
+
+  CurlResponse<std::string> DownloadToFile(
+      const std::string& url, const std::string& path,
+      const std::vector<std::string>& headers) {
+    return RetryImpl<std::string>(
+        [&, this]() { return inner_curl_.DownloadToFile(url, path, headers); });
+  }
+
+  CurlResponse<std::string> DownloadToString(
+      const std::string& url, const std::vector<std::string>& headers) {
+    return RetryImpl<std::string>(
+        [&, this]() { return inner_curl_.DownloadToString(url, headers); });
+  }
+
+  CurlResponse<Json::Value> DownloadToJson(
+      const std::string& url, const std::vector<std::string>& headers) {
+    return RetryImpl<Json::Value>(
+        [&, this]() { return inner_curl_.DownloadToJson(url, headers); });
+  }
+
+  std::string UrlEscape(const std::string& text) override {
+    return inner_curl_.UrlEscape(text);
+  }
+
+ private:
+  template <typename T>
+  CurlResponse<T> RetryImpl(std::function<CurlResponse<T>()> attempt_fn) {
+    CurlResponse<T> response;
+    for (int attempt = 0; attempt != retry_attempts_; ++attempt) {
+      if (attempt != 0) {
+        std::this_thread::sleep_for(retry_delay_);
+      }
+      response = attempt_fn();
+      if (!response.HttpServerError()) {
+        return response;
+      }
+    }
+    return response;
+  }
+
+ private:
+  CurlWrapper& inner_curl_;
+  int retry_attempts_;
+  std::chrono::milliseconds retry_delay_;
+};
+
+}  // namespace
+
+/* static */ std::unique_ptr<CurlWrapper> CurlWrapper::Create() {
+  return std::unique_ptr<CurlWrapper>(new CurlWrapperImpl());
 }
 
-CurlWrapper::~CurlWrapper() {
-  curl_easy_cleanup(curl);
+/* static */ std::unique_ptr<CurlWrapper> CurlWrapper::WithServerErrorRetry(
+    CurlWrapper& inner, int retry_attempts,
+    std::chrono::milliseconds retry_delay) {
+  return std::unique_ptr<CurlWrapper>(
+      new CurlServerErrorRetryingWrapper(inner, retry_attempts, retry_delay));
 }
 
-bool CurlWrapper::DownloadToFile(const std::string& url, const std::string& path) {
-  return CurlWrapper::DownloadToFile(url, path, {});
-}
-
-bool CurlWrapper::DownloadToFile(const std::string& url, const std::string& path,
-                                 const std::vector<std::string>& headers) {
-  LOG(INFO) << "Attempting to save \"" << url << "\" to \"" << path << "\"";
-  if (!curl) {
-    LOG(ERROR) << "curl was not initialized\n";
-    return false;
-  }
-  curl_slist* curl_headers = build_slist(headers);
-  curl_easy_reset(curl);
-  curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/ssl/certs/ca-certificates.crt");
-  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, curl_headers);
-  curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
-  char error_buf[CURL_ERROR_SIZE];
-  curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buf);
-  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
-  FILE* file = fopen(path.c_str(), "w");
-  if (!file) {
-    LOG(ERROR) << "could not open file " << path;
-    return false;
-  }
-  curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*) file);
-  CURLcode res = curl_easy_perform(curl);
-  if (curl_headers) {
-    curl_slist_free_all(curl_headers);
-  }
-  fclose(file);
-  if (res != CURLE_OK) {
-    LOG(ERROR) << "curl_easy_perform() failed. "
-        << "Code was \"" << res << "\". "
-        << "Strerror was \"" << curl_easy_strerror(res) << "\". "
-        << "Error buffer was \"" << error_buf << "\".";
-    return false;
-  }
-  return true;
-}
-
-std::string CurlWrapper::DownloadToString(const std::string& url) {
-  return DownloadToString(url, {});
-}
-
-std::string CurlWrapper::DownloadToString(const std::string& url,
-                                          const std::vector<std::string>& headers) {
-  LOG(INFO) << "Attempting to download \"" << url << "\"";
-  if (!curl) {
-    LOG(ERROR) << "curl was not initialized\n";
-    return "";
-  }
-  curl_slist* curl_headers = build_slist(headers);
-  curl_easy_reset(curl);
-  curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/ssl/certs/ca-certificates.crt");
-  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, curl_headers);
-  curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
-  std::stringstream data;
-  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, file_write_callback);
-  curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
-  char error_buf[CURL_ERROR_SIZE];
-  curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buf);
-  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
-  CURLcode res = curl_easy_perform(curl);
-  if (curl_headers) {
-    curl_slist_free_all(curl_headers);
-  }
-  if (res != CURLE_OK) {
-    LOG(ERROR) << "curl_easy_perform() failed. "
-        << "Code was \"" << res << "\". "
-        << "Strerror was \"" << curl_easy_strerror(res) << "\". "
-        << "Error buffer was \"" << error_buf << "\".";
-    return "";
-  }
-  return data.str();
-}
-
-Json::Value CurlWrapper::DownloadToJson(const std::string& url) {
-  return DownloadToJson(url, {});
-}
-
-Json::Value CurlWrapper::DownloadToJson(const std::string& url,
-                                        const std::vector<std::string>& headers) {
-  std::string contents = DownloadToString(url, headers);
-  Json::CharReaderBuilder builder;
-  std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
-  Json::Value json;
-  std::string errorMessage;
-  if (!reader->parse(&*contents.begin(), &*contents.end(), &json, &errorMessage)) {
-    LOG(ERROR) << "Could not parse json: " << errorMessage;
-    json["error"] = "Failed to parse json.";
-    json["response"] = contents;
-  }
-  return json;
-}
-
+CurlWrapper::~CurlWrapper() = default;
 }
diff --git a/host/commands/fetcher/curl_wrapper.h b/host/commands/fetcher/curl_wrapper.h
index 6d3a2cb..6262a0a 100644
--- a/host/commands/fetcher/curl_wrapper.h
+++ b/host/commands/fetcher/curl_wrapper.h
@@ -15,31 +15,42 @@
 
 #pragma once
 
+#include <chrono>
+#include <mutex>
 #include <string>
 
-#include <curl/curl.h>
 #include <json/json.h>
 
 namespace cuttlefish {
 
-class CurlWrapper {
-  CURL* curl;
-public:
-  CurlWrapper();
-  ~CurlWrapper();
-  CurlWrapper(const CurlWrapper&) = delete;
-  CurlWrapper& operator=(const CurlWrapper*) = delete;
-  CurlWrapper(CurlWrapper&&) = default;
+template <typename T>
+struct CurlResponse {
+  bool HttpInfo() { return http_code >= 100 && http_code <= 199; }
+  bool HttpSuccess() { return http_code >= 200 && http_code <= 299; }
+  bool HttpRedirect() { return http_code >= 300 && http_code <= 399; }
+  bool HttpClientError() { return http_code >= 400 && http_code <= 499; }
+  bool HttpServerError() { return http_code >= 500 && http_code <= 599; }
 
-  bool DownloadToFile(const std::string& url, const std::string& path);
-  bool DownloadToFile(const std::string& url, const std::string& path,
-                      const std::vector<std::string>& headers);
-  std::string DownloadToString(const std::string& url);
-  std::string DownloadToString(const std::string& url,
-                               const std::vector<std::string>& headers);
-  Json::Value DownloadToJson(const std::string& url);
-  Json::Value DownloadToJson(const std::string& url,
-                             const std::vector<std::string>& headers);
+  T data;
+  long http_code;
+};
+
+class CurlWrapper {
+ public:
+  static std::unique_ptr<CurlWrapper> Create();
+  static std::unique_ptr<CurlWrapper> WithServerErrorRetry(
+      CurlWrapper&, int retry_attempts, std::chrono::milliseconds retry_delay);
+  virtual ~CurlWrapper();
+
+  virtual CurlResponse<std::string> DownloadToFile(
+      const std::string& url, const std::string& path,
+      const std::vector<std::string>& headers = {}) = 0;
+  virtual CurlResponse<std::string> DownloadToString(
+      const std::string& url, const std::vector<std::string>& headers = {}) = 0;
+  virtual CurlResponse<Json::Value> DownloadToJson(
+      const std::string& url, const std::vector<std::string>& headers = {}) = 0;
+
+  virtual std::string UrlEscape(const std::string&) = 0;
 };
 
 }
diff --git a/host/commands/fetcher/fetch_cvd.cc b/host/commands/fetcher/fetch_cvd.cc
index b84fbba..99a6617 100644
--- a/host/commands/fetcher/fetch_cvd.cc
+++ b/host/commands/fetcher/fetch_cvd.cc
@@ -17,6 +17,7 @@
 #include <iterator>
 #include <string>
 
+#include <curl/curl.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
@@ -78,9 +79,9 @@
     const std::vector<Artifact>& artifacts) {
   std::string product = std::visit([](auto&& arg) { return arg.product; }, build);
   auto id = std::visit([](auto&& arg) { return arg.id; }, build);
-  auto match = product + "-" + name + "-" + id;
+  auto match = product + "-" + name + "-" + id + ".zip";
   for (const auto& artifact : artifacts) {
-    if (artifact.Name().find(match) != std::string::npos) {
+    if (artifact.Name() == match) {
       return artifact.Name();
     }
   }
@@ -268,13 +269,16 @@
 
   curl_global_init(CURL_GLOBAL_DEFAULT);
   {
+    auto curl = CurlWrapper::Create();
+    auto retrying_curl = CurlWrapper::WithServerErrorRetry(
+        *curl, 10, std::chrono::milliseconds(5000));
     std::unique_ptr<CredentialSource> credential_source;
     if (FLAGS_credential_source == "gce") {
-      credential_source = GceMetadataCredentialSource::make();
+      credential_source = GceMetadataCredentialSource::make(*retrying_curl);
     } else if (FLAGS_credential_source != "") {
       credential_source = FixedCredentialSource::make(FLAGS_credential_source);
     }
-    BuildApi build_api(std::move(credential_source));
+    BuildApi build_api(*retrying_curl, credential_source.get());
 
     auto default_build = ArgumentToBuild(&build_api, FLAGS_default_build,
                                          DEFAULT_BUILD_TARGET,
@@ -293,6 +297,9 @@
       if (FLAGS_otatools_build != "") {
         ota_build = ArgumentToBuild(&build_api, FLAGS_otatools_build,
                                     DEFAULT_BUILD_TARGET, retry_period);
+      } else if (FLAGS_system_build != "") {
+        ota_build = ArgumentToBuild(&build_api, FLAGS_system_build,
+                                    DEFAULT_BUILD_TARGET, retry_period);
       }
       std::vector<std::string> ota_tools_files =
           download_ota_tools(&build_api, ota_build, target_dir);
diff --git a/host/commands/gnss_grpc_proxy/Android.bp b/host/commands/gnss_grpc_proxy/Android.bp
index e85a919..fcd82f4 100644
--- a/host/commands/gnss_grpc_proxy/Android.bp
+++ b/host/commands/gnss_grpc_proxy/Android.bp
@@ -33,6 +33,7 @@
         "GnssGrpcProxyStub_cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
diff --git a/host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp b/host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp
index ff8e54e..c5ecc44 100644
--- a/host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp
+++ b/host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp
@@ -14,8 +14,10 @@
  * limitations under the License.
  */
 
-#include <iostream>
+#include <chrono>
+#include <ctime>
 #include <fstream>
+#include <iostream>
 #include <memory>
 #include <string>
 
@@ -28,11 +30,13 @@
 #include <chrono>
 #include <deque>
 #include <mutex>
+#include <sstream>
 #include <thread>
 #include <vector>
 
-#include <gflags/gflags.h>
 #include <android-base/logging.h>
+#include <android-base/strings.h>
+#include <gflags/gflags.h>
 
 #include <common/libs/fs/shared_fd.h>
 #include <common/libs/fs/shared_buf.h>
@@ -63,6 +67,9 @@
               "NMEA file path for gnss grpc");
 
 constexpr char CMD_GET_LOCATION[] = "CMD_GET_LOCATION";
+constexpr char CMD_GET_RAWMEASUREMENT[] = "CMD_GET_RAWMEASUREMENT";
+constexpr char END_OF_MSG_MARK[] = "\n\n\n\n";
+
 constexpr uint32_t GNSS_SERIAL_BUFFER_SIZE = 4096;
 // Logic and data behind the server's behavior.
 class GnssGrpcProxyServiceImpl final : public GnssGrpcProxy::Service {
@@ -73,7 +80,6 @@
     Status SendNmea(ServerContext* context, const SendNmeaRequest* request,
                     SendNmeaReply* reply) override {
       reply->set_reply("Received nmea record.");
-
       auto buffer = request->nmea();
       std::lock_guard<std::mutex> lock(cached_nmea_mutex);
       cached_nmea = request->nmea();
@@ -81,24 +87,54 @@
     }
 
     void sendToSerial() {
-      LOG(DEBUG) << "Send NMEA to serial:" << cached_nmea;
       std::lock_guard<std::mutex> lock(cached_nmea_mutex);
-      ssize_t bytes_written = cuttlefish::WriteAll(gnss_in_, cached_nmea);
+      if (!isNMEA(cached_nmea)) {
+        return;
+      }
+      ssize_t bytes_written =
+          cuttlefish::WriteAll(gnss_in_, cached_nmea + END_OF_MSG_MARK);
       if (bytes_written < 0) {
           LOG(ERROR) << "Error writing to fd: " << gnss_in_->StrError();
       }
     }
 
+    void sendGnssRawToSerial() {
+      std::lock_guard<std::mutex> lock(cached_gnss_raw_mutex);
+      if (!isGnssRawMeasurement(cached_gnss_raw)) {
+        return;
+      }
+      if (previous_cached_gnss_raw == cached_gnss_raw) {
+        // Skip for same record
+        return;
+      } else {
+        // Update cached data
+        LOG(DEBUG) << "Skip same record";
+        previous_cached_gnss_raw = cached_gnss_raw;
+      }
+      ssize_t bytes_written =
+          cuttlefish::WriteAll(gnss_in_, cached_gnss_raw + END_OF_MSG_MARK);
+      LOG(DEBUG) << "Send Gnss Raw to serial: bytes_written: " << bytes_written;
+      if (bytes_written < 0) {
+        LOG(ERROR) << "Error writing to fd: " << gnss_in_->StrError();
+      }
+    }
+
     void StartServer() {
       // Create a new thread to handle writes to the gnss and to the any client
       // connected to the socket.
       read_thread_ = std::thread([this]() { ReadLoop(); });
     }
 
-    void StartReadFileThread() {
-      // Create a new thread to handle writes to the gnss and to the any client
-      // connected to the socket.
-      file_read_thread_ = std::thread([this]() { ReadNmeaFromLocalFile(); });
+    void StartReadNmeaFileThread() {
+      // Create a new thread to read nmea data.
+      nmea_file_read_thread_ =
+          std::thread([this]() { ReadNmeaFromLocalFile(); });
+    }
+
+    void StartReadGnssRawMeasurementFileThread() {
+      // Create a new thread to read raw measurement data.
+      measurement_file_read_thread_ =
+          std::thread([this]() { ReadGnssRawMeasurement(); });
     }
 
     void ReadNmeaFromLocalFile() {
@@ -134,6 +170,70 @@
         return;
       }
     }
+
+    void ReadGnssRawMeasurement() {
+      std::ifstream file(FLAGS_gnss_file_path);
+
+      if (file.is_open()) {
+        std::string line;
+        std::string cached_line = "";
+        std::string header = "";
+
+        while (!cached_line.empty() || std::getline(file, line)) {
+          if (!cached_line.empty()) {
+            line = cached_line;
+            cached_line = "";
+          }
+
+          // Get data header.
+          if (header.empty() && android::base::StartsWith(line, "# Raw")) {
+            header = line;
+            LOG(DEBUG) << "Header: " << header;
+            continue;
+          }
+
+          // Ignore not raw measurement data.
+          if (!android::base::StartsWith(line, "Raw")) {
+            continue;
+          }
+
+          {
+            std::lock_guard<std::mutex> lock(cached_gnss_raw_mutex);
+            cached_gnss_raw = header + "\n" + line;
+
+            std::string new_line = "";
+            while (std::getline(file, new_line)) {
+              // Group raw data by TimeNanos.
+              if (getTimeNanosFromLine(new_line) ==
+                  getTimeNanosFromLine(line)) {
+                cached_gnss_raw += "\n" + new_line;
+              } else {
+                cached_line = new_line;
+                break;
+              }
+            }
+          }
+          std::this_thread::sleep_for(std::chrono::milliseconds(1000));
+        }
+        file.close();
+      } else {
+        LOG(ERROR) << "Can not open GNSS Raw file: " << FLAGS_gnss_file_path;
+        return;
+      }
+    }
+
+    ~GnssGrpcProxyServiceImpl() {
+      if (nmea_file_read_thread_.joinable()) {
+        nmea_file_read_thread_.join();
+      }
+      if (measurement_file_read_thread_.joinable()) {
+        measurement_file_read_thread_.join();
+      }
+      if (read_thread_.joinable()) {
+        read_thread_.join();
+      }
+    }
+
   private:
     [[noreturn]] void ReadLoop() {
       cuttlefish::SharedFDSet read_set;
@@ -159,6 +259,12 @@
             gnss_cmd_str = "";
             total_read = 0;
           }
+
+          if (gnss_cmd_str.find(CMD_GET_RAWMEASUREMENT) != std::string::npos) {
+            sendGnssRawToSerial();
+            gnss_cmd_str = "";
+            total_read = 0;
+          }
         } else {
           if (gnss_out_->GetErrno() == EAGAIN|| gnss_out_->GetErrno() == EWOULDBLOCK) {
             std::this_thread::sleep_for(std::chrono::milliseconds(100));
@@ -171,12 +277,35 @@
       }
     }
 
+    std::string getTimeNanosFromLine(const std::string& line) {
+      // TimeNanos is in column #3.
+      std::vector<std::string> vals = android::base::Split(line, ",");
+      return vals.size() >= 3 ? vals[2] : "-1";
+    }
+
+    bool isGnssRawMeasurement(const std::string& inputStr) {
+      // TODO: add more logic check to by pass invalid data.
+      return !inputStr.empty() && android::base::StartsWith(inputStr, "# Raw");
+    }
+
+    bool isNMEA(const std::string& inputStr) {
+      return !inputStr.empty() &&
+             (android::base::StartsWith(inputStr, "$GPRMC") ||
+              android::base::StartsWith(inputStr, "$GPRMA"));
+    }
+
     cuttlefish::SharedFD gnss_in_;
     cuttlefish::SharedFD gnss_out_;
     std::thread read_thread_;
-    std::thread file_read_thread_;
+    std::thread nmea_file_read_thread_;
+    std::thread measurement_file_read_thread_;
+
     std::string cached_nmea;
     std::mutex cached_nmea_mutex;
+
+    std::string cached_gnss_raw;
+    std::string previous_cached_gnss_raw;
+    std::mutex cached_gnss_raw_mutex;
 };
 
 void RunServer() {
@@ -200,7 +329,10 @@
   GnssGrpcProxyServiceImpl service(gnss_in, gnss_out);
   service.StartServer();
   if (!FLAGS_gnss_file_path.empty()) {
-    service.StartReadFileThread();
+    // TODO: On-demand start the read file threads according to data type.
+    service.StartReadNmeaFileThread();
+    service.StartReadGnssRawMeasurementFileThread();
+
     // In the local mode, we are not start a grpc server, use a infinite loop instead
     while(true) {
       std::this_thread::sleep_for(std::chrono::milliseconds(2000));
@@ -232,4 +364,4 @@
   RunServer();
 
   return 0;
-}
+}
\ No newline at end of file
diff --git a/host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto b/host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto
index 2a12d2d..4bfc854 100644
--- a/host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto
+++ b/host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto
@@ -2,6 +2,9 @@
 
 package gnss_grpc_proxy;
 
+option java_multiple_files = true;
+option java_package = "com.android.cuttlefish.gnssproxy.proto";
+
 // The greeting service definition.
 service GnssGrpcProxy {
   // Sends NmeaRequest
diff --git a/host/commands/stop_cvd/Android.bp b/host/commands/health/Android.bp
similarity index 87%
copy from host/commands/stop_cvd/Android.bp
copy to host/commands/health/Android.bp
index a670a25..3681332 100644
--- a/host/commands/stop_cvd/Android.bp
+++ b/host/commands/health/Android.bp
@@ -1,5 +1,5 @@
 //
-// Copyright (C) 2018 The Android Open Source Project
+// Copyright (C) 2021 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -18,15 +18,16 @@
 }
 
 cc_binary {
-    name: "stop_cvd",
+    name: "health",
     srcs: [
-        "main.cc",
+        "health.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
-        "libcuttlefish_allocd_utils",
+        "libfruit",
         "libjsoncpp",
     ],
     static_libs: [
diff --git a/host/commands/health/health.cpp b/host/commands/health/health.cpp
new file mode 100644
index 0000000..37cce86
--- /dev/null
+++ b/host/commands/health/health.cpp
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <stdlib.h>
+#include <iostream>
+//
+#include <android-base/logging.h>
+#include <gflags/gflags.h>
+//
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/vm_manager/vm_manager.h"
+
+std::string GetControlSocketPath(const cuttlefish::CuttlefishConfig& config) {
+  return config.ForDefaultInstance().PerInstanceInternalPath(
+      "crosvm_control.sock");
+}
+
+std::string USAGE_MESSAGE =
+    "<key> [value]\n"
+    "Excluding the value will enumerate the possible values to set\n"
+    "\n"
+    "\"status [value]\" - battery status: "
+    "unknown/charging/discharging/notcharging/full\n"
+    "\"health [value]\" - battery health\n"
+    "\"present [value]\" - battery present: 1 or 0\n"
+    "\"capacity [value]\" - battery capacity: 0 to 100\n"
+    "\"aconline [value]\" - battery ac online: 1 or 0\n";
+
+int status() {
+  std::cout
+      << "health status [value]\n"
+         "\"value\" - unknown, charging, discharging, notcharging, full\n";
+  return 0;
+}
+
+int health() {
+  std::cout << "health health [value]\n"
+               "\"value\" - unknown, good, overheat, dead, overvoltage, "
+               "unexpectedfailure,\n"
+               "          cold, watchdogtimerexpire, safetytimerexpire, "
+               "overcurrent\n";
+  return 0;
+}
+
+int present() {
+  std::cout << "health present [value]\n"
+               "\"value\" - 1, 0\n";
+  return 0;
+}
+
+int capacity() {
+  std::cout << "health capacity [value]\n"
+               "\"value\" - 0 to 100\n";
+  return 0;
+}
+
+int aconline() {
+  std::cout << "health aconline [value]\n"
+               "\"value\" - 1, 0\n";
+  return 0;
+}
+
+int usage() {
+  std::cout << "health " << USAGE_MESSAGE;
+  return 1;
+}
+
+int main(int argc, char** argv) {
+  ::android::base::InitLogging(argv, android::base::StderrLogger);
+  gflags::SetUsageMessage(USAGE_MESSAGE);
+
+  auto config = cuttlefish::CuttlefishConfig::Get();
+  if (!config) {
+    LOG(ERROR) << "Failed to obtain config object";
+    return 1;
+  }
+
+  if (argc != 2 && argc != 3) {
+    return usage();
+  }
+
+  std::string key = argv[1];
+  std::string value = "";
+  if (argc == 3) {
+    value = argv[2];
+  }
+
+  if (argc == 2 || value == "--help" || value == "-h" || value == "help") {
+    if (key == "status") {
+      return status();
+    } else if (key == "health") {
+      return health();
+    } else if (key == "present") {
+      return present();
+    } else if (key == "capacity") {
+      return capacity();
+    } else if (key == "aconline") {
+      return aconline();
+    } else {
+      return usage();
+    }
+  }
+
+  cuttlefish::Command command(config->crosvm_binary());
+  command.AddParameter("battery");
+  command.AddParameter("goldfish");
+  command.AddParameter(key);
+  command.AddParameter(value);
+  command.AddParameter(GetControlSocketPath(*config));
+
+  std::string output, error;
+  auto ret = RunWithManagedStdio(std::move(command), NULL, &output, &error);
+  if (ret != 0) {
+    LOG(ERROR) << "goldfish battery returned: " << ret << "\n" << output << "\n" << error;
+  }
+  return ret;
+}
diff --git a/host/commands/cvd_host_bugreport/Android.bp b/host/commands/host_bugreport/Android.bp
similarity index 89%
rename from host/commands/cvd_host_bugreport/Android.bp
rename to host/commands/host_bugreport/Android.bp
index 4f6aeda..76f184b 100644
--- a/host/commands/cvd_host_bugreport/Android.bp
+++ b/host/commands/host_bugreport/Android.bp
@@ -18,14 +18,17 @@
 }
 
 cc_binary {
-    name: "cvd_host_bugreport",
+    name: "cvd_internal_host_bugreport",
+    symlinks: ["cvd_host_bugreport"],
     srcs: [
         "main.cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
+        "libfruit",
         "libjsoncpp",
         "libziparchive",
     ],
diff --git a/host/commands/cvd_host_bugreport/main.cc b/host/commands/host_bugreport/main.cc
similarity index 100%
rename from host/commands/cvd_host_bugreport/main.cc
rename to host/commands/host_bugreport/main.cc
diff --git a/host/commands/kernel_log_monitor/Android.bp b/host/commands/kernel_log_monitor/Android.bp
index 02e2be8..7421115 100644
--- a/host/commands/kernel_log_monitor/Android.bp
+++ b/host/commands/kernel_log_monitor/Android.bp
@@ -24,6 +24,7 @@
         "kernel_log_server.cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libcuttlefish_kernel_log_monitor_utils",
diff --git a/host/commands/kernel_log_monitor/kernel_log_server.cc b/host/commands/kernel_log_monitor/kernel_log_server.cc
index 03fc90d..249ad3c 100644
--- a/host/commands/kernel_log_monitor/kernel_log_server.cc
+++ b/host/commands/kernel_log_monitor/kernel_log_server.cc
@@ -16,7 +16,8 @@
 
 #include "host/commands/kernel_log_monitor/kernel_log_server.h"
 
-#include <map>
+#include <string>
+#include <tuple>
 #include <utility>
 
 #include <android-base/logging.h>
@@ -25,29 +26,44 @@
 #include "common/libs/fs/shared_select.h"
 #include "host/libs/config/cuttlefish_config.h"
 
-using cuttlefish::SharedFD;
-
 namespace {
-static const std::map<std::string, std::string> kInformationalPatterns = {
+
+using cuttlefish::SharedFD;
+using monitor::Event;
+
+constexpr struct {
+  std::string_view match;   // Substring to match in the kernel logs
+  std::string_view prefix;  // Prefix value to output, describing the entry
+} kInformationalPatterns[] = {
     {"U-Boot ", "GUEST_UBOOT_VERSION: "},
     {"] Linux version ", "GUEST_KERNEL_VERSION: "},
     {"GUEST_BUILD_FINGERPRINT: ", "GUEST_BUILD_FINGERPRINT: "},
 };
 
-static const std::map<std::string, monitor::Event> kStageToEventMap = {
-    {cuttlefish::kBootStartedMessage, monitor::Event::BootStarted},
-    {cuttlefish::kBootCompletedMessage, monitor::Event::BootCompleted},
-    {cuttlefish::kBootFailedMessage, monitor::Event::BootFailed},
-    {cuttlefish::kMobileNetworkConnectedMessage,
-     monitor::Event::MobileNetworkConnected},
-    {cuttlefish::kWifiConnectedMessage, monitor::Event::WifiNetworkConnected},
-    {cuttlefish::kEthernetConnectedMessage,
-     monitor::Event::EthernetNetworkConnected},
+enum EventFormat {
+  kBare,          // Just an event, no extra data
+  kKeyValuePair,  // <stage> <key>=<value>
+};
+
+constexpr struct {
+  std::string_view stage;  // substring in the log identifying the stage
+  Event event;             // emitted when the stage is encountered
+  EventFormat format;      // how the log message is formatted
+} kStageTable[] = {
+    {cuttlefish::kBootStartedMessage, Event::BootStarted, kBare},
+    {cuttlefish::kBootCompletedMessage, Event::BootCompleted, kBare},
+    {cuttlefish::kBootFailedMessage, Event::BootFailed, kKeyValuePair},
+    {cuttlefish::kMobileNetworkConnectedMessage, Event::MobileNetworkConnected,
+     kBare},
+    {cuttlefish::kWifiConnectedMessage, Event::WifiNetworkConnected, kBare},
+    {cuttlefish::kEthernetConnectedMessage, Event::EthernetNetworkConnected,
+     kBare},
     // TODO(b/131864854): Replace this with a string less likely to change
-    {"init: starting service 'adbd'...", monitor::Event::AdbdStarted},
-    {cuttlefish::kScreenChangedMessage, monitor::Event::ScreenChanged},
+    {"init: starting service 'adbd'...", Event::AdbdStarted, kBare},
+    {cuttlefish::kScreenChangedMessage, Event::ScreenChanged, kKeyValuePair},
+    {cuttlefish::kKernelLoadedMessage, Event::KernelLoaded, kBare},
     {cuttlefish::kDisplayPowerModeChangedMessage,
-     monitor::Event::DisplayPowerModeChanged},
+     monitor::Event::DisplayPowerModeChanged, kKeyValuePair},
 };
 
 void ProcessSubscriptions(
@@ -112,17 +128,13 @@
   // Detect VIRTUAL_DEVICE_BOOT_*
   for (ssize_t i=0; i<ret; i++) {
     if ('\n' == buf[i]) {
-      for (auto& info_kv : kInformationalPatterns) {
-        auto& match = info_kv.first;
-        auto& prefix = info_kv.second;
+      for (auto& [match, prefix] : kInformationalPatterns) {
         auto pos = line_.find(match);
         if (std::string::npos != pos) {
           LOG(INFO) << prefix << line_.substr(pos + match.size());
         }
       }
-      for (auto& stage_kv : kStageToEventMap) {
-        auto& stage = stage_kv.first;
-        auto event = stage_kv.second;
+      for (const auto& [stage, event, format] : kStageTable) {
         auto pos = line_.find(stage);
         if (std::string::npos != pos) {
           // Log the stage
@@ -131,23 +143,26 @@
           Json::Value message;
           message["event"] = event;
           Json::Value metadata;
-          // Expect space-separated key=value pairs in the log message.
-          const auto& fields = android::base::Split(
-              line_.substr(pos + stage.size()), " ");
-          for (std::string field : fields) {
-            field = android::base::Trim(field);
-            if (field.empty()) {
-              // Expected; android::base::Split() always returns at least
-              // one (possibly empty) string.
-              LOG(DEBUG) << "Empty field for line: " << line_;
-              continue;
+
+          if (format == kKeyValuePair) {
+            // Expect space-separated key=value pairs in the log message.
+            const auto& fields =
+                android::base::Split(line_.substr(pos + stage.size()), " ");
+            for (std::string field : fields) {
+              field = android::base::Trim(field);
+              if (field.empty()) {
+                // Expected; android::base::Split() always returns at least
+                // one (possibly empty) string.
+                LOG(DEBUG) << "Empty field for line: " << line_;
+                continue;
+              }
+              const auto& keyvalue = android::base::Split(field, "=");
+              if (keyvalue.size() != 2) {
+                LOG(WARNING) << "Field is not in key=value format: " << field;
+                continue;
+              }
+              metadata[keyvalue[0]] = keyvalue[1];
             }
-            const auto& keyvalue = android::base::Split(field, "=");
-            if (keyvalue.size() != 2) {
-              LOG(WARNING) << "Field is not in key=value format: " << field;
-              continue;
-            }
-            metadata[keyvalue[0]] = keyvalue[1];
           }
           message["metadata"] = metadata;
           ProcessSubscriptions(message, &subscribers_);
@@ -157,7 +172,7 @@
           if (deprecated_boot_completed_) {
             // Write to host kernel log
             FILE* log = popen("/usr/bin/sudo /usr/bin/tee /dev/kmsg", "w");
-            fprintf(log, "%s\n", stage.c_str());
+            fprintf(log, "%s\n", std::string(stage).c_str());
             fclose(log);
           }
         }
diff --git a/host/commands/kernel_log_monitor/kernel_log_server.h b/host/commands/kernel_log_monitor/kernel_log_server.h
index dab675d..e6e0270 100644
--- a/host/commands/kernel_log_monitor/kernel_log_server.h
+++ b/host/commands/kernel_log_monitor/kernel_log_server.h
@@ -37,6 +37,9 @@
   AdbdStarted = 5,
   ScreenChanged = 6,
   EthernetNetworkConnected = 7,
+  KernelLoaded = 8,  // BootStarted actually comes quite late in the boot.
+                     // KernelLoaded is the earliest possible indicator
+                     // that we're booting a device.
   DisplayPowerModeChanged = 9,
 };
 
diff --git a/host/commands/kernel_log_monitor/main.cc b/host/commands/kernel_log_monitor/main.cc
index 3f708b7..c7269b0 100644
--- a/host/commands/kernel_log_monitor/main.cc
+++ b/host/commands/kernel_log_monitor/main.cc
@@ -94,7 +94,7 @@
     return 2;
   }
 
-  monitor::KernelLogServer klog{pipe, instance.PerInstancePath("kernel.log"),
+  monitor::KernelLogServer klog{pipe, instance.PerInstanceLogPath("kernel.log"),
                                 config->deprecated_boot_completed()};
 
   for (auto subscriber_fd: subscriber_fds) {
diff --git a/host/commands/log_tee/Android.bp b/host/commands/log_tee/Android.bp
index 49b3e69..ed1f652 100644
--- a/host/commands/log_tee/Android.bp
+++ b/host/commands/log_tee/Android.bp
@@ -23,9 +23,11 @@
         "log_tee.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libbase",
+        "libfruit",
         "libjsoncpp",
         "libnl",
     ],
diff --git a/host/commands/log_tee/log_tee.cpp b/host/commands/log_tee/log_tee.cpp
index 7021a99..b63c2ac 100644
--- a/host/commands/log_tee/log_tee.cpp
+++ b/host/commands/log_tee/log_tee.cpp
@@ -64,7 +64,7 @@
     // There is no guarantee of success all the time since log line boundaries
     // could be out sync with the reads, but that's ok.
     if (android::base::StartsWith(trimmed, "[INFO")) {
-      LOG(INFO) << trimmed;
+      LOG(DEBUG) << trimmed;
     } else if (android::base::StartsWith(trimmed, "[ERROR")) {
       LOG(ERROR) << trimmed;
     } else if (android::base::StartsWith(trimmed, "[WARNING")) {
diff --git a/host/commands/logcat_receiver/Android.bp b/host/commands/logcat_receiver/Android.bp
index 305ab7f..63f5b1b 100644
--- a/host/commands/logcat_receiver/Android.bp
+++ b/host/commands/logcat_receiver/Android.bp
@@ -23,6 +23,7 @@
         "main.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libjsoncpp",
diff --git a/host/commands/metrics/Android.bp b/host/commands/metrics/Android.bp
index 67eb3b0..c454b53 100644
--- a/host/commands/metrics/Android.bp
+++ b/host/commands/metrics/Android.bp
@@ -23,6 +23,7 @@
         "metrics.cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libbase",
diff --git a/host/commands/metrics/metrics.cc b/host/commands/metrics/metrics.cc
index 378155c..5fcf58e 100644
--- a/host/commands/metrics/metrics.cc
+++ b/host/commands/metrics/metrics.cc
@@ -32,7 +32,7 @@
   CHECK(config) << "Could not open cuttlefish config";
 
   auto instance = config->ForDefaultInstance();
-  auto metrics_log_path = instance.PerInstancePath("metrics.log");
+  auto metrics_log_path = instance.PerInstanceLogPath("metrics.log");
 
   if (config->run_as_daemon()) {
     android::base::SetLogger(
diff --git a/host/commands/mk_cdisk/mk_cdisk.cc b/host/commands/mk_cdisk/mk_cdisk.cc
deleted file mode 100644
index 028547c..0000000
--- a/host/commands/mk_cdisk/mk_cdisk.cc
+++ /dev/null
@@ -1,146 +0,0 @@
-//
-// Copyright (C) 2021 The Android Open Source Project
-//
-// 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.
-
-#include <fstream>
-#include <iostream>
-
-#include <android-base/file.h>
-#include <android-base/logging.h>
-#include <android-base/result.h>
-#include <json/json.h>
-
-#include "common/libs/utils/files.h"
-#include "host/libs/image_aggregator/image_aggregator.h"
-
-using android::base::ErrnoError;
-using android::base::Error;
-using android::base::Result;
-
-using cuttlefish::CreateCompositeDisk;
-using cuttlefish::FileExists;
-using cuttlefish::ImagePartition;
-using cuttlefish::kLinuxFilesystem;
-
-// Returns `append` is appended to the end of filename preserving the extension.
-std::string AppendFileName(const std::string& filename,
-                           const std::string& append) {
-  size_t pos = filename.find_last_of('.');
-  if (pos == std::string::npos) {
-    return filename + append;
-  } else {
-    return filename.substr(0, pos) + append + filename.substr(pos);
-  }
-}
-
-// config JSON schema:
-// {
-//   "partitions": [
-//     {
-//       "label": string,
-//       "path": string,
-//       "writable": bool, // optional. defaults to false.
-//     }
-//   ]
-// }
-
-Result<std::vector<ImagePartition>> LoadConfig(std::istream& in) {
-  std::vector<ImagePartition> partitions;
-
-  Json::CharReaderBuilder builder;
-  Json::Value root;
-  Json::String errs;
-  if (!parseFromStream(builder, in, &root, &errs)) {
-    return Error() << "bad config: " << errs;
-  }
-  for (const Json::Value& part : root["partitions"]) {
-    const std::string label = part["label"].asString();
-    const std::string path = part["path"].asString();
-    const bool writable =
-        part["writable"].asBool();  // default: false (if null)
-
-    if (!FileExists(path)) {
-      return Error() << "bad config: Can't find \'" << path << '\'';
-    }
-    partitions.push_back(
-        ImagePartition{label, path, kLinuxFilesystem, .read_only = !writable});
-  }
-
-  if (partitions.empty()) {
-    return Error() << "bad config: no partitions";
-  }
-  return partitions;
-}
-
-Result<std::vector<ImagePartition>> LoadConfig(const std::string& config_file) {
-  if (config_file == "-") {
-    return LoadConfig(std::cin);
-  } else {
-    std::ifstream in(config_file);
-    if (!in) {
-      return ErrnoError() << "Can't open file \'" << config_file << '\'';
-    }
-    return LoadConfig(in);
-  }
-}
-
-struct CompositeDiskArgs {
-  std::string config_file;
-  std::string output_file;
-};
-
-Result<CompositeDiskArgs> ParseCompositeDiskArgs(int argc, char** argv) {
-  if (argc != 3) {
-    std::cerr << fmt::format(
-        "Usage: {0} <config_file> <output_file>\n"
-        "   or  {0} - <output_file>  (read config from STDIN)\n",
-        argv[0]);
-    return Error() << "missing arguments.";
-  }
-  CompositeDiskArgs args{
-      .config_file = argv[1],
-      .output_file = argv[2],
-  };
-  return args;
-}
-
-Result<void> MakeCompositeDiskMain(int argc, char** argv) {
-  setenv("ANDROID_LOG_TAGS", "*:v", /* overwrite */ 0);
-  ::android::base::InitLogging(argv, android::base::StderrLogger);
-
-  auto args = ParseCompositeDiskArgs(argc, argv);
-  if (!args.ok()) {
-    return args.error();
-  }
-  auto partitions = LoadConfig(args->config_file);
-  if (!partitions.ok()) {
-    return partitions.error();
-  }
-
-  // We need two implicit output paths: GPT header/footer
-  // e.g. out.img will have out-header.img and out-footer.img
-  std::string gpt_header = AppendFileName(args->output_file, "-header");
-  std::string gpt_footer = AppendFileName(args->output_file, "-footer");
-  CreateCompositeDisk(*partitions, gpt_header, gpt_footer, args->output_file);
-  return {};
-}
-
-int main(int argc, char** argv) {
-  auto result = MakeCompositeDiskMain(argc, argv);
-  if (!result.ok()) {
-    LOG(ERROR) << result.error();
-    return EXIT_FAILURE;
-  }
-  return 0;
-}
diff --git a/host/commands/modem_simulator/Android.bp b/host/commands/modem_simulator/Android.bp
index c0d0371..c9a6bfb 100644
--- a/host/commands/modem_simulator/Android.bp
+++ b/host/commands/modem_simulator/Android.bp
@@ -38,6 +38,7 @@
         "nvram_config.cpp"
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libbase",
diff --git a/host/commands/modem_simulator/call_service.cpp b/host/commands/modem_simulator/call_service.cpp
index 678da4f..bfb17c6 100644
--- a/host/commands/modem_simulator/call_service.cpp
+++ b/host/commands/modem_simulator/call_service.cpp
@@ -194,7 +194,7 @@
       client.SendCommandResponse(kCmeErrorNoNetworkService);
       return;
     }
-    auto local_host_port = GetHostPort();
+    auto local_host_port = GetHostId();
     if (local_host_port == remote_port) {
       client.SendCommandResponse(kCmeErrorOperationNotAllowed);
       return;
@@ -219,11 +219,13 @@
     int index = last_active_call_index_++;
 
     auto call_token = std::make_pair(index, call_status.number);
-    call_status.timeout_serial = thread_looper_->PostWithDelay(
-        std::chrono::minutes(1),
-        makeSafeCallback<CallService>(this, [call_token](CallService* me) {
-          me->TimerWaitingRemoteCallResponse(call_token);
-        }));
+    call_status.timeout_serial = thread_looper_->Post(
+        makeSafeCallback<CallService>(this,
+                                      [call_token](CallService* me) {
+                                        me->TimerWaitingRemoteCallResponse(
+                                            call_token);
+                                      }),
+        std::chrono::minutes(1));
 
     active_calls_[index] = call_status;
   } else {
@@ -237,8 +239,9 @@
       in_emergency_mode_ = true;
       SendUnsolicitedCommand("+WSOS: 1");
     }
-    thread_looper_->PostWithDelay(std::chrono::seconds(1),
-        makeSafeCallback(this, &CallService::SimulatePendingCallsAnswered));
+    thread_looper_->Post(
+        makeSafeCallback(this, &CallService::SimulatePendingCallsAnswered),
+        std::chrono::seconds(1));
   }
 
   client.SendCommandResponse("OK");
@@ -249,11 +252,9 @@
                                          CallStatus::CallState state) {
   if (call.is_remote_call && call.remote_client != std::nullopt) {
     std::stringstream ss;
-    ss << "AT+REMOTECALL=" << state << ","
-                           << call.is_voice_mode << ","
-                           << call.is_multi_party << ",\""
-                           << GetHostPort() << "\","
-                           << call.is_international;
+    ss << "AT+REMOTECALL=" << state << "," << call.is_voice_mode << ","
+       << call.is_multi_party << ",\"" << GetHostId() << "\","
+       << call.is_international;
 
     SendCommandToRemote(*(call.remote_client), ss.str());
     if (state == CallStatus::CALL_STATE_HANGUP) {
diff --git a/host/commands/modem_simulator/cf_device_config.cpp b/host/commands/modem_simulator/cf_device_config.cpp
index 559e1f8..81c60e7 100644
--- a/host/commands/modem_simulator/cf_device_config.cpp
+++ b/host/commands/modem_simulator/cf_device_config.cpp
@@ -22,14 +22,13 @@
 namespace cuttlefish {
 namespace modem {
 
-int DeviceConfig::host_port() {
+int DeviceConfig::host_id() {
   if (!cuttlefish::CuttlefishConfig::Get()) {
-      return 6500;
+    return 1000;
   }
   auto config = cuttlefish::CuttlefishConfig::Get();
   auto instance = config->ForDefaultInstance();
-  auto host_port = instance.host_port();
-  return host_port;
+  return instance.modem_simulator_host_id();
 }
 
 std::string DeviceConfig::PerInstancePath(const char* file_name) {
diff --git a/host/commands/modem_simulator/channel_monitor.cpp b/host/commands/modem_simulator/channel_monitor.cpp
index e598f2d..941a8b4 100644
--- a/host/commands/modem_simulator/channel_monitor.cpp
+++ b/host/commands/modem_simulator/channel_monitor.cpp
@@ -45,7 +45,7 @@
   if (response.back() != '\r') {
     response += '\r';
   }
-  LOG(VERBOSE) << " AT< " << response;
+  LOG(DEBUG) << " AT< " << response;
 
   std::lock_guard<std::mutex> autolock(const_cast<Client*>(this)->write_mutex);
   client_fd->Write(response.data(), response.size());
@@ -153,7 +153,7 @@
     if (r_pos != std::string::npos) {
       auto command = commands.substr(pos, r_pos - pos);
       if (command.size() > 0) {  // "\r\r" ?
-        LOG(VERBOSE) << "AT> " << command;
+        LOG(DEBUG) << "AT> " << command;
         modem_->DispatchCommand(client, command);
       }
       pos = r_pos + 1;  // Skip '\r'
diff --git a/host/commands/modem_simulator/data_service.cpp b/host/commands/modem_simulator/data_service.cpp
index b48a777..1e11e69 100644
--- a/host/commands/modem_simulator/data_service.cpp
+++ b/host/commands/modem_simulator/data_service.cpp
@@ -335,10 +335,10 @@
 
   // call again after 1 sec delay
   count--;
-  thread_looper_->PostWithDelay(
-      std::chrono::seconds(1),
+  thread_looper_->Post(
       makeSafeCallback(this, &DataService::updatePhysicalChannelconfigs,
-                       modem_tech, freq, cellBandwidthDownlink, count));
+                       modem_tech, freq, cellBandwidthDownlink, count),
+      std::chrono::seconds(1));
 }
 
 }  // namespace cuttlefish
diff --git a/host/commands/modem_simulator/device_config.h b/host/commands/modem_simulator/device_config.h
index 05bca77..d13a38a 100644
--- a/host/commands/modem_simulator/device_config.h
+++ b/host/commands/modem_simulator/device_config.h
@@ -26,7 +26,7 @@
 
 class DeviceConfig {
  public:
-  static int host_port();
+  static int host_id();
   static std::string PerInstancePath(const char* file_name);
   static std::string DefaultHostArtifactsPath(const std::string& file);
   static std::string ril_address_and_prefix();
diff --git a/host/commands/modem_simulator/main.cpp b/host/commands/modem_simulator/main.cpp
index 794ad77..41ab6ce 100644
--- a/host/commands/modem_simulator/main.cpp
+++ b/host/commands/modem_simulator/main.cpp
@@ -63,7 +63,7 @@
   auto config = cuttlefish::CuttlefishConfig::Get();
   auto instance = config->ForDefaultInstance();
 
-  auto modem_log_path = instance.PerInstancePath("modem_simulator.log");
+  auto modem_log_path = instance.PerInstanceLogPath("modem_simulator.log");
 
   {
     auto log_path = instance.launcher_log_path();
@@ -114,7 +114,7 @@
   // remote call, remote sms from other cuttlefish instance
   std::string monitor_socket_name = "modem_simulator";
   std::stringstream ss;
-  ss << instance.host_port();
+  ss << instance.modem_simulator_host_id();
   monitor_socket_name.append(ss.str());
 
   auto monitor_socket = cuttlefish::SharedFD::SocketLocalServer(
diff --git a/host/commands/modem_simulator/misc_service.cpp b/host/commands/modem_simulator/misc_service.cpp
index 1a2b767..92de290 100644
--- a/host/commands/modem_simulator/misc_service.cpp
+++ b/host/commands/modem_simulator/misc_service.cpp
@@ -15,7 +15,6 @@
 
 #include "host/commands/modem_simulator/misc_service.h"
 
-#include <ctime>
 #include <fstream>
 #include <iomanip>
 
@@ -135,31 +134,37 @@
   client.SendCommandResponse(responses);
 }
 
+long MiscService::TimeZoneOffset(time_t* utctime)
+{
+    struct tm local = *std::localtime(utctime);
+    time_t local_time = std::mktime(&local);
+    struct tm gmt = *std::gmtime(utctime);
+    // mktime() converts struct tm according to local timezone.
+    time_t gmt_time = std::mktime(&gmt);
+    return (long)difftime(local_time, gmt_time);
+}
+
 void MiscService::TimeUpdate() {
   auto now = std::time(0);
 
   auto local_time = *std::localtime(&now);
   auto gm_time = *std::gmtime(&now);
 
-  auto t_local_time = std::mktime(&local_time);
-  auto t_gm_time = std::mktime(&gm_time);
-
   // Timezone offset is in number of quarter-hours
-  auto tzdiff = (int)std::difftime(t_local_time, t_gm_time) / (15 * 60);
+  auto tzdiff = TimeZoneOffset(&now) / (15 * 60);
 
   std::stringstream ss;
-  ss << "%CTZV: \"" << std::setfill('0') << std::setw(2)
-     << local_time.tm_year % 100 << "/" << std::setfill('0') << std::setw(2)
-     << local_time.tm_mon + 1 << "/" << std::setfill('0') << std::setw(2)
-     << local_time.tm_mday << "," << std::setfill('0') << std::setw(2)
-     << local_time.tm_hour << ":" << std::setfill('0') << std::setw(2)
-     << local_time.tm_min << ":" << std::setfill('0') << std::setw(2)
-     << local_time.tm_sec << (tzdiff >= 0 ? '+' : '-')
+  ss << "%CTZV: " << std::setfill('0') << std::setw(2)
+     << gm_time.tm_year % 100 << "/" << std::setfill('0') << std::setw(2)
+     << gm_time.tm_mon + 1 << "/" << std::setfill('0') << std::setw(2)
+     << gm_time.tm_mday << ":" << std::setfill('0') << std::setw(2)
+     << gm_time.tm_hour << ":" << std::setfill('0') << std::setw(2)
+     << gm_time.tm_min << ":" << std::setfill('0') << std::setw(2)
+     << gm_time.tm_sec << (tzdiff >= 0 ? '+' : '-')
      << (tzdiff >= 0 ? tzdiff : -tzdiff) << ":" << local_time.tm_isdst;
   if (!timezone_.empty()) {
     ss << ":" << timezone_;
   }
-  ss << "\"";
 
   SendUnsolicitedCommand(ss.str());
 }
diff --git a/host/commands/modem_simulator/misc_service.h b/host/commands/modem_simulator/misc_service.h
index e795a06..e2a6c5f 100644
--- a/host/commands/modem_simulator/misc_service.h
+++ b/host/commands/modem_simulator/misc_service.h
@@ -17,6 +17,8 @@
 
 #include "host/commands/modem_simulator/modem_service.h"
 
+#include <ctime>
+
 namespace cuttlefish {
 
 class MiscService : public ModemService, public std::enable_shared_from_this<MiscService>  {
@@ -36,6 +38,7 @@
 
  private:
   void ParseTimeZone();
+  long TimeZoneOffset(time_t* utctime); // in seconds.
   void FixTimeZone(std::string& line);
   std::string timezone_;
   std::vector<CommandHandler> InitializeCommandHandlers();
diff --git a/host/commands/modem_simulator/modem_service.cpp b/host/commands/modem_simulator/modem_service.cpp
index 062da6f..7996e31 100644
--- a/host/commands/modem_simulator/modem_service.cpp
+++ b/host/commands/modem_simulator/modem_service.cpp
@@ -137,11 +137,8 @@
   }
 }
 
-std::string ModemService::GetHostPort() {
-  auto host_port = cuttlefish::modem::DeviceConfig::host_port();
-  std::stringstream ss;
-  ss << host_port;
-  return ss.str();
+std::string ModemService::GetHostId() {
+  return std::to_string(cuttlefish::modem::DeviceConfig::host_id());
 }
 
 }  // namespace cuttlefish
diff --git a/host/commands/modem_simulator/modem_service.h b/host/commands/modem_simulator/modem_service.h
index 0b75d7d..744f618 100644
--- a/host/commands/modem_simulator/modem_service.h
+++ b/host/commands/modem_simulator/modem_service.h
@@ -104,7 +104,7 @@
   void SendCommandToRemote(cuttlefish::SharedFD remote_client,
                            std::string response);
   void CloseRemoteConnection(cuttlefish::SharedFD remote_client);
-  static std::string GetHostPort();
+  static std::string GetHostId();
 
   int32_t service_id_;
   const std::vector<CommandHandler> command_handlers_;
diff --git a/host/commands/modem_simulator/network_service.cpp b/host/commands/modem_simulator/network_service.cpp
index 56f14e5..af9c59e 100644
--- a/host/commands/modem_simulator/network_service.cpp
+++ b/host/commands/modem_simulator/network_service.cpp
@@ -31,15 +31,6 @@
 // string type; four byte GERAN/UTRAN cell ID in hexadecimal format
 static const std::string kCellId = "0000B804";
 
-// Check SignalStrength.java file for more details on how these map to
-// signal strength bars
-const std::pair<int, int> kGSMSignalStrength = std::make_pair(4, 30);
-const std::pair<int, int> kCDMASignalStrength = std::make_pair(4, 120);
-const std::pair<int, int> kEVDOSignalStrength = std::make_pair(4, 120);
-const std::pair<int, int> kLTESignalStrength = std::make_pair(4, 30);
-const std::pair<int, int> kWCDMASignalStrength = std::make_pair(4, 30);
-const std::pair<int, int> kNRSignalStrength = std::make_pair(45, 135);
-
 NetworkService::NetworkService(int32_t service_id,
                                ChannelMonitor* channel_monitor,
                                ThreadLooper* thread_looper)
@@ -255,9 +246,10 @@
     // Note: not saved to nvram config due to sim status may change after reboot
     current_network_mode_ = M_MODEM_TECH_WCDMA;
   }
-  thread_looper_->PostWithDelay(std::chrono::seconds(1),
+  thread_looper_->Post(
       makeSafeCallback(this, &NetworkService::UpdateRegisterState,
-          voice_registration_status_.registration_state));
+                       voice_registration_status_.registration_state),
+      std::chrono::seconds(1));
 }
 
 /**
@@ -318,7 +310,6 @@
       client.SendCommandResponse(kCmeErrorOperationNotSupported);
       return;
   }
-  signal_strength_.Reset();
 
   client.SendCommandResponse("OK");
 }
@@ -335,39 +326,87 @@
   return wakeup_from_sleep;
 }
 
-void NetworkService::SetSignalStrengthValue(int& value,
-                                            const std::pair<int, int>& range,
-                                            double percentd) {
-  value = range.first + percentd * (range.second - range.first);
-  AdjustSignalStrengthValue(value, range);
-}
-
-void NetworkService::AdjustSignalStrengthValue(int& value,
-                                               const std::pair<int, int>& range) {
-  if (value < range.first) {
-    value = range.first;
-  } else if (value > range.second) {
-    value = range.second;
-  }
-}
 /**
+ * IMPORTANT NOTE: Current implementation of AT+CSQ differs from standards
+ * described in TS 27.007 8.5 which only only supports RSSI and BER.
+ *
+ * TODO(b/206814247): Rename AT+CSQ command.
+ *
  * AT+CSQ
- *   Execution command returns received signal strength indication <rssi>
- *   and channel bit error rate <ber> from the MT.
+ *   Execution command returns received signal strength indication. This is a
+ *   Cuttlefish specific command.
  *
- * command            Possible response(s)
- * AT+CSQ               +CSQ: <rssi>,<ber>
- *                      +CME ERROR: <err>
+ * Command            Possible response(s)
+ * AT+CSQ             +CSQ: <gsm_rssi>,<gsm_ber>,<cdma_dbm>,
+ *                      <cdma_ecio>,<evdo_dbm>,<evdo_ecio>,<evdo_snr>,
+ *                      <lte_rssi>,<lte_rsrp>,<lte_rsrq>,<lte_rssnr>,
+ *                      <lte_cqi>,<lte_ta>,<tdscdma_rscp>,<wcdma_rssi>,
+ *                      <wcdma_ber>,<nr_ss_rsrp>,<nr_ss_rsrq>,<nr_ss_sinr>,
+ *                      <nr_csi_rsrp>,<nr_csi_rsrq>,<nr_csi_sinr>
+ *                    +CME ERROR: <err>
  *
- * <rssi>: integer type
- *       0 ‑113 dBm or less
- *       1 ‑111 dBm
- *       2...30  ‑109... ‑53 dBm
- *       31  ‑51 dBm or greater
- *       99  not known or not detectable
- * <ber>: integer type; channel bit error rate (in percent)
- *      0...7 as RXQUAL values in the table in 3GPP TS 45.008 [20] subclause 8.2.4
- *      99  not known or not detectable
+ * <gsm_rssi>: Valid values are (0-31, 99) as defined in TS 27.007 8.5.
+ * <gsm_ber>: Bit error rate (0-7, 99) as defined in TS 27.007 8.5.
+ * <cdma_dbm>: Valid values are positive integers.
+ *   This value is the actual RSSI value multiplied by -1.
+ *   Example: If the actual RSSI is -75, then this response value will be 75.
+ * <cdma_ecio>: Valid values are positive integers.
+ *   This value is the actual Ec/Io multiplied by -10.
+ *   Example: If the actual Ec/Io is -12.5 dB, then this response value will
+ *   be 125.
+ * <evdo_dbm>: Refer cdma_dbm.
+ * <evdo_ecio>: Refer cdma_ecio.
+ * <evdo_snr>: Valid values are 0-8.
+ *   8 is the highest signal to noise ratio.
+ * <lte_rssi>: Refer gsm_rssi.
+ * <lte_rsrp>:
+ *   The current Reference Signal Receive Power in dBm multiplied by -1.
+ *   Range: 44 to 140 dBm.
+ *   INT_MAX: 0x7FFFFFFF denotes invalid value.
+ *   Reference: 3GPP TS 36.133 9.1.4.
+ * <lte_rsrq>:
+ *   The current Reference Signal Receive Quality in dB multiplied by -1.
+ *   Range: 20 to 3 dB.
+ *   INT_MAX: 0x7FFFFFFF denotes invalid value.
+ *   Reference: 3GPP TS 36.133 9.1.7.
+ * <lte_rssnr>:
+ *   The current reference signal signal-to-noise ratio in 0.1 dB units.
+ *   Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
+ *   INT_MAX : 0x7FFFFFFF denotes invalid value.
+ *   Reference: 3GPP TS 36.101 8.1.1.
+ * <lte_cqi>: The current Channel Quality Indicator.
+ *   Range: 0 to 15.
+ *   INT_MAX : 0x7FFFFFFF denotes invalid value.
+ *   Reference: 3GPP TS 36.101 9.2, 9.3, A.4.
+ * <lte_ta>:
+ *   Timing advance in micro seconds for a one way trip from cell to device.
+ *   Approximate distance can be calculated using 300m/us * timingAdvance.
+ *   Range: 0 to 0x7FFFFFFE.
+ *   INT_MAX : 0x7FFFFFFF denotes invalid value.
+ *   Reference: 3GPP 36.321 section 6.1.3.5.
+ * <tdscdma_rscp>: P-CCPCH RSCP as defined in TS 25.225 5.1.1.
+ *   Valid values are (0-96, 255) as defined in TS 27.007 8.69.
+ *   INT_MAX denotes that the value is invalid/unreported.
+ * <wcdma_rssi>: Refer gsm_rssi.
+ * <wcdma_ber>: Refer gsm_ber.
+ * <nr_ss_rsrp>: SS reference signal received power, multiplied by -1.
+ *   Reference: 3GPP TS 38.215.
+ *   Range [44, 140], INT_MAX means invalid/unreported.
+ * <nr_ss_rsrq>: SS reference signal received quality, multiplied by -1.
+ *   Reference: 3GPP TS 38.215.
+ *   Range [3, 20], INT_MAX means invalid/unreported.
+ * <nr_ss_sinr>: SS signal-to-noise and interference ratio.
+ *   Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+ *   Range [-23, 40], INT_MAX means invalid/unreported.
+ * <nr_csi_rsrp>: CSI reference signal received power, multiplied by -1.
+ *   Reference: 3GPP TS 38.215.
+ *   Range [44, 140], INT_MAX means invalid/unreported.
+ * <nr_csi_rsrq>: CSI reference signal received quality, multiplied by -1.
+ *   Reference: 3GPP TS 38.215.
+ *   Range [3, 20], INT_MAX means invalid/unreported.
+ * <nr_csi_sinr>: CSI signal-to-noise and interference ratio.
+ *   Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+ *   Range [-23, 40], INT_MAX means invalid/unreported.
  *
  * see RIL_REQUEST_SIGNAL_STRENGTH in RIL
  */
@@ -384,7 +423,7 @@
 
   android_last_signal_time_ = time(0);
 
-  auto response = GetSignalStrength();
+  auto response = BuildCSQCommandResponse(GetCurrentSignalStrength());
 
   responses.push_back(response);
   responses.push_back("OK");
@@ -392,11 +431,9 @@
 }
 
 bool NetworkService::IsHasNetwork() {
-  if (radio_state_ == RADIO_STATE_OFF ||
-      oper_selection_mode_ == OperatorSelectionMode::OPER_SELECTION_DEREGISTRATION) {
-    return false;
-  }
-  return true;
+  return radio_state_ != RADIO_STATE_OFF &&
+         oper_selection_mode_ !=
+             OperatorSelectionMode::OPER_SELECTION_DEREGISTRATION;
 }
 
 /**
@@ -676,8 +713,10 @@
 
   NvramConfig::SaveToFile();
 
-  thread_looper_->PostWithDelay(std::chrono::seconds(1),
-      makeSafeCallback(this, &NetworkService::UpdateRegisterState, registration_state));
+  thread_looper_->Post(
+      makeSafeCallback(this, &NetworkService::UpdateRegisterState,
+                       registration_state),
+      std::chrono::seconds(1));
 }
 
 NetworkService::NetworkRegistrationStatus::AccessTechnoloy
@@ -987,13 +1026,13 @@
 
   if (current != current_network_mode_) {
     UpdateRegisterState(NET_REGISTRATION_UNREGISTERED);
-    signal_strength_.Reset();
 
     ss << "+CTEC: "<< current_network_mode_;
 
-    thread_looper_->PostWithDelay(std::chrono::milliseconds(200),
+    thread_looper_->Post(
         makeSafeCallback(this, &NetworkService::UpdateRegisterState,
-            NET_REGISTRATION_HOME));
+                         NET_REGISTRATION_HOME),
+        std::chrono::milliseconds(200));
   } else {
     ss << "+CTEC: DONE";
   }
@@ -1071,60 +1110,75 @@
   SendUnsolicitedCommand(ss.str());
 }
 
-std::string NetworkService::GetSignalStrength() {
+int NetworkService::GetValueInRange(const std::pair<int, int>& range,
+                                    int percent) {
+  int range_size = range.second - range.first + 1;
+  return range.first + (int)((percent / 101.0) * range_size);
+}
+
+std::string NetworkService::BuildCSQCommandResponse(
+    const SignalStrength& signal_strength) {
+  std::stringstream ss;
+  // clang-format off
+  ss << "+CSQ: "
+     << signal_strength.gsm_rssi << ","
+     << signal_strength.gsm_ber << ","
+     << signal_strength.cdma_dbm << ","
+     << signal_strength.cdma_ecio << ","
+     << signal_strength.evdo_dbm << ","
+     << signal_strength.evdo_ecio << ","
+     << signal_strength.evdo_snr << ","
+     << signal_strength.lte_rssi << ","
+     << signal_strength.lte_rsrp << ","
+     << signal_strength.lte_rsrq << ","
+     << signal_strength.lte_rssnr << ","
+     << signal_strength.lte_cqi << ","
+     << signal_strength.lte_ta << ","
+     << signal_strength.tdscdma_rscp << ","
+     << signal_strength.wcdma_rssi << ","
+     << signal_strength.wcdma_ber << ","
+     << signal_strength.nr_ss_rsrp << ","
+     << signal_strength.nr_ss_rsrq << ","
+     << signal_strength.nr_ss_sinr << ","
+     << signal_strength.nr_csi_rsrp << ","
+     << signal_strength.nr_csi_rsrq << ","
+     << signal_strength.nr_csi_sinr;
+  // clang-format on
+  return ss.str();
+}
+
+NetworkService::SignalStrength NetworkService::GetCurrentSignalStrength() {
+  NetworkService::SignalStrength result;
+  if (!IsHasNetwork()) {
+    return result;
+  }
+  int percent = signal_strength_percent_;
   switch (current_network_mode_) {
     case M_MODEM_TECH_GSM:
-      signal_strength_.gsm_rssi += (rand() % 3 - 1);
-      AdjustSignalStrengthValue(signal_strength_.gsm_rssi, kGSMSignalStrength);
+      result.gsm_rssi = GetValueInRange(kRssiRange, percent);
       break;
     case M_MODEM_TECH_CDMA:
-      signal_strength_.cdma_dbm += (rand() % 3 - 1);
-      AdjustSignalStrengthValue(signal_strength_.cdma_dbm, kCDMASignalStrength);
+      result.cdma_dbm = GetValueInRange(kDbmRange, percent) * -1;
       break;
     case M_MODEM_TECH_EVDO:
-      signal_strength_.evdo_dbm += (rand() % 3 - 1);
-      AdjustSignalStrengthValue(signal_strength_.evdo_dbm, kEVDOSignalStrength);
+      result.evdo_dbm = GetValueInRange(kDbmRange, percent) * -1;
       break;
     case M_MODEM_TECH_LTE:
-      signal_strength_.lte_rssi += (rand() % 3 - 1);
-      AdjustSignalStrengthValue(signal_strength_.lte_rssi, kLTESignalStrength);
+      result.lte_rsrp = GetValueInRange(kRsrpRange, percent) * -1;
       break;
     case M_MODEM_TECH_WCDMA:
-      signal_strength_.wcdma_rssi += (rand() % 3 - 1);
-      AdjustSignalStrengthValue(signal_strength_.wcdma_rssi, kWCDMASignalStrength);
+      result.wcdma_rssi = GetValueInRange(kRssiRange, percent);
       break;
     case M_MODEM_TECH_NR:
-      signal_strength_.nr_ss_rsrp += (rand() % 3 - 1);
-      AdjustSignalStrengthValue(signal_strength_.nr_ss_rsrp, kNRSignalStrength);
+      // special for NR: it uses LTE as primary, so LTE signal strength is
+      // needed as well
+      result.lte_rsrp = GetValueInRange(kRsrpRange, percent) * -1;
+      result.nr_ss_rsrp = GetValueInRange(kRsrpRange, percent) * -1;
       break;
     default:
       break;
   }
-
-  std::stringstream ss;
-  ss << "+CSQ: " << signal_strength_.gsm_rssi << ","
-                 << signal_strength_.gsm_ber << ","
-                 << signal_strength_.cdma_dbm << ","
-                 << signal_strength_.cdma_ecio << ","
-                 << signal_strength_.evdo_dbm << ","
-                 << signal_strength_.evdo_ecio << ","
-                 << signal_strength_.evdo_snr << ","
-                 << signal_strength_.lte_rssi << ","
-                 << signal_strength_.lte_rsrp << ","
-                 << signal_strength_.lte_rsrq << ","
-                 << signal_strength_.lte_rssnr << ","
-                 << signal_strength_.lte_cqi << ","
-                 << signal_strength_.lte_ta << ","
-                 << signal_strength_.tdscdma_rscp << ","
-                 << signal_strength_.wcdma_rssi << ","
-                 << signal_strength_.wcdma_ber << ","
-                 << signal_strength_.nr_ss_rsrp << ","
-                 << signal_strength_.nr_ss_rsrq << ","
-                 << signal_strength_.nr_ss_sinr << ","
-                 << signal_strength_.nr_csi_rsrp << ","
-                 << signal_strength_.nr_csi_rsrq << ","
-                 << signal_strength_.nr_csi_sinr;;
-  return ss.str();
+  return result;
 }
 
 /* AT+REMOTEREG: state*/
@@ -1136,12 +1190,11 @@
   int stated = std::stoi(states, nullptr, 10);
 
   UpdateRegisterState(NET_REGISTRATION_UNREGISTERED);
-  signal_strength_.Reset();
 
-  thread_looper_->PostWithDelay(
-      std::chrono::seconds(1),
+  thread_looper_->Post(
       makeSafeCallback(this, &NetworkService::UpdateRegisterState,
-                       (cuttlefish::NetworkService::RegistrationState)stated));
+                       (cuttlefish::NetworkService::RegistrationState)stated),
+      std::chrono::seconds(1));
 }
 
 /* AT+REMOTECTEC: ctec */
@@ -1162,77 +1215,13 @@
     current_network_mode_ = current_network_mode_new;
     auto saved_state = voice_registration_status_.registration_state;
     UpdateRegisterState(NET_REGISTRATION_UNREGISTERED);
-    signal_strength_.Reset();
 
     ss << "+CTEC: " << current_network_mode_;
 
-    thread_looper_->PostWithDelay(
-        std::chrono::seconds(1),
+    thread_looper_->Post(
         makeSafeCallback(this, &NetworkService::UpdateRegisterState,
-                         saved_state));
-  }
-}
-
-void NetworkService::applySignalPercentage(double percentd) {
-  switch (current_network_mode_) {
-    case M_MODEM_TECH_GSM:
-      signal_strength_.gsm_rssi = 99;
-      signal_strength_.gsm_ber = 0;
-      SetSignalStrengthValue(signal_strength_.gsm_rssi, kGSMSignalStrength,
-                             percentd);
-      break;
-    case M_MODEM_TECH_CDMA:
-      signal_strength_.cdma_dbm = 125;
-      signal_strength_.cdma_ecio = 165;
-      SetSignalStrengthValue(signal_strength_.cdma_dbm, kCDMASignalStrength,
-                             percentd);
-      break;
-    case M_MODEM_TECH_EVDO:
-      signal_strength_.evdo_dbm = 125;
-      signal_strength_.evdo_ecio = 165;
-      signal_strength_.evdo_snr = -1;
-      SetSignalStrengthValue(signal_strength_.evdo_dbm, kEVDOSignalStrength,
-                             percentd);
-      break;
-    case M_MODEM_TECH_LTE:
-      signal_strength_.lte_rssi = 99;
-      signal_strength_.lte_rsrp = -1;
-      signal_strength_.lte_rsrq = -5;
-      signal_strength_.lte_rssnr = -205;
-      signal_strength_.lte_cqi = -1;
-      signal_strength_.lte_ta = -1;
-      SetSignalStrengthValue(signal_strength_.lte_rssi, kLTESignalStrength,
-                             percentd);
-      break;
-    case M_MODEM_TECH_WCDMA:
-      signal_strength_.tdscdma_rscp = 99;
-      signal_strength_.wcdma_rssi = 99;
-      signal_strength_.wcdma_ber = 0;
-      SetSignalStrengthValue(signal_strength_.wcdma_rssi, kWCDMASignalStrength,
-                             percentd);
-      break;
-    case M_MODEM_TECH_NR:
-      // special for NR: it uses LTE as primary, so LTE signal strength is
-      // needed as well
-      signal_strength_.lte_rssi = 99;
-      signal_strength_.lte_rsrp = -1;
-      signal_strength_.lte_rsrq = -5;
-      signal_strength_.lte_rssnr = -205;
-      signal_strength_.lte_cqi = -1;
-      signal_strength_.lte_ta = -1;
-      SetSignalStrengthValue(signal_strength_.lte_rssi, kLTESignalStrength,
-                             percentd);
-      signal_strength_.nr_ss_rsrp = 0;
-      signal_strength_.nr_ss_rsrq = 0;
-      signal_strength_.nr_ss_sinr = 45;
-      signal_strength_.nr_csi_rsrp = 0;
-      signal_strength_.nr_csi_rsrq = 0;
-      signal_strength_.nr_csi_sinr = 30;
-      SetSignalStrengthValue(signal_strength_.nr_ss_rsrp, kNRSignalStrength,
-                             percentd);
-      break;
-    default:
-      break;
+                         saved_state),
+        std::chrono::seconds(1));
   }
 }
 
@@ -1242,12 +1231,12 @@
   (void)client;
   std::stringstream ss;
   std::string percents = command.substr(std::string("AT+REMOTESIGNAL:").size());
-  double percentd = std::stoi(percents, nullptr, 10) / 100.0;
+  int percent = std::stoi(percents, nullptr, 10);
 
-  if (percentd >= 0 && percentd <= 1.0) {
-    percentd_ = percentd;
+  if (percent >= 0 && percent <= 100) {
+    signal_strength_percent_ = percent;
   } else {
-    LOG(DEBUG) << "out of bound signal strength: " << percentd;
+    LOG(DEBUG) << "out of bound signal strength percent: " << percent;
     return;
   }
 
@@ -1255,9 +1244,7 @@
 }
 
 void NetworkService::OnSignalStrengthChanged() {
-  applySignalPercentage(percentd_);
-  auto command = GetSignalStrength();
-  SendUnsolicitedCommand(command);
+  SendUnsolicitedCommand(BuildCSQCommandResponse(GetCurrentSignalStrength()));
 }
 
 NetworkService::RegistrationState NetworkService::GetVoiceRegistrationState() const {
diff --git a/host/commands/modem_simulator/network_service.h b/host/commands/modem_simulator/network_service.h
index b64d4b9..68f0d5d 100644
--- a/host/commands/modem_simulator/network_service.h
+++ b/host/commands/modem_simulator/network_service.h
@@ -20,6 +20,7 @@
 #include "host/commands/modem_simulator/data_service.h"
 #include "host/commands/modem_simulator/misc_service.h"
 #include "host/commands/modem_simulator/modem_service.h"
+#include "host/commands/modem_simulator/network_service_constants.h"
 #include "host/commands/modem_simulator/sim_service.h"
 
 namespace cuttlefish {
@@ -82,10 +83,6 @@
   bool IsHasNetwork();
   void UpdateRegisterState(RegistrationState state);
   void AdjustSignalStrengthValue(int& value, const std::pair<int, int>& range);
-  void SetSignalStrengthValue(int& value, const std::pair<int, int>& range,
-                              double percentd);
-  std::string GetSignalStrength();
-  void applySignalPercentage(double percentd);
 
   MiscService* misc_service_ = nullptr;
   SimService* sim_service_ = nullptr;
@@ -202,61 +199,37 @@
                            * Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
                            * Range [-23, 40], INT_MAX means invalid/unreported. */
 
-    // Default invalid value
-    SignalStrength():
-      gsm_rssi(99),     // [0, 31]
-      gsm_ber(0),       // [7, 99]
-      cdma_dbm(125),    // [0, 120]
-      cdma_ecio(165),   // [0, 160]
-      evdo_dbm(125),    // [0, 120]
-      evdo_ecio(165),   // [0, 160]
-      evdo_snr(-1),     // [0, 8]
-      lte_rssi(99),     // [0, 31]
-      lte_rsrp(-1),     // [43,140]
-      lte_rsrq(-5),     // [-3,34]
-      lte_rssnr(-205),  // [-200, 300]
-      lte_cqi(-1),      // [0, 15]
-      lte_ta(-1),       // [0, 1282]
-      tdscdma_rscp(99), // [0, 96]
-      wcdma_rssi(99),   // [0, 31]
-      wcdma_ber(0),     // [7, 99]
-      nr_ss_rsrp(0),    // [44, 140]
-      nr_ss_rsrq(0),    // [3, 10]
-      nr_ss_sinr(45),   // [-23,40]
-      nr_csi_rsrp(0),   // [44, 140]
-      nr_csi_rsrq(0),   // [3, 20]
-      nr_csi_sinr(30)   // [-23, 23]
-      {}
-
-    // After radio power on, off, or set network mode, reset to invalid value
-    void Reset() {
-      gsm_rssi = INT_MAX;
-      gsm_ber = INT_MAX;
-      cdma_dbm = INT_MAX;
-      cdma_ecio = INT_MAX;
-      evdo_dbm = INT_MAX;
-      evdo_ecio = INT_MAX;
-      evdo_snr = INT_MAX;
-      lte_rssi = INT_MAX;
-      lte_rsrp = INT_MAX;
-      lte_rsrq = INT_MAX;
-      lte_rssnr = INT_MAX;
-      lte_cqi = INT_MAX;
-      lte_ta = INT_MAX;
-      tdscdma_rscp = INT_MAX;
-      wcdma_rssi = INT_MAX;
-      wcdma_ber = INT_MAX;
-      nr_ss_rsrp = INT_MAX;
-      nr_ss_rsrq = INT_MAX;
-      nr_ss_sinr = INT_MAX;
-      nr_csi_rsrp = INT_MAX;
-      nr_csi_rsrq = INT_MAX;
-      nr_csi_sinr = INT_MAX;
-    }
+    SignalStrength()
+        : gsm_rssi(kRssiUnknownValue),
+          gsm_ber(kBerUnknownValue),
+          cdma_dbm(kDbmUnknownValue),
+          cdma_ecio(kEcioUnknownValue),
+          evdo_dbm(kDbmUnknownValue),
+          evdo_ecio(kEcioUnknownValue),
+          evdo_snr(kSnrUnknownValue),
+          lte_rssi(kRssiUnknownValue),
+          lte_rsrp(INT_MAX),
+          lte_rsrq(INT_MAX),
+          lte_rssnr(INT_MAX),
+          lte_cqi(INT_MAX),
+          lte_ta(INT_MAX),
+          tdscdma_rscp(INT_MAX),
+          wcdma_rssi(kRssiUnknownValue),
+          wcdma_ber(kBerUnknownValue),
+          nr_ss_rsrp(INT_MAX),
+          nr_ss_rsrq(INT_MAX),
+          nr_ss_sinr(INT_MAX),
+          nr_csi_rsrp(INT_MAX),
+          nr_csi_rsrq(INT_MAX),
+          nr_csi_sinr(INT_MAX) {}
   };
 
-  double percentd_{0.8};
-  SignalStrength signal_strength_;
+  int signal_strength_percent_{80};
+
+  static int GetValueInRange(const std::pair<int, int>& range, int percent);
+  static std::string BuildCSQCommandResponse(
+      const SignalStrength& signal_strength);
+  SignalStrength GetCurrentSignalStrength();
 
   /* Data / voice Registration State */
   struct NetworkRegistrationStatus {
diff --git a/host/commands/modem_simulator/network_service_constants.h b/host/commands/modem_simulator/network_service_constants.h
new file mode 100644
index 0000000..49d0319
--- /dev/null
+++ b/host/commands/modem_simulator/network_service_constants.h
@@ -0,0 +1,34 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#pragma once
+
+namespace cuttlefish {
+
+// Constants representing a not known or not detectable value for different
+// signal strength parameters.
+constexpr int kRssiUnknownValue = 99;
+constexpr int kBerUnknownValue = 99;
+constexpr int kDbmUnknownValue = -1;
+constexpr int kEcioUnknownValue = -1;
+constexpr int kSnrUnknownValue = -1;
+
+// Constants representing the range of values of different signal strength
+// parameters.
+constexpr auto kRssiRange = std::make_pair(4, 30);
+constexpr auto kDbmRange = std::make_pair(-120, -4);
+constexpr auto kRsrpRange = std::make_pair(-140, -44);
+
+}  // namespace cuttlefish
diff --git a/host/commands/modem_simulator/sms_service.cpp b/host/commands/modem_simulator/sms_service.cpp
index 0da21a6..0caee16 100644
--- a/host/commands/modem_simulator/sms_service.cpp
+++ b/host/commands/modem_simulator/sms_service.cpp
@@ -256,8 +256,8 @@
     return;
   }
 
-  auto local_host_port = GetHostPort();
-  auto pdu = sms_pdu.CreateRemotePDU(local_host_port);
+  auto local_host_id = GetHostId();
+  auto pdu = sms_pdu.CreateRemotePDU(local_host_id);
 
   std::string command = "AT+REMOTESMS=" + pdu + "\r";
   std::string token = "REM0";
@@ -292,25 +292,22 @@
     return;
   } else if (port >= kRemotePortRange.first &&
              port <= kRemotePortRange.second) {
-    std::stringstream ss;
-    ss << port;
-    auto remote_host_port = ss.str();
-    if (GetHostPort() == remote_host_port) {  // Send SMS to local host port
-      thread_looper_->PostWithDelay(
-          std::chrono::seconds(1),
-          makeSafeCallback<SmsService>(this, [&sms_pdu](SmsService* me) {
-            me->HandleReceiveSMS(sms_pdu);
-          }));
+    auto remote_host_port = std::to_string(port);
+    if (GetHostId() == remote_host_port) {  // Send SMS to local host port
+      thread_looper_->Post(
+          makeSafeCallback<SmsService>(
+              this,
+              [&sms_pdu](SmsService* me) { me->HandleReceiveSMS(sms_pdu); }),
+          std::chrono::seconds(1));
     } else {  // Send SMS to remote host port
       SendSmsToRemote(remote_host_port, sms_pdu);
     }
   } else if (sim_service_ && phone_number == sim_service_->GetPhoneNumber()) {
     /* Local phone number */
-    thread_looper_->PostWithDelay(
-        std::chrono::seconds(1),
-        makeSafeCallback<SmsService>(this, [sms_pdu](SmsService* me) {
-          me->HandleReceiveSMS(sms_pdu);
-        }));
+    thread_looper_->Post(
+        makeSafeCallback<SmsService>(
+            this, [sms_pdu](SmsService* me) { me->HandleReceiveSMS(sms_pdu); }),
+        std::chrono::seconds(1));
   } /* else pretend send SMS success */
 
   std::stringstream ss;
@@ -321,11 +318,12 @@
 
   if (sms_pdu.IsNeededStatuReport()) {
     int ref = message_reference_;
-    thread_looper_->PostWithDelay(
-        std::chrono::seconds(1),
-        makeSafeCallback<SmsService>(this, [sms_pdu, ref](SmsService* me) {
-          me->HandleSMSStatuReport(sms_pdu, ref);
-        }));
+    thread_looper_->Post(
+        makeSafeCallback<SmsService>(this,
+                                     [sms_pdu, ref](SmsService* me) {
+                                       me->HandleSMSStatuReport(sms_pdu, ref);
+                                     }),
+        std::chrono::seconds(1));
   }
 }
 
diff --git a/host/commands/modem_simulator/thread_looper.cpp b/host/commands/modem_simulator/thread_looper.cpp
index d9df9df..cc6c39e 100644
--- a/host/commands/modem_simulator/thread_looper.cpp
+++ b/host/commands/modem_simulator/thread_looper.cpp
@@ -42,8 +42,8 @@
   return serial;
 }
 
-ThreadLooper::Serial ThreadLooper::PostWithDelay(
-        std::chrono::steady_clock::duration delay, Callback cb) {
+ThreadLooper::Serial ThreadLooper::Post(
+    Callback cb, std::chrono::steady_clock::duration delay) {
   CHECK(cb != nullptr);
 
   auto serial = next_serial_++;
diff --git a/host/commands/modem_simulator/thread_looper.h b/host/commands/modem_simulator/thread_looper.h
index dbfd201..dcc4efb 100644
--- a/host/commands/modem_simulator/thread_looper.h
+++ b/host/commands/modem_simulator/thread_looper.h
@@ -60,7 +60,7 @@
   typedef int32_t Serial;
 
   Serial Post(Callback cb);
-  Serial PostWithDelay(std::chrono::steady_clock::duration delay, Callback cb);
+  Serial Post(Callback cb, std::chrono::steady_clock::duration delay);
 
   void Stop();
 
diff --git a/host/commands/modem_simulator/unittest/service_test.cpp b/host/commands/modem_simulator/unittest/service_test.cpp
index 5801586..7808122 100644
--- a/host/commands/modem_simulator/unittest/service_test.cpp
+++ b/host/commands/modem_simulator/unittest/service_test.cpp
@@ -41,31 +41,31 @@
     {
       cuttlefish::CuttlefishConfig tmp_config_obj;
       std::string config_file = tmp_test_dir + "/.cuttlefish_config.json";
-      std::string instance_dir = tmp_test_dir + "/cuttlefish_runtime.1";
-      fs::create_directories(instance_dir);
+      tmp_config_obj.set_root_dir(tmp_test_dir + "/cuttlefish");
       tmp_config_obj.set_ril_dns("8.8.8.8");
       std::vector<int> instance_nums;
       for (int i = 0; i < 1; i++) {
         instance_nums.push_back(cuttlefish::GetInstance() + i);
       }
       for (const auto &num : instance_nums) {
-        auto instance = tmp_config_obj.ForInstance(num);
-        instance.set_instance_dir(instance_dir);
+        tmp_config_obj.ForInstance(num);  // Trigger creation in map
       }
 
       for (auto instance : tmp_config_obj.Instances()) {
+        fs::create_directories(instance.instance_dir());
         if (!tmp_config_obj.SaveToFile(
                 instance.PerInstancePath("cuttlefish_config.json"))) {
           LOG(ERROR) << "Unable to save copy config object";
           return;
         }
+        std::string icfilename =
+            instance.PerInstancePath("/iccprofile_for_sim0.xml");
+        std::ofstream offile(icfilename, std::ofstream::out);
+        offile << std::string(myiccfile);
+        offile.close();
+        fs::copy_file(instance.PerInstancePath("/cuttlefish_config.json"),
+                      config_file, fs::copy_options::overwrite_existing);
       }
-      fs::copy_file(instance_dir + "/cuttlefish_config.json", config_file,
-                    fs::copy_options::overwrite_existing);
-      std::string icfilename = instance_dir + "/iccprofile_for_sim0.xml";
-      std::ofstream offile(icfilename, std::ofstream::out);
-      offile << std::string(myiccfile);
-      offile.close();
 
       ::setenv("CUTTLEFISH_CONFIG_FILE", config_file.c_str(), 1);
     }
diff --git a/host/commands/powerwash_cvd/Android.bp b/host/commands/powerwash_cvd/Android.bp
index adaacb9..5695f8b 100644
--- a/host/commands/powerwash_cvd/Android.bp
+++ b/host/commands/powerwash_cvd/Android.bp
@@ -23,9 +23,11 @@
         "powerwash_cvd.cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
+        "libfruit",
         "libjsoncpp",
     ],
     static_libs: [
diff --git a/host/commands/restart_cvd/Android.bp b/host/commands/restart_cvd/Android.bp
index dc7a044..8b1b971 100644
--- a/host/commands/restart_cvd/Android.bp
+++ b/host/commands/restart_cvd/Android.bp
@@ -23,9 +23,11 @@
         "restart_cvd.cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
+        "libfruit",
         "libjsoncpp",
     ],
     static_libs: [
diff --git a/host/commands/restart_cvd/restart_cvd.cc b/host/commands/restart_cvd/restart_cvd.cc
index 68ff3e6..6c165f9 100644
--- a/host/commands/restart_cvd/restart_cvd.cc
+++ b/host/commands/restart_cvd/restart_cvd.cc
@@ -44,7 +44,6 @@
 #include "common/libs/utils/environment.h"
 #include "host/commands/run_cvd/runner_defs.h"
 #include "host/libs/config/cuttlefish_config.h"
-#include "host/libs/vm_manager/vm_manager.h"
 
 DEFINE_int32(instance_num, cuttlefish::GetInstance(),
              "Which instance to restart");
diff --git a/host/commands/run_cvd/Android.bp b/host/commands/run_cvd/Android.bp
index 09b11d5..2f6eb0b 100644
--- a/host/commands/run_cvd/Android.bp
+++ b/host/commands/run_cvd/Android.bp
@@ -22,28 +22,33 @@
     srcs: [
         "boot_state_machine.cc",
         "launch.cc",
-        "launch_adb.cpp",
         "launch_modem.cpp",
         "launch_streamer.cpp",
         "main.cc",
+        "reporting.cpp",
         "process_monitor.cc",
         "server_loop.cpp",
+        "validate.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libcuttlefish_kernel_log_monitor_utils",
         "libbase",
+        "libfruit",
         "libjsoncpp",
         "libnl",
     ],
     static_libs: [
         "libcuttlefish_host_config",
+        "libcuttlefish_host_config_adb",
         "libcuttlefish_vm_manager",
         "libgflags",
     ],
     defaults: [
         "cuttlefish_host",
         "cuttlefish_libicuuc",
+        "cvd_cc_defaults",
     ],
 }
diff --git a/host/commands/run_cvd/boot_state_machine.cc b/host/commands/run_cvd/boot_state_machine.cc
index 64eb893..803b65f 100644
--- a/host/commands/run_cvd/boot_state_machine.cc
+++ b/host/commands/run_cvd/boot_state_machine.cc
@@ -16,24 +16,180 @@
 
 #include "host/commands/run_cvd/boot_state_machine.h"
 
+#include <gflags/gflags.h>
 #include <memory>
 #include <thread>
 
 #include "android-base/logging.h"
 #include "common/libs/fs/shared_fd.h"
+#include "common/libs/utils/tee_logging.h"
 #include "host/commands/kernel_log_monitor/kernel_log_server.h"
 #include "host/commands/kernel_log_monitor/utils.h"
 #include "host/commands/run_cvd/runner_defs.h"
+#include "host/libs/config/feature.h"
+
+DEFINE_int32(reboot_notification_fd, -1,
+             "A file descriptor to notify when boot completes.");
 
 namespace cuttlefish {
+namespace {
 
-CvdBootStateMachine::CvdBootStateMachine(SharedFD fg_launcher_pipe,
-                                         SharedFD reboot_notification,
-                                         SharedFD boot_events_pipe)
-    : fg_launcher_pipe_(fg_launcher_pipe),
-      reboot_notification_(reboot_notification),
-      state_(kBootStarted) {
-  boot_event_handler_ = std::thread([this, boot_events_pipe]() {
+// Forks and returns the write end of a pipe to the child process. The parent
+// process waits for boot events to come through the pipe and exits accordingly.
+SharedFD DaemonizeLauncher(const CuttlefishConfig& config) {
+  auto instance = config.ForDefaultInstance();
+  SharedFD read_end, write_end;
+  if (!SharedFD::Pipe(&read_end, &write_end)) {
+    LOG(ERROR) << "Unable to create pipe";
+    return {};  // a closed FD
+  }
+  auto pid = fork();
+  if (pid) {
+    // Explicitly close here, otherwise we may end up reading forever if the
+    // child process dies.
+    write_end->Close();
+    RunnerExitCodes exit_code;
+    auto bytes_read = read_end->Read(&exit_code, sizeof(exit_code));
+    if (bytes_read != sizeof(exit_code)) {
+      LOG(ERROR) << "Failed to read a complete exit code, read " << bytes_read
+                 << " bytes only instead of the expected " << sizeof(exit_code);
+      exit_code = RunnerExitCodes::kPipeIOError;
+    } else if (exit_code == RunnerExitCodes::kSuccess) {
+      LOG(INFO) << "Virtual device booted successfully";
+    } else if (exit_code == RunnerExitCodes::kVirtualDeviceBootFailed) {
+      LOG(ERROR) << "Virtual device failed to boot";
+    } else {
+      LOG(ERROR) << "Unexpected exit code: " << exit_code;
+    }
+    if (exit_code == RunnerExitCodes::kSuccess) {
+      LOG(INFO) << kBootCompletedMessage;
+    } else {
+      LOG(INFO) << kBootFailedMessage;
+    }
+    std::exit(exit_code);
+  } else {
+    // The child returns the write end of the pipe
+    if (daemon(/*nochdir*/ 1, /*noclose*/ 1) != 0) {
+      LOG(ERROR) << "Failed to daemonize child process: " << strerror(errno);
+      std::exit(RunnerExitCodes::kDaemonizationError);
+    }
+    // Redirect standard I/O
+    auto log_path = instance.launcher_log_path();
+    auto log = SharedFD::Open(log_path.c_str(), O_CREAT | O_WRONLY | O_APPEND,
+                              S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+    if (!log->IsOpen()) {
+      LOG(ERROR) << "Failed to create launcher log file: " << log->StrError();
+      std::exit(RunnerExitCodes::kDaemonizationError);
+    }
+    ::android::base::SetLogger(
+        TeeLogger({{LogFileSeverity(), log, MetadataLevel::FULL}}));
+    auto dev_null = SharedFD::Open("/dev/null", O_RDONLY);
+    if (!dev_null->IsOpen()) {
+      LOG(ERROR) << "Failed to open /dev/null: " << dev_null->StrError();
+      std::exit(RunnerExitCodes::kDaemonizationError);
+    }
+    if (dev_null->UNMANAGED_Dup2(0) < 0) {
+      LOG(ERROR) << "Failed dup2 stdin: " << dev_null->StrError();
+      std::exit(RunnerExitCodes::kDaemonizationError);
+    }
+    if (log->UNMANAGED_Dup2(1) < 0) {
+      LOG(ERROR) << "Failed dup2 stdout: " << log->StrError();
+      std::exit(RunnerExitCodes::kDaemonizationError);
+    }
+    if (log->UNMANAGED_Dup2(2) < 0) {
+      LOG(ERROR) << "Failed dup2 seterr: " << log->StrError();
+      std::exit(RunnerExitCodes::kDaemonizationError);
+    }
+
+    read_end->Close();
+    return write_end;
+  }
+}
+
+class ProcessLeader : public Feature {
+ public:
+  INJECT(ProcessLeader(const CuttlefishConfig& config)) : config_(config) {}
+
+  SharedFD ForegroundLauncherPipe() { return foreground_launcher_pipe_; }
+
+  // Feature
+  std::string Name() const override { return "ProcessLeader"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    /* These two paths result in pretty different process state, but both
+     * achieve the same goal of making the current process the leader of a
+     * process group, and are therefore grouped together. */
+    if (config_.run_as_daemon()) {
+      foreground_launcher_pipe_ = DaemonizeLauncher(config_);
+      if (!foreground_launcher_pipe_->IsOpen()) {
+        return false;
+      }
+    } else {
+      // Make sure the launcher runs in its own process group even when running
+      // in the foreground
+      if (getsid(0) != getpid()) {
+        int retval = setpgid(0, 0);
+        if (retval) {
+          PLOG(ERROR) << "Failed to create new process group: ";
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  SharedFD foreground_launcher_pipe_;
+};
+
+// Maintains the state of the boot process, once a final state is reached
+// (success or failure) it sends the appropriate exit code to the foreground
+// launcher process
+class CvdBootStateMachine : public Feature {
+ public:
+  INJECT(CvdBootStateMachine(ProcessLeader& process_leader,
+                             KernelLogPipeProvider& kernel_log_pipe_provider))
+      : process_leader_(process_leader),
+        kernel_log_pipe_provider_(kernel_log_pipe_provider),
+        state_(kBootStarted) {}
+
+  ~CvdBootStateMachine() { boot_event_handler_.join(); }
+
+  // Feature
+  std::string Name() const override { return "CvdBootStateMachine"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const {
+    return {
+        static_cast<Feature*>(&process_leader_),
+        static_cast<Feature*>(&kernel_log_pipe_provider_),
+    };
+  }
+  bool Setup() override {
+    fg_launcher_pipe_ = process_leader_.ForegroundLauncherPipe();
+    if (FLAGS_reboot_notification_fd >= 0) {
+      reboot_notification_ = SharedFD::Dup(FLAGS_reboot_notification_fd);
+      if (!reboot_notification_->IsOpen()) {
+        LOG(ERROR) << "Could not dup fd given for reboot_notification_fd";
+        return false;
+      }
+      close(FLAGS_reboot_notification_fd);
+    }
+    SharedFD boot_events_pipe = kernel_log_pipe_provider_.KernelLogPipe();
+    if (!boot_events_pipe->IsOpen()) {
+      LOG(ERROR) << "Could not get boot events pipe";
+      return false;
+    }
+    boot_event_handler_ = std::thread(
+        [this, boot_events_pipe]() { ThreadLoop(boot_events_pipe); });
+    return true;
+  }
+
+  void ThreadLoop(SharedFD boot_events_pipe) {
     while (true) {
       SharedFDSet fd_set;
       fd_set.Set(boot_events_pipe);
@@ -50,61 +206,72 @@
         break;
       }
     }
-  });
-}
+  }
 
-CvdBootStateMachine::~CvdBootStateMachine() { boot_event_handler_.join(); }
+  // Returns true if the machine is left in a final state
+  bool OnBootEvtReceived(SharedFD boot_events_pipe) {
+    std::optional<monitor::ReadEventResult> read_result =
+        monitor::ReadEvent(boot_events_pipe);
+    if (!read_result) {
+      LOG(ERROR) << "Failed to read a complete kernel log boot event.";
+      state_ |= kGuestBootFailed;
+      return MaybeWriteNotification();
+    }
 
-// Returns true if the machine is left in a final state
-bool CvdBootStateMachine::OnBootEvtReceived(SharedFD boot_events_pipe) {
-  std::optional<monitor::ReadEventResult> read_result =
-      monitor::ReadEvent(boot_events_pipe);
-  if (!read_result) {
-    LOG(ERROR) << "Failed to read a complete kernel log boot event.";
-    state_ |= kGuestBootFailed;
+    if (read_result->event == monitor::Event::BootCompleted) {
+      LOG(INFO) << "Virtual device booted successfully";
+      state_ |= kGuestBootCompleted;
+    } else if (read_result->event == monitor::Event::BootFailed) {
+      LOG(ERROR) << "Virtual device failed to boot";
+      state_ |= kGuestBootFailed;
+    }  // Ignore the other signals
+
     return MaybeWriteNotification();
   }
+  bool BootCompleted() const { return state_ & kGuestBootCompleted; }
+  bool BootFailed() const { return state_ & kGuestBootFailed; }
 
-  if (read_result->event == monitor::Event::BootCompleted) {
-    LOG(INFO) << "Virtual device booted successfully";
-    state_ |= kGuestBootCompleted;
-  } else if (read_result->event == monitor::Event::BootFailed) {
-    LOG(ERROR) << "Virtual device failed to boot";
-    state_ |= kGuestBootFailed;
-  }  // Ignore the other signals
-
-  return MaybeWriteNotification();
-}
-
-bool CvdBootStateMachine::BootCompleted() const {
-  return state_ & kGuestBootCompleted;
-}
-
-bool CvdBootStateMachine::BootFailed() const {
-  return state_ & kGuestBootFailed;
-}
-
-void CvdBootStateMachine::SendExitCode(RunnerExitCodes exit_code, SharedFD fd) {
-  fd->Write(&exit_code, sizeof(exit_code));
-  // The foreground process will exit after receiving the exit code, if we try
-  // to write again we'll get a SIGPIPE
-  fd->Close();
-}
-
-bool CvdBootStateMachine::MaybeWriteNotification() {
-  std::vector<SharedFD> fds = {reboot_notification_, fg_launcher_pipe_};
-  for (auto& fd : fds) {
-    if (fd->IsOpen()) {
-      if (BootCompleted()) {
-        SendExitCode(RunnerExitCodes::kSuccess, fd);
-      } else if (state_ & kGuestBootFailed) {
-        SendExitCode(RunnerExitCodes::kVirtualDeviceBootFailed, fd);
+  void SendExitCode(RunnerExitCodes exit_code, SharedFD fd) {
+    fd->Write(&exit_code, sizeof(exit_code));
+    // The foreground process will exit after receiving the exit code, if we try
+    // to write again we'll get a SIGPIPE
+    fd->Close();
+  }
+  bool MaybeWriteNotification() {
+    std::vector<SharedFD> fds = {reboot_notification_, fg_launcher_pipe_};
+    for (auto& fd : fds) {
+      if (fd->IsOpen()) {
+        if (BootCompleted()) {
+          SendExitCode(RunnerExitCodes::kSuccess, fd);
+        } else if (state_ & kGuestBootFailed) {
+          SendExitCode(RunnerExitCodes::kVirtualDeviceBootFailed, fd);
+        }
       }
     }
+    // Either we sent the code before or just sent it, in any case the state is
+    // final
+    return BootCompleted() || (state_ & kGuestBootFailed);
   }
-  // Either we sent the code before or just sent it, in any case the state is
-  // final
-  return BootCompleted() || (state_ & kGuestBootFailed);
+
+  ProcessLeader& process_leader_;
+  KernelLogPipeProvider& kernel_log_pipe_provider_;
+
+  std::thread boot_event_handler_;
+  SharedFD fg_launcher_pipe_;
+  SharedFD reboot_notification_;
+  int state_;
+  static const int kBootStarted = 0;
+  static const int kGuestBootCompleted = 1 << 0;
+  static const int kGuestBootFailed = 1 << 1;
+};
+
+}  // namespace
+
+fruit::Component<fruit::Required<const CuttlefishConfig, KernelLogPipeProvider>>
+bootStateMachineComponent() {
+  return fruit::createComponent()
+      .addMultibinding<Feature, ProcessLeader>()
+      .addMultibinding<Feature, CvdBootStateMachine>();
 }
 
 }  // namespace cuttlefish
diff --git a/host/commands/run_cvd/boot_state_machine.h b/host/commands/run_cvd/boot_state_machine.h
index 0d02e72..796bb6f 100644
--- a/host/commands/run_cvd/boot_state_machine.h
+++ b/host/commands/run_cvd/boot_state_machine.h
@@ -15,39 +15,13 @@
  */
 #pragma once
 
-#include <memory>
-#include <thread>
-
-#include "common/libs/fs/shared_fd.h"
-#include "host/commands/run_cvd/runner_defs.h"
+#include "host/commands/run_cvd/launch.h"
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/feature.h"
 
 namespace cuttlefish {
 
-// Maintains the state of the boot process, once a final state is reached
-// (success or failure) it sends the appropriate exit code to the foreground
-// launcher process
-class CvdBootStateMachine {
- public:
-  CvdBootStateMachine(SharedFD fg_launcher_pipe, SharedFD reboot_notification,
-                      SharedFD boot_events_pipe);
-  ~CvdBootStateMachine();
-
- private:
-  // Returns true if the machine is left in a final state
-  bool OnBootEvtReceived(SharedFD boot_events_pipe);
-  bool BootCompleted() const;
-  bool BootFailed() const;
-
-  void SendExitCode(RunnerExitCodes exit_code, SharedFD fd);
-  bool MaybeWriteNotification();
-
-  std::thread boot_event_handler_;
-  SharedFD fg_launcher_pipe_;
-  SharedFD reboot_notification_;
-  int state_;
-  static const int kBootStarted = 0;
-  static const int kGuestBootCompleted = 1 << 0;
-  static const int kGuestBootFailed = 1 << 1;
-};
+fruit::Component<fruit::Required<const CuttlefishConfig, KernelLogPipeProvider>>
+bootStateMachineComponent();
 
 }  // namespace cuttlefish
diff --git a/host/commands/run_cvd/launch.cc b/host/commands/run_cvd/launch.cc
index a6184b2..e9ec0c8 100644
--- a/host/commands/run_cvd/launch.cc
+++ b/host/commands/run_cvd/launch.cc
@@ -16,18 +16,29 @@
 #include "host/commands/run_cvd/launch.h"
 
 #include <android-base/logging.h>
+
+#include <unordered_set>
 #include <utility>
+#include <vector>
 
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/utils/files.h"
+#include "common/libs/utils/network.h"
 #include "common/libs/utils/subprocess.h"
 #include "host/commands/run_cvd/process_monitor.h"
+#include "host/commands/run_cvd/reporting.h"
 #include "host/commands/run_cvd/runner_defs.h"
 #include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/inject.h"
 #include "host/libs/config/known_paths.h"
+#include "host/libs/vm_manager/crosvm_builder.h"
+#include "host/libs/vm_manager/crosvm_manager.h"
+#include "host/libs/vm_manager/vm_manager.h"
 
 namespace cuttlefish {
 
+using vm_manager::VmManager;
+
 namespace {
 
 template <typename T>
@@ -39,335 +50,804 @@
 
 }  // namespace
 
-KernelLogMonitorData LaunchKernelLogMonitor(
-    const CuttlefishConfig& config, unsigned int number_of_event_pipes) {
-  auto instance = config.ForDefaultInstance();
-  auto log_name = instance.kernel_log_pipe_name();
-  if (mkfifo(log_name.c_str(), 0600) != 0) {
-    LOG(ERROR) << "Unable to create named pipe at " << log_name << ": "
-               << strerror(errno);
-    return {};
+class KernelLogMonitor : public CommandSource,
+                         public KernelLogPipeProvider,
+                         public DiagnosticInformation {
+ public:
+  INJECT(KernelLogMonitor(const CuttlefishConfig::InstanceSpecific& instance))
+      : instance_(instance) {}
+
+  // DiagnosticInformation
+  std::vector<std::string> Diagnostics() const override {
+    return {"Kernel log: " + instance_.PerInstancePath("kernel.log")};
   }
 
-  SharedFD pipe;
-  // Open the pipe here (from the launcher) to ensure the pipe is not deleted
-  // due to the usage counters in the kernel reaching zero. If this is not done
-  // and the kernel_log_monitor crashes for some reason the VMM may get SIGPIPE.
-  pipe = SharedFD::Open(log_name.c_str(), O_RDWR);
-  Command command(KernelLogMonitorBinary());
-  command.AddParameter("-log_pipe_fd=", pipe);
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command command(KernelLogMonitorBinary());
+    command.AddParameter("-log_pipe_fd=", fifo_);
 
-  KernelLogMonitorData ret;
-
-  if (number_of_event_pipes > 0) {
-    command.AddParameter("-subscriber_fds=");
-    for (unsigned int i = 0; i < number_of_event_pipes; ++i) {
-      SharedFD event_pipe_write_end, event_pipe_read_end;
-      if (!SharedFD::Pipe(&event_pipe_read_end, &event_pipe_write_end)) {
-        LOG(ERROR) << "Unable to create kernel log events pipe: " << strerror(errno);
-        std::exit(RunnerExitCodes::kPipeIOError);
+    if (!event_pipe_write_ends_.empty()) {
+      command.AddParameter("-subscriber_fds=");
+      for (size_t i = 0; i < event_pipe_write_ends_.size(); i++) {
+        if (i > 0) {
+          command.AppendToLastParameter(",");
+        }
+        command.AppendToLastParameter(event_pipe_write_ends_[i]);
       }
-      if (i > 0) {
-        command.AppendToLastParameter(",");
+    }
+
+    return single_element_emplace(std::move(command));
+  }
+
+  // KernelLogPipeProvider
+  SharedFD KernelLogPipe() override {
+    CHECK(!event_pipe_read_ends_.empty()) << "No more kernel pipes left";
+    SharedFD ret = event_pipe_read_ends_.back();
+    event_pipe_read_ends_.pop_back();
+    return ret;
+  }
+
+ private:
+  // Feature
+  bool Enabled() const override { return true; }
+  std::string Name() const override { return "KernelLogMonitor"; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    auto log_name = instance_.kernel_log_pipe_name();
+    if (mkfifo(log_name.c_str(), 0600) != 0) {
+      LOG(ERROR) << "Unable to create named pipe at " << log_name << ": "
+                 << strerror(errno);
+      return false;
+    }
+
+    // Open the pipe here (from the launcher) to ensure the pipe is not deleted
+    // due to the usage counters in the kernel reaching zero. If this is not
+    // done and the kernel_log_monitor crashes for some reason the VMM may get
+    // SIGPIPE.
+    fifo_ = SharedFD::Open(log_name, O_RDWR);
+    if (!fifo_->IsOpen()) {
+      LOG(ERROR) << "Unable to open \"" << log_name << "\"";
+      return false;
+    }
+
+    // TODO(schuffelen): Find a way to calculate this dynamically.
+    int number_of_event_pipes = 4;
+    if (number_of_event_pipes > 0) {
+      for (unsigned int i = 0; i < number_of_event_pipes; ++i) {
+        SharedFD event_pipe_write_end, event_pipe_read_end;
+        if (!SharedFD::Pipe(&event_pipe_read_end, &event_pipe_write_end)) {
+          PLOG(ERROR) << "Unable to create kernel log events pipe: ";
+          return false;
+        }
+        event_pipe_write_ends_.push_back(event_pipe_write_end);
+        event_pipe_read_ends_.push_back(event_pipe_read_end);
       }
-      command.AppendToLastParameter(event_pipe_write_end);
-      ret.pipes.push_back(event_pipe_read_end);
     }
+    return true;
   }
 
-  ret.commands.emplace_back(std::move(command));
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  SharedFD fifo_;
+  std::vector<SharedFD> event_pipe_write_ends_;
+  std::vector<SharedFD> event_pipe_read_ends_;
+};
 
-  return ret;
-}
+class LogTeeCreator {
+ public:
+  INJECT(LogTeeCreator(const CuttlefishConfig::InstanceSpecific& instance))
+      : instance_(instance) {}
 
-std::vector<Command> LaunchRootCanal(const CuttlefishConfig& config) {
-  if (!config.enable_host_bluetooth()) {
-    return {};
+  Command CreateLogTee(Command& cmd, const std::string& process_name) {
+    auto name_with_ext = process_name + "_logs.fifo";
+    auto logs_path = instance_.PerInstanceInternalPath(name_with_ext.c_str());
+    auto logs = SharedFD::Fifo(logs_path, 0666);
+    if (!logs->IsOpen()) {
+      LOG(FATAL) << "Failed to create fifo for " << process_name
+                 << " output: " << logs->StrError();
+    }
+
+    cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdOut, logs);
+    cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdErr, logs);
+
+    Command log_tee_cmd(HostBinaryPath("log_tee"));
+    log_tee_cmd.AddParameter("--process_name=", process_name);
+    log_tee_cmd.AddParameter("--log_fd_in=", logs);
+
+    return log_tee_cmd;
   }
 
-  auto instance = config.ForDefaultInstance();
-  Command command(RootCanalBinary());
+ private:
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
 
-  // Test port
-  command.AddParameter(instance.rootcanal_test_port());
-  // HCI server port
-  command.AddParameter(instance.rootcanal_hci_port());
-  // Link server port
-  command.AddParameter(instance.rootcanal_link_port());
-  // Bluetooth controller properties file
-  command.AddParameter("--controller_properties_file=",
-                       instance.rootcanal_config_file());
-  // Default commands file
-  command.AddParameter("--default_commands_file=",
-                       instance.rootcanal_default_commands_file());
+class RootCanal : public CommandSource {
+ public:
+  INJECT(RootCanal(const CuttlefishConfig& config,
+                   const CuttlefishConfig::InstanceSpecific& instance,
+                   LogTeeCreator& log_tee))
+      : config_(config), instance_(instance), log_tee_(log_tee) {}
 
-  return single_element_emplace(std::move(command));
-}
-
-std::vector<Command> LaunchLogcatReceiver(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  auto log_name = instance.logcat_pipe_name();
-  if (mkfifo(log_name.c_str(), 0600) != 0) {
-    LOG(ERROR) << "Unable to create named pipe at " << log_name << ": "
-               << strerror(errno);
-    return {};
-  }
-
-  SharedFD pipe;
-  // Open the pipe here (from the launcher) to ensure the pipe is not deleted
-  // due to the usage counters in the kernel reaching zero. If this is not done
-  // and the logcat_receiver crashes for some reason the VMM may get SIGPIPE.
-  pipe = SharedFD::Open(log_name.c_str(), O_RDWR);
-  Command command(LogcatReceiverBinary());
-  command.AddParameter("-log_pipe_fd=", pipe);
-
-  return single_element_emplace(std::move(command));
-}
-
-std::vector<Command> LaunchConfigServer(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  auto port = instance.config_server_port();
-  auto socket = SharedFD::VsockServer(port, SOCK_STREAM);
-  if (!socket->IsOpen()) {
-    LOG(ERROR) << "Unable to create configuration server socket: "
-               << socket->StrError();
-    std::exit(RunnerExitCodes::kConfigServerError);
-  }
-  Command cmd(ConfigServerBinary());
-  cmd.AddParameter("-server_fd=", socket);
-  return single_element_emplace(std::move(cmd));
-}
-
-std::vector<Command> LaunchTombstoneReceiver(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-
-  std::string tombstoneDir = instance.PerInstancePath("tombstones");
-  if (!DirectoryExists(tombstoneDir.c_str())) {
-    LOG(DEBUG) << "Setting up " << tombstoneDir;
-    if (mkdir(tombstoneDir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) <
-        0) {
-      LOG(ERROR) << "Failed to create tombstone directory: " << tombstoneDir
-                 << ". Error: " << errno;
-      exit(RunnerExitCodes::kTombstoneDirCreationError);
+  // CommandSource
+  std::vector<Command> Commands() override {
+    if (!Enabled()) {
       return {};
     }
+    Command command(RootCanalBinary());
+
+    // Test port
+    command.AddParameter(instance_.rootcanal_test_port());
+    // HCI server port
+    command.AddParameter(instance_.rootcanal_hci_port());
+    // Link server port
+    command.AddParameter(instance_.rootcanal_link_port());
+    // Bluetooth controller properties file
+    command.AddParameter("--controller_properties_file=",
+                         instance_.rootcanal_config_file());
+    // Default commands file
+    command.AddParameter("--default_commands_file=",
+                         instance_.rootcanal_default_commands_file());
+
+    std::vector<Command> commands;
+    commands.emplace_back(log_tee_.CreateLogTee(command, "rootcanal"));
+    commands.emplace_back(std::move(command));
+    return commands;
   }
 
-  auto port = instance.tombstone_receiver_port();
-  auto socket = SharedFD::VsockServer(port, SOCK_STREAM);
-  if (!socket->IsOpen()) {
-    LOG(ERROR) << "Unable to create tombstone server socket: "
-               << socket->StrError();
-    std::exit(RunnerExitCodes::kTombstoneServerError);
-    return {};
-  }
-  Command cmd(TombstoneReceiverBinary());
-  cmd.AddParameter("-server_fd=", socket);
-  cmd.AddParameter("-tombstone_dir=", tombstoneDir);
+  // Feature
+  std::string Name() const override { return "RootCanal"; }
+  bool Enabled() const override { return config_.enable_host_bluetooth(); }
 
-  return single_element_emplace(std::move(cmd));
-}
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override { return true; }
 
-std::vector<Command> LaunchMetrics() {
-  return single_element_emplace(Command(MetricsBinary()));
-}
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  LogTeeCreator& log_tee_;
+};
 
-std::vector<Command> LaunchGnssGrpcProxyServerIfEnabled(
-    const CuttlefishConfig& config) {
-  if (!config.enable_gnss_grpc_proxy() || !FileExists(GnssGrpcProxyBinary())) {
-    return {};
+class LogcatReceiver : public CommandSource, public DiagnosticInformation {
+ public:
+  INJECT(LogcatReceiver(const CuttlefishConfig::InstanceSpecific& instance))
+      : instance_(instance) {}
+  // DiagnosticInformation
+  std::vector<std::string> Diagnostics() const override {
+    return {"Logcat output: " + instance_.logcat_path()};
   }
 
-  Command gnss_grpc_proxy_cmd(GnssGrpcProxyBinary());
-  auto instance = config.ForDefaultInstance();
-
-  auto gnss_in_pipe_name = instance.gnss_in_pipe_name();
-  if (mkfifo(gnss_in_pipe_name.c_str(), 0600) != 0) {
-    auto error = errno;
-    LOG(ERROR) << "Failed to create gnss input fifo for crosvm: "
-               << strerror(error);
-    return {};
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command command(LogcatReceiverBinary());
+    command.AddParameter("-log_pipe_fd=", pipe_);
+    return single_element_emplace(std::move(command));
   }
 
-  auto gnss_out_pipe_name = instance.gnss_out_pipe_name();
-  if (mkfifo(gnss_out_pipe_name.c_str(), 0660) != 0) {
-    auto error = errno;
-    LOG(ERROR) << "Failed to create gnss output fifo for crosvm: "
-               << strerror(error);
-    return {};
-  }
+  // Feature
+  std::string Name() const override { return "LogcatReceiver"; }
+  bool Enabled() const override { return true; }
 
-  // These fds will only be read from or written to, but open them with
-  // read and write access to keep them open in case the subprocesses exit
-  SharedFD gnss_grpc_proxy_in_wr =
-      SharedFD::Open(gnss_in_pipe_name.c_str(), O_RDWR);
-  if (!gnss_grpc_proxy_in_wr->IsOpen()) {
-    LOG(ERROR) << "Failed to open gnss_grpc_proxy input fifo for writes: "
-               << gnss_grpc_proxy_in_wr->StrError();
-    return {};
-  }
-
-  SharedFD gnss_grpc_proxy_out_rd =
-      SharedFD::Open(gnss_out_pipe_name.c_str(), O_RDWR);
-  if (!gnss_grpc_proxy_out_rd->IsOpen()) {
-    LOG(ERROR) << "Failed to open gnss_grpc_proxy output fifo for reads: "
-               << gnss_grpc_proxy_out_rd->StrError();
-    return {};
-  }
-
-  const unsigned gnss_grpc_proxy_server_port =
-      instance.gnss_grpc_proxy_server_port();
-  gnss_grpc_proxy_cmd.AddParameter("--gnss_in_fd=", gnss_grpc_proxy_in_wr);
-  gnss_grpc_proxy_cmd.AddParameter("--gnss_out_fd=", gnss_grpc_proxy_out_rd);
-  gnss_grpc_proxy_cmd.AddParameter("--gnss_grpc_port=",
-                                   gnss_grpc_proxy_server_port);
-  if (!instance.gnss_file_path().empty()) {
-    // If path is provided, proxy will start as local mode.
-    gnss_grpc_proxy_cmd.AddParameter("--gnss_file_path=",
-                                     instance.gnss_file_path());
-  }
-  return single_element_emplace(std::move(gnss_grpc_proxy_cmd));
-}
-
-std::vector<Command> LaunchBluetoothConnector(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  std::vector<std::string> fifo_paths = {
-      instance.PerInstanceInternalPath("bt_fifo_vm.in"),
-      instance.PerInstanceInternalPath("bt_fifo_vm.out"),
-  };
-  std::vector<SharedFD> fifos;
-  for (const auto& path : fifo_paths) {
-    unlink(path.c_str());
-    if (mkfifo(path.c_str(), 0660) < 0) {
-      PLOG(ERROR) << "Could not create " << path;
-      return {};
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    auto log_name = instance_.logcat_pipe_name();
+    if (mkfifo(log_name.c_str(), 0600) != 0) {
+      LOG(ERROR) << "Unable to create named pipe at " << log_name << ": "
+                 << strerror(errno);
+      return false;
     }
-    auto fd = SharedFD::Open(path, O_RDWR);
-    if (!fd->IsOpen()) {
-      LOG(ERROR) << "Could not open " << path << ": " << fd->StrError();
-      return {};
+    // Open the pipe here (from the launcher) to ensure the pipe is not deleted
+    // due to the usage counters in the kernel reaching zero. If this is not
+    // done and the logcat_receiver crashes for some reason the VMM may get
+    // SIGPIPE.
+    pipe_ = SharedFD::Open(log_name.c_str(), O_RDWR);
+    if (!pipe_->IsOpen()) {
+      LOG(ERROR) << "Can't open \"" << log_name << "\": " << pipe_->StrError();
+      return false;
     }
-    fifos.push_back(fd);
+    return true;
   }
 
-  Command command(DefaultHostArtifactsPath("bin/bt_connector"));
-  command.AddParameter("-bt_out=", fifos[0]);
-  command.AddParameter("-bt_in=", fifos[1]);
-  command.AddParameter("-hci_port=", instance.rootcanal_hci_port());
-  command.AddParameter("-link_port=", instance.rootcanal_link_port());
-  command.AddParameter("-test_port=", instance.rootcanal_test_port());
-  return single_element_emplace(std::move(command));
-}
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  SharedFD pipe_;
+};
 
-std::vector<Command> LaunchSecureEnvironment(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  std::vector<std::string> fifo_paths = {
-    instance.PerInstanceInternalPath("keymaster_fifo_vm.in"),
-    instance.PerInstanceInternalPath("keymaster_fifo_vm.out"),
-    instance.PerInstanceInternalPath("gatekeeper_fifo_vm.in"),
-    instance.PerInstanceInternalPath("gatekeeper_fifo_vm.out"),
-  };
-  std::vector<SharedFD> fifos;
-  for (const auto& path : fifo_paths) {
-    unlink(path.c_str());
-    if (mkfifo(path.c_str(), 0600) < 0) {
-      PLOG(ERROR) << "Could not create " << path;
-      return {};
+class ConfigServer : public CommandSource {
+ public:
+  INJECT(ConfigServer(const CuttlefishConfig::InstanceSpecific& instance))
+      : instance_(instance) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command cmd(ConfigServerBinary());
+    cmd.AddParameter("-server_fd=", socket_);
+    return single_element_emplace(std::move(cmd));
+  }
+
+  // Feature
+  std::string Name() const override { return "ConfigServer"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    auto port = instance_.config_server_port();
+    socket_ = SharedFD::VsockServer(port, SOCK_STREAM);
+    if (!socket_->IsOpen()) {
+      LOG(ERROR) << "Unable to create configuration server socket: "
+                 << socket_->StrError();
+      return false;
     }
-    auto fd = SharedFD::Open(path, O_RDWR);
-    if (!fd->IsOpen()) {
-      LOG(ERROR) << "Could not open " << path << ": " << fd->StrError();
-      return {};
+    return true;
+  }
+
+ private:
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  SharedFD socket_;
+};
+
+class TombstoneReceiver : public CommandSource {
+ public:
+  INJECT(TombstoneReceiver(const CuttlefishConfig::InstanceSpecific& instance))
+      : instance_(instance) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command cmd(TombstoneReceiverBinary());
+    cmd.AddParameter("-server_fd=", socket_);
+    cmd.AddParameter("-tombstone_dir=", tombstone_dir_);
+    return single_element_emplace(std::move(cmd));
+  }
+
+  // Feature
+  std::string Name() const override { return "TombstoneReceiver"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    tombstone_dir_ = instance_.PerInstancePath("tombstones");
+    if (!DirectoryExists(tombstone_dir_.c_str())) {
+      LOG(DEBUG) << "Setting up " << tombstone_dir_;
+      if (mkdir(tombstone_dir_.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) <
+          0) {
+        LOG(ERROR) << "Failed to create tombstone directory: " << tombstone_dir_
+                   << ". Error: " << errno;
+        return false;
+      }
     }
-    fifos.push_back(fd);
+
+    auto port = instance_.tombstone_receiver_port();
+    socket_ = SharedFD::VsockServer(port, SOCK_STREAM);
+    if (!socket_->IsOpen()) {
+      LOG(ERROR) << "Unable to create tombstone server socket: "
+                 << socket_->StrError();
+      return false;
+    }
+    return true;
   }
 
-  Command command(HostBinaryPath("secure_env"));
-  command.AddParameter("-keymaster_fd_out=", fifos[0]);
-  command.AddParameter("-keymaster_fd_in=", fifos[1]);
-  command.AddParameter("-gatekeeper_fd_out=", fifos[2]);
-  command.AddParameter("-gatekeeper_fd_in=", fifos[3]);
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  SharedFD socket_;
+  std::string tombstone_dir_;
+};
 
-  const auto& secure_hals = config.secure_hals();
-  bool secure_keymint = secure_hals.count(SecureHal::Keymint) > 0;
-  command.AddParameter("-keymint_impl=", secure_keymint ? "tpm" : "software");
-  bool secure_gatekeeper = secure_hals.count(SecureHal::Gatekeeper) > 0;
-  auto gatekeeper_impl = secure_gatekeeper ? "tpm" : "software";
-  command.AddParameter("-gatekeeper_impl=", gatekeeper_impl);
+class MetricsService : public CommandSource {
+ public:
+  INJECT(MetricsService(const CuttlefishConfig& config)) : config_(config) {}
 
-  return single_element_emplace(std::move(command));
+  // CommandSource
+  std::vector<Command> Commands() override {
+    return single_element_emplace(Command(MetricsBinary()));
+  }
+
+  // Feature
+  std::string Name() const override { return "MetricsService"; }
+  bool Enabled() const override {
+    return config_.enable_metrics() == CuttlefishConfig::kYes;
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override { return true; }
+
+ private:
+  const CuttlefishConfig& config_;
+};
+
+class GnssGrpcProxyServer : public CommandSource {
+ public:
+  INJECT(
+      GnssGrpcProxyServer(const CuttlefishConfig& config,
+                          const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command gnss_grpc_proxy_cmd(GnssGrpcProxyBinary());
+    const unsigned gnss_grpc_proxy_server_port =
+        instance_.gnss_grpc_proxy_server_port();
+    gnss_grpc_proxy_cmd.AddParameter("--gnss_in_fd=", gnss_grpc_proxy_in_wr_);
+    gnss_grpc_proxy_cmd.AddParameter("--gnss_out_fd=", gnss_grpc_proxy_out_rd_);
+    gnss_grpc_proxy_cmd.AddParameter("--gnss_grpc_port=",
+                                     gnss_grpc_proxy_server_port);
+    if (!instance_.gnss_file_path().empty()) {
+      // If path is provided, proxy will start as local mode.
+      gnss_grpc_proxy_cmd.AddParameter("--gnss_file_path=",
+                                       instance_.gnss_file_path());
+    }
+    return single_element_emplace(std::move(gnss_grpc_proxy_cmd));
+  }
+
+  // Feature
+  std::string Name() const override { return "GnssGrpcProxyServer"; }
+  bool Enabled() const override {
+    return config_.enable_gnss_grpc_proxy() &&
+           FileExists(GnssGrpcProxyBinary());
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    std::vector<SharedFD> fifos;
+    std::vector<std::string> fifo_paths = {
+        instance_.PerInstanceInternalPath("gnsshvc_fifo_vm.in"),
+        instance_.PerInstanceInternalPath("gnsshvc_fifo_vm.out"),
+    };
+    for (const auto& path : fifo_paths) {
+      unlink(path.c_str());
+      if (mkfifo(path.c_str(), 0660) < 0) {
+        PLOG(ERROR) << "Could not create " << path;
+        return false;
+      }
+      auto fd = SharedFD::Open(path, O_RDWR);
+      if (!fd->IsOpen()) {
+        LOG(ERROR) << "Could not open " << path << ": " << fd->StrError();
+        return false;
+      }
+      fifos.push_back(fd);
+    }
+
+    gnss_grpc_proxy_in_wr_ = fifos[0];
+    gnss_grpc_proxy_out_rd_ = fifos[1];
+    return true;
+  }
+
+ private:
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  SharedFD gnss_grpc_proxy_in_wr_;
+  SharedFD gnss_grpc_proxy_out_rd_;
+};
+
+class BluetoothConnector : public CommandSource {
+ public:
+  INJECT(BluetoothConnector(const CuttlefishConfig& config,
+                            const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command command(DefaultHostArtifactsPath("bin/bt_connector"));
+    command.AddParameter("-bt_out=", fifos_[0]);
+    command.AddParameter("-bt_in=", fifos_[1]);
+    command.AddParameter("-hci_port=", instance_.rootcanal_hci_port());
+    command.AddParameter("-link_port=", instance_.rootcanal_link_port());
+    command.AddParameter("-test_port=", instance_.rootcanal_test_port());
+    return single_element_emplace(std::move(command));
+  }
+
+  // Feature
+  std::string Name() const override { return "BluetoothConnector"; }
+  bool Enabled() const override { return config_.enable_host_bluetooth(); }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    std::vector<std::string> fifo_paths = {
+        instance_.PerInstanceInternalPath("bt_fifo_vm.in"),
+        instance_.PerInstanceInternalPath("bt_fifo_vm.out"),
+    };
+    for (const auto& path : fifo_paths) {
+      unlink(path.c_str());
+      if (mkfifo(path.c_str(), 0660) < 0) {
+        PLOG(ERROR) << "Could not create " << path;
+        return false;
+      }
+      auto fd = SharedFD::Open(path, O_RDWR);
+      if (!fd->IsOpen()) {
+        LOG(ERROR) << "Could not open " << path << ": " << fd->StrError();
+        return false;
+      }
+      fifos_.push_back(fd);
+    }
+    return true;
+  }
+
+ private:
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  std::vector<SharedFD> fifos_;
+};
+
+class SecureEnvironment : public CommandSource {
+ public:
+  INJECT(SecureEnvironment(const CuttlefishConfig& config,
+                           const CuttlefishConfig::InstanceSpecific& instance,
+                           KernelLogPipeProvider& kernel_log_pipe_provider))
+      : config_(config),
+        instance_(instance),
+        kernel_log_pipe_provider_(kernel_log_pipe_provider) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command command(HostBinaryPath("secure_env"));
+    command.AddParameter("-keymaster_fd_out=", fifos_[0]);
+    command.AddParameter("-keymaster_fd_in=", fifos_[1]);
+    command.AddParameter("-gatekeeper_fd_out=", fifos_[2]);
+    command.AddParameter("-gatekeeper_fd_in=", fifos_[3]);
+
+    const auto& secure_hals = config_.secure_hals();
+    bool secure_keymint = secure_hals.count(SecureHal::Keymint) > 0;
+    command.AddParameter("-keymint_impl=", secure_keymint ? "tpm" : "software");
+    bool secure_gatekeeper = secure_hals.count(SecureHal::Gatekeeper) > 0;
+    auto gatekeeper_impl = secure_gatekeeper ? "tpm" : "software";
+    command.AddParameter("-gatekeeper_impl=", gatekeeper_impl);
+
+    command.AddParameter("-kernel_events_fd=", kernel_log_pipe_);
+
+    return single_element_emplace(std::move(command));
+  }
+
+  // Feature
+  std::string Name() const override { return "SecureEnvironment"; }
+  bool Enabled() const override { return config_.enable_host_bluetooth(); }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override {
+    return {&kernel_log_pipe_provider_};
+  }
+  bool Setup() override {
+    std::vector<std::string> fifo_paths = {
+        instance_.PerInstanceInternalPath("keymaster_fifo_vm.in"),
+        instance_.PerInstanceInternalPath("keymaster_fifo_vm.out"),
+        instance_.PerInstanceInternalPath("gatekeeper_fifo_vm.in"),
+        instance_.PerInstanceInternalPath("gatekeeper_fifo_vm.out"),
+    };
+    std::vector<SharedFD> fifos;
+    for (const auto& path : fifo_paths) {
+      unlink(path.c_str());
+      if (mkfifo(path.c_str(), 0600) < 0) {
+        PLOG(ERROR) << "Could not create " << path;
+        return false;
+      }
+      auto fd = SharedFD::Open(path, O_RDWR);
+      if (!fd->IsOpen()) {
+        LOG(ERROR) << "Could not open " << path << ": " << fd->StrError();
+        return false;
+      }
+      fifos_.push_back(fd);
+    }
+
+    kernel_log_pipe_ = kernel_log_pipe_provider_.KernelLogPipe();
+
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  std::vector<SharedFD> fifos_;
+  KernelLogPipeProvider& kernel_log_pipe_provider_;
+  SharedFD kernel_log_pipe_;
+};
+
+class VehicleHalServer : public CommandSource {
+ public:
+  INJECT(VehicleHalServer(const CuttlefishConfig& config,
+                          const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command grpc_server(VehicleHalGrpcServerBinary());
+
+    const unsigned vhal_server_cid = 2;
+    const unsigned vhal_server_port = instance_.vehicle_hal_server_port();
+    const std::string vhal_server_power_state_file =
+        AbsolutePath(instance_.PerInstancePath("power_state"));
+    const std::string vhal_server_power_state_socket =
+        AbsolutePath(instance_.PerInstancePath("power_state_socket"));
+
+    grpc_server.AddParameter("--server_cid=", vhal_server_cid);
+    grpc_server.AddParameter("--server_port=", vhal_server_port);
+    grpc_server.AddParameter("--power_state_file=",
+                             vhal_server_power_state_file);
+    grpc_server.AddParameter("--power_state_socket=",
+                             vhal_server_power_state_socket);
+    return single_element_emplace(std::move(grpc_server));
+  }
+
+  // Feature
+  std::string Name() const override { return "VehicleHalServer"; }
+  bool Enabled() const override {
+    return config_.enable_vehicle_hal_grpc_server() &&
+           FileExists(VehicleHalGrpcServerBinary());
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override { return true; }
+
+ private:
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+class ConsoleForwarder : public CommandSource, public DiagnosticInformation {
+ public:
+  INJECT(ConsoleForwarder(const CuttlefishConfig& config,
+                          const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+  // DiagnosticInformation
+  std::vector<std::string> Diagnostics() const override {
+    if (Enabled()) {
+      return {"To access the console run: screen " + instance_.console_path()};
+    } else {
+      return {"Serial console is disabled; use -console=true to enable it."};
+    }
+  }
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command console_forwarder_cmd(ConsoleForwarderBinary());
+
+    console_forwarder_cmd.AddParameter("--console_in_fd=",
+                                       console_forwarder_in_wr_);
+    console_forwarder_cmd.AddParameter("--console_out_fd=",
+                                       console_forwarder_out_rd_);
+    return single_element_emplace(std::move(console_forwarder_cmd));
+  }
+
+  // Feature
+  std::string Name() const override { return "ConsoleForwarder"; }
+  bool Enabled() const override { return config_.console(); }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    auto console_in_pipe_name = instance_.console_in_pipe_name();
+    if (mkfifo(console_in_pipe_name.c_str(), 0600) != 0) {
+      auto error = errno;
+      LOG(ERROR) << "Failed to create console input fifo for crosvm: "
+                 << strerror(error);
+      return false;
+    }
+
+    auto console_out_pipe_name = instance_.console_out_pipe_name();
+    if (mkfifo(console_out_pipe_name.c_str(), 0660) != 0) {
+      auto error = errno;
+      LOG(ERROR) << "Failed to create console output fifo for crosvm: "
+                 << strerror(error);
+      return false;
+    }
+
+    // These fds will only be read from or written to, but open them with
+    // read and write access to keep them open in case the subprocesses exit
+    console_forwarder_in_wr_ =
+        SharedFD::Open(console_in_pipe_name.c_str(), O_RDWR);
+    if (!console_forwarder_in_wr_->IsOpen()) {
+      LOG(ERROR) << "Failed to open console_forwarder input fifo for writes: "
+                 << console_forwarder_in_wr_->StrError();
+      return false;
+    }
+
+    console_forwarder_out_rd_ =
+        SharedFD::Open(console_out_pipe_name.c_str(), O_RDWR);
+    if (!console_forwarder_out_rd_->IsOpen()) {
+      LOG(ERROR) << "Failed to open console_forwarder output fifo for reads: "
+                 << console_forwarder_out_rd_->StrError();
+      return false;
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  SharedFD console_forwarder_in_wr_;
+  SharedFD console_forwarder_out_rd_;
+};
+
+class WmediumdServer : public CommandSource {
+ public:
+  INJECT(WmediumdServer(const CuttlefishConfig& config,
+                        const CuttlefishConfig::InstanceSpecific& instance,
+                        LogTeeCreator& log_tee))
+      : config_(config), instance_(instance), log_tee_(log_tee) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command cmd(WmediumdBinary());
+    cmd.AddParameter("-u", config_.vhost_user_mac80211_hwsim());
+    cmd.AddParameter("-a", config_.wmediumd_api_server_socket());
+    cmd.AddParameter("-c", config_path_);
+
+    std::vector<Command> commands;
+    commands.emplace_back(log_tee_.CreateLogTee(cmd, "wmediumd"));
+    commands.emplace_back(std::move(cmd));
+    return commands;
+  }
+
+  // Feature
+  std::string Name() const override { return "WmediumdServer"; }
+  bool Enabled() const override {
+#ifndef ENFORCE_MAC80211_HWSIM
+    return false;
+#else
+    return instance_.start_wmediumd();
+#endif
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    // If wmediumd configuration is given, use it
+    if (!config_.wmediumd_config().empty()) {
+      config_path_ = config_.wmediumd_config();
+      return true;
+    }
+    // Otherwise, generate wmediumd configuration using the current wifi mac
+    // prefix before start
+    config_path_ = instance_.PerInstanceInternalPath("wmediumd.cfg");
+    Command gen_config_cmd(WmediumdGenConfigBinary());
+    gen_config_cmd.AddParameter("-o", config_path_);
+    gen_config_cmd.AddParameter("-p", instance_.wifi_mac_prefix());
+
+    int success = gen_config_cmd.Start().Wait();
+    if (success != 0) {
+      LOG(ERROR) << "Unable to run " << gen_config_cmd.Executable()
+                 << ". Exited with status " << success;
+      return false;
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  LogTeeCreator& log_tee_;
+  std::string config_path_;
+};
+
+class VmmCommands : public CommandSource {
+ public:
+  INJECT(VmmCommands(const CuttlefishConfig& config, VmManager& vmm))
+      : config_(config), vmm_(vmm) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    return vmm_.StartCommands(config_);
+  }
+
+  // Feature
+  std::string Name() const override { return "VirtualMachineManager"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override { return true; }
+
+  const CuttlefishConfig& config_;
+  VmManager& vmm_;
+};
+
+class OpenWrt : public CommandSource {
+ public:
+  INJECT(OpenWrt(const CuttlefishConfig& config,
+                 const CuttlefishConfig::InstanceSpecific& instance,
+                 LogTeeCreator& log_tee))
+      : config_(config), instance_(instance), log_tee_(log_tee) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    constexpr auto crosvm_for_ap_socket = "crosvm_for_ap_control.sock";
+
+    CrosvmBuilder ap_cmd;
+    ap_cmd.SetBinary(config_.crosvm_binary());
+    ap_cmd.AddControlSocket(
+        instance_.PerInstanceInternalPath(crosvm_for_ap_socket));
+
+    if (!config_.vhost_user_mac80211_hwsim().empty()) {
+      ap_cmd.Cmd().AddParameter("--vhost-user-mac80211-hwsim=",
+                                config_.vhost_user_mac80211_hwsim());
+    }
+    SharedFD wifi_tap = ap_cmd.AddTap(instance_.wifi_tap_name());
+    // Only run the leases workaround if we are not using the new network
+    // bridge architecture - in that case, we have a wider DHCP address
+    // space and stale leases should be much less of an issue
+    if (!FileExists("/var/run/cuttlefish-dnsmasq-cvd-wbr.leases") &&
+        wifi_tap->IsOpen()) {
+      // TODO(schuffelen): QEMU also needs this and this is not the best place
+      // for this code. Find a better place to put it.
+      auto lease_file =
+          ForCurrentInstance("/var/run/cuttlefish-dnsmasq-cvd-wbr-") +
+          ".leases";
+      std::uint8_t dhcp_server_ip[] = {
+          192, 168, 96, (std::uint8_t)(ForCurrentInstance(1) * 4 - 3)};
+      if (!ReleaseDhcpLeases(lease_file, wifi_tap, dhcp_server_ip)) {
+        LOG(ERROR)
+            << "Failed to release wifi DHCP leases. Connecting to the wifi "
+            << "network may not work.";
+      }
+    }
+    if (config_.enable_sandbox()) {
+      ap_cmd.Cmd().AddParameter("--seccomp-policy-dir=",
+                                config_.seccomp_policy_dir());
+    } else {
+      ap_cmd.Cmd().AddParameter("--disable-sandbox");
+    }
+    ap_cmd.Cmd().AddParameter("--rwdisk=",
+                              instance_.PerInstancePath("ap_overlay.img"));
+    ap_cmd.Cmd().AddParameter(
+        "--disk=", instance_.PerInstancePath("persistent_composite.img"));
+    ap_cmd.Cmd().AddParameter("--params=\"root=" + config_.ap_image_dev_path() +
+                              "\"");
+
+    auto kernel_logs_path = instance_.PerInstanceLogPath("crosvm_openwrt.log");
+    ap_cmd.AddSerialConsoleReadOnly(kernel_logs_path);
+
+    ap_cmd.Cmd().AddParameter(config_.ap_kernel_image());
+
+    std::vector<Command> commands;
+    commands.emplace_back(log_tee_.CreateLogTee(ap_cmd.Cmd(), "openwrt"));
+    commands.emplace_back(std::move(ap_cmd.Cmd()));
+    return commands;
+  }
+
+  // Feature
+  std::string Name() const override { return "OpenWrt"; }
+  bool Enabled() const override {
+#ifndef ENFORCE_MAC80211_HWSIM
+    return false;
+#else
+    return instance_.start_ap() &&
+           config_.vm_manager() == vm_manager::CrosvmManager::name();
+#endif
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override { return true; }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  LogTeeCreator& log_tee_;
+};
+
+using PublicDeps = fruit::Required<const CuttlefishConfig, VmManager,
+                                   const CuttlefishConfig::InstanceSpecific>;
+fruit::Component<PublicDeps, KernelLogPipeProvider> launchComponent() {
+  using InternalDeps = fruit::Required<const CuttlefishConfig, VmManager,
+                                       const CuttlefishConfig::InstanceSpecific,
+                                       KernelLogPipeProvider>;
+  using Multi = Multibindings<InternalDeps>;
+  using Bases = Multi::Bases<CommandSource, DiagnosticInformation, Feature>;
+  return fruit::createComponent()
+      .bind<KernelLogPipeProvider, KernelLogMonitor>()
+      .install(Bases::Impls<BluetoothConnector>)
+      .install(Bases::Impls<ConfigServer>)
+      .install(Bases::Impls<ConsoleForwarder>)
+      .install(Bases::Impls<GnssGrpcProxyServer>)
+      .install(Bases::Impls<KernelLogMonitor>)
+      .install(Bases::Impls<LogcatReceiver>)
+      .install(Bases::Impls<MetricsService>)
+      .install(Bases::Impls<RootCanal>)
+      .install(Bases::Impls<SecureEnvironment>)
+      .install(Bases::Impls<TombstoneReceiver>)
+      .install(Bases::Impls<VehicleHalServer>)
+      .install(Bases::Impls<VmmCommands>)
+      .install(Bases::Impls<WmediumdServer>)
+      .install(Bases::Impls<OpenWrt>);
 }
 
-std::vector<Command> LaunchVehicleHalServerIfEnabled(
-    const CuttlefishConfig& config) {
-  if (!config.enable_vehicle_hal_grpc_server() ||
-    !FileExists(config.vehicle_hal_grpc_server_binary())) {
-    return {};
-  }
-
-  Command grpc_server(config.vehicle_hal_grpc_server_binary());
-  auto instance = config.ForDefaultInstance();
-
-  const unsigned vhal_server_cid = 2;
-  const unsigned vhal_server_port = instance.vehicle_hal_server_port();
-  const std::string vhal_server_power_state_file =
-      AbsolutePath(instance.PerInstancePath("power_state"));
-  const std::string vhal_server_power_state_socket =
-      AbsolutePath(instance.PerInstancePath("power_state_socket"));
-
-  grpc_server.AddParameter("--server_cid=", vhal_server_cid);
-  grpc_server.AddParameter("--server_port=", vhal_server_port);
-  grpc_server.AddParameter("--power_state_file=", vhal_server_power_state_file);
-  grpc_server.AddParameter("--power_state_socket=", vhal_server_power_state_socket);
-  return single_element_emplace(std::move(grpc_server));
-}
-
-std::vector<Command> LaunchConsoleForwarderIfEnabled(
-    const CuttlefishConfig& config) {
-  if (!config.console()) {
-    return {};
-  }
-
-  Command console_forwarder_cmd(ConsoleForwarderBinary());
-  auto instance = config.ForDefaultInstance();
-
-  auto console_in_pipe_name = instance.console_in_pipe_name();
-  if (mkfifo(console_in_pipe_name.c_str(), 0600) != 0) {
-    auto error = errno;
-    LOG(ERROR) << "Failed to create console input fifo for crosvm: "
-               << strerror(error);
-    return {};
-  }
-
-  auto console_out_pipe_name = instance.console_out_pipe_name();
-  if (mkfifo(console_out_pipe_name.c_str(), 0660) != 0) {
-    auto error = errno;
-    LOG(ERROR) << "Failed to create console output fifo for crosvm: "
-               << strerror(error);
-    return {};
-  }
-
-  // These fds will only be read from or written to, but open them with
-  // read and write access to keep them open in case the subprocesses exit
-  SharedFD console_forwarder_in_wr =
-      SharedFD::Open(console_in_pipe_name.c_str(), O_RDWR);
-  if (!console_forwarder_in_wr->IsOpen()) {
-    LOG(ERROR) << "Failed to open console_forwarder input fifo for writes: "
-               << console_forwarder_in_wr->StrError();
-    return {};
-  }
-
-  SharedFD console_forwarder_out_rd =
-      SharedFD::Open(console_out_pipe_name.c_str(), O_RDWR);
-  if (!console_forwarder_out_rd->IsOpen()) {
-    LOG(ERROR) << "Failed to open console_forwarder output fifo for reads: "
-               << console_forwarder_out_rd->StrError();
-    return {};
-  }
-
-  console_forwarder_cmd.AddParameter("--console_in_fd=", console_forwarder_in_wr);
-  console_forwarder_cmd.AddParameter("--console_out_fd=", console_forwarder_out_rd);
-  return single_element_emplace(std::move(console_forwarder_cmd));
-}
-
-} // namespace cuttlefish
+}  // namespace cuttlefish
diff --git a/host/commands/run_cvd/launch.h b/host/commands/run_cvd/launch.h
index 30d5aff..ead43bc 100644
--- a/host/commands/run_cvd/launch.h
+++ b/host/commands/run_cvd/launch.h
@@ -15,51 +15,34 @@
 
 #pragma once
 
+#include <fruit/fruit.h>
+
 #include <string>
 #include <vector>
 
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/utils/subprocess.h"
+#include "host/libs/config/command_source.h"
+#include "host/libs/config/custom_actions.h"
 #include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/feature.h"
+#include "host/libs/config/kernel_log_pipe_provider.h"
+#include "host/libs/vm_manager/vm_manager.h"
 
 namespace cuttlefish {
 
-struct KernelLogMonitorData {
-  std::vector<SharedFD> pipes;
-  std::vector<Command> commands;
-};
+fruit::Component<fruit::Required<const CuttlefishConfig, vm_manager::VmManager,
+                                 const CuttlefishConfig::InstanceSpecific>,
+                 KernelLogPipeProvider>
+launchComponent();
 
-KernelLogMonitorData LaunchKernelLogMonitor(const CuttlefishConfig& config,
-                                            unsigned int number_of_event_pipes);
-std::vector<Command> LaunchAdbConnectorIfEnabled(
-    const CuttlefishConfig& config);
-std::vector<Command> LaunchSocketVsockProxyIfEnabled(
-    const CuttlefishConfig& config, SharedFD adbd_events_pipe);
-std::vector<Command> LaunchModemSimulatorIfEnabled(
-    const CuttlefishConfig& config);
+fruit::Component<fruit::Required<const CuttlefishConfig,
+                                 const CuttlefishConfig::InstanceSpecific>>
+launchModemComponent();
 
-std::vector<Command> LaunchVNCServer(const CuttlefishConfig& config);
-
-std::vector<Command> LaunchTombstoneReceiver(const CuttlefishConfig& config);
-std::vector<Command> LaunchRootCanal(const CuttlefishConfig& config);
-std::vector<Command> LaunchLogcatReceiver(const CuttlefishConfig& config);
-std::vector<Command> LaunchConfigServer(const CuttlefishConfig& config);
-
-std::vector<Command> LaunchWebRTC(const CuttlefishConfig& config,
-                                  SharedFD kernel_log_events_pipe);
-
-std::vector<Command> LaunchMetrics();
-
-std::vector<Command> LaunchGnssGrpcProxyServerIfEnabled(
-    const CuttlefishConfig& config);
-
-std::vector<Command> LaunchSecureEnvironment(const CuttlefishConfig& config);
-
-std::vector<Command> LaunchBluetoothConnector(const CuttlefishConfig& config);
-std::vector<Command> LaunchVehicleHalServerIfEnabled(
-    const CuttlefishConfig& config);
-
-std::vector<Command> LaunchConsoleForwarderIfEnabled(
-    const CuttlefishConfig& config);
+fruit::Component<fruit::Required<const CuttlefishConfig, KernelLogPipeProvider,
+                                 const CuttlefishConfig::InstanceSpecific,
+                                 const CustomActionConfigProvider>>
+launchStreamerComponent();
 
 } // namespace cuttlefish
diff --git a/host/commands/run_cvd/launch_adb.cpp b/host/commands/run_cvd/launch_adb.cpp
deleted file mode 100644
index b7996ee..0000000
--- a/host/commands/run_cvd/launch_adb.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-// Copyright (C) 2019 The Android Open Source Project
-//
-// 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.
-
-#include "host/commands/run_cvd/launch.h"
-
-#include <android-base/logging.h>
-#include <set>
-#include <string>
-#include <utility>
-
-#include "common/libs/fs/shared_fd.h"
-#include "common/libs/utils/subprocess.h"
-#include "host/libs/config/cuttlefish_config.h"
-#include "host/libs/config/known_paths.h"
-
-namespace cuttlefish {
-
-namespace {
-
-std::string GetAdbConnectorTcpArg(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  return std::string{"0.0.0.0:"} + std::to_string(instance.host_port());
-}
-
-std::string GetAdbConnectorVsockArg(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  return std::string{"vsock:"} + std::to_string(instance.vsock_guest_cid()) +
-         std::string{":5555"};
-}
-
-bool AdbModeEnabled(const CuttlefishConfig& config, AdbMode mode) {
-  return config.adb_mode().count(mode) > 0;
-}
-
-bool AdbVsockTunnelEnabled(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  return instance.vsock_guest_cid() > 2 &&
-         AdbModeEnabled(config, AdbMode::VsockTunnel);
-}
-
-bool AdbVsockHalfTunnelEnabled(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  return instance.vsock_guest_cid() > 2 &&
-         AdbModeEnabled(config, AdbMode::VsockHalfTunnel);
-}
-
-bool AdbTcpConnectorEnabled(const CuttlefishConfig& config) {
-  bool vsock_tunnel = AdbVsockTunnelEnabled(config);
-  bool vsock_half_tunnel = AdbVsockHalfTunnelEnabled(config);
-  return config.run_adb_connector() && (vsock_tunnel || vsock_half_tunnel);
-}
-
-bool AdbVsockConnectorEnabled(const CuttlefishConfig& config) {
-  return config.run_adb_connector() &&
-         AdbModeEnabled(config, AdbMode::NativeVsock);
-}
-
-}  // namespace
-
-std::vector<Command> LaunchAdbConnectorIfEnabled(
-    const CuttlefishConfig& config) {
-  Command adb_connector(AdbConnectorBinary());
-  std::set<std::string> addresses;
-
-  if (AdbTcpConnectorEnabled(config)) {
-    addresses.insert(GetAdbConnectorTcpArg(config));
-  }
-  if (AdbVsockConnectorEnabled(config)) {
-    addresses.insert(GetAdbConnectorVsockArg(config));
-  }
-
-  if (addresses.size() == 0) {
-    return {};
-  }
-  std::string address_arg = "--addresses=";
-  for (auto& arg : addresses) {
-    address_arg += arg + ",";
-  }
-  address_arg.pop_back();
-  adb_connector.AddParameter(address_arg);
-  std::vector<Command> commands;
-  commands.emplace_back(std::move(adb_connector));
-  return std::move(commands);
-}
-
-std::vector<Command> LaunchSocketVsockProxyIfEnabled(
-    const CuttlefishConfig& config, SharedFD adbd_events_pipe) {
-  auto instance = config.ForDefaultInstance();
-  auto append = [](const std::string& s, const int i) -> std::string {
-    return s + std::to_string(i);
-  };
-  auto tcp_server =
-      SharedFD::SocketLocalServer(instance.host_port(), SOCK_STREAM);
-  CHECK(tcp_server->IsOpen())
-      << "Unable to create socket_vsock_proxy server socket: "
-      << tcp_server->StrError();
-  std::vector<Command> commands;
-  if (AdbVsockTunnelEnabled(config)) {
-    Command adb_tunnel(SocketVsockProxyBinary());
-    adb_tunnel.AddParameter("-adbd_events_fd=", adbd_events_pipe);
-    /**
-     * This socket_vsock_proxy (a.k.a. sv proxy) runs on the host. It assumes
-     * that another sv proxy runs inside the guest. see:
-     * shared/config/init.vendor.rc The sv proxy in the guest exposes
-     * vsock:cid:6520 across the cuttlefish instances in multi-tenancy. cid is
-     * different per instance.
-     *
-     * This host sv proxy should cooperate with the guest sv proxy. Thus, one
-     * end of the tunnel is vsock:cid:6520 regardless of instance number.
-     * Another end faces the host adb daemon via tcp. Thus, the server type is
-     * tcp here. The tcp port differs from instance to instance, and is
-     * instance.host_port()
-     *
-     */
-    adb_tunnel.AddParameter("--server=tcp");
-    adb_tunnel.AddParameter("--vsock_port=6520");
-    adb_tunnel.AddParameter(std::string{"--server_fd="}, tcp_server);
-    adb_tunnel.AddParameter(std::string{"--vsock_cid="} +
-                            std::to_string(instance.vsock_guest_cid()));
-    commands.emplace_back(std::move(adb_tunnel));
-  }
-  if (AdbVsockHalfTunnelEnabled(config)) {
-    Command adb_tunnel(SocketVsockProxyBinary());
-    adb_tunnel.AddParameter("-adbd_events_fd=", adbd_events_pipe);
-    /*
-     * This socket_vsock_proxy (a.k.a. sv proxy) runs on the host, and
-     * cooperates with the adbd inside the guest. See this file:
-     *  shared/device.mk, especially the line says "persist.adb.tcp.port="
-     *
-     * The guest adbd is listening on vsock:cid:5555 across cuttlefish
-     * instances. Sv proxy faces the host adb daemon via tcp. The server type
-     * should be therefore tcp, and the port should differ from instance to
-     * instance and be equal to instance.host_port()
-     */
-    adb_tunnel.AddParameter("--server=tcp");
-    adb_tunnel.AddParameter(append("--vsock_port=", 5555));
-    adb_tunnel.AddParameter(std::string{"--server_fd="}, tcp_server);
-    adb_tunnel.AddParameter(append("--vsock_cid=", instance.vsock_guest_cid()));
-    commands.emplace_back(std::move(adb_tunnel));
-  }
-  return commands;
-}
-
-}  // namespace cuttlefish
diff --git a/host/commands/run_cvd/launch_modem.cpp b/host/commands/run_cvd/launch_modem.cpp
index 07af9f1..f139e27 100644
--- a/host/commands/run_cvd/launch_modem.cpp
+++ b/host/commands/run_cvd/launch_modem.cpp
@@ -19,6 +19,7 @@
 #include <string.h>
 #include <sstream>
 #include <string>
+#include <unordered_set>
 #include <utility>
 
 #include "common/libs/fs/shared_fd.h"
@@ -28,16 +29,10 @@
 
 namespace cuttlefish {
 
-static bool StopModemSimulator() {
-  auto config = CuttlefishConfig::Get();
-  auto instance = config->ForDefaultInstance();
-
-  std::string monitor_socket_name = "modem_simulator";
-  std::stringstream ss;
-  ss << instance.host_port();
-  monitor_socket_name.append(ss.str());
-  auto monitor_sock = SharedFD::SocketLocalClient(monitor_socket_name.c_str(),
-                                                  true, SOCK_STREAM);
+static bool StopModemSimulator(int id) {
+  std::string socket_name = "modem_simulator" + std::to_string(id);
+  auto monitor_sock =
+      SharedFD::SocketLocalClient(socket_name, true, SOCK_STREAM);
   if (!monitor_sock->IsOpen()) {
     LOG(ERROR) << "The connection to modem simulator is closed";
     return false;
@@ -63,55 +58,88 @@
   return true;
 }
 
-std::vector<Command> LaunchModemSimulatorIfEnabled(
-    const CuttlefishConfig& config) {
-  if (!config.enable_modem_simulator()) {
-    LOG(DEBUG) << "Modem simulator not enabled";
-    return {};
-  }
+class ModemSimulator : public CommandSource {
+ public:
+  INJECT(ModemSimulator(const CuttlefishConfig& config,
+                        const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
 
-  int instance_number = config.modem_simulator_instance_number();
-  if (instance_number > 3 /* max value */ || instance_number < 0) {
-    LOG(ERROR)
-        << "Modem simulator instance number should range between 1 and 3";
-    return {};
-  }
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command cmd(ModemSimulatorBinary(), [this](Subprocess* proc) {
+      auto stopped = StopModemSimulator(instance_.modem_simulator_host_id());
+      if (stopped) {
+        return StopperResult::kStopSuccess;
+      }
+      LOG(WARNING) << "Failed to stop modem simulator nicely, "
+                   << "attempting to KILL";
+      return KillSubprocess(proc) == StopperResult::kStopSuccess
+                 ? StopperResult::kStopCrash
+                 : StopperResult::kStopFailure;
+    });
 
-  Command cmd(ModemSimulatorBinary(), [](Subprocess* proc) {
-    auto stopped = StopModemSimulator();
-    if (stopped) {
-      return true;
+    auto sim_type = config_.modem_simulator_sim_type();
+    cmd.AddParameter(std::string{"-sim_type="} + std::to_string(sim_type));
+    cmd.AddParameter("-server_fds=");
+    bool first_socket = true;
+    for (const auto& socket : sockets_) {
+      if (!first_socket) {
+        cmd.AppendToLastParameter(",");
+      }
+      cmd.AppendToLastParameter(socket);
+      first_socket = false;
     }
-    LOG(WARNING) << "Failed to stop modem simulator nicely, "
-                 << "attempting to KILL";
-    return KillSubprocess(proc);
-  });
 
-  auto sim_type = config.modem_simulator_sim_type();
-  cmd.AddParameter(std::string{"-sim_type="} + std::to_string(sim_type));
-
-  auto instance = config.ForDefaultInstance();
-  auto ports = instance.modem_simulator_ports();
-  cmd.AddParameter("-server_fds=");
-  for (int i = 0; i < instance_number; ++i) {
-    auto pos = ports.find(',');
-    auto temp = (pos != std::string::npos) ? ports.substr(0, pos) : ports;
-    auto port = std::stoi(temp);
-    ports = ports.substr(pos + 1);
-
-    auto socket = SharedFD::VsockServer(port, SOCK_STREAM);
-    CHECK(socket->IsOpen())
-        << "Unable to create modem simulator server socket: "
-        << socket->StrError();
-    if (i > 0) {
-      cmd.AppendToLastParameter(",");
-    }
-    cmd.AppendToLastParameter(socket);
+    std::vector<Command> commands;
+    commands.emplace_back(std::move(cmd));
+    return commands;
   }
 
-  std::vector<Command> commands;
-  commands.emplace_back(std::move(cmd));
-  return commands;
+  // Feature
+  std::string Name() const override { return "ModemSimulator"; }
+  bool Enabled() const override {
+    if (!config_.enable_modem_simulator()) {
+      LOG(DEBUG) << "Modem simulator not enabled";
+    }
+    return config_.enable_modem_simulator();
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    int instance_number = config_.modem_simulator_instance_number();
+    if (instance_number > 3 /* max value */ || instance_number < 0) {
+      LOG(ERROR)
+          << "Modem simulator instance number should range between 1 and 3";
+      return false;
+    }
+    auto ports = instance_.modem_simulator_ports();
+    for (int i = 0; i < instance_number; ++i) {
+      auto pos = ports.find(',');
+      auto temp = (pos != std::string::npos) ? ports.substr(0, pos) : ports;
+      auto port = std::stoi(temp);
+      ports = ports.substr(pos + 1);
+
+      auto socket = SharedFD::VsockServer(port, SOCK_STREAM);
+      CHECK(socket->IsOpen())
+          << "Unable to create modem simulator server socket: "
+          << socket->StrError();
+      sockets_.push_back(socket);
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  std::vector<SharedFD> sockets_;
+};
+
+fruit::Component<fruit::Required<const CuttlefishConfig,
+                                 const CuttlefishConfig::InstanceSpecific>>
+launchModemComponent() {
+  return fruit::createComponent()
+      .addMultibinding<CommandSource, ModemSimulator>()
+      .addMultibinding<Feature, ModemSimulator>();
 }
 
 }  // namespace cuttlefish
diff --git a/host/commands/run_cvd/launch_streamer.cpp b/host/commands/run_cvd/launch_streamer.cpp
index 7ae3f1b..ab6a5f6 100644
--- a/host/commands/run_cvd/launch_streamer.cpp
+++ b/host/commands/run_cvd/launch_streamer.cpp
@@ -16,12 +16,14 @@
 #include "host/commands/run_cvd/launch.h"
 
 #include <android-base/logging.h>
+#include <sstream>
 #include <string>
 #include <utility>
 
 #include "common/libs/fs/shared_buf.h"
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/utils/files.h"
+#include "host/commands/run_cvd/reporting.h"
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/config/known_paths.h"
 #include "host/libs/vm_manager/crosvm_manager.h"
@@ -41,85 +43,12 @@
   return server;
 }
 
-// Creates the frame and input sockets and add the relevant arguments to the vnc
-// server and webrtc commands
-void CreateStreamerServers(Command* cmd, const CuttlefishConfig& config) {
-  std::vector<SharedFD> touch_servers;
-  SharedFD keyboard_server;
-
-  auto instance = config.ForDefaultInstance();
-  auto use_vsockets = config.vm_manager() == vm_manager::QemuManager::name();
-  for (int i = 0; i < config.display_configs().size(); ++i) {
-    touch_servers.push_back(
-        use_vsockets
-            ? SharedFD::VsockServer(instance.touch_server_port(), SOCK_STREAM)
-            : CreateUnixInputServer(instance.touch_socket_path(i)));
-    if (!touch_servers.back()->IsOpen()) {
-      LOG(ERROR) << "Could not open touch server: "
-                 << touch_servers.back()->StrError();
-      return;
-    }
-  }
-  if (!touch_servers.empty()) {
-    cmd->AddParameter("-touch_fds=", touch_servers[0]);
-    for (int i = 1; i < touch_servers.size(); ++i) {
-      cmd->AppendToLastParameter(",", touch_servers[i]);
-    }
-  }
-
-  if (use_vsockets) {
-    cmd->AddParameter("-write_virtio_input");
-
-    keyboard_server =
-        SharedFD::VsockServer(instance.keyboard_server_port(), SOCK_STREAM);
-  } else {
-    keyboard_server = CreateUnixInputServer(instance.keyboard_socket_path());
-  }
-
-  if (!keyboard_server->IsOpen()) {
-    LOG(ERROR) << "Could not open keyboard server: "
-               << keyboard_server->StrError();
-    return;
-  }
-  cmd->AddParameter("-keyboard_fd=", keyboard_server);
-
-  if (config.enable_webrtc() &&
-      config.vm_manager() == vm_manager::CrosvmManager::name()) {
-    SharedFD switches_server =
-        CreateUnixInputServer(instance.switches_socket_path());
-    if (!switches_server->IsOpen()) {
-      LOG(ERROR) << "Could not open switches server: "
-                 << switches_server->StrError();
-      return;
-    }
-    cmd->AddParameter("-switches_fd=", switches_server);
-  }
-
-  SharedFD frames_server = CreateUnixInputServer(instance.frames_socket_path());
-  if (!frames_server->IsOpen()) {
-    LOG(ERROR) << "Could not open frames server: " << frames_server->StrError();
-    return;
-  }
-  cmd->AddParameter("-frame_server_fd=", frames_server);
-
-  if (config.enable_audio()) {
-    auto path = config.ForDefaultInstance().audio_server_path();
-    auto audio_server =
-        SharedFD::SocketLocalServer(path.c_str(), false, SOCK_SEQPACKET, 0666);
-    if (!audio_server->IsOpen()) {
-      LOG(ERROR) << "Could not create audio server: "
-                 << audio_server->StrError();
-      return;
-    }
-    cmd->AddParameter("--audio_server_fd=", audio_server);
-  }
-}
-
-std::vector<Command> LaunchCustomActionServers(Command& webrtc_cmd,
-                                               const CuttlefishConfig& config) {
+std::vector<Command> LaunchCustomActionServers(
+    Command& webrtc_cmd,
+    const std::vector<CustomActionConfig>& custom_actions) {
   bool first = true;
   std::vector<Command> commands;
-  for (const auto& custom_action : config.custom_actions()) {
+  for (const auto& custom_action : custom_actions) {
     if (custom_action.server) {
       // Create a socket pair that will be used for communication between
       // WebRTC and the action server.
@@ -152,84 +81,255 @@
   return commands;
 }
 
+// Creates the frame and input sockets and add the relevant arguments to
+// webrtc commands
+class StreamerSockets : public virtual Feature {
+ public:
+  INJECT(StreamerSockets(const CuttlefishConfig& config,
+                         const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
+
+  void AppendCommandArguments(Command& cmd) {
+    if (config_.vm_manager() == vm_manager::QemuManager::name()) {
+      cmd.AddParameter("-write_virtio_input");
+    }
+    if (!touch_servers_.empty()) {
+      cmd.AddParameter("-touch_fds=", touch_servers_[0]);
+      for (int i = 1; i < touch_servers_.size(); ++i) {
+        cmd.AppendToLastParameter(",", touch_servers_[i]);
+      }
+    }
+    cmd.AddParameter("-keyboard_fd=", keyboard_server_);
+    cmd.AddParameter("-frame_server_fd=", frames_server_);
+    if (config_.enable_audio()) {
+      cmd.AddParameter("--audio_server_fd=", audio_server_);
+    }
+  }
+
+  // Feature
+  std::string Name() const override { return "StreamerSockets"; }
+  bool Enabled() const override {
+    bool is_qemu = config_.vm_manager() == vm_manager::QemuManager::name();
+    bool is_accelerated = config_.gpu_mode() != kGpuModeGuestSwiftshader;
+    return !(is_qemu && is_accelerated);
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+
+  bool Setup() override {
+    auto use_vsockets = config_.vm_manager() == vm_manager::QemuManager::name();
+    for (int i = 0; i < config_.display_configs().size(); ++i) {
+      touch_servers_.push_back(
+          use_vsockets ? SharedFD::VsockServer(instance_.touch_server_port(),
+                                               SOCK_STREAM)
+                       : CreateUnixInputServer(instance_.touch_socket_path(i)));
+      if (!touch_servers_.back()->IsOpen()) {
+        LOG(ERROR) << "Could not open touch server: "
+                   << touch_servers_.back()->StrError();
+        return false;
+      }
+    }
+    if (use_vsockets) {
+      keyboard_server_ =
+          SharedFD::VsockServer(instance_.keyboard_server_port(), SOCK_STREAM);
+    } else {
+      keyboard_server_ =
+          CreateUnixInputServer(instance_.keyboard_socket_path());
+    }
+    if (!keyboard_server_->IsOpen()) {
+      LOG(ERROR) << "Failed to open keyboard server"
+                 << keyboard_server_->StrError();
+      return false;
+    }
+    frames_server_ = CreateUnixInputServer(instance_.frames_socket_path());
+    if (!frames_server_->IsOpen()) {
+      LOG(ERROR) << "Could not open frames server: "
+                 << frames_server_->StrError();
+      return false;
+    }
+    // TODO(schuffelen): Make this a separate optional feature?
+    if (config_.enable_audio()) {
+      auto path = config_.ForDefaultInstance().audio_server_path();
+      audio_server_ =
+          SharedFD::SocketLocalServer(path, false, SOCK_SEQPACKET, 0666);
+      if (!audio_server_->IsOpen()) {
+        LOG(ERROR) << "Could not create audio server: "
+                   << audio_server_->StrError();
+        return false;
+      }
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  std::vector<SharedFD> touch_servers_;
+  SharedFD keyboard_server_;
+  SharedFD frames_server_;
+  SharedFD audio_server_;
+};
+
+class WebRtcServer : public virtual CommandSource,
+                     public DiagnosticInformation {
+ public:
+  INJECT(WebRtcServer(const CuttlefishConfig& config,
+                      const CuttlefishConfig::InstanceSpecific& instance,
+                      StreamerSockets& sockets,
+                      KernelLogPipeProvider& log_pipe_provider,
+                      const CustomActionConfigProvider& custom_action_config))
+      : config_(config),
+        instance_(instance),
+        sockets_(sockets),
+        log_pipe_provider_(log_pipe_provider),
+        custom_action_config_(custom_action_config) {}
+  // DiagnosticInformation
+  std::vector<std::string> Diagnostics() const override {
+    if (!Enabled() || !config_.ForDefaultInstance().start_webrtc_sig_server()) {
+      // When WebRTC is enabled but an operator other than the one launched by
+      // run_cvd is used there is no way to know the url to which to point the
+      // browser to.
+      return {};
+    }
+    std::ostringstream out;
+    out << "Point your browser to https://" << config_.sig_server_address()
+        << ":" << config_.sig_server_port() << " to interact with the device.";
+    return {out.str()};
+  }
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    std::vector<Command> commands;
+    if (instance_.start_webrtc_sig_server()) {
+      Command sig_server(WebRtcSigServerBinary());
+      sig_server.AddParameter("-assets_dir=", config_.webrtc_assets_dir());
+      sig_server.AddParameter(
+          "-use_secure_http=",
+          config_.sig_server_secure() ? "true" : "false");
+      if (!config_.webrtc_certs_dir().empty()) {
+        sig_server.AddParameter("-certs_dir=", config_.webrtc_certs_dir());
+      }
+      sig_server.AddParameter("-http_server_port=", config_.sig_server_port());
+      commands.emplace_back(std::move(sig_server));
+    }
+
+    if (instance_.start_webrtc_sig_server_proxy()) {
+      Command sig_proxy(WebRtcSigServerProxyBinary());
+      sig_proxy.AddParameter("-use_secure_http=",
+                             config_.sig_server_secure() ? "true" : "false");
+      if (!config_.webrtc_certs_dir().empty()) {
+        sig_proxy.AddParameter("-certs_dir=", config_.webrtc_certs_dir());
+      }
+      sig_proxy.AddParameter("-http_server_port=", config_.sig_server_port());
+      commands.emplace_back(std::move(sig_proxy));
+    }
+
+    auto stopper = [host_socket = std::move(host_socket_)](Subprocess* proc) {
+      struct timeval timeout;
+      timeout.tv_sec = 3;
+      timeout.tv_usec = 0;
+      CHECK(host_socket->SetSockOpt(SOL_SOCKET, SO_RCVTIMEO, &timeout,
+                                    sizeof(timeout)) == 0)
+          << "Could not set receive timeout";
+
+      WriteAll(host_socket, "C");
+      char response[1];
+      int read_ret = host_socket->Read(response, sizeof(response));
+      if (read_ret != 0) {
+        LOG(ERROR) << "Failed to read response from webrtc";
+        return KillSubprocess(proc);
+      }
+      return KillSubprocess(proc) == StopperResult::kStopSuccess
+                 ? StopperResult::kStopCrash
+                 : StopperResult::kStopFailure;
+    };
+
+    Command webrtc(WebRtcBinary(), stopper);
+    webrtc.UnsetFromEnvironment("http_proxy");
+    sockets_.AppendCommandArguments(webrtc);
+    if (config_.vm_manager() == vm_manager::CrosvmManager::name()) {
+      webrtc.AddParameter("-switches_fd=", switches_server_);
+    }
+    // Currently there is no way to ensure the signaling server will already
+    // have bound the socket to the port by the time the webrtc process runs
+    // (the common technique of doing it from the launcher is not possible here
+    // as the server library being used creates its own sockets). However, this
+    // issue is mitigated slightly by doing some retrying and backoff in the
+    // webrtc process when connecting to the websocket, so it shouldn't be an
+    // issue most of the time.
+    webrtc.AddParameter("--command_fd=", client_socket_);
+    webrtc.AddParameter("-kernel_log_events_fd=", kernel_log_events_pipe_);
+    webrtc.AddParameter("-client_dir=",
+                        DefaultHostArtifactsPath("usr/share/webrtc/assets"));
+
+    // TODO get from launcher params
+    const auto& actions = custom_action_config_.CustomActions();
+    for (auto& action : LaunchCustomActionServers(webrtc, actions)) {
+      commands.emplace_back(std::move(action));
+    }
+    commands.emplace_back(std::move(webrtc));
+
+    return commands;
+  }
+
+  // Feature
+  bool Enabled() const override {
+    return sockets_.Enabled() && config_.enable_webrtc();
+  }
+
+ private:
+  std::string Name() const override { return "WebRtcServer"; }
+  std::unordered_set<Feature*> Dependencies() const override {
+    return {static_cast<Feature*>(&sockets_),
+            static_cast<Feature*>(&log_pipe_provider_)};
+  }
+
+  bool Setup() override {
+    if (!SharedFD::SocketPair(AF_LOCAL, SOCK_STREAM, 0, &client_socket_,
+                              &host_socket_)) {
+      LOG(ERROR) << "Could not open command socket for webRTC";
+      return false;
+    }
+    if (config_.vm_manager() == vm_manager::CrosvmManager::name()) {
+      switches_server_ =
+          CreateUnixInputServer(instance_.switches_socket_path());
+      if (!switches_server_->IsOpen()) {
+        LOG(ERROR) << "Could not open switches server: "
+                   << switches_server_->StrError();
+        return false;
+      }
+    }
+    kernel_log_events_pipe_ = log_pipe_provider_.KernelLogPipe();
+    if (!kernel_log_events_pipe_->IsOpen()) {
+      LOG(ERROR) << "Failed to get a kernel log events pipe: "
+                 << kernel_log_events_pipe_->StrError();
+      return false;
+    }
+    return true;
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  StreamerSockets& sockets_;
+  KernelLogPipeProvider& log_pipe_provider_;
+  const CustomActionConfigProvider& custom_action_config_;
+  SharedFD kernel_log_events_pipe_;
+  SharedFD client_socket_;
+  SharedFD host_socket_;
+  SharedFD switches_server_;
+};
+
 }  // namespace
 
-std::vector<Command> LaunchVNCServer(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  // Launch the vnc server, don't wait for it to complete
-  auto port_options = "-port=" + std::to_string(instance.vnc_server_port());
-  Command vnc_server(VncServerBinary());
-  vnc_server.AddParameter(port_options);
-
-  CreateStreamerServers(&vnc_server, config);
-
-  std::vector<Command> commands;
-  commands.emplace_back(std::move(vnc_server));
-  return std::move(commands);
-}
-
-std::vector<Command> LaunchWebRTC(const CuttlefishConfig& config,
-                                  SharedFD kernel_log_events_pipe) {
-  std::vector<Command> commands;
-  if (config.ForDefaultInstance().start_webrtc_sig_server()) {
-    Command sig_server(WebRtcSigServerBinary());
-    sig_server.AddParameter("-assets_dir=", config.webrtc_assets_dir());
-    if (!config.webrtc_certs_dir().empty()) {
-      sig_server.AddParameter("-certs_dir=", config.webrtc_certs_dir());
-    }
-    sig_server.AddParameter("-http_server_port=", config.sig_server_port());
-    commands.emplace_back(std::move(sig_server));
-  }
-
-  // Currently there is no way to ensure the signaling server will already have
-  // bound the socket to the port by the time the webrtc process runs (the
-  // common technique of doing it from the launcher is not possible here as the
-  // server library being used creates its own sockets). However, this issue is
-  // mitigated slightly by doing some retrying and backoff in the webrtc process
-  // when connecting to the websocket, so it shouldn't be an issue most of the
-  // time.
-  SharedFD client_socket;
-  SharedFD host_socket;
-  CHECK(SharedFD::SocketPair(AF_LOCAL, SOCK_STREAM, 0, &client_socket,
-                             &host_socket))
-      << "Could not open command socket for webRTC";
-
-  auto stopper = [host_socket = std::move(host_socket)](Subprocess* proc) {
-    struct timeval timeout;
-    timeout.tv_sec = 3;
-    timeout.tv_usec = 0;
-    CHECK(host_socket->SetSockOpt(SOL_SOCKET, SO_RCVTIMEO, &timeout,
-                                  sizeof(timeout)) == 0)
-        << "Could not set receive timeout";
-
-    WriteAll(host_socket, "C");
-    char response[1];
-    int read_ret = host_socket->Read(response, sizeof(response));
-    if (read_ret != 0) {
-      LOG(ERROR) << "Failed to read response from webrtc";
-    }
-    cuttlefish::KillSubprocess(proc);
-    return true;
-  };
-
-  Command webrtc(WebRtcBinary(), SubprocessStopper(stopper));
-
-  webrtc.UnsetFromEnvironment({"http_proxy"});
-
-  CreateStreamerServers(&webrtc, config);
-
-  webrtc.AddParameter("--command_fd=", client_socket);
-  webrtc.AddParameter("-kernel_log_events_fd=", kernel_log_events_pipe);
-
-  auto actions = LaunchCustomActionServers(webrtc, config);
-
-  // TODO get from launcher params
-  commands.emplace_back(std::move(webrtc));
-  for (auto& action : actions) {
-    commands.emplace_back(std::move(action));
-  }
-
-  return commands;
+fruit::Component<fruit::Required<const CuttlefishConfig, KernelLogPipeProvider,
+                                 const CuttlefishConfig::InstanceSpecific,
+                                 const CustomActionConfigProvider>>
+launchStreamerComponent() {
+  return fruit::createComponent()
+      .addMultibinding<CommandSource, WebRtcServer>()
+      .addMultibinding<DiagnosticInformation, WebRtcServer>()
+      .addMultibinding<Feature, StreamerSockets>()
+      .addMultibinding<Feature, WebRtcServer>();
 }
 
 }  // namespace cuttlefish
diff --git a/host/commands/run_cvd/main.cc b/host/commands/run_cvd/main.cc
index 944f76c..6cd70f5 100644
--- a/host/commands/run_cvd/main.cc
+++ b/host/commands/run_cvd/main.cc
@@ -14,181 +14,140 @@
  * limitations under the License.
  */
 
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+#include <fruit/fruit.h>
+#include <gflags/gflags.h>
 #include <unistd.h>
+
 #include <fstream>
-#include <iostream>
 #include <memory>
 #include <string>
 #include <utility>
 #include <vector>
 
-#include <android-base/logging.h>
-#include <android-base/strings.h>
-#include <gflags/gflags.h>
-
 #include "common/libs/fs/shared_buf.h"
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/utils/environment.h"
 #include "common/libs/utils/files.h"
-#include "common/libs/utils/network.h"
 #include "common/libs/utils/size_utils.h"
 #include "common/libs/utils/subprocess.h"
 #include "common/libs/utils/tee_logging.h"
 #include "host/commands/run_cvd/boot_state_machine.h"
 #include "host/commands/run_cvd/launch.h"
 #include "host/commands/run_cvd/process_monitor.h"
+#include "host/commands/run_cvd/reporting.h"
 #include "host/commands/run_cvd/runner_defs.h"
 #include "host/commands/run_cvd/server_loop.h"
+#include "host/commands/run_cvd/validate.h"
+#include "host/libs/config/adb/adb.h"
+#include "host/libs/config/config_flag.h"
+#include "host/libs/config/config_fragment.h"
+#include "host/libs/config/custom_actions.h"
 #include "host/libs/config/cuttlefish_config.h"
-#include "host/libs/vm_manager/host_configuration.h"
 #include "host/libs/vm_manager/vm_manager.h"
 
-DEFINE_int32(reboot_notification_fd, -1,
-             "A file descriptor to notify when boot completes.");
-
 namespace cuttlefish {
 
-using vm_manager::GetVmManager;
-using vm_manager::ValidateHostConfiguration;
-
 namespace {
 
-constexpr char kGreenColor[] = "\033[1;32m";
-constexpr char kResetColor[] = "\033[0m";
+class CuttlefishEnvironment : public Feature, public DiagnosticInformation {
+ public:
+  INJECT(
+      CuttlefishEnvironment(const CuttlefishConfig& config,
+                            const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
 
-bool WriteCuttlefishEnvironment(const CuttlefishConfig& config) {
-  auto env = SharedFD::Open(config.cuttlefish_env_path().c_str(),
-                            O_CREAT | O_RDWR, 0755);
-  if (!env->IsOpen()) {
-    LOG(ERROR) << "Unable to create cuttlefish.env file";
-    return false;
+  // DiagnosticInformation
+  std::vector<std::string> Diagnostics() const override {
+    auto config_path = instance_.PerInstancePath("cuttlefish_config.json");
+    return {
+        "Launcher log: " + instance_.launcher_log_path(),
+        "Instance configuration: " + config_path,
+        "Instance environment: " + config_.cuttlefish_env_path(),
+    };
   }
-  auto instance = config.ForDefaultInstance();
-  std::string config_env = "export CUTTLEFISH_PER_INSTANCE_PATH=\"" +
-                           instance.PerInstancePath(".") + "\"\n";
-  config_env += "export ANDROID_SERIAL=" + instance.adb_ip_and_port() + "\n";
-  env->Write(config_env.c_str(), config_env.size());
-  return true;
+
+  // Feature
+  std::string Name() const override { return "CuttlefishEnvironment"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    auto env =
+        SharedFD::Open(config_.cuttlefish_env_path(), O_CREAT | O_RDWR, 0755);
+    if (!env->IsOpen()) {
+      LOG(ERROR) << "Unable to create cuttlefish.env file";
+      return false;
+    }
+    std::string config_env = "export CUTTLEFISH_PER_INSTANCE_PATH=\"" +
+                             instance_.PerInstancePath(".") + "\"\n";
+    config_env += "export ANDROID_SERIAL=" + instance_.adb_ip_and_port() + "\n";
+    auto written = WriteAll(env, config_env);
+    if (written != config_env.size()) {
+      LOG(ERROR) << "Failed to write all of \"" << config_env << "\", "
+                 << "only wrote " << written << " bytes. Error was "
+                 << env->StrError();
+      return false;
+    }
+    return true;
+  }
+
+ private:
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+fruit::Component<ServerLoop> runCvdComponent(
+    const CuttlefishConfig* config,
+    const CuttlefishConfig::InstanceSpecific* instance) {
+  return fruit::createComponent()
+      .addMultibinding<DiagnosticInformation, CuttlefishEnvironment>()
+      .addMultibinding<Feature, CuttlefishEnvironment>()
+      .bindInstance(*config)
+      .bindInstance(*instance)
+      .install(AdbConfigComponent)
+      .install(AdbConfigFragmentComponent)
+      .install(bootStateMachineComponent)
+      .install(ConfigFlagPlaceholder)
+      .install(CustomActionsComponent)
+      .install(LaunchAdbComponent)
+      .install(launchComponent)
+      .install(launchModemComponent)
+      .install(launchStreamerComponent)
+      .install(serverLoopComponent)
+      .install(validationComponent)
+      .install(vm_manager::VmManagerComponent);
 }
 
-// Forks and returns the write end of a pipe to the child process. The parent
-// process waits for boot events to come through the pipe and exits accordingly.
-SharedFD DaemonizeLauncher(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  SharedFD read_end, write_end;
-  if (!SharedFD::Pipe(&read_end, &write_end)) {
-    LOG(ERROR) << "Unable to create pipe";
-    return {}; // a closed FD
-  }
-  auto pid = fork();
-  if (pid) {
-    // Explicitly close here, otherwise we may end up reading forever if the
-    // child process dies.
-    write_end->Close();
-    RunnerExitCodes exit_code;
-    auto bytes_read = read_end->Read(&exit_code, sizeof(exit_code));
-    if (bytes_read != sizeof(exit_code)) {
-      LOG(ERROR) << "Failed to read a complete exit code, read " << bytes_read
-                 << " bytes only instead of the expected " << sizeof(exit_code);
-      exit_code = RunnerExitCodes::kPipeIOError;
-    } else if (exit_code == RunnerExitCodes::kSuccess) {
-      LOG(INFO) << "Virtual device booted successfully";
-    } else if (exit_code == RunnerExitCodes::kVirtualDeviceBootFailed) {
-      LOG(ERROR) << "Virtual device failed to boot";
-    } else {
-      LOG(ERROR) << "Unexpected exit code: " << exit_code;
-    }
-    if (exit_code == RunnerExitCodes::kSuccess) {
-      LOG(INFO) << kBootCompletedMessage;
-    } else {
-      LOG(INFO) << kBootFailedMessage;
-    }
-    std::exit(exit_code);
-  } else {
-    // The child returns the write end of the pipe
-    if (daemon(/*nochdir*/ 1, /*noclose*/ 1) != 0) {
-      LOG(ERROR) << "Failed to daemonize child process: " << strerror(errno);
-      std::exit(RunnerExitCodes::kDaemonizationError);
-    }
-    // Redirect standard I/O
-    auto log_path = instance.launcher_log_path();
-    auto log = SharedFD::Open(log_path.c_str(), O_CREAT | O_WRONLY | O_APPEND,
-                              S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
-    if (!log->IsOpen()) {
-      LOG(ERROR) << "Failed to create launcher log file: " << log->StrError();
-      std::exit(RunnerExitCodes::kDaemonizationError);
-    }
-    ::android::base::SetLogger(
-        TeeLogger({{LogFileSeverity(), log, MetadataLevel::FULL}}));
-    auto dev_null = SharedFD::Open("/dev/null", O_RDONLY);
-    if (!dev_null->IsOpen()) {
-      LOG(ERROR) << "Failed to open /dev/null: " << dev_null->StrError();
-      std::exit(RunnerExitCodes::kDaemonizationError);
-    }
-    if (dev_null->UNMANAGED_Dup2(0) < 0) {
-      LOG(ERROR) << "Failed dup2 stdin: " << dev_null->StrError();
-      std::exit(RunnerExitCodes::kDaemonizationError);
-    }
-    if (log->UNMANAGED_Dup2(1) < 0) {
-      LOG(ERROR) << "Failed dup2 stdout: " << log->StrError();
-      std::exit(RunnerExitCodes::kDaemonizationError);
-    }
-    if (log->UNMANAGED_Dup2(2) < 0) {
-      LOG(ERROR) << "Failed dup2 seterr: " << log->StrError();
-      std::exit(RunnerExitCodes::kDaemonizationError);
-    }
-
-    read_end->Close();
-    return write_end;
-  }
-}
-
-std::string GetConfigFilePath(const CuttlefishConfig& config) {
-  auto instance = config.ForDefaultInstance();
-  return instance.PerInstancePath("cuttlefish_config.json");
-}
-
-void PrintStreamingInformation(const CuttlefishConfig& config) {
-  if (config.ForDefaultInstance().start_webrtc_sig_server()) {
-    // TODO (jemoreira): Change this when webrtc is moved to the debian package.
-    LOG(INFO) << kGreenColor << "Point your browser to https://"
-              << config.sig_server_address() << ":" << config.sig_server_port()
-              << " to interact with the device." << kResetColor;
-  } else if (config.enable_vnc_server()) {
-    LOG(INFO) << kGreenColor << "VNC server started on port "
-              << config.ForDefaultInstance().vnc_server_port() << kResetColor;
-  }
-  // When WebRTC is enabled but an operator other than the one launched by
-  // run_cvd is used there is no way to know the url to which to point the
-  // browser to.
-}
-
-}  // namespace
-
-int RunCvdMain(int argc, char** argv) {
-  setenv("ANDROID_LOG_TAGS", "*:v", /* overwrite */ 0);
-  ::android::base::InitLogging(argv, android::base::StderrLogger);
-  google::ParseCommandLineFlags(&argc, &argv, false);
-
+bool IsStdinValid() {
   if (isatty(0)) {
-    LOG(FATAL) << "stdin was a tty, expected to be passed the output of a previous stage. "
+    LOG(ERROR) << "stdin was a tty, expected to be passed the output of a "
+                  "previous stage. "
                << "Did you mean to run launch_cvd?";
-    return RunnerExitCodes::kInvalidHostConfiguration;
+    return false;
   } else {
     int error_num = errno;
     if (error_num == EBADF) {
-      LOG(FATAL) << "stdin was not a valid file descriptor, expected to be passed the output "
+      LOG(ERROR) << "stdin was not a valid file descriptor, expected to be "
+                    "passed the output "
                  << "of assemble_cvd. Did you mean to run launch_cvd?";
-      return RunnerExitCodes::kInvalidHostConfiguration;
+      return false;
     }
   }
+  return true;
+}
 
+const CuttlefishConfig* FindConfigFromStdin() {
   std::string input_files_str;
   {
     auto input_fd = SharedFD::Dup(0);
     auto bytes_read = ReadAll(input_fd, &input_files_str);
     if (bytes_read < 0) {
-      LOG(FATAL) << "Failed to read input files. Error was \"" << input_fd->StrError() << "\"";
+      LOG(ERROR) << "Failed to read input files. Error was \""
+                 << input_fd->StrError() << "\"";
+      return nullptr;
     }
   }
   std::vector<std::string> input_files = android::base::Split(input_files_str, "\n");
@@ -199,183 +158,78 @@
       setenv(kCuttlefishConfigEnvVarName, file.c_str(), /* overwrite */ false);
     }
   }
-  if (!found_config) {
-    return RunnerExitCodes::kCuttlefishConfigurationInitError;
-  }
+  return CuttlefishConfig::Get();
+}
 
-  auto config = CuttlefishConfig::Get();
-  auto instance = config->ForDefaultInstance();
-
+void ConfigureLogs(const CuttlefishConfig& config,
+                   const CuttlefishConfig::InstanceSpecific& instance) {
   auto log_path = instance.launcher_log_path();
 
-  {
-    std::ofstream launcher_log_ofstream(log_path.c_str());
-    auto assembly_path = config->AssemblyPath("assemble_cvd.log");
-    std::ifstream assembly_log_ifstream(assembly_path);
-    if (assembly_log_ifstream) {
-      auto assemble_log = ReadFile(assembly_path);
-      launcher_log_ofstream << assemble_log;
-    }
+  std::ofstream launcher_log_ofstream(log_path.c_str());
+  auto assembly_path = config.AssemblyPath("assemble_cvd.log");
+  std::ifstream assembly_log_ifstream(assembly_path);
+  if (assembly_log_ifstream) {
+    auto assemble_log = ReadFile(assembly_path);
+    launcher_log_ofstream << assemble_log;
   }
   ::android::base::SetLogger(LogToStderrAndFiles({log_path}));
+}
 
+bool ChdirIntoRuntimeDir(const CuttlefishConfig::InstanceSpecific& instance) {
   // Change working directory to the instance directory as early as possible to
   // ensure all host processes have the same working dir. This helps stop_cvd
   // find the running processes when it can't establish a communication with the
   // launcher.
   auto chdir_ret = chdir(instance.instance_dir().c_str());
   if (chdir_ret != 0) {
-    auto error = errno;
-    LOG(ERROR) << "Unable to change dir into instance directory ("
-               << instance.instance_dir() << "): " << strerror(error);
-    return RunnerExitCodes::kInstanceDirCreationError;
+    PLOG(ERROR) << "Unable to change dir into instance directory ("
+                << instance.instance_dir() << "): ";
+    return false;
+  }
+  return true;
+}
+
+}  // namespace
+
+int RunCvdMain(int argc, char** argv) {
+  setenv("ANDROID_LOG_TAGS", "*:v", /* overwrite */ 0);
+  ::android::base::InitLogging(argv, android::base::StderrLogger);
+  google::ParseCommandLineFlags(&argc, &argv, false);
+
+  CHECK(IsStdinValid()) << "Invalid stdin";
+  auto config = FindConfigFromStdin();
+  CHECK(config) << "Could not find config";
+  auto instance = config->ForDefaultInstance();
+
+  ConfigureLogs(*config, instance);
+  CHECK(ChdirIntoRuntimeDir(instance)) << "Could not enter runtime dir";
+
+  fruit::Injector<ServerLoop> injector(runCvdComponent, config, &instance);
+
+  for (auto& fragment : injector.getMultibindings<ConfigFragment>()) {
+    CHECK(config->LoadFragment(*fragment)) << "Failed to load config fragment";
   }
 
-  auto used_tap_devices = TapInterfacesInUse();
-  if (used_tap_devices.count(instance.wifi_tap_name())) {
-    LOG(ERROR) << "Wifi TAP device already in use";
-    return RunnerExitCodes::kTapDeviceInUse;
-  } else if (used_tap_devices.count(instance.mobile_tap_name())) {
-    LOG(ERROR) << "Mobile TAP device already in use";
-    return RunnerExitCodes::kTapDeviceInUse;
-  } else if (used_tap_devices.count(instance.ethernet_tap_name())) {
-    LOG(ERROR) << "Ethernet TAP device already in use";
-  }
+  // One of the setup features can consume most output, so print this early.
+  DiagnosticInformation::PrintAll(
+      injector.getMultibindings<DiagnosticInformation>());
 
-  auto vm_manager = GetVmManager(config->vm_manager(), config->target_arch());
-
-#ifndef __ANDROID__
-  // Check host configuration
-  std::vector<std::string> config_commands;
-  if (!ValidateHostConfiguration(&config_commands)) {
-    LOG(ERROR) << "Validation of user configuration failed";
-    std::cout << "Execute the following to correctly configure:" << std::endl;
-    for (auto& command : config_commands) {
-      std::cout << "  " << command << std::endl;
-    }
-    std::cout << "You may need to logout for the changes to take effect"
-              << std::endl;
-    return RunnerExitCodes::kInvalidHostConfiguration;
-  }
-#endif
-
-  if (!WriteCuttlefishEnvironment(*config)) {
-    LOG(ERROR) << "Unable to write cuttlefish environment file";
-  }
-
-  PrintStreamingInformation(*config);
-
-  if (config->console()) {
-    LOG(INFO) << kGreenColor << "To access the console run: screen "
-              << instance.console_path() << kResetColor;
-  } else {
-    LOG(INFO) << kGreenColor
-              << "Serial console is disabled; use -console=true to enable it"
-              << kResetColor;
-  }
-
-  LOG(INFO) << kGreenColor
-            << "The following files contain useful debugging information:"
-            << kResetColor;
-  LOG(INFO) << kGreenColor
-            << "  Launcher log: " << instance.launcher_log_path()
-            << kResetColor;
-  LOG(INFO) << kGreenColor
-            << "  Android's logcat output: " << instance.logcat_path()
-            << kResetColor;
-  LOG(INFO) << kGreenColor
-            << "  Kernel log: " << instance.PerInstancePath("kernel.log")
-            << kResetColor;
-  LOG(INFO) << kGreenColor
-            << "  Instance configuration: " << GetConfigFilePath(*config)
-            << kResetColor;
-  LOG(INFO) << kGreenColor
-            << "  Instance environment: " << config->cuttlefish_env_path()
-            << kResetColor;
-
-  auto launcher_monitor_path = instance.launcher_monitor_socket_path();
-  auto launcher_monitor_socket = SharedFD::SocketLocalServer(
-      launcher_monitor_path.c_str(), false, SOCK_STREAM, 0666);
-  if (!launcher_monitor_socket->IsOpen()) {
-    LOG(ERROR) << "Error when opening launcher server: "
-               << launcher_monitor_socket->StrError();
-    return RunnerExitCodes::kMonitorCreationFailed;
-  }
-  SharedFD foreground_launcher_pipe;
-  if (config->run_as_daemon()) {
-    foreground_launcher_pipe = DaemonizeLauncher(*config);
-    if (!foreground_launcher_pipe->IsOpen()) {
-      return RunnerExitCodes::kDaemonizationError;
-    }
-  } else {
-    // Make sure the launcher runs in its own process group even when running in
-    // foreground
-    if (getsid(0) != getpid()) {
-      int retval = setpgid(0, 0);
-      if (retval) {
-        LOG(ERROR) << "Failed to create new process group: " << strerror(errno);
-        std::exit(RunnerExitCodes::kProcessGroupError);
-      }
-    }
-  }
-
-  SharedFD reboot_notification;
-  if (FLAGS_reboot_notification_fd >= 0) {
-    reboot_notification = SharedFD::Dup(FLAGS_reboot_notification_fd);
-    close(FLAGS_reboot_notification_fd);
-  }
+  const auto& features = injector.getMultibindings<Feature>();
+  CHECK(Feature::RunSetup(features)) << "Failed to run feature setup.";
 
   // Monitor and restart host processes supporting the CVD
   ProcessMonitor process_monitor(config->restart_subprocesses());
 
-  if (config->enable_metrics() == CuttlefishConfig::kYes) {
-    process_monitor.AddCommands(LaunchMetrics());
+  for (auto& command_source : injector.getMultibindings<CommandSource>()) {
+    if (command_source->Enabled()) {
+      process_monitor.AddCommands(command_source->Commands());
+    }
   }
-  process_monitor.AddCommands(LaunchModemSimulatorIfEnabled(*config));
-
-  auto kernel_log_monitor = LaunchKernelLogMonitor(*config, 3);
-  SharedFD boot_events_pipe = kernel_log_monitor.pipes[0];
-  SharedFD adbd_events_pipe = kernel_log_monitor.pipes[1];
-  SharedFD webrtc_events_pipe = kernel_log_monitor.pipes[2];
-  kernel_log_monitor.pipes.clear();
-  process_monitor.AddCommands(std::move(kernel_log_monitor.commands));
-
-  CvdBootStateMachine boot_state_machine(foreground_launcher_pipe,
-                                         reboot_notification, boot_events_pipe);
-
-  process_monitor.AddCommands(LaunchRootCanal(*config));
-  process_monitor.AddCommands(LaunchLogcatReceiver(*config));
-  process_monitor.AddCommands(LaunchConfigServer(*config));
-  process_monitor.AddCommands(LaunchTombstoneReceiver(*config));
-  process_monitor.AddCommands(LaunchGnssGrpcProxyServerIfEnabled(*config));
-  process_monitor.AddCommands(LaunchSecureEnvironment(*config));
-  if (config->enable_host_bluetooth()) {
-    process_monitor.AddCommands(LaunchBluetoothConnector(*config));
-  }
-  process_monitor.AddCommands(LaunchVehicleHalServerIfEnabled(*config));
-  process_monitor.AddCommands(LaunchConsoleForwarderIfEnabled(*config));
-
-  // The streamer needs to launch before the VMM because it serves on several
-  // sockets (input devices, vsock frame server) when using crosvm.
-  if (config->enable_vnc_server()) {
-    process_monitor.AddCommands(LaunchVNCServer(*config));
-  }
-  if (config->enable_webrtc()) {
-    process_monitor.AddCommands(LaunchWebRTC(*config, webrtc_events_pipe));
-  }
-
-  // Start the guest VM
-  process_monitor.AddCommands(vm_manager->StartCommands(*config));
-
-  // Start other host processes
-  process_monitor.AddCommands(
-      LaunchSocketVsockProxyIfEnabled(*config, adbd_events_pipe));
-  process_monitor.AddCommands(LaunchAdbConnectorIfEnabled(*config));
 
   CHECK(process_monitor.StartAndMonitorProcesses())
       << "Could not start subprocesses";
 
-  ServerLoop(launcher_monitor_socket, &process_monitor); // Should not return
+  injector.get<ServerLoop&>().Run(process_monitor);  // Should not return
   LOG(ERROR) << "The server loop returned, it should never happen!!";
 
   return RunnerExitCodes::kServerError;
diff --git a/host/commands/run_cvd/process_monitor.cc b/host/commands/run_cvd/process_monitor.cc
index a4f7f72..9c11ce7 100644
--- a/host/commands/run_cvd/process_monitor.cc
+++ b/host/commands/run_cvd/process_monitor.cc
@@ -118,7 +118,7 @@
 }
 
 static void LogSubprocessExit(const std::string& name, pid_t pid, int wstatus) {
-  LOG(INFO) << "Detected exit of monitored subprocess " << name;
+  LOG(INFO) << "Detected unexpected exit of monitored subprocess " << name;
   if (WIFEXITED(wstatus)) {
     LOG(INFO) << "Subprocess " << name << " (" << pid
               << ") has exited with exit code " << WEXITSTATUS(wstatus);
@@ -139,8 +139,7 @@
 
   LOG(DEBUG) << "Starting monitoring subprocesses";
   for (auto& monitored : monitored_processes_) {
-    cuttlefish::SubprocessOptions options;
-    options.InGroup(true);
+    auto options = SubprocessOptions().InGroup(true);
     monitored.proc.reset(new Subprocess(monitored.cmd->Start(options)));
     CHECK(monitored.proc->Started()) << "Failed to start process";
   }
@@ -185,8 +184,7 @@
     } else {
       LogSubprocessExit(it->cmd->GetShortName(), it->proc->pid(), wstatus);
       if (restart_subprocesses_) {
-        cuttlefish::SubprocessOptions options;
-        options.InGroup(true);
+        auto options = SubprocessOptions().InGroup(true);
         it->proc.reset(new Subprocess(it->cmd->Start(options)));
       } else {
         monitored_processes_.erase(it);
@@ -195,21 +193,25 @@
   }
 
   parent_comms_thread.join(); // Should have exited if `running` is false
-  // Processes were started in the order they appear in the vector, stop them in
-  // reverse order for symmetry.
   auto stop = [](const auto& it) {
-    if (!it.proc->Stop()) {
+    auto stop_result = it.proc->Stop();
+    if (stop_result == StopperResult::kStopFailure) {
       LOG(WARNING) << "Error in stopping \"" << it.cmd->GetShortName() << "\"";
       return false;
     }
     int wstatus = 0;
-    auto ret = it.proc->Wait(&wstatus, 0);
-    if (ret < 0) {
+    auto pid = it.proc->Wait(&wstatus, 0);
+    if (pid < 0) {
       LOG(WARNING) << "Failed to wait for process " << it.cmd->GetShortName();
       return false;
     }
+    if (stop_result == StopperResult::kStopCrash) {
+      LogSubprocessExit(it.cmd->GetShortName(), pid, wstatus);
+    }
     return true;
   };
+  // Processes were started in the order they appear in the vector, stop them in
+  // reverse order for symmetry.
   size_t stopped = std::count_if(monitored.rbegin(), monitored.rend(), stop);
   LOG(DEBUG) << "Done monitoring subprocesses";
   return stopped == monitored.size();
diff --git a/host/commands/run_cvd/reporting.cpp b/host/commands/run_cvd/reporting.cpp
new file mode 100644
index 0000000..db25185
--- /dev/null
+++ b/host/commands/run_cvd/reporting.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/commands/run_cvd/reporting.h"
+
+#include <android-base/logging.h>
+#include <fruit/fruit.h>
+#include <string>
+#include <vector>
+
+namespace cuttlefish {
+
+static constexpr char kGreenColor[] = "\033[1;32m";
+static constexpr char kResetColor[] = "\033[0m";
+
+DiagnosticInformation::~DiagnosticInformation() = default;
+
+void DiagnosticInformation::PrintAll(
+    const std::vector<DiagnosticInformation*>& infos) {
+  LOG(INFO) << kGreenColor
+            << "The following files contain useful debugging information:"
+            << kResetColor;
+  for (const auto& info : infos) {
+    for (const auto& line : info->Diagnostics()) {
+      LOG(INFO) << kGreenColor << "  " << line << kResetColor;
+    }
+  }
+}
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/size_utils.cpp b/host/commands/run_cvd/reporting.h
similarity index 64%
copy from common/libs/utils/size_utils.cpp
copy to host/commands/run_cvd/reporting.h
index 9f25445..f6b4d5a 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/host/commands/run_cvd/reporting.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,15 +14,20 @@
  * limitations under the License.
  */
 
-#include "common/libs/utils/size_utils.h"
+#pragma once
 
-#include <unistd.h>
+#include <fruit/fruit.h>
+#include <string>
+#include <vector>
 
 namespace cuttlefish {
 
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
-}
+class DiagnosticInformation {
+ public:
+  virtual ~DiagnosticInformation();
+  virtual std::vector<std::string> Diagnostics() const = 0;
+
+  static void PrintAll(const std::vector<DiagnosticInformation*>&);
+};
 
 }  // namespace cuttlefish
diff --git a/host/commands/run_cvd/server_loop.cpp b/host/commands/run_cvd/server_loop.cpp
index 5e77b9d..3beb1d5 100644
--- a/host/commands/run_cvd/server_loop.cpp
+++ b/host/commands/run_cvd/server_loop.cpp
@@ -16,6 +16,7 @@
 
 #include "host/commands/run_cvd/server_loop.h"
 
+#include <fruit/fruit.h>
 #include <gflags/gflags.h>
 #include <unistd.h>
 #include <string>
@@ -26,6 +27,7 @@
 #include "host/commands/run_cvd/runner_defs.h"
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/config/data_image.h"
+#include "host/libs/config/feature.h"
 
 namespace cuttlefish {
 
@@ -47,167 +49,203 @@
   return true;
 }
 
-void DeleteFifos(const CuttlefishConfig::InstanceSpecific& instance) {
-  // TODO(schuffelen): Create these FIFOs in assemble_cvd instead of run_cvd.
-  std::vector<std::string> pipes = {
-      instance.kernel_log_pipe_name(),
-      instance.console_in_pipe_name(),
-      instance.console_out_pipe_name(),
-      instance.logcat_pipe_name(),
-      instance.PerInstanceInternalPath("keymaster_fifo_vm.in"),
-      instance.PerInstanceInternalPath("keymaster_fifo_vm.out"),
-      instance.PerInstanceInternalPath("gatekeeper_fifo_vm.in"),
-      instance.PerInstanceInternalPath("gatekeeper_fifo_vm.out"),
-      instance.PerInstanceInternalPath("bt_fifo_vm.in"),
-      instance.PerInstanceInternalPath("bt_fifo_vm.out"),
-  };
-  for (const auto& pipe : pipes) {
-    unlink(pipe.c_str());
-  }
-}
+class ServerLoopImpl : public ServerLoop, public Feature {
+ public:
+  INJECT(ServerLoopImpl(const CuttlefishConfig& config,
+                        const CuttlefishConfig::InstanceSpecific& instance))
+      : config_(config), instance_(instance) {}
 
-bool PowerwashFiles() {
-  auto config = CuttlefishConfig::Get();
-  if (!config) {
-    LOG(ERROR) << "Could not load the config.";
-    return false;
-  }
-  auto instance = config->ForDefaultInstance();
-
-  DeleteFifos(instance);
-
-  // TODO(schuffelen): Clean up duplication with assemble_cvd
-  auto kregistry_path = instance.access_kregistry_path();
-  unlink(kregistry_path.c_str());
-  CreateBlankImage(kregistry_path, 2 /* mb */, "none");
-
-  auto pstore_path = instance.pstore_path();
-  unlink(pstore_path.c_str());
-  CreateBlankImage(pstore_path, 2 /* mb */, "none");
-
-  auto sdcard_path = instance.sdcard_path();
-  auto sdcard_size = FileSize(sdcard_path);
-  unlink(sdcard_path.c_str());
-  // round up
-  auto sdcard_mb_size = (sdcard_size + (1 << 20) - 1) / (1 << 20);
-  LOG(DEBUG) << "Size in mb is " << sdcard_mb_size;
-  CreateBlankImage(sdcard_path, sdcard_mb_size, "sdcard");
-
-  auto overlay_path = instance.PerInstancePath("overlay.img");
-  unlink(overlay_path.c_str());
-  if (!CreateQcowOverlay(config->crosvm_binary(),
-                         instance.os_composite_disk_path(), overlay_path)) {
-    LOG(ERROR) << "CreateQcowOverlay failed";
-    return false;
-  }
-  return true;
-}
-
-void RestartRunCvd(const CuttlefishConfig& config, int notification_fd) {
-  auto config_path = config.AssemblyPath("cuttlefish_config.json");
-  auto followup_stdin = SharedFD::MemfdCreate("pseudo_stdin");
-  WriteAll(followup_stdin, config_path + "\n");
-  followup_stdin->LSeek(0, SEEK_SET);
-  followup_stdin->UNMANAGED_Dup2(0);
-
-  auto argv_vec = gflags::GetArgvs();
-  char** argv = new char*[argv_vec.size() + 2];
-  for (size_t i = 0; i < argv_vec.size(); i++) {
-    argv[i] = argv_vec[i].data();
-  }
-  // Will take precedence over any earlier arguments.
-  std::string reboot_notification =
-      "-reboot_notification_fd=" + std::to_string(notification_fd);
-  argv[argv_vec.size()] = reboot_notification.data();
-  argv[argv_vec.size() + 1] = nullptr;
-
-  execv("/proc/self/exe", argv);
-  // execve should not return, so something went wrong.
-  PLOG(ERROR) << "execv returned: ";
-}
-
-}  // namespace
-
-void ServerLoop(SharedFD server, ProcessMonitor* process_monitor) {
-  while (true) {
-    // TODO: use select to handle simultaneous connections.
-    auto client = SharedFD::Accept(*server);
-    LauncherAction action;
-    while (client->IsOpen() && client->Read(&action, sizeof(action)) > 0) {
-      switch (action) {
-        case LauncherAction::kStop:
-          if (process_monitor->StopMonitoredProcesses()) {
+  // ServerLoop
+  void Run(ProcessMonitor& process_monitor) override {
+    while (true) {
+      // TODO: use select to handle simultaneous connections.
+      auto client = SharedFD::Accept(*server_);
+      LauncherAction action;
+      while (client->IsOpen() && client->Read(&action, sizeof(action)) > 0) {
+        switch (action) {
+          case LauncherAction::kStop:
+            if (process_monitor.StopMonitoredProcesses()) {
+              auto response = LauncherResponse::kSuccess;
+              client->Write(&response, sizeof(response));
+              std::exit(0);
+            } else {
+              auto response = LauncherResponse::kError;
+              client->Write(&response, sizeof(response));
+            }
+            break;
+          case LauncherAction::kStatus: {
+            // TODO(schuffelen): Return more information on a side channel
             auto response = LauncherResponse::kSuccess;
             client->Write(&response, sizeof(response));
-            std::exit(0);
-          } else {
-            auto response = LauncherResponse::kError;
-            client->Write(&response, sizeof(response));
-          }
-          break;
-        case LauncherAction::kStatus: {
-          // TODO(schuffelen): Return more information on a side channel
-          auto response = LauncherResponse::kSuccess;
-          client->Write(&response, sizeof(response));
-          break;
-        }
-        case LauncherAction::kPowerwash: {
-          LOG(INFO) << "Received a Powerwash request from the monitor socket";
-          if (!process_monitor->StopMonitoredProcesses()) {
-            LOG(ERROR) << "Stopping processes failed.";
-            auto response = LauncherResponse::kError;
-            client->Write(&response, sizeof(response));
             break;
           }
-          if (!PowerwashFiles()) {
-            LOG(ERROR) << "Powerwashing files failed.";
-            auto response = LauncherResponse::kError;
+          case LauncherAction::kPowerwash: {
+            LOG(INFO) << "Received a Powerwash request from the monitor socket";
+            if (!process_monitor.StopMonitoredProcesses()) {
+              LOG(ERROR) << "Stopping processes failed.";
+              auto response = LauncherResponse::kError;
+              client->Write(&response, sizeof(response));
+              break;
+            }
+            if (!PowerwashFiles()) {
+              LOG(ERROR) << "Powerwashing files failed.";
+              auto response = LauncherResponse::kError;
+              client->Write(&response, sizeof(response));
+              break;
+            }
+            auto response = LauncherResponse::kSuccess;
             client->Write(&response, sizeof(response));
+
+            RestartRunCvd(client->UNMANAGED_Dup());
+            // RestartRunCvd should not return, so something went wrong.
+            response = LauncherResponse::kError;
+            client->Write(&response, sizeof(response));
+            LOG(FATAL) << "run_cvd in a bad state";
             break;
           }
-          auto response = LauncherResponse::kSuccess;
-          client->Write(&response, sizeof(response));
+          case LauncherAction::kRestart: {
+            if (!process_monitor.StopMonitoredProcesses()) {
+              LOG(ERROR) << "Stopping processes failed.";
+              auto response = LauncherResponse::kError;
+              client->Write(&response, sizeof(response));
+              break;
+            }
+            DeleteFifos();
 
-          auto config = CuttlefishConfig::Get();
-          CHECK(config) << "Could not load config";
-          RestartRunCvd(*config, client->UNMANAGED_Dup());
-          // RestartRunCvd should not return, so something went wrong.
-          response = LauncherResponse::kError;
-          client->Write(&response, sizeof(response));
-          LOG(FATAL) << "run_cvd in a bad state";
-          break;
-        }
-        case LauncherAction::kRestart: {
-          if (!process_monitor->StopMonitoredProcesses()) {
-            LOG(ERROR) << "Stopping processes failed.";
-            auto response = LauncherResponse::kError;
+            auto response = LauncherResponse::kSuccess;
             client->Write(&response, sizeof(response));
+            RestartRunCvd(client->UNMANAGED_Dup());
+            // RestartRunCvd should not return, so something went wrong.
+            response = LauncherResponse::kError;
+            client->Write(&response, sizeof(response));
+            LOG(FATAL) << "run_cvd in a bad state";
             break;
           }
-
-          auto config = CuttlefishConfig::Get();
-          CHECK(config) << "Could not load config";
-          auto instance = config->ForDefaultInstance();
-          DeleteFifos(instance);
-
-          auto response = LauncherResponse::kSuccess;
-          client->Write(&response, sizeof(response));
-          CHECK(config) << "Could not load config";
-          RestartRunCvd(*config, client->UNMANAGED_Dup());
-          // RestartRunCvd should not return, so something went wrong.
-          response = LauncherResponse::kError;
-          client->Write(&response, sizeof(response));
-          LOG(FATAL) << "run_cvd in a bad state";
-          break;
+          default:
+            LOG(ERROR) << "Unrecognized launcher action: "
+                       << static_cast<char>(action);
+            auto response = LauncherResponse::kError;
+            client->Write(&response, sizeof(response));
         }
-        default:
-          LOG(ERROR) << "Unrecognized launcher action: "
-                     << static_cast<char>(action);
-          auto response = LauncherResponse::kError;
-          client->Write(&response, sizeof(response));
       }
     }
   }
+
+  // Feature
+  std::string Name() const override { return "ServerLoop"; }
+
+ private:
+  bool Enabled() const override { return true; }
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() {
+    auto launcher_monitor_path = instance_.launcher_monitor_socket_path();
+    server_ = SharedFD::SocketLocalServer(launcher_monitor_path.c_str(), false,
+                                          SOCK_STREAM, 0666);
+    if (!server_->IsOpen()) {
+      LOG(ERROR) << "Error when opening launcher server: "
+                 << server_->StrError();
+      return false;
+    }
+    return true;
+  }
+
+  void DeleteFifos() {
+    // TODO(schuffelen): Create these FIFOs in assemble_cvd instead of run_cvd.
+    std::vector<std::string> pipes = {
+        instance_.kernel_log_pipe_name(),
+        instance_.console_in_pipe_name(),
+        instance_.console_out_pipe_name(),
+        instance_.logcat_pipe_name(),
+        instance_.PerInstanceInternalPath("keymaster_fifo_vm.in"),
+        instance_.PerInstanceInternalPath("keymaster_fifo_vm.out"),
+        instance_.PerInstanceInternalPath("gatekeeper_fifo_vm.in"),
+        instance_.PerInstanceInternalPath("gatekeeper_fifo_vm.out"),
+        instance_.PerInstanceInternalPath("bt_fifo_vm.in"),
+        instance_.PerInstanceInternalPath("bt_fifo_vm.out"),
+        instance_.PerInstanceInternalPath("gnsshvc_fifo_vm.in"),
+        instance_.PerInstanceInternalPath("gnsshvc_fifo_vm.out"),
+    };
+    for (const auto& pipe : pipes) {
+      unlink(pipe.c_str());
+    }
+  }
+
+  bool PowerwashFiles() {
+    DeleteFifos();
+
+    // TODO(schuffelen): Clean up duplication with assemble_cvd
+    unlink(instance_.PerInstancePath("NVChip").c_str());
+
+    auto kregistry_path = instance_.access_kregistry_path();
+    unlink(kregistry_path.c_str());
+    CreateBlankImage(kregistry_path, 2 /* mb */, "none");
+
+    auto pstore_path = instance_.pstore_path();
+    unlink(pstore_path.c_str());
+    CreateBlankImage(pstore_path, 2 /* mb */, "none");
+
+    auto sdcard_path = instance_.sdcard_path();
+    auto sdcard_size = FileSize(sdcard_path);
+    unlink(sdcard_path.c_str());
+    // round up
+    auto sdcard_mb_size = (sdcard_size + (1 << 20) - 1) / (1 << 20);
+    LOG(DEBUG) << "Size in mb is " << sdcard_mb_size;
+    CreateBlankImage(sdcard_path, sdcard_mb_size, "sdcard");
+    std::vector<std::string> overlay_files{"overlay.img"};
+    if (instance_.start_ap()) {
+      overlay_files.emplace_back("ap_overlay.img");
+    }
+    for (auto overlay_file : {"overlay.img", "ap_overlay.img"}) {
+      auto overlay_path = instance_.PerInstancePath(overlay_file);
+      unlink(overlay_path.c_str());
+      if (!CreateQcowOverlay(config_.crosvm_binary(),
+                             config_.os_composite_disk_path(), overlay_path)) {
+        LOG(ERROR) << "CreateQcowOverlay failed";
+        return false;
+      }
+    }
+    return true;
+  }
+
+  void RestartRunCvd(int notification_fd) {
+    auto config_path = config_.AssemblyPath("cuttlefish_config.json");
+    auto followup_stdin = SharedFD::MemfdCreate("pseudo_stdin");
+    WriteAll(followup_stdin, config_path + "\n");
+    followup_stdin->LSeek(0, SEEK_SET);
+    followup_stdin->UNMANAGED_Dup2(0);
+
+    auto argv_vec = gflags::GetArgvs();
+    char** argv = new char*[argv_vec.size() + 2];
+    for (size_t i = 0; i < argv_vec.size(); i++) {
+      argv[i] = argv_vec[i].data();
+    }
+    // Will take precedence over any earlier arguments.
+    std::string reboot_notification =
+        "-reboot_notification_fd=" + std::to_string(notification_fd);
+    argv[argv_vec.size()] = reboot_notification.data();
+    argv[argv_vec.size() + 1] = nullptr;
+
+    execv("/proc/self/exe", argv);
+    // execve should not return, so something went wrong.
+    PLOG(ERROR) << "execv returned: ";
+  }
+
+  const CuttlefishConfig& config_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  SharedFD server_;
+};
+
+}  // namespace
+
+ServerLoop::~ServerLoop() = default;
+
+fruit::Component<fruit::Required<const CuttlefishConfig,
+                                 const CuttlefishConfig::InstanceSpecific>,
+                 ServerLoop>
+serverLoopComponent() {
+  return fruit::createComponent()
+      .bind<ServerLoop, ServerLoopImpl>()
+      .addMultibinding<Feature, ServerLoopImpl>();
 }
 
 }  // namespace cuttlefish
diff --git a/host/commands/run_cvd/server_loop.h b/host/commands/run_cvd/server_loop.h
index 327aff4..2364cb9 100644
--- a/host/commands/run_cvd/server_loop.h
+++ b/host/commands/run_cvd/server_loop.h
@@ -16,11 +16,22 @@
 
 #pragma once
 
+#include <fruit/fruit.h>
+
 #include "common/libs/fs/shared_fd.h"
 #include "host/commands/run_cvd/process_monitor.h"
+#include "host/libs/config/cuttlefish_config.h"
 
 namespace cuttlefish {
 
-void ServerLoop(SharedFD server, ProcessMonitor* process_monitor);
+class ServerLoop {
+ public:
+  virtual ~ServerLoop();
+  virtual void Run(ProcessMonitor& process_monitor) = 0;
+};
 
+fruit::Component<fruit::Required<const CuttlefishConfig,
+                                 const CuttlefishConfig::InstanceSpecific>,
+                 ServerLoop>
+serverLoopComponent();
 }
diff --git a/host/commands/run_cvd/validate.cpp b/host/commands/run_cvd/validate.cpp
new file mode 100644
index 0000000..73a7a25
--- /dev/null
+++ b/host/commands/run_cvd/validate.cpp
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <android-base/logging.h>
+#include <fruit/fruit.h>
+#include <iostream>
+
+#include "common/libs/utils/network.h"
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/feature.h"
+#include "host/libs/vm_manager/host_configuration.h"
+
+namespace cuttlefish {
+namespace {
+
+using vm_manager::ValidateHostConfiguration;
+
+class ValidateTapDevices : public Feature {
+ public:
+  INJECT(ValidateTapDevices(const CuttlefishConfig::InstanceSpecific& instance))
+      : instance_(instance) {}
+
+  std::string Name() const override { return "ValidateTapDevices"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    auto used_tap_devices = TapInterfacesInUse();
+    if (used_tap_devices.count(instance_.wifi_tap_name())) {
+      LOG(ERROR) << "Wifi TAP device already in use";
+      return false;
+    } else if (used_tap_devices.count(instance_.mobile_tap_name())) {
+      LOG(ERROR) << "Mobile TAP device already in use";
+      return false;
+    } else if (used_tap_devices.count(instance_.ethernet_tap_name())) {
+      LOG(ERROR) << "Ethernet TAP device already in use";
+      return false;
+    }
+    return true;
+  }
+
+ private:
+  const CuttlefishConfig::InstanceSpecific& instance_;
+};
+
+class ValidateHostConfigurationFeature : public Feature {
+ public:
+  INJECT(ValidateHostConfigurationFeature()) {}
+
+  bool Enabled() const override {
+#ifndef __ANDROID__
+    return true;
+#else
+    return false;
+#endif
+  }
+  std::string Name() const override { return "ValidateHostConfiguration"; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    // Check host configuration
+    std::vector<std::string> config_commands;
+    if (!ValidateHostConfiguration(&config_commands)) {
+      LOG(ERROR) << "Validation of user configuration failed";
+      std::cout << "Execute the following to correctly configure:" << std::endl;
+      for (auto& command : config_commands) {
+        std::cout << "  " << command << std::endl;
+      }
+      std::cout << "You may need to logout for the changes to take effect"
+                << std::endl;
+      return false;
+    }
+    return true;
+  }
+};
+
+}  // namespace
+
+fruit::Component<fruit::Required<const CuttlefishConfig::InstanceSpecific>>
+validationComponent() {
+  return fruit::createComponent()
+      .addMultibinding<Feature, ValidateHostConfigurationFeature>()
+      .addMultibinding<Feature, ValidateTapDevices>();
+}
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/size_utils.cpp b/host/commands/run_cvd/validate.h
similarity index 63%
copy from common/libs/utils/size_utils.cpp
copy to host/commands/run_cvd/validate.h
index 9f25445..99c5c07 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/host/commands/run_cvd/validate.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,15 +14,17 @@
  * limitations under the License.
  */
 
-#include "common/libs/utils/size_utils.h"
+#pragma once
 
-#include <unistd.h>
+#include <fruit/fruit.h>
+
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/feature.h"
 
 namespace cuttlefish {
 
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
-}
+fruit::Component<fruit::Required<const CuttlefishConfig,
+                                 const CuttlefishConfig::InstanceSpecific>>
+validationComponent();
 
-}  // namespace cuttlefish
+}
diff --git a/host/commands/secure_env/Android.bp b/host/commands/secure_env/Android.bp
index 3ceeda5..f838cf1 100644
--- a/host/commands/secure_env/Android.bp
+++ b/host/commands/secure_env/Android.bp
@@ -17,8 +17,45 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-cc_binary_host {
-    name: "secure_env",
+cc_defaults {
+    name: "secure_env_defaults",
+    shared_libs: [
+        "libext2_blkid",
+        "libbase",
+        "libcppbor_external",
+        "libcppcose_rkp",
+        "libcuttlefish_fs",
+        "libcuttlefish_kernel_log_monitor_utils",
+        "libcuttlefish_security",
+        "libcuttlefish_utils",
+        "libfruit",
+        "libgatekeeper",
+        "libjsoncpp",
+        "libkeymaster_portable",
+        "libkeymaster_messages",
+        "libsoft_attestation_cert",
+        "liblog",
+        "libcrypto",
+        "libcutils",
+        "libpuresoftkeymasterdevice_host",
+        "ms-tpm-20-ref-lib",
+        "tpm2-tss2-esys",
+        "tpm2-tss2-mu",
+        "tpm2-tss2-rc",
+        "tpm2-tss2-tcti",
+    ],
+    static_libs: [
+        "libcuttlefish_host_config",
+        "libgflags",
+        "libscrypt_static",
+    ],
+    cflags: [
+        "-fno-rtti", // Required for libkeymaster_portable
+    ],
+}
+
+cc_library_host_static {
+    name: "libsecure_env",
     srcs: [
         "composite_serialization.cpp",
         "device_tpm.cpp",
@@ -42,36 +79,35 @@
         "tpm_keymaster_context.cpp",
         "tpm_keymaster_enforcement.cpp",
         "tpm_random_source.cpp",
+        "tpm_remote_provisioning_context.cpp",
         "tpm_resource_manager.cpp",
         "tpm_serialize.cpp",
     ],
-    shared_libs: [
-        "libbase",
-        "libcuttlefish_fs",
-        "libcuttlefish_security",
-        "libcuttlefish_utils",
-        "libgatekeeper",
-        "libjsoncpp",
-        "libkeymaster_portable",
-        "libkeymaster_messages",
-        "libsoft_attestation_cert",
-        "liblog",
-        "libcrypto",
-        "libcutils",
-        "libpuresoftkeymasterdevice_host",
-        "ms-tpm-20-ref-lib",
-        "tpm2-tss2-esys",
-        "tpm2-tss2-mu",
-        "tpm2-tss2-rc",
-        "tpm2-tss2-tcti",
+    defaults: ["cuttlefish_buildhost_only", "secure_env_defaults"],
+}
+
+cc_binary_host {
+    name: "secure_env",
+    srcs: [
+        "secure_env.cpp",
     ],
     static_libs: [
-        "libcuttlefish_host_config",
-        "libgflags",
-        "libscrypt_static",
+        "libsecure_env",
     ],
-    defaults: ["cuttlefish_buildhost_only"],
-    cflags: [
-        "-fno-rtti", // Required for libkeymaster_portable
+    defaults: ["cuttlefish_buildhost_only", "secure_env_defaults"],
+}
+
+cc_test_host {
+    name: "libsecure_env_test",
+    srcs: [
+        "test_tpm.cpp",
+        "encrypted_serializable_test.cpp",
     ],
+    static_libs: [
+        "libsecure_env",
+    ],
+    defaults: ["cuttlefish_buildhost_only", "secure_env_defaults"],
+    test_options: {
+        unit_test: true,
+    },
 }
diff --git a/host/commands/secure_env/composite_serialization.cpp b/host/commands/secure_env/composite_serialization.cpp
index e3d6e43..791a604 100644
--- a/host/commands/secure_env/composite_serialization.cpp
+++ b/host/commands/secure_env/composite_serialization.cpp
@@ -17,6 +17,8 @@
 
 using keymaster::Serializable;
 
+namespace cuttlefish {
+
 CompositeSerializable::CompositeSerializable(
     const std::vector<Serializable*>& members) : members_(members) {
 }
@@ -46,3 +48,5 @@
   }
   return true;
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/composite_serialization.h b/host/commands/secure_env/composite_serialization.h
index dfe2883..c83d159 100644
--- a/host/commands/secure_env/composite_serialization.h
+++ b/host/commands/secure_env/composite_serialization.h
@@ -19,6 +19,8 @@
 
 #include "keymaster/serializable.h"
 
+namespace cuttlefish {
+
 /**
  * A keymaster::Serializable type that refers to multiple other
  * keymaster::Serializable instances by pointer. When data is serialized or
@@ -37,3 +39,5 @@
 private:
   std::vector<keymaster::Serializable*> members_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/device_tpm.cpp b/host/commands/secure_env/device_tpm.cpp
index 6e4b4be..81ffbf3 100644
--- a/host/commands/secure_env/device_tpm.cpp
+++ b/host/commands/secure_env/device_tpm.cpp
@@ -20,6 +20,8 @@
 #include <tss2/tss2_tcti.h>
 #include <tss2/tss2_tcti_device.h>
 
+namespace cuttlefish {
+
 static void FinalizeTcti(TSS2_TCTI_CONTEXT* tcti_context) {
   if (tcti_context == nullptr) {
     return;
@@ -52,3 +54,5 @@
 TSS2_TCTI_CONTEXT* DeviceTpm::TctiContext() {
   return tpm_.get();
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/device_tpm.h b/host/commands/secure_env/device_tpm.h
index a52666e..48988ad 100644
--- a/host/commands/secure_env/device_tpm.h
+++ b/host/commands/secure_env/device_tpm.h
@@ -21,6 +21,8 @@
 
 #include "host/commands/secure_env/tpm.h"
 
+namespace cuttlefish {
+
 /*
  * Exposes a TSS2_TCTI_CONTEXT for interacting with a TPM device node.
  */
@@ -33,3 +35,5 @@
 private:
   std::unique_ptr<TSS2_TCTI_CONTEXT, void(*)(TSS2_TCTI_CONTEXT*)> tpm_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/encrypted_serializable.cpp b/host/commands/secure_env/encrypted_serializable.cpp
index 3845212..75891fc 100644
--- a/host/commands/secure_env/encrypted_serializable.cpp
+++ b/host/commands/secure_env/encrypted_serializable.cpp
@@ -16,13 +16,16 @@
 #include "encrypted_serializable.h"
 
 #include <vector>
-
+//
 #include <android-base/logging.h>
 
 #include "host/commands/secure_env/tpm_auth.h"
 #include "host/commands/secure_env/tpm_encrypt_decrypt.h"
+#include "host/commands/secure_env/tpm_random_source.h"
 #include "host/commands/secure_env/tpm_serialize.h"
 
+namespace cuttlefish {
+
 EncryptedSerializable::EncryptedSerializable(
     TpmResourceManager& resource_manager,
     std::function<TpmObjectSlot(TpmResourceManager&)> parent_key_fn,
@@ -172,11 +175,14 @@
   SerializeTpmKeyPublic serialize_public(&key_public);
   SerializeTpmKeyPrivate serialize_private(&key_private);
   auto encrypted_size = RoundUpToBlockSize(wrapped_.SerializedSize());
-  return serialize_public.SerializedSize()
-    + serialize_private.SerializedSize()
-    + sizeof(uint32_t)
-    + sizeof(uint32_t)
-    + encrypted_size;
+  size_t size = serialize_public.SerializedSize();  // tpm key public part
+  size += serialize_private.SerializedSize();       // tpm key private part
+  size += sizeof(uint32_t);                         // block size
+  size += sizeof(uint32_t);         // initialization vector length
+  size += sizeof(((TPM2B_IV*)nullptr)->buffer);  // initialization vector
+  size += sizeof(uint32_t);         // wrapped size
+  size += encrypted_size;           // encrypted data
+  return size;
 }
 
 uint8_t* EncryptedSerializable::Serialize(
@@ -195,6 +201,15 @@
     return buf;
   }
 
+  TPM2B_IV iv;
+  iv.size = sizeof(iv.buffer);
+  auto rc = TpmRandomSource(resource_manager_.Esys())
+                .GenerateRandom(iv.buffer, sizeof(iv.buffer));
+  if (rc != KM_ERROR_OK) {
+    LOG(ERROR) << "Failed to get random data";
+    return buf;
+  }
+
   auto wrapped_size = wrapped_.SerializedSize();
   auto encrypted_size = RoundUpToBlockSize(wrapped_size);
   std::vector<uint8_t> unencrypted(encrypted_size + 1, 0);
@@ -206,13 +221,9 @@
     return buf;
   }
   std::vector<uint8_t> encrypted(encrypted_size, 0);
-  if (!TpmEncrypt(
-      resource_manager_.Esys(),
-      key_slot->get(),
-      TpmAuth(ESYS_TR_PASSWORD),
-      unencrypted.data(),
-      encrypted.data(),
-      encrypted_size)) {
+  if (!TpmEncrypt(  //
+          resource_manager_.Esys(), key_slot->get(), TpmAuth(ESYS_TR_PASSWORD),
+          iv, unencrypted.data(), encrypted.data(), encrypted_size)) {
     LOG(ERROR) << "Encryption failed";
     return buf;
   }
@@ -222,6 +233,8 @@
   buf = serialize_public.Serialize(buf, end);
   buf = serialize_private.Serialize(buf, end);
   buf = keymaster::append_uint32_to_buf(buf, end, BLOCK_SIZE);
+  buf = keymaster::append_uint32_to_buf(buf, end, iv.size);
+  buf = keymaster::append_to_buf(buf, end, iv.buffer, iv.size);
   buf = keymaster::append_uint32_to_buf(buf, end, wrapped_size);
   buf = keymaster::append_to_buf(buf, end, encrypted.data(), encrypted_size);
   return buf;
@@ -262,6 +275,22 @@
                << ", expected " << BLOCK_SIZE;
     return false;
   }
+  uint32_t iv_size = 0;
+  if (!keymaster::copy_uint32_from_buf(buf_ptr, end, &iv_size)) {
+    LOG(ERROR) << "Failed to read iv size";
+    return false;
+  }
+  TPM2B_IV iv;
+  if (iv_size != sizeof(iv.buffer)) {
+    LOG(ERROR) << "iv size mismatch: received " << iv_size << ", expected "
+               << sizeof(iv.buffer);
+    return false;
+  }
+  iv.size = sizeof(iv.buffer);
+  if (!keymaster::copy_from_buf(buf_ptr, end, iv.buffer, sizeof(iv.buffer))) {
+    LOG(ERROR) << "Failed to read wrapped size";
+    return false;
+  }
   uint32_t wrapped_size = 0;
   if (!keymaster::copy_uint32_from_buf(buf_ptr, end, &wrapped_size)) {
     LOG(ERROR) << "Failed to read wrapped size";
@@ -275,13 +304,9 @@
     return false;
   }
   std::vector<uint8_t> decrypted_data(encrypted_size, 0);
-  if (!TpmDecrypt(
-      resource_manager_.Esys(),
-      key_slot->get(),
-      TpmAuth(ESYS_TR_PASSWORD),
-      encrypted_data.data(),
-      decrypted_data.data(),
-      encrypted_size)) {
+  if (!TpmDecrypt(  //
+          resource_manager_.Esys(), key_slot->get(), TpmAuth(ESYS_TR_PASSWORD),
+          iv, encrypted_data.data(), decrypted_data.data(), encrypted_size)) {
     LOG(ERROR) << "Failed to decrypt encrypted data";
     return false;
   }
@@ -298,3 +323,5 @@
   }
   return true;
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/encrypted_serializable.h b/host/commands/secure_env/encrypted_serializable.h
index c4a2e08..336c40c 100644
--- a/host/commands/secure_env/encrypted_serializable.h
+++ b/host/commands/secure_env/encrypted_serializable.h
@@ -19,6 +19,8 @@
 
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 /**
  * A keymaster::Serializable that wraps another keymaster::Serializable,
  * encrypting the data with a TPM to ensure privacy.
@@ -57,3 +59,5 @@
   std::function<TpmObjectSlot(TpmResourceManager&)> parent_key_fn_;
   keymaster::Serializable& wrapped_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/encrypted_serializable_test.cpp b/host/commands/secure_env/encrypted_serializable_test.cpp
new file mode 100644
index 0000000..f1e6923
--- /dev/null
+++ b/host/commands/secure_env/encrypted_serializable_test.cpp
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/commands/secure_env/encrypted_serializable.h"
+
+#include <gtest/gtest.h>
+#include <keymaster/serializable.h>
+#include <string.h>
+
+#include "host/commands/secure_env/primary_key_builder.h"
+#include "host/commands/secure_env/test_tpm.h"
+#include "host/commands/secure_env/tpm_resource_manager.h"
+
+namespace cuttlefish {
+
+TEST(TpmEncryptedSerializable, BinaryData) {
+  TestTpm tpm;
+  TpmResourceManager resource_manager(tpm.Esys());
+
+  uint8_t input_data[] = {1, 2, 3, 4, 5};
+  keymaster::Buffer input(input_data, sizeof(input_data));
+  EncryptedSerializable encrypt_input(resource_manager,
+                                      ParentKeyCreator("test"), input);
+
+  std::vector<uint8_t> encrypted_data(encrypt_input.SerializedSize());
+  auto encrypt_return = encrypt_input.Serialize(
+      encrypted_data.data(), encrypted_data.data() + encrypted_data.size());
+
+  keymaster::Buffer output(sizeof(input_data));
+  EncryptedSerializable decrypt_intermediate(resource_manager,
+                                             ParentKeyCreator("test"), output);
+  const uint8_t* encrypted_data_ptr = encrypted_data.data();
+  auto decrypt_return = decrypt_intermediate.Deserialize(
+      &encrypted_data_ptr, encrypted_data_ptr + encrypted_data.size());
+
+  ASSERT_EQ(encrypt_return, encrypted_data.data() + encrypted_data.size());
+  ASSERT_TRUE(decrypt_return);
+  ASSERT_EQ(encrypted_data_ptr, encrypted_data.data() + encrypted_data.size());
+  ASSERT_EQ(0, memcmp(input_data, output.begin(), sizeof(input_data)));
+}
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/fragile_tpm_storage.cpp b/host/commands/secure_env/fragile_tpm_storage.cpp
index ae66164..107d895 100644
--- a/host/commands/secure_env/fragile_tpm_storage.cpp
+++ b/host/commands/secure_env/fragile_tpm_storage.cpp
@@ -23,6 +23,8 @@
 #include "host/commands/secure_env/json_serializable.h"
 #include "host/commands/secure_env/tpm_random_source.h"
 
+namespace cuttlefish {
+
 static constexpr char kEntries[] = "entries";
 static constexpr char kKey[] = "key";
 static constexpr char kHandle[] = "handle";
@@ -238,3 +240,5 @@
   }
   return true;
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/fragile_tpm_storage.h b/host/commands/secure_env/fragile_tpm_storage.h
index b52b373..9a92910 100644
--- a/host/commands/secure_env/fragile_tpm_storage.h
+++ b/host/commands/secure_env/fragile_tpm_storage.h
@@ -26,6 +26,8 @@
 #include "host/commands/secure_env/gatekeeper_storage.h"
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 /**
  * Manager for data stored inside the TPM with an index outside of the TPM. The
  * contents of the data cannot be corrupted or decrypted by accessing the index,
@@ -58,3 +60,5 @@
   std::string index_file_;
   Json::Value index_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/gatekeeper_responder.cpp b/host/commands/secure_env/gatekeeper_responder.cpp
index 7d43a18..756bb72 100644
--- a/host/commands/secure_env/gatekeeper_responder.cpp
+++ b/host/commands/secure_env/gatekeeper_responder.cpp
@@ -18,6 +18,8 @@
 #include <android-base/logging.h>
 #include <gatekeeper/gatekeeper_messages.h>
 
+namespace cuttlefish {
+
 GatekeeperResponder::GatekeeperResponder(
     cuttlefish::GatekeeperChannel& channel, gatekeeper::GateKeeper& gatekeeper)
     : channel_(channel), gatekeeper_(gatekeeper) {
@@ -60,3 +62,5 @@
       return false;
   }
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/gatekeeper_responder.h b/host/commands/secure_env/gatekeeper_responder.h
index bd27955..fcf7b28 100644
--- a/host/commands/secure_env/gatekeeper_responder.h
+++ b/host/commands/secure_env/gatekeeper_responder.h
@@ -19,6 +19,8 @@
 
 #include "common/libs/security/gatekeeper_channel.h"
 
+namespace cuttlefish {
+
 class GatekeeperResponder {
 private:
   cuttlefish::GatekeeperChannel& channel_;
@@ -29,3 +31,5 @@
 
   bool ProcessMessage();
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/gatekeeper_storage.h b/host/commands/secure_env/gatekeeper_storage.h
index d272f71..1882ab0 100644
--- a/host/commands/secure_env/gatekeeper_storage.h
+++ b/host/commands/secure_env/gatekeeper_storage.h
@@ -20,6 +20,8 @@
 #include <json/json.h>
 #include <tss2/tss2_tpm2_types.h>
 
+namespace cuttlefish {
+
 /**
  * Data storage tailored to Gatekeeper's storage needs: storing binary blobs
  * that can be destroyed without a trace or corrupted with an obvious trace, but
@@ -40,3 +42,5 @@
   virtual bool Write(const Json::Value& key, const TPM2B_MAX_NV_BUFFER& data)
       = 0;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/hmac_serializable.cpp b/host/commands/secure_env/hmac_serializable.cpp
index c40b736..9366797 100644
--- a/host/commands/secure_env/hmac_serializable.cpp
+++ b/host/commands/secure_env/hmac_serializable.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright (C) 2020 The Android Open Source Project
+// cOpyright (C) 2020 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -16,20 +16,23 @@
 #include "hmac_serializable.h"
 
 #include <android-base/logging.h>
+#include <optional>
+#include <vector>
 
 #include "host/commands/secure_env/tpm_auth.h"
 #include "host/commands/secure_env/tpm_hmac.h"
 
+namespace cuttlefish {
+
 HmacSerializable::HmacSerializable(
     TpmResourceManager& resource_manager,
     std::function<TpmObjectSlot(TpmResourceManager&)> signing_key_fn,
-    uint32_t digest_size,
-    Serializable* wrapped) :
-    resource_manager_(resource_manager),
-    signing_key_fn_(signing_key_fn),
-    digest_size_(digest_size),
-    wrapped_(wrapped) {
-}
+    uint32_t digest_size, Serializable* wrapped, const Serializable* aad)
+    : resource_manager_(resource_manager),
+      signing_key_fn_(signing_key_fn),
+      digest_size_(digest_size),
+      wrapped_(wrapped),
+      aad_(aad) {}
 
 size_t HmacSerializable::SerializedSize() const {
   auto digest_size = sizeof(uint32_t) + digest_size_;
@@ -51,13 +54,13 @@
     LOG(ERROR) << "Could not retrieve key";
     return buf;
   }
+  auto maced_data = AppendAad(signed_data, wrapped_size);
+  if (!maced_data) {
+    return buf;
+  }
   auto hmac_data =
-    TpmHmac(
-        resource_manager_,
-        key->get(),
-        TpmAuth(ESYS_TR_PASSWORD),
-        signed_data,
-        wrapped_size);
+      TpmHmac(resource_manager_, key->get(), TpmAuth(ESYS_TR_PASSWORD),
+              maced_data->data(), maced_data->size());
   if (!hmac_data) {
     LOG(ERROR) << "Failed to produce hmac";
     return buf;
@@ -99,13 +102,13 @@
     LOG(ERROR) << "Could not retrieve key";
     return false;
   }
+  auto maced_data = AppendAad(signed_data.get(), signed_data_size);
+  if (!maced_data) {
+    return false;
+  }
   auto hmac_check =
-    TpmHmac(
-        resource_manager_,
-        key->get(),
-        TpmAuth(ESYS_TR_PASSWORD),
-        signed_data.get(),
-        signed_data_size);
+      TpmHmac(resource_manager_, key->get(), TpmAuth(ESYS_TR_PASSWORD),
+              maced_data->data(), maced_data->size());
   if (!hmac_check) {
     LOG(ERROR) << "Unable to calculate signature check";
     return false;
@@ -125,3 +128,24 @@
   return wrapped_->Deserialize(
       const_cast<const uint8_t**>(&inner_buf), inner_buf_end);
 }
+
+std::optional<std::vector<uint8_t>> HmacSerializable::AppendAad(
+    const uint8_t* sensitive, size_t sensitive_size) const {
+  if (!aad_) {
+    return std::vector<uint8_t>(sensitive, sensitive + sensitive_size);
+  }
+  std::vector<uint8_t> output(sensitive_size + aad_->SerializedSize());
+  std::copy(sensitive, sensitive + sensitive_size, output.begin());
+
+  const uint8_t* actual_output_end =
+      aad_->Serialize(&output[sensitive_size], output.data() + output.size());
+  const ptrdiff_t actual_aad_size = actual_output_end - output.data();
+  if (actual_aad_size != output.size()) {
+    LOG(ERROR) << "Serialized aad did not match expected size. Expected: "
+               << output.size() << ", actual: " << actual_aad_size;
+    return std::nullopt;
+  }
+  return output;
+}
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/hmac_serializable.h b/host/commands/secure_env/hmac_serializable.h
index 4b90124..35a6236 100644
--- a/host/commands/secure_env/hmac_serializable.h
+++ b/host/commands/secure_env/hmac_serializable.h
@@ -15,10 +15,15 @@
 
 #pragma once
 
+#include <optional>
+#include <vector>
+
 #include <keymaster/serializable.h>
 
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 /**
  * A keymaster::Serializable that wraps another keymaster::Serializable,
  * protecting it from tampering while it is stored elsewhere. This stores
@@ -38,17 +43,23 @@
  */
 class HmacSerializable : public keymaster::Serializable {
 public:
-  HmacSerializable(TpmResourceManager&,
-                   std::function<TpmObjectSlot(TpmResourceManager&)>,
-                   uint32_t digest_size,
-                   Serializable*);
+ HmacSerializable(TpmResourceManager&,
+                  std::function<TpmObjectSlot(TpmResourceManager&)>,
+                  uint32_t digest_size, Serializable*, const Serializable* aad);
 
-  size_t SerializedSize() const override;
-  uint8_t* Serialize(uint8_t* buf, const uint8_t* end) const override;
-  bool Deserialize(const uint8_t** buf_ptr, const uint8_t* end) override;
+ size_t SerializedSize() const override;
+ uint8_t* Serialize(uint8_t* buf, const uint8_t* end) const override;
+ bool Deserialize(const uint8_t** buf_ptr, const uint8_t* end) override;
+
 private:
   TpmResourceManager& resource_manager_;
   std::function<TpmObjectSlot(TpmResourceManager&)> signing_key_fn_;
   uint32_t digest_size_;
-  keymaster::Serializable* wrapped_;
+  Serializable* wrapped_;
+  const Serializable* aad_;
+
+  std::optional<std::vector<uint8_t>> AppendAad(const uint8_t* sensitive,
+                                                size_t sensitive_size) const;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/in_process_tpm.cpp b/host/commands/secure_env/in_process_tpm.cpp
index f240c08..551283e 100644
--- a/host/commands/secure_env/in_process_tpm.cpp
+++ b/host/commands/secure_env/in_process_tpm.cpp
@@ -37,13 +37,18 @@
 
 #include <android-base/logging.h>
 
+#include <mutex>
+
+namespace cuttlefish {
+
 struct __attribute__((__packed__)) tpm_message_header {
   uint16_t tag;
   uint32_t length;
   uint32_t ordinal;
 };
 
-struct InProcessTpm::Impl {
+class InProcessTpm::Impl {
+ public:
   static Impl* FromContext(TSS2_TCTI_CONTEXT* context) {
     auto offset = offsetof(Impl, tcti_context_);
     char* context_char = reinterpret_cast<char*>(context);
@@ -94,63 +99,88 @@
     return TSS2_RC_SUCCESS;
   }
 
+  Impl() {
+    {
+      std::lock_guard<std::mutex> lock(global_mutex);
+      // This is a limitation of ms-tpm-20-ref
+      CHECK(!global_instance) << "InProcessTpm internally uses global data, so "
+                              << "only one can exist.";
+      global_instance = this;
+    }
+
+    tcti_context_.v1.magic = 0xFAD;
+    tcti_context_.v1.version = 1;
+    tcti_context_.v1.transmit = Impl::Transmit;
+    tcti_context_.v1.receive = Impl::Receive;
+    _plat__NVEnable(NULL);
+    if (_plat__NVNeedsManufacture()) {
+      // Can't use android logging here due to a macro conflict with TPM
+      // internals
+      LOG(DEBUG) << "Manufacturing TPM state";
+      if (TPM_Manufacture(1)) {
+        LOG(FATAL) << "Failed to manufacture TPM state";
+      }
+    }
+    _rpc__Signal_PowerOn(false);
+    _rpc__Signal_NvOn();
+
+    ESYS_CONTEXT* esys = nullptr;
+    auto rc = Esys_Initialize(&esys, TctiContext(), nullptr);
+    if (rc != TPM2_RC_SUCCESS) {
+      LOG(FATAL) << "Could not initialize esys: " << Tss2_RC_Decode(rc) << " ("
+                 << rc << ")";
+    }
+
+    rc = Esys_Startup(esys, TPM2_SU_CLEAR);
+    if (rc != TPM2_RC_SUCCESS) {
+      LOG(FATAL) << "TPM2_Startup failed: " << Tss2_RC_Decode(rc) << " (" << rc
+                 << ")";
+    }
+
+    TPM2B_AUTH auth = {};
+    Esys_TR_SetAuth(esys, ESYS_TR_RH_LOCKOUT, &auth);
+
+    rc = Esys_DictionaryAttackLockReset(
+        /* esysContext */ esys,
+        /* lockHandle */ ESYS_TR_RH_LOCKOUT,
+        /* shandle1 */ ESYS_TR_PASSWORD,
+        /* shandle2 */ ESYS_TR_NONE,
+        /* shandle3 */ ESYS_TR_NONE);
+
+    if (rc != TPM2_RC_SUCCESS) {
+      LOG(FATAL) << "Could not reset TPM lockout: " << Tss2_RC_Decode(rc)
+                 << " (" << rc << ")";
+    }
+
+    Esys_Finalize(&esys);
+  }
+
+  ~Impl() {
+    _rpc__Signal_NvOff();
+    _rpc__Signal_PowerOff();
+    std::lock_guard<std::mutex> lock(global_mutex);
+    global_instance = nullptr;
+  }
+
+  TSS2_TCTI_CONTEXT* TctiContext() {
+    return reinterpret_cast<TSS2_TCTI_CONTEXT*>(&tcti_context_);
+  }
+
+ private:
+  static std::mutex global_mutex;
+  static Impl* global_instance;
   TSS2_TCTI_CONTEXT_COMMON_CURRENT tcti_context_;
   std::list<std::vector<uint8_t>> command_queue_;
   std::mutex queue_mutex_;
 };
 
-InProcessTpm::InProcessTpm() : impl_(new Impl()) {
-  impl_->tcti_context_.v1.magic = 0xFAD;
-  impl_->tcti_context_.v1.version = 1;
-  impl_->tcti_context_.v1.transmit = Impl::Transmit;
-  impl_->tcti_context_.v1.receive = Impl::Receive;
-  _plat__NVEnable(NULL);
-  if (_plat__NVNeedsManufacture()) {
-    // Can't use android logging here due to a macro conflict with TPM internals
-    LOG(DEBUG) << "Manufacturing TPM state";
-    if (TPM_Manufacture(1)) {
-      LOG(FATAL) << "Failed to manufacture TPM state";
-    }
-  }
-  _rpc__Signal_PowerOn(false);
-  _rpc__Signal_NvOn();
+std::mutex InProcessTpm::Impl::global_mutex;
+InProcessTpm::Impl* InProcessTpm::Impl::global_instance;
 
-  ESYS_CONTEXT* esys = nullptr;
-  auto rc = Esys_Initialize(&esys, TctiContext(), nullptr);
-  if (rc != TPM2_RC_SUCCESS) {
-    LOG(FATAL) << "Could not initialize esys: " << Tss2_RC_Decode(rc)
-               << " (" << rc << ")";
-  }
+InProcessTpm::InProcessTpm() : impl_(new Impl()) {}
 
-  rc = Esys_Startup(esys, TPM2_SU_CLEAR);
-  if (rc != TPM2_RC_SUCCESS) {
-    LOG(FATAL) << "TPM2_Startup failed: " << Tss2_RC_Decode(rc)
-               << " (" << rc << ")";
-  }
+InProcessTpm::~InProcessTpm() = default;
 
-  TPM2B_AUTH auth = {};
-  Esys_TR_SetAuth(esys, ESYS_TR_RH_LOCKOUT, &auth);
+TSS2_TCTI_CONTEXT* InProcessTpm::TctiContext() { return impl_->TctiContext(); }
 
-  rc = Esys_DictionaryAttackLockReset(
-    /* esysContext */ esys,
-    /* lockHandle */ ESYS_TR_RH_LOCKOUT,
-    /* shandle1 */ ESYS_TR_PASSWORD,
-    /* shandle2 */ ESYS_TR_NONE,
-    /* shandle3 */ ESYS_TR_NONE);
-
-  if (rc != TPM2_RC_SUCCESS) {
-    LOG(FATAL) << "Could not reset TPM lockout: " << Tss2_RC_Decode(rc)
-               << " (" << rc << ")";
-  }
-
-  Esys_Finalize(&esys);
-}
-
-InProcessTpm::~InProcessTpm() {
-  _rpc__Signal_NvOff();
-  _rpc__Signal_PowerOff();
-}
-
-TSS2_TCTI_CONTEXT* InProcessTpm::TctiContext() {
-  return reinterpret_cast<TSS2_TCTI_CONTEXT*>(&impl_->tcti_context_);
-}
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/in_process_tpm.h b/host/commands/secure_env/in_process_tpm.h
index 35fecfb..624e7c4 100644
--- a/host/commands/secure_env/in_process_tpm.h
+++ b/host/commands/secure_env/in_process_tpm.h
@@ -23,6 +23,8 @@
 
 #include "host/commands/secure_env/tpm.h"
 
+namespace cuttlefish {
+
 /*
  * Exposes a TSS2_TCTI_CONTEXT for interacting with an in-process TPM simulator.
  *
@@ -41,7 +43,9 @@
 
   TSS2_TCTI_CONTEXT* TctiContext() override;
 private:
-  struct Impl;
+ class Impl;
 
-  std::unique_ptr<Impl> impl_;
+ std::unique_ptr<Impl> impl_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/insecure_fallback_storage.cpp b/host/commands/secure_env/insecure_fallback_storage.cpp
index f906bd5..643a3ce 100644
--- a/host/commands/secure_env/insecure_fallback_storage.cpp
+++ b/host/commands/secure_env/insecure_fallback_storage.cpp
@@ -23,6 +23,8 @@
 #include "host/commands/secure_env/json_serializable.h"
 #include "host/commands/secure_env/tpm_random_source.h"
 
+namespace cuttlefish {
+
 static constexpr char kEntries[] = "entries";
 static constexpr char kKey[] = "key";
 static constexpr char kValue[] = "value";
@@ -147,3 +149,5 @@
   }
   return true;
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/insecure_fallback_storage.h b/host/commands/secure_env/insecure_fallback_storage.h
index 93788a0..64405be 100644
--- a/host/commands/secure_env/insecure_fallback_storage.h
+++ b/host/commands/secure_env/insecure_fallback_storage.h
@@ -23,6 +23,8 @@
 #include "host/commands/secure_env/gatekeeper_storage.h"
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 /**
  * A GatekeeperStorage fallback implementation that is less secure. It uses an
  * index file that is signed and encrypted by the TPM and the sensitive data
@@ -54,3 +56,5 @@
   std::string index_file_;
   Json::Value index_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/json_serializable.cpp b/host/commands/secure_env/json_serializable.cpp
index d4f2fd8..630fb529 100644
--- a/host/commands/secure_env/json_serializable.cpp
+++ b/host/commands/secure_env/json_serializable.cpp
@@ -24,6 +24,8 @@
 #include "host/commands/secure_env/hmac_serializable.h"
 #include "host/commands/secure_env/primary_key_builder.h"
 
+namespace cuttlefish {
+
 static constexpr char kUniqueKey[] = "JsonSerializable";
 
 class JsonSerializable : public keymaster::Serializable {
@@ -89,8 +91,9 @@
   EncryptedSerializable encryption(
       resource_manager, parent_key_fn, sensitive_material);
   auto signing_key_fn = SigningKeyCreator(kUniqueKey);
-  HmacSerializable sign_check(
-      resource_manager, signing_key_fn, TPM2_SHA256_DIGEST_SIZE, &encryption);
+  HmacSerializable sign_check(resource_manager, signing_key_fn,
+                              TPM2_SHA256_DIGEST_SIZE, &encryption,
+                              /*aad=*/nullptr);
 
   auto size = sign_check.SerializedSize();
   LOG(INFO) << "size : " << size;
@@ -139,8 +142,9 @@
   EncryptedSerializable encryption(
       resource_manager, parent_key_fn, sensitive_material);
   auto signing_key_fn = SigningKeyCreator(kUniqueKey);
-  HmacSerializable sign_check(
-      resource_manager, signing_key_fn, TPM2_SHA256_DIGEST_SIZE, &encryption);
+  HmacSerializable sign_check(resource_manager, signing_key_fn,
+                              TPM2_SHA256_DIGEST_SIZE, &encryption,
+                              /*aad=*/nullptr);
 
   auto buf = reinterpret_cast<const uint8_t*>(buffer.data());
   auto buf_end = buf + buffer.size();
@@ -151,3 +155,5 @@
 
   return json;
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/json_serializable.h b/host/commands/secure_env/json_serializable.h
index f96aab3..984f396 100644
--- a/host/commands/secure_env/json_serializable.h
+++ b/host/commands/secure_env/json_serializable.h
@@ -19,7 +19,11 @@
 
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 bool WriteProtectedJsonToFile(
     TpmResourceManager&, const std::string& filename, Json::Value);
 Json::Value ReadProtectedJsonFromFile(
     TpmResourceManager&, const std::string& filename);
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/keymaster_responder.cpp b/host/commands/secure_env/keymaster_responder.cpp
index a564254..46081ca 100644
--- a/host/commands/secure_env/keymaster_responder.cpp
+++ b/host/commands/secure_env/keymaster_responder.cpp
@@ -18,6 +18,8 @@
 #include <android-base/logging.h>
 #include <keymaster/android_keymaster_messages.h>
 
+namespace cuttlefish {
+
 KeymasterResponder::KeymasterResponder(
     cuttlefish::KeymasterChannel& channel, keymaster::AndroidKeymaster& keymaster)
     : channel_(channel), keymaster_(keymaster) {
@@ -65,6 +67,8 @@
     HANDLE_MESSAGE(DELETE_KEY, DeleteKey)
     HANDLE_MESSAGE(DELETE_ALL_KEYS, DeleteAllKeys)
     HANDLE_MESSAGE(IMPORT_WRAPPED_KEY, ImportWrappedKey)
+    HANDLE_MESSAGE(GENERATE_RKP_KEY, GenerateRkpKey)
+    HANDLE_MESSAGE(GENERATE_CSR, GenerateCsr)
     HANDLE_MESSAGE(GENERATE_TIMESTAMP_TOKEN, GenerateTimestampToken)
 #undef HANDLE_MESSAGE
 #define HANDLE_MESSAGE_W_RETURN(ENUM_NAME, METHOD_NAME) \
@@ -81,7 +85,10 @@
     HANDLE_MESSAGE_W_RETURN(VERIFY_AUTHORIZATION, VerifyAuthorization)
     HANDLE_MESSAGE_W_RETURN(DEVICE_LOCKED, DeviceLocked)
     HANDLE_MESSAGE_W_RETURN(GET_VERSION_2, GetVersion2)
-#undef HANDLE_MESSAGE
+    HANDLE_MESSAGE_W_RETURN(CONFIGURE_VENDOR_PATCHLEVEL,
+                            ConfigureVendorPatchlevel)
+    HANDLE_MESSAGE_W_RETURN(CONFIGURE_BOOT_PATCHLEVEL, ConfigureBootPatchlevel)
+#undef HANDLE_MESSAGE_W_RETURN
 #define HANDLE_MESSAGE_W_RETURN_NO_ARG(ENUM_NAME, METHOD_NAME) \
     case ENUM_NAME: {\
       auto response = keymaster_.METHOD_NAME(); \
@@ -89,7 +96,7 @@
     }
     HANDLE_MESSAGE_W_RETURN_NO_ARG(GET_HMAC_SHARING_PARAMETERS, GetHmacSharingParameters)
     HANDLE_MESSAGE_W_RETURN_NO_ARG(EARLY_BOOT_ENDED, EarlyBootEnded)
-#undef HANDLE_MESSAGE
+#undef HANDLE_MESSAGE_W_RETURN_NO_ARG
     case ADD_RNG_ENTROPY: {
       AddEntropyRequest request(keymaster_.message_version());
       if (!request.Deserialize(&buffer, end)) {
@@ -107,3 +114,5 @@
       return false;
   }
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/keymaster_responder.h b/host/commands/secure_env/keymaster_responder.h
index f8fb6ec..2bbd893 100644
--- a/host/commands/secure_env/keymaster_responder.h
+++ b/host/commands/secure_env/keymaster_responder.h
@@ -19,6 +19,8 @@
 
 #include "common/libs/security/keymaster_channel.h"
 
+namespace cuttlefish {
+
 class KeymasterResponder {
 private:
   cuttlefish::KeymasterChannel& channel_;
@@ -29,3 +31,5 @@
 
   bool ProcessMessage();
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/primary_key_builder.cpp b/host/commands/secure_env/primary_key_builder.cpp
index a44ff24..b333002 100644
--- a/host/commands/secure_env/primary_key_builder.cpp
+++ b/host/commands/secure_env/primary_key_builder.cpp
@@ -19,6 +19,8 @@
 #include <tss2/tss2_mu.h>
 #include <tss2/tss2_rc.h>
 
+namespace cuttlefish {
+
 PrimaryKeyBuilder::PrimaryKeyBuilder() : public_area_({}) {
   public_area_.nameAlg = TPM2_ALG_SHA256;
 };
@@ -133,3 +135,5 @@
     return key_builder.CreateKey(resource_manager);
   };
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/primary_key_builder.h b/host/commands/secure_env/primary_key_builder.h
index 46e5461..70170e7 100644
--- a/host/commands/secure_env/primary_key_builder.h
+++ b/host/commands/secure_env/primary_key_builder.h
@@ -22,6 +22,8 @@
 
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 class PrimaryKeyBuilder {
 public:
   PrimaryKeyBuilder();
@@ -40,3 +42,5 @@
 
 std::function<TpmObjectSlot(TpmResourceManager&)>
 ParentKeyCreator(const std::string& unique);
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/proxy_keymaster_context.h b/host/commands/secure_env/proxy_keymaster_context.h
new file mode 100644
index 0000000..bcb1657
--- /dev/null
+++ b/host/commands/secure_env/proxy_keymaster_context.h
@@ -0,0 +1,152 @@
+//
+// Copyright (C) 2020 The Android Open Source Project
+//
+// 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.
+
+#pragma once
+
+#include <map>
+#include <vector>
+
+#include <keymaster/key.h>
+#include <keymaster/keymaster_context.h>
+#include <keymaster/km_openssl/attestation_record.h>
+
+#include "tpm_attestation_record.h"
+
+namespace cuttlefish {
+
+class TpmAttestationRecordContext;
+class TpmResourceManager;
+class TpmKeyBlobMaker;
+class TpmRandomSource;
+class TpmRemoteProvisioningContext;
+
+/**
+ * Implementation of KeymasterContext that proxies to another implementation.
+ *
+ * Because AndroidKeymaster wraps a KeymasterContext and puts it into a unique
+ * pointer, it doesn't let the implementor manage the lifetime of the
+ * KeymasterContext implementation. This proxy breaks that relationship, and
+ * allows the lifetimes to be distinct as long as the KeymasterContext instance
+ * outlives the AndroidKeymaster instance.
+ */
+class ProxyKeymasterContext : public keymaster::KeymasterContext {
+ public:
+  ProxyKeymasterContext(KeymasterContext& wrapped) : wrapped_(wrapped) {}
+  ~ProxyKeymasterContext() = default;
+
+  keymaster::KmVersion GetKmVersion() const override {
+    return wrapped_.GetKmVersion();
+  }
+
+  keymaster_error_t SetSystemVersion(uint32_t os_version,
+                                     uint32_t os_patchlevel) override {
+    return wrapped_.SetSystemVersion(os_version, os_patchlevel);
+  }
+  void GetSystemVersion(uint32_t* os_version,
+                        uint32_t* os_patchlevel) const override {
+    return wrapped_.GetSystemVersion(os_version, os_patchlevel);
+  }
+
+  const keymaster::KeyFactory* GetKeyFactory(
+      keymaster_algorithm_t algorithm) const override {
+    return wrapped_.GetKeyFactory(algorithm);
+  }
+  const keymaster::OperationFactory* GetOperationFactory(
+      keymaster_algorithm_t algorithm,
+      keymaster_purpose_t purpose) const override {
+    return wrapped_.GetOperationFactory(algorithm, purpose);
+  }
+  const keymaster_algorithm_t* GetSupportedAlgorithms(
+      size_t* algorithms_count) const override {
+    return wrapped_.GetSupportedAlgorithms(algorithms_count);
+  }
+
+  keymaster_error_t UpgradeKeyBlob(
+      const keymaster::KeymasterKeyBlob& key_to_upgrade,
+      const keymaster::AuthorizationSet& upgrade_params,
+      keymaster::KeymasterKeyBlob* upgraded_key) const override {
+    return wrapped_.UpgradeKeyBlob(key_to_upgrade, upgrade_params,
+                                   upgraded_key);
+  }
+
+  keymaster_error_t ParseKeyBlob(
+      const keymaster::KeymasterKeyBlob& blob,
+      const keymaster::AuthorizationSet& additional_params,
+      keymaster::UniquePtr<keymaster::Key>* key) const override {
+    return wrapped_.ParseKeyBlob(blob, additional_params, key);
+  }
+
+  keymaster_error_t AddRngEntropy(const uint8_t* buf,
+                                  size_t length) const override {
+    return wrapped_.AddRngEntropy(buf, length);
+  }
+
+  keymaster::KeymasterEnforcement* enforcement_policy() override {
+    return wrapped_.enforcement_policy();
+  }
+
+  keymaster::CertificateChain GenerateAttestation(
+      const keymaster::Key& key,
+      const keymaster::AuthorizationSet& attest_params,
+      keymaster::UniquePtr<keymaster::Key> attest_key,
+      const keymaster::KeymasterBlob& issuer_subject,
+      keymaster_error_t* error) const override {
+    return wrapped_.GenerateAttestation(
+        key, attest_params, std::move(attest_key), issuer_subject, error);
+  }
+
+  keymaster::CertificateChain GenerateSelfSignedCertificate(
+      const keymaster::Key& key, const keymaster::AuthorizationSet& cert_params,
+      bool fake_signature, keymaster_error_t* error) const override {
+    return wrapped_.GenerateSelfSignedCertificate(key, cert_params,
+                                                  fake_signature, error);
+  }
+
+  keymaster_error_t UnwrapKey(
+      const keymaster::KeymasterKeyBlob& wrapped_key_blob,
+      const keymaster::KeymasterKeyBlob& wrapping_key_blob,
+      const keymaster::AuthorizationSet& wrapping_key_params,
+      const keymaster::KeymasterKeyBlob& masking_key,
+      keymaster::AuthorizationSet* wrapped_key_params,
+      keymaster_key_format_t* wrapped_key_format,
+      keymaster::KeymasterKeyBlob* wrapped_key_material) const override {
+    return wrapped_.UnwrapKey(
+        wrapped_key_blob, wrapping_key_blob, wrapping_key_params, masking_key,
+        wrapped_key_params, wrapped_key_format, wrapped_key_material);
+  }
+
+  keymaster::RemoteProvisioningContext* GetRemoteProvisioningContext()
+      const override {
+    return wrapped_.GetRemoteProvisioningContext();
+  }
+
+  keymaster_error_t SetVendorPatchlevel(uint32_t vendor_patchlevel) override {
+    return wrapped_.SetVendorPatchlevel(vendor_patchlevel);
+  }
+  keymaster_error_t SetBootPatchlevel(uint32_t boot_patchlevel) override {
+    return wrapped_.SetBootPatchlevel(boot_patchlevel);
+  }
+  std::optional<uint32_t> GetVendorPatchlevel() const override {
+    return wrapped_.GetVendorPatchlevel();
+  }
+  std::optional<uint32_t> GetBootPatchlevel() const override {
+    return wrapped_.GetBootPatchlevel();
+  }
+
+ private:
+  KeymasterContext& wrapped_;
+};
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/secure_env.cpp b/host/commands/secure_env/secure_env.cpp
index c050c58..114a7bd 100644
--- a/host/commands/secure_env/secure_env.cpp
+++ b/host/commands/secure_env/secure_env.cpp
@@ -16,22 +16,26 @@
 #include <thread>
 
 #include <android-base/logging.h>
+#include <fruit/fruit.h>
 #include <gflags/gflags.h>
 #include <keymaster/android_keymaster.h>
-#include <keymaster/soft_keymaster_logger.h>
 #include <keymaster/contexts/pure_soft_keymaster_context.h>
+#include <keymaster/soft_keymaster_logger.h>
 #include <tss2/tss2_esys.h>
 #include <tss2/tss2_rc.h>
 
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/security/gatekeeper_channel.h"
 #include "common/libs/security/keymaster_channel.h"
+#include "host/commands/kernel_log_monitor/kernel_log_server.h"
+#include "host/commands/kernel_log_monitor/utils.h"
 #include "host/commands/secure_env/device_tpm.h"
 #include "host/commands/secure_env/fragile_tpm_storage.h"
 #include "host/commands/secure_env/gatekeeper_responder.h"
-#include "host/commands/secure_env/insecure_fallback_storage.h"
 #include "host/commands/secure_env/in_process_tpm.h"
+#include "host/commands/secure_env/insecure_fallback_storage.h"
 #include "host/commands/secure_env/keymaster_responder.h"
+#include "host/commands/secure_env/proxy_keymaster_context.h"
 #include "host/commands/secure_env/soft_gatekeeper.h"
 #include "host/commands/secure_env/tpm_gatekeeper.h"
 #include "host/commands/secure_env/tpm_keymaster_context.h"
@@ -39,13 +43,15 @@
 #include "host/commands/secure_env/tpm_resource_manager.h"
 #include "host/libs/config/logging.h"
 
-// Copied from AndroidKeymaster4Device
-constexpr size_t kOperationTableSize = 16;
-
 DEFINE_int32(keymaster_fd_in, -1, "A pipe for keymaster communication");
 DEFINE_int32(keymaster_fd_out, -1, "A pipe for keymaster communication");
 DEFINE_int32(gatekeeper_fd_in, -1, "A pipe for gatekeeper communication");
 DEFINE_int32(gatekeeper_fd_out, -1, "A pipe for gatekeeper communication");
+DEFINE_int32(kernel_events_fd, -1,
+             "A pipe for monitoring events based on "
+             "messages written to the kernel log. This "
+             "is used by secure_env to monitor for "
+             "device reboots.");
 
 DEFINE_string(tpm_impl,
               "in_memory",
@@ -57,37 +63,96 @@
 DEFINE_string(gatekeeper_impl, "tpm",
               "The gatekeeper implementation. \"tpm\" or \"software\"");
 
-int main(int argc, char** argv) {
-  cuttlefish::DefaultSubprocessLogging(argv);
+namespace cuttlefish {
+namespace {
+
+// Copied from AndroidKeymaster4Device
+constexpr size_t kOperationTableSize = 16;
+
+// Dup a command line file descriptor into a SharedFD.
+SharedFD DupFdFlag(gflags::int32 fd) {
+  CHECK(fd != -1);
+  SharedFD duped = SharedFD::Dup(fd);
+  CHECK(duped->IsOpen()) << "Could not dup output fd: " << duped->StrError();
+  // The original FD is intentionally kept open so that we can re-exec this
+  // process without having to do a bunch of argv book-keeping.
+  return duped;
+}
+
+// Re-launch this process with all the same flags it was originallys started
+// with.
+[[noreturn]] void ReExecSelf() {
+  // Allocate +1 entry for terminating nullptr.
+  std::vector<char*> argv(gflags::GetArgvs().size() + 1, nullptr);
+  for (size_t i = 0; i < gflags::GetArgvs().size(); ++i) {
+    argv[i] = strdup(gflags::GetArgvs()[i].c_str());
+    CHECK(argv[i] != nullptr) << "OOM";
+  }
+  execv("/proc/self/exe", argv.data());
+  char buf[128];
+  LOG(FATAL) << "Exec failed, secure_env is out of sync with the guest: "
+             << errno << "(" << strerror_r(errno, buf, sizeof(buf)) << ")";
+  abort();  // LOG(FATAL) isn't marked as noreturn
+}
+
+// Spin up a thread that monitors for a kernel loaded event, then re-execs
+// this process. This way, secure_env's boot tracking matches up with the guest.
+std::thread StartKernelEventMonitor(SharedFD kernel_events_fd) {
+  return std::thread([kernel_events_fd]() {
+    while (kernel_events_fd->IsOpen()) {
+      auto read_result = monitor::ReadEvent(kernel_events_fd);
+      CHECK(read_result.has_value()) << kernel_events_fd->StrError();
+      if (read_result->event == monitor::Event::KernelLoaded) {
+        LOG(DEBUG) << "secure_env detected guest reboot, restarting.";
+        ReExecSelf();
+      }
+    }
+  });
+}
+
+fruit::Component<TpmResourceManager> SecureEnvComponent() {
+  return fruit::createComponent()
+      .registerProvider([]() -> Tpm* {  // fruit will take ownership
+        if (FLAGS_tpm_impl == "in_memory") {
+          return new InProcessTpm();
+        } else if (FLAGS_tpm_impl == "host_device") {
+          return new DeviceTpm("/dev/tpm0");
+        } else {
+          LOG(FATAL) << "Unknown TPM implementation: " << FLAGS_tpm_impl;
+          abort();
+        }
+      })
+      .registerProvider([](Tpm* tpm) {
+        if (tpm->TctiContext() == nullptr) {
+          LOG(FATAL) << "Unable to connect to TPM implementation.";
+        }
+        ESYS_CONTEXT* esys_ptr = nullptr;
+        std::unique_ptr<ESYS_CONTEXT, void (*)(ESYS_CONTEXT*)> esys(
+            nullptr, [](ESYS_CONTEXT* esys) { Esys_Finalize(&esys); });
+        auto rc = Esys_Initialize(&esys_ptr, tpm->TctiContext(), nullptr);
+        if (rc != TPM2_RC_SUCCESS) {
+          LOG(FATAL) << "Could not initialize esys: " << Tss2_RC_Decode(rc)
+                     << " (" << rc << ")";
+        }
+        esys.reset(esys_ptr);
+        return esys;
+      })
+      .registerProvider(
+          [](std::unique_ptr<ESYS_CONTEXT, void (*)(ESYS_CONTEXT*)>& esys) {
+            return new TpmResourceManager(
+                esys.get());  // fruit will take ownership
+          });
+}
+
+}  // namespace
+
+int SecureEnvMain(int argc, char** argv) {
+  DefaultSubprocessLogging(argv);
   gflags::ParseCommandLineFlags(&argc, &argv, true);
   keymaster::SoftKeymasterLogger km_logger;
 
-  std::unique_ptr<Tpm> tpm;
-  if (FLAGS_tpm_impl == "in_memory") {
-    tpm.reset(new InProcessTpm());
-  } else if (FLAGS_tpm_impl == "host_device") {
-    tpm.reset(new DeviceTpm("/dev/tpm0"));
-  } else {
-    LOG(FATAL) << "Unknown TPM implementation: " << FLAGS_tpm_impl;
-  }
-
-  if (tpm->TctiContext() == nullptr) {
-    LOG(FATAL) << "Unable to connect to TPM implementation.";
-  }
-
-  std::unique_ptr<TpmResourceManager> resource_manager;
-  std::unique_ptr<ESYS_CONTEXT, void(*)(ESYS_CONTEXT*)> esys(
-      nullptr, [](ESYS_CONTEXT* esys) { Esys_Finalize(&esys); });
-  if (FLAGS_keymint_impl == "tpm" || FLAGS_gatekeeper_impl == "tpm") {
-    ESYS_CONTEXT* esys_ptr = nullptr;
-    auto rc = Esys_Initialize(&esys_ptr, tpm->TctiContext(), nullptr);
-    if (rc != TPM2_RC_SUCCESS) {
-      LOG(FATAL) << "Could not initialize esys: " << Tss2_RC_Decode(rc)
-                 << " (" << rc << ")";
-    }
-    esys.reset(esys_ptr);
-    resource_manager.reset(new TpmResourceManager(esys.get()));
-  }
+  fruit::Injector<TpmResourceManager> injector(SecureEnvComponent);
+  TpmResourceManager* resource_manager = injector.get<TpmResourceManager*>();
 
   std::unique_ptr<GatekeeperStorage> secure_storage;
   std::unique_ptr<GatekeeperStorage> insecure_storage;
@@ -109,54 +174,36 @@
         new TpmKeymasterEnforcement(*resource_manager, *tpm_gatekeeper));
   }
 
-  // keymaster::AndroidKeymaster puts the given pointer into a UniquePtr,
-  // taking ownership.
-  keymaster::KeymasterContext* keymaster_context;
+  std::unique_ptr<keymaster::KeymasterContext> keymaster_context;
   if (FLAGS_keymint_impl == "software") {
     // TODO: See if this is the right KM version.
-    keymaster_context =
-        new keymaster::PureSoftKeymasterContext(keymaster::KmVersion::KEYMASTER_4,
-                                                KM_SECURITY_LEVEL_SOFTWARE);
+    keymaster_context.reset(new keymaster::PureSoftKeymasterContext(
+        keymaster::KmVersion::KEYMINT_2, KM_SECURITY_LEVEL_SOFTWARE));
   } else if (FLAGS_keymint_impl == "tpm") {
-    keymaster_context =
-        new TpmKeymasterContext(*resource_manager, *keymaster_enforcement);
+    keymaster_context.reset(
+        new TpmKeymasterContext(*resource_manager, *keymaster_enforcement));
   } else {
     LOG(FATAL) << "Unknown keymaster implementation " << FLAGS_keymint_impl;
     return -1;
   }
+  // keymaster::AndroidKeymaster puts the context pointer into a UniquePtr,
+  // taking ownership.
   keymaster::AndroidKeymaster keymaster{
-      keymaster_context, kOperationTableSize,
-      keymaster::MessageVersion(keymaster::KmVersion::KEYMINT_1,
+      new ProxyKeymasterContext(*keymaster_context), kOperationTableSize,
+      keymaster::MessageVersion(keymaster::KmVersion::KEYMINT_2,
                                 0 /* km_date */)};
 
-  CHECK(FLAGS_keymaster_fd_in != -1);
-  auto keymaster_in = cuttlefish::SharedFD::Dup(FLAGS_keymaster_fd_in);
-  CHECK(keymaster_in->IsOpen()) << "Could not dup input fd: "
-                                << keymaster_in->StrError();
-  close(FLAGS_keymaster_fd_in);
+  auto keymaster_in = DupFdFlag(FLAGS_keymaster_fd_in);
+  auto keymaster_out = DupFdFlag(FLAGS_keymaster_fd_out);
+  auto gatekeeper_in = DupFdFlag(FLAGS_gatekeeper_fd_in);
+  auto gatekeeper_out = DupFdFlag(FLAGS_gatekeeper_fd_out);
+  auto kernel_events_fd = DupFdFlag(FLAGS_kernel_events_fd);
 
-  CHECK(FLAGS_keymaster_fd_out != -1);
-  auto keymaster_out = cuttlefish::SharedFD::Dup(FLAGS_keymaster_fd_out);
-  CHECK(keymaster_out->IsOpen()) << "Could not dup output fd: "
-                                 << keymaster_out->StrError();
-  close(FLAGS_keymaster_fd_out);
+  std::vector<std::thread> threads;
 
-  CHECK(FLAGS_gatekeeper_fd_in != -1);
-  auto gatekeeper_in = cuttlefish::SharedFD::Dup(FLAGS_gatekeeper_fd_in);
-  CHECK(gatekeeper_in->IsOpen()) << "Could not dup input fd: "
-                                << gatekeeper_in->StrError();
-  close(FLAGS_gatekeeper_fd_in);
-
-  CHECK(FLAGS_gatekeeper_fd_out != -1);
-  auto gatekeeper_out = cuttlefish::SharedFD::Dup(FLAGS_gatekeeper_fd_out);
-  CHECK(gatekeeper_out->IsOpen()) << "Could not dup output fd: "
-                                  << keymaster_out->StrError();
-  close(FLAGS_gatekeeper_fd_out);
-
-  std::thread keymaster_thread([keymaster_in, keymaster_out, &keymaster]() {
+  threads.emplace_back([keymaster_in, keymaster_out, &keymaster]() {
     while (true) {
-      cuttlefish::KeymasterChannel keymaster_channel(
-          keymaster_in, keymaster_out);
+      KeymasterChannel keymaster_channel(keymaster_in, keymaster_out);
 
       KeymasterResponder keymaster_responder(keymaster_channel, keymaster);
 
@@ -165,10 +212,9 @@
     }
   });
 
-  std::thread gatekeeper_thread([gatekeeper_in, gatekeeper_out, &gatekeeper]() {
+  threads.emplace_back([gatekeeper_in, gatekeeper_out, &gatekeeper]() {
     while (true) {
-      cuttlefish::GatekeeperChannel gatekeeper_channel(
-          gatekeeper_in, gatekeeper_out);
+      GatekeeperChannel gatekeeper_channel(gatekeeper_in, gatekeeper_out);
 
       GatekeeperResponder gatekeeper_responder(gatekeeper_channel, *gatekeeper);
 
@@ -177,6 +223,17 @@
     }
   });
 
-  keymaster_thread.join();
-  gatekeeper_thread.join();
+  threads.emplace_back(StartKernelEventMonitor(kernel_events_fd));
+
+  for (auto& t : threads) {
+    t.join();
+  }
+
+  return 0;
+}
+
+}  // namespace cuttlefish
+
+int main(int argc, char** argv) {
+  return cuttlefish::SecureEnvMain(argc, argv);
 }
diff --git a/host/commands/secure_env/test_tpm.cpp b/host/commands/secure_env/test_tpm.cpp
new file mode 100644
index 0000000..14e43be
--- /dev/null
+++ b/host/commands/secure_env/test_tpm.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/commands/secure_env/test_tpm.h"
+
+#include <android-base/logging.h>
+#include <tss2/tss2_rc.h>
+
+namespace cuttlefish {
+
+TestTpm::TestTpm() {
+  auto rc = Esys_Initialize(&esys_, tpm_.TctiContext(), nullptr);
+  if (rc != TPM2_RC_SUCCESS) {
+    LOG(FATAL) << "Could not initialize esys: " << Tss2_RC_Decode(rc) << " ("
+               << rc << ")";
+  }
+}
+
+TestTpm::~TestTpm() { Esys_Finalize(&esys_); }
+
+ESYS_CONTEXT* TestTpm::Esys() { return esys_; }
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/size_utils.cpp b/host/commands/secure_env/test_tpm.h
similarity index 69%
copy from common/libs/utils/size_utils.cpp
copy to host/commands/secure_env/test_tpm.h
index 9f25445..fb39680 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/host/commands/secure_env/test_tpm.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,15 +14,22 @@
  * limitations under the License.
  */
 
-#include "common/libs/utils/size_utils.h"
+#include <tss2/tss2_esys.h>
 
-#include <unistd.h>
+#include "host/commands/secure_env/in_process_tpm.h"
 
 namespace cuttlefish {
 
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
-}
+class TestTpm {
+ public:
+  TestTpm();
+  ~TestTpm();
+
+  ESYS_CONTEXT* Esys();
+
+ private:
+  InProcessTpm tpm_;
+  ESYS_CONTEXT* esys_;
+};
 
 }  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm.h b/host/commands/secure_env/tpm.h
index 201e5e7..3175ca7 100644
--- a/host/commands/secure_env/tpm.h
+++ b/host/commands/secure_env/tpm.h
@@ -17,9 +17,13 @@
 
 #include <tss2/tss2_tcti.h>
 
+namespace cuttlefish {
+
 class Tpm {
 public:
   virtual ~Tpm() = default;
 
   virtual TSS2_TCTI_CONTEXT* TctiContext() = 0;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_attestation_record.cpp b/host/commands/secure_env/tpm_attestation_record.cpp
index 75a2920..70239c9 100644
--- a/host/commands/secure_env/tpm_attestation_record.cpp
+++ b/host/commands/secure_env/tpm_attestation_record.cpp
@@ -22,10 +22,29 @@
 
 #include <android-base/logging.h>
 
+namespace cuttlefish {
+
+namespace {
+using VerifiedBootParams = keymaster::AttestationContext::VerifiedBootParams;
 using keymaster::AuthorizationSet;
 
+VerifiedBootParams MakeVbParams() {
+  // Cuttlefish is hard-coded to verifiedbootstate=orange
+  // See device/google/cuttlefish/host/libs/config/bootconfig_args.cpp
+  VerifiedBootParams vb_params;
+  static uint8_t empty_vb_key[32] = {};
+  vb_params.verified_boot_key = {empty_vb_key, sizeof(empty_vb_key)};
+  vb_params.verified_boot_hash = {empty_vb_key, sizeof(empty_vb_key)};
+  vb_params.verified_boot_state = KM_VERIFIED_BOOT_UNVERIFIED;
+  vb_params.device_locked = false;
+  return vb_params;
+}
+
+}  // namespace
+
 TpmAttestationRecordContext::TpmAttestationRecordContext()
-    : keymaster::AttestationContext(::keymaster::KmVersion::KEYMINT_1),
+    : keymaster::AttestationContext(::keymaster::KmVersion::KEYMINT_2),
+      vb_params_(MakeVbParams()),
       unique_id_hbk_(16) {
   RAND_bytes(unique_id_hbk_.data(), unique_id_hbk_.size());
 }
@@ -35,15 +54,10 @@
 }
 
 keymaster_error_t TpmAttestationRecordContext::VerifyAndCopyDeviceIds(
-    const AuthorizationSet& attestation_params,
-    AuthorizationSet* attestation) const {
+    const AuthorizationSet& /*attestation_params*/,
+    AuthorizationSet* /*attestation*/) const {
   LOG(DEBUG) << "TODO(schuffelen): Implement VerifyAndCopyDeviceIds";
-  attestation->Difference(attestation_params);
-  attestation->Union(attestation_params);
-  if (int index = attestation->find(keymaster::TAG_ATTESTATION_APPLICATION_ID)) {
-    attestation->erase(index);
-  }
-  return KM_ERROR_OK;
+  return KM_ERROR_UNIMPLEMENTED;
 }
 
 keymaster::Buffer TpmAttestationRecordContext::GenerateUniqueId(
@@ -54,28 +68,11 @@
                                        application_id, reset_since_rotation);
 }
 
-const keymaster::AttestationContext::VerifiedBootParams*
-TpmAttestationRecordContext::GetVerifiedBootParams(keymaster_error_t* error) const {
-  LOG(DEBUG) << "TODO(schuffelen): Implement GetVerifiedBootParams";
-  if (!vb_params_) {
-      vb_params_.reset(new VerifiedBootParams{});
-
-      // TODO(schuffelen): Get this data out of vbmeta
-      static uint8_t fake_vb_key[32];
-      static bool fake_vb_key_initialized = false;
-      if (!fake_vb_key_initialized) {
-        for (int i = 0; i < sizeof(fake_vb_key); i++) {
-          fake_vb_key[i] = rand();
-        }
-        fake_vb_key_initialized = true;
-      }
-      vb_params_->verified_boot_key = {fake_vb_key, sizeof(fake_vb_key)};
-      vb_params_->verified_boot_hash = {fake_vb_key, sizeof(fake_vb_key)};
-      vb_params_->verified_boot_state = KM_VERIFIED_BOOT_VERIFIED;
-      vb_params_->device_locked = true;
-  }
+const VerifiedBootParams* TpmAttestationRecordContext::GetVerifiedBootParams(
+    keymaster_error_t* error) const {
+  static VerifiedBootParams vb_params = MakeVbParams();
   *error = KM_ERROR_OK;
-  return vb_params_.get();
+  return &vb_params;
 }
 
 keymaster::KeymasterKeyBlob
@@ -89,3 +86,5 @@
                                                  keymaster_error_t* error) const {
   return keymaster::getAttestationChain(algorithm, error);
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_attestation_record.h b/host/commands/secure_env/tpm_attestation_record.h
index 1609351..2a2a4cd 100644
--- a/host/commands/secure_env/tpm_attestation_record.h
+++ b/host/commands/secure_env/tpm_attestation_record.h
@@ -20,6 +20,8 @@
 
 #include <keymaster/attestation_context.h>
 
+namespace cuttlefish {
+
 class TpmAttestationRecordContext : public keymaster::AttestationContext {
 public:
  TpmAttestationRecordContext();
@@ -37,8 +39,9 @@
      keymaster_algorithm_t algorithm, keymaster_error_t* error) const override;
  keymaster::CertificateChain GetAttestationChain(
      keymaster_algorithm_t algorithm, keymaster_error_t* error) const override;
-
 private:
-    mutable std::unique_ptr<VerifiedBootParams> vb_params_;
-    std::vector<uint8_t> unique_id_hbk_;
+ VerifiedBootParams vb_params_;
+ std::vector<uint8_t> unique_id_hbk_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_auth.cpp b/host/commands/secure_env/tpm_auth.cpp
index 10f4b2d..937dd5d 100644
--- a/host/commands/secure_env/tpm_auth.cpp
+++ b/host/commands/secure_env/tpm_auth.cpp
@@ -17,6 +17,8 @@
 
 #include <tuple>
 
+namespace cuttlefish {
+
 TpmAuth::TpmAuth(ESYS_TR auth): TpmAuth(auth, ESYS_TR_NONE, ESYS_TR_NONE) {}
 TpmAuth::TpmAuth(ESYS_TR auth1, ESYS_TR auth2)
     : TpmAuth(auth1, auth2, ESYS_TR_NONE) {}
@@ -41,3 +43,5 @@
 ESYS_TR TpmAuth::auth3() const {
   return auth3_;
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_auth.h b/host/commands/secure_env/tpm_auth.h
index 196b5fd..dec75c4 100644
--- a/host/commands/secure_env/tpm_auth.h
+++ b/host/commands/secure_env/tpm_auth.h
@@ -17,6 +17,8 @@
 
 #include <tss2/tss2_esys.h>
 
+namespace cuttlefish {
+
 /**
  * Authorization wrapper for TPM2 calls.
  *
@@ -41,3 +43,5 @@
   ESYS_TR auth2_;
   ESYS_TR auth3_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_commands.cpp b/host/commands/secure_env/tpm_commands.cpp
index 78e9d7f..932202a 100644
--- a/host/commands/secure_env/tpm_commands.cpp
+++ b/host/commands/secure_env/tpm_commands.cpp
@@ -21,6 +21,8 @@
 #include <cstddef>
 #include <string>
 
+namespace cuttlefish {
+
 std::string TpmCommandName(std::uint32_t command_num) {
   switch(command_num) {
     #define MATCH_TPM_COMMAND(name) case name: return #name;
@@ -145,3 +147,5 @@
       return "Unknown";
   }
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_commands.h b/host/commands/secure_env/tpm_commands.h
index ee75844..421aa51 100644
--- a/host/commands/secure_env/tpm_commands.h
+++ b/host/commands/secure_env/tpm_commands.h
@@ -19,4 +19,8 @@
 #include <cstddef>
 #include <string>
 
+namespace cuttlefish {
+
 std::string TpmCommandName(std::uint32_t command_num);
+
+}
diff --git a/host/commands/secure_env/tpm_encrypt_decrypt.cpp b/host/commands/secure_env/tpm_encrypt_decrypt.cpp
index 4a1711e..c81d7d6 100644
--- a/host/commands/secure_env/tpm_encrypt_decrypt.cpp
+++ b/host/commands/secure_env/tpm_encrypt_decrypt.cpp
@@ -22,23 +22,23 @@
 #include <android-base/logging.h>
 #include <tss2/tss2_rc.h>
 
+namespace cuttlefish {
+
 using keymaster::KeymasterBlob;
 
-static bool TpmEncryptDecrypt(
-    ESYS_CONTEXT* esys,
-    ESYS_TR key_handle,
-    TpmAuth auth,
-    uint8_t* data_in,
-    uint8_t* data_out,
-    size_t data_size,
-    bool decrypt) {
+static bool TpmEncryptDecrypt(  //
+    ESYS_CONTEXT* esys, ESYS_TR key_handle, TpmAuth auth, const TPM2B_IV& iv,
+    uint8_t* data_in, uint8_t* data_out, size_t data_size, bool decrypt) {
+  if (iv.size != sizeof(iv.buffer)) {
+    LOG(ERROR) << "Input IV had wrong size: " << iv.size;
+    return false;
+  }
   // TODO(schuffelen): Pipeline this for performance. Will require reevaluating
   // the initialization vector logic.
   std::vector<unsigned char> converted(data_size);
   // malloc for parity with Esys_EncryptDecrypt2
   TPM2B_IV* init_vector_in = (TPM2B_IV*) malloc(sizeof(TPM2B_IV));
-  *init_vector_in = {};
-  init_vector_in->size = 16;
+  *init_vector_in = iv;
   for (auto processed = 0; processed < data_size;) {
     TPM2B_MAX_BUFFER in_data;
     in_data.size =
@@ -77,24 +77,18 @@
   return true;
 }
 
-bool TpmEncrypt(
-    ESYS_CONTEXT* esys,
-    ESYS_TR key_handle,
-    TpmAuth auth,
-    uint8_t* data_in,
-    uint8_t* data_out,
-    size_t data_size) {
-  return TpmEncryptDecrypt(
-      esys, key_handle, auth, data_in, data_out, data_size, false);
+bool TpmEncrypt(ESYS_CONTEXT* esys, ESYS_TR key_handle, TpmAuth auth,
+                const TPM2B_IV& iv, uint8_t* data_in, uint8_t* data_out,
+                size_t data_size) {
+  return TpmEncryptDecrypt(  //
+      esys, key_handle, auth, iv, data_in, data_out, data_size, false);
 }
 
-bool TpmDecrypt(
-    ESYS_CONTEXT* esys,
-    ESYS_TR key_handle,
-    TpmAuth auth,
-    uint8_t* data_in,
-    uint8_t* data_out,
-    size_t data_size) {
-  return TpmEncryptDecrypt(
-      esys, key_handle, auth, data_in, data_out, data_size, true);
+bool TpmDecrypt(ESYS_CONTEXT* esys, ESYS_TR key_handle, TpmAuth auth,
+                const TPM2B_IV& iv, uint8_t* data_in, uint8_t* data_out,
+                size_t data_size) {
+  return TpmEncryptDecrypt(  //
+      esys, key_handle, auth, iv, data_in, data_out, data_size, true);
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_encrypt_decrypt.h b/host/commands/secure_env/tpm_encrypt_decrypt.h
index b75bafb..a811cb7 100644
--- a/host/commands/secure_env/tpm_encrypt_decrypt.h
+++ b/host/commands/secure_env/tpm_encrypt_decrypt.h
@@ -20,20 +20,20 @@
 
 #include "host/commands/secure_env/tpm_auth.h"
 
+namespace cuttlefish {
+
 /**
  * Encrypt `data_in` to `data_out`, which are both buffers of size `data_size`.
  *
  * There are no integrity guarantees on this data: if the encrypted data is
  * corrupted, decrypting it could either fail or produce corrupted output.
+ *
+ * `iv` should be generated randomly, and can be stored unencrypted next to
+ * the plaintext.
  */
-bool TpmEncrypt(
-    ESYS_CONTEXT* esys,
-    ESYS_TR key_handle,
-    TpmAuth auth,
-    uint8_t* data_in,
-    uint8_t* data_out,
-    size_t data_size);
-
+bool TpmEncrypt(ESYS_CONTEXT* esys, ESYS_TR key_handle, TpmAuth auth,
+                const TPM2B_IV& iv, uint8_t* data_in, uint8_t* data_out,
+                size_t data_size);
 
 /**
  * Decrypt `data_in` to `data_out`, which are both buffers of size `data_size`.
@@ -41,10 +41,8 @@
  * There are no integrity guarantees on this data: if the encrypted data is
  * corrupted, decrypting it could either fail or produce corrupted output.
  */
-bool TpmDecrypt(
-    ESYS_CONTEXT* esys,
-    ESYS_TR key_handle,
-    TpmAuth auth,
-    uint8_t* data_in,
-    uint8_t* data_out,
-    size_t data_size);
+bool TpmDecrypt(ESYS_CONTEXT* esys, ESYS_TR key_handle, TpmAuth auth,
+                const TPM2B_IV& iv, uint8_t* data_in, uint8_t* data_out,
+                size_t data_size);
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_gatekeeper.cpp b/host/commands/secure_env/tpm_gatekeeper.cpp
index e4f61e7..c8497d5 100644
--- a/host/commands/secure_env/tpm_gatekeeper.cpp
+++ b/host/commands/secure_env/tpm_gatekeeper.cpp
@@ -29,6 +29,8 @@
 #include "host/commands/secure_env/tpm_hmac.h"
 #include "host/commands/secure_env/tpm_random_source.h"
 
+namespace cuttlefish {
+
 TpmGatekeeper::TpmGatekeeper(
     TpmResourceManager& resource_manager,
     GatekeeperStorage& secure_storage,
@@ -240,3 +242,4 @@
   return true;
 }
 
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_gatekeeper.h b/host/commands/secure_env/tpm_gatekeeper.h
index 021ab58..1c35bdc 100644
--- a/host/commands/secure_env/tpm_gatekeeper.h
+++ b/host/commands/secure_env/tpm_gatekeeper.h
@@ -21,6 +21,8 @@
 #include "host/commands/secure_env/gatekeeper_storage.h"
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 /**
  * See method descriptions for this class in
  * system/gatekeeper/include/gatekeeper/gatekeeper.h
@@ -81,3 +83,5 @@
   GatekeeperStorage& secure_storage_;
   GatekeeperStorage& insecure_storage_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_hmac.cpp b/host/commands/secure_env/tpm_hmac.cpp
index 80003d0..b566659 100644
--- a/host/commands/secure_env/tpm_hmac.cpp
+++ b/host/commands/secure_env/tpm_hmac.cpp
@@ -20,6 +20,8 @@
 
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 /* For data large enough to fit in a single TPM2_HMAC call. */
 static UniqueEsysPtr<TPM2B_DIGEST> OneshotHmac(
     TpmResourceManager& resource_manager,
@@ -153,3 +155,5 @@
   auto fn = data_size > TPM2_MAX_DIGEST_BUFFER ? SegmentedHmac : OneshotHmac;
   return fn(resource_manager, key_handle, auth, data, data_size);
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_hmac.h b/host/commands/secure_env/tpm_hmac.h
index e4686b6..09aa011 100644
--- a/host/commands/secure_env/tpm_hmac.h
+++ b/host/commands/secure_env/tpm_hmac.h
@@ -21,6 +21,8 @@
 
 #include "host/commands/secure_env/tpm_auth.h"
 
+namespace cuttlefish {
+
 class TpmResourceManager;
 
 struct EsysDeleter {
@@ -49,3 +51,5 @@
     TpmAuth auth,
     const uint8_t* data,
     size_t data_size);
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_key_blob_maker.cpp b/host/commands/secure_env/tpm_key_blob_maker.cpp
index 64f344a..38236d8 100644
--- a/host/commands/secure_env/tpm_key_blob_maker.cpp
+++ b/host/commands/secure_env/tpm_key_blob_maker.cpp
@@ -26,6 +26,8 @@
 #include "host/commands/secure_env/hmac_serializable.h"
 #include "host/commands/secure_env/primary_key_builder.h"
 
+namespace cuttlefish {
+
 using keymaster::AuthorizationSet;
 using keymaster::KeymasterKeyBlob;
 using keymaster::Serializable;
@@ -41,9 +43,76 @@
 static keymaster_error_t SplitEnforcedProperties(
     const keymaster::AuthorizationSet& key_description,
     keymaster::AuthorizationSet* hw_enforced,
-    keymaster::AuthorizationSet* sw_enforced) {
+    keymaster::AuthorizationSet* sw_enforced,
+    keymaster::AuthorizationSet* hidden) {
   for (auto& entry : key_description) {
     switch (entry.tag) {
+      // These cannot be specified by the client.
+      case KM_TAG_BOOT_PATCHLEVEL:
+      case KM_TAG_ORIGIN:
+      case KM_TAG_OS_PATCHLEVEL:
+      case KM_TAG_OS_VERSION:
+      case KM_TAG_ROOT_OF_TRUST:
+      case KM_TAG_VENDOR_PATCHLEVEL:
+        LOG(DEBUG) << "Root of trust and origin tags may not be specified";
+        return KM_ERROR_INVALID_TAG;
+
+      // These are hidden
+      case KM_TAG_APPLICATION_DATA:
+      case KM_TAG_APPLICATION_ID:
+        hidden->push_back(entry);
+        break;
+
+      // These should not be in key descriptions because they're for operation
+      // parameters.
+      case KM_TAG_ASSOCIATED_DATA:
+      case KM_TAG_AUTH_TOKEN:
+      case KM_TAG_CONFIRMATION_TOKEN:
+      case KM_TAG_INVALID:
+      case KM_TAG_MAC_LENGTH:
+      case KM_TAG_NONCE:
+        LOG(DEBUG) << "Tag " << entry.tag
+                   << " not allowed in key generation/import";
+        break;
+
+      // These are provided to support attestation key generation, but should
+      // not be included in the key characteristics.
+      case KM_TAG_ATTESTATION_APPLICATION_ID:
+      case KM_TAG_ATTESTATION_CHALLENGE:
+      case KM_TAG_ATTESTATION_ID_BRAND:
+      case KM_TAG_ATTESTATION_ID_DEVICE:
+      case KM_TAG_ATTESTATION_ID_IMEI:
+      case KM_TAG_ATTESTATION_ID_MANUFACTURER:
+      case KM_TAG_ATTESTATION_ID_MEID:
+      case KM_TAG_ATTESTATION_ID_MODEL:
+      case KM_TAG_ATTESTATION_ID_PRODUCT:
+      case KM_TAG_ATTESTATION_ID_SERIAL:
+      case KM_TAG_CERTIFICATE_SERIAL:
+      case KM_TAG_CERTIFICATE_SUBJECT:
+      case KM_TAG_CERTIFICATE_NOT_BEFORE:
+      case KM_TAG_CERTIFICATE_NOT_AFTER:
+      case KM_TAG_RESET_SINCE_ID_ROTATION:
+        break;
+
+      // strongbox-only tags
+      case KM_TAG_DEVICE_UNIQUE_ATTESTATION:
+        LOG(DEBUG) << "Strongbox-only tag: " << entry.tag;
+        return KM_ERROR_UNSUPPORTED_TAG;
+
+      case KM_TAG_ROLLBACK_RESISTANT:
+        return KM_ERROR_UNSUPPORTED_TAG;
+
+      case KM_TAG_ROLLBACK_RESISTANCE:
+        LOG(DEBUG) << "Rollback resistance is not implemented.";
+        return KM_ERROR_ROLLBACK_RESISTANCE_UNAVAILABLE;
+
+      // These are nominally HW tags, but we don't actually support HW key
+      // attestation yet.
+      case KM_TAG_ALLOW_WHILE_ON_BODY:
+      case KM_TAG_EXPORTABLE:
+      case KM_TAG_IDENTITY_CREDENTIAL_KEY:
+      case KM_TAG_STORAGE_KEY:
+
       case KM_TAG_PURPOSE:
       case KM_TAG_ALGORITHM:
       case KM_TAG_KEY_SIZE:
@@ -63,17 +132,32 @@
       case KM_TAG_EC_CURVE:
       case KM_TAG_ECIES_SINGLE_HASH_MODE:
       case KM_TAG_USER_AUTH_TYPE:
-      case KM_TAG_ORIGIN:
-      case KM_TAG_OS_VERSION:
-      case KM_TAG_OS_PATCHLEVEL:
       case KM_TAG_EARLY_BOOT_ONLY:
       case KM_TAG_UNLOCKED_DEVICE_REQUIRED:
         hw_enforced->push_back(entry);
         break;
-      default:
+
+      // The remaining tags are all software.
+      case KM_TAG_ACTIVE_DATETIME:
+      case KM_TAG_ALL_APPLICATIONS:
+      case KM_TAG_ALL_USERS:
+      case KM_TAG_BOOTLOADER_ONLY:
+      case KM_TAG_CREATION_DATETIME:
+      case KM_TAG_INCLUDE_UNIQUE_ID:
+      case KM_TAG_MAX_BOOT_LEVEL:
+      case KM_TAG_ORIGINATION_EXPIRE_DATETIME:
+      case KM_TAG_RSA_OAEP_MGF_DIGEST:
+      case KM_TAG_TRUSTED_CONFIRMATION_REQUIRED:
+      case KM_TAG_TRUSTED_USER_PRESENCE_REQUIRED:
+      case KM_TAG_UNIQUE_ID:
+      case KM_TAG_USAGE_COUNT_LIMIT:
+      case KM_TAG_USAGE_EXPIRE_DATETIME:
+      case KM_TAG_USER_ID:
         sw_enforced->push_back(entry);
+        break;
     }
   }
+
   return KM_ERROR_OK;
 }
 
@@ -102,20 +186,9 @@
     KeymasterKeyBlob* blob,
     AuthorizationSet* hw_enforced,
     AuthorizationSet* sw_enforced) const {
-  std::set<keymaster_tag_t> protected_tags = {
-    KM_TAG_ROOT_OF_TRUST,
-    KM_TAG_ORIGIN,
-    KM_TAG_OS_VERSION,
-    KM_TAG_OS_PATCHLEVEL,
-  };
-  for (auto tag : protected_tags) {
-    if (key_description.Contains(tag)) {
-      LOG(ERROR) << "Invalid tag " << tag;
-      return KM_ERROR_INVALID_TAG;
-    }
-  }
-  auto rc =
-      SplitEnforcedProperties(key_description, hw_enforced, sw_enforced);
+  AuthorizationSet hidden;
+  auto rc = SplitEnforcedProperties(key_description, hw_enforced, sw_enforced,
+                                    &hidden);
   if (rc != KM_ERROR_OK) {
     return rc;
   }
@@ -125,13 +198,22 @@
   hw_enforced->push_back(keymaster::TAG_OS_VERSION, os_version_);
   hw_enforced->push_back(keymaster::TAG_OS_PATCHLEVEL, os_patchlevel_);
 
+  if (vendor_patchlevel_) {
+    hw_enforced->push_back(keymaster::TAG_VENDOR_PATCHLEVEL,
+                           *vendor_patchlevel_);
+  }
+  if (boot_patchlevel_) {
+    hw_enforced->push_back(keymaster::TAG_BOOT_PATCHLEVEL, *boot_patchlevel_);
+  }
+
   return UnvalidatedCreateKeyBlob(key_material, *hw_enforced, *sw_enforced,
-                                  blob);
+                                  hidden, blob);
 }
 
 keymaster_error_t TpmKeyBlobMaker::UnvalidatedCreateKeyBlob(
     const KeymasterKeyBlob& key_material, const AuthorizationSet& hw_enforced,
-    const AuthorizationSet& sw_enforced, KeymasterKeyBlob* blob) const {
+    const AuthorizationSet& sw_enforced, const AuthorizationSet& hidden,
+    KeymasterKeyBlob* blob) const {
   keymaster::Buffer key_material_buffer(
       key_material.key_material, key_material.key_material_size);
   AuthorizationSet hw_enforced_mutable = hw_enforced;
@@ -142,8 +224,12 @@
   EncryptedSerializable encryption(
       resource_manager_, parent_key_fn, sensitive_material);
   auto signing_key_fn = SigningKeyCreator(kUniqueKey);
-  HmacSerializable sign_check(
-      resource_manager_, signing_key_fn, TPM2_SHA256_DIGEST_SIZE, &encryption);
+  // TODO(b/154956668) The "hidden" tags should also be mixed into the TPM ACL
+  // so that the TPM requires them to be presented to unwrap the key. This is
+  // necessary to meet the requirement that full breach of KeyMint means an
+  // attacker cannot unwrap keys w/o the application id/data.
+  HmacSerializable sign_check(resource_manager_, signing_key_fn,
+                              TPM2_SHA256_DIGEST_SIZE, &encryption, &hidden);
   auto generated_blob = SerializableToKeyBlob(sign_check);
   LOG(VERBOSE) << "Keymaster key size: " << generated_blob.key_material_size;
   if (generated_blob.key_material_size != 0) {
@@ -155,9 +241,8 @@
 }
 
 keymaster_error_t TpmKeyBlobMaker::UnwrapKeyBlob(
-    const keymaster_key_blob_t& blob,
-    AuthorizationSet* hw_enforced,
-    AuthorizationSet* sw_enforced,
+    const keymaster_key_blob_t& blob, AuthorizationSet* hw_enforced,
+    AuthorizationSet* sw_enforced, const AuthorizationSet& hidden,
     KeymasterKeyBlob* key_material) const {
   keymaster::Buffer key_material_buffer(blob.key_material_size);
   CompositeSerializable sensitive_material(
@@ -166,17 +251,17 @@
   EncryptedSerializable encryption(
       resource_manager_, parent_key_fn, sensitive_material);
   auto signing_key_fn = SigningKeyCreator(kUniqueKey);
-  HmacSerializable sign_check(
-      resource_manager_, signing_key_fn, TPM2_SHA256_DIGEST_SIZE, &encryption);
+  HmacSerializable sign_check(resource_manager_, signing_key_fn,
+                              TPM2_SHA256_DIGEST_SIZE, &encryption, &hidden);
   auto buf = blob.key_material;
   auto buf_end = buf + blob.key_material_size;
   if (!sign_check.Deserialize(&buf, buf_end)) {
     LOG(ERROR) << "Failed to deserialize key.";
-    return KM_ERROR_UNKNOWN_ERROR;
+    return KM_ERROR_INVALID_KEY_BLOB;
   }
   if (key_material_buffer.available_read() == 0) {
     LOG(ERROR) << "Key material was corrupted and the size was too large";
-    return KM_ERROR_UNKNOWN_ERROR;
+    return KM_ERROR_INVALID_KEY_BLOB;
   }
   *key_material = KeymasterKeyBlob(
       key_material_buffer.peek_read(), key_material_buffer.available_read());
@@ -185,8 +270,22 @@
 
 keymaster_error_t TpmKeyBlobMaker::SetSystemVersion(
     uint32_t os_version, uint32_t os_patchlevel) {
-  // TODO(b/155697375): Only accept new values of these from the bootloader
+  // TODO(b/201561154): Only accept new values of these from the bootloader
   os_version_ = os_version;
   os_patchlevel_ = os_patchlevel;
   return KM_ERROR_OK;
 }
+
+keymaster_error_t TpmKeyBlobMaker::SetVendorPatchlevel(uint32_t patchlevel) {
+  // TODO(b/201561154): Only accept new values of these from the bootloader
+  vendor_patchlevel_ = patchlevel;
+  return KM_ERROR_OK;
+}
+
+keymaster_error_t TpmKeyBlobMaker::SetBootPatchlevel(uint32_t boot_patchlevel) {
+  // TODO(b/201561154): Only accept new values of these from the bootloader
+  boot_patchlevel_ = boot_patchlevel;
+  return KM_ERROR_OK;
+}
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_key_blob_maker.h b/host/commands/secure_env/tpm_key_blob_maker.h
index a0483b4..b76d1dc 100644
--- a/host/commands/secure_env/tpm_key_blob_maker.h
+++ b/host/commands/secure_env/tpm_key_blob_maker.h
@@ -15,10 +15,14 @@
 
 #pragma once
 
+#include <optional>
+//
 #include <keymaster/soft_key_factory.h>
-
+//
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 /**
  * Encrypts key data using a TPM-resident key and signs it with a TPM-resident
  * key for privacy and integrity.
@@ -43,6 +47,7 @@
       const keymaster::KeymasterKeyBlob& key_material,
       const keymaster::AuthorizationSet& hw_enforced,
       const keymaster::AuthorizationSet& sw_enforced,
+      const keymaster::AuthorizationSet& hidden,
       keymaster::KeymasterKeyBlob* blob) const;
 
   /**
@@ -60,11 +65,19 @@
       const keymaster_key_blob_t& blob,
       keymaster::AuthorizationSet* hw_enforced,
       keymaster::AuthorizationSet* sw_enforced,
+      const keymaster::AuthorizationSet& hidden,
       keymaster::KeymasterKeyBlob* key_material) const;
 
   keymaster_error_t SetSystemVersion(uint32_t os_version, uint32_t os_patchlevel);
-private:
+  keymaster_error_t SetVendorPatchlevel(uint32_t vendor_patchlevel);
+  keymaster_error_t SetBootPatchlevel(uint32_t boot_patchlevel);
+
+ private:
   TpmResourceManager& resource_manager_;
   uint32_t os_version_;
   uint32_t os_patchlevel_;
+  std::optional<uint32_t> vendor_patchlevel_;
+  std::optional<uint32_t> boot_patchlevel_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_keymaster_context.cpp b/host/commands/secure_env/tpm_keymaster_context.cpp
index 850d48b..6171d8c 100644
--- a/host/commands/secure_env/tpm_keymaster_context.cpp
+++ b/host/commands/secure_env/tpm_keymaster_context.cpp
@@ -28,22 +28,45 @@
 #include <keymaster/km_openssl/triple_des_key.h>
 
 #include "host/commands/secure_env/tpm_attestation_record.h"
-#include "host/commands/secure_env/tpm_random_source.h"
 #include "host/commands/secure_env/tpm_key_blob_maker.h"
+#include "host/commands/secure_env/tpm_random_source.h"
+#include "host/commands/secure_env/tpm_remote_provisioning_context.h"
 
+namespace cuttlefish {
+
+namespace {
 using keymaster::AuthorizationSet;
 using keymaster::KeymasterKeyBlob;
 using keymaster::KeyFactory;
 using keymaster::OperationFactory;
 
+keymaster::AuthorizationSet GetHiddenTags(
+    const AuthorizationSet& authorizations) {
+  keymaster::AuthorizationSet output;
+  keymaster_blob_t entry;
+  if (authorizations.GetTagValue(keymaster::TAG_APPLICATION_ID, &entry)) {
+    output.push_back(keymaster::TAG_APPLICATION_ID, entry.data,
+                     entry.data_length);
+  }
+  if (authorizations.GetTagValue(keymaster::TAG_APPLICATION_DATA, &entry)) {
+    output.push_back(keymaster::TAG_APPLICATION_DATA, entry.data,
+                     entry.data_length);
+  }
+  return output;
+}
+
+}  // namespace
+
 TpmKeymasterContext::TpmKeymasterContext(
     TpmResourceManager& resource_manager,
     keymaster::KeymasterEnforcement& enforcement)
-    : resource_manager_(resource_manager)
-    , enforcement_(enforcement)
-    , key_blob_maker_(new TpmKeyBlobMaker(resource_manager_))
-    , random_source_(new TpmRandomSource(resource_manager_.Esys()))
-    , attestation_context_(new TpmAttestationRecordContext()) {
+    : resource_manager_(resource_manager),
+      enforcement_(enforcement),
+      key_blob_maker_(new TpmKeyBlobMaker(resource_manager_)),
+      random_source_(new TpmRandomSource(resource_manager_.Esys())),
+      attestation_context_(new TpmAttestationRecordContext()),
+      remote_provisioning_context_(
+          new TpmRemoteProvisioningContext(resource_manager_)) {
   key_factories_.emplace(
       KM_ALGORITHM_RSA, new keymaster::RsaKeyFactory(*key_blob_maker_, *this));
   key_factories_.emplace(
@@ -187,7 +210,7 @@
 
   return key_blob_maker_->UnvalidatedCreateKeyBlob(
       key->key_material(), key->hw_enforced(), key->sw_enforced(),
-      upgraded_key);
+      GetHiddenTags(upgrade_params), upgraded_key);
 }
 
 keymaster_error_t TpmKeymasterContext::ParseKeyBlob(
@@ -198,12 +221,10 @@
   keymaster::AuthorizationSet sw_enforced;
   keymaster::KeymasterKeyBlob key_material;
 
-  auto rc =
-      key_blob_maker_->UnwrapKeyBlob(
-          blob,
-          &hw_enforced,
-          &sw_enforced,
-          &key_material);
+  keymaster::AuthorizationSet hidden = GetHiddenTags(additional_params);
+
+  auto rc = key_blob_maker_->UnwrapKeyBlob(blob, &hw_enforced, &sw_enforced,
+                                           hidden, &key_material);
   if (rc != KM_ERROR_OK) {
     LOG(ERROR) << "Failed to unwrap key: " << rc;
     return rc;
@@ -247,18 +268,20 @@
 
 keymaster::CertificateChain TpmKeymasterContext::GenerateAttestation(
     const keymaster::Key& key, const keymaster::AuthorizationSet& attest_params,
-    keymaster::UniquePtr<keymaster::Key> /* attest_key */,
-    const keymaster::KeymasterBlob& /* issuer_subject */,
+    keymaster::UniquePtr<keymaster::Key> attest_key,
+    const keymaster::KeymasterBlob& issuer_subject,
     keymaster_error_t* error) const {
   LOG(INFO) << "TODO(b/155697200): Link attestation back to the TPM";
   keymaster_algorithm_t key_algorithm;
   if (!key.authorizations().GetTagValue(keymaster::TAG_ALGORITHM,
                                         &key_algorithm)) {
+    LOG(ERROR) << "Cannot find key algorithm (TAG_ALGORITHM)";
     *error = KM_ERROR_UNKNOWN_ERROR;
     return {};
   }
 
   if ((key_algorithm != KM_ALGORITHM_RSA && key_algorithm != KM_ALGORITHM_EC)) {
+    LOG(ERROR) << "Invalid algorithm: " << key_algorithm;
     *error = KM_ERROR_INCOMPATIBLE_ALGORITHM;
     return {};
   }
@@ -277,12 +300,20 @@
   // hardware/interfaces/keymaster/4.1/vts/functional/DeviceUniqueAttestationTest.cpp:203
   // at commit 36dcf1a404a9cf07ca5a2a6ad92371507194fe1b .
   if (attest_params.find(keymaster::TAG_DEVICE_UNIQUE_ATTESTATION) != -1) {
+    LOG(ERROR) << "TAG_DEVICE_UNIQUE_ATTESTATION not supported";
     *error = KM_ERROR_UNIMPLEMENTED;
     return {};
   }
 
+  keymaster::AttestKeyInfo attest_key_info(attest_key, &issuer_subject, error);
+  if (*error != KM_ERROR_OK) {
+    LOG(ERROR)
+        << "Error creating attestation key info from given key and subject";
+    return {};
+  }
+
   return keymaster::generate_attestation(asymmetric_key, attest_params,
-                                         {} /* attest_key */,
+                                         std::move(attest_key_info),
                                          *attestation_context_, error);
 }
 
@@ -319,3 +350,40 @@
   LOG(ERROR) << "TODO(b/155697375): Implement UnwrapKey";
   return KM_ERROR_UNIMPLEMENTED;
 }
+
+keymaster::RemoteProvisioningContext*
+TpmKeymasterContext::GetRemoteProvisioningContext() const {
+  return remote_provisioning_context_.get();
+}
+
+keymaster_error_t TpmKeymasterContext::SetVendorPatchlevel(
+    uint32_t vendor_patchlevel) {
+  if (vendor_patchlevel_.has_value() &&
+      vendor_patchlevel != vendor_patchlevel_.value()) {
+    // Can't set patchlevel to a different value.
+    return KM_ERROR_INVALID_ARGUMENT;
+  }
+  vendor_patchlevel_ = vendor_patchlevel;
+  return key_blob_maker_->SetVendorPatchlevel(*vendor_patchlevel_);
+}
+
+keymaster_error_t TpmKeymasterContext::SetBootPatchlevel(
+    uint32_t boot_patchlevel) {
+  if (boot_patchlevel_.has_value() &&
+      boot_patchlevel != boot_patchlevel_.value()) {
+    // Can't set patchlevel to a different value.
+    return KM_ERROR_INVALID_ARGUMENT;
+  }
+  boot_patchlevel_ = boot_patchlevel;
+  return key_blob_maker_->SetBootPatchlevel(*boot_patchlevel_);
+}
+
+std::optional<uint32_t> TpmKeymasterContext::GetVendorPatchlevel() const {
+  return vendor_patchlevel_;
+}
+
+std::optional<uint32_t> TpmKeymasterContext::GetBootPatchlevel() const {
+  return boot_patchlevel_;
+}
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_keymaster_context.h b/host/commands/secure_env/tpm_keymaster_context.h
index 54ba973..2e23f3b 100644
--- a/host/commands/secure_env/tpm_keymaster_context.h
+++ b/host/commands/secure_env/tpm_keymaster_context.h
@@ -23,10 +23,13 @@
 
 #include "tpm_attestation_record.h"
 
+namespace cuttlefish {
+
 class TpmAttestationRecordContext;
 class TpmResourceManager;
 class TpmKeyBlobMaker;
 class TpmRandomSource;
+class TpmRemoteProvisioningContext;
 
 /**
  * Implementation of KeymasterContext that wraps its keys with a TPM.
@@ -41,11 +44,15 @@
   std::unique_ptr<TpmKeyBlobMaker> key_blob_maker_;
   std::unique_ptr<TpmRandomSource> random_source_;
   std::unique_ptr<TpmAttestationRecordContext> attestation_context_;
+  std::unique_ptr<TpmRemoteProvisioningContext> remote_provisioning_context_;
   std::map<keymaster_algorithm_t, std::unique_ptr<keymaster::KeyFactory>> key_factories_;
   std::vector<keymaster_algorithm_t> supported_algorithms_;
   uint32_t os_version_;
   uint32_t os_patchlevel_;
-public:
+  std::optional<uint32_t> vendor_patchlevel_;
+  std::optional<uint32_t> boot_patchlevel_;
+
+ public:
   TpmKeymasterContext(TpmResourceManager&, keymaster::KeymasterEnforcement&);
   ~TpmKeymasterContext() = default;
 
@@ -102,4 +109,14 @@
       keymaster::AuthorizationSet* wrapped_key_params,
       keymaster_key_format_t* wrapped_key_format,
       keymaster::KeymasterKeyBlob* wrapped_key_material) const override;
+
+  keymaster::RemoteProvisioningContext* GetRemoteProvisioningContext()
+      const override;
+
+  keymaster_error_t SetVendorPatchlevel(uint32_t vendor_patchlevel) override;
+  keymaster_error_t SetBootPatchlevel(uint32_t boot_patchlevel) override;
+  std::optional<uint32_t> GetVendorPatchlevel() const override;
+  std::optional<uint32_t> GetBootPatchlevel() const override;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_keymaster_enforcement.cpp b/host/commands/secure_env/tpm_keymaster_enforcement.cpp
index f5b8903..60a9a5a 100644
--- a/host/commands/secure_env/tpm_keymaster_enforcement.cpp
+++ b/host/commands/secure_env/tpm_keymaster_enforcement.cpp
@@ -15,16 +15,16 @@
 
 #include "host/commands/secure_env/tpm_keymaster_enforcement.h"
 
+#include <android-base/endian.h>
 #include <android-base/logging.h>
-#if defined(__BIONIC__)
-#include <sys/endian.h> // for be64toh
-#endif
 
 #include "host/commands/secure_env/primary_key_builder.h"
 #include "host/commands/secure_env/tpm_hmac.h"
 #include "host/commands/secure_env/tpm_key_blob_maker.h"
 #include "host/commands/secure_env/tpm_random_source.h"
 
+namespace cuttlefish {
+
 using keymaster::km_id_t;
 using keymaster::HmacSharingParameters;
 using keymaster::HmacSharingParametersArray;
@@ -99,7 +99,7 @@
 
 bool TpmKeymasterEnforcement::expiration_date_passed(
     uint64_t expiration_date) const {
-  return expiration_date > get_wall_clock_time_ms();
+  return expiration_date < get_wall_clock_time_ms();
 }
 
 bool TpmKeymasterEnforcement::auth_token_timed_out(
@@ -294,18 +294,38 @@
   return response;
 }
 
+keymaster_error_t TpmKeymasterEnforcement::GenerateTimestampToken(
+    keymaster::TimestampToken* token) {
+  token->timestamp = get_current_time_ms();
+  token->security_level = SecurityLevel();
+  token->mac = KeymasterBlob();
+
+  auto signing_key_builder = PrimaryKeyBuilder();
+  signing_key_builder.SigningKey();
+  signing_key_builder.UniqueData("timestamp_token");
+  auto signing_key = signing_key_builder.CreateKey(resource_manager_);
+  if (!signing_key) {
+    LOG(ERROR) << "Could not make signing key for verifying authorization";
+    return KM_ERROR_UNKNOWN_ERROR;
+  }
+  std::vector<uint8_t> token_buf_to_sign(token->SerializedSize(), 0);
+  auto hmac =
+      TpmHmac(resource_manager_, signing_key->get(), TpmAuth(ESYS_TR_PASSWORD),
+              token_buf_to_sign.data(), token_buf_to_sign.size());
+  if (!hmac) {
+    LOG(ERROR) << "Could not calculate timestamp token hmac";
+    return KM_ERROR_UNKNOWN_ERROR;
+  } else if (hmac->size == 0) {
+    LOG(ERROR) << "hmac was too short";
+    return KM_ERROR_UNKNOWN_ERROR;
+  }
+  token->mac = KeymasterBlob(hmac->buffer, hmac->size);
+
+  return KM_ERROR_OK;
+}
+
 bool TpmKeymasterEnforcement::CreateKeyId(
     const keymaster_key_blob_t& key_blob, km_id_t* keyid) const {
-  keymaster::AuthorizationSet hw_enforced;
-  keymaster::AuthorizationSet sw_enforced;
-  keymaster::KeymasterKeyBlob key_material;
-  auto rc =
-      TpmKeyBlobMaker(resource_manager_)
-          .UnwrapKeyBlob(key_blob, &hw_enforced, &sw_enforced, &key_material);
-  if (rc != KM_ERROR_OK) {
-    LOG(ERROR) << "Could not unwrap key: " << rc;
-    return false;
-  }
   auto signing_key_builder = PrimaryKeyBuilder();
   signing_key_builder.SigningKey();
   signing_key_builder.UniqueData("key_id");
@@ -314,12 +334,9 @@
     LOG(ERROR) << "Could not make signing key for key id";
     return false;
   }
-  auto hmac = TpmHmac(
-      resource_manager_,
-      signing_key->get(),
-      TpmAuth(ESYS_TR_PASSWORD),
-      key_material.key_material,
-      key_material.key_material_size);
+  auto hmac =
+      TpmHmac(resource_manager_, signing_key->get(), TpmAuth(ESYS_TR_PASSWORD),
+              key_blob.key_material, key_blob.key_material_size);
   if (!hmac) {
     LOG(ERROR) << "Failed to make a signature for a key id";
     return false;
@@ -332,3 +349,5 @@
   memcpy(keyid, hmac->buffer, sizeof(km_id_t));
   return true;
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_keymaster_enforcement.h b/host/commands/secure_env/tpm_keymaster_enforcement.h
index 1d6a1e5..8db5930 100644
--- a/host/commands/secure_env/tpm_keymaster_enforcement.h
+++ b/host/commands/secure_env/tpm_keymaster_enforcement.h
@@ -20,6 +20,8 @@
 #include "host/commands/secure_env/tpm_gatekeeper.h"
 #include "host/commands/secure_env/tpm_resource_manager.h"
 
+namespace cuttlefish {
+
 /**
  * Implementation of keymaster::KeymasterEnforcement that depends on having a
  * TPM available. See the definitions in
@@ -49,6 +51,9 @@
   keymaster::VerifyAuthorizationResponse VerifyAuthorization(
       const keymaster::VerifyAuthorizationRequest& request) override;
 
+  keymaster_error_t GenerateTimestampToken(
+      keymaster::TimestampToken* token) override;
+
   bool CreateKeyId(
       const keymaster_key_blob_t& key_blob,
       keymaster::km_id_t* keyid) const override;
@@ -59,3 +64,5 @@
   bool have_saved_params_ = false;
   keymaster::HmacSharingParameters saved_params_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_random_source.cpp b/host/commands/secure_env/tpm_random_source.cpp
index 8695e4a..569edbc 100644
--- a/host/commands/secure_env/tpm_random_source.cpp
+++ b/host/commands/secure_env/tpm_random_source.cpp
@@ -19,6 +19,8 @@
 #include "tss2/tss2_esys.h"
 #include "tss2/tss2_rc.h"
 
+namespace cuttlefish {
+
 TpmRandomSource::TpmRandomSource(ESYS_CONTEXT* esys) : esys_(esys) {
 }
 
@@ -62,6 +64,11 @@
 
 keymaster_error_t TpmRandomSource::AddRngEntropy(
     const uint8_t* buffer, size_t size) const {
+  if (size > 2048) {
+    // IKeyMintDevice.aidl specifies that there's an upper limit of 2KiB.
+    return KM_ERROR_INVALID_INPUT_LENGTH;
+  }
+
   TPM2B_SENSITIVE_DATA in_data;
   while (size > MAX_STIR_RANDOM_BUFFER_SIZE) {
     memcpy(in_data.buffer, buffer, MAX_STIR_RANDOM_BUFFER_SIZE);
@@ -97,3 +104,5 @@
   }
   return KM_ERROR_OK;
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_random_source.h b/host/commands/secure_env/tpm_random_source.h
index 2e7d8a1..c9a91c7 100644
--- a/host/commands/secure_env/tpm_random_source.h
+++ b/host/commands/secure_env/tpm_random_source.h
@@ -19,6 +19,8 @@
 
 struct ESYS_CONTEXT;
 
+namespace cuttlefish {
+
 /**
  * Secure random number generator, pulling data from a TPM.
  *
@@ -36,3 +38,5 @@
 private:
   ESYS_CONTEXT* esys_;
 };
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_remote_provisioning_context.cpp b/host/commands/secure_env/tpm_remote_provisioning_context.cpp
new file mode 100644
index 0000000..e88fc29
--- /dev/null
+++ b/host/commands/secure_env/tpm_remote_provisioning_context.cpp
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <algorithm>
+#include <cassert>
+#include <optional>
+
+#include <android-base/logging.h>
+#include <keymaster/cppcose/cppcose.h>
+#include <openssl/bn.h>
+#include <openssl/ec.h>
+#include <openssl/err.h>
+#include <openssl/hkdf.h>
+#include <openssl/rand.h>
+
+#include "host/commands/secure_env/primary_key_builder.h"
+#include "host/commands/secure_env/tpm_hmac.h"
+#include "tpm_remote_provisioning_context.h"
+#include "tpm_resource_manager.h"
+
+using namespace cppcose;
+
+namespace cuttlefish {
+
+TpmRemoteProvisioningContext::TpmRemoteProvisioningContext(
+    TpmResourceManager& resource_manager)
+    : resource_manager_(resource_manager) {
+  std::tie(devicePrivKey_, bcc_) = GenerateBcc(/*testMode=*/false);
+}
+
+std::vector<uint8_t> TpmRemoteProvisioningContext::DeriveBytesFromHbk(
+    const std::string& context, size_t num_bytes) const {
+  PrimaryKeyBuilder key_builder;
+  key_builder.SigningKey();
+  key_builder.UniqueData("HardwareBoundKey");
+  TpmObjectSlot key = key_builder.CreateKey(resource_manager_);
+
+  auto hbk =
+      TpmHmac(resource_manager_, key->get(), TpmAuth(ESYS_TR_PASSWORD),
+              reinterpret_cast<const uint8_t*>(context.data()), context.size());
+
+  std::vector<uint8_t> result(num_bytes);
+  if (!HKDF(result.data(), num_bytes,              //
+            EVP_sha256(),                          //
+            hbk->buffer, hbk->size,                //
+            nullptr /* salt */, 0 /* salt len */,  //
+            reinterpret_cast<const uint8_t*>(context.data()), context.size())) {
+    // Should never fail. Even if it could the API has no way of reporting the
+    // error.
+    LOG(ERROR) << "Error calculating HMAC: " << ERR_peek_last_error();
+  }
+
+  return result;
+}
+
+std::unique_ptr<cppbor::Map> TpmRemoteProvisioningContext::CreateDeviceInfo()
+    const {
+  auto result = std::make_unique<cppbor::Map>();
+  result->add(cppbor::Tstr("brand"), cppbor::Tstr("Google"));
+  result->add(cppbor::Tstr("manufacturer"), cppbor::Tstr("Google"));
+  result->add(cppbor::Tstr("product"),
+              cppbor::Tstr("Cuttlefish Virtual Device"));
+  result->canonicalize();
+  return result;
+}
+
+std::pair<std::vector<uint8_t> /* privKey */, cppbor::Array /* BCC */>
+TpmRemoteProvisioningContext::GenerateBcc(bool testMode) const {
+  std::vector<uint8_t> privKey(ED25519_PRIVATE_KEY_LEN);
+  std::vector<uint8_t> pubKey(ED25519_PUBLIC_KEY_LEN);
+
+  std::vector<uint8_t> seed;
+  if (testMode) {
+    // Length is hard-coded in the BoringCrypto API without a constant
+    seed.resize(32);
+    RAND_bytes(seed.data(), seed.size());
+  } else {
+    // TODO: Switch to P256 signing keys that are TPM-bound.
+    seed = DeriveBytesFromHbk("BccKey", 32);
+  }
+  ED25519_keypair_from_seed(pubKey.data(), privKey.data(), seed.data());
+
+  auto coseKey = cppbor::Map()
+                     .add(CoseKey::KEY_TYPE, OCTET_KEY_PAIR)
+                     .add(CoseKey::ALGORITHM, EDDSA)
+                     .add(CoseKey::CURVE, ED25519)
+                     .add(CoseKey::KEY_OPS, VERIFY)
+                     .add(CoseKey::PUBKEY_X, pubKey)
+                     .canonicalize();
+  auto sign1Payload =
+      cppbor::Map()
+          .add(1 /* Issuer */, "Issuer")
+          .add(2 /* Subject */, "Subject")
+          .add(-4670552 /* Subject Pub Key */, coseKey.encode())
+          .add(-4670553 /* Key Usage (little-endian order) */,
+               std::vector<uint8_t>{0x20} /* keyCertSign = 1<<5 */)
+          .canonicalize()
+          .encode();
+  auto coseSign1 = constructCoseSign1(privKey,       /* signing key */
+                                      cppbor::Map(), /* extra protected */
+                                      sign1Payload, {} /* AAD */);
+  assert(coseSign1);
+
+  return {privKey,
+          cppbor::Array().add(std::move(coseKey)).add(coseSign1.moveValue())};
+}
+
+ErrMsgOr<std::vector<uint8_t>>
+TpmRemoteProvisioningContext::BuildProtectedDataPayload(
+    bool isTestMode,                     //
+    const std::vector<uint8_t>& macKey,  //
+    const std::vector<uint8_t>& aad) const {
+  std::vector<uint8_t> devicePrivKey;
+  cppbor::Array bcc;
+  if (isTestMode) {
+    std::tie(devicePrivKey, bcc) = GenerateBcc(/*testMode=*/true);
+  } else {
+    devicePrivKey = devicePrivKey_;
+    auto clone = bcc_.clone();
+    if (!clone->asArray()) {
+      return "The BCC is not an array";
+    }
+    bcc = std::move(*clone->asArray());
+  }
+  auto sign1 = constructCoseSign1(devicePrivKey, macKey, aad);
+  if (!sign1) {
+    return sign1.moveMessage();
+  }
+  return cppbor::Array().add(sign1.moveValue()).add(std::move(bcc)).encode();
+}
+
+std::optional<cppcose::HmacSha256>
+TpmRemoteProvisioningContext::GenerateHmacSha256(
+    const cppcose::bytevec& input) const {
+  auto signing_key_builder = PrimaryKeyBuilder();
+  signing_key_builder.SigningKey();
+  signing_key_builder.UniqueData("Public Key Authentication Key");
+  auto signing_key = signing_key_builder.CreateKey(resource_manager_);
+  if (!signing_key) {
+    LOG(ERROR) << "Could not make MAC key for authenticating the pubkey";
+    return std::nullopt;
+  }
+
+  auto tpm_digest =
+      TpmHmac(resource_manager_, signing_key->get(), TpmAuth(ESYS_TR_PASSWORD),
+              input.data(), input.size());
+
+  if (!tpm_digest) {
+    LOG(ERROR) << "Could not calculate hmac";
+    return std::nullopt;
+  }
+
+  cppcose::HmacSha256 hmac;
+  if (tpm_digest->size != hmac.size()) {
+    LOG(ERROR) << "TPM-generated digest was too short. Actual size: "
+               << tpm_digest->size << " expected " << hmac.size() << " bytes";
+    return std::nullopt;
+  }
+
+  std::copy(tpm_digest->buffer, tpm_digest->buffer + tpm_digest->size,
+            hmac.begin());
+  return hmac;
+}
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_remote_provisioning_context.h b/host/commands/secure_env/tpm_remote_provisioning_context.h
new file mode 100644
index 0000000..eb09b00
--- /dev/null
+++ b/host/commands/secure_env/tpm_remote_provisioning_context.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <keymaster/remote_provisioning_context.h>
+
+#include "host/commands/secure_env/tpm_resource_manager.h"
+#include "keymaster/cppcose/cppcose.h"
+
+namespace cuttlefish {
+
+/**
+ * TPM-backed implementation of the provisioning context.
+ */
+class TpmRemoteProvisioningContext
+    : public keymaster::RemoteProvisioningContext {
+ public:
+  TpmRemoteProvisioningContext(TpmResourceManager& resource_manager);
+  ~TpmRemoteProvisioningContext() override = default;
+  std::vector<uint8_t> DeriveBytesFromHbk(const std::string& context,
+                                          size_t numBytes) const override;
+  std::unique_ptr<cppbor::Map> CreateDeviceInfo() const override;
+  cppcose::ErrMsgOr<std::vector<uint8_t>> BuildProtectedDataPayload(
+      bool isTestMode,                     //
+      const std::vector<uint8_t>& macKey,  //
+      const std::vector<uint8_t>& aad) const override;
+  std::optional<cppcose::HmacSha256> GenerateHmacSha256(
+      const cppcose::bytevec& input) const override;
+  std::pair<std::vector<uint8_t>, cppbor::Array> GenerateBcc(
+      bool testMode) const;
+
+ private:
+  std::vector<uint8_t> devicePrivKey_;
+  cppbor::Array bcc_;
+  TpmResourceManager& resource_manager_;
+};
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_resource_manager.cpp b/host/commands/secure_env/tpm_resource_manager.cpp
index 3651ec8..defe153 100644
--- a/host/commands/secure_env/tpm_resource_manager.cpp
+++ b/host/commands/secure_env/tpm_resource_manager.cpp
@@ -18,6 +18,8 @@
 #include <android-base/logging.h>
 #include <tss2/tss2_rc.h>
 
+namespace cuttlefish {
+
 TpmResourceManager::ObjectSlot::ObjectSlot(TpmResourceManager* resource_manager)
     : ObjectSlot(resource_manager, ESYS_TR_NONE) {
 }
@@ -75,3 +77,5 @@
   }
   return TpmObjectSlot{new ObjectSlot(this)};
 }
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_resource_manager.h b/host/commands/secure_env/tpm_resource_manager.h
index e1ed83f..d4ce2f2 100644
--- a/host/commands/secure_env/tpm_resource_manager.h
+++ b/host/commands/secure_env/tpm_resource_manager.h
@@ -21,6 +21,8 @@
 
 #include <tss2/tss2_esys.h>
 
+namespace cuttlefish {
+
 /**
  * Object slot manager for TPM memory. The TPM can only hold a fixed number of
  * objects at once. Some TPM operations are defined to consume slots either
@@ -60,3 +62,5 @@
 };
 
 using TpmObjectSlot = std::shared_ptr<TpmResourceManager::ObjectSlot>;
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_serialize.cpp b/host/commands/secure_env/tpm_serialize.cpp
index 1cf07ff..5e3fc8c 100644
--- a/host/commands/secure_env/tpm_serialize.cpp
+++ b/host/commands/secure_env/tpm_serialize.cpp
@@ -21,6 +21,8 @@
 #include "tss2/tss2_mu.h"
 #include "tss2/tss2_rc.h"
 
+namespace cuttlefish {
+
 template<typename T>
 int MarshalFn = 0; // Break code without an explicit specialization.
 
@@ -82,3 +84,5 @@
 
 template class TpmSerializable<TPM2B_PRIVATE>;
 template class TpmSerializable<TPM2B_PUBLIC>;
+
+}  // namespace cuttlefish
diff --git a/host/commands/secure_env/tpm_serialize.h b/host/commands/secure_env/tpm_serialize.h
index 17884a5..4043ea3 100644
--- a/host/commands/secure_env/tpm_serialize.h
+++ b/host/commands/secure_env/tpm_serialize.h
@@ -24,6 +24,8 @@
 
 #include <android-base/logging.h>
 
+namespace cuttlefish {
+
 /**
  * An implementation of a keymaster::Serializable type that refers to a TPM type
  * by an unmanaged pointer. When the TpmSerializable serializes or deserializes
@@ -50,3 +52,5 @@
 
 using SerializeTpmKeyPrivate = TpmSerializable<TPM2B_PRIVATE>;
 using SerializeTpmKeyPublic = TpmSerializable<TPM2B_PUBLIC>;
+
+}  // namespace cuttlefish
diff --git a/host/commands/launch/Android.bp b/host/commands/start/Android.bp
similarity index 87%
rename from host/commands/launch/Android.bp
rename to host/commands/start/Android.bp
index 6adf7a2..82d1327 100644
--- a/host/commands/launch/Android.bp
+++ b/host/commands/start/Android.bp
@@ -18,17 +18,20 @@
 }
 
 cc_binary {
-    name: "launch_cvd",
+    name: "cvd_internal_start",
+    symlinks: ["launch_cvd"],
     srcs: [
         "filesystem_explorer.cc",
         "flag_forwarder.cc",
-        "launch_cvd.cc",
+        "main.cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libbase",
         "libjsoncpp",
+        "libfruit",
         "libnl",
         "libxml2",
         "libz",
@@ -39,7 +42,9 @@
         "libgflags",
     ],
     required: [
+        "assemble_cvd",
         "mkenvimage",
+        "run_cvd",
     ],
     defaults: ["cuttlefish_host", "cuttlefish_libicuuc"],
 }
diff --git a/host/commands/launch/filesystem_explorer.cc b/host/commands/start/filesystem_explorer.cc
similarity index 100%
rename from host/commands/launch/filesystem_explorer.cc
rename to host/commands/start/filesystem_explorer.cc
diff --git a/host/commands/launch/filesystem_explorer.h b/host/commands/start/filesystem_explorer.h
similarity index 100%
rename from host/commands/launch/filesystem_explorer.h
rename to host/commands/start/filesystem_explorer.h
diff --git a/host/commands/launch/flag_forwarder.cc b/host/commands/start/flag_forwarder.cc
similarity index 99%
rename from host/commands/launch/flag_forwarder.cc
rename to host/commands/start/flag_forwarder.cc
index 692e453..aa492c5 100644
--- a/host/commands/launch/flag_forwarder.cc
+++ b/host/commands/start/flag_forwarder.cc
@@ -290,8 +290,7 @@
     // Ensure this is set on by putting it at the end.
     cmd.AddParameter("--helpxml");
     std::string helpxml_input, helpxml_output, helpxml_error;
-    cuttlefish::SubprocessOptions options;
-    options.Verbose(false);
+    auto options = cuttlefish::SubprocessOptions().Verbose(false);
     int helpxml_ret = cuttlefish::RunWithManagedStdio(std::move(cmd), &helpxml_input,
                                                &helpxml_output, &helpxml_error,
                                                options);
diff --git a/host/commands/launch/flag_forwarder.h b/host/commands/start/flag_forwarder.h
similarity index 100%
rename from host/commands/launch/flag_forwarder.h
rename to host/commands/start/flag_forwarder.h
diff --git a/host/commands/launch/launch_cvd.cc b/host/commands/start/main.cc
similarity index 98%
rename from host/commands/launch/launch_cvd.cc
rename to host/commands/start/main.cc
index f67ce48..c11ac67 100644
--- a/host/commands/launch/launch_cvd.cc
+++ b/host/commands/start/main.cc
@@ -23,13 +23,12 @@
 #include "common/libs/fs/shared_buf.h"
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/utils/subprocess.h"
-#include "host/commands/launch/filesystem_explorer.h"
+#include "host/commands/start/filesystem_explorer.h"
+#include "host/commands/start/flag_forwarder.h"
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/config/host_tools_version.h"
 #include "host/libs/config/fetcher_config.h"
 
-#include "flag_forwarder.h"
-
 /**
  * If stdin is a tty, that means a user is invoking launch_cvd on the command
  * line and wants automatic file detection for assemble_cvd.
diff --git a/host/commands/stop_cvd/Android.bp b/host/commands/status/Android.bp
similarity index 90%
copy from host/commands/stop_cvd/Android.bp
copy to host/commands/status/Android.bp
index a670a25..4ce0e8c 100644
--- a/host/commands/stop_cvd/Android.bp
+++ b/host/commands/status/Android.bp
@@ -18,15 +18,17 @@
 }
 
 cc_binary {
-    name: "stop_cvd",
+    name: "cvd_internal_status",
+    symlinks: ["cvd_status"],
     srcs: [
         "main.cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
-        "libcuttlefish_allocd_utils",
+        "libfruit",
         "libjsoncpp",
     ],
     static_libs: [
diff --git a/host/commands/status/main.cc b/host/commands/status/main.cc
new file mode 100644
index 0000000..0817e30
--- /dev/null
+++ b/host/commands/status/main.cc
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <inttypes.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <signal.h>
+
+#include <algorithm>
+#include <cstdlib>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include <android-base/logging.h>
+
+#include "common/libs/fs/shared_fd.h"
+#include "common/libs/fs/shared_select.h"
+#include "common/libs/utils/environment.h"
+#include "common/libs/utils/flag_parser.h"
+#include "common/libs/utils/tee_logging.h"
+#include "host/commands/run_cvd/runner_defs.h"
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/vm_manager/vm_manager.h"
+
+#define CHECK_PRINT(print, condition, message)                               \
+  if (print) {                                                               \
+    if (!(condition)) {                                                      \
+      std::cout << "      Status: Stopped (" << message << ")" << std::endl; \
+      exit(0);                                                               \
+    }                                                                        \
+  } else                                                                     \
+    CHECK(condition) << message
+
+namespace cuttlefish {
+
+int CvdStatusMain(int argc, char** argv) {
+  ::android::base::InitLogging(argv, android::base::StderrLogger);
+  ::android::base::SetLogger(LogToStderrAndFiles({}));
+
+  std::vector<Flag> flags;
+
+  std::int32_t wait_for_launcher;
+  flags.emplace_back(
+      GflagsCompatFlag("wait_for_launcher", wait_for_launcher)
+          .Help("How many seconds to wait for the launcher to respond to the "
+                "status command. A value of zero means wait indefinitely"));
+  std::string instance_name;
+  flags.emplace_back(GflagsCompatFlag("instance_name", instance_name)
+                         .Help("Name of the instance to check. If not "
+                               "provided, DefaultInstance is used."));
+  bool print;
+  flags.emplace_back(GflagsCompatFlag("print", print)
+                         .Help("If provided, prints status and instance config "
+                               "information to stdout instead of CHECK"));
+
+  flags.emplace_back(HelpFlag(flags));
+  flags.emplace_back(UnexpectedArgumentGuard());
+
+  std::vector<std::string> args =
+      ArgsToVec(argc - 1, argv + 1);  // Skip argv[0]
+  CHECK(ParseFlags(flags, args)) << "Could not process command line flags.";
+
+  auto config = CuttlefishConfig::Get();
+  CHECK(config) << "Failed to obtain config object";
+
+  auto instance = instance_name.empty()
+                      ? config->ForDefaultInstance()
+                      : config->ForInstanceName(instance_name);
+
+  if (print) {
+    std::cout << "    " << instance.instance_name() << std::endl;
+    std::cout << "      Dir: " << instance.instance_dir() << std::endl;
+    std::cout << "      Web access: https://" << config->sig_server_address()
+              << ":" << std::to_string(config->sig_server_port())
+              << "/client.html?deviceId=" << instance.instance_name()
+              << std::endl;
+  }
+
+  auto monitor_path = instance.launcher_monitor_socket_path();
+  CHECK_PRINT(print, !monitor_path.empty(),
+              "No path to launcher monitor found");
+
+  auto monitor_socket = SharedFD::SocketLocalClient(
+      monitor_path.c_str(), false, SOCK_STREAM, wait_for_launcher);
+  CHECK_PRINT(print, monitor_socket->IsOpen(),
+              "Unable to connect to launcher monitor at " + monitor_path +
+                  ": " + monitor_socket->StrError());
+
+  auto request = LauncherAction::kStatus;
+  auto bytes_sent = monitor_socket->Send(&request, sizeof(request), 0);
+  CHECK_PRINT(print, bytes_sent > 0,
+              "Error sending launcher monitor the status command: " +
+                  monitor_socket->StrError());
+
+  // Perform a select with a timeout to guard against launcher hanging
+  SharedFDSet read_set;
+  read_set.Set(monitor_socket);
+  struct timeval timeout = {wait_for_launcher, 0};
+  int selected = Select(&read_set, nullptr, nullptr,
+                        wait_for_launcher <= 0 ? nullptr : &timeout);
+  CHECK_PRINT(print, selected >= 0,
+              std::string("Failed communication with the launcher monitor: ") +
+                  strerror(errno));
+  CHECK_PRINT(print, selected > 0,
+              "Timeout expired waiting for launcher monitor to respond");
+
+  LauncherResponse response;
+  auto bytes_recv = monitor_socket->Recv(&response, sizeof(response), 0);
+  CHECK_PRINT(print, bytes_recv > 0,
+              std::string("Error receiving response from launcher monitor: ") +
+                  monitor_socket->StrError());
+  CHECK_PRINT(print, response == LauncherResponse::kSuccess,
+              std::string("Received '") + static_cast<char>(response) +
+                  "' response from launcher monitor");
+
+  if (print) {
+    std::cout << "      Status: Running" << std::endl;
+  } else {
+    LOG(INFO) << "run_cvd is active.";
+  }
+  return 0;
+}
+
+}  // namespace cuttlefish
+
+int main(int argc, char** argv) {
+  return cuttlefish::CvdStatusMain(argc, argv);
+}
diff --git a/host/commands/stop_cvd/Android.bp b/host/commands/stop/Android.bp
similarity index 91%
rename from host/commands/stop_cvd/Android.bp
rename to host/commands/stop/Android.bp
index a670a25..7d705fd 100644
--- a/host/commands/stop_cvd/Android.bp
+++ b/host/commands/stop/Android.bp
@@ -18,15 +18,18 @@
 }
 
 cc_binary {
-    name: "stop_cvd",
+    name: "cvd_internal_stop",
+    symlinks: ["stop_cvd"],
     srcs: [
         "main.cc",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libcuttlefish_allocd_utils",
+        "libfruit",
         "libjsoncpp",
     ],
     static_libs: [
diff --git a/host/commands/stop_cvd/main.cc b/host/commands/stop/main.cc
similarity index 75%
rename from host/commands/stop_cvd/main.cc
rename to host/commands/stop/main.cc
index 9e4fdd4..feeca9e 100644
--- a/host/commands/stop_cvd/main.cc
+++ b/host/commands/stop/main.cc
@@ -37,30 +37,26 @@
 #include <vector>
 
 #include <android-base/strings.h>
-#include <gflags/gflags.h>
 #include <android-base/logging.h>
 
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/fs/shared_select.h"
 #include "common/libs/utils/environment.h"
+#include "common/libs/utils/files.h"
+#include "common/libs/utils/flag_parser.h"
 #include "host/commands/run_cvd/runner_defs.h"
 #include "host/libs/allocd/request.h"
 #include "host/libs/allocd/utils.h"
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/vm_manager/vm_manager.h"
 
-DEFINE_int32(wait_for_launcher, 5,
-             "How many seconds to wait for the launcher to respond to the stop "
-             "command. A value of zero means wait indefinetly");
-
 namespace cuttlefish {
 namespace {
 
-std::set<std::string> FallbackPaths() {
+std::set<std::string> FallbackDirs() {
   std::set<std::string> paths;
   std::string parent_path = StringFromEnv("HOME", ".");
   paths.insert(parent_path + "/cuttlefish_assembly");
-  paths.insert(parent_path + "/cuttlefish_assembly/*");
 
   std::unique_ptr<DIR, int(*)(DIR*)> dir(opendir(parent_path.c_str()), closedir);
   for (auto entity = readdir(dir.get()); entity != nullptr; entity = readdir(dir.get())) {
@@ -68,43 +64,26 @@
     if (!android::base::StartsWith(subdir, "cuttlefish_runtime.")) {
       continue;
     }
-    auto instance_dir = parent_path + "/" + subdir;
-    // Add the instance directory
-    paths.insert(instance_dir);
-    // Add files in instance dir
-    paths.insert(instance_dir + "/*");
-    // Add files in the tombstone directory
-    paths.insert(instance_dir + "/tombstones/*");
-    // Add files in the internal directory
-    paths.insert(instance_dir + "/" + std::string(kInternalDirName) + "/*");
-    // Add files in the shared directory
-    paths.insert(instance_dir + "/" + std::string(kSharedDirName) + "/*");
+    paths.insert(parent_path + "/" + subdir);
   }
   return paths;
 }
 
-std::set<std::string> PathsForInstance(const CuttlefishConfig& config,
-                                       const CuttlefishConfig::InstanceSpecific instance) {
+std::set<std::string> DirsForInstance(
+    const CuttlefishConfig& config,
+    const CuttlefishConfig::InstanceSpecific instance) {
   return {
-    config.assembly_dir(),
-    config.assembly_dir() + "/*",
-    instance.instance_dir(),
-    instance.PerInstancePath("*"),
-    instance.PerInstancePath("tombstones"),
-    instance.PerInstancePath("tombstones/*"),
-    instance.instance_internal_dir(),
-    instance.PerInstanceInternalPath("*"),
-    instance.PerInstancePath(kSharedDirName),
-    instance.PerInstancePath(kSharedDirName) + "/*",
+      config.assembly_dir(),
+      instance.instance_dir(),
   };
 }
 
 // Gets a set of the possible process groups of a previous launch
-std::set<pid_t> GetCandidateProcessGroups(const std::set<std::string>& paths) {
+std::set<pid_t> GetCandidateProcessGroups(const std::set<std::string>& dirs) {
   std::stringstream cmd;
   cmd << "lsof -t 2>/dev/null";
-  for (const auto& path : paths) {
-    cmd << " " << path;
+  for (const auto& dir : dirs) {
+    cmd << " +D " << dir;
   }
   std::string cmd_str = cmd.str();
   std::shared_ptr<FILE> cmd_out(popen(cmd_str.c_str(), "r"), pclose);
@@ -128,10 +107,10 @@
   return ret;
 }
 
-int FallBackStop(const std::set<std::string>& paths) {
+int FallBackStop(const std::set<std::string>& dirs) {
   auto exit_code = 1; // Having to fallback is an error
 
-  auto process_groups = GetCandidateProcessGroups(paths);
+  auto process_groups = GetCandidateProcessGroups(dirs);
   for (auto pgid: process_groups) {
     LOG(INFO) << "Sending SIGKILL to process group " << pgid;
     auto retval = killpg(pgid, SIGKILL);
@@ -145,14 +124,15 @@
   return exit_code;
 }
 
-bool CleanStopInstance(const CuttlefishConfig::InstanceSpecific& instance) {
+bool CleanStopInstance(const CuttlefishConfig::InstanceSpecific& instance,
+                       std::int32_t wait_for_launcher) {
   auto monitor_path = instance.launcher_monitor_socket_path();
   if (monitor_path.empty()) {
     LOG(ERROR) << "No path to launcher monitor found";
     return false;
   }
   auto monitor_socket = SharedFD::SocketLocalClient(
-      monitor_path.c_str(), false, SOCK_STREAM, FLAGS_wait_for_launcher);
+      monitor_path.c_str(), false, SOCK_STREAM, wait_for_launcher);
   if (!monitor_socket->IsOpen()) {
     LOG(ERROR) << "Unable to connect to launcher monitor at " << monitor_path
                << ": " << monitor_socket->StrError();
@@ -168,9 +148,9 @@
   // Perform a select with a timeout to guard against launcher hanging
   SharedFDSet read_set;
   read_set.Set(monitor_socket);
-  struct timeval timeout = {FLAGS_wait_for_launcher, 0};
+  struct timeval timeout = {wait_for_launcher, 0};
   int selected = Select(&read_set, nullptr, nullptr,
-                        FLAGS_wait_for_launcher <= 0 ? nullptr : &timeout);
+                        wait_for_launcher <= 0 ? nullptr : &timeout);
   if (selected < 0){
     LOG(ERROR) << "Failed communication with the launcher monitor: "
                << strerror(errno);
@@ -197,10 +177,11 @@
 }
 
 int StopInstance(const CuttlefishConfig& config,
-                 const CuttlefishConfig::InstanceSpecific& instance) {
-  bool res = CleanStopInstance(instance);
+                 const CuttlefishConfig::InstanceSpecific& instance,
+                 std::int32_t wait_for_launcher) {
+  bool res = CleanStopInstance(instance, wait_for_launcher);
   if (!res) {
-    return FallBackStop(PathsForInstance(config, instance));
+    return FallBackStop(DirsForInstance(config, instance));
   }
   return 0;
 }
@@ -230,18 +211,35 @@
 
 int StopCvdMain(int argc, char** argv) {
   ::android::base::InitLogging(argv, android::base::StderrLogger);
-  google::ParseCommandLineFlags(&argc, &argv, true);
+
+  std::vector<Flag> flags;
+
+  std::int32_t wait_for_launcher;
+  flags.emplace_back(
+      GflagsCompatFlag("wait_for_launcher", wait_for_launcher)
+          .Help("How many seconds to wait for the launcher to respond to the "
+                "status command. A value of zero means wait indefinitely"));
+  bool clear_instance_dirs;
+  flags.emplace_back(
+      GflagsCompatFlag("clear_instance_dirs", clear_instance_dirs)
+          .Help("If provided, deletes the instance dir after attempting to "
+                "stop each instance."));
+  flags.emplace_back(HelpFlag(flags));
+  flags.emplace_back(UnexpectedArgumentGuard());
+  std::vector<std::string> args =
+      ArgsToVec(argc - 1, argv + 1);  // Skip argv[0]
+  CHECK(ParseFlags(flags, args)) << "Could not process command line flags.";
 
   auto config = CuttlefishConfig::Get();
   if (!config) {
     LOG(ERROR) << "Failed to obtain config object";
-    return FallBackStop(FallbackPaths());
+    return FallBackStop(FallbackDirs());
   }
 
   int ret = 0;
   for (const auto& instance : config->Instances()) {
     auto session_id = instance.session_id();
-    int exit_status = StopInstance(*config, instance);
+    int exit_status = StopInstance(*config, instance, wait_for_launcher);
     if (exit_status == 0 && instance.use_allocd()) {
       // only release session resources if the instance was stopped
       SharedFD allocd_sock =
@@ -254,6 +252,14 @@
 
       ReleaseAllocdResources(allocd_sock, session_id);
     }
+    if (clear_instance_dirs) {
+      if (DirectoryExists(instance.instance_dir())) {
+        LOG(INFO) << "Deleting instance dir " << instance.instance_dir();
+        if (!RecursivelyRemoveDirectory(instance.instance_dir())) {
+          LOG(ERROR) << "Unable to rmdir " << instance.instance_dir();
+        }
+      }
+    }
     ret |= exit_status;
   }
 
diff --git a/host/commands/tapsetiff/tapsetiff.py b/host/commands/tapsetiff/tapsetiff.py
deleted file mode 100755
index 8a0999e..0000000
--- a/host/commands/tapsetiff/tapsetiff.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/python3
-
-# Copyright (C) 2020 The Android Open Source Project
-#
-# 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.
-
-import fcntl
-import struct
-import sys
-
-TUNSETIFF = 0x400454ca
-IFF_TAP = 0x0002
-IFF_NO_PI = 0x1000
-IFF_VNET_HDR = 0x4000
-
-tun_fd = int(sys.argv[1])
-tap_name = sys.argv[2]
-
-ifr = struct.pack('16sH', tap_name.encode('utf-8'), IFF_TAP | IFF_NO_PI | IFF_VNET_HDR)
-fcntl.ioctl(tun_fd, TUNSETIFF, ifr)
diff --git a/host/commands/tombstone_receiver/Android.bp b/host/commands/tombstone_receiver/Android.bp
index 51830fc..b50cde4 100644
--- a/host/commands/tombstone_receiver/Android.bp
+++ b/host/commands/tombstone_receiver/Android.bp
@@ -23,6 +23,7 @@
         "main.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libjsoncpp",
diff --git a/host/commands/tombstone_receiver/main.cpp b/host/commands/tombstone_receiver/main.cpp
index 2e0ea69..5fa495d 100644
--- a/host/commands/tombstone_receiver/main.cpp
+++ b/host/commands/tombstone_receiver/main.cpp
@@ -22,23 +22,21 @@
 #include <iomanip>
 #include <sstream>
 
-#include "host/libs/config/logging.h"
 #include "common/libs/fs/shared_fd.h"
+#include "common/libs/utils/flag_parser.h"
+#include "common/libs/utils/shared_fd_flag.h"
+#include "host/libs/config/logging.h"
 
-DEFINE_int32(
-    server_fd, -1,
-    "File descriptor to an already created vsock server. If negative a new "
-    "server will be created at the port specified on the config file");
-DEFINE_string(tombstone_dir, "", "directory to write out tombstones in");
+namespace cuttlefish {
 
 static uint num_tombstones_in_last_second = 0;
 static std::string last_tombstone_name = "";
 
-static std::string next_tombstone_path() {
+static std::string next_tombstone_path(const std::string& tombstone_dir) {
   auto in_time_t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
   std::stringstream ss;
-  ss << FLAGS_tombstone_dir << "/tombstone_" <<
-    std::put_time(std::gmtime(&in_time_t), "%Y-%m-%d-%H%M%S");
+  ss << tombstone_dir << "/tombstone_"
+     << std::put_time(std::gmtime(&in_time_t), "%Y-%m-%d-%H%M%S");
   auto retval = ss.str();
 
   // Gives tombstones unique names
@@ -54,23 +52,38 @@
   return retval;
 }
 
-#define CHUNK_RECV_MAX_LEN (1024)
-int main(int argc, char** argv) {
-  cuttlefish::DefaultSubprocessLogging(argv);
-  google::ParseCommandLineFlags(&argc, &argv, true);
+static constexpr size_t CHUNK_RECV_MAX_LEN = 1024;
 
-  cuttlefish::SharedFD server_fd = cuttlefish::SharedFD::Dup(FLAGS_server_fd);
-  close(FLAGS_server_fd);
+int TombstoneReceiverMain(int argc, char** argv) {
+  DefaultSubprocessLogging(argv);
 
-  CHECK(server_fd->IsOpen()) << "Error inheriting tombstone server: "
-                             << server_fd->StrError();
+  std::vector<Flag> flags;
+
+  std::string tombstone_dir;
+  flags.emplace_back(GflagsCompatFlag("tombstone_dir", tombstone_dir)
+                         .Help("directory to write out tombstones in"));
+
+  SharedFD server_fd;
+  flags.emplace_back(
+      SharedFDFlag("server_fd", server_fd)
+          .Help("File descriptor to an already created vsock server"));
+
+  flags.emplace_back(HelpFlag(flags));
+  flags.emplace_back(UnexpectedArgumentGuard());
+
+  std::vector<std::string> args =
+      ArgsToVec(argc - 1, argv + 1);  // Skip argv[0]
+  CHECK(ParseFlags(flags, args)) << "Could not process command line flags.";
+
+  CHECK(server_fd->IsOpen()) << "Did not receive a server fd";
+
   LOG(DEBUG) << "Host is starting server on port "
              << server_fd->VsockServerPort();
 
   // Server loop
   while (true) {
-    auto conn = cuttlefish::SharedFD::Accept(*server_fd);
-    std::ofstream file(next_tombstone_path(),
+    auto conn = SharedFD::Accept(*server_fd);
+    std::ofstream file(next_tombstone_path(tombstone_dir),
                        std::ofstream::out | std::ofstream::binary);
 
     while (file.is_open()) {
@@ -87,3 +100,9 @@
 
   return 0;
 }
+
+}  // namespace cuttlefish
+
+int main(int argc, char** argv) {
+  return cuttlefish::TombstoneReceiverMain(argc, argv);
+}
diff --git a/host/commands/mk_cdisk/Android.bp b/host/commands/wmediumd_control/Android.bp
similarity index 82%
rename from host/commands/mk_cdisk/Android.bp
rename to host/commands/wmediumd_control/Android.bp
index a0cf8ba..5d86cb0 100644
--- a/host/commands/mk_cdisk/Android.bp
+++ b/host/commands/wmediumd_control/Android.bp
@@ -18,24 +18,23 @@
 }
 
 cc_binary {
-    name: "mk_cdisk",
+    name: "wmediumd_control",
     srcs: [
-        "mk_cdisk.cc",
+        "main.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libbase",
+        "libfruit",
         "libjsoncpp",
-        "liblog",
         "libz",
     ],
     static_libs: [
-        "libcdisk_spec",
-        "libext2_uuid",
-        "libimage_aggregator",
-        "libprotobuf-cpp-lite",
-        "libsparse",
+        "libcuttlefish_host_config",
+        "libcuttlefish_wmediumd_controller",
+        "libgflags",
     ],
     defaults: ["cuttlefish_host"],
 }
diff --git a/host/commands/wmediumd_control/main.cpp b/host/commands/wmediumd_control/main.cpp
new file mode 100644
index 0000000..205d918
--- /dev/null
+++ b/host/commands/wmediumd_control/main.cpp
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <gflags/gflags.h>
+
+#include <cstdlib>
+#include <functional>
+#include <iostream>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/wmediumd_controller/wmediumd_controller.h"
+
+const std::string usageMessage =
+    "wmediumd control commandline utility\n\n"
+    "  Usage: wmediumd_control [option] command [args...]\n\n"
+    "  Commands:\n\n"
+    "    set_snr mac1 mac2 snr\n"
+    "      set SNR between two nodes. (0 <= snr <= 255)\n\n"
+    "    reload_config [path]\n"
+    "      force reload wmediumd configuration file\n\n"
+    "      if path is not specified, reload current configuration file\n\n"
+    "    start_pcap path\n"
+    "      start packet capture and save capture result to file.\n"
+    "      file format is pcap capture format.\n\n"
+    "    stop_pcap\n"
+    "      stop packet capture\n\n";
+
+DEFINE_string(wmediumd_api_server, "",
+              "Unix socket path of wmediumd api server");
+
+const int kMacAddrStringSize = 17;
+
+bool ValidMacAddr(const std::string& macAddr) {
+  if (macAddr.size() != kMacAddrStringSize) {
+    return false;
+  }
+
+  if (macAddr[2] != ':' || macAddr[5] != ':' || macAddr[8] != ':' ||
+      macAddr[11] != ':' || macAddr[14] != ':') {
+    return false;
+  }
+
+  for (int i = 0; i < kMacAddrStringSize; ++i) {
+    if ((i - 2) % 3 == 0) continue;
+    char c = macAddr[i];
+
+    if (isupper(c)) {
+      c = tolower(c);
+    }
+
+    if ((c < '0' || c > '9') && (c < 'a' || c > 'f')) return false;
+  }
+
+  return true;
+}
+
+bool HandleSetSnrCommand(cuttlefish::WmediumdController& client,
+                         const std::vector<std::string>& args) {
+  if (args.size() != 4) {
+    LOG(ERROR) << "error: set_snr must provide 3 options";
+    return false;
+  }
+
+  if (!ValidMacAddr(args[1])) {
+    LOG(ERROR) << "error: invalid mac address " << args[1];
+    return false;
+  }
+
+  if (!ValidMacAddr(args[2])) {
+    LOG(ERROR) << "error: invalid mac address " << args[2];
+    return false;
+  }
+
+  uint8_t snr = 0;
+
+  auto parseResult =
+      android::base::ParseUint<decltype(snr)>(args[3].c_str(), &snr);
+
+  if (!parseResult) {
+    if (errno == EINVAL) {
+      LOG(ERROR) << "error: cannot parse snr: " << args[3];
+    } else if (errno == ERANGE) {
+      LOG(ERROR) << "error: snr exceeded range: " << args[3];
+    }
+
+    return false;
+  }
+
+  if (!client.SetSnr(args[1], args[2], snr)) {
+    return false;
+  }
+
+  return true;
+}
+
+bool HandleReloadConfigCommand(cuttlefish::WmediumdController& client,
+                               const std::vector<std::string>& args) {
+  if (args.size() > 2) {
+    LOG(ERROR) << "error: reload_config must provide 0 or 1 option";
+    return false;
+  }
+
+  if (args.size() == 2) {
+    return client.ReloadConfig(args[1]);
+  } else {
+    return client.ReloadCurrentConfig();
+  }
+}
+
+bool HandleStartPcapCommand(cuttlefish::WmediumdController& client,
+                            const std::vector<std::string>& args) {
+  if (args.size() != 2) {
+    LOG(ERROR) << "error: you must provide only 1 option(path)";
+    return false;
+  }
+
+  return client.StartPcap(args[1]);
+}
+
+bool HandleStopPcapCommand(cuttlefish::WmediumdController& client,
+                           const std::vector<std::string>& args) {
+  if (args.size() != 1) {
+    LOG(ERROR) << "error: you must not provide option";
+    return false;
+  }
+
+  return client.StopPcap();
+}
+
+int main(int argc, char** argv) {
+  gflags::SetUsageMessage(usageMessage);
+  gflags::ParseCommandLineFlags(&argc, &argv, true);
+
+  std::vector<std::string> args;
+
+  for (int i = 1; i < argc; ++i) {
+    args.push_back(argv[i]);
+  }
+
+  if (args.size() == 0) {
+    LOG(ERROR) << "error: you must provide at least 1 argument";
+    gflags::ShowUsageWithFlags(argv[0]);
+    return -1;
+  }
+
+  std::string wmediumdApiServerPath(FLAGS_wmediumd_api_server);
+
+  if (wmediumdApiServerPath == "") {
+    const auto cuttlefishConfig = cuttlefish::CuttlefishConfig::Get();
+
+    if (!cuttlefishConfig) {
+      LOG(ERROR) << "error: cannot get global cuttlefish config";
+      return -1;
+    }
+
+    wmediumdApiServerPath = cuttlefishConfig->wmediumd_api_server_socket();
+  }
+
+  auto client = cuttlefish::WmediumdController::New(wmediumdApiServerPath);
+
+  if (!client) {
+    LOG(ERROR) << "error: cannot connect to " << wmediumdApiServerPath;
+    return -1;
+  }
+
+  auto commandMap =
+      std::unordered_map<std::string,
+                         std::function<bool(cuttlefish::WmediumdController&,
+                                            const std::vector<std::string>&)>>{{
+          {"set_snr", HandleSetSnrCommand},
+          {"reload_config", HandleReloadConfigCommand},
+          {"start_pcap", HandleStartPcapCommand},
+          {"stop_pcap", HandleStopPcapCommand},
+      }};
+
+  if (commandMap.find(args[0]) == std::end(commandMap)) {
+    LOG(ERROR) << "error: command " << args[0] << " does not exist";
+    gflags::ShowUsageWithFlags(argv[0]);
+    return -1;
+  }
+
+  if (!commandMap[args[0]](*client, args)) {
+    LOG(ERROR) << "error: failed to execute command " << args[0];
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/host/example_custom_actions/Android.bp b/host/example_custom_actions/Android.bp
index 36161f6..a213099 100644
--- a/host/example_custom_actions/Android.bp
+++ b/host/example_custom_actions/Android.bp
@@ -9,6 +9,7 @@
         "cuttlefish_buildhost_only",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "liblog",
         "libutils",
diff --git a/host/example_custom_actions/README.md b/host/example_custom_actions/README.md
index de3764d..44d4fae 100644
--- a/host/example_custom_actions/README.md
+++ b/host/example_custom_actions/README.md
@@ -2,11 +2,8 @@
 following build vars:
 
 ```
-SOONG_CONFIG_NAMESPACES += cvd
-SOONG_CONFIG_cvd += custom_action_config custom_action_servers
-
-SOONG_CONFIG_cvd_custom_action_config := cuttlefish_example_action_config.json
-SOONG_CONFIG_cvd_custom_action_servers += cuttlefish_example_action_server
+$(call soong_config_set, cvd, custom_action_config, cuttlefish_example_action_config.json)
+$(call soong_config_append, cvd, custom_action_servers, cuttlefish_example_action_server)
 ```
 
 See `device/google/cuttlefish/build/README.md` for more information.
diff --git a/host/frontend/adb_connector/Android.bp b/host/frontend/adb_connector/Android.bp
index d0927af..d866fd3 100644
--- a/host/frontend/adb_connector/Android.bp
+++ b/host/frontend/adb_connector/Android.bp
@@ -29,6 +29,7 @@
         "libjsoncpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
diff --git a/host/commands/adbshell/Android.bp b/host/frontend/operator_proxy/Android.bp
similarity index 79%
rename from host/commands/adbshell/Android.bp
rename to host/frontend/operator_proxy/Android.bp
index 883503e..9f6bc6e 100644
--- a/host/commands/adbshell/Android.bp
+++ b/host/frontend/operator_proxy/Android.bp
@@ -1,5 +1,5 @@
 //
-// Copyright (C) 2018 The Android Open Source Project
+// Copyright (C) 2021 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -18,20 +18,26 @@
 }
 
 cc_binary_host {
-    name: "adbshell",
+    name: "operator_proxy",
     srcs: [
         "main.cpp",
     ],
-    cflags: [
-        "-D_XOPEN_SOURCE",
-    ],
     shared_libs: [
         "libbase",
-        "libcuttlefish_utils",
+        "liblog",
+        "libcrypto",
+        "libjsoncpp",
+        "libssl",
+        "libcuttlefish_fs",
     ],
     static_libs: [
+        "libcap",
+        "libgflags",
+        "libcuttlefish_utils",
         "libcuttlefish_host_config",
-        "libjsoncpp",
+        "libwebsockets",
     ],
     defaults: ["cuttlefish_buildhost_only"],
 }
+
+
diff --git a/host/frontend/operator_proxy/main.cpp b/host/frontend/operator_proxy/main.cpp
new file mode 100644
index 0000000..c0c4685
--- /dev/null
+++ b/host/frontend/operator_proxy/main.cpp
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <android-base/logging.h>
+#include <gflags/gflags.h>
+#include <libwebsockets.h>
+
+#include "common/libs/utils/files.h"
+#include "host/libs/config/cuttlefish_config.h"
+
+DEFINE_int32(http_server_port, 8443, "The port for the http server");
+DEFINE_bool(use_secure_http, true, "Whether to use HTTPS or HTTP.");
+DEFINE_string(certs_dir,
+              cuttlefish::DefaultHostArtifactsPath("usr/share/webrtc/certs"),
+              "Directory to certificates. It must contain a server.crt file, a "
+              "server.key file and (optionally) a CA.crt file.");
+DEFINE_string(operator_addr, "localhost:1080/",
+              "The address of the operator server to proxy");
+
+int main() {
+  struct lws_context_creation_info info;
+  struct lws_context *context;
+
+  lws_set_log_level(LLL_ERR, NULL);
+
+  struct lws_http_mount mount = {
+      .mount_next = nullptr,
+      .mountpoint = "/",
+      .mountpoint_len = static_cast<uint8_t>(1),
+      .origin = FLAGS_operator_addr.c_str(),
+      .def = nullptr,
+      .protocol = nullptr,
+      .cgienv = nullptr,
+      .extra_mimetypes = nullptr,
+      .interpret = nullptr,
+      .cgi_timeout = 0,
+      .cache_max_age = 0,
+      .auth_mask = 0,
+      .cache_reusable = 0,
+      .cache_revalidate = 0,
+      .cache_intermediaries = 0,
+      .origin_protocol = LWSMPRO_HTTP,  // reverse proxy
+      .basic_auth_login_file = nullptr,
+  };
+
+  memset(&info, 0, sizeof info);
+  info.port = FLAGS_http_server_port;
+  info.mounts = &mount;
+  if (FLAGS_use_secure_http) {
+    std::string cert_file = FLAGS_certs_dir + "/server.crt";
+    std::string key_file = FLAGS_certs_dir + "/server.key";
+    std::string ca_file = FLAGS_certs_dir + "/CA.crt";
+
+    info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
+    info.ssl_cert_filepath = cert_file.c_str();
+    info.ssl_private_key_filepath = key_file.c_str();
+    if (cuttlefish::FileExists(ca_file)) {
+      info.ssl_ca_filepath = ca_file.c_str();
+    }
+  }
+
+  context = lws_create_context(&info);
+  CHECK(context) << "Unable to create reverse proxy";
+  LOG(VERBOSE) << "Started reverse proxy to signaling server";
+  while (lws_service(context, 0) >= 0) {
+  }
+  lws_context_destroy(context);
+  return 0;
+}
diff --git a/host/frontend/vnc_server/Android.bp b/host/frontend/vnc_server/Android.bp
deleted file mode 100644
index 468590b..0000000
--- a/host/frontend/vnc_server/Android.bp
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Copyright (C) 2017 The Android Open Source Project
-//
-// 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.
-
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-cc_binary {
-    name: "vnc_server",
-    srcs: [
-        "blackboard.cpp",
-        "frame_buffer_watcher.cpp",
-        "jpeg_compressor.cpp",
-        "main.cpp",
-        "simulated_hw_composer.cpp",
-        "virtual_inputs.cpp",
-        "vnc_client_connection.cpp",
-        "vnc_server.cpp",
-    ],
-    shared_libs: [
-        "libcuttlefish_fs",
-        "libcuttlefish_utils",
-        "libbase",
-        "libjsoncpp",
-        "liblog",
-    ],
-    header_libs: [
-        "libcuttlefish_confui_host_headers",
-    ],
-    static_libs: [
-        "libcuttlefish_host_config",
-        "libcuttlefish_screen_connector",
-        "libcuttlefish_wayland_server",
-        "libcuttlefish_confui",
-        "libcuttlefish_confui_host",
-        "libft2.nodep",
-        "libteeui",
-        "libteeui_localization",
-        "libffi",
-        "libjpeg",
-        "libgflags",
-        "libwayland_crosvm_gpu_display_extension_server_protocols",
-        "libwayland_extension_server_protocols",
-        "libwayland_server",
-    ],
-    defaults: ["cuttlefish_host"],
-}
diff --git a/host/frontend/vnc_server/blackboard.cpp b/host/frontend/vnc_server/blackboard.cpp
deleted file mode 100644
index 91a8d1e..0000000
--- a/host/frontend/vnc_server/blackboard.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "host/frontend/vnc_server/blackboard.h"
-
-#include <algorithm>
-#include <utility>
-
-#include <gflags/gflags.h>
-#include <android-base/logging.h>
-#include "host/frontend/vnc_server/frame_buffer_watcher.h"
-
-DEFINE_bool(debug_blackboard, false,
-            "Turn on detailed logging for the blackboard");
-
-#define DLOG(LEVEL)                                 \
-  if (FLAGS_debug_blackboard) LOG(LEVEL)
-
-using cuttlefish::vnc::BlackBoard;
-using cuttlefish::vnc::Stripe;
-
-cuttlefish::vnc::SeqNumberVec cuttlefish::vnc::MakeSeqNumberVec() {
-  return SeqNumberVec(FrameBufferWatcher::StripesPerFrame());
-}
-
-void BlackBoard::NewStripeReady(int index, StripeSeqNumber seq_num) {
-  std::lock_guard<std::mutex> guard(m_);
-  DLOG(INFO) << "new stripe arrived from frame watcher";
-  auto& current_seq_num = most_recent_stripe_seq_nums_[index];
-  current_seq_num = std::max(current_seq_num, seq_num);
-  for (auto& client : clients_) {
-    if (client.second.ready_to_receive) {
-      client.second.new_frame_cv.notify_one();
-    }
-  }
-}
-
-void BlackBoard::Register(const VncClientConnection* conn) {
-  {
-    std::lock_guard<std::mutex> guard(m_);
-    CHECK(!clients_.count(conn));
-    clients_[conn];  // constructs new state in place
-  }
-  new_client_cv_.notify_one();
-}
-
-void BlackBoard::Unregister(const VncClientConnection* conn) {
-  std::lock_guard<std::mutex> guard(m_);
-  CHECK(clients_.count(conn));
-  clients_.erase(clients_.find(conn));
-}
-
-bool BlackBoard::NoNewStripesFor(const SeqNumberVec& seq_nums) const {
-  CHECK(seq_nums.size() == most_recent_stripe_seq_nums_.size());
-  for (auto state_seq_num = seq_nums.begin(),
-            held_seq_num = most_recent_stripe_seq_nums_.begin();
-       state_seq_num != seq_nums.end(); ++state_seq_num, ++held_seq_num) {
-    if (*state_seq_num < *held_seq_num) {
-      return false;
-    }
-  }
-  return true;
-}
-
-cuttlefish::vnc::StripePtrVec BlackBoard::WaitForSenderWork(
-    const VncClientConnection* conn) {
-  std::unique_lock<std::mutex> guard(m_);
-  auto& state = GetStateForClient(conn);
-  DLOG(INFO) << "Waiting for stripe...";
-  while (!state.closed &&
-         (!state.ready_to_receive || NoNewStripesFor(state.stripe_seq_nums))) {
-    state.new_frame_cv.wait(guard);
-  }
-  DLOG(INFO) << "At least one new stripe is available, should unblock " << conn;
-  state.ready_to_receive = false;
-  auto new_stripes = frame_buffer_watcher_->StripesNewerThan(
-      state.orientation, state.stripe_seq_nums);
-  for (auto& s : new_stripes) {
-    state.stripe_seq_nums[s->index] = s->seq_number;
-  }
-  return new_stripes;
-}
-
-void BlackBoard::WaitForAtLeastOneClientConnection() {
-  std::unique_lock<std::mutex> guard(m_);
-  while (clients_.empty()) {
-    new_client_cv_.wait(guard);
-  }
-}
-
-void BlackBoard::SetOrientation(const VncClientConnection* conn,
-                                ScreenOrientation orientation) {
-  std::lock_guard<std::mutex> guard(m_);
-  auto& state = GetStateForClient(conn);
-  state.orientation = orientation;
-  // After an orientation change the vnc client will need all stripes from
-  // the new orientation, regardless of age.
-  ResetToZero(&state.stripe_seq_nums);
-}
-
-void BlackBoard::SignalClientNeedsEntireScreen(
-    const VncClientConnection* conn) {
-  std::lock_guard<std::mutex> guard(m_);
-  ResetToZero(&GetStateForClient(conn).stripe_seq_nums);
-}
-
-void BlackBoard::ResetToZero(SeqNumberVec* seq_nums) {
-  seq_nums->assign(FrameBufferWatcher::StripesPerFrame(), StripeSeqNumber{});
-}
-
-void BlackBoard::FrameBufferUpdateRequestReceived(
-    const VncClientConnection* conn) {
-  std::lock_guard<std::mutex> guard(m_);
-  DLOG(INFO) << "Received frame buffer update request";
-  auto& state = GetStateForClient(conn);
-  state.ready_to_receive = true;
-  state.new_frame_cv.notify_one();
-}
-
-void BlackBoard::StopWaiting(const VncClientConnection* conn) {
-  std::lock_guard<std::mutex> guard(m_);
-  auto& state = GetStateForClient(conn);
-  state.closed = true;
-  // Wake up the thread that might be in WaitForSenderWork()
-  state.new_frame_cv.notify_one();
-}
-
-void BlackBoard::set_frame_buffer_watcher(
-    cuttlefish::vnc::FrameBufferWatcher* frame_buffer_watcher) {
-  std::lock_guard<std::mutex> guard(m_);
-  frame_buffer_watcher_ = frame_buffer_watcher;
-}
-
-void BlackBoard::set_jpeg_quality_level(int quality_level) {
-  // NOTE all vnc clients share a common jpeg quality level because the
-  // server doesn't compress per-client. The quality level for all clients
-  // will be whatever the most recent set was by any client.
-  std::lock_guard<std::mutex> guard(m_);
-  if (quality_level < kJpegMinQualityEncoding ||
-      quality_level > kJpegMaxQualityEncoding) {
-    LOG(WARNING) << "Bogus jpeg quality level: " << quality_level
-                 << ". Quality must be in range [" << kJpegMinQualityEncoding
-                 << ", " << kJpegMaxQualityEncoding << "]";
-    return;
-  }
-  jpeg_quality_level_ = 55 + (5 * (quality_level + 32));
-  DLOG(INFO) << "jpeg quality level set to " << jpeg_quality_level_ << "%";
-}
-
-BlackBoard::ClientFBUState& BlackBoard::GetStateForClient(
-    const VncClientConnection* conn) {
-  CHECK(clients_.count(conn));
-  return clients_[conn];
-}
diff --git a/host/frontend/vnc_server/blackboard.h b/host/frontend/vnc_server/blackboard.h
deleted file mode 100644
index af4baea..0000000
--- a/host/frontend/vnc_server/blackboard.h
+++ /dev/null
@@ -1,113 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-
-#include <condition_variable>
-#include <memory>
-#include <mutex>
-#include <unordered_map>
-
-#include "common/libs/concurrency/thread_annotations.h"
-#include "host/frontend/vnc_server/vnc_utils.h"
-
-namespace cuttlefish {
-namespace vnc {
-
-class VncClientConnection;
-class FrameBufferWatcher;
-using StripePtrVec = std::vector<std::shared_ptr<const Stripe>>;
-using SeqNumberVec = std::vector<StripeSeqNumber>;
-
-SeqNumberVec MakeSeqNumberVec();
-
-class BlackBoard {
- private:
-  struct ClientFBUState {
-    bool ready_to_receive{};
-    ScreenOrientation orientation{};
-    std::condition_variable new_frame_cv;
-    SeqNumberVec stripe_seq_nums = MakeSeqNumberVec();
-    bool closed{};
-  };
-
- public:
-  class Registerer {
-   public:
-    Registerer(BlackBoard* bb, const VncClientConnection* conn)
-        : bb_{bb}, conn_{conn} {
-      bb->Register(conn);
-    }
-    ~Registerer() { bb_->Unregister(conn_); }
-    Registerer(const Registerer&) = delete;
-    Registerer& operator=(const Registerer&) = delete;
-
-   private:
-    BlackBoard* bb_{};
-    const VncClientConnection* conn_{};
-  };
-
-  BlackBoard() = default;
-  BlackBoard(const BlackBoard&) = delete;
-  BlackBoard& operator=(const BlackBoard&) = delete;
-
-  bool NoNewStripesFor(const SeqNumberVec& seq_nums) const REQUIRES(m_);
-  void NewStripeReady(int index, StripeSeqNumber seq_num);
-  void Register(const VncClientConnection* conn);
-  void Unregister(const VncClientConnection* conn);
-
-  StripePtrVec WaitForSenderWork(const VncClientConnection* conn);
-
-  void WaitForAtLeastOneClientConnection();
-
-  void FrameBufferUpdateRequestReceived(const VncClientConnection* conn);
-  // Setting orientation implies needing the entire screen
-  void SetOrientation(const VncClientConnection* conn,
-                      ScreenOrientation orientation);
-  void SignalClientNeedsEntireScreen(const VncClientConnection* conn);
-
-  void StopWaiting(const VncClientConnection* conn);
-
-  void set_frame_buffer_watcher(FrameBufferWatcher* frame_buffer_watcher);
-
-  // quality_level must be the value received from the client, in the range
-  // [kJpegMinQualityEncoding, kJpegMaxQualityEncoding], else it is ignored.
-  void set_jpeg_quality_level(int quality_level);
-
-  int jpeg_quality_level() const {
-    std::lock_guard<std::mutex> guard(m_);
-    return jpeg_quality_level_;
-  }
-
- private:
-  ClientFBUState& GetStateForClient(const VncClientConnection* conn)
-      REQUIRES(m_);
-  static void ResetToZero(SeqNumberVec* seq_nums);
-
-  mutable std::mutex m_;
-  SeqNumberVec most_recent_stripe_seq_nums_ GUARDED_BY(m_) = MakeSeqNumberVec();
-  std::unordered_map<const VncClientConnection*, ClientFBUState> clients_
-      GUARDED_BY(m_);
-  int jpeg_quality_level_ GUARDED_BY(m_) = 100;
-  std::condition_variable new_client_cv_;
-  // NOTE the FrameBufferWatcher pointer itself should be
-  // guarded, but not the pointee.
-  FrameBufferWatcher* frame_buffer_watcher_ GUARDED_BY(m_){};
-};
-
-}  // namespace vnc
-}  // namespace cuttlefish
diff --git a/host/frontend/vnc_server/frame_buffer_watcher.cpp b/host/frontend/vnc_server/frame_buffer_watcher.cpp
deleted file mode 100644
index 3cc39c0..0000000
--- a/host/frontend/vnc_server/frame_buffer_watcher.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "host/frontend/vnc_server/frame_buffer_watcher.h"
-
-#include <algorithm>
-#include <cstdint>
-#include <cstring>
-#include <iterator>
-#include <memory>
-#include <mutex>
-#include <thread>
-#include <utility>
-
-#include <android-base/logging.h>
-#include "host/frontend/vnc_server/vnc_utils.h"
-
-using cuttlefish::vnc::FrameBufferWatcher;
-
-FrameBufferWatcher::FrameBufferWatcher(BlackBoard* bb,
-                                       ScreenConnector& screen_connector)
-    : bb_{bb}, hwcomposer{bb_, screen_connector} {
-  for (auto& stripes_vec : stripes_) {
-    std::generate_n(std::back_inserter(stripes_vec),
-                    SimulatedHWComposer::NumberOfStripes(),
-                    std::make_shared<Stripe>);
-  }
-  bb_->set_frame_buffer_watcher(this);
-  auto num_workers = std::max(std::thread::hardware_concurrency(), 1u);
-  std::generate_n(std::back_inserter(workers_), num_workers, [this] {
-    return std::thread{&FrameBufferWatcher::Worker, this};
-  });
-}
-
-FrameBufferWatcher::~FrameBufferWatcher() {
-  {
-    std::lock_guard<std::mutex> guard(m_);
-    closed_ = true;
-  }
-  for (auto& tid : workers_) {
-    tid.join();
-  }
-}
-
-bool FrameBufferWatcher::closed() const {
-  std::lock_guard<std::mutex> guard(m_);
-  return closed_;
-}
-
-cuttlefish::vnc::Stripe FrameBufferWatcher::Rotated(Stripe stripe) {
-  if (stripe.orientation == ScreenOrientation::Landscape) {
-    LOG(FATAL) << "Rotating a landscape stripe, this is a mistake";
-  }
-  auto w = stripe.width;
-  auto s = stripe.stride;
-  auto h = stripe.height;
-  const auto& raw = stripe.raw_data;
-  Message rotated(raw.size(), 0xAA);
-  for (std::uint16_t i = 0; i < w; ++i) {
-    for (std::uint16_t j = 0; j < h; ++j) {
-      size_t to = (i * h + j) * ScreenConnectorInfo::BytesPerPixel();
-      size_t from = (w - (i + 1)) * ScreenConnectorInfo::BytesPerPixel() + s * j;
-      CHECK(from < raw.size());
-      CHECK(to < rotated.size());
-      std::memcpy(&rotated[to], &raw[from], ScreenConnectorInfo::BytesPerPixel());
-    }
-  }
-  std::swap(stripe.x, stripe.y);
-  std::swap(stripe.width, stripe.height);
-  // The new stride after rotating is the height, as it is not aligned again.
-  stripe.stride = stripe.width * ScreenConnectorInfo::BytesPerPixel();
-  stripe.raw_data = std::move(rotated);
-  stripe.orientation = ScreenOrientation::Landscape;
-  return stripe;
-}
-
-bool FrameBufferWatcher::StripeIsDifferentFromPrevious(
-    const Stripe& stripe) const {
-  return Stripes(stripe.orientation)[stripe.index]->raw_data != stripe.raw_data;
-}
-
-cuttlefish::vnc::StripePtrVec FrameBufferWatcher::StripesNewerThan(
-    ScreenOrientation orientation, const SeqNumberVec& seq_numbers) const {
-  std::lock_guard<std::mutex> guard(stripes_lock_);
-  const auto& stripes = Stripes(orientation);
-  CHECK(seq_numbers.size() == stripes.size());
-  StripePtrVec new_stripes;
-  auto seq_number_it = seq_numbers.begin();
-  std::copy_if(stripes.begin(), stripes.end(), std::back_inserter(new_stripes),
-               [seq_number_it](const StripePtrVec::value_type& s) mutable {
-                 return *(seq_number_it++) < s->seq_number;
-               });
-  return new_stripes;
-}
-
-cuttlefish::vnc::StripePtrVec& FrameBufferWatcher::Stripes(
-    ScreenOrientation orientation) {
-  return stripes_[static_cast<int>(orientation)];
-}
-
-const cuttlefish::vnc::StripePtrVec& FrameBufferWatcher::Stripes(
-    ScreenOrientation orientation) const {
-  return stripes_[static_cast<int>(orientation)];
-}
-
-bool FrameBufferWatcher::UpdateMostRecentSeqNumIfStripeIsNew(
-    const Stripe& stripe) {
-  if (most_recent_identical_stripe_seq_nums_[stripe.index] <=
-      stripe.seq_number) {
-    most_recent_identical_stripe_seq_nums_[stripe.index] = stripe.seq_number;
-    return true;
-  }
-  return false;
-}
-
-bool FrameBufferWatcher::UpdateStripeIfStripeIsNew(
-    const std::shared_ptr<const Stripe>& stripe) {
-  std::lock_guard<std::mutex> guard(stripes_lock_);
-  if (UpdateMostRecentSeqNumIfStripeIsNew(*stripe)) {
-    Stripes(stripe->orientation)[stripe->index] = stripe;
-    return true;
-  }
-  return false;
-}
-
-void FrameBufferWatcher::CompressStripe(JpegCompressor* jpeg_compressor,
-                                        Stripe* stripe) {
-  stripe->jpeg_data = jpeg_compressor->Compress(
-      stripe->raw_data, bb_->jpeg_quality_level(), 0, 0, stripe->width,
-      stripe->height, stripe->stride);
-}
-
-void FrameBufferWatcher::Worker() {
-  JpegCompressor jpeg_compressor;
-#ifdef FUZZ_TEST_VNC
-  std::default_random_engine e{std::random_device{}()};
-  std::uniform_int_distribution<int> random{0, 2};
-#endif
-  while (!closed()) {
-    auto portrait_stripe = hwcomposer.GetNewStripe();
-    if (closed()) {
-      break;
-    }
-    {
-      // TODO(haining) use if (with init) and else for c++17 instead of extra
-      // scope and continue
-      // if (std::lock_guard guard(stripes_lock_); /*condition*/) { }
-      std::lock_guard<std::mutex> guard(stripes_lock_);
-      if (!StripeIsDifferentFromPrevious(portrait_stripe)) {
-        UpdateMostRecentSeqNumIfStripeIsNew(portrait_stripe);
-        continue;
-      }
-    }
-    auto seq_num = portrait_stripe.seq_number;
-    auto index = portrait_stripe.index;
-    auto landscape_stripe = Rotated(portrait_stripe);
-    auto stripes = {std::make_shared<Stripe>(std::move(portrait_stripe)),
-                    std::make_shared<Stripe>(std::move(landscape_stripe))};
-    for (auto& stripe : stripes) {
-#ifdef FUZZ_TEST_VNC
-      if (random(e)) {
-        usleep(10000);
-      }
-#endif
-      CompressStripe(&jpeg_compressor, stripe.get());
-    }
-    bool any_new_stripes = false;
-    for (auto& stripe : stripes) {
-      any_new_stripes = UpdateStripeIfStripeIsNew(stripe) || any_new_stripes;
-    }
-    if (any_new_stripes) {
-      bb_->NewStripeReady(index, seq_num);
-    }
-  }
-}
-
-int FrameBufferWatcher::StripesPerFrame() {
-  return SimulatedHWComposer::NumberOfStripes();
-}
-
-void FrameBufferWatcher::IncClientCount() {
-  hwcomposer.ReportClientsConnected();
-}
-
-void FrameBufferWatcher::DecClientCount() {
-  // Do nothing
-}
diff --git a/host/frontend/vnc_server/frame_buffer_watcher.h b/host/frontend/vnc_server/frame_buffer_watcher.h
deleted file mode 100644
index 9b559b6..0000000
--- a/host/frontend/vnc_server/frame_buffer_watcher.h
+++ /dev/null
@@ -1,81 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <memory>
-#include <mutex>
-#include <thread>
-#include <utility>
-#include <vector>
-
-#include "common/libs/concurrency/thread_annotations.h"
-#include "host/frontend/vnc_server/blackboard.h"
-#include "host/frontend/vnc_server/jpeg_compressor.h"
-#include "host/frontend/vnc_server/simulated_hw_composer.h"
-#include "host/libs/screen_connector/screen_connector.h"
-
-namespace cuttlefish {
-namespace vnc {
-class FrameBufferWatcher {
- public:
-  explicit FrameBufferWatcher(BlackBoard* bb,
-                              ScreenConnector& screen_connector);
-  FrameBufferWatcher(const FrameBufferWatcher&) = delete;
-  FrameBufferWatcher& operator=(const FrameBufferWatcher&) = delete;
-  ~FrameBufferWatcher();
-
-  StripePtrVec StripesNewerThan(ScreenOrientation orientation,
-                                const SeqNumberVec& seq_num) const;
-  void IncClientCount();
-  void DecClientCount();
-
-  static int StripesPerFrame();
-
- private:
-  static Stripe Rotated(Stripe stripe);
-
-  bool closed() const;
-  bool StripeIsDifferentFromPrevious(const Stripe& stripe) const
-      REQUIRES(stripes_lock_);
-  // returns true if stripe is still considered new and seq number was updated
-  bool UpdateMostRecentSeqNumIfStripeIsNew(const Stripe& stripe)
-      REQUIRES(stripes_lock_);
-  // returns true if stripe is still considered new and was updated
-  bool UpdateStripeIfStripeIsNew(const std::shared_ptr<const Stripe>& stripe)
-      EXCLUDES(stripes_lock_);
-  // Compresses stripe->raw_data to stripe->jpeg_data
-  void CompressStripe(JpegCompressor* jpeg_compressor, Stripe* stripe);
-  void Worker();
-  void Updater();
-
-  StripePtrVec& Stripes(ScreenOrientation orientation) REQUIRES(stripes_lock_);
-  const StripePtrVec& Stripes(ScreenOrientation orientation) const
-      REQUIRES(stripes_lock_);
-
-  std::vector<std::thread> workers_;
-  mutable std::mutex stripes_lock_;
-  std::array<StripePtrVec, kNumOrientations> stripes_ GUARDED_BY(stripes_lock_);
-  SeqNumberVec most_recent_identical_stripe_seq_nums_
-      GUARDED_BY(stripes_lock_) = MakeSeqNumberVec();
-  mutable std::mutex m_;
-  bool closed_ GUARDED_BY(m_){};
-  BlackBoard* bb_{};
-  SimulatedHWComposer hwcomposer;
-};
-
-}  // namespace vnc
-}  // namespace cuttlefish
diff --git a/host/frontend/vnc_server/jpeg_compressor.cpp b/host/frontend/vnc_server/jpeg_compressor.cpp
deleted file mode 100644
index 05013eb..0000000
--- a/host/frontend/vnc_server/jpeg_compressor.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <stdio.h>  // stdio.h must appear before jpeglib.h
-#include <jpeglib.h>
-
-#include <android-base/logging.h>
-#include "host/frontend/vnc_server/jpeg_compressor.h"
-#include "host/frontend/vnc_server/vnc_utils.h"
-#include "host/libs/screen_connector/screen_connector.h"
-
-using cuttlefish::vnc::JpegCompressor;
-
-namespace {
-void InitCinfo(jpeg_compress_struct* cinfo, jpeg_error_mgr* err,
-               std::uint16_t width, std::uint16_t height, int jpeg_quality) {
-  cinfo->err = jpeg_std_error(err);
-  jpeg_create_compress(cinfo);
-
-  cinfo->image_width = width;
-  cinfo->image_height = height;
-  cinfo->input_components = cuttlefish::ScreenConnectorInfo::BytesPerPixel();
-  cinfo->in_color_space = JCS_EXT_RGBX;
-
-  jpeg_set_defaults(cinfo);
-  jpeg_set_quality(cinfo, jpeg_quality, true);
-}
-}  // namespace
-
-cuttlefish::Message JpegCompressor::Compress(const Message& frame,
-                                      int jpeg_quality, std::uint16_t x,
-                                      std::uint16_t y, std::uint16_t width,
-                                      std::uint16_t height,
-                                      int stride) {
-  jpeg_compress_struct cinfo{};
-  jpeg_error_mgr err{};
-  InitCinfo(&cinfo, &err, width, height, jpeg_quality);
-
-  auto* compression_buffer = buffer_.get();
-  auto compression_buffer_size = buffer_capacity_;
-  jpeg_mem_dest(&cinfo, &compression_buffer, &compression_buffer_size);
-  jpeg_start_compress(&cinfo, true);
-
-  while (cinfo.next_scanline < cinfo.image_height) {
-    auto row = static_cast<JSAMPROW>(const_cast<std::uint8_t*>(
-        &frame[(y * stride) +
-               (cinfo.next_scanline * stride) +
-               (x * cuttlefish::ScreenConnectorInfo::BytesPerPixel())]));
-    jpeg_write_scanlines(&cinfo, &row, 1);
-  }
-  jpeg_finish_compress(&cinfo);
-  jpeg_destroy_compress(&cinfo);
-
-  UpdateBuffer(compression_buffer, compression_buffer_size);
-  return {compression_buffer, compression_buffer + compression_buffer_size};
-}
-
-void JpegCompressor::UpdateBuffer(std::uint8_t* compression_buffer,
-                                  unsigned long compression_buffer_size) {
-  if (buffer_.get() != compression_buffer) {
-    buffer_capacity_ = compression_buffer_size;
-    buffer_.reset(compression_buffer);
-  }
-}
diff --git a/host/frontend/vnc_server/jpeg_compressor.h b/host/frontend/vnc_server/jpeg_compressor.h
deleted file mode 100644
index b6ef487..0000000
--- a/host/frontend/vnc_server/jpeg_compressor.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <cstdint>
-#include <cstdlib>
-#include <memory>
-
-#include "host/frontend/vnc_server/vnc_utils.h"
-
-namespace cuttlefish {
-namespace vnc {
-
-// libjpeg-turbo with jpeg_mem_dest (using memory as a destination) is funky.
-// If you give it a buffer that is big enough it will use it.
-// If you give it a buffer that is too small, it will allocate a new buffer
-// but will NOT free the buffer you gave it.
-// This class keeps track of the capacity of the working buffer, and frees the
-// old buffer if libjpeg-turbo silently discards it.
-class JpegCompressor {
- public:
-  Message Compress(const Message& frame, int jpeg_quality, std::uint16_t x,
-                   std::uint16_t y, std::uint16_t width, std::uint16_t height,
-                   int screen_width);
-
- private:
-  void UpdateBuffer(std::uint8_t* compression_buffer,
-                    unsigned long compression_buffer_size);
-  struct Freer {
-    void operator()(void* p) const { std::free(p); }
-  };
-
-  std::unique_ptr<std::uint8_t, Freer> buffer_;
-  unsigned long buffer_capacity_{};
-};
-
-}  // namespace vnc
-}  // namespace cuttlefish
diff --git a/host/frontend/vnc_server/keysyms.h b/host/frontend/vnc_server/keysyms.h
deleted file mode 100644
index ddcc0e4..0000000
--- a/host/frontend/vnc_server/keysyms.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <cstdint>
-
-namespace cuttlefish {
-namespace xk {
-
-constexpr uint32_t BackSpace = 0xff08, Tab = 0xff09, Return = 0xff0d,
-                   Enter = Return, Escape = 0xff1b, MultiKey = 0xff20,
-                   Insert = 0xff63, Delete = 0xffff, Pause = 0xff13,
-                   Home = 0xff50, End = 0xff57, PageUp = 0xff55,
-                   PageDown = 0xff56, Left = 0xff51, Up = 0xff52,
-                   Right = 0xff53, Down = 0xff54, F1 = 0xffbe, F2 = 0xffbf,
-                   F3 = 0xffc0, F4 = 0xffc1, F5 = 0xffc2, F6 = 0xffc3,
-                   F7 = 0xffc4, F8 = 0xffc5, F9 = 0xffc6, F10 = 0xffc7,
-                   F11 = 0xffc8, F12 = 0xffc9, F13 = 0xffca, F14 = 0xffcb,
-                   F15 = 0xffcc, F16 = 0xffcd, F17 = 0xffce, F18 = 0xffcf,
-                   F19 = 0xffd0, F20 = 0xffd1, F21 = 0xffd2, F22 = 0xffd3,
-                   F23 = 0xffd4, F24 = 0xffd5, ShiftLeft = 0xffe1,
-                   ShiftRight = 0xffe2, ControlLeft = 0xffe3,
-                   ControlRight = 0xffe4, MetaLeft = 0xffe7, MetaRight = 0xffe8,
-                   AltLeft = 0xffe9, AltRight = 0xffea, CapsLock = 0xffe5,
-                   NumLock = 0xff7f, ScrollLock = 0xff14, Keypad0 = 0xffb0,
-                   Keypad1 = 0xffb1, Keypad2 = 0xffb2, Keypad3 = 0xffb3,
-                   Keypad4 = 0xffb4, Keypad5 = 0xffb5, Keypad6 = 0xffb6,
-                   Keypad7 = 0xffb7, Keypad8 = 0xffb8, Keypad9 = 0xffb9,
-                   KeypadMultiply = 0xffaa, KeypadSubtract = 0xffad,
-                   KeypadAdd = 0xffab, KeypadDecimal = 0xffae,
-                   KeypadEnter = 0xff8d, KeypadDivide = 0xffaf,
-                   KeypadEqual = 0xffbd, PlusMinus = 0xb1, SysReq = 0xff15,
-                   LineFeed = 0xff0a, KeypadSeparator = 0xffac, Yen = 0xa5,
-                   Cancel = 0xff69, Undo = 0xff65, Redo = 0xff66, Find = 0xff68,
-                   Print = 0xff61, VolumeDown = 0x1008ff11, Mute = 0x1008ff12,
-                   VolumeUp = 0x1008ff13, Menu = 0xff67,
-                   VNCMenu = 0xffed;  // VNC seems to translate MENU to this
-
-}  // namespace xk
-}  // namespace cuttlefish
diff --git a/host/frontend/vnc_server/main.cpp b/host/frontend/vnc_server/main.cpp
deleted file mode 100644
index e036b40..0000000
--- a/host/frontend/vnc_server/main.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <algorithm>
-#include <memory>
-#include <string>
-
-#include <gflags/gflags.h>
-
-#include "host/frontend/vnc_server/simulated_hw_composer.h"
-#include "host/frontend/vnc_server/vnc_server.h"
-#include "host/frontend/vnc_server/vnc_utils.h"
-#include "host/libs/config/logging.h"
-#include "host/libs/confui/host_mode_ctrl.h"
-#include "host/libs/confui/host_server.h"
-
-DEFINE_bool(agressive, false, "Whether to use agressive server");
-DEFINE_int32(frame_server_fd, -1, "");
-DEFINE_int32(port, 6444, "Port where to listen for connections");
-
-int main(int argc, char* argv[]) {
-  cuttlefish::DefaultSubprocessLogging(argv);
-  google::ParseCommandLineFlags(&argc, &argv, true);
-
-  auto& host_mode_ctrl = cuttlefish::HostModeCtrl::Get();
-  auto screen_connector_ptr = cuttlefish::vnc::ScreenConnector::Get(
-      FLAGS_frame_server_fd, host_mode_ctrl);
-  auto& screen_connector = *(screen_connector_ptr.get());
-
-  // create confirmation UI service, giving host_mode_ctrl and
-  // screen_connector
-  // keep this singleton object alive until the webRTC process ends
-  static auto& host_confui_server =
-      cuttlefish::confui::HostServer::Get(host_mode_ctrl, screen_connector);
-
-  host_confui_server.Start();
-  // lint does not like the spelling of "agressive", so needs NOTYPO
-  cuttlefish::vnc::VncServer vnc_server(FLAGS_port, FLAGS_agressive,  // NOTYPO
-                                        screen_connector, host_confui_server);
-  vnc_server.MainLoop();
-}
diff --git a/host/frontend/vnc_server/mocks.h b/host/frontend/vnc_server/mocks.h
deleted file mode 100644
index e69eb43..0000000
--- a/host/frontend/vnc_server/mocks.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-struct GceFrameBuffer {
-  typedef uint32_t Pixel;
-
-  static const int kRedShift = 0;
-  static const int kRedBits = 8;
-  static const int kGreenShift = 8;
-  static const int kGreenBits = 8;
-  static const int kBlueShift = 16;
-  static const int kBlueBits = 8;
-  static const int kAlphaShift = 24;
-  static const int kAlphaBits = 8;
-};
-
-// Sensors
-struct gce_sensors_message {
-  static constexpr const char* const kSensorsHALSocketName = "";
-};
diff --git a/host/frontend/vnc_server/simulated_hw_composer.cpp b/host/frontend/vnc_server/simulated_hw_composer.cpp
deleted file mode 100644
index a02ae4b..0000000
--- a/host/frontend/vnc_server/simulated_hw_composer.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "host/frontend/vnc_server/simulated_hw_composer.h"
-
-#include "host/frontend/vnc_server/vnc_utils.h"
-#include "host/libs/config/cuttlefish_config.h"
-
-using cuttlefish::vnc::SimulatedHWComposer;
-using ScreenConnector = cuttlefish::vnc::ScreenConnector;
-
-SimulatedHWComposer::SimulatedHWComposer(BlackBoard* bb,
-                                         ScreenConnector& screen_connector)
-    :
-#ifdef FUZZ_TEST_VNC
-      engine_{std::random_device{}()},
-#endif
-      bb_{bb},
-      stripes_(kMaxQueueElements, &SimulatedHWComposer::EraseHalfOfElements),
-      screen_connector_(screen_connector) {
-  stripe_maker_ = std::thread(&SimulatedHWComposer::MakeStripes, this);
-  screen_connector_.SetCallback(std::move(GetScreenConnectorCallback()));
-}
-
-SimulatedHWComposer::~SimulatedHWComposer() {
-  close();
-  stripe_maker_.join();
-}
-
-cuttlefish::vnc::Stripe SimulatedHWComposer::GetNewStripe() {
-  auto s = stripes_.Pop();
-#ifdef FUZZ_TEST_VNC
-  if (random_(engine_)) {
-    usleep(7000);
-    stripes_.Push(std::move(s));
-    s = stripes_.Pop();
-  }
-#endif
-  return s;
-}
-
-bool SimulatedHWComposer::closed() {
-  std::lock_guard<std::mutex> guard(m_);
-  return closed_;
-}
-
-void SimulatedHWComposer::close() {
-  std::lock_guard<std::mutex> guard(m_);
-  closed_ = true;
-}
-
-// Assuming the number of stripes is less than half the size of the queue
-// this will be safe as the newest stripes won't be lost. In the real
-// hwcomposer, where stripes are coming in a different order, the full
-// queue case would probably need a different approach to be safe.
-void SimulatedHWComposer::EraseHalfOfElements(
-    ThreadSafeQueue<Stripe>::QueueImpl* q) {
-  q->erase(q->begin(), std::next(q->begin(), kMaxQueueElements / 2));
-}
-
-SimulatedHWComposer::GenerateProcessedFrameCallback
-SimulatedHWComposer::GetScreenConnectorCallback() {
-  return [](std::uint32_t display_number, std::uint32_t frame_w,
-            std::uint32_t frame_h, std::uint32_t frame_stride_bytes,
-            std::uint8_t* frame_bytes,
-            cuttlefish::vnc::VncScProcessedFrame& processed_frame) {
-    processed_frame.display_number_ = display_number;
-    // TODO(171305898): handle multiple displays.
-    if (display_number != 0) {
-      // BUG 186580833: display_number comes from surface_id in crosvm
-      // create_surface from virtio_gpu.rs set_scanout.  We cannot use it as
-      // the display number. Either crosvm virtio-gpu is incorrectly ignoring
-      // scanout id and instead using a monotonically increasing surface id
-      // number as the scanout resource is replaced over time, or frontend code
-      // here is incorrectly assuming  surface id == display id.
-      display_number = 0;
-    }
-
-    const std::uint32_t frame_bpp = 4;
-    const std::uint32_t frame_size_bytes = frame_h * frame_stride_bytes;
-
-    auto& raw_screen = processed_frame.raw_screen_;
-    raw_screen.assign(frame_bytes, frame_bytes + frame_size_bytes);
-
-    static std::uint32_t next_frame_number = 0;
-
-    const auto num_stripes = SimulatedHWComposer::kNumStripes;
-    for (int i = 0; i < num_stripes; ++i) {
-      std::uint16_t y = (frame_h / num_stripes) * i;
-
-      // Last frames on the right and/or bottom handle extra pixels
-      // when a screen dimension is not evenly divisible by Frame::kNumSlots.
-      std::uint16_t height = frame_h / num_stripes +
-                             (i + 1 == num_stripes ? frame_h % num_stripes : 0);
-      const auto* raw_start = &raw_screen[y * frame_w * frame_bpp];
-      const auto* raw_end = raw_start + (height * frame_w * frame_bpp);
-      // creating a named object and setting individual data members in order
-      // to make klp happy
-      // TODO (haining) construct this inside the call when not compiling
-      // on klp
-      Stripe s{};
-      s.index = i;
-      s.x = 0;
-      s.y = y;
-      s.width = frame_w;
-      s.stride = frame_stride_bytes;
-      s.height = height;
-      s.frame_id = next_frame_number++;
-      s.raw_data.assign(raw_start, raw_end);
-      s.orientation = ScreenOrientation::Portrait;
-      processed_frame.stripes_.push_back(std::move(s));
-    }
-
-    processed_frame.display_number_ = display_number;
-    processed_frame.is_success_ = true;
-  };
-}
-
-void SimulatedHWComposer::MakeStripes() {
-  std::uint64_t stripe_seq_num = 1;
-  /*
-   * callback should be set before the first WaitForAtLeastOneClientConnection()
-   * (b/178504150) and the first OnFrameAfter().
-   */
-  if (!screen_connector_.IsCallbackSet()) {
-    LOG(FATAL) << "ScreenConnector callback hasn't been set before MakeStripes";
-  }
-  while (!closed()) {
-    bb_->WaitForAtLeastOneClientConnection();
-    auto sim_hw_processed_frame = screen_connector_.OnNextFrame();
-    // sim_hw_processed_frame has display number from the guest
-    if (!sim_hw_processed_frame.is_success_) {
-      continue;
-    }
-    while (!sim_hw_processed_frame.stripes_.empty()) {
-      /*
-       * ScreenConnector that supplies the frames into the queue
-       * cannot be aware of stripe_seq_num. The callback was set at the
-       * ScreenConnector creation time. ScreenConnector calls the callback
-       * function autonomously to make the processed frames to supply the
-       * queue with.
-       *
-       * Besides, ScreenConnector is not VNC specific. Thus, stripe_seq_num,
-       * a VNC specific information, is maintained here.
-       *
-       * OnFrameAfter returns a sim_hw_processed_frame, that contains N consecutive stripes.
-       * each stripe s has an invalid seq_number, default-initialzed
-       * We set the field properly, and push to the stripes_
-       */
-      auto& s = sim_hw_processed_frame.stripes_.front();
-      stripe_seq_num++;
-      s.seq_number = StripeSeqNumber{stripe_seq_num};
-      stripes_.Push(std::move(s));
-      sim_hw_processed_frame.stripes_.pop_front();
-    }
-  }
-}
-
-int SimulatedHWComposer::NumberOfStripes() { return kNumStripes; }
-
-void SimulatedHWComposer::ReportClientsConnected() {
-  screen_connector_.ReportClientsConnected(true);
-}
diff --git a/host/frontend/vnc_server/simulated_hw_composer.h b/host/frontend/vnc_server/simulated_hw_composer.h
deleted file mode 100644
index 9d62e3e..0000000
--- a/host/frontend/vnc_server/simulated_hw_composer.h
+++ /dev/null
@@ -1,74 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <condition_variable>
-#include <mutex>
-#ifdef FUZZ_TEST_VNC
-#include <random>
-#endif
-#include <thread>
-#include <deque>
-
-#include "common/libs/concurrency/thread_annotations.h"
-#include "common/libs/concurrency/thread_safe_queue.h"
-#include "host/frontend/vnc_server/blackboard.h"
-#include "host/frontend/vnc_server/vnc_utils.h"
-#include "host/libs/config/cuttlefish_config.h"
-#include "host/libs/screen_connector/screen_connector.h"
-
-namespace cuttlefish {
-namespace vnc {
-class SimulatedHWComposer {
- public:
-  using GenerateProcessedFrameCallback = ScreenConnector::GenerateProcessedFrameCallback;
-
-  SimulatedHWComposer(BlackBoard* bb, ScreenConnector& screen_connector);
-  SimulatedHWComposer(const SimulatedHWComposer&) = delete;
-  SimulatedHWComposer& operator=(const SimulatedHWComposer&) = delete;
-  ~SimulatedHWComposer();
-
-  Stripe GetNewStripe();
-
-  void ReportClientsConnected();
-
-  // NOTE not constexpr on purpose
-  static int NumberOfStripes();
-
- private:
-  bool closed();
-  void close();
-  static void EraseHalfOfElements(ThreadSafeQueue<Stripe>::QueueImpl* q);
-  void MakeStripes();
-  GenerateProcessedFrameCallback GetScreenConnectorCallback();
-
-#ifdef FUZZ_TEST_VNC
-  std::default_random_engine engine_;
-  std::uniform_int_distribution<int> random_ =
-      std::uniform_int_distribution<int>{0, 2};
-#endif
-  static constexpr int kNumStripes = 8;
-  constexpr static std::size_t kMaxQueueElements = 64;
-  bool closed_ GUARDED_BY(m_){};
-  std::mutex m_;
-  BlackBoard* bb_{};
-  ThreadSafeQueue<Stripe> stripes_;
-  std::thread stripe_maker_;
-  ScreenConnector& screen_connector_;
-};
-}  // namespace vnc
-}  // namespace cuttlefish
diff --git a/host/frontend/vnc_server/virtual_inputs.cpp b/host/frontend/vnc_server/virtual_inputs.cpp
deleted file mode 100644
index 4876338..0000000
--- a/host/frontend/vnc_server/virtual_inputs.cpp
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "host/frontend/vnc_server/virtual_inputs.h"
-
-#include <android-base/logging.h>
-#include <android-base/strings.h>
-#include <gflags/gflags.h>
-#include <linux/input.h>
-#include <linux/uinput.h>
-
-#include <cstdint>
-#include <mutex>
-#include <thread>
-#include "keysyms.h"
-
-#include "common/libs/confui/confui.h"
-#include "common/libs/fs/shared_select.h"
-#include "host/libs/config/cuttlefish_config.h"
-#include "host/libs/config/logging.h"
-
-using cuttlefish::vnc::VirtualInputs;
-
-DEFINE_string(touch_fds, "",
-              "A list of fds for sockets where to accept touch connections");
-
-DEFINE_int32(keyboard_fd, -1,
-             "A fd for a socket where to accept keyboard connections");
-
-DEFINE_bool(write_virtio_input, false,
-            "Whether to write the virtio_input struct over the socket");
-
-namespace {
-// Necessary to define here as the virtio_input.h header is not available
-// in the host glibc.
-struct virtio_input_event {
-  std::uint16_t type;
-  std::uint16_t code;
-  std::int32_t value;
-};
-
-void AddKeyMappings(std::map<uint32_t, uint16_t>* key_mapping) {
-  (*key_mapping)[cuttlefish::xk::AltLeft] = KEY_LEFTALT;
-  (*key_mapping)[cuttlefish::xk::ControlLeft] = KEY_LEFTCTRL;
-  (*key_mapping)[cuttlefish::xk::ShiftLeft] = KEY_LEFTSHIFT;
-  (*key_mapping)[cuttlefish::xk::AltRight] = KEY_RIGHTALT;
-  (*key_mapping)[cuttlefish::xk::ControlRight] = KEY_RIGHTCTRL;
-  (*key_mapping)[cuttlefish::xk::ShiftRight] = KEY_RIGHTSHIFT;
-  (*key_mapping)[cuttlefish::xk::MetaLeft] = KEY_LEFTMETA;
-  (*key_mapping)[cuttlefish::xk::MetaRight] = KEY_RIGHTMETA;
-  (*key_mapping)[cuttlefish::xk::MultiKey] = KEY_COMPOSE;
-
-  (*key_mapping)[cuttlefish::xk::CapsLock] = KEY_CAPSLOCK;
-  (*key_mapping)[cuttlefish::xk::NumLock] = KEY_NUMLOCK;
-  (*key_mapping)[cuttlefish::xk::ScrollLock] = KEY_SCROLLLOCK;
-
-  (*key_mapping)[cuttlefish::xk::BackSpace] = KEY_BACKSPACE;
-  (*key_mapping)[cuttlefish::xk::Tab] = KEY_TAB;
-  (*key_mapping)[cuttlefish::xk::Return] = KEY_ENTER;
-  (*key_mapping)[cuttlefish::xk::Escape] = KEY_ESC;
-
-  (*key_mapping)[' '] = KEY_SPACE;
-  (*key_mapping)['!'] = KEY_1;
-  (*key_mapping)['"'] = KEY_APOSTROPHE;
-  (*key_mapping)['#'] = KEY_3;
-  (*key_mapping)['$'] = KEY_4;
-  (*key_mapping)['%'] = KEY_5;
-  (*key_mapping)['^'] = KEY_6;
-  (*key_mapping)['&'] = KEY_7;
-  (*key_mapping)['\''] = KEY_APOSTROPHE;
-  (*key_mapping)['('] = KEY_9;
-  (*key_mapping)[')'] = KEY_0;
-  (*key_mapping)['*'] = KEY_8;
-  (*key_mapping)['+'] = KEY_EQUAL;
-  (*key_mapping)[','] = KEY_COMMA;
-  (*key_mapping)['-'] = KEY_MINUS;
-  (*key_mapping)['.'] = KEY_DOT;
-  (*key_mapping)['/'] = KEY_SLASH;
-  (*key_mapping)['0'] = KEY_0;
-  (*key_mapping)['1'] = KEY_1;
-  (*key_mapping)['2'] = KEY_2;
-  (*key_mapping)['3'] = KEY_3;
-  (*key_mapping)['4'] = KEY_4;
-  (*key_mapping)['5'] = KEY_5;
-  (*key_mapping)['6'] = KEY_6;
-  (*key_mapping)['7'] = KEY_7;
-  (*key_mapping)['8'] = KEY_8;
-  (*key_mapping)['9'] = KEY_9;
-  (*key_mapping)[':'] = KEY_SEMICOLON;
-  (*key_mapping)[';'] = KEY_SEMICOLON;
-  (*key_mapping)['<'] = KEY_COMMA;
-  (*key_mapping)['='] = KEY_EQUAL;
-  (*key_mapping)['>'] = KEY_DOT;
-  (*key_mapping)['?'] = KEY_SLASH;
-  (*key_mapping)['@'] = KEY_2;
-  (*key_mapping)['A'] = KEY_A;
-  (*key_mapping)['B'] = KEY_B;
-  (*key_mapping)['C'] = KEY_C;
-  (*key_mapping)['D'] = KEY_D;
-  (*key_mapping)['E'] = KEY_E;
-  (*key_mapping)['F'] = KEY_F;
-  (*key_mapping)['G'] = KEY_G;
-  (*key_mapping)['H'] = KEY_H;
-  (*key_mapping)['I'] = KEY_I;
-  (*key_mapping)['J'] = KEY_J;
-  (*key_mapping)['K'] = KEY_K;
-  (*key_mapping)['L'] = KEY_L;
-  (*key_mapping)['M'] = KEY_M;
-  (*key_mapping)['N'] = KEY_N;
-  (*key_mapping)['O'] = KEY_O;
-  (*key_mapping)['P'] = KEY_P;
-  (*key_mapping)['Q'] = KEY_Q;
-  (*key_mapping)['R'] = KEY_R;
-  (*key_mapping)['S'] = KEY_S;
-  (*key_mapping)['T'] = KEY_T;
-  (*key_mapping)['U'] = KEY_U;
-  (*key_mapping)['V'] = KEY_V;
-  (*key_mapping)['W'] = KEY_W;
-  (*key_mapping)['X'] = KEY_X;
-  (*key_mapping)['Y'] = KEY_Y;
-  (*key_mapping)['Z'] = KEY_Z;
-  (*key_mapping)['['] = KEY_LEFTBRACE;
-  (*key_mapping)['\\'] = KEY_BACKSLASH;
-  (*key_mapping)[']'] = KEY_RIGHTBRACE;
-  (*key_mapping)['-'] = KEY_MINUS;
-  (*key_mapping)['_'] = KEY_MINUS;
-  (*key_mapping)['`'] = KEY_GRAVE;
-  (*key_mapping)['a'] = KEY_A;
-  (*key_mapping)['b'] = KEY_B;
-  (*key_mapping)['c'] = KEY_C;
-  (*key_mapping)['d'] = KEY_D;
-  (*key_mapping)['e'] = KEY_E;
-  (*key_mapping)['f'] = KEY_F;
-  (*key_mapping)['g'] = KEY_G;
-  (*key_mapping)['h'] = KEY_H;
-  (*key_mapping)['i'] = KEY_I;
-  (*key_mapping)['j'] = KEY_J;
-  (*key_mapping)['k'] = KEY_K;
-  (*key_mapping)['l'] = KEY_L;
-  (*key_mapping)['m'] = KEY_M;
-  (*key_mapping)['n'] = KEY_N;
-  (*key_mapping)['o'] = KEY_O;
-  (*key_mapping)['p'] = KEY_P;
-  (*key_mapping)['q'] = KEY_Q;
-  (*key_mapping)['r'] = KEY_R;
-  (*key_mapping)['s'] = KEY_S;
-  (*key_mapping)['t'] = KEY_T;
-  (*key_mapping)['u'] = KEY_U;
-  (*key_mapping)['v'] = KEY_V;
-  (*key_mapping)['w'] = KEY_W;
-  (*key_mapping)['x'] = KEY_X;
-  (*key_mapping)['y'] = KEY_Y;
-  (*key_mapping)['z'] = KEY_Z;
-  (*key_mapping)['{'] = KEY_LEFTBRACE;
-  (*key_mapping)['\\'] = KEY_BACKSLASH;
-  (*key_mapping)['|'] = KEY_BACKSLASH;
-  (*key_mapping)['}'] = KEY_RIGHTBRACE;
-  (*key_mapping)['~'] = KEY_GRAVE;
-
-  (*key_mapping)[cuttlefish::xk::F1] = KEY_F1;
-  (*key_mapping)[cuttlefish::xk::F2] = KEY_F2;
-  (*key_mapping)[cuttlefish::xk::F3] = KEY_F3;
-  (*key_mapping)[cuttlefish::xk::F4] = KEY_F4;
-  (*key_mapping)[cuttlefish::xk::F5] = KEY_F5;
-  (*key_mapping)[cuttlefish::xk::F6] = KEY_F6;
-  (*key_mapping)[cuttlefish::xk::F7] = KEY_F7;
-  (*key_mapping)[cuttlefish::xk::F8] = KEY_F8;
-  (*key_mapping)[cuttlefish::xk::F9] = KEY_F9;
-  (*key_mapping)[cuttlefish::xk::F10] = KEY_F10;
-  (*key_mapping)[cuttlefish::xk::F11] = KEY_F11;
-  (*key_mapping)[cuttlefish::xk::F12] = KEY_F12;
-  (*key_mapping)[cuttlefish::xk::F13] = KEY_F13;
-  (*key_mapping)[cuttlefish::xk::F14] = KEY_F14;
-  (*key_mapping)[cuttlefish::xk::F15] = KEY_F15;
-  (*key_mapping)[cuttlefish::xk::F16] = KEY_F16;
-  (*key_mapping)[cuttlefish::xk::F17] = KEY_F17;
-  (*key_mapping)[cuttlefish::xk::F18] = KEY_F18;
-  (*key_mapping)[cuttlefish::xk::F19] = KEY_F19;
-  (*key_mapping)[cuttlefish::xk::F20] = KEY_F20;
-  (*key_mapping)[cuttlefish::xk::F21] = KEY_F21;
-  (*key_mapping)[cuttlefish::xk::F22] = KEY_F22;
-  (*key_mapping)[cuttlefish::xk::F23] = KEY_F23;
-  (*key_mapping)[cuttlefish::xk::F24] = KEY_F24;
-
-  (*key_mapping)[cuttlefish::xk::Keypad0] = KEY_KP0;
-  (*key_mapping)[cuttlefish::xk::Keypad1] = KEY_KP1;
-  (*key_mapping)[cuttlefish::xk::Keypad2] = KEY_KP2;
-  (*key_mapping)[cuttlefish::xk::Keypad3] = KEY_KP3;
-  (*key_mapping)[cuttlefish::xk::Keypad4] = KEY_KP4;
-  (*key_mapping)[cuttlefish::xk::Keypad5] = KEY_KP5;
-  (*key_mapping)[cuttlefish::xk::Keypad6] = KEY_KP6;
-  (*key_mapping)[cuttlefish::xk::Keypad7] = KEY_KP7;
-  (*key_mapping)[cuttlefish::xk::Keypad8] = KEY_KP8;
-  (*key_mapping)[cuttlefish::xk::Keypad9] = KEY_KP9;
-  (*key_mapping)[cuttlefish::xk::KeypadMultiply] = KEY_KPASTERISK;
-  (*key_mapping)[cuttlefish::xk::KeypadSubtract] = KEY_KPMINUS;
-  (*key_mapping)[cuttlefish::xk::KeypadAdd] = KEY_KPPLUS;
-  (*key_mapping)[cuttlefish::xk::KeypadDecimal] = KEY_KPDOT;
-  (*key_mapping)[cuttlefish::xk::KeypadEnter] = KEY_KPENTER;
-  (*key_mapping)[cuttlefish::xk::KeypadDivide] = KEY_KPSLASH;
-  (*key_mapping)[cuttlefish::xk::KeypadEqual] = KEY_KPEQUAL;
-  (*key_mapping)[cuttlefish::xk::PlusMinus] = KEY_KPPLUSMINUS;
-
-  (*key_mapping)[cuttlefish::xk::SysReq] = KEY_SYSRQ;
-  (*key_mapping)[cuttlefish::xk::LineFeed] = KEY_LINEFEED;
-  (*key_mapping)[cuttlefish::xk::Home] = KEY_HOME;
-  (*key_mapping)[cuttlefish::xk::Up] = KEY_UP;
-  (*key_mapping)[cuttlefish::xk::PageUp] = KEY_PAGEUP;
-  (*key_mapping)[cuttlefish::xk::Left] = KEY_LEFT;
-  (*key_mapping)[cuttlefish::xk::Right] = KEY_RIGHT;
-  (*key_mapping)[cuttlefish::xk::End] = KEY_END;
-  (*key_mapping)[cuttlefish::xk::Down] = KEY_DOWN;
-  (*key_mapping)[cuttlefish::xk::PageDown] = KEY_PAGEDOWN;
-  (*key_mapping)[cuttlefish::xk::Insert] = KEY_INSERT;
-  (*key_mapping)[cuttlefish::xk::Delete] = KEY_DELETE;
-  (*key_mapping)[cuttlefish::xk::Pause] = KEY_PAUSE;
-  (*key_mapping)[cuttlefish::xk::KeypadSeparator] = KEY_KPCOMMA;
-  (*key_mapping)[cuttlefish::xk::Yen] = KEY_YEN;
-  (*key_mapping)[cuttlefish::xk::Cancel] = KEY_STOP;
-  (*key_mapping)[cuttlefish::xk::Redo] = KEY_AGAIN;
-  (*key_mapping)[cuttlefish::xk::Undo] = KEY_UNDO;
-  (*key_mapping)[cuttlefish::xk::Find] = KEY_FIND;
-  (*key_mapping)[cuttlefish::xk::Print] = KEY_PRINT;
-  (*key_mapping)[cuttlefish::xk::VolumeDown] = KEY_VOLUMEDOWN;
-  (*key_mapping)[cuttlefish::xk::Mute] = KEY_MUTE;
-  (*key_mapping)[cuttlefish::xk::VolumeUp] = KEY_VOLUMEUP;
-  (*key_mapping)[cuttlefish::xk::Menu] = KEY_MENU;
-  (*key_mapping)[cuttlefish::xk::VNCMenu] = KEY_MENU;
-}
-
-void InitInputEvent(struct input_event* evt, uint16_t type, uint16_t code,
-                    int32_t value) {
-  evt->type = type;
-  evt->code = code;
-  evt->value = value;
-}
-
-}  // namespace
-
-class SocketVirtualInputs : public VirtualInputs {
- public:
-  SocketVirtualInputs()
-      : client_connector_([this]() { ClientConnectorLoop(); }) {}
-
-  void GenerateKeyPressEvent(int key_code, bool down) override {
-    struct input_event events[2];
-    InitInputEvent(&events[0], EV_KEY, keymapping_[key_code], down);
-    InitInputEvent(&events[1], EV_SYN, 0, 0);
-
-    SendEvents(keyboard_socket_, events);
-  }
-
-  void PressPowerButton(bool down) override {
-    struct input_event events[2];
-    InitInputEvent(&events[0], EV_KEY, KEY_POWER, down);
-    InitInputEvent(&events[1], EV_SYN, 0, 0);
-
-    SendEvents(keyboard_socket_, events);
-  }
-
-  void HandlePointerEvent(bool touch_down, int x, int y) override {
-    // TODO(b/124121375): Use multitouch when available
-    struct input_event events[4];
-    InitInputEvent(&events[0], EV_ABS, ABS_X, x);
-    InitInputEvent(&events[1], EV_ABS, ABS_Y, y);
-    InitInputEvent(&events[2], EV_KEY, BTN_TOUCH, touch_down);
-    InitInputEvent(&events[3], EV_SYN, 0, 0);
-
-    SendEvents(touch_socket_, events);
-  }
-
- private:
-  template<size_t num_events>
-  void SendEvents(cuttlefish::SharedFD socket, struct input_event (&event_buffer)[num_events]) {
-    std::lock_guard<std::mutex> lock(socket_mutex_);
-    if (!socket->IsOpen()) {
-      // This is unlikely as it would only happen between the start of the vnc
-      // server and the connection of the VMM to the socket.
-      // If it happens, just drop the events as the VM is not yet ready to
-      // handle it.
-      return;
-    }
-
-    if (FLAGS_write_virtio_input) {
-      struct virtio_input_event virtio_events[num_events];
-      for (size_t i = 0; i < num_events; i++) {
-        virtio_events[i] = (struct virtio_input_event) {
-          .type = event_buffer[i].type,
-          .code = event_buffer[i].code,
-          .value = event_buffer[i].value,
-        };
-      }
-      auto ret = socket->Write(virtio_events, sizeof(virtio_events));
-      if (ret < 0) {
-        LOG(ERROR) << "Error sending input events: " << socket->StrError();
-      }
-    } else {
-      auto ret = socket->Write(event_buffer, sizeof(event_buffer));
-      if (ret < 0) {
-        LOG(ERROR) << "Error sending input events: " << socket->StrError();
-      }
-    }
-  }
-
-  void ClientConnectorLoop() {
-    auto touch_fd =
-        std::stoi(android::base::Split(FLAGS_touch_fds, ",").front());
-    auto touch_server = cuttlefish::SharedFD::Dup(touch_fd);
-    close(touch_fd);
-
-    auto keyboard_server = cuttlefish::SharedFD::Dup(FLAGS_keyboard_fd);
-    close(FLAGS_keyboard_fd);
-    FLAGS_keyboard_fd = -1;
-    LOG(DEBUG) << "Input socket host accepting connections...";
-
-    while (1) {
-      cuttlefish::SharedFDSet read_set;
-      read_set.Set(touch_server);
-      read_set.Set(keyboard_server);
-      cuttlefish::Select(&read_set, nullptr, nullptr, nullptr);
-      {
-        std::lock_guard<std::mutex> lock(socket_mutex_);
-        if (read_set.IsSet(touch_server)) {
-          touch_socket_ = cuttlefish::SharedFD::Accept(*touch_server);
-          LOG(DEBUG) << "connected to touch";
-        }
-        if (read_set.IsSet(keyboard_server)) {
-          keyboard_socket_ = cuttlefish::SharedFD::Accept(*keyboard_server);
-          LOG(DEBUG) << "connected to keyboard";
-        }
-      }
-    }
-  }
-  cuttlefish::SharedFD touch_socket_;
-  cuttlefish::SharedFD keyboard_socket_;
-  std::thread client_connector_;
-  std::mutex socket_mutex_;
-};
-
-VirtualInputs::VirtualInputs() { AddKeyMappings(&keymapping_); }
-
-/**
- * Depending on the host mode (e.g. android, confirmation ui(tee), etc)
- * deliver the inputs to the right input implementation
- * e.g. ConfUI's input or regular socket based input
- */
-class VirtualInputDemux : public VirtualInputs {
- public:
-  VirtualInputDemux(cuttlefish::confui::HostVirtualInput& confui_input)
-      : confui_input_{confui_input} {}
-  virtual ~VirtualInputDemux() = default;
-
-  virtual void GenerateKeyPressEvent(int code, bool down) override;
-  virtual void PressPowerButton(bool down) override;
-  virtual void HandlePointerEvent(bool touch_down, int x, int y) override;
-
- private:
-  SocketVirtualInputs socket_virtual_input_;
-  cuttlefish::confui::HostVirtualInput& confui_input_;
-};
-
-void VirtualInputDemux::GenerateKeyPressEvent(int code, bool down) {
-  // confui input is active only in the confirmation UI
-  // also, socket virtual input should be inactive in the confirmation
-  // UI session
-  if (confui_input_.IsConfUiActive()) {
-    if (code == cuttlefish::xk::Menu) {
-      // release menu button in confirmation UI means for now cancel
-      confui_input_.PressCancelButton(down);
-    }
-    ConfUiLog(DEBUG) << "the key" << code << "ignored."
-                     << "currently confirmation UI handles"
-                     << "menu and power only.";
-    return;
-  }
-  socket_virtual_input_.GenerateKeyPressEvent(code, down);
-}
-
-void VirtualInputDemux::PressPowerButton(bool down) {
-  if (confui_input_.IsConfUiActive()) {
-    confui_input_.PressConfirmButton(down);
-    return;
-  }
-  socket_virtual_input_.PressPowerButton(down);
-}
-
-void VirtualInputDemux::HandlePointerEvent(bool touch_down, int x, int y) {
-  if (confui_input_.IsConfUiActive()) {
-    ConfUiLog(DEBUG) << "currently confirmation UI ignores pointer events at ("
-                     << x << ", " << y << ")";
-    return;
-  }
-  socket_virtual_input_.HandlePointerEvent(touch_down, x, y);
-}
-
-std::shared_ptr<VirtualInputs> VirtualInputs::Get(
-    cuttlefish::confui::HostVirtualInput& confui_input) {
-  return std::make_shared<VirtualInputDemux>(confui_input);
-}
diff --git a/host/frontend/vnc_server/virtual_inputs.h b/host/frontend/vnc_server/virtual_inputs.h
deleted file mode 100644
index f30202e..0000000
--- a/host/frontend/vnc_server/virtual_inputs.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <map>
-#include <memory>
-#include <mutex>
-
-#include "host/libs/confui/host_virtual_input.h"
-#include "vnc_utils.h"
-
-namespace cuttlefish {
-namespace vnc {
-
-class VirtualInputs {
- public:
-  static std::shared_ptr<VirtualInputs> Get(
-      cuttlefish::confui::HostVirtualInput& confui_input);
-
-  virtual ~VirtualInputs() = default;
-
-  virtual void GenerateKeyPressEvent(int code, bool down) = 0;
-  virtual void PressPowerButton(bool down) = 0;
-  virtual void HandlePointerEvent(bool touch_down, int x, int y) = 0;
-
- protected:
-  VirtualInputs();
-
-  std::map<uint32_t, uint16_t> keymapping_;
-};
-
-}  // namespace vnc
-}  // namespace cuttlefish
diff --git a/host/frontend/vnc_server/vnc_client_connection.cpp b/host/frontend/vnc_server/vnc_client_connection.cpp
deleted file mode 100644
index ce16ec8..0000000
--- a/host/frontend/vnc_server/vnc_client_connection.cpp
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "host/frontend/vnc_server/vnc_client_connection.h"
-
-#include <netinet/in.h>
-#include <sys/time.h>
-
-#include <algorithm>
-#include <cmath>
-#include <cstdint>
-#include <cstring>
-#include <memory>
-#include <mutex>
-#include <string>
-#include <thread>
-#include <utility>
-#include <vector>
-
-#include <gflags/gflags.h>
-#include <android-base/logging.h>
-#include "common/libs/utils/tcp_socket.h"
-#include "host/frontend/vnc_server/keysyms.h"
-#include "host/frontend/vnc_server/mocks.h"
-#include "host/frontend/vnc_server/vnc_utils.h"
-#include "host/libs/config/cuttlefish_config.h"
-#include "host/libs/screen_connector/screen_connector.h"
-
-using cuttlefish::Message;
-using cuttlefish::vnc::Stripe;
-using cuttlefish::vnc::StripePtrVec;
-using cuttlefish::vnc::VncClientConnection;
-
-struct ScreenRegionView {
-  using Pixel = uint32_t;
-  static constexpr int kSwiftShaderPadding = 4;
-  static constexpr int kRedShift = 0;
-  static constexpr int kGreenShift = 8;
-  static constexpr int kBlueShift = 16;
-  static constexpr int kRedBits = 8;
-  static constexpr int kGreenBits = 8;
-  static constexpr int kBlueBits = 8;
-};
-
-DEFINE_bool(debug_client, false, "Turn on detailed logging for the client");
-
-#define DLOG(LEVEL) \
-  if (FLAGS_debug_client) LOG(LEVEL)
-
-namespace {
-class BigEndianChecker {
- public:
-  BigEndianChecker() {
-    uint32_t u = 1;
-    is_big_endian_ = *reinterpret_cast<const char*>(&u) == 0;
-  }
-  bool operator()() const { return is_big_endian_; }
-
- private:
-  bool is_big_endian_{};
-};
-
-const BigEndianChecker ImBigEndian;
-
-constexpr int32_t kDesktopSizeEncoding = -223;
-constexpr int32_t kTightEncoding = 7;
-
-// These are the lengths not counting the first byte. The first byte
-// indicates the message type.
-constexpr size_t kSetPixelFormatLength = 19;
-constexpr size_t kFramebufferUpdateRequestLength = 9;
-constexpr size_t kSetEncodingsLength = 3;  // more bytes follow
-constexpr size_t kKeyEventLength = 7;
-constexpr size_t kPointerEventLength = 5;
-constexpr size_t kClientCutTextLength = 7;  // more bytes follow
-
-std::string HostName() {
-  auto config = cuttlefish::CuttlefishConfig::Get();
-  auto instance = config->ForDefaultInstance();
-  return !config || instance.device_title().empty() ? std::string{"localhost"}
-                                                    : instance.device_title();
-}
-
-std::uint16_t uint16_tAt(const void* p) {
-  std::uint16_t u{};
-  std::memcpy(&u, p, sizeof u);
-  return ntohs(u);
-}
-
-std::uint32_t uint32_tAt(const void* p) {
-  std::uint32_t u{};
-  std::memcpy(&u, p, sizeof u);
-  return ntohl(u);
-}
-
-std::int32_t int32_tAt(const void* p) {
-  std::uint32_t u{};
-  std::memcpy(&u, p, sizeof u);
-  u = ntohl(u);
-  std::int32_t s{};
-  std::memcpy(&s, &u, sizeof s);
-  return s;
-}
-
-std::uint32_t RedVal(std::uint32_t pixel) {
-  return (pixel >> ScreenRegionView::kRedShift) &
-         ((0x1 << ScreenRegionView::kRedBits) - 1);
-}
-
-std::uint32_t BlueVal(std::uint32_t pixel) {
-  return (pixel >> ScreenRegionView::kBlueShift) &
-         ((0x1 << ScreenRegionView::kBlueBits) - 1);
-}
-
-std::uint32_t GreenVal(std::uint32_t pixel) {
-  return (pixel >> ScreenRegionView::kGreenShift) &
-         ((0x1 << ScreenRegionView::kGreenBits) - 1);
-}
-}  // namespace
-namespace cuttlefish {
-namespace vnc {
-bool operator==(const VncClientConnection::FrameBufferUpdateRequest& lhs,
-                const VncClientConnection::FrameBufferUpdateRequest& rhs) {
-  return lhs.x_pos == rhs.x_pos && lhs.y_pos == rhs.y_pos &&
-         lhs.width == rhs.width && lhs.height == rhs.height;
-}
-
-bool operator!=(const VncClientConnection::FrameBufferUpdateRequest& lhs,
-                const VncClientConnection::FrameBufferUpdateRequest& rhs) {
-  return !(lhs == rhs);
-}
-}  // namespace vnc
-}  // namespace cuttlefish
-
-VncClientConnection::VncClientConnection(
-    ClientSocket client, std::shared_ptr<VirtualInputs> virtual_inputs,
-    BlackBoard* bb, bool aggressive)
-    : client_{std::move(client)}, virtual_inputs_{virtual_inputs}, bb_{bb} {
-  frame_buffer_request_handler_tid_ = std::thread(
-      &VncClientConnection::FrameBufferUpdateRequestHandler, this, aggressive);
-}
-
-VncClientConnection::~VncClientConnection() {
-  {
-    std::lock_guard<std::mutex> guard(m_);
-    closed_ = true;
-  }
-  bb_->StopWaiting(this);
-  frame_buffer_request_handler_tid_.join();
-}
-
-void VncClientConnection::StartSession() {
-  LOG(INFO) << "Starting session";
-  SetupProtocol();
-  LOG(INFO) << "Protocol set up";
-  if (client_.closed()) {
-    return;
-  }
-  SetupSecurityType();
-  LOG(INFO) << "Security type set";
-  if (client_.closed()) {
-    return;
-  }
-  GetClientInit();
-  LOG(INFO) << "Gotten client init";
-  if (client_.closed()) {
-    return;
-  }
-  SendServerInit();
-  LOG(INFO) << "Sent server init";
-  if (client_.closed()) {
-    return;
-  }
-  NormalSession();
-  LOG(INFO) << "vnc session terminated";
-}
-
-bool VncClientConnection::closed() {
-  std::lock_guard<std::mutex> guard(m_);
-  return closed_;
-}
-
-void VncClientConnection::SetupProtocol() {
-  static constexpr char kRFBVersion[] = "RFB 003.008\n";
-  static constexpr char kRFBVersionOld[] = "RFB 003.003\n";
-  static constexpr auto kVersionLen = (sizeof kRFBVersion) - 1;
-  client_.SendNoSignal(reinterpret_cast<const std::uint8_t*>(kRFBVersion),
-                       kVersionLen);
-  auto client_protocol = client_.Recv(kVersionLen);
-  if (std::memcmp(&client_protocol[0], kRFBVersion,
-                  std::min(kVersionLen, client_protocol.size())) != 0) {
-    if (!std::memcmp(
-                &client_protocol[0],
-                kRFBVersionOld,
-                std::min(kVersionLen, client_protocol.size()))) {
-        // We'll deal with V3.3 as well.
-        client_is_old_ = true;
-        return;
-    }
-
-    client_protocol.push_back('\0');
-    LOG(ERROR) << "vnc client wants a different protocol: "
-               << reinterpret_cast<const char*>(&client_protocol[0]);
-  }
-}
-
-void VncClientConnection::SetupSecurityType() {
-  if (client_is_old_) {
-    static constexpr std::uint8_t kVNCSecurity[4] = { 0x00, 0x00, 0x00, 0x02 };
-    client_.SendNoSignal(kVNCSecurity);
-
-    static constexpr std::uint8_t kChallenge[16] =
-        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-    client_.SendNoSignal(kChallenge);
-
-    auto clientResponse = client_.Recv(16);
-    (void)clientResponse;  // Accept any response, we're not interested in actual security.
-
-    static constexpr std::uint8_t kSuccess[4] = { 0x00, 0x00, 0x00, 0x00 };
-    client_.SendNoSignal(kSuccess);
-    return;
-  }
-
-  static constexpr std::uint8_t kNoneSecurity = 0x1;
-  // The first '0x1' indicates the number of items that follow
-  static constexpr std::uint8_t kOnlyNoneSecurity[] = {0x01, kNoneSecurity};
-  client_.SendNoSignal(kOnlyNoneSecurity);
-  auto client_security = client_.Recv(1);
-  if (client_.closed()) {
-    return;
-  }
-  if (client_security.front() != kNoneSecurity) {
-    LOG(ERROR) << "vnc client is asking for security type "
-               << static_cast<int>(client_security.front());
-  }
-  static constexpr std::uint8_t kZero[4] = {};
-  client_.SendNoSignal(kZero);
-}
-
-void VncClientConnection::GetClientInit() {
-  auto client_shared = client_.Recv(1);
-}
-
-void VncClientConnection::SendServerInit() {
-  const std::string server_name = HostName();
-  std::lock_guard<std::mutex> guard(m_);
-  auto server_init = cuttlefish::CreateMessage(
-      static_cast<std::uint16_t>(ScreenWidth()),
-      static_cast<std::uint16_t>(ScreenHeight()), pixel_format_.bits_per_pixel,
-      pixel_format_.depth, pixel_format_.big_endian, pixel_format_.true_color,
-      pixel_format_.red_max, pixel_format_.green_max, pixel_format_.blue_max,
-      pixel_format_.red_shift, pixel_format_.green_shift,
-      pixel_format_.blue_shift, std::uint16_t{},  // padding
-      std::uint8_t{},                             // padding
-      static_cast<std::uint32_t>(server_name.size()), server_name);
-  client_.SendNoSignal(server_init);
-}
-
-Message VncClientConnection::MakeFrameBufferUpdateHeader(
-    std::uint16_t num_stripes) {
-  return cuttlefish::CreateMessage(std::uint8_t{0},  // message-type
-                            std::uint8_t{},   // padding
-                            std::uint16_t{num_stripes});
-}
-
-void VncClientConnection::AppendRawStripeHeader(Message* frame_buffer_update,
-                                                const Stripe& stripe) {
-  static constexpr int32_t kRawEncoding = 0;
-  cuttlefish::AppendToMessage(frame_buffer_update, std::uint16_t{stripe.x},
-                       std::uint16_t{stripe.y}, std::uint16_t{stripe.width},
-                       std::uint16_t{stripe.height}, kRawEncoding);
-}
-
-void VncClientConnection::AppendJpegSize(Message* frame_buffer_update,
-                                         size_t jpeg_size) {
-  constexpr size_t kJpegSizeOneByteMax = 127;
-  constexpr size_t kJpegSizeTwoByteMax = 16383;
-  constexpr size_t kJpegSizeThreeByteMax = 4194303;
-
-  if (jpeg_size <= kJpegSizeOneByteMax) {
-    cuttlefish::AppendToMessage(frame_buffer_update,
-                         static_cast<std::uint8_t>(jpeg_size));
-  } else if (jpeg_size <= kJpegSizeTwoByteMax) {
-    auto sz = static_cast<std::uint32_t>(jpeg_size);
-    cuttlefish::AppendToMessage(frame_buffer_update,
-                         static_cast<std::uint8_t>((sz & 0x7F) | 0x80),
-                         static_cast<std::uint8_t>((sz >> 7) & 0xFF));
-  } else {
-    if (jpeg_size > kJpegSizeThreeByteMax) {
-      LOG(FATAL) << "jpeg size is too big: " << jpeg_size << " must be under "
-                 << kJpegSizeThreeByteMax;
-    }
-    const auto sz = static_cast<std::uint32_t>(jpeg_size);
-    cuttlefish::AppendToMessage(frame_buffer_update,
-                         static_cast<std::uint8_t>((sz & 0x7F) | 0x80),
-                         static_cast<std::uint8_t>(((sz >> 7) & 0x7F) | 0x80),
-                         static_cast<std::uint8_t>((sz >> 14) & 0xFF));
-  }
-}
-
-void VncClientConnection::AppendRawStripe(Message* frame_buffer_update,
-                                          const Stripe& stripe) const {
-  using Pixel = ScreenRegionView::Pixel;
-  auto& fbu = *frame_buffer_update;
-  AppendRawStripeHeader(&fbu, stripe);
-  auto init_size = fbu.size();
-  fbu.insert(fbu.end(), stripe.raw_data.begin(), stripe.raw_data.end());
-  for (size_t i = init_size; i < fbu.size(); i += sizeof(Pixel)) {
-    CHECK_LE(i + sizeof(Pixel), fbu.size());
-    Pixel raw_pixel{};
-    std::memcpy(&raw_pixel, &fbu[i], sizeof raw_pixel);
-    auto red = RedVal(raw_pixel);
-    auto green = GreenVal(raw_pixel);
-    auto blue = BlueVal(raw_pixel);
-    Pixel pixel = Pixel{red} << pixel_format_.red_shift |
-                  Pixel{blue} << pixel_format_.blue_shift |
-                  Pixel{green} << pixel_format_.green_shift;
-
-    if (bool(pixel_format_.big_endian) != ImBigEndian()) {
-      // flip them bits (refactor into function)
-      auto p = reinterpret_cast<char*>(&pixel);
-      std::swap(p[0], p[3]);
-      std::swap(p[1], p[2]);
-    }
-    std::memcpy(&fbu[i], &pixel, sizeof pixel);
-  }
-}
-
-Message VncClientConnection::MakeRawFrameBufferUpdate(
-    const StripePtrVec& stripes) const {
-  auto fbu =
-      MakeFrameBufferUpdateHeader(static_cast<std::uint16_t>(stripes.size()));
-  for (auto& stripe : stripes) {
-    AppendRawStripe(&fbu, *stripe);
-  }
-  return fbu;
-}
-
-void VncClientConnection::AppendJpegStripeHeader(Message* frame_buffer_update,
-                                                 const Stripe& stripe) {
-  static constexpr std::uint8_t kJpegEncoding = 0x90;
-  cuttlefish::AppendToMessage(frame_buffer_update, stripe.x, stripe.y, stripe.width,
-                       stripe.height, kTightEncoding, kJpegEncoding);
-  AppendJpegSize(frame_buffer_update, stripe.jpeg_data.size());
-}
-
-void VncClientConnection::AppendJpegStripe(Message* frame_buffer_update,
-                                           const Stripe& stripe) {
-  AppendJpegStripeHeader(frame_buffer_update, stripe);
-  frame_buffer_update->insert(frame_buffer_update->end(),
-                              stripe.jpeg_data.begin(), stripe.jpeg_data.end());
-}
-
-Message VncClientConnection::MakeJpegFrameBufferUpdate(
-    const StripePtrVec& stripes) {
-  auto fbu =
-      MakeFrameBufferUpdateHeader(static_cast<std::uint16_t>(stripes.size()));
-  for (auto& stripe : stripes) {
-    AppendJpegStripe(&fbu, *stripe);
-  }
-  return fbu;
-}
-
-Message VncClientConnection::MakeFrameBufferUpdate(
-    const StripePtrVec& stripes) {
-  return use_jpeg_compression_ ? MakeJpegFrameBufferUpdate(stripes)
-                               : MakeRawFrameBufferUpdate(stripes);
-}
-
-void VncClientConnection::FrameBufferUpdateRequestHandler(bool aggressive) {
-  BlackBoard::Registerer reg(bb_, this);
-
-  while (!closed()) {
-    auto stripes = bb_->WaitForSenderWork(this);
-    if (closed()) {
-      break;
-    }
-    if (stripes.empty()) {
-      LOG(FATAL) << "Got 0 stripes";
-    }
-    {
-      // lock here so a portrait frame can't be sent after a landscape
-      // DesktopSize update, or vice versa.
-      std::lock_guard<std::mutex> guard(m_);
-      DLOG(INFO) << "Sending update in "
-                 << (current_orientation_ == ScreenOrientation::Portrait
-                         ? "portrait"
-                         : "landscape")
-                 << " mode";
-      client_.SendNoSignal(MakeFrameBufferUpdate(stripes));
-    }
-    if (aggressive) {
-      bb_->FrameBufferUpdateRequestReceived(this);
-    }
-  }
-}
-
-void VncClientConnection::SendDesktopSizeUpdate() {
-  static constexpr int32_t kDesktopSizeEncoding = -223;
-  client_.SendNoSignal(cuttlefish::CreateMessage(
-      std::uint8_t{0},   // message-type,
-      std::uint8_t{},    // padding
-      std::uint16_t{1},  // one pseudo rectangle
-      std::uint16_t{0}, std::uint16_t{0},
-      static_cast<std::uint16_t>(ScreenWidth()),
-      static_cast<std::uint16_t>(ScreenHeight()), kDesktopSizeEncoding));
-}
-
-bool VncClientConnection::IsUrgent(
-    const FrameBufferUpdateRequest& update_request) const {
-  return !update_request.incremental ||
-         update_request != previous_update_request_;
-}
-
-void VncClientConnection::HandleFramebufferUpdateRequest() {
-  auto msg = client_.Recv(kFramebufferUpdateRequestLength);
-  if (msg.size() != kFramebufferUpdateRequestLength) {
-    return;
-  }
-  FrameBufferUpdateRequest fbur{msg[1] == 0, uint16_tAt(&msg[1]),
-                                uint16_tAt(&msg[3]), uint16_tAt(&msg[5]),
-                                uint16_tAt(&msg[7])};
-  if (IsUrgent(fbur)) {
-    bb_->SignalClientNeedsEntireScreen(this);
-  }
-  bb_->FrameBufferUpdateRequestReceived(this);
-  previous_update_request_ = fbur;
-}
-
-void VncClientConnection::HandleSetEncodings() {
-  auto msg = client_.Recv(kSetEncodingsLength);
-  if (msg.size() != kSetEncodingsLength) {
-    return;
-  }
-  auto count = uint16_tAt(&msg[1]);
-  auto encodings = client_.Recv(count * sizeof(int32_t));
-  if (encodings.size() % sizeof(int32_t) != 0) {
-    return;
-  }
-  {
-    std::lock_guard<std::mutex> guard(m_);
-    use_jpeg_compression_ = false;
-  }
-  for (size_t i = 0; i < encodings.size(); i += sizeof(int32_t)) {
-    auto enc = int32_tAt(&encodings[i]);
-    DLOG(INFO) << "client requesting encoding: " << enc;
-    if (enc == kTightEncoding) {
-      // This is a deviation from the spec which says that if a jpeg quality
-      // level is not specified, tight encoding won't use jpeg.
-      std::lock_guard<std::mutex> guard(m_);
-      use_jpeg_compression_ = true;
-    }
-    if (kJpegMinQualityEncoding <= enc && enc <= kJpegMaxQualityEncoding) {
-      DLOG(INFO) << "jpeg compression level: " << enc;
-      bb_->set_jpeg_quality_level(enc);
-    }
-    if (enc == kDesktopSizeEncoding) {
-      supports_desktop_size_encoding_ = true;
-    }
-  }
-}
-
-void VncClientConnection::HandleSetPixelFormat() {
-  std::lock_guard<std::mutex> guard(m_);
-  auto msg = client_.Recv(kSetPixelFormatLength);
-  if (msg.size() != kSetPixelFormatLength) {
-    return;
-  }
-  pixel_format_.bits_per_pixel = msg[3];
-  pixel_format_.depth = msg[4];
-  pixel_format_.big_endian = msg[5];
-  pixel_format_.true_color = msg[7];
-  pixel_format_.red_max = uint16_tAt(&msg[8]);
-  pixel_format_.green_max = uint16_tAt(&msg[10]);
-  pixel_format_.blue_max = uint16_tAt(&msg[12]);
-  pixel_format_.red_shift = msg[13];
-  pixel_format_.green_shift = msg[14];
-  pixel_format_.blue_shift = msg[15];
-}
-
-void VncClientConnection::HandlePointerEvent() {
-  auto msg = client_.Recv(kPointerEventLength);
-  if (msg.size() != kPointerEventLength) {
-    return;
-  }
-  std::uint8_t button_mask = msg[0];
-  auto x_pos = uint16_tAt(&msg[1]);
-  auto y_pos = uint16_tAt(&msg[3]);
-  {
-    std::lock_guard<std::mutex> guard(m_);
-    if (current_orientation_ == ScreenOrientation::Landscape) {
-      std::tie(x_pos, y_pos) =
-          std::make_pair(ScreenConnectorInfo::ScreenWidth(0) - y_pos, x_pos);
-    }
-  }
-  virtual_inputs_->HandlePointerEvent(button_mask, x_pos, y_pos);
-}
-
-void VncClientConnection::UpdateAccelerometer(float /*x*/, float /*y*/,
-                                              float /*z*/) {
-  // TODO(jemoreira): Implement when vsoc sensor hal is updated
-}
-
-VncClientConnection::Coordinates VncClientConnection::CoordinatesForOrientation(
-    ScreenOrientation orientation) const {
-  // Compute the acceleration vector that we need to send to mimic
-  // this change.
-  constexpr float g = 9.81;
-  constexpr float angle = 20.0;
-  const float cos_angle = std::cos(angle / M_PI);
-  const float sin_angle = std::sin(angle / M_PI);
-  const float z = g * sin_angle;
-  switch (orientation) {
-    case ScreenOrientation::Portrait:
-      return {0, g * cos_angle, z};
-    case ScreenOrientation::Landscape:
-      return {g * cos_angle, 0, z};
-  }
-}
-
-int VncClientConnection::ScreenWidth() const {
-  return current_orientation_ == ScreenOrientation::Portrait
-             ? ScreenConnectorInfo::ScreenWidth(0)
-             : ScreenConnectorInfo::ScreenHeight(0);
-}
-
-int VncClientConnection::ScreenHeight() const {
-  return current_orientation_ == ScreenOrientation::Portrait
-             ? ScreenConnectorInfo::ScreenHeight(0)
-             : ScreenConnectorInfo::ScreenWidth(0);
-}
-
-void VncClientConnection::SetScreenOrientation(ScreenOrientation orientation) {
-  std::lock_guard<std::mutex> guard(m_);
-  auto coords = CoordinatesForOrientation(orientation);
-  UpdateAccelerometer(coords.x, coords.y, coords.z);
-  if (supports_desktop_size_encoding_) {
-    auto previous_orientation = current_orientation_;
-    current_orientation_ = orientation;
-    if (current_orientation_ != previous_orientation &&
-        supports_desktop_size_encoding_) {
-      SendDesktopSizeUpdate();
-      bb_->SetOrientation(this, current_orientation_);
-      // TODO not sure if I should be sending a frame update along with this,
-      // or just letting the next FBUR handle it. This seems to me like it's
-      // sending one more frame buffer update than was requested, which is
-      // maybe a violation of the spec?
-    }
-  }
-}
-
-bool VncClientConnection::RotateIfIsRotationCommand(std::uint32_t key) {
-  // Due to different configurations on different platforms we're supporting
-  // a set of options for rotating the screen. These are similar to what
-  // the emulator supports and has supported.
-  // ctrl+left and ctrl+right work on windows and linux
-  // command+left and command+right work on Mac
-  // ctrl+fn+F11 and ctrl+fn+F12 work when chromoting to ubuntu from a Mac
-  if (!control_key_down_ && !meta_key_down_) {
-    return false;
-  }
-  switch (key) {
-    case cuttlefish::xk::Right:
-    case cuttlefish::xk::F12:
-      DLOG(INFO) << "switching to portrait";
-      SetScreenOrientation(ScreenOrientation::Portrait);
-      break;
-    case cuttlefish::xk::Left:
-    case cuttlefish::xk::F11:
-      DLOG(INFO) << "switching to landscape";
-      SetScreenOrientation(ScreenOrientation::Landscape);
-      break;
-    default:
-      return false;
-  }
-  return true;
-}
-
-void VncClientConnection::HandleKeyEvent() {
-  auto msg = client_.Recv(kKeyEventLength);
-  if (msg.size() != kKeyEventLength) {
-    return;
-  }
-
-  auto key = uint32_tAt(&msg[3]);
-  bool key_down = msg[0];
-  switch (key) {
-    case cuttlefish::xk::ControlLeft:
-    case cuttlefish::xk::ControlRight:
-      control_key_down_ = key_down;
-      break;
-    case cuttlefish::xk::MetaLeft:
-    case cuttlefish::xk::MetaRight:
-      meta_key_down_ = key_down;
-      break;
-    case cuttlefish::xk::F5:
-      key = cuttlefish::xk::Menu;
-      break;
-    case cuttlefish::xk::F7:
-      virtual_inputs_->PressPowerButton(key_down);
-      return;
-    default:
-      break;
-  }
-
-  if (RotateIfIsRotationCommand(key)) {
-    return;
-  }
-
-  virtual_inputs_->GenerateKeyPressEvent(key, key_down);
-}
-
-void VncClientConnection::HandleClientCutText() {
-  auto msg = client_.Recv(kClientCutTextLength);
-  if (msg.size() != kClientCutTextLength) {
-    return;
-  }
-  auto len = uint32_tAt(&msg[3]);
-  client_.Recv(len);
-}
-
-void VncClientConnection::NormalSession() {
-  static constexpr std::uint8_t kSetPixelFormatMessage{0};
-  static constexpr std::uint8_t kSetEncodingsMessage{2};
-  static constexpr std::uint8_t kFramebufferUpdateRequestMessage{3};
-  static constexpr std::uint8_t kKeyEventMessage{4};
-  static constexpr std::uint8_t kPointerEventMessage{5};
-  static constexpr std::uint8_t kClientCutTextMessage{6};
-  while (true) {
-    if (client_.closed()) {
-      return;
-    }
-    auto msg = client_.Recv(1);
-    if (client_.closed()) {
-      return;
-    }
-    auto msg_type = msg.front();
-    DLOG(INFO) << "Received message type " << msg_type;
-
-    switch (msg_type) {
-      case kSetPixelFormatMessage:
-        HandleSetPixelFormat();
-        break;
-
-      case kSetEncodingsMessage:
-        HandleSetEncodings();
-        break;
-
-      case kFramebufferUpdateRequestMessage:
-        HandleFramebufferUpdateRequest();
-        break;
-
-      case kKeyEventMessage:
-        HandleKeyEvent();
-        break;
-
-      case kPointerEventMessage:
-        HandlePointerEvent();
-        break;
-
-      case kClientCutTextMessage:
-        HandleClientCutText();
-        break;
-
-      default:
-        LOG(WARNING) << "message type not handled: "
-                     << static_cast<int>(msg_type);
-        break;
-    }
-  }
-}
diff --git a/host/frontend/vnc_server/vnc_client_connection.h b/host/frontend/vnc_server/vnc_client_connection.h
deleted file mode 100644
index b26cf86..0000000
--- a/host/frontend/vnc_server/vnc_client_connection.h
+++ /dev/null
@@ -1,173 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "common/libs/concurrency/thread_annotations.h"
-#include "common/libs/fs/shared_fd.h"
-
-#include <cstdint>
-#include <memory>
-#include <mutex>
-#include <thread>
-#include <vector>
-
-#include "common/libs/utils/tcp_socket.h"
-#include "host/frontend/vnc_server/blackboard.h"
-#include "host/frontend/vnc_server/virtual_inputs.h"
-#include "host/frontend/vnc_server/vnc_utils.h"
-
-namespace cuttlefish {
-namespace vnc {
-
-class VncClientConnection {
- public:
-  VncClientConnection(ClientSocket client,
-                      std::shared_ptr<VirtualInputs> virtual_inputs,
-                      BlackBoard* bb, bool aggressive);
-  VncClientConnection(const VncClientConnection&) = delete;
-  VncClientConnection& operator=(const VncClientConnection&) = delete;
-  ~VncClientConnection();
-
-  void StartSession();
-
- private:
-  struct PixelFormat {
-    std::uint8_t bits_per_pixel;
-    std::uint8_t depth;
-    std::uint8_t big_endian;
-    std::uint8_t true_color;
-    std::uint16_t red_max;
-    std::uint16_t green_max;
-    std::uint16_t blue_max;
-    std::uint8_t red_shift;
-    std::uint8_t green_shift;
-    std::uint8_t blue_shift;
-  };
-
-  struct FrameBufferUpdateRequest {
-    bool incremental;
-    std::uint16_t x_pos;
-    std::uint16_t y_pos;
-    std::uint16_t width;
-    std::uint16_t height;
-  };
-
-  friend bool operator==(const FrameBufferUpdateRequest&,
-                         const FrameBufferUpdateRequest&);
-  friend bool operator!=(const FrameBufferUpdateRequest&,
-                         const FrameBufferUpdateRequest&);
-
-  bool closed();
-  void SetupProtocol();
-  void SetupSecurityType();
-
-  void GetClientInit();
-
-  void SendServerInit() EXCLUDES(m_);
-  static Message MakeFrameBufferUpdateHeader(std::uint16_t num_stripes);
-
-  static void AppendRawStripeHeader(Message* frame_buffer_update,
-                                    const Stripe& stripe);
-  void AppendRawStripe(Message* frame_buffer_update, const Stripe& stripe) const
-      REQUIRES(m_);
-  Message MakeRawFrameBufferUpdate(const StripePtrVec& stripes) const
-      REQUIRES(m_);
-
-  static void AppendJpegSize(Message* frame_buffer_update, size_t jpeg_size);
-  static void AppendJpegStripeHeader(Message* frame_buffer_update,
-                                     const Stripe& stripe);
-  static void AppendJpegStripe(Message* frame_buffer_update,
-                               const Stripe& stripe);
-  static Message MakeJpegFrameBufferUpdate(const StripePtrVec& stripes);
-
-  Message MakeFrameBufferUpdate(const StripePtrVec& frame) REQUIRES(m_);
-
-  void FrameBufferUpdateRequestHandler(bool aggressive) EXCLUDES(m_);
-
-  void SendDesktopSizeUpdate() REQUIRES(m_);
-
-  bool IsUrgent(const FrameBufferUpdateRequest& update_request) const;
-  static StripeSeqNumber MostRecentStripeSeqNumber(const StripePtrVec& stripes);
-
-  void HandleFramebufferUpdateRequest() EXCLUDES(m_);
-
-  void HandleSetEncodings();
-
-  void HandleSetPixelFormat();
-
-  void HandlePointerEvent() EXCLUDES(m_);
-
-  void UpdateAccelerometer(float x, float y, float z);
-
-  struct Coordinates {
-    float x;
-    float y;
-    float z;
-  };
-
-  Coordinates CoordinatesForOrientation(ScreenOrientation orientation) const;
-
-  int ScreenWidth() const REQUIRES(m_);
-
-  int ScreenHeight() const REQUIRES(m_);
-
-  void SetScreenOrientation(ScreenOrientation orientation) EXCLUDES(m_);
-
-  // Returns true if key is special and the screen was rotated.
-  bool RotateIfIsRotationCommand(std::uint32_t key);
-
-  void HandleKeyEvent();
-
-  void HandleClientCutText();
-
-  void NormalSession();
-
-  mutable std::mutex m_;
-  ClientSocket client_;
-  bool control_key_down_ = false;
-  bool meta_key_down_ = false;
-  std::shared_ptr<VirtualInputs> virtual_inputs_{};
-
-  FrameBufferUpdateRequest previous_update_request_{};
-  BlackBoard* bb_;
-  bool use_jpeg_compression_ GUARDED_BY(m_) = false;
-
-  std::thread frame_buffer_request_handler_tid_;
-  bool closed_ GUARDED_BY(m_){};
-
-  PixelFormat pixel_format_ GUARDED_BY(m_) = {
-      std::uint8_t{32},  // bits per pixel
-      std::uint8_t{24},   // depth
-      std::uint8_t{0},    // big_endian
-      std::uint8_t{1},    // true_color
-      std::uint16_t{0xff},   // red_max, (maxes not used when true color flag is 0)
-      std::uint16_t{0xff},   // green_max
-      std::uint16_t{0xff},   // blue_max
-      std::uint8_t{0},  // red_shift (shifts not used when true color flag is 0)
-      std::uint8_t{8},  // green_shift
-      std::uint8_t{16},  // blue_shift
-  };
-
-  bool supports_desktop_size_encoding_ = false;
-  ScreenOrientation current_orientation_ GUARDED_BY(m_) =
-      ScreenOrientation::Portrait;
-
-  bool client_is_old_ = false;
-};
-
-}  // namespace vnc
-}  // namespace cuttlefish
diff --git a/host/frontend/vnc_server/vnc_server.cpp b/host/frontend/vnc_server/vnc_server.cpp
deleted file mode 100644
index eff0d57..0000000
--- a/host/frontend/vnc_server/vnc_server.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "host/frontend/vnc_server/vnc_server.h"
-
-#include <memory>
-
-#include <android-base/logging.h>
-#include "common/libs/utils/tcp_socket.h"
-#include "host/frontend/vnc_server/blackboard.h"
-#include "host/frontend/vnc_server/frame_buffer_watcher.h"
-#include "host/frontend/vnc_server/jpeg_compressor.h"
-#include "host/frontend/vnc_server/virtual_inputs.h"
-#include "host/frontend/vnc_server/vnc_client_connection.h"
-#include "host/frontend/vnc_server/vnc_utils.h"
-
-using cuttlefish::vnc::VncServer;
-
-VncServer::VncServer(int port, bool aggressive,
-                     cuttlefish::vnc::ScreenConnector& screen_connector,
-                     cuttlefish::confui::HostVirtualInput& confui_input)
-    : server_(port),
-      virtual_inputs_(VirtualInputs::Get(confui_input)),
-      frame_buffer_watcher_{&bb_, screen_connector},
-      aggressive_{aggressive} {}
-
-void VncServer::MainLoop() {
-  while (true) {
-    LOG(DEBUG) << "Awaiting connections";
-    auto connection = server_.Accept();
-    LOG(DEBUG) << "Accepted a client connection";
-    StartClient(std::move(connection));
-  }
-}
-
-void VncServer::StartClient(ClientSocket sock) {
-  std::thread t(&VncServer::StartClientThread, this, std::move(sock));
-  t.detach();
-}
-
-void VncServer::StartClientThread(ClientSocket sock) {
-  // NOTE if VncServer is expected to be destroyed, we have a problem here.
-  // All of the client threads will be pointing to the VncServer's
-  // data members. In the current setup, if the VncServer is destroyed with
-  // clients still running, the clients will all be left with dangling
-  // pointers.
-  frame_buffer_watcher_.IncClientCount();
-  VncClientConnection client(std::move(sock), virtual_inputs_, &bb_,
-                             aggressive_);
-  client.StartSession();
-  frame_buffer_watcher_.DecClientCount();
-}
diff --git a/host/frontend/vnc_server/vnc_server.h b/host/frontend/vnc_server/vnc_server.h
deleted file mode 100644
index 2751fd1..0000000
--- a/host/frontend/vnc_server/vnc_server.h
+++ /dev/null
@@ -1,64 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <memory>
-#include <string>
-#include <thread>
-#include <utility>
-
-#include "common/libs/utils/tcp_socket.h"
-#include "host/frontend/vnc_server/blackboard.h"
-#include "host/frontend/vnc_server/frame_buffer_watcher.h"
-#include "host/frontend/vnc_server/jpeg_compressor.h"
-#include "host/frontend/vnc_server/virtual_inputs.h"
-#include "host/frontend/vnc_server/vnc_client_connection.h"
-#include "host/frontend/vnc_server/vnc_utils.h"
-#include "host/libs/confui/host_mode_ctrl.h"
-#include "host/libs/confui/host_virtual_input.h"
-#include "host/libs/screen_connector/screen_connector.h"
-
-namespace cuttlefish {
-namespace vnc {
-
-class VncServer {
- public:
-  explicit VncServer(int port, bool aggressive,
-                     ScreenConnector& screen_connector,
-                     cuttlefish::confui::HostVirtualInput& confui_input);
-
-  VncServer(const VncServer&) = delete;
-  VncServer& operator=(const VncServer&) = delete;
-
-  [[noreturn]] void MainLoop();
-
- private:
-  void StartClient(ClientSocket sock);
-
-  void StartClientThread(ClientSocket sock);
-
-  ServerSocket server_;
-
-  std::shared_ptr<VirtualInputs> virtual_inputs_;
-  BlackBoard bb_;
-
-  FrameBufferWatcher frame_buffer_watcher_;
-  bool aggressive_{};
-};
-
-}  // namespace vnc
-}  // namespace cuttlefish
diff --git a/host/frontend/vnc_server/vnc_utils.h b/host/frontend/vnc_server/vnc_utils.h
deleted file mode 100644
index 7ec19f7..0000000
--- a/host/frontend/vnc_server/vnc_utils.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include <array>
-#include <cstdint>
-#include <memory>
-#include <utility>
-#include <vector>
-
-#include "common/libs/utils/size_utils.h"
-#include "common/libs/utils/tcp_socket.h"
-#include "host/libs/config/cuttlefish_config.h"
-#include "host/libs/screen_connector/screen_connector.h"
-
-namespace cuttlefish {
-namespace vnc {
-
-// TODO(haining) when the hwcomposer gives a sequence number type, use that
-// instead. It might just work to replace this class with a type alias
-// using StripeSeqNumber = whatever_the_hwcomposer_uses;
-class StripeSeqNumber {
- public:
-  StripeSeqNumber() = default;
-  explicit StripeSeqNumber(std::uint64_t t) : t_{t} {}
-  bool operator<(const StripeSeqNumber& other) const { return t_ < other.t_; }
-
-  bool operator<=(const StripeSeqNumber& other) const { return t_ <= other.t_; }
-
- private:
-  std::uint64_t t_{};
-};
-
-constexpr int32_t kJpegMaxQualityEncoding = -23;
-constexpr int32_t kJpegMinQualityEncoding = -32;
-
-enum class ScreenOrientation { Portrait, Landscape };
-constexpr int kNumOrientations = 2;
-
-struct Stripe {
-  int index = -1;
-  std::uint64_t frame_id{};
-  std::uint16_t x{};
-  std::uint16_t y{};
-  std::uint16_t width{};
-  std::uint16_t stride{};
-  std::uint16_t height{};
-  Message raw_data{};
-  Message jpeg_data{};
-  StripeSeqNumber seq_number{};
-  ScreenOrientation orientation{};
-};
-
-/**
- * ScreenConnectorImpl will generate this, and enqueue
- *
- * It's basically a (processed) frame, so it:
- *   must be efficiently std::move-able
- * Also, for the sake of algorithm simplicity:
- *   must be default-constructable & assignable
- *
- */
-struct VncScProcessedFrame : public ScreenConnectorFrameInfo {
-  Message raw_screen_;
-  std::deque<Stripe> stripes_;
-  std::unique_ptr<VncScProcessedFrame> Clone() {
-    VncScProcessedFrame* cloned_frame = new VncScProcessedFrame();
-    cloned_frame->raw_screen_ = raw_screen_;
-    cloned_frame->stripes_ = stripes_;
-    return std::unique_ptr<VncScProcessedFrame>(cloned_frame);
-  }
-};
-using ScreenConnector = cuttlefish::ScreenConnector<VncScProcessedFrame>;
-
-}  // namespace vnc
-}  // namespace cuttlefish
diff --git a/host/frontend/webrtc/Android.bp b/host/frontend/webrtc/Android.bp
index 42f7fa4..7547498 100644
--- a/host/frontend/webrtc/Android.bp
+++ b/host/frontend/webrtc/Android.bp
@@ -31,7 +31,7 @@
         "lib/utils.cpp",
         "lib/video_track_source_impl.cpp",
         "lib/vp8only_encoder_factory.cpp",
-        "lib/ws_connection.cpp",
+        "lib/server_connection.cpp",
     ],
     cflags: [
         // libwebrtc headers need this
@@ -65,6 +65,7 @@
         "libssl",
         "libbase",
         "libcuttlefish_fs",
+        "libfruit",
         "libjsoncpp",
         "libwebm_mkvmuxer",
     ],
@@ -77,6 +78,7 @@
         "adb_handler.cpp",
         "audio_handler.cpp",
         "bluetooth_handler.cpp",
+        "client_server.cpp",
         "connection_observer.cpp",
         "cvd_video_frame_buffer.cpp",
         "display_handler.cpp",
@@ -128,11 +130,14 @@
         "libyuv",
     ],
     shared_libs: [
+        "libext2_blkid",
+        "[email protected]",
         "libbase",
         "libcrypto",
         "libcuttlefish_fs",
         "libcuttlefish_kernel_log_monitor_utils",
         "libjsoncpp",
+        "libfruit",
         "libopus",
         "libssl",
         "libvpx",
@@ -141,3 +146,59 @@
     ],
     defaults: ["cuttlefish_buildhost_only"],
 }
+
+prebuilt_usr_share_host {
+    name: "webrtc_client.html",
+    src: "client/client.html",
+    filename: "client.html",
+    sub_dir: "webrtc/assets",
+}
+
+prebuilt_usr_share_host {
+    name: "webrtc_style.css",
+    src: "client/style.css",
+    filename: "style.css",
+    sub_dir: "webrtc/assets",
+}
+
+prebuilt_usr_share_host {
+    name: "webrtc_controls.css",
+    src: "client/controls.css",
+    filename: "controls.css",
+    sub_dir: "webrtc/assets",
+}
+
+prebuilt_usr_share_host {
+    name: "webrtc_adb.js",
+    src: "client/js/adb.js",
+    filename: "adb.js",
+    sub_dir: "webrtc/assets/js",
+}
+
+prebuilt_usr_share_host {
+    name: "webrtc_cf.js",
+    src: "client/js/cf_webrtc.js",
+    filename: "cf_webrtc.js",
+    sub_dir: "webrtc/assets/js",
+}
+
+prebuilt_usr_share_host {
+    name: "webrtc_app.js",
+    src: "client/js/app.js",
+    filename: "app.js",
+    sub_dir: "webrtc/assets/js",
+}
+
+prebuilt_usr_share_host {
+    name: "webrtc_controls.js",
+    src: "client/js/controls.js",
+    filename: "controls.js",
+    sub_dir: "webrtc/assets/js",
+}
+
+prebuilt_usr_share_host {
+    name: "webrtc_rootcanal.js",
+    src: "client/js/rootcanal.js",
+    filename: "rootcanal.js",
+    sub_dir: "webrtc/assets/js",
+}
diff --git a/host/frontend/webrtc/adb_handler.cpp b/host/frontend/webrtc/adb_handler.cpp
index c580f65..7ff55fb 100644
--- a/host/frontend/webrtc/adb_handler.cpp
+++ b/host/frontend/webrtc/adb_handler.cpp
@@ -44,7 +44,11 @@
   }
 
   auto local_client = SharedFD::SocketLocalClient(port, SOCK_STREAM);
-  CHECK(local_client->IsOpen()) << "Failed to connect to adb socket: " << local_client->StrError();
+  if (!local_client->IsOpen()) {
+    LOG(WARNING) << "Failed to connect to ADB server socket (non-Android guest?) Using /dev/null workaround."
+                 << local_client->StrError();
+    return SharedFD::Open("/dev/null", O_RDWR);
+  }
   return local_client;
 }
 
diff --git a/host/frontend/webrtc/audio_handler.cpp b/host/frontend/webrtc/audio_handler.cpp
index 1cd8938..52a2294 100644
--- a/host/frontend/webrtc/audio_handler.cpp
+++ b/host/frontend/webrtc/audio_handler.cpp
@@ -484,18 +484,69 @@
       buffer.SendStatus(AudioStatus::VIRTIO_SND_S_OK, 0, buffer.len());
       return;
     }
-    auto bytes_per_sample = stream_desc.bits_per_sample / 8;
-    auto samples_per_channel =
-        buffer.len() / stream_desc.channels / bytes_per_sample;
+    const auto bytes_per_sample = stream_desc.bits_per_sample / 8;
+    const auto samples_per_channel = stream_desc.sample_rate / 100;
+    const auto bytes_per_request =
+        samples_per_channel * bytes_per_sample * stream_desc.channels;
     bool muted = false;
-    auto res = audio_source_->GetMoreAudioData(
-        const_cast<uint8_t*>(buffer.get()), bytes_per_sample,
-        samples_per_channel, stream_desc.channels, stream_desc.sample_rate,
-        muted);
-    if (res < 0) {
-      // This is likely a recoverable error, log the error but don't let the VMM
-      // know about it so that it doesn't crash.
-      LOG(ERROR) << "Failed to receive audio data from client";
+    size_t bytes_read = 0;
+    auto& holding_buffer = stream_descs_[stream_id].buffer;
+    auto rx_buffer = const_cast<uint8_t*>(buffer.get());
+    if (!holding_buffer.empty()) {
+      // Consume any bytes remaining from previous requests
+      bytes_read += holding_buffer.Take(rx_buffer + bytes_read,
+                                        buffer.len() - bytes_read);
+    }
+    while (buffer.len() - bytes_read >= bytes_per_request) {
+      // Skip the holding buffer in as many reads as possible to avoid the extra
+      // copies
+      auto write_pos = rx_buffer + bytes_read;
+      auto res = audio_source_->GetMoreAudioData(
+          write_pos, bytes_per_sample, samples_per_channel,
+          stream_desc.channels, stream_desc.sample_rate, muted);
+      if (res < 0) {
+        // This is likely a recoverable error, log the error but don't let the
+        // VMM know about it so that it doesn't crash.
+        LOG(ERROR) << "Failed to receive audio data from client";
+        break;
+      }
+      if (muted) {
+        // The source is muted, just fill the buffer with zeros and return
+        memset(rx_buffer + bytes_read, 0, buffer.len() - bytes_read);
+        bytes_read = buffer.len();
+        break;
+      }
+      auto bytes_received = res * bytes_per_sample * stream_desc.channels;
+      bytes_read += bytes_received;
+    }
+    if (bytes_read < buffer.len()) {
+      // There is some buffer left to fill, but it's less than 10ms, read into
+      // holding buffer to ensure the remainder is kept around for future reads
+      auto write_pos = holding_buffer.data();
+      // Holding buffer is the exact size we need to read into and is emptied
+      // before we try to read into it.
+      CHECK(holding_buffer.freeCapacity() >= bytes_per_request)
+          << "Buffer too small for receiving audio";
+      auto res = audio_source_->GetMoreAudioData(
+          write_pos, bytes_per_sample, samples_per_channel,
+          stream_desc.channels, stream_desc.sample_rate, muted);
+      if (res < 0) {
+        // This is likely a recoverable error, log the error but don't let the
+        // VMM know about it so that it doesn't crash.
+        LOG(ERROR) << "Failed to receive audio data from client";
+      } else if (muted) {
+        // The source is muted, just fill the buffer with zeros and return
+        memset(rx_buffer + bytes_read, 0, buffer.len() - bytes_read);
+        bytes_read = buffer.len();
+      } else {
+        auto bytes_received = res * bytes_per_sample * stream_desc.channels;
+        holding_buffer.count += bytes_received;
+        bytes_read += holding_buffer.Take(rx_buffer + bytes_read,
+                                          buffer.len() - bytes_read);
+        // If the entire buffer is not full by now there is a bug above
+        // somewhere
+        CHECK(bytes_read == buffer.len()) << "Failed to read entire buffer";
+      }
     }
   }
   buffer.SendStatus(AudioStatus::VIRTIO_SND_S_OK, 0, buffer.len());
@@ -514,12 +565,24 @@
   return added_len;
 }
 
+size_t AudioHandler::HoldingBuffer::Take(uint8_t* dst, size_t len) {
+  auto n = std::min(len, count);
+  std::copy(buffer.begin(), buffer.begin() + n, dst);
+  std::copy(buffer.begin() + n, buffer.begin() + count, buffer.begin());
+  count -= n;
+  return n;
+}
+
 bool AudioHandler::HoldingBuffer::empty() const { return count == 0; }
 
 bool AudioHandler::HoldingBuffer::full() const {
   return count == buffer.size();
 }
 
+size_t AudioHandler::HoldingBuffer::freeCapacity() const {
+  return buffer.size() - count;
+}
+
 uint8_t* AudioHandler::HoldingBuffer::data() { return buffer.data(); }
 
 }  // namespace cuttlefish
diff --git a/host/frontend/webrtc/audio_handler.h b/host/frontend/webrtc/audio_handler.h
index 4da645c..fc4734a 100644
--- a/host/frontend/webrtc/audio_handler.h
+++ b/host/frontend/webrtc/audio_handler.h
@@ -35,9 +35,12 @@
 
     void Reset(size_t size);
     size_t Add(const volatile uint8_t* data, size_t max_len);
+    size_t Take(uint8_t* dst, size_t len);
     bool empty() const;
     bool full() const;
+    size_t freeCapacity() const;
     uint8_t* data();
+    uint8_t* end();
   };
   struct StreamDesc {
     std::mutex mtx;
diff --git a/host/frontend/webrtc/client/client.html b/host/frontend/webrtc/client/client.html
new file mode 100644
index 0000000..4039c26
--- /dev/null
+++ b/host/frontend/webrtc/client/client.html
@@ -0,0 +1,156 @@
+<?--
+ Copyright (C) 2019 The Android Open Source Project
+
+ 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.
+ -->
+
+<html>
+    <head>
+        <link rel="stylesheet" type="text/css" href="style.css" >
+        <link rel="stylesheet" type="text/css" href="controls.css" >
+        <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons+Outlined">
+        <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
+    </head>
+
+    <body>
+      <div id="loader"></div>
+      <div id="error-message-div">
+        <h3 id="error-message" class="hidden">
+          <span class="material-icons close-btn">close</span>
+        </h3>
+      </div>
+      <section id="device-connection">
+        <div id='header'>
+          <div id='app-controls'>
+            <div id="keyboard-capture-control" title="Capture Keyboard"></div>
+            <div id="mic-capture-control" title="Capture Microphone"></div>
+            <div id="camera-control" title="Capture Camera"></div>
+            <audio controls id="device-audio"></audio>
+            <div id="record-video-control" title="Capture Display as Webm"></div>
+          </div>
+          <div id='status-div'>
+            <h3 id='status-message' class='connecting'>Connecting to device</h3>
+          </div>
+        </div>
+        <div id='controls-and-displays'>
+          <div id='control-panel-default-buttons' class='control-panel-column'>
+            <button id='device-details-button' title='Device Details' class='material-icons'>
+              settings
+            </button>
+            <button id='bluetooth-modal-button' title='Bluetooth console' class='material-icons'>
+              settings_bluetooth
+            </button>
+          </div>
+          <div id='control-panel-custom-buttons' class='control-panel-column'></div>
+          <div id='device-displays'>
+          </div>
+        </div>
+      </section>
+      <div id='device-details-modal' class='modal'>
+        <div id='device-details-modal-header' class='modal-header'>
+          <h2>Device Details</h2>
+          <button id='device-details-close' title='Close' class='material-icons modal-close'>close</button>
+        </div>
+        <hr>
+        <h3>Hardware Configuration</h3>
+        <span id='device-details-hardware'>unknown</span>
+      </div>
+
+      <div id='bluetooth-modal' class='modal-wrapper'>
+        <div id='bluetooth-prompt' class='modal'>
+          <div id='bluetooth-prompt-header' class='modal-header'>
+            <h2>Bluetooth</h2>
+            <button id='bluetooth-prompt-close' title='Close' class='material-icons modal-close'>close</button>
+          </div>
+          <div>
+            <div id='bluetooth-prompt-text' class='bluetooth-text'>
+            We have enabled a BT Wizard to simplify adding a<br>bluetooth device.<br>
+            Alternatively, you can enter the BT Console if you<br>want to exercise full control.</div><br>
+            <div class='bluetooth-button'>
+              <button id='bluetooth-prompt-wizard' title='Start Wizard' class='modal-button-highlight'>Start Wizard</button>
+              <button id='bluetooth-prompt-list' title='Device List' class='modal-button'>Device List</button>
+              <button id='bluetooth-prompt-console' title='BT Console' class='modal-button'>BT Console</button>
+            </div>
+          </div>
+        </div>
+        <div id='bluetooth-wizard' class='modal'>
+          <div id='bluetooth-wizard-modal-header' class='modal-header'>
+            <h2>BT Wizard</h2>
+            <button id='bluetooth-wizard-close' title='Close' class='material-icons modal-close'>close</button>
+          </div>
+          <div>
+            <div class='bluetooth-text-field'><input type="text" id='bluetooth-wizard-name' placeholder="Device Name"></input></div>
+            <div class='bluetooth-drop-down'>
+              <select id='bluetooth-wizard-type' validate-mac="true" required>
+                <option value="beacon">Beacon</option>
+                <option value="beacon_swarm">Beacon Swarm</option>
+                <!-- Disabled because they were "started but never finished" (according to mylesgw@)
+                <option value="car_kit">Car Kit</option>
+                <option value="classic">Classic</option> -->
+                <option value="keyboard">Keyboard</option>
+                <option value="remote_loopback">Remote Loopback</option>
+                <option value="scripted_beacon">Scripted Beacon</option>
+                <!-- Disabled because it will never show up in the UI
+                <option value="sniffer">Sniffer</option> -->
+              </select>
+            </div>
+            <div class='bluetooth-text-field'><input type="text" id='bluetooth-wizard-mac' placeholder="Device MAC" validate-mac="true" required></input><span></span></div>
+            <div class='bluetooth-button'>
+              <button id='bluetooth-wizard-device' title='Add Device' class='modal-button-highlight' disabled>Add Device</button>
+              <button id='bluetooth-wizard-cancel' title='Cancel' class='modal-button'>Cancel</button>
+            </div>
+          </div>
+        </div>
+        <div id='bluetooth-wizard-confirm' class='modal'>
+          <div id='bluetooth-wizard-confirm-header' class='modal-header'>
+            <h2>BT Wizard</h2>
+            <button id='bluetooth-wizard-confirm-close' title='Close' class='material-icons modal-close'>close</button>
+          </div>
+          <div id='bluetooth-wizard-text' class='bluetooth-text'>Device added. See device details below.</div><br>
+          <div class='bluetooth-text'>
+            <p>Name: <b>GKeyboard</b></p>
+            <p>Type: <b>Keyboard</b></p>
+            <p>MAC Addr: <b>be:ac:01:55:00:03</b></p>
+          </div>
+          <div class='bluetooth-button'><button id='bluetooth-wizard-another' title='Add Another' class='modal-button-highlight'>Add Another</button></div>
+        </div>
+        <div id='bluetooth-list' class='modal'>
+          <div id='bluetooth-list-header' class='modal-header'>
+            <h2>Device List</h2>
+            <button id='bluetooth-list-close' title='Close' class='material-icons modal-close'>close</button>
+          </div>
+          <div class='bluetooth-text'>
+            <div><button title="Delete" data-device-id="delete" class="bluetooth-list-trash material-icons">delete</button>GKeyboard | Keyboard | be:ac:01:55:00:03</div>
+            <div><button title="Delete" data-device-id="delete" class="bluetooth-list-trash material-icons">delete</button>GHeadphones | Audio | dc:fa:32:00:55:02</div>
+          </div>
+        </div>
+        <div id='bluetooth-console' class='modal'>
+          <div id='bluetooth-console-modal-header' class='modal-header'>
+            <h2>BT Console</h2>
+            <button id='bluetooth-console-close' title='Close' class='material-icons modal-close'>close</button>
+          </div>
+          <div>
+            <div colspan='2'><textarea id='bluetooth-console-view' readonly rows='10' cols='60'></textarea></div>
+            <div width='1'><p id='bluetooth-console-cmd-label'>Command:</p></div>
+            <div width='100'><input id='bluetooth-console-input' type='text'></input></div>
+          </div>
+        </div>
+      </div>
+       <script src="js/adb.js"></script>
+       <script src="js/rootcanal.js"></script>
+       <script src="js/cf_webrtc.js" type="module"></script>
+       <script src="js/controls.js"></script>
+       <script src="js/app.js"></script>
+    </body>
+</html>
diff --git a/host/frontend/webrtc_operator/assets/controls.css b/host/frontend/webrtc/client/controls.css
similarity index 100%
rename from host/frontend/webrtc_operator/assets/controls.css
rename to host/frontend/webrtc/client/controls.css
diff --git a/host/frontend/webrtc/client/js/adb.js b/host/frontend/webrtc/client/js/adb.js
new file mode 100644
index 0000000..b011114
--- /dev/null
+++ b/host/frontend/webrtc/client/js/adb.js
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * 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.
+ */
+
+let adb_ws;
+
+let utf8Encoder = new TextEncoder();
+let utf8Decoder = new TextDecoder();
+
+const A_CNXN = 0x4e584e43;
+const A_OPEN = 0x4e45504f;
+const A_WRTE = 0x45545257;
+const A_OKAY = 0x59414b4f;
+
+const kLocalChannelId = 666;
+
+let array = new Uint8Array();
+
+function setU32LE(array, offset, x) {
+  array[offset] = x & 0xff;
+  array[offset + 1] = (x >> 8) & 0xff;
+  array[offset + 2] = (x >> 16) & 0xff;
+  array[offset + 3] = x >> 24;
+}
+
+function getU32LE(array, offset) {
+  let x = array[offset] | (array[offset + 1] << 8) | (array[offset + 2] << 16) |
+      (array[offset + 3] << 24);
+
+  return x >>> 0;  // convert signed to unsigned if necessary.
+}
+
+function computeChecksum(array) {
+  let sum = 0;
+  let i;
+  for (i = 0; i < array.length; ++i) {
+    sum = ((sum + array[i]) & 0xffffffff) >>> 0;
+  }
+
+  return sum;
+}
+
+function createAdbMessage(command, arg0, arg1, payload) {
+  let arrayBuffer = new ArrayBuffer(24 + payload.length);
+  let array = new Uint8Array(arrayBuffer);
+  setU32LE(array, 0, command);
+  setU32LE(array, 4, arg0);
+  setU32LE(array, 8, arg1);
+  setU32LE(array, 12, payload.length);
+  setU32LE(array, 16, computeChecksum(payload));
+  setU32LE(array, 20, command ^ 0xffffffff);
+  array.set(payload, 24);
+
+  return arrayBuffer;
+}
+
+function adbOpenConnection() {
+  let systemIdentity = utf8Encoder.encode('Cray_II:1234:whatever');
+
+  let arrayBuffer =
+      createAdbMessage(A_CNXN, 0x1000000, 256 * 1024, systemIdentity);
+
+  adb_ws.send(arrayBuffer);
+}
+
+function adbShell(command) {
+  let destination = utf8Encoder.encode('shell:' + command);
+
+  let arrayBuffer = createAdbMessage(A_OPEN, kLocalChannelId, 0, destination);
+  adb_ws.send(arrayBuffer);
+  awaitConnection();
+}
+
+function adbSendOkay(remoteId) {
+  let payload = new Uint8Array(0);
+
+  let arrayBuffer =
+      createAdbMessage(A_OKAY, kLocalChannelId, remoteId, payload);
+
+  adb_ws.send(arrayBuffer);
+}
+
+function JoinArrays(arr1, arr2) {
+  let arr = new Uint8Array(arr1.length + arr2.length);
+  arr.set(arr1, 0);
+  arr.set(arr2, arr1.length);
+  return arr;
+}
+
+// Simple lifecycle management that executes callbacks based on connection
+// state.
+//
+// Any attempt to initiate a command (e.g. creating a connection, sending a
+// message) (re)starts a timer. Any response back from any command stops that
+// timer.
+const timeoutMs = 3000;
+let connectedCb;
+let disconnectedCb;
+let disconnectedTimeout;
+function awaitConnection() {
+  clearTimeout(disconnectedTimeout);
+  if (disconnectedCb) {
+    disconnectedTimeout = setTimeout(disconnectedCb, timeoutMs);
+  }
+}
+function connected() {
+  if (disconnectedTimeout) {
+    clearTimeout(disconnectedTimeout);
+  }
+  if (connectedCb) {
+    connectedCb();
+  }
+}
+
+function adbOnMessage(arrayBuffer) {
+  // console.debug("adb_ws: onmessage (" + arrayBuffer.byteLength + " bytes)");
+  array = JoinArrays(array, new Uint8Array(arrayBuffer));
+
+  while (array.length > 0) {
+    if (array.length < 24) {
+      // Incomplete package, must wait for more data.
+      return;
+    }
+
+    let command = getU32LE(array, 0);
+    let magic = getU32LE(array, 20);
+
+    if (command != ((magic ^ 0xffffffff) >>> 0)) {
+      console.error('adb message command vs magic failed.');
+      console.error('command = ' + command + ', magic = ' + magic);
+      return;
+    }
+
+    let payloadLength = getU32LE(array, 12);
+
+    if (array.length < 24 + payloadLength) {
+      // Incomplete package, must wait for more data.
+      return;
+    }
+
+    let payloadChecksum = getU32LE(array, 16);
+    let checksum = computeChecksum(array.slice(24));
+
+    if (payloadChecksum != checksum) {
+      console.error('adb message checksum mismatch.');
+      // This can happen if a shell command executes while another
+      // channel is receiving data.
+    }
+
+    switch (command) {
+      case A_CNXN: {
+        console.info('WebRTC adb connected.');
+        connected();
+        break;
+      }
+
+      case A_OKAY: {
+        let remoteId = getU32LE(array, 4);
+        console.debug('WebRTC adb channel created w/ remoteId ' + remoteId);
+        connected();
+        break;
+      }
+
+      case A_WRTE: {
+        let remoteId = getU32LE(array, 4);
+        adbSendOkay(remoteId);
+        break;
+      }
+    }
+    array = array.subarray(24 + payloadLength, array.length);
+  }
+}
+
+function init_adb(devConn, ccb = connectedCb, dcb = disconnectedCb) {
+  if (adb_ws) return;
+
+  adb_ws = {
+    send: function(buffer) {
+      devConn.sendAdbMessage(buffer);
+    }
+  };
+  connectedCb = ccb;
+  disconnectedCb = dcb;
+  awaitConnection();
+
+  devConn.onAdbMessage(msg => adbOnMessage(msg));
+
+  adbOpenConnection();
+}
diff --git a/host/frontend/webrtc/client/js/app.js b/host/frontend/webrtc/client/js/app.js
new file mode 100644
index 0000000..2b9a178
--- /dev/null
+++ b/host/frontend/webrtc/client/js/app.js
@@ -0,0 +1,1017 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * 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.
+ */
+
+'use strict';
+
+async function ConnectDevice(deviceId, serverConnector) {
+  console.debug('Connect: ' + deviceId);
+  // Prepare messages in case of connection failure
+  let connectionAttemptDuration = 0;
+  const intervalMs = 15000;
+  let connectionInterval = setInterval(() => {
+    connectionAttemptDuration += intervalMs;
+    if (connectionAttemptDuration > 30000) {
+      showError(
+          'Connection should have occurred by now. ' +
+          'Please attempt to restart the guest device.');
+      clearInterval(connectionInterval);
+    } else if (connectionAttemptDuration > 15000) {
+      showWarning('Connection is taking longer than expected');
+    }
+  }, intervalMs);
+
+  let module = await import('./cf_webrtc.js');
+  let deviceConnection = await module.Connect(deviceId, serverConnector);
+  console.info('Connected to ' + deviceId);
+  clearInterval(connectionInterval);
+  return deviceConnection;
+}
+
+function setupMessages() {
+  let closeBtn = document.querySelector('#error-message .close-btn');
+  closeBtn.addEventListener('click', evt => {
+    evt.target.parentElement.className = 'hidden';
+  });
+}
+
+function showMessage(msg, className) {
+  let element = document.getElementById('error-message');
+  if (element.childNodes.length < 2) {
+    // First time, no text node yet
+    element.insertAdjacentText('afterBegin', msg);
+  } else {
+    element.childNodes[0].data = msg;
+  }
+  element.className = className;
+}
+
+function showWarning(msg) {
+  showMessage(msg, 'warning');
+}
+
+function showError(msg) {
+  showMessage(msg, 'error');
+}
+
+
+class DeviceDetailsUpdater {
+  #element;
+
+  constructor() {
+    this.#element = document.getElementById('device-details-hardware');
+  }
+
+  setHardwareDetailsText(text) {
+    this.#element.dataset.hardwareDetailsText = text;
+    return this;
+  }
+
+  setDeviceStateDetailsText(text) {
+    this.#element.dataset.deviceStateDetailsText = text;
+    return this;
+  }
+
+  update() {
+    this.#element.textContent =
+        [
+          this.#element.dataset.hardwareDetailsText,
+          this.#element.dataset.deviceStateDetailsText,
+        ].filter(e => e /*remove empty*/)
+            .join('\n');
+  }
+}  // DeviceDetailsUpdater
+
+class DeviceControlApp {
+  #deviceConnection = {};
+  #currentRotation = 0;
+  #displayDescriptions = [];
+  #buttons = {};
+  #recording = {};
+  #phys = {};
+  #deviceCount = 0;
+
+  constructor(deviceConnection) {
+    this.#deviceConnection = deviceConnection;
+  }
+
+  start() {
+    console.debug('Device description: ', this.#deviceConnection.description);
+    this.#deviceConnection.onControlMessage(msg => this.#onControlMessage(msg));
+    let keyboardCaptureCtrl = createToggleControl(
+        document.getElementById('keyboard-capture-control'), 'keyboard');
+    let micCaptureCtrl = createToggleControl(
+        document.getElementById('mic-capture-control'), 'mic');
+    let cameraCtrl = createToggleControl(
+        document.getElementById('camera-control'), 'videocam');
+    let videoCaptureCtrl = createToggleControl(
+        document.getElementById('record-video-control'), 'movie_creation');
+
+    keyboardCaptureCtrl.OnClick(
+        enabled => this.#onKeyboardCaptureToggle(enabled));
+    micCaptureCtrl.OnClick(enabled => this.#onMicCaptureToggle(enabled));
+    cameraCtrl.OnClick(enabled => this.#onCameraCaptureToggle(enabled));
+    videoCaptureCtrl.OnClick(enabled => this.#onVideoCaptureToggle(enabled));
+
+    this.#showDeviceUI();
+  }
+
+  #showDeviceUI() {
+    window.onresize = evt => this.#resizeDeviceDisplays();
+    // Set up control panel buttons
+    this.#buttons = {};
+    this.#buttons['power'] = createControlPanelButton(
+        'power', 'Power', 'power_settings_new',
+        evt => this.#onControlPanelButton(evt));
+    this.#buttons['home'] = createControlPanelButton(
+        'home', 'Home', 'home', evt => this.#onControlPanelButton(evt));
+    this.#buttons['menu'] = createControlPanelButton(
+        'menu', 'Menu', 'menu', evt => this.#onControlPanelButton(evt));
+    this.#buttons['rotate'] = createControlPanelButton(
+        'rotate', 'Rotate', 'screen_rotation',
+        evt => this.#onRotateButton(evt));
+    this.#buttons['rotate'].adb = true;
+    this.#buttons['volumemute'] = createControlPanelButton(
+        'volumemute', 'Volume Mute', 'volume_mute',
+        evt => this.#onControlPanelButton(evt));
+    this.#buttons['volumedown'] = createControlPanelButton(
+        'volumedown', 'Volume Down', 'volume_down',
+        evt => this.#onControlPanelButton(evt));
+    this.#buttons['volumeup'] = createControlPanelButton(
+        'volumeup', 'Volume Up', 'volume_up',
+        evt => this.#onControlPanelButton(evt));
+
+    createModalButton(
+        'device-details-button', 'device-details-modal',
+        'device-details-close');
+    createModalButton(
+        'bluetooth-modal-button', 'bluetooth-prompt',
+        'bluetooth-prompt-close');
+    createModalButton(
+        'bluetooth-prompt-wizard', 'bluetooth-wizard',
+        'bluetooth-wizard-close', 'bluetooth-prompt');
+    createModalButton(
+        'bluetooth-wizard-device', 'bluetooth-wizard-confirm',
+        'bluetooth-wizard-confirm-close', 'bluetooth-wizard');
+    createModalButton(
+        'bluetooth-wizard-another', 'bluetooth-wizard',
+        'bluetooth-wizard-close', 'bluetooth-wizard-confirm');
+    createModalButton(
+        'bluetooth-prompt-list', 'bluetooth-list',
+        'bluetooth-list-close', 'bluetooth-prompt');
+    createModalButton(
+        'bluetooth-prompt-console', 'bluetooth-console',
+        'bluetooth-console-close', 'bluetooth-prompt');
+    createModalButton(
+        'bluetooth-wizard-cancel', 'bluetooth-prompt',
+        'bluetooth-wizard-close', 'bluetooth-wizard');
+
+    positionModal('device-details-button', 'bluetooth-modal');
+    positionModal('device-details-button', 'bluetooth-prompt');
+    positionModal('device-details-button', 'bluetooth-wizard');
+    positionModal('device-details-button', 'bluetooth-wizard-confirm');
+    positionModal('device-details-button', 'bluetooth-list');
+    positionModal('device-details-button', 'bluetooth-console');
+
+    createButtonListener('bluetooth-prompt-list', null, this.#deviceConnection,
+      evt => this.#onRootCanalCommand(this.#deviceConnection, "list", evt));
+    createButtonListener('bluetooth-wizard-device', null, this.#deviceConnection,
+      evt => this.#onRootCanalCommand(this.#deviceConnection, "add", evt));
+    createButtonListener('bluetooth-list-trash', null, this.#deviceConnection,
+      evt => this.#onRootCanalCommand(this.#deviceConnection, "del", evt));
+    createButtonListener('bluetooth-prompt-wizard', null, this.#deviceConnection,
+      evt => this.#onRootCanalCommand(this.#deviceConnection, "list", evt));
+    createButtonListener('bluetooth-wizard-another', null, this.#deviceConnection,
+      evt => this.#onRootCanalCommand(this.#deviceConnection, "list", evt));
+
+    if (this.#deviceConnection.description.custom_control_panel_buttons.length >
+        0) {
+      document.getElementById('control-panel-custom-buttons').style.display =
+          'flex';
+      for (const button of this.#deviceConnection.description
+               .custom_control_panel_buttons) {
+        if (button.shell_command) {
+          // This button's command is handled by sending an ADB shell command.
+          this.#buttons[button.command] = createControlPanelButton(
+              button.command, button.title, button.icon_name,
+              e => this.#onCustomShellButton(button.shell_command, e),
+              'control-panel-custom-buttons');
+          this.#buttons[button.command].adb = true;
+        } else if (button.device_states) {
+          // This button corresponds to variable hardware device state(s).
+          this.#buttons[button.command] = createControlPanelButton(
+              button.command, button.title, button.icon_name,
+              this.#getCustomDeviceStateButtonCb(button.device_states),
+              'control-panel-custom-buttons');
+          for (const device_state of button.device_states) {
+            // hinge_angle is currently injected via an adb shell command that
+            // triggers a guest binary.
+            if ('hinge_angle_value' in device_state) {
+              this.#buttons[button.command].adb = true;
+            }
+          }
+        } else {
+          // This button's command is handled by custom action server.
+          this.#buttons[button.command] = createControlPanelButton(
+              button.command, button.title, button.icon_name,
+              evt => this.#onControlPanelButton(evt),
+              'control-panel-custom-buttons');
+        }
+      }
+    }
+
+    // Set up displays
+    this.#createDeviceDisplays();
+
+    // Set up audio
+    const deviceAudio = document.getElementById('device-audio');
+    for (const audio_desc of this.#deviceConnection.description.audio_streams) {
+      let stream_id = audio_desc.stream_id;
+      this.#deviceConnection.getStream(stream_id)
+          .then(stream => {
+            deviceAudio.srcObject = stream;
+            let playPromise = deviceAudio.play();
+            if (playPromise !== undefined) {
+              playPromise.catch(error => {
+                showWarning(
+                    'Audio failed to play automatically, click on the play button to activate it');
+              });
+            }
+          })
+          .catch(e => console.error('Unable to get audio stream: ', e));
+    }
+
+    // Set up touch input
+    this.#startMouseTracking();
+
+    this.#updateDeviceHardwareDetails(
+        this.#deviceConnection.description.hardware);
+
+    // Show the error message and disable buttons when the WebRTC connection
+    // fails.
+    this.#deviceConnection.onConnectionStateChange(state => {
+      if (state == 'disconnected' || state == 'failed') {
+        this.#showWebrtcError();
+      }
+    });
+
+    let bluetoothConsole =
+        cmdConsole('bluetooth-console-view', 'bluetooth-console-input');
+    bluetoothConsole.addCommandListener(cmd => {
+      let inputArr = cmd.split(' ');
+      let command = inputArr[0];
+      inputArr.shift();
+      let args = inputArr;
+      this.#deviceConnection.sendBluetoothMessage(
+          createRootcanalMessage(command, args));
+    });
+    this.#deviceConnection.onBluetoothMessage(msg => {
+      let decoded = decodeRootcanalMessage(msg);
+      let deviceCount = btUpdateDeviceList(decoded);
+      if (deviceCount > 0) {
+        this.#deviceCount = deviceCount;
+        createButtonListener('bluetooth-list-trash', null, this.#deviceConnection,
+           evt => this.#onRootCanalCommand(this.#deviceConnection, "del", evt));
+      }
+      btUpdateAdded(decoded);
+      let phyList = btParsePhys(decoded);
+      if (phyList) {
+        this.#phys = phyList;
+      }
+      bluetoothConsole.addLine(decoded);
+    });
+  }
+
+  #onRootCanalCommand(deviceConnection, cmd, evt) {
+    if (cmd == "list") {
+      deviceConnection.sendBluetoothMessage(createRootcanalMessage("list", []));
+    }
+    if (cmd == "del") {
+      let id = evt.srcElement.getAttribute("data-device-id");
+      deviceConnection.sendBluetoothMessage(createRootcanalMessage("del", [id]));
+      deviceConnection.sendBluetoothMessage(createRootcanalMessage("list", []));
+    }
+    if (cmd == "add") {
+      let name = document.getElementById('bluetooth-wizard-name').value;
+      let type = document.getElementById('bluetooth-wizard-type').value;
+      if (type == "remote_loopback") {
+        deviceConnection.sendBluetoothMessage(createRootcanalMessage("add", [type]));
+      } else {
+        let mac = document.getElementById('bluetooth-wizard-mac').value;
+        deviceConnection.sendBluetoothMessage(createRootcanalMessage("add", [type, mac]));
+      }
+      let phyId = this.#phys["LOW_ENERGY"].toString();
+      if (type == "remote_loopback") {
+        phyId = this.#phys["BR_EDR"].toString();
+      }
+      let devId = this.#deviceCount.toString();
+      this.#deviceCount++;
+      deviceConnection.sendBluetoothMessage(createRootcanalMessage("add_device_to_phy", [devId, phyId]));
+    }
+  }
+
+  #showWebrtcError() {
+    document.getElementById('status-message').className = 'error';
+    document.getElementById('status-message').textContent =
+        'No connection to the guest device. ' +
+        'Please ensure the WebRTC process on the host machine is active.';
+    document.getElementById('status-message').style.visibility = 'visible';
+    const deviceDisplays = document.getElementById('device-displays');
+    deviceDisplays.style.display = 'none';
+    for (const [_, button] of Object.entries(this.#buttons)) {
+      button.disabled = true;
+    }
+  }
+
+  #takePhoto() {
+    const imageCapture = this.#deviceConnection.imageCapture;
+    if (imageCapture) {
+      const photoSettings = {
+        imageWidth: this.#deviceConnection.cameraWidth,
+        imageHeight: this.#deviceConnection.cameraHeight
+      };
+      imageCapture.takePhoto(photoSettings)
+          .then(blob => blob.arrayBuffer())
+          .then(buffer => this.#deviceConnection.sendOrQueueCameraData(buffer))
+          .catch(error => console.error(error));
+    }
+  }
+
+  #getCustomDeviceStateButtonCb(device_states) {
+    let states = device_states;
+    let index = 0;
+    return e => {
+      if (e.type == 'mousedown') {
+        // Reset any overridden device state.
+        adbShell('cmd device_state state reset');
+        // Send a device_state message for the current state.
+        let message = {
+          command: 'device_state',
+          ...states[index],
+        };
+        this.#deviceConnection.sendControlMessage(JSON.stringify(message));
+        console.debug('Control message sent: ', JSON.stringify(message));
+        let lidSwitchOpen = null;
+        if ('lid_switch_open' in states[index]) {
+          lidSwitchOpen = states[index].lid_switch_open;
+        }
+        let hingeAngle = null;
+        if ('hinge_angle_value' in states[index]) {
+          hingeAngle = states[index].hinge_angle_value;
+          // TODO(b/181157794): Use a custom Sensor HAL for hinge_angle
+          // injection instead of this guest binary.
+          adbShell(
+              '/vendor/bin/cuttlefish_sensor_injection hinge_angle ' +
+              states[index].hinge_angle_value);
+        }
+        // Update the Device Details view.
+        this.#updateDeviceStateDetails(lidSwitchOpen, hingeAngle);
+        // Cycle to the next state.
+        index = (index + 1) % states.length;
+      }
+    }
+  }
+
+  #resizeDeviceDisplays() {
+    // Padding between displays.
+    const deviceDisplayWidthPadding = 10;
+    // Padding for the display info above each display video.
+    const deviceDisplayHeightPadding = 38;
+
+    let deviceDisplayList = document.getElementsByClassName('device-display');
+    let deviceDisplayVideoList =
+        document.getElementsByClassName('device-display-video');
+    let deviceDisplayInfoList =
+        document.getElementsByClassName('device-display-info');
+
+    const deviceDisplays = document.getElementById('device-displays');
+    const rotationDegrees = this.#getTransformRotation(deviceDisplays);
+    const rotationRadians = rotationDegrees * Math.PI / 180;
+
+    // Auto-scale the screen based on window size.
+    let availableWidth = deviceDisplays.clientWidth;
+    let availableHeight = deviceDisplays.clientHeight - deviceDisplayHeightPadding;
+
+    // Reserve space for padding between the displays.
+    availableWidth = availableWidth -
+        (this.#displayDescriptions.length * deviceDisplayWidthPadding);
+
+    // Loop once over all of the displays to compute the total space needed.
+    let neededWidth = 0;
+    let neededHeight = 0;
+    for (let i = 0; i < deviceDisplayList.length; i++) {
+      let deviceDisplayDescription = this.#displayDescriptions[i];
+      let deviceDisplayVideo = deviceDisplayVideoList[i];
+
+      const originalDisplayWidth = deviceDisplayDescription.x_res;
+      const originalDisplayHeight = deviceDisplayDescription.y_res;
+
+      const neededBoundingBoxWidth =
+          Math.abs(Math.cos(rotationRadians) * originalDisplayWidth) +
+          Math.abs(Math.sin(rotationRadians) * originalDisplayHeight);
+      const neededBoundingBoxHeight =
+          Math.abs(Math.sin(rotationRadians) * originalDisplayWidth) +
+          Math.abs(Math.cos(rotationRadians) * originalDisplayHeight);
+
+      neededWidth = neededWidth + neededBoundingBoxWidth;
+      neededHeight = Math.max(neededHeight, neededBoundingBoxHeight);
+    }
+
+    const scaling =
+        Math.min(availableWidth / neededWidth, availableHeight / neededHeight);
+
+    // Loop again over all of the displays to set the sizes and positions.
+    let deviceDisplayLeftOffset = 0;
+    for (let i = 0; i < deviceDisplayList.length; i++) {
+      let deviceDisplay = deviceDisplayList[i];
+      let deviceDisplayVideo = deviceDisplayVideoList[i];
+      let deviceDisplayInfo = deviceDisplayInfoList[i];
+      let deviceDisplayDescription = this.#displayDescriptions[i];
+
+      let rotated = this.#currentRotation == 1 ? ' (Rotated)' : '';
+      deviceDisplayInfo.textContent = `Display ${i} - ` +
+          `${deviceDisplayDescription.x_res}x` +
+          `${deviceDisplayDescription.y_res} ` +
+          `(${deviceDisplayDescription.dpi} DPI)${rotated}`;
+
+      const originalDisplayWidth = deviceDisplayDescription.x_res;
+      const originalDisplayHeight = deviceDisplayDescription.y_res;
+
+      const scaledDisplayWidth = originalDisplayWidth * scaling;
+      const scaledDisplayHeight = originalDisplayHeight * scaling;
+
+      const neededBoundingBoxWidth =
+          Math.abs(Math.cos(rotationRadians) * originalDisplayWidth) +
+          Math.abs(Math.sin(rotationRadians) * originalDisplayHeight);
+      const neededBoundingBoxHeight =
+          Math.abs(Math.sin(rotationRadians) * originalDisplayWidth) +
+          Math.abs(Math.cos(rotationRadians) * originalDisplayHeight);
+
+      const scaledBoundingBoxWidth = neededBoundingBoxWidth * scaling;
+      const scaledBoundingBoxHeight = neededBoundingBoxHeight * scaling;
+
+      const offsetX = (scaledBoundingBoxWidth - scaledDisplayWidth) / 2;
+      const offsetY = (scaledBoundingBoxHeight - scaledDisplayHeight) / 2;
+
+      deviceDisplayVideo.style.width = scaledDisplayWidth;
+      deviceDisplayVideo.style.height = scaledDisplayHeight;
+      deviceDisplayVideo.style.transform = `translateX(${offsetX}px) ` +
+          `translateY(${offsetY}px) ` +
+          `rotateZ(${rotationDegrees}deg) `;
+
+      deviceDisplay.style.left = `${deviceDisplayLeftOffset}px`;
+      deviceDisplay.style.width = scaledBoundingBoxWidth;
+      deviceDisplay.style.height = scaledBoundingBoxHeight;
+
+      deviceDisplayLeftOffset = deviceDisplayLeftOffset + deviceDisplayWidthPadding +
+          scaledBoundingBoxWidth;
+    }
+  }
+
+  #getTransformRotation(element) {
+    if (!element.style.textIndent) {
+      return 0;
+    }
+    // Remove 'px' and convert to float.
+    return parseFloat(element.style.textIndent.slice(0, -2));
+  }
+
+  #onControlMessage(message) {
+    let message_data = JSON.parse(message.data);
+    console.debug('Control message received: ', message_data)
+    let metadata = message_data.metadata;
+    if (message_data.event == 'VIRTUAL_DEVICE_BOOT_STARTED') {
+      // Start the adb connection after receiving the BOOT_STARTED message.
+      // (This is after the adbd start message. Attempting to connect
+      // immediately after adbd starts causes issues.)
+      this.#initializeAdb();
+    }
+    if (message_data.event == 'VIRTUAL_DEVICE_SCREEN_CHANGED') {
+      if (metadata.rotation != this.#currentRotation) {
+        // Animate the screen rotation.
+        const targetRotation = metadata.rotation == 0 ? 0 : -90;
+
+        $('#device-displays')
+            .animate(
+                {
+                  textIndent: targetRotation,
+                },
+                {
+                  duration: 1000,
+                  step: (now, tween) => {
+                    this.#resizeDeviceDisplays();
+                  },
+                });
+      }
+
+      this.#currentRotation = metadata.rotation;
+    }
+    if (message_data.event == 'VIRTUAL_DEVICE_CAPTURE_IMAGE') {
+      if (this.#deviceConnection.cameraEnabled) {
+        this.#takePhoto();
+      }
+    }
+    if (message_data.event == 'VIRTUAL_DEVICE_DISPLAY_POWER_MODE_CHANGED') {
+      this.#updateDisplayVisibility(metadata.display, metadata.mode);
+    }
+  }
+
+  #updateDeviceStateDetails(lidSwitchOpen, hingeAngle) {
+    let deviceStateDetailsTextLines = [];
+    if (lidSwitchOpen != null) {
+      let state = lidSwitchOpen ? 'Opened' : 'Closed';
+      deviceStateDetailsTextLines.push(`Lid Switch - ${state}`);
+    }
+    if (hingeAngle != null) {
+      deviceStateDetailsTextLines.push(`Hinge Angle - ${hingeAngle}`);
+    }
+    let deviceStateDetailsText = deviceStateDetailsTextLines.join('\n');
+    new DeviceDetailsUpdater()
+        .setDeviceStateDetailsText(deviceStateDetailsText)
+        .update();
+  }
+
+  #updateDeviceHardwareDetails(hardware) {
+    let hardwareDetailsTextLines = [];
+    Object.keys(hardware).forEach((key) => {
+      let value = hardware[key];
+      hardwareDetailsTextLines.push(`${key} - ${value}`);
+    });
+
+    let hardwareDetailsText = hardwareDetailsTextLines.join('\n');
+    new DeviceDetailsUpdater()
+        .setHardwareDetailsText(hardwareDetailsText)
+        .update();
+  }
+
+  // Creates a <video> element and a <div> container element for each display.
+  // The extra <div> container elements are used to maintain the width and
+  // height of the device as the CSS 'transform' property used on the <video>
+  // element for rotating the device only affects the visuals of the element
+  // and not its layout.
+  #createDeviceDisplays() {
+    console.debug(
+        'Display descriptions: ', this.#deviceConnection.description.displays);
+    this.#displayDescriptions = this.#deviceConnection.description.displays;
+    let anyDisplayLoaded = false;
+    const deviceDisplays = document.getElementById('device-displays');
+    for (const deviceDisplayDescription of this.#displayDescriptions) {
+      let deviceDisplay = document.createElement('div');
+      deviceDisplay.classList.add('device-display');
+      // Start the screen as hidden. Only show when data is ready.
+      deviceDisplay.style.visibility = 'hidden';
+
+      let deviceDisplayInfo = document.createElement("div");
+      deviceDisplayInfo.classList.add("device-display-info");
+      deviceDisplayInfo.id = deviceDisplayDescription.stream_id + '_info';
+      deviceDisplay.appendChild(deviceDisplayInfo);
+
+      let deviceDisplayVideo = document.createElement('video');
+      deviceDisplayVideo.autoplay = true;
+      deviceDisplayVideo.muted = true;
+      deviceDisplayVideo.id = deviceDisplayDescription.stream_id;
+      deviceDisplayVideo.classList.add('device-display-video');
+      deviceDisplayVideo.addEventListener('loadeddata', (evt) => {
+        if (!anyDisplayLoaded) {
+          anyDisplayLoaded = true;
+          this.#onDeviceDisplayLoaded();
+        }
+      });
+      deviceDisplay.appendChild(deviceDisplayVideo);
+
+      deviceDisplays.appendChild(deviceDisplay);
+
+      let stream_id = deviceDisplayDescription.stream_id;
+      this.#deviceConnection.getStream(stream_id)
+          .then(stream => {
+            deviceDisplayVideo.srcObject = stream;
+          })
+          .catch(e => console.error('Unable to get display stream: ', e));
+    }
+  }
+
+  #initializeAdb() {
+    init_adb(
+        this.#deviceConnection, () => this.#showAdbConnected(),
+        () => this.#showAdbError());
+  }
+
+  #showAdbConnected() {
+    // Screen changed messages are not reported until after boot has completed.
+    // Certain default adb buttons change screen state, so wait for boot
+    // completion before enabling these buttons.
+    document.getElementById('status-message').className = 'connected';
+    document.getElementById('status-message').textContent =
+        'adb connection established successfully.';
+    setTimeout(() => {
+      document.getElementById('status-message').style.visibility = 'hidden';
+    }, 5000);
+    for (const [_, button] of Object.entries(this.#buttons)) {
+      if (button.adb) {
+        button.disabled = false;
+      }
+    }
+  }
+
+  #showAdbError() {
+    document.getElementById('status-message').className = 'error';
+    document.getElementById('status-message').textContent =
+        'adb connection failed.';
+    document.getElementById('status-message').style.visibility = 'visible';
+    for (const [_, button] of Object.entries(this.#buttons)) {
+      if (button.adb) {
+        button.disabled = true;
+      }
+    }
+  }
+
+  #onDeviceDisplayLoaded() {
+    document.getElementById('status-message').textContent =
+        'Awaiting bootup and adb connection. Please wait...';
+    this.#resizeDeviceDisplays();
+
+    let deviceDisplayList = document.getElementsByClassName('device-display');
+    for (const deviceDisplay of deviceDisplayList) {
+      deviceDisplay.style.visibility = 'visible';
+    }
+
+    // Enable the buttons after the screen is visible.
+    for (const [key, button] of Object.entries(this.#buttons)) {
+      if (!button.adb) {
+        button.disabled = false;
+      }
+    }
+    // Start the adb connection if it is not already started.
+    this.#initializeAdb();
+  }
+
+  #onRotateButton(e) {
+    // Attempt to init adb again, in case the initial connection failed.
+    // This succeeds immediately if already connected.
+    this.#initializeAdb();
+    if (e.type == 'mousedown') {
+      adbShell(
+          '/vendor/bin/cuttlefish_sensor_injection rotate ' +
+          (this.#currentRotation == 0 ? 'landscape' : 'portrait'))
+    }
+  }
+
+  #onControlPanelButton(e) {
+    if (e.type == 'mouseout' && e.which == 0) {
+      // Ignore mouseout events if no mouse button is pressed.
+      return;
+    }
+    this.#deviceConnection.sendControlMessage(JSON.stringify({
+      command: e.target.dataset.command,
+      button_state: e.type == 'mousedown' ? 'down' : 'up',
+    }));
+  }
+
+  #onKeyboardCaptureToggle(enabled) {
+    if (enabled) {
+      document.addEventListener('keydown', evt => this.#onKeyEvent(evt));
+      document.addEventListener('keyup', evt => this.#onKeyEvent(evt));
+    } else {
+      document.removeEventListener('keydown', evt => this.#onKeyEvent(evt));
+      document.removeEventListener('keyup', evt => this.#onKeyEvent(evt));
+    }
+  }
+
+  #onKeyEvent(e) {
+    e.preventDefault();
+    this.#deviceConnection.sendKeyEvent(e.code, e.type);
+  }
+
+  #startMouseTracking() {
+    let $this = this;
+    let mouseIsDown = false;
+    let mouseCtx = {
+      down: false,
+      touchIdSlotMap: new Map(),
+      touchSlots: [],
+    };
+    function onStartDrag(e) {
+      e.preventDefault();
+
+      // console.debug("mousedown at " + e.pageX + " / " + e.pageY);
+      mouseCtx.down = true;
+
+      $this.#sendEventUpdate(mouseCtx, e);
+    }
+
+    function onEndDrag(e) {
+      e.preventDefault();
+
+      // console.debug("mouseup at " + e.pageX + " / " + e.pageY);
+      mouseCtx.down = false;
+
+      $this.#sendEventUpdate(mouseCtx, e);
+    }
+
+    function onContinueDrag(e) {
+      e.preventDefault();
+
+      // console.debug("mousemove at " + e.pageX + " / " + e.pageY + ", down=" +
+      // mouseIsDown);
+      if (mouseCtx.down) {
+        $this.#sendEventUpdate(mouseCtx, e);
+      }
+    }
+
+    let deviceDisplayList = document.getElementsByClassName('device-display');
+    if (window.PointerEvent) {
+      for (const deviceDisplay of deviceDisplayList) {
+        deviceDisplay.addEventListener('pointerdown', onStartDrag);
+        deviceDisplay.addEventListener('pointermove', onContinueDrag);
+        deviceDisplay.addEventListener('pointerup', onEndDrag);
+      }
+    } else if (window.TouchEvent) {
+      for (const deviceDisplay of deviceDisplayList) {
+        deviceDisplay.addEventListener('touchstart', onStartDrag);
+        deviceDisplay.addEventListener('touchmove', onContinueDrag);
+        deviceDisplay.addEventListener('touchend', onEndDrag);
+      }
+    } else if (window.MouseEvent) {
+      for (const deviceDisplay of deviceDisplayList) {
+        deviceDisplay.addEventListener('mousedown', onStartDrag);
+        deviceDisplay.addEventListener('mousemove', onContinueDrag);
+        deviceDisplay.addEventListener('mouseup', onEndDrag);
+      }
+    }
+  }
+
+  #sendEventUpdate(ctx, e) {
+    let eventType = e.type.substring(0, 5);
+
+    // The <video> element:
+    const deviceDisplay = e.target;
+
+    // Before the first video frame arrives there is no way to know width and
+    // height of the device's screen, so turn every click into a click at 0x0.
+    // A click at that position is not more dangerous than anywhere else since
+    // the user is clicking blind anyways.
+    const videoWidth = deviceDisplay.videoWidth ? deviceDisplay.videoWidth : 1;
+    const videoHeight =
+        deviceDisplay.videoHeight ? deviceDisplay.videoHeight : 1;
+    const elementWidth =
+        deviceDisplay.offsetWidth ? deviceDisplay.offsetWidth : 1;
+    const elementHeight =
+        deviceDisplay.offsetHeight ? deviceDisplay.offsetHeight : 1;
+
+    // vh*ew > eh*vw? then scale h instead of w
+    const scaleHeight = videoHeight * elementWidth > videoWidth * elementHeight;
+    let elementScaling = 0, videoScaling = 0;
+    if (scaleHeight) {
+      elementScaling = elementHeight;
+      videoScaling = videoHeight;
+    } else {
+      elementScaling = elementWidth;
+      videoScaling = videoWidth;
+    }
+
+    // The screen uses the 'object-fit: cover' property in order to completely
+    // fill the element while maintaining the screen content's aspect ratio.
+    // Therefore:
+    // - If vh*ew > eh*vw, w is scaled so that content width == element width
+    // - Otherwise,        h is scaled so that content height == element height
+    const scaleWidth = videoHeight * elementWidth > videoWidth * elementHeight;
+
+    // Convert to coordinates relative to the video by scaling.
+    // (This matches the scaling used by 'object-fit: cover'.)
+    //
+    // This scaling is needed to translate from the in-browser x/y to the
+    // on-device x/y.
+    //   - When the device screen has not been resized, this is simple: scale
+    //     the coordinates based on the ratio between the input video size and
+    //     the in-browser size.
+    //   - When the device screen has been resized, this scaling is still needed
+    //     even though the in-browser size and device size are identical. This
+    //     is due to the way WindowManager handles a resized screen, resized via
+    //     `adb shell wm size`:
+    //       - The ABS_X and ABS_Y max values of the screen retain their
+    //         original values equal to the value set when launching the device
+    //         (which equals the video size here).
+    //       - The sent ABS_X and ABS_Y values need to be scaled based on the
+    //         ratio between the max size (video size) and in-browser size.
+    const scaling =
+        scaleWidth ? videoWidth / elementWidth : videoHeight / elementHeight;
+
+    let xArr = [];
+    let yArr = [];
+    let idArr = [];
+    let slotArr = [];
+
+    if (eventType == 'mouse' || eventType == 'point') {
+      xArr.push(e.offsetX);
+      yArr.push(e.offsetY);
+
+      let thisId = -1;
+      if (eventType == 'point') {
+        thisId = e.pointerId;
+      }
+
+      slotArr.push(0);
+      idArr.push(thisId);
+    } else if (eventType == 'touch') {
+      // touchstart: list of touch points that became active
+      // touchmove: list of touch points that changed
+      // touchend: list of touch points that were removed
+      let changes = e.changedTouches;
+      let rect = e.target.getBoundingClientRect();
+      for (let i = 0; i < changes.length; i++) {
+        xArr.push(changes[i].pageX - rect.left);
+        yArr.push(changes[i].pageY - rect.top);
+        if (ctx.touchIdSlotMap.has(changes[i].identifier)) {
+          let slot = ctx.touchIdSlotMap.get(changes[i].identifier);
+
+          slotArr.push(slot);
+          if (e.type == 'touchstart') {
+            // error
+            console.error('touchstart when already have slot');
+            return;
+          } else if (e.type == 'touchmove') {
+            idArr.push(changes[i].identifier);
+          } else if (e.type == 'touchend') {
+            ctx.touchSlots[slot] = false;
+            ctx.touchIdSlotMap.delete(changes[i].identifier);
+            idArr.push(-1);
+          }
+        } else {
+          if (e.type == 'touchstart') {
+            let slot = -1;
+            for (let j = 0; j < ctx.touchSlots.length; j++) {
+              if (!ctx.touchSlots[j]) {
+                slot = j;
+                break;
+              }
+            }
+            if (slot == -1) {
+              slot = ctx.touchSlots.length;
+              ctx.touchSlots.push(true);
+            }
+            slotArr.push(slot);
+            ctx.touchSlots[slot] = true;
+            ctx.touchIdSlotMap.set(changes[i].identifier, slot);
+            idArr.push(changes[i].identifier);
+          } else if (e.type == 'touchmove') {
+            // error
+            console.error('touchmove when no slot');
+            return;
+          } else if (e.type == 'touchend') {
+            // error
+            console.error('touchend when no slot');
+            return;
+          }
+        }
+      }
+    }
+
+    for (let i = 0; i < xArr.length; i++) {
+      xArr[i] = xArr[i] * scaling;
+      yArr[i] = yArr[i] * scaling;
+
+      // Substract the offset produced by the difference in aspect ratio, if
+      // any.
+      if (scaleWidth) {
+        // Width was scaled, leaving excess content height, so subtract from y.
+        yArr[i] -= (elementHeight * scaling - videoHeight) / 2;
+      } else {
+        // Height was scaled, leaving excess content width, so subtract from x.
+        xArr[i] -= (elementWidth * scaling - videoWidth) / 2;
+      }
+
+      xArr[i] = Math.trunc(xArr[i]);
+      yArr[i] = Math.trunc(yArr[i]);
+    }
+
+    // NOTE: Rotation is handled automatically because the CSS rotation through
+    // transforms also rotates the coordinates of events on the object.
+
+    const display_label = deviceDisplay.id;
+
+    this.#deviceConnection.sendMultiTouch(
+        {idArr, xArr, yArr, down: ctx.down, slotArr, display_label});
+  }
+
+  #updateDisplayVisibility(displayId, powerMode) {
+    const display = document.getElementById('display_' + displayId).parentElement;
+    if (display == null) {
+      console.error('Unknown display id: ' + displayId);
+      return;
+    }
+    switch (powerMode) {
+      case 'On':
+        display.style.visibility = 'visible';
+        break;
+      case 'Off':
+        display.style.visibility = 'hidden';
+        break;
+      default:
+        console.error('Display ' + displayId + ' has unknown display power mode: ' + powerMode);
+    }
+  }
+
+  #onMicCaptureToggle(enabled) {
+    return this.#deviceConnection.useMic(enabled);
+  }
+
+  #onCameraCaptureToggle(enabled) {
+    return this.#deviceConnection.useCamera(enabled);
+  }
+
+  #getZeroPaddedString(value, desiredLength) {
+    const s = String(value);
+    return '0'.repeat(desiredLength - s.length) + s;
+  }
+
+  #getTimestampString() {
+    const now = new Date();
+    return [
+      now.getFullYear(),
+      this.#getZeroPaddedString(now.getMonth(), 2),
+      this.#getZeroPaddedString(now.getDay(), 2),
+      this.#getZeroPaddedString(now.getHours(), 2),
+      this.#getZeroPaddedString(now.getMinutes(), 2),
+      this.#getZeroPaddedString(now.getSeconds(), 2),
+    ].join('_');
+  }
+
+  #onVideoCaptureToggle(enabled) {
+    const recordToggle = document.getElementById('record-video-control');
+    if (enabled) {
+      let recorders = [];
+
+      const timestamp = this.#getTimestampString();
+
+      let deviceDisplayVideoList =
+        document.getElementsByClassName('device-display-video');
+      for (let i = 0; i < deviceDisplayVideoList.length; i++) {
+        const deviceDisplayVideo = deviceDisplayVideoList[i];
+
+        const recorder = new MediaRecorder(deviceDisplayVideo.captureStream());
+        const recordedData = [];
+
+        recorder.ondataavailable = event => recordedData.push(event.data);
+        recorder.onstop = event => {
+          const recording = new Blob(recordedData, { type: "video/webm" });
+
+          const downloadLink = document.createElement('a');
+          downloadLink.setAttribute('download', timestamp + '_display_' + i + '.webm');
+          downloadLink.setAttribute('href', URL.createObjectURL(recording));
+          downloadLink.click();
+        };
+
+        recorder.start();
+        recorders.push(recorder);
+      }
+      this.#recording['recorders'] = recorders;
+
+      recordToggle.style.backgroundColor = 'red';
+    } else {
+      for (const recorder of this.#recording['recorders']) {
+        recorder.stop();
+      }
+      recordToggle.style.backgroundColor = '';
+    }
+    return Promise.resolve(enabled);
+  }
+
+  #onCustomShellButton(shell_command, e) {
+    // Attempt to init adb again, in case the initial connection failed.
+    // This succeeds immediately if already connected.
+    this.#initializeAdb();
+    if (e.type == 'mousedown') {
+      adbShell(shell_command);
+    }
+  }
+}  // DeviceControlApp
+
+window.addEventListener("load", async evt => {
+  try {
+    setupMessages();
+    let connectorModule = await import('./server_connector.js');
+    let deviceConnection = await ConnectDevice(
+        connectorModule.deviceId(), await connectorModule.createConnector());
+    let deviceControlApp = new DeviceControlApp(deviceConnection);
+    deviceControlApp.start();
+    document.getElementById('device-connection').style.display = 'block';
+  } catch(err) {
+    console.error('Unable to connect: ', err);
+    showError(
+      'No connection to the guest device. ' +
+      'Please ensure the WebRTC process on the host machine is active.');
+  }
+  document.getElementById('loader').style.display = 'none';
+});
diff --git a/host/frontend/webrtc/client/js/cf_webrtc.js b/host/frontend/webrtc/client/js/cf_webrtc.js
new file mode 100644
index 0000000..5c91383
--- /dev/null
+++ b/host/frontend/webrtc/client/js/cf_webrtc.js
@@ -0,0 +1,496 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * 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.
+ */
+
+function createDataChannel(pc, label, onMessage) {
+  console.debug('creating data channel: ' + label);
+  let dataChannel = pc.createDataChannel(label);
+  // Return an object with a send function like that of the dataChannel, but
+  // that only actually sends over the data channel once it has connected.
+  return {
+    channelPromise: new Promise((resolve, reject) => {
+      dataChannel.onopen = (event) => {
+        resolve(dataChannel);
+      };
+      dataChannel.onclose = () => {
+        console.debug(
+            'Data channel=' + label + ' state=' + dataChannel.readyState);
+      };
+      dataChannel.onmessage = onMessage ? onMessage : (msg) => {
+        console.debug('Data channel=' + label + ' data="' + msg.data + '"');
+      };
+      dataChannel.onerror = err => {
+        reject(err);
+      };
+    }),
+    send: function(msg) {
+      this.channelPromise = this.channelPromise.then(channel => {
+        channel.send(msg);
+        return channel;
+      })
+    },
+  };
+}
+
+function awaitDataChannel(pc, label, onMessage) {
+  console.debug('expecting data channel: ' + label);
+  // Return an object with a send function like that of the dataChannel, but
+  // that only actually sends over the data channel once it has connected.
+  return {
+    channelPromise: new Promise((resolve, reject) => {
+      let prev_ondatachannel = pc.ondatachannel;
+      pc.ondatachannel = ev => {
+        let dataChannel = ev.channel;
+        if (dataChannel.label == label) {
+          dataChannel.onopen = (event) => {
+            resolve(dataChannel);
+          };
+          dataChannel.onclose = () => {
+            console.debug(
+                'Data channel=' + label + ' state=' + dataChannel.readyState);
+          };
+          dataChannel.onmessage = onMessage ? onMessage : (msg) => {
+            console.debug('Data channel=' + label + ' data="' + msg.data + '"');
+          };
+          dataChannel.onerror = err => {
+            reject(err);
+          };
+        } else if (prev_ondatachannel) {
+          prev_ondatachannel(ev);
+        }
+      };
+    }),
+    send: function(msg) {
+      this.channelPromise = this.channelPromise.then(channel => {
+        channel.send(msg);
+        return channel;
+      })
+    },
+  };
+}
+
+class DeviceConnection {
+  #pc;
+  #control;
+  #description;
+
+  #cameraDataChannel;
+  #cameraInputQueue;
+  #controlChannel;
+  #inputChannel;
+  #adbChannel;
+  #bluetoothChannel;
+
+  #streams;
+  #streamPromiseResolvers;
+  #micSenders = [];
+  #cameraSenders = [];
+  #camera_res_x;
+  #camera_res_y;
+
+  #onAdbMessage;
+  #onControlMessage;
+  #onBluetoothMessage;
+
+  constructor(pc, control) {
+    this.#pc = pc;
+    this.#control = control;
+    this.#cameraDataChannel = pc.createDataChannel('camera-data-channel');
+    this.#cameraDataChannel.binaryType = 'arraybuffer';
+    this.#cameraInputQueue = new Array();
+    var self = this;
+    this.#cameraDataChannel.onbufferedamountlow = () => {
+      if (self.#cameraInputQueue.length > 0) {
+        self.sendCameraData(self.#cameraInputQueue.shift());
+      }
+    };
+    this.#inputChannel = createDataChannel(pc, 'input-channel');
+    this.#adbChannel = createDataChannel(pc, 'adb-channel', (msg) => {
+      if (this.#onAdbMessage) {
+        this.#onAdbMessage(msg.data);
+      } else {
+        console.error('Received unexpected ADB message');
+      }
+    });
+    this.#controlChannel = awaitDataChannel(pc, 'device-control', (msg) => {
+      if (this.#onControlMessage) {
+        this.#onControlMessage(msg);
+      } else {
+        console.error('Received unexpected Control message');
+      }
+    });
+    this.#bluetoothChannel =
+        createDataChannel(pc, 'bluetooth-channel', (msg) => {
+          if (this.#onBluetoothMessage) {
+            this.#onBluetoothMessage(msg.data);
+          } else {
+            console.error('Received unexpected Bluetooth message');
+          }
+        });
+    this.#streams = {};
+    this.#streamPromiseResolvers = {};
+
+    pc.addEventListener('track', e => {
+      console.debug('Got remote stream: ', e);
+      for (const stream of e.streams) {
+        this.#streams[stream.id] = stream;
+        if (this.#streamPromiseResolvers[stream.id]) {
+          for (let resolver of this.#streamPromiseResolvers[stream.id]) {
+            resolver();
+          }
+          delete this.#streamPromiseResolvers[stream.id];
+        }
+      }
+    });
+  }
+
+  set description(desc) {
+    this.#description = desc;
+  }
+
+  get description() {
+    return this.#description;
+  }
+
+  get imageCapture() {
+    if (this.#cameraSenders && this.#cameraSenders.length > 0) {
+      let track = this.#cameraSenders[0].track;
+      return new ImageCapture(track);
+    }
+    return undefined;
+  }
+
+  get cameraWidth() {
+    return this.#camera_res_x;
+  }
+
+  get cameraHeight() {
+    return this.#camera_res_y;
+  }
+
+  get cameraEnabled() {
+    return this.#cameraSenders && this.#cameraSenders.length > 0;
+  }
+
+  getStream(stream_id) {
+    return new Promise((resolve, reject) => {
+      if (this.#streams[stream_id]) {
+        resolve(this.#streams[stream_id]);
+      } else {
+        if (!this.#streamPromiseResolvers[stream_id]) {
+          this.#streamPromiseResolvers[stream_id] = [];
+        }
+        this.#streamPromiseResolvers[stream_id].push(resolve);
+      }
+    });
+  }
+
+  #sendJsonInput(evt) {
+    this.#inputChannel.send(JSON.stringify(evt));
+  }
+
+  sendMousePosition({x, y, down, display_label}) {
+    this.#sendJsonInput({
+      type: 'mouse',
+      down: down ? 1 : 0,
+      x,
+      y,
+      display_label,
+    });
+  }
+
+  // TODO (b/124121375): This should probably be an array of pointer events and
+  // have different properties.
+  sendMultiTouch({idArr, xArr, yArr, down, slotArr, display_label}) {
+    this.#sendJsonInput({
+      type: 'multi-touch',
+      id: idArr,
+      x: xArr,
+      y: yArr,
+      down: down ? 1 : 0,
+      slot: slotArr,
+      display_label: display_label,
+    });
+  }
+
+  sendKeyEvent(code, type) {
+    this.#sendJsonInput({type: 'keyboard', keycode: code, event_type: type});
+  }
+
+  disconnect() {
+    this.#pc.close();
+  }
+
+  // Sends binary data directly to the in-device adb daemon (skipping the host)
+  sendAdbMessage(msg) {
+    this.#adbChannel.send(msg);
+  }
+
+  // Provide a callback to receive data from the in-device adb daemon
+  onAdbMessage(cb) {
+    this.#onAdbMessage = cb;
+  }
+
+  // Send control commands to the device
+  sendControlMessage(msg) {
+    this.#controlChannel.send(msg);
+  }
+
+  async #useDevice(in_use, senders_arr, device_opt) {
+    // An empty array means no tracks are currently in use
+    if (senders_arr.length > 0 === !!in_use) {
+      console.warn('Device is already ' + (in_use ? '' : 'not ') + 'in use');
+      return in_use;
+    }
+    let renegotiation_needed = false;
+    if (in_use) {
+      try {
+        let stream = await navigator.mediaDevices.getUserMedia(device_opt);
+        stream.getTracks().forEach(track => {
+          console.info(`Using ${track.kind} device: ${track.label}`);
+          senders_arr.push(this.#pc.addTrack(track));
+          renegotiation_needed = true;
+        });
+      } catch (e) {
+        console.error('Failed to add stream to peer connection: ', e);
+        // Don't return yet, if there were errors some tracks may have been
+        // added so the connection should be renegotiated again.
+      }
+    } else {
+      for (const sender of senders_arr) {
+        console.info(
+            `Removing ${sender.track.kind} device: ${sender.track.label}`);
+        let track = sender.track;
+        track.stop();
+        this.#pc.removeTrack(sender);
+        renegotiation_needed = true;
+      }
+      // Empty the array passed by reference, just assigning [] won't do that.
+      senders_arr.length = 0;
+    }
+    if (renegotiation_needed) {
+      this.#control.renegotiateConnection();
+    }
+    // Return the new state
+    return senders_arr.length > 0;
+  }
+
+  async useMic(in_use) {
+    return this.#useDevice(in_use, this.#micSenders, {audio: true, video: false});
+  }
+
+  async useCamera(in_use) {
+    return this.#useDevice(in_use, this.#micSenders, {audio: false, video: true});
+  }
+
+  sendCameraResolution(stream) {
+    const cameraTracks = stream.getVideoTracks();
+    if (cameraTracks.length > 0) {
+      const settings = cameraTracks[0].getSettings();
+      this.#camera_res_x = settings.width;
+      this.#camera_res_y = settings.height;
+      this.sendControlMessage(JSON.stringify({
+        command: 'camera_settings',
+        width: settings.width,
+        height: settings.height,
+        frame_rate: settings.frameRate,
+        facing: settings.facingMode
+      }));
+    }
+  }
+
+  sendOrQueueCameraData(data) {
+    if (this.#cameraDataChannel.bufferedAmount > 0 ||
+        this.#cameraInputQueue.length > 0) {
+      this.#cameraInputQueue.push(data);
+    } else {
+      this.sendCameraData(data);
+    }
+  }
+
+  sendCameraData(data) {
+    const MAX_SIZE = 65535;
+    const END_MARKER = 'EOF';
+    for (let i = 0; i < data.byteLength; i += MAX_SIZE) {
+      // range is clamped to the valid index range
+      this.#cameraDataChannel.send(data.slice(i, i + MAX_SIZE));
+    }
+    this.#cameraDataChannel.send(END_MARKER);
+  }
+
+  // Provide a callback to receive control-related comms from the device
+  onControlMessage(cb) {
+    this.#onControlMessage = cb;
+  }
+
+  sendBluetoothMessage(msg) {
+    this.#bluetoothChannel.send(msg);
+  }
+
+  onBluetoothMessage(cb) {
+    this.#onBluetoothMessage = cb;
+  }
+
+  // Provide a callback to receive connectionstatechange states.
+  onConnectionStateChange(cb) {
+    this.#pc.addEventListener(
+        'connectionstatechange', evt => cb(this.#pc.connectionState));
+  }
+}
+
+class Controller {
+  #pc;
+  #serverConnector;
+
+  constructor(serverConnector) {
+    this.#serverConnector = serverConnector;
+    serverConnector.onDeviceMsg(msg => this.#onDeviceMessage(msg));
+  }
+
+  #onDeviceMessage(message) {
+    let type = message.type;
+    switch (type) {
+      case 'offer':
+        this.#onOffer({type: 'offer', sdp: message.sdp});
+        break;
+      case 'answer':
+        this.#onAnswer({type: 'answer', sdp: message.sdp});
+        break;
+      case 'ice-candidate':
+          this.#onIceCandidate(new RTCIceCandidate({
+            sdpMid: message.mid,
+            sdpMLineIndex: message.mLineIndex,
+            candidate: message.candidate
+          }));
+        break;
+      case 'error':
+        console.error('Device responded with error message: ', message.error);
+        break;
+      default:
+        console.error('Unrecognized message type from device: ', type);
+    }
+  }
+
+  async #sendClientDescription(desc) {
+    console.debug('sendClientDescription');
+    return this.#serverConnector.sendToDevice({type: 'answer', sdp: desc.sdp});
+  }
+
+  async #sendIceCandidate(candidate) {
+    console.debug('sendIceCandidate');
+    return this.#serverConnector.sendToDevice({type: 'ice-candidate', candidate});
+  }
+
+  async #onOffer(desc) {
+    console.debug('Remote description (offer): ', desc);
+    try {
+      await this.#pc.setRemoteDescription(desc);
+      let answer = await this.#pc.createAnswer();
+      console.debug('Answer: ', answer);
+      await this.#pc.setLocalDescription(answer);
+      await this.#sendClientDescription(answer);
+    } catch (e) {
+      console.error('Error processing remote description (offer)', e)
+      throw e;
+    }
+  }
+
+  async #onAnswer(answer) {
+    console.debug('Remote description (answer): ', answer);
+    try {
+      await this.#pc.setRemoteDescription(answer);
+    } catch (e) {
+      console.error('Error processing remote description (answer)', e)
+      throw e;
+    }
+  }
+
+  #onIceCandidate(iceCandidate) {
+    console.debug(`Remote ICE Candidate: `, iceCandidate);
+    this.#pc.addIceCandidate(iceCandidate);
+  }
+
+  ConnectDevice(pc) {
+    this.#pc = pc;
+    console.debug('ConnectDevice');
+    // ICE candidates will be generated when we add the offer. Adding it here
+    // instead of in _onOffer because this function is called once per peer
+    // connection, while _onOffer may be called more than once due to
+    // renegotiations.
+    this.#pc.addEventListener('icecandidate', evt => {
+      if (evt.candidate) this.#sendIceCandidate(evt.candidate);
+    });
+    this.#serverConnector.sendToDevice({type: 'request-offer'});
+  }
+
+  async renegotiateConnection() {
+    console.debug('Re-negotiating connection');
+    let offer = await this.#pc.createOffer();
+    console.debug('Local description (offer): ', offer);
+    await this.#pc.setLocalDescription(offer);
+    this.#serverConnector.sendToDevice({type: 'offer', sdp: offer.sdp});
+  }
+}
+
+function createPeerConnection(infra_config) {
+  let pc_config = {iceServers: []};
+  for (const stun of infra_config.ice_servers) {
+    pc_config.iceServers.push({urls: 'stun:' + stun});
+  }
+  let pc = new RTCPeerConnection(pc_config);
+
+  pc.addEventListener('icecandidate', evt => {
+    console.debug('Local ICE Candidate: ', evt.candidate);
+  });
+  pc.addEventListener('iceconnectionstatechange', evt => {
+    console.debug(`ICE State Change: ${pc.iceConnectionState}`);
+  });
+  pc.addEventListener(
+      'connectionstatechange',
+      evt => console.debug(
+          `WebRTC Connection State Change: ${pc.connectionState}`));
+  return pc;
+}
+
+export async function Connect(deviceId, serverConnector) {
+  let requestRet = await serverConnector.requestDevice(deviceId);
+  let deviceInfo = requestRet.deviceInfo;
+  let infraConfig = requestRet.infraConfig;
+  console.debug('Device available:');
+  console.debug(deviceInfo);
+  let pc_config = {iceServers: []};
+  if (infraConfig.ice_servers && infraConfig.ice_servers.length > 0) {
+    for (const server of infraConfig.ice_servers) {
+      pc_config.iceServers.push(server);
+    }
+  }
+  let pc = createPeerConnection(infraConfig);
+
+  let control = new Controller(serverConnector);
+  let deviceConnection = new DeviceConnection(pc, control);
+  deviceConnection.description = deviceInfo;
+
+  return new Promise((resolve, reject) => {
+    pc.addEventListener('connectionstatechange', evt => {
+      let state = pc.connectionState;
+      if (state == 'connected') {
+        resolve(deviceConnection);
+      } else if (state == 'failed') {
+        reject(evt);
+      }
+    });
+    control.ConnectDevice(pc);
+  });
+}
diff --git a/host/frontend/webrtc/client/js/controls.js b/host/frontend/webrtc/client/js/controls.js
new file mode 100644
index 0000000..268c7d8
--- /dev/null
+++ b/host/frontend/webrtc/client/js/controls.js
@@ -0,0 +1,336 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+function createToggleControl(elm, iconName, onChangeCb) {
+  let icon = document.createElement('span');
+  icon.classList.add('toggle-control-icon');
+  icon.classList.add('material-icons-outlined');
+  if (iconName) {
+    icon.appendChild(document.createTextNode(iconName));
+  }
+  elm.appendChild(icon);
+  let toggle = document.createElement('label');
+  toggle.classList.add('toggle-control-switch');
+  let input = document.createElement('input');
+  input.type = 'checkbox';
+  toggle.appendChild(input);
+  let slider = document.createElement('span');
+  slider.classList.add('toggle-control-slider');
+  toggle.appendChild(slider);
+  elm.classList.add('toggle-control');
+  elm.appendChild(toggle);
+  return {
+    // A callback can later be associated with the toggle element by calling
+    // .OnClick(onChangeCb) on the returned object. The callback should accept a
+    // boolean parameter indicating whether the toggle is in ON position and
+    // return a promise of the new position.
+    OnClick: cb => input.onchange =
+        e => {
+          let nextPr = cb(e.target.checked);
+          if (nextPr && 'then' in nextPr) {
+            nextPr.then(checked => {
+              e.target.checked = !!checked;
+            });
+          }
+        },
+  };
+}
+
+function createButtonListener(button_id_class, func,
+  deviceConnection, listener) {
+  let buttons = [];
+  let ele = document.getElementById(button_id_class);
+  if (ele != null) {
+    buttons.push(ele);
+  } else {
+    buttons = document.getElementsByClassName(button_id_class);
+  }
+  for (var button of buttons) {
+    if (func != null) {
+      button.onclick = func;
+    }
+    button.addEventListener('mousedown', listener);
+  }
+}
+
+function createInputListener(input_id, func, listener) {
+  input = document.getElementById(input_id);
+  if (func != null) {
+    input.oninput = func;
+  }
+  input.addEventListener('input', listener);
+}
+
+function validateMacAddress(val) {
+  var regex = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/;
+  return (regex.test(val));
+}
+
+function validateMacWrapper() {
+  let type = document.getElementById('bluetooth-wizard-type').value;
+  let button = document.getElementById("bluetooth-wizard-device");
+  let macField = document.getElementById('bluetooth-wizard-mac');
+  if (this.id == 'bluetooth-wizard-type') {
+    if (type == "remote_loopback") {
+      button.disabled = false;
+      macField.setCustomValidity('');
+      macField.disabled = true;
+      macField.required = false;
+      macField.placeholder = 'N/A';
+      macField.value = '';
+      return;
+    }
+  }
+  macField.disabled = false;
+  macField.required = true;
+  macField.placeholder = 'Device MAC';
+  if (validateMacAddress($(macField).val())) {
+    button.disabled = false;
+    macField.setCustomValidity('');
+  } else {
+    button.disabled = true;
+    macField.setCustomValidity('MAC address invalid');
+  }
+}
+
+$('[validate-mac]').bind('input', validateMacWrapper);
+$('[validate-mac]').bind('select', validateMacWrapper);
+
+function parseDevice(device) {
+  let id, name, mac;
+  var regex = /([0-9]+):([^@ ]*)(@(([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})))?/;
+  if (regex.test(device)) {
+    let regexMatches = device.match(regex);
+    id = regexMatches[1];
+    name = regexMatches[2];
+    mac = regexMatches[4];
+  }
+  if (mac === undefined) {
+    mac = "";
+  }
+  return [id, name, mac];
+}
+
+function btUpdateAdded(devices) {
+  let deviceArr = devices.split('\r\n');
+  let [id, name, mac] = parseDevice(deviceArr[0]);
+  if (name) {
+    let div = document.getElementById('bluetooth-wizard-confirm').getElementsByClassName('bluetooth-text')[1];
+    div.innerHTML = "";
+    div.innerHTML += "<p>Name: <b>" + id + "</b></p>";
+    div.innerHTML += "<p>Type: <b>" + name + "</b></p>";
+    div.innerHTML += "<p>MAC Addr: <b>" + mac + "</b></p>";
+    return true;
+  }
+  return false;
+}
+
+function parsePhy(phy) {
+  let id = phy.substring(0, phy.indexOf(":"));
+  phy = phy.substring(phy.indexOf(":") + 1);
+  let name = phy.substring(0, phy.indexOf(":"));
+  let devices = phy.substring(phy.indexOf(":") + 1);
+  return [id, name, devices];
+}
+
+function btParsePhys(phys) {
+  if (phys.indexOf("Phys:") < 0) {
+    return null;
+  }
+  let phyDict = {};
+  phys = phys.split('Phys:')[1];
+  let phyArr = phys.split('\r\n');
+  for (var phy of phyArr.slice(1)) {
+    phy = phy.trim();
+    if (phy.length == 0 || phy.indexOf("deleted") >= 0) {
+      continue;
+    }
+    let [id, name, devices] = parsePhy(phy);
+    phyDict[name] = id;
+  }
+  return phyDict;
+}
+
+function btUpdateDeviceList(devices) {
+  let deviceArr = devices.split('\r\n');
+  if (deviceArr[0].indexOf("Devices:") >= 0) {
+    let div = document.getElementById('bluetooth-list').getElementsByClassName('bluetooth-text')[0];
+    div.innerHTML = "";
+    let count = 0;
+    for (var device of deviceArr.slice(1)) {
+      if (device.indexOf("Phys:") >= 0) {
+        break;
+      }
+      count++;
+      if (device.indexOf("deleted") >= 0) {
+        continue;
+      }
+      let [id, name, mac] = parseDevice(device);
+      let innerDiv = '<div><button title="Delete" data-device-id="'
+      innerDiv += id;
+      innerDiv += '" class="bluetooth-list-trash material-icons">delete</button>';
+      innerDiv += name;
+      if (mac) {
+        innerDiv += " | "
+        innerDiv += mac;
+      }
+      innerDiv += '</div>';
+      div.innerHTML += innerDiv;
+    }
+    return count;
+  }
+  return -1;
+}
+
+function createControlPanelButton(
+    command, title, icon_name, listener,
+    parent_id = 'control-panel-default-buttons') {
+  let button = document.createElement('button');
+  document.getElementById(parent_id).appendChild(button);
+  button.title = title;
+  button.dataset.command = command;
+  button.disabled = true;
+  // Capture mousedown/up/out commands instead of click to enable
+  // hold detection. mouseout is used to catch if the user moves the
+  // mouse outside the button while holding down.
+  button.addEventListener('mousedown', listener);
+  button.addEventListener('mouseup', listener);
+  button.addEventListener('mouseout', listener);
+  // Set the button image using Material Design icons.
+  // See http://google.github.io/material-design-icons
+  // and https://material.io/resources/icons
+  button.classList.add('material-icons');
+  button.innerHTML = icon_name;
+  return button;
+}
+
+function positionModal(button_id, modal_id) {
+  const modalButton = document.getElementById(button_id);
+  const modalDiv = document.getElementById(modal_id);
+
+  // Position the modal to the right of the show modal button.
+  modalDiv.style.top = modalButton.offsetTop;
+  modalDiv.style.left = modalButton.offsetWidth + 30;
+}
+
+function createModalButton(button_id, modal_id, close_id, hide_id) {
+  const modalButton = document.getElementById(button_id);
+  const modalDiv = document.getElementById(modal_id);
+  const modalHeader = modalDiv.querySelector('.modal-header');
+  const modalClose = document.getElementById(close_id);
+  const modalDivHide = document.getElementById(hide_id);
+
+  positionModal(button_id, modal_id);
+
+  function showHideModal(show) {
+    if (show) {
+      modalButton.classList.add('modal-button-opened')
+      modalDiv.style.display = 'block';
+    } else {
+      modalButton.classList.remove('modal-button-opened')
+      modalDiv.style.display = 'none';
+    }
+    if (modalDivHide != null) {
+      modalDivHide.style.display = 'none';
+    }
+  }
+  // Allow the show modal button to toggle the modal,
+  modalButton.addEventListener(
+      'click', evt => showHideModal(modalDiv.style.display != 'block'));
+  // but the close button always closes.
+  modalClose.addEventListener('click', evt => showHideModal(false));
+
+  // Allow the modal to be dragged by the header.
+  let modalOffsets = {
+    midDrag: false,
+    mouseDownOffsetX: null,
+    mouseDownOffsetY: null,
+  };
+  modalHeader.addEventListener('mousedown', evt => {
+    modalOffsets.midDrag = true;
+    // Store the offset of the mouse location from the
+    // modal's current location.
+    modalOffsets.mouseDownOffsetX = parseInt(modalDiv.style.left) - evt.clientX;
+    modalOffsets.mouseDownOffsetY = parseInt(modalDiv.style.top) - evt.clientY;
+  });
+  modalHeader.addEventListener('mousemove', evt => {
+    let offsets = modalOffsets;
+    if (offsets.midDrag) {
+      // Move the modal to the mouse location plus the
+      // offset calculated on the initial mouse-down.
+      modalDiv.style.left = evt.clientX + offsets.mouseDownOffsetX;
+      modalDiv.style.top = evt.clientY + offsets.mouseDownOffsetY;
+    }
+  });
+  document.addEventListener('mouseup', evt => {
+    modalOffsets.midDrag = false;
+  });
+}
+
+function cmdConsole(consoleViewName, consoleInputName) {
+  let consoleView = document.getElementById(consoleViewName);
+
+  let addString =
+      function(str) {
+    consoleView.value += str;
+    consoleView.scrollTop = consoleView.scrollHeight;
+  }
+
+  let addLine =
+      function(line) {
+    addString(line + '\r\n');
+  }
+
+  let commandCallbacks = [];
+
+  let addCommandListener =
+      function(f) {
+    commandCallbacks.push(f);
+  }
+
+  let onCommand =
+      function(cmd) {
+    cmd = cmd.trim();
+
+    if (cmd.length == 0) return;
+
+    commandCallbacks.forEach(f => {
+      f(cmd);
+    })
+  }
+
+  addCommandListener(cmd => addLine('>> ' + cmd));
+
+  let consoleInput = document.getElementById(consoleInputName);
+
+  consoleInput.addEventListener('keydown', e => {
+    if ((e.key && e.key == 'Enter') || e.keyCode == 13) {
+      let command = e.target.value;
+
+      e.target.value = '';
+
+      onCommand(command);
+    }
+  });
+
+  return {
+    consoleView: consoleView,
+    consoleInput: consoleInput,
+    addLine: addLine,
+    addString: addString,
+    addCommandListener: addCommandListener,
+  };
+}
diff --git a/host/frontend/webrtc_operator/assets/js/rootcanal.js b/host/frontend/webrtc/client/js/rootcanal.js
similarity index 84%
rename from host/frontend/webrtc_operator/assets/js/rootcanal.js
rename to host/frontend/webrtc/client/js/rootcanal.js
index 4443bcd..e3783c7 100644
--- a/host/frontend/webrtc_operator/assets/js/rootcanal.js
+++ b/host/frontend/webrtc/client/js/rootcanal.js
@@ -19,12 +19,12 @@
 function rootCanalCalculateMessageSize(name, args) {
   let result = 0;
 
-  result += 1 + name.length; // length of name + it's data
-  result += 1; // count of args
+  result += 1 + name.length;  // length of name + it's data
+  result += 1;                // count of args
 
-  for(let i = 0; i < args.length; i++) {
-    result += 1; // length of args[i]
-    result += args[i].length; // data of args[i]
+  for (let i = 0; i < args.length; i++) {
+    result += 1;               // length of args[i]
+    result += args[i].length;  // data of args[i]
   }
 
   return result;
@@ -59,7 +59,7 @@
   pos = rootCanalAddString(array, pos, command);
   pos = rootCanalAddU8(array, pos, args.length);
 
-  for(let i = 0; i < args.length; i++) {
+  for (let i = 0; i < args.length; i++) {
     pos = rootCanalAddString(array, pos, args[i]);
   }
 
@@ -71,4 +71,4 @@
   let message = array.slice(1);
 
   return utf8Decoder.decode(message);
-}
\ No newline at end of file
+}
diff --git a/host/frontend/webrtc/client/style.css b/host/frontend/webrtc/client/style.css
new file mode 100644
index 0000000..93aaa05
--- /dev/null
+++ b/host/frontend/webrtc/client/style.css
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * 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.
+ */
+
+body {
+  background-color:black;
+  margin: 0;
+  touch-action: none;
+  overscroll-behavior: none;
+}
+
+#device-connection {
+  display: none;
+  max-height: 100vh;
+}
+
+@keyframes spin {
+  0% { transform: rotate(0deg); }
+  100% { transform: rotate(360deg); }
+}
+
+#loader {
+  border-left: 12px solid #4285F4;
+  border-top: 12px solid #34A853;
+  border-right: 12px solid #FBBC05;
+  border-bottom: 12px solid #EA4335;
+  border-radius: 50%;
+  width: 70px;
+  height: 70px;
+  animation: spin 1.2s linear infinite;
+  margin: 100px;
+}
+
+/* Top header row. */
+
+#header {
+  height: 64px;
+  /* Items inside this use a row Flexbox.*/
+  display: flex;
+  align-items: center;
+}
+
+#camera-control {
+  display: none !important;
+}
+#record-video-control {
+  display: none !important;
+}
+
+#app-controls {
+  margin-left: 10px;
+}
+#app-controls > div {
+  display: inline-block;
+  position: relative;
+  margin-right: 6px;
+}
+#device-audio {
+  height: 44px;
+}
+
+#error-message-div {
+  flex-grow: 1;
+}
+#error-message {
+  color: white;
+  font-family: 'Open Sans', sans-serif;
+  padding: 10px;
+  margin: 10px;
+  border-radius: 10px;
+}
+#error-message .close-btn {
+  float: right;
+  cursor: pointer;
+}
+#error-message.hidden {
+  display: none;
+}
+#error-message.warning {
+  /* dark red */
+  background-color: #927836;
+}
+#error-message.error {
+  /* dark red */
+  background-color: #900000;
+}
+#status-div {
+  flex-grow: 1;
+}
+#status-message {
+  color: white;
+  font-family: 'Open Sans', sans-serif;
+  padding: 10px;
+  margin: 10px;
+}
+#status-message.connecting {
+  /* dark yellow */
+  background-color: #927836;
+}
+#status-message.error {
+  /* dark red */
+  background-color: #900000;
+}
+#status-message.connected {
+  /* dark green */
+  background-color: #007000;
+}
+
+/* Control panel buttons and device screen(s). */
+
+#controls-and-displays {
+  height: calc(100% - 84px);
+
+  /* Items inside this use a row Flexbox.*/
+  display: flex;
+}
+
+#controls-and-displays > div {
+  margin-left: 5px;
+  margin-right: 5px;
+}
+
+.modal {
+  /* Start out hidden, and use absolute positioning. */
+  display: none;
+  position: absolute;
+
+  border-radius: 10px;
+  padding: 20px;
+  padding-top: 1px;
+
+  background-color: #5f6368ea; /* Semi-transparent Google grey 500 */
+  color: white;
+  font-family: 'Open Sans', sans-serif;
+}
+.modal-header {
+  cursor: move;
+  /* Items inside this use a row Flexbox.*/
+  display: flex;
+  justify-content: space-between;
+}
+.modal-close {
+  color: white;
+  border: none;
+  outline: none;
+  background-color: transparent;
+}
+.modal-button, .modal-button-highlight {
+  background:    #e8eaed; /* Google grey 200 */
+  border-radius: 10px;
+  box-shadow:    1px 1px #444444;
+  padding:       10px 20px;
+  color:         #000000;
+  display:       inline-block;
+  font:          normal bold 14px/1 "Open Sans", sans-serif;
+  text-align:    center;
+}
+#bluetooth-wizard-mac:valid {
+  border: 2px solid black;
+}
+#bluetooth-wizard-mac:invalid {
+  border: 2px solid red;
+}
+#bluetooth-wizard-mac:invalid + span::before {
+  font-weight: bold;
+  content: 'X';
+  color: red;
+}
+#bluetooth-wizard-mac:valid + span::before {
+  font-weight: bold;
+  content: 'OK';
+  color: green;
+}
+.modal-button {
+  background:    #e8eaed; /* Google grey 200 */
+}
+.modal-button-highlight {
+  background:    #f4cccc;
+}
+#device-details-modal span {
+  white-space: pre;
+}
+#bluetooth-console-input {
+  width: 100%;
+}
+#bluetooth-console-cmd-label {
+  color: white;
+}
+.bluetooth-text, .bluetooth-text-bold, .bluetooth-text-field input {
+  font: normal 18px/1 "Open Sans", sans-serif;
+}
+.bluetooth-text, .bluetooth-text-bold {
+  color: white;
+}
+.bluetooth-text-bold {
+  font: bold;
+}
+.bluetooth-button {
+  text-align: center;
+}
+.bluetooth-drop-down select {
+  font: normal 18px/1 "Open Sans", sans-serif;
+  color: black;
+  width: 500px;
+  margin: 5px;
+  rows: 10;
+  columns: 60;
+}
+.bluetooth-text-field input {
+  color: black;
+  width: 500px;
+  margin: 5px;
+  rows: 10;
+  columns: 60;
+}
+.bluetooth-list-trash {
+  background:    #00000000;
+  border:        0px;
+  color:         #ffffff;
+}
+
+.control-panel-column {
+  width: 50px;
+  /* Items inside this use a column Flexbox.*/
+  display: flex;
+  flex-direction: column;
+}
+#control-panel-custom-buttons {
+  display: none;
+  /* Give the custom buttons column a blue background. */
+  background-color: #1c4587ff;
+  height: fit-content;
+  border-radius: 10px;
+}
+
+.control-panel-column button {
+  margin: 0px 0px 5px 0px;
+  height: 50px;
+  font-size: 32px;
+
+  color: #e8eaed; /* Google grey 200 */
+  border: none;
+  outline: none;
+  background-color: transparent;
+}
+.control-panel-column button:disabled {
+  color: #9aa0a6; /* Google grey 500 */
+}
+.control-panel-column button.modal-button-opened {
+  border-radius: 10px;
+  background-color: #5f6368; /* Google grey 700 */
+}
+
+#device-displays {
+  /* Take up the remaining width of the window.*/
+  flex-grow: 1;
+  /* Don't grow taller than the window.*/
+  max-height: 100vh;
+  /* Allows child elements to be positioned relative to this element. */
+  position: relative;
+}
+
+/*
+ * Container <div> used to wrap each display's <video> element which is used for
+ * maintaining each display's width and height while the display is potentially
+ * rotating.
+ */
+.device-display {
+  /* Prevents #device-displays from using this element when computing flex size. */
+  position: absolute;
+}
+
+/* Container <div> to show info about the individual display. */
+.device-display-info {
+  color: white;
+  /* dark green */
+  background-color: #007000;
+  font-family: 'Open Sans', sans-serif;
+  text-indent: 0px;
+  border-radius: 10px;
+  padding: 10px;
+  margin-bottom: 10px;
+}
+
+/* The actual <video> element for each display. */
+.device-display-video {
+  position: absolute;
+  left:  0px;
+  touch-action: none;
+  object-fit: cover;
+}
diff --git a/host/frontend/webrtc/client_server.cpp b/host/frontend/webrtc/client_server.cpp
new file mode 100644
index 0000000..cfd4bb7
--- /dev/null
+++ b/host/frontend/webrtc/client_server.cpp
@@ -0,0 +1,101 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#include "host/frontend/webrtc/client_server.h"
+#include <android-base/logging.h>
+
+namespace cuttlefish {
+struct ClientFilesServer::Config {
+  Config(const std::string& dir)
+      : dir_(dir),
+        mount_({
+            .mount_next = nullptr,  /* linked-list "next" */
+            .mountpoint = "/",      /* mountpoint URL */
+            .origin = dir_.c_str(), /* serve from dir */
+            .def = "client.html",   /* default filename */
+            .protocol = nullptr,
+            .cgienv = nullptr,
+            .extra_mimetypes = nullptr,
+            .interpret = nullptr,
+            .cgi_timeout = 0,
+            .cache_max_age = 0,
+            .auth_mask = 0,
+            .cache_reusable = 0,
+            .cache_revalidate = 0,
+            .cache_intermediaries = 0,
+            .origin_protocol = LWSMPRO_FILE, /* files in a dir */
+            .mountpoint_len = 1,             /* char count */
+            .basic_auth_login_file = nullptr,
+        }) {
+    memset(&info_, 0, sizeof info_);
+    info_.port = 0;             // let the kernel select an available port
+    info_.iface = "127.0.0.1";  // listen only on localhost
+    info_.mounts = &mount_;
+  }
+
+  std::string dir_;
+  lws_http_mount mount_;
+  lws_context_creation_info info_;
+};
+
+ClientFilesServer::ClientFilesServer(std::unique_ptr<Config> config,
+                                     lws_context* context)
+    : config_(std::move(config)),
+      context_(context),
+      running_(true),
+      server_thread_([this]() { Serve(); }) {}
+
+ClientFilesServer::~ClientFilesServer() {
+  if (running_) {
+    running_ = false;
+    server_thread_.join();
+  }
+  if (context_) {
+    // Release the port and other resources
+    lws_context_destroy(context_);
+  }
+}
+
+std::unique_ptr<ClientFilesServer> ClientFilesServer::New(
+    const std::string& dir) {
+  std::unique_ptr<Config> conf(new Config(dir));
+  if (!conf) {
+    return nullptr;
+  }
+
+  auto ctx = lws_create_context(&conf->info_);
+  if (!ctx) {
+    LOG(ERROR) << "Failed to create lws context";
+    return nullptr;
+  }
+  return std::unique_ptr<ClientFilesServer>(
+      new ClientFilesServer(std::move(conf), ctx));
+}
+
+int ClientFilesServer::port() const {
+  // Get the port for the first (and only) vhost.
+  return lws_get_vhost_listen_port(lws_get_vhost_by_name(context_, "default"));
+}
+
+void ClientFilesServer::Serve() {
+  while (running_) {
+    if (lws_service(context_, 0) < 0) {
+      LOG(ERROR) << "Error serving client files";
+      return;
+    }
+  }
+}
+}  // namespace cuttlefish
+
diff --git a/host/frontend/webrtc/client_server.h b/host/frontend/webrtc/client_server.h
new file mode 100644
index 0000000..8d6376e
--- /dev/null
+++ b/host/frontend/webrtc/client_server.h
@@ -0,0 +1,47 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#pragma once
+
+#include <atomic>
+#include <memory>
+#include <string>
+#include <thread>
+
+#include <libwebsockets.h>
+
+namespace cuttlefish {
+// Utility class to serve the client files in a thread
+class ClientFilesServer {
+ public:
+  ~ClientFilesServer();
+
+  static std::unique_ptr<ClientFilesServer> New(const std::string& dir);
+
+  int port() const;
+
+ private:
+  struct Config;
+
+  ClientFilesServer(std::unique_ptr<Config> config, lws_context* context);
+
+  void Serve();
+
+  std::unique_ptr<Config> config_;
+  lws_context* context_;
+  std::atomic<bool> running_;
+  std::thread server_thread_;
+};
+}  // namespace cuttlefish
diff --git a/host/frontend/webrtc/connection_observer.cpp b/host/frontend/webrtc/connection_observer.cpp
index 0975faa..d51f3c1 100644
--- a/host/frontend/webrtc/connection_observer.cpp
+++ b/host/frontend/webrtc/connection_observer.cpp
@@ -96,26 +96,25 @@
  * i.e. when it is not in the confirmation UI mode (or TEE),
  * the control flow will fall back to this ConnectionObserverForAndroid
  */
-class ConnectionObserverForAndroid
+class ConnectionObserverImpl
     : public cuttlefish::webrtc_streaming::ConnectionObserver {
  public:
-  ConnectionObserverForAndroid(
+  ConnectionObserverImpl(
       cuttlefish::InputSockets &input_sockets,
       cuttlefish::KernelLogEventsHandler *kernel_log_events_handler,
       std::map<std::string, cuttlefish::SharedFD>
           commands_to_custom_action_servers,
       std::weak_ptr<DisplayHandler> display_handler,
-      CameraController *camera_controller)
+      CameraController *camera_controller,
+      cuttlefish::confui::HostVirtualInput &confui_input)
       : input_sockets_(input_sockets),
         kernel_log_events_handler_(kernel_log_events_handler),
         commands_to_custom_action_servers_(commands_to_custom_action_servers),
         weak_display_handler_(display_handler),
-        camera_controller_(camera_controller) {}
-  virtual ~ConnectionObserverForAndroid() {
+        camera_controller_(camera_controller),
+        confui_input_(confui_input) {}
+  virtual ~ConnectionObserverImpl() {
     auto display_handler = weak_display_handler_.lock();
-    if (display_handler) {
-      display_handler->DecClientCount();
-    }
     if (kernel_log_subscription_id_ != -1) {
       kernel_log_events_handler_->Unsubscribe(kernel_log_subscription_id_);
     }
@@ -125,7 +124,6 @@
                    /*ctrl_msg_sender*/) override {
     auto display_handler = weak_display_handler_.lock();
     if (display_handler) {
-      display_handler->IncClientCount();
       std::thread th([this]() {
         // The encoder in libwebrtc won't drop 5 consecutive frames due to frame
         // size, so we make sure at least 5 frames are sent every time a client
@@ -142,69 +140,89 @@
       });
       th.detach();
     }
+  }
+
+  void OnTouchEvent(const std::string &display_label, int x, int y,
+                    bool down) override {
+    if (confui_input_.IsConfUiActive()) {
+      ConfUiLog(DEBUG) << "delivering a touch event in confirmation UI mode";
+      confui_input_.TouchEvent(x, y, down);
+      return;
+    }
+    auto buffer = GetEventBuffer();
+    if (!buffer) {
+      LOG(ERROR) << "Failed to allocate event buffer";
+      return;
+    }
+    buffer->AddEvent(EV_ABS, ABS_X, x);
+    buffer->AddEvent(EV_ABS, ABS_Y, y);
+    buffer->AddEvent(EV_KEY, BTN_TOUCH, down);
+    buffer->AddEvent(EV_SYN, SYN_REPORT, 0);
+    cuttlefish::WriteAll(input_sockets_.GetTouchClientByLabel(display_label),
+                         reinterpret_cast<const char *>(buffer->data()),
+                         buffer->size());
+  }
+
+  void OnMultiTouchEvent(const std::string &display_label, Json::Value id,
+                         Json::Value slot, Json::Value x, Json::Value y,
+                         bool down, int size) {
+    auto buffer = GetEventBuffer();
+    if (!buffer) {
+      LOG(ERROR) << "Failed to allocate event buffer";
+      return;
     }
 
-    void OnTouchEvent(const std::string &display_label, int x, int y,
-                      bool down) override {
-      auto buffer = GetEventBuffer();
-      if (!buffer) {
-        LOG(ERROR) << "Failed to allocate event buffer";
-        return;
-      }
-      buffer->AddEvent(EV_ABS, ABS_X, x);
-      buffer->AddEvent(EV_ABS, ABS_Y, y);
-      buffer->AddEvent(EV_KEY, BTN_TOUCH, down);
-      buffer->AddEvent(EV_SYN, SYN_REPORT, 0);
-      cuttlefish::WriteAll(input_sockets_.GetTouchClientByLabel(display_label),
-                           reinterpret_cast<const char *>(buffer->data()),
-                           buffer->size());
-    }
+    for (int i = 0; i < size; i++) {
+      auto this_slot = slot[i].asInt();
+      auto this_id = id[i].asInt();
+      auto this_x = x[i].asInt();
+      auto this_y = y[i].asInt();
 
-    void OnMultiTouchEvent(const std::string &display_label, Json::Value id,
-                           Json::Value slot, Json::Value x, Json::Value y,
-                           bool down, int size) override {
-      auto buffer = GetEventBuffer();
-      if (!buffer) {
-        LOG(ERROR) << "Failed to allocate event buffer";
-        return;
-      }
-
-      for (int i = 0; i < size; i++) {
-        auto this_slot = slot[i].asInt();
-        auto this_id = id[i].asInt();
-        auto this_x = x[i].asInt();
-        auto this_y = y[i].asInt();
-        buffer->AddEvent(EV_ABS, ABS_MT_SLOT, this_slot);
+      if (confui_input_.IsConfUiActive()) {
         if (down) {
-          bool is_new = active_touch_slots_.insert(this_slot).second;
-          if (is_new) {
-            buffer->AddEvent(EV_ABS, ABS_MT_TRACKING_ID, this_id);
-            if (active_touch_slots_.size() == 1) {
-              buffer->AddEvent(EV_KEY, BTN_TOUCH, 1);
-            }
-          }
-          buffer->AddEvent(EV_ABS, ABS_MT_POSITION_X, this_x);
-          buffer->AddEvent(EV_ABS, ABS_MT_POSITION_Y, this_y);
-          // send ABS_X and ABS_Y for single-touch compatibility
-          buffer->AddEvent(EV_ABS, ABS_X, this_x);
-          buffer->AddEvent(EV_ABS, ABS_Y, this_y);
-        } else {
-          // released touch
+          ConfUiLog(DEBUG) << "Delivering event (" << x << ", " << y
+                           << ") to conf ui";
+        }
+        confui_input_.TouchEvent(this_x, this_y, down);
+        continue;
+      }
+
+      buffer->AddEvent(EV_ABS, ABS_MT_SLOT, this_slot);
+      if (down) {
+        bool is_new = active_touch_slots_.insert(this_slot).second;
+        if (is_new) {
           buffer->AddEvent(EV_ABS, ABS_MT_TRACKING_ID, this_id);
-          active_touch_slots_.erase(this_slot);
-          if (active_touch_slots_.empty()) {
-            buffer->AddEvent(EV_KEY, BTN_TOUCH, 0);
+          if (active_touch_slots_.size() == 1) {
+            buffer->AddEvent(EV_KEY, BTN_TOUCH, 1);
           }
         }
+        buffer->AddEvent(EV_ABS, ABS_MT_POSITION_X, this_x);
+        buffer->AddEvent(EV_ABS, ABS_MT_POSITION_Y, this_y);
+        // send ABS_X and ABS_Y for single-touch compatibility
+        buffer->AddEvent(EV_ABS, ABS_X, this_x);
+        buffer->AddEvent(EV_ABS, ABS_Y, this_y);
+      } else {
+        // released touch
+        buffer->AddEvent(EV_ABS, ABS_MT_TRACKING_ID, this_id);
+        active_touch_slots_.erase(this_slot);
+        if (active_touch_slots_.empty()) {
+          buffer->AddEvent(EV_KEY, BTN_TOUCH, 0);
+        }
       }
-
-      buffer->AddEvent(EV_SYN, SYN_REPORT, 0);
-      cuttlefish::WriteAll(input_sockets_.GetTouchClientByLabel(display_label),
-                           reinterpret_cast<const char *>(buffer->data()),
-                           buffer->size());
     }
 
+    buffer->AddEvent(EV_SYN, SYN_REPORT, 0);
+    cuttlefish::WriteAll(input_sockets_.GetTouchClientByLabel(display_label),
+                         reinterpret_cast<const char *>(buffer->data()),
+                         buffer->size());
+  }
+
   void OnKeyboardEvent(uint16_t code, bool down) override {
+    if (confui_input_.IsConfUiActive()) {
+      ConfUiLog(DEBUG) << "keyboard event ignored in confirmation UI mode";
+      return;
+    }
+
     auto buffer = GetEventBuffer();
     if (!buffer) {
       LOG(ERROR) << "Failed to allocate event buffer";
@@ -355,107 +373,6 @@
   std::weak_ptr<DisplayHandler> weak_display_handler_;
   std::set<int32_t> active_touch_slots_;
   cuttlefish::CameraController *camera_controller_;
-};
-
-class ConnectionObserverDemuxer
-    : public cuttlefish::webrtc_streaming::ConnectionObserver {
- public:
-  ConnectionObserverDemuxer(
-      /* params for the base class */
-      cuttlefish::InputSockets &input_sockets,
-      cuttlefish::KernelLogEventsHandler *kernel_log_events_handler,
-      std::map<std::string, cuttlefish::SharedFD>
-          commands_to_custom_action_servers,
-      std::weak_ptr<DisplayHandler> display_handler,
-      CameraController *camera_controller,
-      /* params for this class */
-      cuttlefish::confui::HostVirtualInput &confui_input)
-      : android_input_(input_sockets, kernel_log_events_handler,
-                       commands_to_custom_action_servers, display_handler,
-                       camera_controller),
-        confui_input_{confui_input} {}
-  virtual ~ConnectionObserverDemuxer() = default;
-
-  void OnConnected(std::function<void(const uint8_t *, size_t, bool)>
-                       ctrl_msg_sender) override {
-    android_input_.OnConnected(ctrl_msg_sender);
-  }
-
-  void OnTouchEvent(const std::string &label, int x, int y,
-                    bool down) override {
-    if (confui_input_.IsConfUiActive()) {
-      ConfUiLog(DEBUG) << "touch event ignored in confirmation UI mode";
-      return;
-    }
-    android_input_.OnTouchEvent(label, x, y, down);
-  }
-
-  void OnMultiTouchEvent(const std::string &label, Json::Value id,
-                         Json::Value slot, Json::Value x, Json::Value y,
-                         bool down, int size) override {
-    if (confui_input_.IsConfUiActive()) {
-      ConfUiLog(DEBUG) << "multi-touch event ignored in confirmation UI mode";
-      return;
-    }
-    android_input_.OnMultiTouchEvent(label, id, slot, x, y, down, size);
-  }
-
-  void OnKeyboardEvent(uint16_t code, bool down) override {
-    if (confui_input_.IsConfUiActive()) {
-      switch (code) {
-        case KEY_POWER:
-          confui_input_.PressConfirmButton(down);
-          break;
-        case KEY_MENU:
-          confui_input_.PressCancelButton(down);
-          break;
-        default:
-          ConfUiLog(DEBUG) << "key" << code
-                           << "is ignored in confirmation UI mode";
-          break;
-      }
-      return;
-    }
-    android_input_.OnKeyboardEvent(code, down);
-  }
-
-  void OnSwitchEvent(uint16_t code, bool state) override {
-    android_input_.OnSwitchEvent(code, state);
-  }
-
-  void OnAdbChannelOpen(std::function<bool(const uint8_t *, size_t)>
-                            adb_message_sender) override {
-    android_input_.OnAdbChannelOpen(adb_message_sender);
-  }
-
-  void OnAdbMessage(const uint8_t *msg, size_t size) override {
-    android_input_.OnAdbMessage(msg, size);
-  }
-
-  void OnControlChannelOpen(
-      std::function<bool(const Json::Value)> control_message_sender) override {
-    android_input_.OnControlChannelOpen(control_message_sender);
-  }
-
-  void OnControlMessage(const uint8_t *msg, size_t size) override {
-    android_input_.OnControlMessage(msg, size);
-  }
-
-  void OnBluetoothChannelOpen(std::function<bool(const uint8_t *, size_t)>
-                                  bluetooth_message_sender) override {
-    android_input_.OnBluetoothChannelOpen(bluetooth_message_sender);
-  }
-
-  void OnBluetoothMessage(const uint8_t *msg, size_t size) override {
-    android_input_.OnBluetoothMessage(msg, size);
-  }
-
-  void OnCameraData(const std::vector<char> &data) override {
-    android_input_.OnCameraData(data);
-  }
-
- private:
-  ConnectionObserverForAndroid android_input_;
   cuttlefish::confui::HostVirtualInput &confui_input_;
 };
 
@@ -470,10 +387,10 @@
 std::shared_ptr<cuttlefish::webrtc_streaming::ConnectionObserver>
 CfConnectionObserverFactory::CreateObserver() {
   return std::shared_ptr<cuttlefish::webrtc_streaming::ConnectionObserver>(
-      new ConnectionObserverDemuxer(input_sockets_, kernel_log_events_handler_,
-                                    commands_to_custom_action_servers_,
-                                    weak_display_handler_, camera_controller_,
-                                    confui_input_));
+      new ConnectionObserverImpl(input_sockets_, kernel_log_events_handler_,
+                                 commands_to_custom_action_servers_,
+                                 weak_display_handler_, camera_controller_,
+                                 confui_input_));
 }
 
 void CfConnectionObserverFactory::AddCustomActionServer(
diff --git a/host/frontend/webrtc/display_handler.cpp b/host/frontend/webrtc/display_handler.cpp
index 334c35f..3de1516 100644
--- a/host/frontend/webrtc/display_handler.cpp
+++ b/host/frontend/webrtc/display_handler.cpp
@@ -91,19 +91,4 @@
     display_sinks_[buffer_display]->OnFrame(buffer, time_stamp);
   }
 }
-
-void DisplayHandler::IncClientCount() {
-  client_count_++;
-  if (client_count_ == 1) {
-    screen_connector_.ReportClientsConnected(true);
-  }
-}
-
-void DisplayHandler::DecClientCount() {
-  client_count_--;
-  if (client_count_ == 0) {
-    screen_connector_.ReportClientsConnected(false);
-  }
-}
-
 }  // namespace cuttlefish
diff --git a/host/frontend/webrtc/display_handler.h b/host/frontend/webrtc/display_handler.h
index 7703b08..1411984 100644
--- a/host/frontend/webrtc/display_handler.h
+++ b/host/frontend/webrtc/display_handler.h
@@ -60,9 +60,6 @@
   [[noreturn]] void Loop();
   void SendLastFrame();
 
-  void IncClientCount();
-  void DecClientCount();
-
  private:
   GenerateProcessedFrameCallback GetScreenConnectorCallback();
   std::vector<std::shared_ptr<webrtc_streaming::VideoSink>> display_sinks_;
@@ -71,6 +68,5 @@
   std::uint32_t last_buffer_display_ = 0;
   std::mutex last_buffer_mutex_;
   std::mutex next_frame_mutex_;
-  int client_count_ = 0;
 };
 }  // namespace cuttlefish
diff --git a/host/frontend/webrtc/lib/camera_streamer.cpp b/host/frontend/webrtc/lib/camera_streamer.cpp
index 7634e28..c9c7cf0 100644
--- a/host/frontend/webrtc/lib/camera_streamer.cpp
+++ b/host/frontend/webrtc/lib/camera_streamer.cpp
@@ -23,7 +23,7 @@
 namespace webrtc_streaming {
 
 CameraStreamer::CameraStreamer(unsigned int port, unsigned int cid)
-    : cid_(cid), port_(port) {}
+    : cid_(cid), port_(port), camera_session_active_(false) {}
 
 CameraStreamer::~CameraStreamer() { Disconnect(); }
 
@@ -47,9 +47,10 @@
     LOG(INFO) << "Connected!";
   }
   auto resolution = resolution_.load();
-  if (resolution.height <= 0 || resolution.width <= 0) {
-    // We don't have a valid resolution that is necessary for
-    // potential frame scaling
+  if (resolution.height <= 0 || resolution.width <= 0 ||
+      !camera_session_active_.load()) {
+    // Nobody is receiving frames or we don't have a valid resolution that is
+    // necessary for potential frame scaling
     return;
   }
   auto frame = client_frame.video_frame_buffer()->ToI420().get();
@@ -142,7 +143,16 @@
   }
   reader_thread_ = std::thread([this] {
     while (cvd_connection_.IsConnected()) {
+      static constexpr auto kEventKey = "event";
+      static constexpr auto kMessageStart =
+          "VIRTUAL_DEVICE_START_CAMERA_SESSION";
+      static constexpr auto kMessageStop = "VIRTUAL_DEVICE_STOP_CAMERA_SESSION";
       auto json_value = cvd_connection_.ReadJsonMessage();
+      if (json_value[kEventKey] == kMessageStart) {
+        camera_session_active_ = true;
+      } else if (json_value[kEventKey] == kMessageStop) {
+        camera_session_active_ = false;
+      }
       if (!json_value.empty()) {
         SendMessage(json_value);
       }
diff --git a/host/frontend/webrtc/lib/camera_streamer.h b/host/frontend/webrtc/lib/camera_streamer.h
index ceab2e6..3afed62 100644
--- a/host/frontend/webrtc/lib/camera_streamer.h
+++ b/host/frontend/webrtc/lib/camera_streamer.h
@@ -67,6 +67,7 @@
   unsigned int cid_;
   unsigned int port_;
   std::thread reader_thread_;
+  std::atomic<bool> camera_session_active_;
 };
 
 }  // namespace webrtc_streaming
diff --git a/host/frontend/webrtc/lib/client_handler.cpp b/host/frontend/webrtc/lib/client_handler.cpp
index 4893f8d..9be1ca0 100644
--- a/host/frontend/webrtc/lib/client_handler.cpp
+++ b/host/frontend/webrtc/lib/client_handler.cpp
@@ -103,6 +103,39 @@
 
 }  // namespace
 
+// Video streams initiating in the client may be added and removed at unexpected
+// times, causing the webrtc objects to be destroyed and created every time.
+// This class hides away that complexity and allows to set up sinks only once.
+class ClientVideoTrackImpl : public ClientVideoTrackInterface {
+ public:
+  void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame> *sink,
+                       const rtc::VideoSinkWants &wants) override {
+    sink_ = sink;
+    wants_ = wants;
+    if (video_track_) {
+      video_track_->AddOrUpdateSink(sink, wants);
+    }
+  }
+
+  void SetVideoTrack(webrtc::VideoTrackInterface *track) {
+    video_track_ = track;
+    if (sink_) {
+      video_track_->AddOrUpdateSink(sink_, wants_);
+    }
+  }
+
+  void UnsetVideoTrack(webrtc::VideoTrackInterface *track) {
+    if (track == video_track_) {
+      video_track_ = nullptr;
+    }
+  }
+
+ private:
+  webrtc::VideoTrackInterface* video_track_;
+  rtc::VideoSinkInterface<webrtc::VideoFrame> *sink_ = nullptr;
+  rtc::VideoSinkWants wants_ = {};
+};
+
 class InputChannelHandler : public webrtc::DataChannelObserver {
  public:
   InputChannelHandler(
@@ -439,7 +472,8 @@
     : client_id_(client_id),
       observer_(observer),
       send_to_client_(send_to_client_cb),
-      on_connection_changed_cb_(on_connection_changed_cb) {}
+      on_connection_changed_cb_(on_connection_changed_cb),
+      camera_track_(new ClientVideoTrackImpl()) {}
 
 ClientHandler::~ClientHandler() {
   for (auto &data_channel : data_channels_) {
@@ -499,15 +533,8 @@
   return true;
 }
 
-webrtc::VideoTrackInterface *ClientHandler::GetCameraStream() const {
-  for (const auto &tranceiver : peer_connection_->GetTransceivers()) {
-    auto track = tranceiver->receiver()->track();
-    if (track &&
-        track->kind() == webrtc::MediaStreamTrackInterface::kVideoKind) {
-      return static_cast<webrtc::VideoTrackInterface *>(track.get());
-    }
-  }
-  return nullptr;
+ClientVideoTrackInterface* ClientHandler::GetCameraStream() {
+  return camera_track_.get();
 }
 
 void ClientHandler::LogAndReplyError(const std::string &error_msg) const {
@@ -518,10 +545,24 @@
   send_to_client_(reply);
 }
 
+void ClientHandler::AddPendingIceCandidates() {
+  // Add any ice candidates that arrived before the remote description
+  for (auto& candidate: pending_ice_candidates_) {
+    peer_connection_->AddIceCandidate(std::move(candidate),
+                                      [this](webrtc::RTCError error) {
+                                        if (!error.ok()) {
+                                          LogAndReplyError(error.message());
+                                        }
+                                      });
+  }
+  pending_ice_candidates_.clear();
+}
+
 void ClientHandler::OnCreateSDPSuccess(
     webrtc::SessionDescriptionInterface *desc) {
   std::string offer_str;
   desc->ToString(&offer_str);
+  std::string sdp_type = desc->type();
   peer_connection_->SetLocalDescription(
       // The peer connection wraps this raw pointer with a scoped_refptr, so
       // it's guaranteed to be deleted at some point
@@ -533,7 +574,7 @@
   desc = nullptr;
 
   Json::Value reply;
-  reply["type"] = "offer";
+  reply["type"] = sdp_type;
   reply["sdp"] = offer_str;
 
   state_ = State::kAwaitingAnswer;
@@ -582,6 +623,42 @@
         webrtc::PeerConnectionInterface::RTCOfferAnswerOptions());
     // The created offer wil be sent to the client on
     // OnSuccess(webrtc::SessionDescriptionInterface* desc)
+  } else if (type == "offer") {
+    auto result = ValidationResult::ValidateJsonObject(
+        message, type, {{"sdp", Json::ValueType::stringValue}});
+    if (!result.ok()) {
+      LogAndReplyError(result.error());
+      return;
+    }
+    auto remote_desc_str = message["sdp"].asString();
+    auto remote_desc = webrtc::CreateSessionDescription(
+        webrtc::SdpType::kOffer, remote_desc_str, nullptr /*error*/);
+    if (!remote_desc) {
+      LogAndReplyError("Failed to parse answer.");
+      return;
+    }
+
+    rtc::scoped_refptr<webrtc::SetRemoteDescriptionObserverInterface> observer(
+        new rtc::RefCountedObject<
+            CvdOnSetRemoteDescription>([this](webrtc::RTCError error) {
+          if (!error.ok()) {
+            LogAndReplyError(error.message());
+            // The remote description was rejected, this client can't be
+            // trusted anymore.
+            Close();
+            return;
+          }
+          remote_description_added_ = true;
+          AddPendingIceCandidates();
+          peer_connection_->CreateAnswer(
+              // No memory leak here because this is a ref counted objects and
+              // the peer connection immediately wraps it with a scoped_refptr
+              new rtc::RefCountedObject<CvdCreateSessionDescriptionObserver>(
+                  weak_from_this()),
+              webrtc::PeerConnectionInterface::RTCOfferAnswerOptions());
+        }));
+    peer_connection_->SetRemoteDescription(std::move(remote_desc), observer);
+    state_ = State::kConnecting;
   } else if (type == "answer") {
     if (state_ != State::kAwaitingAnswer) {
       LogAndReplyError("Received unexpected SDP answer");
@@ -611,6 +688,8 @@
               }
             }));
     peer_connection_->SetRemoteDescription(std::move(remote_desc), observer);
+    remote_description_added_ = true;
+    AddPendingIceCandidates();
     state_ = State::kConnecting;
 
   } else if (type == "ice-candidate") {
@@ -648,12 +727,21 @@
       LogAndReplyError("Failed to parse ICE candidate");
       return;
     }
-    peer_connection_->AddIceCandidate(std::move(candidate),
-                                      [this](webrtc::RTCError error) {
-                                        if (!error.ok()) {
-                                          LogAndReplyError(error.message());
-                                        }
-                                      });
+    if (remote_description_added_) {
+      peer_connection_->AddIceCandidate(std::move(candidate),
+                                        [this](webrtc::RTCError error) {
+                                          if (!error.ok()) {
+                                            LogAndReplyError(error.message());
+                                          }
+                                        });
+    } else {
+      // Store the ice candidate to be added later if it arrives before the
+      // remote description. This could happen if the client uses polling
+      // instead of websockets because the candidates are generated immediately
+      // after the remote (offer) description is set and the events and the ajax
+      // calls are asynchronous.
+      pending_ice_candidates_.push_back(std::move(candidate));
+    }
   } else {
     LogAndReplyError("Unknown client message type: " + type);
     return;
@@ -820,11 +908,22 @@
 }
 void ClientHandler::OnTrack(
     rtc::scoped_refptr<webrtc::RtpTransceiverInterface> transceiver) {
-  // ignore
+  auto track = transceiver->receiver()->track();
+  if (track && track->kind() == webrtc::MediaStreamTrackInterface::kVideoKind) {
+    // It's ok to take the raw pointer here because we make sure to unset it
+    // when the track is removed
+    camera_track_->SetVideoTrack(
+        static_cast<webrtc::VideoTrackInterface *>(track.get()));
+  }
 }
 void ClientHandler::OnRemoveTrack(
     rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver) {
-  // ignore
+  auto track = receiver->track();
+  if (track && track->kind() == webrtc::MediaStreamTrackInterface::kVideoKind) {
+    // this only unsets if the track matches the one already in store
+    camera_track_->UnsetVideoTrack(
+        reinterpret_cast<webrtc::VideoTrackInterface *>(track.get()));
+  }
 }
 
 }  // namespace webrtc_streaming
diff --git a/host/frontend/webrtc/lib/client_handler.h b/host/frontend/webrtc/lib/client_handler.h
index f7f587b..ea58552 100644
--- a/host/frontend/webrtc/lib/client_handler.h
+++ b/host/frontend/webrtc/lib/client_handler.h
@@ -40,6 +40,9 @@
 class BluetoothChannelHandler;
 class CameraChannelHandler;
 
+class ClientVideoTrackInterface;
+class ClientVideoTrackImpl;
+
 class ClientHandler : public webrtc::PeerConnectionObserver,
                       public std::enable_shared_from_this<ClientHandler> {
  public:
@@ -58,7 +61,7 @@
   bool AddAudio(rtc::scoped_refptr<webrtc::AudioTrackInterface> track,
                   const std::string& label);
 
-  webrtc::VideoTrackInterface* GetCameraStream() const;
+  ClientVideoTrackInterface* GetCameraStream();
 
   void HandleMessage(const Json::Value& client_message);
 
@@ -117,6 +120,7 @@
   void Close();
 
   void LogAndReplyError(const std::string& error_msg) const;
+  void AddPendingIceCandidates();
 
   int client_id_;
   State state_ = State::kNew;
@@ -130,6 +134,18 @@
   std::unique_ptr<ControlChannelHandler> control_handler_;
   std::unique_ptr<BluetoothChannelHandler> bluetooth_handler_;
   std::unique_ptr<CameraChannelHandler> camera_data_handler_;
+  std::unique_ptr<ClientVideoTrackImpl> camera_track_;
+  bool remote_description_added_ = false;
+  std::vector<std::unique_ptr<webrtc::IceCandidateInterface>>
+      pending_ice_candidates_;
+};
+
+class ClientVideoTrackInterface {
+ public:
+  virtual ~ClientVideoTrackInterface() = default;
+  virtual void AddOrUpdateSink(
+      rtc::VideoSinkInterface<webrtc::VideoFrame>* sink,
+      const rtc::VideoSinkWants& wants) = 0;
 };
 
 }  // namespace webrtc_streaming
diff --git a/host/frontend/webrtc/lib/server_connection.cpp b/host/frontend/webrtc/lib/server_connection.cpp
new file mode 100644
index 0000000..b9c90d7
--- /dev/null
+++ b/host/frontend/webrtc/lib/server_connection.cpp
@@ -0,0 +1,634 @@
+//
+// Copyright (C) 2020 The Android Open Source Project
+//
+// 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
+//
+
+#include "host/frontend/webrtc/lib/server_connection.h"
+
+#include <android-base/logging.h>
+#include <libwebsockets.h>
+
+#include "common/libs/fs/shared_fd.h"
+#include "common/libs/fs/shared_select.h"
+#include "common/libs/utils/files.h"
+
+namespace cuttlefish {
+namespace webrtc_streaming {
+
+// ServerConnection over Unix socket
+class UnixServerConnection : public ServerConnection {
+ public:
+  UnixServerConnection(SharedFD conn,
+                       std::weak_ptr<ServerConnectionObserver> observer,
+                       SharedFD thread_notifier_);
+  ~UnixServerConnection() override;
+
+  bool Send(const Json::Value& msg) override;
+
+ private:
+  void Connect() override;
+  void ReadLoop();
+
+  SharedFD conn_;
+  std::mutex write_mtx_;
+  std::weak_ptr<ServerConnectionObserver> observer_;
+  // The event fd must be declared before the thread to ensure it's initialized
+  // before the thread starts and is safe to be accessed from it.
+  SharedFD thread_notifier_;
+  std::atomic_bool running_ = true;
+  std::thread thread_;
+};
+
+// ServerConnection using websockets
+class WsConnectionContext;
+
+class WsConnection : public std::enable_shared_from_this<WsConnection> {
+ public:
+  struct CreateConnectionSul {
+    lws_sorted_usec_list_t sul = {};
+    std::weak_ptr<WsConnection> weak_this;
+  };
+
+  WsConnection(int port, const std::string& addr, const std::string& path,
+               ServerConfig::Security secure,
+               const std::vector<std::pair<std::string, std::string>>& headers,
+               std::weak_ptr<ServerConnectionObserver> observer,
+               std::shared_ptr<WsConnectionContext> context);
+
+  ~WsConnection();
+
+  void Connect();
+  bool Send(const Json::Value& msg);
+
+  void ConnectInner();
+
+  void OnError(const std::string& error);
+  void OnReceive(const uint8_t* data, size_t len, bool is_binary);
+  void OnOpen();
+  void OnClose();
+  void OnWriteable();
+
+  void AddHttpHeaders(unsigned char** p, unsigned char* end) const;
+
+ private:
+  struct WsBuffer {
+    WsBuffer() = default;
+    WsBuffer(const uint8_t* data, size_t len, bool binary)
+        : buffer_(LWS_PRE + len), is_binary_(binary) {
+      memcpy(&buffer_[LWS_PRE], data, len);
+    }
+
+    uint8_t* data() { return &buffer_[LWS_PRE]; }
+    bool is_binary() const { return is_binary_; }
+    size_t size() const { return buffer_.size() - LWS_PRE; }
+
+   private:
+    std::vector<uint8_t> buffer_;
+    bool is_binary_;
+  };
+  bool Send(const uint8_t* data, size_t len, bool binary = false);
+
+  CreateConnectionSul extended_sul_;
+  struct lws* wsi_;
+  const int port_;
+  const std::string addr_;
+  const std::string path_;
+  const ServerConfig::Security security_;
+  const std::vector<std::pair<std::string, std::string>> headers_;
+
+  std::weak_ptr<ServerConnectionObserver> observer_;
+
+  // each element contains the data to be sent and whether it's binary or not
+  std::deque<WsBuffer> write_queue_;
+  std::mutex write_queue_mutex_;
+  // The connection object should not outlive the context object. This reference
+  // guarantees it.
+  std::shared_ptr<WsConnectionContext> context_;
+};
+
+class WsConnectionContext
+    : public std::enable_shared_from_this<WsConnectionContext> {
+ public:
+  static std::shared_ptr<WsConnectionContext> Create();
+
+  WsConnectionContext(struct lws_context* lws_ctx);
+  ~WsConnectionContext();
+
+  std::unique_ptr<ServerConnection> CreateConnection(
+      int port, const std::string& addr, const std::string& path,
+      ServerConfig::Security secure,
+      std::weak_ptr<ServerConnectionObserver> observer,
+      const std::vector<std::pair<std::string, std::string>>& headers);
+
+  void RememberConnection(void*, std::weak_ptr<WsConnection>);
+  void ForgetConnection(void*);
+  std::shared_ptr<WsConnection> GetConnection(void*);
+
+  struct lws_context* lws_context() {
+    return lws_context_;
+  }
+
+ private:
+  void Start();
+
+  std::map<void*, std::weak_ptr<WsConnection>> weak_by_ptr_;
+  std::mutex map_mutex_;
+  struct lws_context* lws_context_;
+  std::thread message_loop_;
+};
+
+std::unique_ptr<ServerConnection> ServerConnection::Connect(
+    const ServerConfig& conf,
+    std::weak_ptr<ServerConnectionObserver> observer) {
+  std::unique_ptr<ServerConnection> ret;
+  // If the provided address points to an existing UNIX socket in the file
+  // system connect to it, otherwise assume it's a network address and connect
+  // using websockets
+  if (FileIsSocket(conf.addr)) {
+    auto conn = SharedFD::SocketLocalClient(conf.addr, false, SOCK_SEQPACKET);
+    if (!conn->IsOpen()) {
+      LOG(ERROR) << "Failed to connect to unix socket: " << conn->StrError();
+      if (auto o = observer.lock(); o) {
+        o->OnError("Failed to connect to unix socket");
+      }
+      // Safe to return null here since OnOpen wasn't called and therefore the
+      // connection won't be accessed.
+      return nullptr;
+    }
+    auto thread_notifier = SharedFD::Event();
+    if (!thread_notifier->IsOpen()) {
+      LOG(ERROR) << "Failed to create eventfd for background thread";
+      return nullptr;
+    }
+    ret.reset(new UnixServerConnection(conn, observer, thread_notifier));
+  } else {
+    // This can be a local variable since the ws connection will keep a
+    // reference to it.
+    auto ws_context = WsConnectionContext::Create();
+    CHECK(ws_context) << "Failed to create websocket context";
+    ret = ws_context->CreateConnection(conf.port, conf.addr, conf.path,
+                                       conf.security, observer,
+                                       conf.http_headers);
+  }
+  ret->Connect();
+  return ret;
+}
+
+void ServerConnection::Reconnect() { Connect(); }
+
+// UnixServerConnection implementation
+
+UnixServerConnection::UnixServerConnection(
+    SharedFD conn, std::weak_ptr<ServerConnectionObserver> observer,
+    SharedFD thread_notifier)
+    : conn_(conn),
+      observer_(observer),
+      thread_notifier_(thread_notifier),
+      thread_([this]() { ReadLoop(); }) {}
+
+UnixServerConnection::~UnixServerConnection() {
+  if (!thread_notifier_->IsOpen()) {
+    // The thread won't be running if this isn't open
+    return;
+  }
+  running_ = false;
+  if (thread_notifier_->EventfdWrite(1) < 0) {
+    LOG(ERROR) << "Failed to notify background thread, this thread may block";
+  }
+  if (thread_.joinable()) {
+    thread_.join();
+  }
+}
+
+bool UnixServerConnection::Send(const Json::Value& msg) {
+  Json::StreamWriterBuilder factory;
+  auto str = Json::writeString(factory, msg);
+  std::lock_guard<std::mutex> lock(write_mtx_);
+  auto res =
+      conn_->Send(reinterpret_cast<const uint8_t*>(str.c_str()), str.size(), 0);
+  if (res < 0) {
+    LOG(ERROR) << "Failed to send data to signaling server: "
+               << conn_->StrError();
+    // Don't call OnError() here, the receiving thread probably did it already
+    // or is about to do it.
+  }
+  // A SOCK_SEQPACKET unix socket will send the entire message or fail, but it
+  // won't send a partial message.
+  return res == str.size();
+}
+
+void UnixServerConnection::Connect() {
+  if (auto observer = observer_.lock(); observer) {
+    observer->OnOpen();
+  }
+}
+
+void UnixServerConnection::ReadLoop() {
+  if (!thread_notifier_->IsOpen()) {
+    LOG(ERROR) << "The UnixServerConnection's background thread is unable to "
+                  "receive notifications so it can't run";
+    return;
+  }
+  std::vector<uint8_t> buffer(4096, 0);
+  while (running_) {
+    SharedFDSet rset;
+    rset.Set(thread_notifier_);
+    rset.Set(conn_);
+    auto res = Select(&rset, nullptr, nullptr, nullptr);
+    if (res < 0) {
+      LOG(ERROR) << "Failed to select from background thread";
+      break;
+    }
+    if (rset.IsSet(thread_notifier_)) {
+      eventfd_t val;
+      auto res = thread_notifier_->EventfdRead(&val);
+      if (res < 0) {
+        LOG(ERROR) << "Error reading from event fd: "
+                   << thread_notifier_->StrError();
+        break;
+      }
+    }
+    if (rset.IsSet(conn_)) {
+      auto size = conn_->Recv(buffer.data(), 0, MSG_TRUNC | MSG_PEEK);
+      if (size > buffer.size()) {
+        // Enlarge enough to accommodate size bytes and be a multiple of 4096
+        auto new_size = (size + 4095) & ~4095;
+        buffer.resize(new_size);
+      }
+      auto res = conn_->Recv(buffer.data(), buffer.size(), MSG_TRUNC);
+      if (res < 0) {
+        LOG(ERROR) << "Failed to read from server: " << conn_->StrError();
+        if (auto observer = observer_.lock(); observer) {
+          observer->OnError(conn_->StrError());
+        }
+        return;
+      }
+      auto observer = observer_.lock();
+      if (observer) {
+        observer->OnReceive(buffer.data(), res, false);
+      }
+    }
+  }
+}
+
+// WsConnection implementation
+
+int LwsCallback(struct lws* wsi, enum lws_callback_reasons reason, void* user,
+                void* in, size_t len);
+void CreateConnectionCallback(lws_sorted_usec_list_t* sul);
+
+namespace {
+
+constexpr char kProtocolName[] = "cf-webrtc-device";
+constexpr int kBufferSize = 65536;
+
+const uint32_t backoff_ms[] = {1000, 2000, 3000, 4000, 5000};
+
+const lws_retry_bo_t kRetry = {
+    .retry_ms_table = backoff_ms,
+    .retry_ms_table_count = LWS_ARRAY_SIZE(backoff_ms),
+    .conceal_count = LWS_ARRAY_SIZE(backoff_ms),
+
+    .secs_since_valid_ping = 3,    /* force PINGs after secs idle */
+    .secs_since_valid_hangup = 10, /* hangup after secs idle */
+
+    .jitter_percent = 20,
+};
+
+const struct lws_protocols kProtocols[2] = {
+    {kProtocolName, LwsCallback, 0, kBufferSize, 0, NULL, 0},
+    {NULL, NULL, 0, 0, 0, NULL, 0}};
+
+}  // namespace
+
+std::shared_ptr<WsConnectionContext> WsConnectionContext::Create() {
+  struct lws_context_creation_info context_info = {};
+  context_info.port = CONTEXT_PORT_NO_LISTEN;
+  context_info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
+  context_info.protocols = kProtocols;
+  struct lws_context* lws_ctx = lws_create_context(&context_info);
+  if (!lws_ctx) {
+    return nullptr;
+  }
+  return std::shared_ptr<WsConnectionContext>(new WsConnectionContext(lws_ctx));
+}
+
+WsConnectionContext::WsConnectionContext(struct lws_context* lws_ctx)
+    : lws_context_(lws_ctx) {
+  Start();
+}
+
+WsConnectionContext::~WsConnectionContext() {
+  lws_context_destroy(lws_context_);
+  if (message_loop_.joinable()) {
+    message_loop_.join();
+  }
+}
+
+void WsConnectionContext::Start() {
+  message_loop_ = std::thread([this]() {
+    for (;;) {
+      if (lws_service(lws_context_, 0) < 0) {
+        break;
+      }
+    }
+  });
+}
+
+// This wrapper is needed because the ServerConnection objects are meant to be
+// referenced by std::unique_ptr but WsConnection needs to be referenced by
+// std::shared_ptr because it's also (weakly) referenced by the websocket
+// thread.
+class WsConnectionWrapper : public ServerConnection {
+ public:
+  WsConnectionWrapper(std::shared_ptr<WsConnection> conn) : conn_(conn) {}
+
+  bool Send(const Json::Value& msg) override { return conn_->Send(msg); }
+
+ private:
+  void Connect() override { return conn_->Connect(); }
+  std::shared_ptr<WsConnection> conn_;
+};
+
+std::unique_ptr<ServerConnection> WsConnectionContext::CreateConnection(
+    int port, const std::string& addr, const std::string& path,
+    ServerConfig::Security security,
+    std::weak_ptr<ServerConnectionObserver> observer,
+    const std::vector<std::pair<std::string, std::string>>& headers) {
+  return std::unique_ptr<ServerConnection>(
+      new WsConnectionWrapper(std::make_shared<WsConnection>(
+          port, addr, path, security, headers, observer, shared_from_this())));
+}
+
+std::shared_ptr<WsConnection> WsConnectionContext::GetConnection(void* raw) {
+  std::shared_ptr<WsConnection> connection;
+  {
+    std::lock_guard<std::mutex> lock(map_mutex_);
+    if (weak_by_ptr_.count(raw) == 0) {
+      return nullptr;
+    }
+    connection = weak_by_ptr_[raw].lock();
+    if (!connection) {
+      weak_by_ptr_.erase(raw);
+    }
+  }
+  return connection;
+}
+
+void WsConnectionContext::RememberConnection(void* raw,
+                                             std::weak_ptr<WsConnection> conn) {
+  std::lock_guard<std::mutex> lock(map_mutex_);
+  weak_by_ptr_.emplace(
+      std::pair<void*, std::weak_ptr<WsConnection>>(raw, conn));
+}
+
+void WsConnectionContext::ForgetConnection(void* raw) {
+  std::lock_guard<std::mutex> lock(map_mutex_);
+  weak_by_ptr_.erase(raw);
+}
+
+WsConnection::WsConnection(
+    int port, const std::string& addr, const std::string& path,
+    ServerConfig::Security security,
+    const std::vector<std::pair<std::string, std::string>>& headers,
+    std::weak_ptr<ServerConnectionObserver> observer,
+    std::shared_ptr<WsConnectionContext> context)
+    : port_(port),
+      addr_(addr),
+      path_(path),
+      security_(security),
+      headers_(headers),
+      observer_(observer),
+      context_(context) {}
+
+WsConnection::~WsConnection() {
+  context_->ForgetConnection(this);
+  // This will cause the callback to be called which will drop the connection
+  // after seeing the context doesn't remember this object
+  lws_callback_on_writable(wsi_);
+}
+
+void WsConnection::Connect() {
+  memset(&extended_sul_.sul, 0, sizeof(extended_sul_.sul));
+  extended_sul_.weak_this = weak_from_this();
+  lws_sul_schedule(context_->lws_context(), 0, &extended_sul_.sul,
+                   CreateConnectionCallback, 1);
+}
+
+void WsConnection::AddHttpHeaders(unsigned char** p, unsigned char* end) const {
+  for (const auto& header_entry : headers_) {
+    const auto& name = header_entry.first;
+    const auto& value = header_entry.second;
+    auto res = lws_add_http_header_by_name(
+        wsi_, reinterpret_cast<const unsigned char*>(name.c_str()),
+        reinterpret_cast<const unsigned char*>(value.c_str()), value.size(), p,
+        end);
+    if (res != 0) {
+      LOG(ERROR) << "Unable to add header: " << name;
+    }
+  }
+  if (!headers_.empty()) {
+    // Let LWS know we added some headers.
+    lws_client_http_body_pending(wsi_, 1);
+  }
+}
+
+void WsConnection::OnError(const std::string& error) {
+  auto observer = observer_.lock();
+  if (observer) {
+    observer->OnError(error);
+  }
+}
+void WsConnection::OnReceive(const uint8_t* data, size_t len, bool is_binary) {
+  auto observer = observer_.lock();
+  if (observer) {
+    observer->OnReceive(data, len, is_binary);
+  }
+}
+void WsConnection::OnOpen() {
+  auto observer = observer_.lock();
+  if (observer) {
+    observer->OnOpen();
+  }
+}
+void WsConnection::OnClose() {
+  auto observer = observer_.lock();
+  if (observer) {
+    observer->OnClose();
+  }
+}
+
+void WsConnection::OnWriteable() {
+  WsBuffer buffer;
+  {
+    std::lock_guard<std::mutex> lock(write_queue_mutex_);
+    if (write_queue_.size() == 0) {
+      return;
+    }
+    buffer = std::move(write_queue_.front());
+    write_queue_.pop_front();
+  }
+  auto flags = lws_write_ws_flags(
+      buffer.is_binary() ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, true, true);
+  auto res = lws_write(wsi_, buffer.data(), buffer.size(),
+                       (enum lws_write_protocol)flags);
+  if (res != buffer.size()) {
+    LOG(WARNING) << "Unable to send the entire message!";
+  }
+}
+
+bool WsConnection::Send(const Json::Value& msg) {
+  Json::StreamWriterBuilder factory;
+  auto str = Json::writeString(factory, msg);
+  return Send(reinterpret_cast<const uint8_t*>(str.c_str()), str.size());
+}
+
+bool WsConnection::Send(const uint8_t* data, size_t len, bool binary) {
+  if (!wsi_) {
+    LOG(WARNING) << "Send called on an uninitialized connection!!";
+    return false;
+  }
+  WsBuffer buffer(data, len, binary);
+  {
+    std::lock_guard<std::mutex> lock(write_queue_mutex_);
+    write_queue_.emplace_back(std::move(buffer));
+  }
+
+  lws_callback_on_writable(wsi_);
+  return true;
+}
+
+int LwsCallback(struct lws* wsi, enum lws_callback_reasons reason, void* user,
+                void* in, size_t len) {
+  constexpr int DROP = -1;
+  constexpr int OK = 0;
+
+  // For some values of `reason`, `user` doesn't point to the value provided
+  // when the connection was created. This function object should be used with
+  // care.
+  auto with_connection =
+      [wsi, user](std::function<void(std::shared_ptr<WsConnection>)> cb) {
+        auto context = reinterpret_cast<WsConnectionContext*>(user);
+        auto connection = context->GetConnection(wsi);
+        if (!connection) {
+          return DROP;
+        }
+        cb(connection);
+        return OK;
+      };
+
+  switch (reason) {
+    case LWS_CALLBACK_CLIENT_CONNECTION_ERROR:
+      return with_connection([in](std::shared_ptr<WsConnection> connection) {
+        connection->OnError(in ? (char*)in : "(null)");
+      });
+
+    case LWS_CALLBACK_CLIENT_RECEIVE:
+      return with_connection(
+          [in, len, wsi](std::shared_ptr<WsConnection> connection) {
+            connection->OnReceive((const uint8_t*)in, len,
+                                  lws_frame_is_binary(wsi));
+          });
+
+    case LWS_CALLBACK_CLIENT_ESTABLISHED:
+      return with_connection([](std::shared_ptr<WsConnection> connection) {
+        connection->OnOpen();
+      });
+
+    case LWS_CALLBACK_CLIENT_CLOSED:
+      return with_connection([](std::shared_ptr<WsConnection> connection) {
+        connection->OnClose();
+      });
+
+    case LWS_CALLBACK_CLIENT_WRITEABLE:
+      return with_connection([](std::shared_ptr<WsConnection> connection) {
+        connection->OnWriteable();
+      });
+
+    case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER:
+      return with_connection(
+          [in, len](std::shared_ptr<WsConnection> connection) {
+            auto p = reinterpret_cast<unsigned char**>(in);
+            auto end = (*p) + len;
+            connection->AddHttpHeaders(p, end);
+          });
+
+    case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE:
+      // This callback is only called when we add additional HTTP headers, let
+      // LWS know we're done modifying the HTTP request.
+      lws_client_http_body_pending(wsi, 0);
+      return 0;
+
+    default:
+      LOG(VERBOSE) << "Unhandled value: " << reason;
+      return lws_callback_http_dummy(wsi, reason, user, in, len);
+  }
+}
+
+void CreateConnectionCallback(lws_sorted_usec_list_t* sul) {
+  std::shared_ptr<WsConnection> connection =
+      reinterpret_cast<WsConnection::CreateConnectionSul*>(sul)
+          ->weak_this.lock();
+  if (!connection) {
+    LOG(WARNING) << "The object was already destroyed by the time of the first "
+                 << "connection attempt. That's unusual.";
+    return;
+  }
+  connection->ConnectInner();
+}
+
+void WsConnection::ConnectInner() {
+  struct lws_client_connect_info connect_info;
+
+  memset(&connect_info, 0, sizeof(connect_info));
+
+  connect_info.context = context_->lws_context();
+  connect_info.port = port_;
+  connect_info.address = addr_.c_str();
+  connect_info.path = path_.c_str();
+  connect_info.host = connect_info.address;
+  connect_info.origin = connect_info.address;
+  switch (security_) {
+    case ServerConfig::Security::kAllowSelfSigned:
+      connect_info.ssl_connection = LCCSCF_ALLOW_SELFSIGNED |
+                                    LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK |
+                                    LCCSCF_USE_SSL;
+      break;
+    case ServerConfig::Security::kStrict:
+      connect_info.ssl_connection = LCCSCF_USE_SSL;
+      break;
+    case ServerConfig::Security::kInsecure:
+      connect_info.ssl_connection = 0;
+      break;
+  }
+  connect_info.protocol = "webrtc-operator";
+  connect_info.local_protocol_name = kProtocolName;
+  connect_info.pwsi = &wsi_;
+  connect_info.retry_and_idle_policy = &kRetry;
+  // There is no guarantee the connection object still exists when the callback
+  // is called. Put the context instead as the user data which is guaranteed to
+  // still exist and holds a weak ptr to the connection.
+  connect_info.userdata = context_.get();
+
+  if (lws_client_connect_via_info(&connect_info)) {
+    // wsi_ is not initialized until after the call to
+    // lws_client_connect_via_info(). Luckily, this is guaranteed to run before
+    // the protocol callback is called because it runs in the same loop.
+    context_->RememberConnection(wsi_, weak_from_this());
+  } else {
+    LOG(ERROR) << "Connection failed!";
+  }
+}
+
+}  // namespace webrtc_streaming
+}  // namespace cuttlefish
diff --git a/host/frontend/webrtc/lib/server_connection.h b/host/frontend/webrtc/lib/server_connection.h
new file mode 100644
index 0000000..247681e
--- /dev/null
+++ b/host/frontend/webrtc/lib/server_connection.h
@@ -0,0 +1,90 @@
+//
+// Copyright (C) 2020 The Android Open Source Project
+//
+// 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
+//
+
+#pragma once
+
+#include <string.h>
+
+#include <deque>
+#include <functional>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <thread>
+#include <vector>
+
+#include <json/json.h>
+#include <libwebsockets.h>
+
+namespace cuttlefish {
+namespace webrtc_streaming {
+
+struct ServerConfig {
+  enum class Security {
+    kInsecure,
+    kAllowSelfSigned,
+    kStrict,
+  };
+
+  // The ip address or domain name of the operator server.
+  std::string addr;
+  int port;
+  // The path component of the operator server's register url.
+  std::string path;
+  // The security level to use when connecting to the operator server.
+  Security security;
+  // A list of key value pairs to include as HTTP handshake headers when
+  // connecting to the operator.
+  std::vector<std::pair<std::string, std::string>> http_headers;
+};
+
+class ServerConnectionObserver {
+ public:
+  virtual ~ServerConnectionObserver() = default;
+  // Called when the connection to the server has been established. This is the
+  // cue to start using Send().
+  virtual void OnOpen() = 0;
+  virtual void OnClose() = 0;
+  // Called when the connection to the server has failed with an unrecoverable
+  // error.
+  virtual void OnError(const std::string& error) = 0;
+  virtual void OnReceive(const uint8_t* msg, size_t length, bool is_binary) = 0;
+};
+
+// Represents a connection to the signaling server. When a connection is created
+// it connects with the server automatically but sends no info.
+class ServerConnection {
+ public:
+  static std::unique_ptr<ServerConnection> Connect(
+      const ServerConfig& conf,
+      std::weak_ptr<ServerConnectionObserver> observer);
+
+  // Destroying the connection will disconnect from the signaling server and
+  // release any open fds.
+  virtual ~ServerConnection() = default;
+
+  // Sends data to the server encoded as JSON.
+  virtual bool Send(const Json::Value&) = 0;
+
+  // makes re-connect request
+  virtual void Reconnect();
+
+ private:
+  virtual void Connect() = 0;
+};
+
+}  // namespace webrtc_streaming
+}  // namespace cuttlefish
diff --git a/host/frontend/webrtc/lib/streamer.cpp b/host/frontend/webrtc/lib/streamer.cpp
index 71bbab5..e99f014 100644
--- a/host/frontend/webrtc/lib/streamer.cpp
+++ b/host/frontend/webrtc/lib/streamer.cpp
@@ -62,12 +62,10 @@
 constexpr auto kControlPanelButtonHingeAngleValue = "hinge_angle_value";
 constexpr auto kCustomControlPanelButtonsField = "custom_control_panel_buttons";
 
-void SendJson(WsConnection* ws_conn, const Json::Value& data) {
-  Json::StreamWriterBuilder factory;
-  auto data_str = Json::writeString(factory, data);
-  ws_conn->Send(reinterpret_cast<const uint8_t*>(data_str.c_str()),
-                data_str.size());
-}
+constexpr int kRegistrationRetries = 3;
+constexpr int kRetryFirstIntervalMs = 1000;
+constexpr int kReconnectRetries = 100;
+constexpr int kReconnectIntervalMs = 1000;
 
 bool ParseMessage(const uint8_t* data, size_t length, Json::Value* msg_out) {
   auto str = reinterpret_cast<const char*>(data);
@@ -136,10 +134,14 @@
 
 }  // namespace
 
-class Streamer::Impl : public WsConnectionObserver {
+
+class Streamer::Impl : public ServerConnectionObserver,
+                       public std::enable_shared_from_this<ServerConnectionObserver> {
  public:
   std::shared_ptr<ClientHandler> CreateClientHandler(int client_id);
 
+  void Register(std::weak_ptr<OperatorObserver> observer);
+
   void SendMessageToClient(int client_id, const Json::Value& msg);
   void DestroyClientHandler(int client_id);
   void SetupCameraForClient(int client_id);
@@ -157,7 +159,7 @@
   // no need for extra synchronization mechanisms (mutex)
   StreamerConfig config_;
   OperatorServerConfig operator_config_;
-  std::shared_ptr<WsConnection> server_connection_;
+  std::unique_ptr<ServerConnection> server_connection_;
   std::shared_ptr<ConnectionObserverFactory> connection_observer_factory_;
   rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
       peer_connection_factory_;
@@ -173,6 +175,8 @@
   std::vector<ControlPanelButtonDescriptor> custom_control_panel_buttons_;
   std::shared_ptr<AudioDeviceModuleWrapper> audio_device_module_;
   std::unique_ptr<CameraStreamer> camera_streamer_;
+  int registration_retries_left_ = kRegistrationRetries;
+  int retry_interval_ms_ = kRetryFirstIntervalMs;
 };
 
 Streamer::Streamer(std::unique_ptr<Streamer::Impl> impl)
@@ -307,22 +311,7 @@
   // No need to block the calling thread on this, the observer will be notified
   // when the connection is established.
   impl_->signal_thread_->PostTask(RTC_FROM_HERE, [this, observer]() {
-    impl_->operator_observer_ = observer;
-    // This can be a local variable since the connection object will keep a
-    // reference to it.
-    auto ws_context = WsConnectionContext::Create();
-    CHECK(ws_context) << "Failed to create websocket context";
-    impl_->server_connection_ = ws_context->CreateConnection(
-        impl_->config_.operator_server.port,
-        impl_->config_.operator_server.addr,
-        impl_->config_.operator_server.path,
-        impl_->config_.operator_server.security, impl_,
-        impl_->config_.operator_server.http_headers);
-
-    CHECK(impl_->server_connection_)
-        << "Unable to create websocket connection object";
-
-    impl_->server_connection_->Connect();
+    impl_->Register(observer);
   });
 }
 
@@ -345,6 +334,21 @@
   }
 }
 
+void Streamer::Impl::Register(std::weak_ptr<OperatorObserver> observer) {
+  operator_observer_ = observer;
+  // When the connection is established the OnOpen function will be called where
+  // the registration will take place
+  if (!server_connection_) {
+    server_connection_ =
+        ServerConnection::Connect(config_.operator_server, weak_from_this());
+  } else {
+    // in case connection attempt is retried, just call Reconnect().
+    // Recreating server_connection_ object will destroy existing WSConnection
+    // object and task re-scheduling will fail
+    server_connection_->Reconnect();
+  }
+}
+
 void Streamer::Impl::OnOpen() {
   // Called from the websocket thread.
   // Connected to operator.
@@ -354,6 +358,9 @@
         cuttlefish::webrtc_signaling::kRegisterType;
     register_obj[cuttlefish::webrtc_signaling::kDeviceIdField] =
         config_.device_id;
+    CHECK(config_.client_files_port >= 0) << "Invalide device port provided";
+    register_obj[cuttlefish::webrtc_signaling::kDevicePortField] =
+        config_.client_files_port;
 
     Json::Value device_info;
     Json::Value displays(Json::ValueType::arrayValue);
@@ -409,7 +416,7 @@
     }
     device_info[kCustomControlPanelButtonsField] = custom_control_panel_buttons;
     register_obj[cuttlefish::webrtc_signaling::kDeviceInfoField] = device_info;
-    SendJson(server_connection_.get(), register_obj);
+    server_connection_->Send(register_obj);
     // Do this last as OnRegistered() is user code and may take some time to
     // complete (although it shouldn't...)
     auto observer = operator_observer_.lock();
@@ -430,17 +437,38 @@
       observer->OnClose();
     }
   });
+  LOG(INFO) << "Trying to re-connect to operator..";
+  registration_retries_left_ = kReconnectRetries;
+  retry_interval_ms_ = kReconnectIntervalMs;
+  signal_thread_->PostDelayedTask(
+      RTC_FROM_HERE, [this]() { Register(operator_observer_); },
+      retry_interval_ms_);
 }
 
 void Streamer::Impl::OnError(const std::string& error) {
   // Called from websocket thread.
-  LOG(ERROR) << "Error on connection with the operator: " << error;
-  signal_thread_->PostTask(RTC_FROM_HERE, [this]() {
-    auto observer = operator_observer_.lock();
-    if (observer) {
-      observer->OnError();
-    }
-  });
+  if (registration_retries_left_) {
+    LOG(WARNING) << "Connection to operator failed (" << error << "), "
+                 << registration_retries_left_ << " retries left"
+                 << " (will retry in " << retry_interval_ms_ / 1000 << "s)";
+    --registration_retries_left_;
+    signal_thread_->PostDelayedTask(
+        RTC_FROM_HERE,
+        [this]() {
+          // Need to reconnect and register again with operator
+          Register(operator_observer_);
+        },
+        retry_interval_ms_);
+    retry_interval_ms_ *= 2;
+  } else {
+    LOG(ERROR) << "Error on connection with the operator: " << error;
+    signal_thread_->PostTask(RTC_FROM_HERE, [this]() {
+      auto observer = operator_observer_.lock();
+      if (observer) {
+        observer->OnError();
+      }
+    });
+  }
 }
 
 void Streamer::Impl::HandleConfigMessage(const Json::Value& server_message) {
@@ -635,8 +663,8 @@
       cuttlefish::webrtc_signaling::kForwardType;
   wrapper[cuttlefish::webrtc_signaling::kClientIdField] = client_id;
   // This is safe to call from the webrtc threads because
-  // WsConnection is thread safe
-  SendJson(server_connection_.get(), wrapper);
+  // ServerConnection(s) are thread safe
+  server_connection_->Send(wrapper);
 }
 
 void Streamer::Impl::DestroyClientHandler(int client_id) {
diff --git a/host/frontend/webrtc/lib/streamer.h b/host/frontend/webrtc/lib/streamer.h
index 50a7e12..bc2297e 100644
--- a/host/frontend/webrtc/lib/streamer.h
+++ b/host/frontend/webrtc/lib/streamer.h
@@ -32,7 +32,7 @@
 #include "host/frontend/webrtc/lib/connection_observer.h"
 #include "host/frontend/webrtc/lib/local_recorder.h"
 #include "host/frontend/webrtc/lib/video_sink.h"
-#include "host/frontend/webrtc/lib/ws_connection.h"
+#include "host/frontend/webrtc/lib/server_connection.h"
 
 namespace cuttlefish {
 namespace webrtc_streaming {
@@ -42,18 +42,9 @@
 struct StreamerConfig {
   // The id with which to register with the operator server.
   std::string device_id;
-  struct {
-    // The ip address or domain name of the operator server.
-    std::string addr;
-    int port;
-    // The path component of the operator server's register url.
-    std::string path;
-    // The security level to use when connecting to the operator server.
-    WsConnection::Security security;
-    // A list of key value pairs to include as HTTP handshake headers when
-    // connecting to the operator.
-    std::vector<std::pair<std::string, std::string>> http_headers;
-  } operator_server;
+  // The port on which the client files are being served
+  int client_files_port;
+  ServerConfig operator_server;
   // The port ranges webrtc is allowed to use.
   // [0,0] means all ports
   std::pair<uint16_t, uint16_t> udp_port_range = {15550, 15558};
diff --git a/host/frontend/webrtc/lib/utils.cpp b/host/frontend/webrtc/lib/utils.cpp
index 78460c3..e84b897 100644
--- a/host/frontend/webrtc/lib/utils.cpp
+++ b/host/frontend/webrtc/lib/utils.cpp
@@ -28,6 +28,9 @@
 std::string ValidateField(const Json::Value &obj, const std::string &type,
                           const std::string &field_name,
                           const Json::ValueType &field_type, bool required) {
+  if (!obj.isObject()) {
+    return "Expected object with name-value pairs";
+  }
   if (!obj.isMember(field_name) && !required) {
     return "";
   }
diff --git a/host/frontend/webrtc/lib/ws_connection.cpp b/host/frontend/webrtc/lib/ws_connection.cpp
deleted file mode 100644
index 5303c21..0000000
--- a/host/frontend/webrtc/lib/ws_connection.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-//
-// Copyright (C) 2020 The Android Open Source Project
-//
-// 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
-//
-
-#include "host/frontend/webrtc/lib/ws_connection.h"
-
-#include <android-base/logging.h>
-#include <libwebsockets.h>
-
-class WsConnectionContextImpl;
-
-class WsConnectionImpl : public WsConnection,
-                         public std::enable_shared_from_this<WsConnectionImpl> {
- public:
-  struct CreateConnectionSul {
-    lws_sorted_usec_list_t sul = {};
-    std::weak_ptr<WsConnectionImpl> weak_this;
-  };
-
-  WsConnectionImpl(
-      int port, const std::string& addr, const std::string& path,
-      Security secure,
-      const std::vector<std::pair<std::string, std::string>>& headers,
-      std::weak_ptr<WsConnectionObserver> observer,
-      std::shared_ptr<WsConnectionContextImpl> context);
-
-  ~WsConnectionImpl() override;
-
-  void Connect() override;
-  void ConnectInner();
-
-  bool Send(const uint8_t* data, size_t len, bool binary = false) override;
-
-  void OnError(const std::string& error);
-  void OnReceive(const uint8_t* data, size_t len, bool is_binary);
-  void OnOpen();
-  void OnClose();
-  void OnWriteable();
-
-  void AddHttpHeaders(unsigned char** p, unsigned char* end) const;
-
- private:
-  struct WsBuffer {
-    WsBuffer() = default;
-    WsBuffer(const uint8_t* data, size_t len, bool binary)
-        : buffer_(LWS_PRE + len), is_binary_(binary) {
-      memcpy(&buffer_[LWS_PRE], data, len);
-    }
-
-    uint8_t* data() { return &buffer_[LWS_PRE]; }
-    bool is_binary() const { return is_binary_; }
-    size_t size() const { return buffer_.size() - LWS_PRE; }
-
-   private:
-    std::vector<uint8_t> buffer_;
-    bool is_binary_;
-  };
-
-  CreateConnectionSul extended_sul_;
-  struct lws* wsi_;
-  const int port_;
-  const std::string addr_;
-  const std::string path_;
-  const Security security_;
-  const std::vector<std::pair<std::string, std::string>> headers_;
-
-  std::weak_ptr<WsConnectionObserver> observer_;
-
-  // each element contains the data to be sent and whether it's binary or not
-  std::deque<WsBuffer> write_queue_;
-  std::mutex write_queue_mutex_;
-  // The connection object should not outlive the context object. This reference
-  // guarantees it.
-  std::shared_ptr<WsConnectionContextImpl> context_;
-};
-
-class WsConnectionContextImpl
-    : public WsConnectionContext,
-      public std::enable_shared_from_this<WsConnectionContextImpl> {
- public:
-  WsConnectionContextImpl(struct lws_context* lws_ctx);
-  ~WsConnectionContextImpl() override;
-
-  std::shared_ptr<WsConnection> CreateConnection(
-      int port, const std::string& addr, const std::string& path,
-      WsConnection::Security secure,
-      std::weak_ptr<WsConnectionObserver> observer,
-      const std::vector<std::pair<std::string, std::string>>& headers) override;
-
-  void RememberConnection(void*, std::weak_ptr<WsConnectionImpl>);
-  void ForgetConnection(void*);
-  std::shared_ptr<WsConnectionImpl> GetConnection(void*);
-
-  struct lws_context* lws_context() {
-    return lws_context_;
-  }
-
- private:
-  void Start();
-
-  std::map<void*, std::weak_ptr<WsConnectionImpl>> weak_by_ptr_;
-  std::mutex map_mutex_;
-  struct lws_context* lws_context_;
-  std::thread message_loop_;
-};
-
-int LwsCallback(struct lws* wsi, enum lws_callback_reasons reason, void* user,
-                void* in, size_t len);
-void CreateConnectionCallback(lws_sorted_usec_list_t* sul);
-
-namespace {
-
-constexpr char kProtocolName[] = "cf-webrtc-device";
-constexpr int kBufferSize = 65536;
-
-const uint32_t backoff_ms[] = {1000, 2000, 3000, 4000, 5000};
-
-const lws_retry_bo_t kRetry = {
-    .retry_ms_table = backoff_ms,
-    .retry_ms_table_count = LWS_ARRAY_SIZE(backoff_ms),
-    .conceal_count = LWS_ARRAY_SIZE(backoff_ms),
-
-    .secs_since_valid_ping = 3,    /* force PINGs after secs idle */
-    .secs_since_valid_hangup = 10, /* hangup after secs idle */
-
-    .jitter_percent = 20,
-};
-
-const struct lws_protocols kProtocols[2] = {
-    {kProtocolName, LwsCallback, 0, kBufferSize, 0, NULL, 0},
-    {NULL, NULL, 0, 0, 0, NULL, 0}};
-
-}  // namespace
-
-std::shared_ptr<WsConnectionContext> WsConnectionContext::Create() {
-  struct lws_context_creation_info context_info = {};
-  context_info.port = CONTEXT_PORT_NO_LISTEN;
-  context_info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
-  context_info.protocols = kProtocols;
-  struct lws_context* lws_ctx = lws_create_context(&context_info);
-  if (!lws_ctx) {
-    return nullptr;
-  }
-  return std::shared_ptr<WsConnectionContext>(
-      new WsConnectionContextImpl(lws_ctx));
-}
-
-WsConnectionContextImpl::WsConnectionContextImpl(struct lws_context* lws_ctx)
-    : lws_context_(lws_ctx) {
-  Start();
-}
-
-WsConnectionContextImpl::~WsConnectionContextImpl() {
-  lws_context_destroy(lws_context_);
-  if (message_loop_.joinable()) {
-    message_loop_.join();
-  }
-}
-
-void WsConnectionContextImpl::Start() {
-  message_loop_ = std::thread([this]() {
-    for (;;) {
-      if (lws_service(lws_context_, 0) < 0) {
-        break;
-      }
-    }
-  });
-}
-
-std::shared_ptr<WsConnection> WsConnectionContextImpl::CreateConnection(
-    int port, const std::string& addr, const std::string& path,
-    WsConnection::Security security,
-    std::weak_ptr<WsConnectionObserver> observer,
-    const std::vector<std::pair<std::string, std::string>>& headers) {
-  return std::shared_ptr<WsConnection>(new WsConnectionImpl(
-      port, addr, path, security, headers, observer, shared_from_this()));
-}
-
-std::shared_ptr<WsConnectionImpl> WsConnectionContextImpl::GetConnection(
-    void* raw) {
-  std::shared_ptr<WsConnectionImpl> connection;
-  {
-    std::lock_guard<std::mutex> lock(map_mutex_);
-    if (weak_by_ptr_.count(raw) == 0) {
-      return nullptr;
-    }
-    connection = weak_by_ptr_[raw].lock();
-    if (!connection) {
-      weak_by_ptr_.erase(raw);
-    }
-  }
-  return connection;
-}
-
-void WsConnectionContextImpl::RememberConnection(
-    void* raw, std::weak_ptr<WsConnectionImpl> conn) {
-  std::lock_guard<std::mutex> lock(map_mutex_);
-  weak_by_ptr_.emplace(
-      std::pair<void*, std::weak_ptr<WsConnectionImpl>>(raw, conn));
-}
-
-void WsConnectionContextImpl::ForgetConnection(void* raw) {
-  std::lock_guard<std::mutex> lock(map_mutex_);
-  weak_by_ptr_.erase(raw);
-}
-
-WsConnectionImpl::WsConnectionImpl(
-    int port, const std::string& addr, const std::string& path,
-    Security security,
-    const std::vector<std::pair<std::string, std::string>>& headers,
-    std::weak_ptr<WsConnectionObserver> observer,
-    std::shared_ptr<WsConnectionContextImpl> context)
-    : port_(port),
-      addr_(addr),
-      path_(path),
-      security_(security),
-      headers_(headers),
-      observer_(observer),
-      context_(context) {}
-
-WsConnectionImpl::~WsConnectionImpl() {
-  context_->ForgetConnection(this);
-  // This will cause the callback to be called which will drop the connection
-  // after seeing the context doesn't remember this object
-  lws_callback_on_writable(wsi_);
-}
-
-void WsConnectionImpl::Connect() {
-  memset(&extended_sul_.sul, 0, sizeof(extended_sul_.sul));
-  extended_sul_.weak_this = weak_from_this();
-  lws_sul_schedule(context_->lws_context(), 0, &extended_sul_.sul,
-                   CreateConnectionCallback, 1);
-}
-
-void WsConnectionImpl::AddHttpHeaders(unsigned char** p,
-                                      unsigned char* end) const {
-  for (const auto& header_entry: headers_) {
-    const auto& name = header_entry.first;
-    const auto& value = header_entry.second;
-    auto res = lws_add_http_header_by_name(
-        wsi_, reinterpret_cast<const unsigned char*>(name.c_str()),
-        reinterpret_cast<const unsigned char*>(value.c_str()), value.size(), p,
-        end);
-    if (res != 0) {
-      LOG(ERROR) << "Unable to add header: " << name;
-    }
-  }
-  if (!headers_.empty()) {
-    // Let LWS know we added some headers.
-    lws_client_http_body_pending(wsi_, 1);
-  }
-}
-
-void WsConnectionImpl::OnError(const std::string& error) {
-  auto observer = observer_.lock();
-  if (observer) {
-    observer->OnError(error);
-  }
-}
-void WsConnectionImpl::OnReceive(const uint8_t* data, size_t len,
-                                 bool is_binary) {
-  auto observer = observer_.lock();
-  if (observer) {
-    observer->OnReceive(data, len, is_binary);
-  }
-}
-void WsConnectionImpl::OnOpen() {
-  auto observer = observer_.lock();
-  if (observer) {
-    observer->OnOpen();
-  }
-}
-void WsConnectionImpl::OnClose() {
-  auto observer = observer_.lock();
-  if (observer) {
-    observer->OnClose();
-  }
-}
-
-void WsConnectionImpl::OnWriteable() {
-  WsBuffer buffer;
-  {
-    std::lock_guard<std::mutex> lock(write_queue_mutex_);
-    if (write_queue_.size() == 0) {
-      return;
-    }
-    buffer = std::move(write_queue_.front());
-    write_queue_.pop_front();
-  }
-  auto flags = lws_write_ws_flags(
-      buffer.is_binary() ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, true, true);
-  auto res = lws_write(wsi_, buffer.data(), buffer.size(),
-                       (enum lws_write_protocol)flags);
-  if (res != buffer.size()) {
-    LOG(WARNING) << "Unable to send the entire message!";
-  }
-}
-
-bool WsConnectionImpl::Send(const uint8_t* data, size_t len, bool binary) {
-  if (!wsi_) {
-    LOG(WARNING) << "Send called on an uninitialized connection!!";
-    return false;
-  }
-  WsBuffer buffer(data, len, binary);
-  {
-    std::lock_guard<std::mutex> lock(write_queue_mutex_);
-    write_queue_.emplace_back(std::move(buffer));
-  }
-
-  lws_callback_on_writable(wsi_);
-  return true;
-}
-
-int LwsCallback(struct lws* wsi, enum lws_callback_reasons reason, void* user,
-                void* in, size_t len) {
-  constexpr int DROP = -1;
-  constexpr int OK = 0;
-
-  // For some values of `reason`, `user` doesn't point to the value provided
-  // when the connection was created. This function object should be used with
-  // care.
-  auto with_connection =
-      [wsi, user](std::function<void(std::shared_ptr<WsConnectionImpl>)> cb) {
-        auto context = reinterpret_cast<WsConnectionContextImpl*>(user);
-        auto connection = context->GetConnection(wsi);
-        if (!connection) {
-          return DROP;
-        }
-        cb(connection);
-        return OK;
-      };
-
-  switch (reason) {
-    case LWS_CALLBACK_CLIENT_CONNECTION_ERROR:
-      return with_connection(
-          [in](std::shared_ptr<WsConnectionImpl> connection) {
-            connection->OnError(in ? (char*)in : "(null)");
-          });
-
-    case LWS_CALLBACK_CLIENT_RECEIVE:
-      return with_connection(
-          [in, len, wsi](std::shared_ptr<WsConnectionImpl> connection) {
-            connection->OnReceive((const uint8_t*)in, len,
-                                  lws_frame_is_binary(wsi));
-          });
-
-    case LWS_CALLBACK_CLIENT_ESTABLISHED:
-      return with_connection([](std::shared_ptr<WsConnectionImpl> connection) {
-        connection->OnOpen();
-      });
-
-    case LWS_CALLBACK_CLIENT_CLOSED:
-      return with_connection([](std::shared_ptr<WsConnectionImpl> connection) {
-        connection->OnClose();
-      });
-
-    case LWS_CALLBACK_CLIENT_WRITEABLE:
-      return with_connection([](std::shared_ptr<WsConnectionImpl> connection) {
-        connection->OnWriteable();
-      });
-
-    case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER:
-      return with_connection(
-          [in, len](std::shared_ptr<WsConnectionImpl> connection) {
-            auto p = reinterpret_cast<unsigned char**>(in);
-            auto end = (*p) + len;
-            connection->AddHttpHeaders(p, end);
-          });
-
-    case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE:
-      // This callback is only called when we add additional HTTP headers, let
-      // LWS know we're done modifying the HTTP request.
-      lws_client_http_body_pending(wsi, 0);
-      return 0;
-
-    default:
-      LOG(VERBOSE) << "Unhandled value: " << reason;
-      return lws_callback_http_dummy(wsi, reason, user, in, len);
-  }
-}
-
-void CreateConnectionCallback(lws_sorted_usec_list_t* sul) {
-  std::shared_ptr<WsConnectionImpl> connection =
-      reinterpret_cast<WsConnectionImpl::CreateConnectionSul*>(sul)
-          ->weak_this.lock();
-  if (!connection) {
-    LOG(WARNING) << "The object was already destroyed by the time of the first "
-                 << "connection attempt. That's unusual.";
-    return;
-  }
-  connection->ConnectInner();
-}
-
-void WsConnectionImpl::ConnectInner() {
-  struct lws_client_connect_info connect_info;
-
-  memset(&connect_info, 0, sizeof(connect_info));
-
-  connect_info.context = context_->lws_context();
-  connect_info.port = port_;
-  connect_info.address = addr_.c_str();
-  connect_info.path = path_.c_str();
-  connect_info.host = connect_info.address;
-  connect_info.origin = connect_info.address;
-  switch (security_) {
-    case Security::kAllowSelfSigned:
-      connect_info.ssl_connection = LCCSCF_ALLOW_SELFSIGNED |
-                                    LCCSCF_SKIP_SERVER_CERT_HOSTNAME_CHECK |
-                                    LCCSCF_USE_SSL;
-      break;
-    case Security::kStrict:
-      connect_info.ssl_connection = LCCSCF_USE_SSL;
-      break;
-    case Security::kInsecure:
-      connect_info.ssl_connection = 0;
-      break;
-  }
-  connect_info.protocol = "webrtc-operator";
-  connect_info.local_protocol_name = kProtocolName;
-  connect_info.pwsi = &wsi_;
-  connect_info.retry_and_idle_policy = &kRetry;
-  // There is no guarantee the connection object still exists when the callback
-  // is called. Put the context instead as the user data which is guaranteed to
-  // still exist and holds a weak ptr to the connection.
-  connect_info.userdata = context_.get();
-
-  if (lws_client_connect_via_info(&connect_info)) {
-    // wsi_ is not initialized until after the call to
-    // lws_client_connect_via_info(). Luckily, this is guaranteed to run before
-    // the protocol callback is called because it runs in the same loop.
-    context_->RememberConnection(wsi_, weak_from_this());
-  } else {
-    LOG(ERROR) << "Connection failed!";
-  }
-}
diff --git a/host/frontend/webrtc/lib/ws_connection.h b/host/frontend/webrtc/lib/ws_connection.h
deleted file mode 100644
index 1c03265..0000000
--- a/host/frontend/webrtc/lib/ws_connection.h
+++ /dev/null
@@ -1,72 +0,0 @@
-//
-// Copyright (C) 2020 The Android Open Source Project
-//
-// 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
-//
-
-#pragma once
-
-#include <string.h>
-
-#include <deque>
-#include <functional>
-#include <map>
-#include <memory>
-#include <mutex>
-#include <string>
-#include <thread>
-#include <vector>
-
-#include <libwebsockets.h>
-
-class WsConnectionObserver {
- public:
-  virtual ~WsConnectionObserver() = default;
-  virtual void OnOpen() = 0;
-  virtual void OnClose() = 0;
-  virtual void OnError(const std::string& error) = 0;
-  virtual void OnReceive(const uint8_t* msg, size_t length, bool is_binary) = 0;
-};
-
-class WsConnection {
- public:
-  enum class Security {
-    kInsecure,
-    kAllowSelfSigned,
-    kStrict,
-  };
-
-  virtual ~WsConnection() = default;
-
-  virtual void Connect() = 0;
-
-  virtual bool Send(const uint8_t* data, size_t len, bool binary = false) = 0;
-
- protected:
-  WsConnection() = default;
-};
-
-class WsConnectionContext {
- public:
-  static std::shared_ptr<WsConnectionContext> Create();
-
-  virtual ~WsConnectionContext() = default;
-
-  virtual std::shared_ptr<WsConnection> CreateConnection(
-      int port, const std::string& addr, const std::string& path,
-      WsConnection::Security secure,
-      std::weak_ptr<WsConnectionObserver> observer,
-      const std::vector<std::pair<std::string, std::string>>& headers = {}) = 0;
-
- protected:
-  WsConnectionContext() = default;
-};
diff --git a/host/frontend/webrtc/main.cpp b/host/frontend/webrtc/main.cpp
index 57d5644..b607dca 100644
--- a/host/frontend/webrtc/main.cpp
+++ b/host/frontend/webrtc/main.cpp
@@ -30,6 +30,7 @@
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/utils/files.h"
 #include "host/frontend/webrtc/audio_handler.h"
+#include "host/frontend/webrtc/client_server.h"
 #include "host/frontend/webrtc/connection_observer.h"
 #include "host/frontend/webrtc/display_handler.h"
 #include "host/frontend/webrtc/kernel_log_events_handler.h"
@@ -59,6 +60,7 @@
             "Whether to send input events in virtio format.");
 DEFINE_int32(audio_server_fd, -1, "An fd to listen on for audio frames");
 DEFINE_int32(camera_streamer_fd, -1, "An fd to send client camera frames");
+DEFINE_string(client_dir, "webrtc", "Location of the client files");
 
 using cuttlefish::AudioHandler;
 using cuttlefish::CfConnectionObserverFactory;
@@ -68,6 +70,7 @@
 using cuttlefish::webrtc_streaming::Streamer;
 using cuttlefish::webrtc_streaming::StreamerConfig;
 using cuttlefish::webrtc_streaming::VideoSink;
+using cuttlefish::webrtc_streaming::ServerConfig;
 
 class CfOperatorObserver
     : public cuttlefish::webrtc_streaming::OperatorObserver {
@@ -131,6 +134,12 @@
   return std::make_unique<cuttlefish::AudioServer>(audio_server_fd);
 }
 
+fruit::Component<cuttlefish::CustomActionConfigProvider> WebRtcComponent() {
+  return fruit::createComponent()
+      .install(cuttlefish::ConfigFlagPlaceholder)
+      .install(cuttlefish::CustomActionsComponent);
+};
+
 int main(int argc, char** argv) {
   cuttlefish::DefaultSubprocessLogging(argv);
   ::gflags::ParseCommandLineFlags(&argc, &argv, true);
@@ -197,6 +206,8 @@
   auto screen_connector_ptr = cuttlefish::DisplayHandler::ScreenConnector::Get(
       FLAGS_frame_server_fd, host_mode_ctrl);
   auto& screen_connector = *(screen_connector_ptr.get());
+  auto client_server = cuttlefish::ClientFilesServer::New(FLAGS_client_dir);
+  CHECK(client_server) << "Failed to initialize client files server";
 
   // create confirmation UI service, giving host_mode_ctrl and
   // screen_connector
@@ -207,15 +218,21 @@
   StreamerConfig streamer_config;
 
   streamer_config.device_id = instance.webrtc_device_id();
+  streamer_config.client_files_port = client_server->port();
   streamer_config.tcp_port_range = cvd_config->webrtc_tcp_port_range();
   streamer_config.udp_port_range = cvd_config->webrtc_udp_port_range();
   streamer_config.operator_server.addr = cvd_config->sig_server_address();
   streamer_config.operator_server.port = cvd_config->sig_server_port();
   streamer_config.operator_server.path = cvd_config->sig_server_path();
-  streamer_config.operator_server.security =
-      cvd_config->sig_server_strict()
-          ? WsConnection::Security::kStrict
-          : WsConnection::Security::kAllowSelfSigned;
+  if (cvd_config->sig_server_secure()) {
+    streamer_config.operator_server.security =
+        cvd_config->sig_server_strict()
+            ? ServerConfig::Security::kStrict
+            : ServerConfig::Security::kAllowSelfSigned;
+  } else {
+    streamer_config.operator_server.security =
+        ServerConfig::Security::kInsecure;
+  }
 
   if (!cvd_config->sig_server_headers_path().empty()) {
     streamer_config.operator_server.http_headers =
@@ -265,7 +282,6 @@
     CHECK(local_recorder) << "Could not create local recorder";
 
     streamer->RecordDisplays(*local_recorder);
-    display_handler->IncClientCount();
   }
 
   observer_factory->SetDisplayHandler(display_handler);
@@ -310,7 +326,17 @@
     action_server_fds[server] = fd;
   }
 
-  for (const auto& custom_action : cvd_config->custom_actions()) {
+  fruit::Injector<cuttlefish::CustomActionConfigProvider> injector(
+      WebRtcComponent);
+  for (auto& fragment :
+       injector.getMultibindings<cuttlefish::ConfigFragment>()) {
+    CHECK(cvd_config->LoadFragment(*fragment))
+        << "Failed to load config fragment";
+  }
+
+  const auto& actions_provider =
+      injector.get<cuttlefish::CustomActionConfigProvider&>();
+  for (const auto& custom_action : actions_provider.CustomActions()) {
     if (custom_action.shell_command) {
       if (custom_action.buttons.size() != 1) {
         LOG(FATAL) << "Expected exactly one button for custom action command: "
diff --git a/host/frontend/webrtc_operator/Android.bp b/host/frontend/webrtc_operator/Android.bp
index 54eda44..c734ae0 100644
--- a/host/frontend/webrtc_operator/Android.bp
+++ b/host/frontend/webrtc_operator/Android.bp
@@ -38,6 +38,7 @@
         "webrtc_signaling_headers",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "liblog",
         "libcrypto",
@@ -67,51 +68,23 @@
 }
 
 prebuilt_usr_share_host {
-    name: "webrtc_style.css",
-    src: "assets/style.css",
-    filename: "style.css",
+    name: "webrtc_index.css",
+    src: "assets/index.css",
+    filename: "index.css",
     sub_dir: "webrtc/assets",
 }
 
 prebuilt_usr_share_host {
-    name: "webrtc_controls.css",
-    src: "assets/controls.css",
-    filename: "controls.css",
-    sub_dir: "webrtc/assets",
-}
-
-prebuilt_usr_share_host {
-    name: "webrtc_adb.js",
-    src: "assets/js/adb.js",
-    filename: "adb.js",
+    name: "webrtc_index.js",
+    src: "assets/js/index.js",
+    filename: "index.js",
     sub_dir: "webrtc/assets/js",
 }
 
 prebuilt_usr_share_host {
-    name: "webrtc_cf.js",
-    src: "assets/js/cf_webrtc.js",
-    filename: "cf_webrtc.js",
-    sub_dir: "webrtc/assets/js",
-}
-
-prebuilt_usr_share_host {
-    name: "webrtc_app.js",
-    src: "assets/js/app.js",
-    filename: "app.js",
-    sub_dir: "webrtc/assets/js",
-}
-
-prebuilt_usr_share_host {
-    name: "webrtc_controls.js",
-    src: "assets/js/controls.js",
-    filename: "controls.js",
-    sub_dir: "webrtc/assets/js",
-}
-
-prebuilt_usr_share_host {
-    name: "webrtc_rootcanal.js",
-    src: "assets/js/rootcanal.js",
-    filename: "rootcanal.js",
+    name: "webrtc_server_connector.js",
+    src: "assets/js/server_connector.js",
+    filename: "server_connector.js",
     sub_dir: "webrtc/assets/js",
 }
 
diff --git a/common/libs/utils/size_utils.cpp b/host/frontend/webrtc_operator/assets/index.css
similarity index 64%
copy from common/libs/utils/size_utils.cpp
copy to host/frontend/webrtc_operator/assets/index.css
index 9f25445..335e075 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/host/frontend/webrtc_operator/assets/index.css
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2019 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,15 +14,24 @@
  * limitations under the License.
  */
 
-#include "common/libs/utils/size_utils.h"
-
-#include <unistd.h>
-
-namespace cuttlefish {
-
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
+body {
+  background-color:black;
+  margin: 0;
 }
 
-}  // namespace cuttlefish
+#device-selector {
+  color: whitesmoke;
+}
+
+#device-selector li.device-entry {
+  cursor: pointer;
+}
+
+#refresh-list {
+  cursor: pointer;
+}
+
+#device-list .device-entry button {
+  margin-left: 10px;
+}
+
diff --git a/host/frontend/webrtc_operator/assets/index.html b/host/frontend/webrtc_operator/assets/index.html
index f0dc25e..09d8c70 100644
--- a/host/frontend/webrtc_operator/assets/index.html
+++ b/host/frontend/webrtc_operator/assets/index.html
@@ -18,11 +18,8 @@
     <head>
         <title>My Virtual Device Playground</title>
 
-        <link rel="stylesheet" type="text/css" href="style.css" >
-        <link rel="stylesheet" type="text/css" href="controls.css" >
-        <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons+Outlined">
+        <link rel="stylesheet" type="text/css" href="index.css" >
         <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
-        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
     </head>
 
     <body>
@@ -30,57 +27,6 @@
         <h1>Available devices <span id='refresh-list'>&#8635;</span></h1>
         <ul id="device-list"></ul>
       </section>
-      <section id='device-connection'>
-        <div id='header'>
-          <div id='app-controls'>
-            <div id="keyboard-capture-control" title="Capture Keyboard"></div>
-            <div id="mic-capture-control" title="Capture Microphone"></div>
-            <div id="camera-control" title="Capture Camera"></div>
-            <audio autoplay controls id="device-audio"></audio>
-          </div>
-          <div id='status-div'>
-            <h3 id='status-message' class='connecting'>Connecting to device</h3>
-          </div>
-        </div>
-        <div id='controls-and-displays'>
-          <div id='control-panel-default-buttons' class='control-panel-column'>
-            <button id='device-details-button' title='Device Details' class='material-icons'>
-              settings
-            </button>
-            <button id='bluetooth-console-button' title='Bluetooth console' class='material-icons'>
-              settings_bluetooth
-            </button>
-          </div>
-          <div id='control-panel-custom-buttons' class='control-panel-column'></div>
-          <div id='device-displays'>
-          </div>
-        </div>
-      </section>
-      <div id='device-details-modal' class='modal'>
-        <div id='device-details-modal-header' class='modal-header'>
-          <h2>Device Details</h2>
-          <button id='device-details-close' title='Close' class='material-icons modal-close'>close</button>
-        </div>
-        <hr>
-        <h3>Hardware Configuration</h3>
-        <span id='device-details-hardware'>unknown</span>
-      </div>
-      <div id='bluetooth-console-modal' class='modal'>
-        <div id='bluetooth-console-modal-header' class='modal-header'>
-          <h2>Bluetooth Console</h2>
-          <button id='bluetooth-console-close' title='Close' class='material-icons modal-close'>close</button>
-        </div>
-        <div>
-          <table>
-            <tr><td colspan='2'><textarea id='bluetooth-console-view' readonly rows='10' cols='60'></textarea></td></tr>
-            <tr><td width='1'><p id='bluetooth-console-cmd-label'>Command:</p></td><td width='100'><input id='bluetooth-console-input' type='text'></input></td></tr>
-          </table>
-        </div>
-      </div>
-       <script src="js/adb.js"></script>
-       <script src="js/rootcanal.js"></script>
-       <script src="js/cf_webrtc.js" type="module"></script>
-       <script src="js/controls.js"></script>
-       <script src="js/app.js"></script>
+      <script src="js/index.js"></script>
     </body>
 </html>
diff --git a/host/frontend/webrtc_operator/assets/js/adb.js b/host/frontend/webrtc_operator/assets/js/adb.js
deleted file mode 100644
index 75540ae..0000000
--- a/host/frontend/webrtc_operator/assets/js/adb.js
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * 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.
- */
-
-let adb_ws;
-
-let utf8Encoder = new TextEncoder();
-let utf8Decoder = new TextDecoder();
-
-const A_CNXN = 0x4e584e43;
-const A_OPEN = 0x4e45504f;
-const A_WRTE = 0x45545257;
-const A_OKAY = 0x59414b4f;
-
-const kLocalChannelId = 666;
-
-let array = new Uint8Array();
-
-function setU32LE(array, offset, x) {
-    array[offset] = x & 0xff;
-    array[offset + 1] = (x >> 8) & 0xff;
-    array[offset + 2] = (x >> 16) & 0xff;
-    array[offset + 3] = x >> 24;
-}
-
-function getU32LE(array, offset) {
-    let x = array[offset]
-        | (array[offset + 1] << 8)
-        | (array[offset + 2] << 16)
-        | (array[offset + 3] << 24);
-
-    return x >>> 0;  // convert signed to unsigned if necessary.
-}
-
-function computeChecksum(array) {
-    let sum = 0;
-    let i;
-    for (i = 0; i < array.length; ++i) {
-        sum = ((sum + array[i]) & 0xffffffff) >>> 0;
-    }
-
-    return sum;
-}
-
-function createAdbMessage(command, arg0, arg1, payload) {
-    let arrayBuffer = new ArrayBuffer(24 + payload.length);
-    let array = new Uint8Array(arrayBuffer);
-    setU32LE(array, 0, command);
-    setU32LE(array, 4, arg0);
-    setU32LE(array, 8, arg1);
-    setU32LE(array, 12, payload.length);
-    setU32LE(array, 16, computeChecksum(payload));
-    setU32LE(array, 20, command ^ 0xffffffff);
-    array.set(payload, 24);
-
-    return arrayBuffer;
-}
-
-function adbOpenConnection() {
-    let systemIdentity = utf8Encoder.encode("Cray_II:1234:whatever");
-
-    let arrayBuffer = createAdbMessage(
-        A_CNXN, 0x1000000, 256 * 1024, systemIdentity);
-
-    adb_ws.send(arrayBuffer);
-}
-
-function adbShell(command) {
-    let destination = utf8Encoder.encode("shell:" + command);
-
-    let arrayBuffer = createAdbMessage(A_OPEN, kLocalChannelId, 0, destination);
-    adb_ws.send(arrayBuffer);
-    awaitConnection();
-}
-
-function adbSendOkay(remoteId) {
-    let payload = new Uint8Array(0);
-
-    let arrayBuffer = createAdbMessage(
-        A_OKAY, kLocalChannelId, remoteId, payload);
-
-    adb_ws.send(arrayBuffer);
-}
-
-function JoinArrays(arr1, arr2) {
-  let arr = new Uint8Array(arr1.length + arr2.length);
-  arr.set(arr1, 0);
-  arr.set(arr2, arr1.length);
-  return arr;
-}
-
-// Simple lifecycle management that executes callbacks based on connection state.
-//
-// Any attempt to initiate a command (e.g. creating a connection, sending a message)
-// (re)starts a timer. Any response back from any command stops that timer.
-const timeoutMs = 3000;
-let connectedCb;
-let disconnectedCb;
-let disconnectedTimeout;
-function awaitConnection() {
-  clearTimeout(disconnectedTimeout);
-  if (disconnectedCb) {
-    disconnectedTimeout = setTimeout(disconnectedCb, timeoutMs);
-  }
-}
-function connected() {
-  if (disconnectedTimeout) {
-    clearTimeout(disconnectedTimeout);
-  }
-  if (connectedCb) {
-    connectedCb();
-  }
-}
-
-function adbOnMessage(arrayBuffer) {
-    // console.log("adb_ws: onmessage (" + arrayBuffer.byteLength + " bytes)");
-    array = JoinArrays(array, new Uint8Array(arrayBuffer));
-
-    while (array.length > 0) {
-        if (array.length < 24) {
-            // Incomplete package, must wait for more data.
-            return;
-        }
-
-        let command = getU32LE(array, 0);
-        let magic = getU32LE(array, 20);
-
-        if (command != ((magic ^ 0xffffffff) >>> 0)) {
-            console.log("command = " + command + ", magic = " + magic);
-            console.log("adb message command vs magic failed.");
-            return;
-        }
-
-        let payloadLength = getU32LE(array, 12);
-
-        if (array.length < 24 + payloadLength) {
-            // Incomplete package, must wait for more data.
-            return;
-        }
-
-        let payloadChecksum = getU32LE(array, 16);
-        let checksum = computeChecksum(array.slice(24));
-
-        if (payloadChecksum != checksum) {
-            console.log("adb message checksum mismatch.");
-            // This can happen if a shell command executes while another
-            // channel is receiving data.
-        }
-
-        switch (command) {
-            case A_CNXN:
-            {
-                console.log("WebRTC adb connected.");
-                connected();
-                break;
-            }
-
-            case A_OKAY:
-            {
-                let remoteId = getU32LE(array, 4);
-                console.log("WebRTC adb channel created w/ remoteId " + remoteId);
-                connected();
-                break;
-            }
-
-            case A_WRTE:
-            {
-                let remoteId = getU32LE(array, 4);
-                adbSendOkay(remoteId);
-                break;
-            }
-        }
-        array = array.subarray(24 + payloadLength, array.length);
-    }
-}
-
-function init_adb(devConn, ccb = connectedCb, dcb = disconnectedCb) {
-    if (adb_ws) return;
-
-    adb_ws = {
-      send: function(buffer) {
-        devConn.sendAdbMessage(buffer);
-      }
-    };
-    connectedCb = ccb;
-    disconnectedCb = dcb;
-    awaitConnection();
-
-    devConn.onAdbMessage(msg => adbOnMessage(msg));
-
-    adbOpenConnection();
-}
diff --git a/host/frontend/webrtc_operator/assets/js/app.js b/host/frontend/webrtc_operator/assets/js/app.js
deleted file mode 100644
index db9c8a7..0000000
--- a/host/frontend/webrtc_operator/assets/js/app.js
+++ /dev/null
@@ -1,972 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * 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.
- */
-
-'use strict';
-
-function ConnectToDevice(device_id) {
-  console.log('ConnectToDevice ', device_id);
-  const keyboardCaptureCtrl = document.getElementById('keyboard-capture-control');
-  createToggleControl(keyboardCaptureCtrl, "keyboard", onKeyboardCaptureToggle);
-  const micCaptureCtrl = document.getElementById('mic-capture-control');
-  createToggleControl(micCaptureCtrl, "mic", onMicCaptureToggle);
-  const cameraCtrl = document.getElementById('camera-control');
-  createToggleControl(cameraCtrl, "videocam", onVideoCaptureToggle);
-
-  const deviceAudio = document.getElementById('device-audio');
-  const deviceDisplays = document.getElementById('device-displays');
-  const statusMessage = document.getElementById('status-message');
-
-  let connectionAttemptDuration = 0;
-  const intervalMs = 500;
-  let deviceStatusEllipsisCount = 0;
-  let animateDeviceStatusMessage = setInterval(function() {
-    connectionAttemptDuration += intervalMs;
-    if (connectionAttemptDuration > 30000) {
-      statusMessage.className = 'error';
-      statusMessage.textContent = 'Connection should have occurred by now. ' +
-          'Please attempt to restart the guest device.';
-    } else {
-      if (connectionAttemptDuration > 15000) {
-        statusMessage.textContent = 'Connection is taking longer than expected';
-      } else {
-        statusMessage.textContent = 'Connecting to device';
-      }
-      deviceStatusEllipsisCount = (deviceStatusEllipsisCount + 1) % 4;
-      statusMessage.textContent += '.'.repeat(deviceStatusEllipsisCount);
-    }
-  }, intervalMs);
-
-  let buttons = {};
-  let mouseIsDown = false;
-  let deviceConnection;
-  let touchIdSlotMap = new Map();
-  let touchSlots = new Array();
-  let deviceStateLidSwitchOpen = null;
-  let deviceStateHingeAngleValue = null;
-
-  function showAdbConnected() {
-    // Screen changed messages are not reported until after boot has completed.
-    // Certain default adb buttons change screen state, so wait for boot
-    // completion before enabling these buttons.
-    statusMessage.className = 'connected';
-    statusMessage.textContent =
-        'adb connection established successfully.';
-    setTimeout(function() {
-      statusMessage.style.visibility = 'hidden';
-    }, 5000);
-    for (const [_, button] of Object.entries(buttons)) {
-      if (button.adb) {
-        button.button.disabled = false;
-      }
-    }
-  }
-
-  function initializeAdb() {
-    init_adb(
-        deviceConnection,
-        showAdbConnected,
-        function() {
-          statusMessage.className = 'error';
-          statusMessage.textContent = 'adb connection failed.';
-          statusMessage.style.visibility = 'visible';
-          for (const [_, button] of Object.entries(buttons)) {
-            if (button.adb) {
-              button.button.disabled = true;
-            }
-          }
-        });
-  }
-
-  let currentRotation = 0;
-  let currentDisplayDescriptions;
-  function onControlMessage(message) {
-    let message_data = JSON.parse(message.data);
-    console.log(message_data)
-    let metadata = message_data.metadata;
-    if (message_data.event == 'VIRTUAL_DEVICE_BOOT_STARTED') {
-      // Start the adb connection after receiving the BOOT_STARTED message.
-      // (This is after the adbd start message. Attempting to connect
-      // immediately after adbd starts causes issues.)
-      initializeAdb();
-    }
-    if (message_data.event == 'VIRTUAL_DEVICE_SCREEN_CHANGED') {
-      if (metadata.rotation != currentRotation) {
-        // Animate the screen rotation.
-        const targetRotation = metadata.rotation == 0 ? 0 : -90;
-
-        $(deviceDisplays).animate(
-          {
-            textIndent: targetRotation,
-          },
-          {
-            duration: 1000,
-            step: function(now, tween) {
-              resizeDeviceDisplays();
-            },
-          }
-        );
-      }
-
-      currentRotation = metadata.rotation;
-    }
-    if (message_data.event == 'VIRTUAL_DEVICE_CAPTURE_IMAGE') {
-      if (deviceConnection.cameraEnabled) {
-        takePhoto();
-      }
-    }
-    if (message_data.event == 'VIRTUAL_DEVICE_DISPLAY_POWER_MODE_CHANGED') {
-      updateDisplayVisibility(metadata.display, metadata.mode);
-    }
-  }
-
-  function updateDisplayVisibility(displayId, powerMode) {
-    const display = document.getElementById('display_' + displayId).parentElement;
-    if (display == null) {
-      console.error('Unknown display id: ' + displayId);
-      return;
-    }
-    switch (powerMode) {
-      case 'On':
-        display.style.visibility = 'visible';
-        break;
-      case 'Off':
-        display.style.visibility = 'hidden';
-        break;
-      default:
-        console.error('Display ' + displayId + ' has unknown display power mode: ' + powerMode);
-    }
-  }
-
-  function getTransformRotation(element) {
-    if (!element.style.textIndent) {
-      return 0;
-    }
-    // Remove 'px' and convert to float.
-    return parseFloat(element.style.textIndent.slice(0, -2));
-  }
-
-  let anyDeviceDisplayLoaded = false;
-  function onDeviceDisplayLoaded() {
-    if (anyDeviceDisplayLoaded) {
-      return;
-    }
-    anyDeviceDisplayLoaded = true;
-
-    clearInterval(animateDeviceStatusMessage);
-    statusMessage.textContent = 'Awaiting bootup and adb connection. Please wait...';
-    resizeDeviceDisplays();
-
-    let deviceDisplayList =
-      document.getElementsByClassName("device-display");
-    for (const deviceDisplay of deviceDisplayList) {
-      deviceDisplay.style.visibility = 'visible';
-    }
-
-    // Enable the buttons after the screen is visible.
-    for (const [_, button] of Object.entries(buttons)) {
-      if (!button.adb) {
-        button.button.disabled = false;
-      }
-    }
-    // Start the adb connection if it is not already started.
-    initializeAdb();
-  }
-
-  // Creates a <video> element and a <div> container element for each display.
-  // The extra <div> container elements are used to maintain the width and
-  // height of the device as the CSS 'transform' property used on the <video>
-  // element for rotating the device only affects the visuals of the element
-  // and not its layout.
-  function createDeviceDisplays(devConn) {
-    for (const deviceDisplayDescription of currentDisplayDescriptions) {
-      let deviceDisplay = document.createElement("div");
-      deviceDisplay.classList.add("device-display");
-      // Start the screen as hidden. Only show when data is ready.
-      deviceDisplay.style.visibility = 'hidden';
-
-      let deviceDisplayInfo = document.createElement("div");
-      deviceDisplayInfo.classList.add("device-display-info");
-      deviceDisplayInfo.id = deviceDisplayDescription.stream_id + '_info';
-      deviceDisplay.appendChild(deviceDisplayInfo);
-
-      let deviceDisplayVideo = document.createElement("video");
-      deviceDisplayVideo.autoplay = true;
-      deviceDisplayVideo.id = deviceDisplayDescription.stream_id;
-      deviceDisplayVideo.classList.add("device-display-video");
-      deviceDisplayVideo.addEventListener('loadeddata', (evt) => {
-        onDeviceDisplayLoaded();
-      });
-      deviceDisplay.appendChild(deviceDisplayVideo);
-
-      deviceDisplays.appendChild(deviceDisplay);
-
-      let stream_id = deviceDisplayDescription.stream_id;
-      devConn.getStream(stream_id).then(stream => {
-        deviceDisplayVideo.srcObject = stream;
-      }).catch(e => console.error('Unable to get display stream: ', e));
-    }
-  }
-
-  function takePhoto() {
-    const imageCapture = deviceConnection.imageCapture;
-    if (imageCapture) {
-      const photoSettings = {
-        imageWidth: deviceConnection.cameraWidth,
-        imageHeight: deviceConnection.cameraHeight
-      }
-      imageCapture.takePhoto(photoSettings)
-        .then(blob => blob.arrayBuffer())
-        .then(buffer => deviceConnection.sendOrQueueCameraData(buffer))
-        .catch(error => console.log(error));
-    }
-  }
-
-  function resizeDeviceDisplays() {
-    // Padding between displays.
-    const deviceDisplayWidthPadding = 10;
-    // Padding for the display info above each display video.
-    const deviceDisplayHeightPadding = 38;
-
-    let deviceDisplayList =
-      document.getElementsByClassName("device-display");
-    let deviceDisplayVideoList =
-      document.getElementsByClassName("device-display-video");
-    let deviceDisplayInfoList =
-      document.getElementsByClassName("device-display-info");
-
-    const rotationDegrees = getTransformRotation(deviceDisplays);
-    const rotationRadians = rotationDegrees * Math.PI / 180;
-
-    // Auto-scale the screen based on window size.
-    let availableWidth = deviceDisplays.clientWidth;
-    let availableHeight = deviceDisplays.clientHeight - deviceDisplayHeightPadding;
-
-    // Reserve space for padding between the displays.
-    availableWidth = availableWidth -
-      (currentDisplayDescriptions.length * deviceDisplayWidthPadding);
-
-    // Loop once over all of the displays to compute the total space needed.
-    let neededWidth = 0;
-    let neededHeight = 0;
-    for (let i = 0; i < deviceDisplayList.length; i++) {
-      let deviceDisplayDescription = currentDisplayDescriptions[i];
-      let deviceDisplayVideo = deviceDisplayVideoList[i];
-
-      const originalDisplayWidth = deviceDisplayDescription.x_res;
-      const originalDisplayHeight = deviceDisplayDescription.y_res;
-
-      const neededBoundingBoxWidth =
-        Math.abs(Math.cos(rotationRadians) * originalDisplayWidth) +
-        Math.abs(Math.sin(rotationRadians) * originalDisplayHeight);
-      const neededBoundingBoxHeight =
-        Math.abs(Math.sin(rotationRadians) * originalDisplayWidth) +
-        Math.abs(Math.cos(rotationRadians) * originalDisplayHeight);
-
-      neededWidth = neededWidth + neededBoundingBoxWidth;
-      neededHeight = Math.max(neededHeight, neededBoundingBoxHeight);
-    }
-
-    const scaling = Math.min(availableWidth / neededWidth,
-                             availableHeight / neededHeight);
-
-    // Loop again over all of the displays to set the sizes and positions.
-    let deviceDisplayLeftOffset = 0;
-    for (let i = 0; i < deviceDisplayList.length; i++) {
-      let deviceDisplay = deviceDisplayList[i];
-      let deviceDisplayVideo = deviceDisplayVideoList[i];
-      let deviceDisplayInfo = deviceDisplayInfoList[i];
-      let deviceDisplayDescription = currentDisplayDescriptions[i];
-
-      let rotated = currentRotation == 1 ? ' (Rotated)' : '';
-      deviceDisplayInfo.textContent = `Display ${i} - ` +
-          `${deviceDisplayDescription.x_res}x` +
-          `${deviceDisplayDescription.y_res} ` +
-          `(${deviceDisplayDescription.dpi} DPI)${rotated}`;
-
-      const originalDisplayWidth = deviceDisplayDescription.x_res;
-      const originalDisplayHeight = deviceDisplayDescription.y_res;
-
-      const scaledDisplayWidth = originalDisplayWidth * scaling;
-      const scaledDisplayHeight = originalDisplayHeight * scaling;
-
-      const neededBoundingBoxWidth =
-        Math.abs(Math.cos(rotationRadians) * originalDisplayWidth) +
-        Math.abs(Math.sin(rotationRadians) * originalDisplayHeight);
-      const neededBoundingBoxHeight =
-        Math.abs(Math.sin(rotationRadians) * originalDisplayWidth) +
-        Math.abs(Math.cos(rotationRadians) * originalDisplayHeight);
-
-      const scaledBoundingBoxWidth = neededBoundingBoxWidth * scaling;
-      const scaledBoundingBoxHeight = neededBoundingBoxHeight * scaling;
-
-      const offsetX = (scaledBoundingBoxWidth - scaledDisplayWidth) / 2;
-      const offsetY = (scaledBoundingBoxHeight - scaledDisplayHeight) / 2;
-
-      deviceDisplayVideo.style.width = scaledDisplayWidth;
-      deviceDisplayVideo.style.height = scaledDisplayHeight;
-      deviceDisplayVideo.style.transform =
-        `translateX(${offsetX}px) ` +
-        `translateY(${offsetY}px) ` +
-        `rotateZ(${rotationDegrees}deg) `;
-
-      deviceDisplay.style.left = `${deviceDisplayLeftOffset}px`;
-      deviceDisplay.style.width = scaledBoundingBoxWidth;
-      deviceDisplay.style.height = scaledBoundingBoxHeight;
-
-      deviceDisplayLeftOffset =
-        deviceDisplayLeftOffset +
-        deviceDisplayWidthPadding +
-        scaledBoundingBoxWidth;
-    }
-  }
-  window.onresize = resizeDeviceDisplays;
-
-  function createControlPanelButton(command, title, icon_name,
-      listener=onControlPanelButton,
-      parent_id='control-panel-default-buttons') {
-    let button = document.createElement('button');
-    document.getElementById(parent_id).appendChild(button);
-    button.title = title;
-    button.dataset.command = command;
-    button.disabled = true;
-    // Capture mousedown/up/out commands instead of click to enable
-    // hold detection. mouseout is used to catch if the user moves the
-    // mouse outside the button while holding down.
-    button.addEventListener('mousedown', listener);
-    button.addEventListener('mouseup', listener);
-    button.addEventListener('mouseout', listener);
-    // Set the button image using Material Design icons.
-    // See http://google.github.io/material-design-icons
-    // and https://material.io/resources/icons
-    button.classList.add('material-icons');
-    button.innerHTML = icon_name;
-    buttons[command] = { 'button': button }
-    return buttons[command];
-  }
-  createControlPanelButton('power', 'Power', 'power_settings_new');
-  createControlPanelButton('home', 'Home', 'home');
-  createControlPanelButton('menu', 'Menu', 'menu');
-  createControlPanelButton('rotate', 'Rotate', 'screen_rotation', onRotateButton);
-  buttons['rotate'].adb = true;
-  createControlPanelButton('volumemute', 'Volume Mute', 'volume_mute');
-  createControlPanelButton('volumedown', 'Volume Down', 'volume_down');
-  createControlPanelButton('volumeup', 'Volume Up', 'volume_up');
-
-  let modalOffsets = {}
-  function createModalButton(button_id, modal_id, close_id) {
-    const modalButton = document.getElementById(button_id);
-    const modalDiv = document.getElementById(modal_id);
-    const modalHeader = modalDiv.querySelector('.modal-header');
-    const modalClose = document.getElementById(close_id);
-
-    // Position the modal to the right of the show modal button.
-    modalDiv.style.top = modalButton.offsetTop;
-    modalDiv.style.left = modalButton.offsetWidth + 30;
-
-    function showHideModal(show) {
-      if (show) {
-        modalButton.classList.add('modal-button-opened')
-        modalDiv.style.display = 'block';
-      } else {
-        modalButton.classList.remove('modal-button-opened')
-        modalDiv.style.display = 'none';
-      }
-    }
-    // Allow the show modal button to toggle the modal,
-    modalButton.addEventListener('click',
-        evt => showHideModal(modalDiv.style.display != 'block'));
-    // but the close button always closes.
-    modalClose.addEventListener('click',
-        evt => showHideModal(false));
-
-    // Allow the modal to be dragged by the header.
-    modalOffsets[modal_id] = {
-      midDrag: false,
-      mouseDownOffsetX: null,
-      mouseDownOffsetY: null,
-    }
-    modalHeader.addEventListener('mousedown',
-        evt => {
-            modalOffsets[modal_id].midDrag = true;
-            // Store the offset of the mouse location from the
-            // modal's current location.
-            modalOffsets[modal_id].mouseDownOffsetX =
-                parseInt(modalDiv.style.left) - evt.clientX;
-            modalOffsets[modal_id].mouseDownOffsetY =
-                parseInt(modalDiv.style.top) - evt.clientY;
-        });
-    modalHeader.addEventListener('mousemove',
-        evt => {
-            let offsets = modalOffsets[modal_id];
-            if (offsets.midDrag) {
-              // Move the modal to the mouse location plus the
-              // offset calculated on the initial mouse-down.
-              modalDiv.style.left =
-                  evt.clientX + offsets.mouseDownOffsetX;
-              modalDiv.style.top =
-                  evt.clientY + offsets.mouseDownOffsetY;
-            }
-        });
-    document.addEventListener('mouseup',
-        evt => {
-          modalOffsets[modal_id].midDrag = false;
-        });
-  }
-
-  createModalButton(
-    'device-details-button', 'device-details-modal', 'device-details-close');
-  createModalButton(
-    'bluetooth-console-button', 'bluetooth-console-modal', 'bluetooth-console-close');
-
-  let options = {
-    wsUrl: ((location.protocol == 'http:') ? 'ws://' : 'wss://') +
-      location.host + '/connect_client',
-  };
-
-  function showWebrtcError() {
-    statusMessage.className = 'error';
-    statusMessage.textContent = 'No connection to the guest device. ' +
-        'Please ensure the WebRTC process on the host machine is active.';
-    statusMessage.style.visibility = 'visible';
-    deviceDisplays.style.display = 'none';
-    for (const [_, button] of Object.entries(buttons)) {
-      button.button.disabled = true;
-    }
-  }
-
-  import('./cf_webrtc.js')
-    .then(webrtcModule => webrtcModule.Connect(device_id, options))
-    .then(devConn => {
-      deviceConnection = devConn;
-
-      console.log(deviceConnection.description);
-
-      currentDisplayDescriptions = devConn.description.displays;
-
-      createDeviceDisplays(devConn);
-      for (const audio_desc of devConn.description.audio_streams) {
-        let stream_id = audio_desc.stream_id;
-        devConn.getStream(stream_id).then(stream => {
-          deviceAudio.srcObject = stream;
-        }).catch(e => console.error('Unable to get audio stream: ', e));
-      }
-      startMouseTracking();  // TODO stopMouseTracking() when disconnected
-      updateDeviceHardwareDetails(deviceConnection.description.hardware);
-      if (deviceConnection.description.custom_control_panel_buttons.length > 0) {
-        document.getElementById('control-panel-custom-buttons').style.display = 'flex';
-        for (const button of deviceConnection.description.custom_control_panel_buttons) {
-          if (button.shell_command) {
-            // This button's command is handled by sending an ADB shell command.
-            createControlPanelButton(button.command, button.title, button.icon_name,
-                e => onCustomShellButton(button.shell_command, e),
-                'control-panel-custom-buttons');
-            buttons[button.command].adb = true;
-          } else if (button.device_states) {
-            // This button corresponds to variable hardware device state(s).
-            createControlPanelButton(button.command, button.title, button.icon_name,
-                getCustomDeviceStateButtonCb(button.device_states),
-                'control-panel-custom-buttons');
-            for (const device_state of button.device_states) {
-              // hinge_angle is currently injected via an adb shell command that
-              // triggers a guest binary.
-              if ('hinge_angle_value' in device_state) {
-                buttons[button.command].adb = true;
-              }
-            }
-          } else {
-            // This button's command is handled by custom action server.
-            createControlPanelButton(button.command, button.title, button.icon_name,
-                onControlPanelButton,
-                'control-panel-custom-buttons');
-          }
-        }
-      }
-      deviceConnection.onControlMessage(msg => onControlMessage(msg));
-      // Show the error message and disable buttons when the WebRTC connection fails.
-      deviceConnection.onConnectionStateChange(state => {
-        if (state == 'disconnected' || state == 'failed') {
-          showWebrtcError();
-        }
-      });
-      deviceConnection.onBluetoothMessage(msg => {
-        bluetoothConsole.addLine(decodeRootcanalMessage(msg));
-      });
-  }, rejection => {
-      console.error('Unable to connect: ', rejection);
-      showWebrtcError();
-  });
-
-  let hardwareDetailsText = '';
-  let deviceStateDetailsText = '';
-  function updateDeviceDetailsText() {
-    document.getElementById('device-details-hardware').textContent = [
-      hardwareDetailsText,
-      deviceStateDetailsText,
-    ].filter(e => e /*remove empty*/).join('\n');
-  }
-  function updateDeviceHardwareDetails(hardware) {
-    let hardwareDetailsTextLines = [];
-    Object.keys(hardware).forEach(function(key) {
-      let value = hardware[key];
-      hardwareDetailsTextLines.push(`${key} - ${value}`);
-    });
-
-    hardwareDetailsText = hardwareDetailsTextLines.join('\n');
-    updateDeviceDetailsText();
-  }
-  function updateDeviceStateDetails() {
-    let deviceStateDetailsTextLines = [];
-    if (deviceStateLidSwitchOpen != null) {
-      let state = deviceStateLidSwitchOpen ? 'Opened' : 'Closed';
-      deviceStateDetailsTextLines.push(`Lid Switch - ${state}`);
-    }
-    if (deviceStateHingeAngleValue != null) {
-      deviceStateDetailsTextLines.push(`Hinge Angle - ${deviceStateHingeAngleValue}`);
-    }
-    deviceStateDetailsText = deviceStateDetailsTextLines.join('\n');
-    updateDeviceDetailsText();
-  }
-
-  function onKeyboardCaptureToggle(enabled) {
-    if (enabled) {
-      startKeyboardTracking();
-    } else {
-      stopKeyboardTracking();
-    }
-  }
-
-  function onMicCaptureToggle(enabled) {
-    deviceConnection.useMic(enabled);
-  }
-
-  function onVideoCaptureToggle(enabled) {
-    deviceConnection.useVideo(enabled);
-  }
-
-  function cmdConsole(consoleViewName, consoleInputName) {
-    let consoleView = document.getElementById(consoleViewName);
-
-    let addString = function(str) {
-      consoleView.value += str;
-      consoleView.scrollTop = consoleView.scrollHeight;
-    }
-
-    let addLine = function(line) {
-      addString(line + "\r\n");
-    }
-
-    let commandCallbacks = [];
-
-    let addCommandListener = function(f) {
-      commandCallbacks.push(f);
-    }
-
-    let onCommand = function(cmd) {
-      cmd = cmd.trim();
-
-      if (cmd.length == 0) return;
-
-      commandCallbacks.forEach(f => {
-        f(cmd);
-      })
-    }
-
-    addCommandListener(cmd => addLine(">> " + cmd));
-
-    let consoleInput = document.getElementById(consoleInputName);
-
-    consoleInput.addEventListener('keydown', e => {
-      if ((e.key && e.key == 'Enter') || e.keyCode == 13) {
-        let command = e.target.value;
-
-        e.target.value = '';
-
-        onCommand(command);
-      }
-    })
-
-    return {
-      consoleView: consoleView,
-      consoleInput: consoleInput,
-      addLine: addLine,
-      addString: addString,
-      addCommandListener: addCommandListener,
-    };
-  }
-
-  var bluetoothConsole = cmdConsole(
-    'bluetooth-console-view', 'bluetooth-console-input');
-
-  bluetoothConsole.addCommandListener(cmd => {
-    let inputArr = cmd.split(' ');
-    let command = inputArr[0];
-    inputArr.shift();
-    let args = inputArr;
-    deviceConnection.sendBluetoothMessage(createRootcanalMessage(command, args));
-  })
-
-  function onControlPanelButton(e) {
-    if (e.type == 'mouseout' && e.which == 0) {
-      // Ignore mouseout events if no mouse button is pressed.
-      return;
-    }
-    deviceConnection.sendControlMessage(JSON.stringify({
-      command: e.target.dataset.command,
-      button_state: e.type == 'mousedown' ? "down" : "up",
-    }));
-  }
-
-  function onRotateButton(e) {
-    // Attempt to init adb again, in case the initial connection failed.
-    // This succeeds immediately if already connected.
-    initializeAdb();
-    if (e.type == 'mousedown') {
-      adbShell(
-          '/vendor/bin/cuttlefish_sensor_injection rotate ' +
-          (currentRotation == 0 ? 'landscape' : 'portrait'))
-    }
-  }
-
-  function onCustomShellButton(shell_command, e) {
-    // Attempt to init adb again, in case the initial connection failed.
-    // This succeeds immediately if already connected.
-    initializeAdb();
-    if (e.type == 'mousedown') {
-      adbShell(shell_command);
-    }
-  }
-
-  function getCustomDeviceStateButtonCb(device_states) {
-    let states = device_states;
-    let index = 0;
-    return e => {
-      if (e.type == 'mousedown') {
-        // Reset any overridden device state.
-        adbShell('cmd device_state state reset');
-        // Send a device_state message for the current state.
-        let message = {
-          command: 'device_state',
-          ...states[index],
-        };
-        deviceConnection.sendControlMessage(JSON.stringify(message));
-        console.log(JSON.stringify(message));
-        if ('lid_switch_open' in states[index]) {
-          deviceStateLidSwitchOpen = states[index].lid_switch_open;
-        }
-        if ('hinge_angle_value' in states[index]) {
-          deviceStateHingeAngleValue = states[index].hinge_angle_value;
-          // TODO(b/181157794): Use a custom Sensor HAL for hinge_angle injection
-          // instead of this guest binary.
-          adbShell(
-              '/vendor/bin/cuttlefish_sensor_injection hinge_angle ' +
-              states[index].hinge_angle_value);
-        }
-        // Update the Device Details view.
-        updateDeviceStateDetails();
-        // Cycle to the next state.
-        index = (index + 1) % states.length;
-      }
-    }
-  }
-
-  function startMouseTracking() {
-    let deviceDisplayList = document.getElementsByClassName("device-display");
-    if (window.PointerEvent) {
-      for (const deviceDisplay of deviceDisplayList) {
-        deviceDisplay.addEventListener('pointerdown', onStartDrag);
-        deviceDisplay.addEventListener('pointermove', onContinueDrag);
-        deviceDisplay.addEventListener('pointerup', onEndDrag);
-      }
-    } else if (window.TouchEvent) {
-      for (const deviceDisplay of deviceDisplayList) {
-        deviceDisplay.addEventListener('touchstart', onStartDrag);
-        deviceDisplay.addEventListener('touchmove', onContinueDrag);
-        deviceDisplay.addEventListener('touchend', onEndDrag);
-      }
-    } else if (window.MouseEvent) {
-      for (const deviceDisplay of deviceDisplayList) {
-        deviceDisplay.addEventListener('mousedown', onStartDrag);
-        deviceDisplay.addEventListener('mousemove', onContinueDrag);
-        deviceDisplay.addEventListener('mouseup', onEndDrag);
-      }
-    }
-  }
-
-  function stopMouseTracking() {
-    let deviceDisplayList = document.getElementsByClassName("device-display");
-    if (window.PointerEvent) {
-      for (const deviceDisplay of deviceDisplayList) {
-        deviceDisplay.removeEventListener('pointerdown', onStartDrag);
-        deviceDisplay.removeEventListener('pointermove', onContinueDrag);
-        deviceDisplay.removeEventListener('pointerup', onEndDrag);
-      }
-    } else if (window.TouchEvent) {
-      for (const deviceDisplay of deviceDisplayList) {
-        deviceDisplay.removeEventListener('touchstart', onStartDrag);
-        deviceDisplay.removeEventListener('touchmove', onContinueDrag);
-        deviceDisplay.removeEventListener('touchend', onEndDrag);
-      }
-    } else if (window.MouseEvent) {
-      for (const deviceDisplay of deviceDisplayList) {
-        deviceDisplay.removeEventListener('mousedown', onStartDrag);
-        deviceDisplay.removeEventListener('mousemove', onContinueDrag);
-        deviceDisplay.removeEventListener('mouseup', onEndDrag);
-      }
-    }
-  }
-
-  function startKeyboardTracking() {
-    document.addEventListener('keydown', onKeyEvent);
-    document.addEventListener('keyup', onKeyEvent);
-  }
-
-  function stopKeyboardTracking() {
-    document.removeEventListener('keydown', onKeyEvent);
-    document.removeEventListener('keyup', onKeyEvent);
-  }
-
-  function onStartDrag(e) {
-    e.preventDefault();
-
-    // console.log("mousedown at " + e.pageX + " / " + e.pageY);
-    mouseIsDown = true;
-
-    sendEventUpdate(true, e);
-  }
-
-  function onEndDrag(e) {
-    e.preventDefault();
-
-    // console.log("mouseup at " + e.pageX + " / " + e.pageY);
-    mouseIsDown = false;
-
-    sendEventUpdate(false, e);
-  }
-
-  function onContinueDrag(e) {
-    e.preventDefault();
-
-    // console.log("mousemove at " + e.pageX + " / " + e.pageY + ", down=" +
-    // mouseIsDown);
-    if (mouseIsDown) {
-      sendEventUpdate(true, e);
-    }
-  }
-
-  function sendEventUpdate(down, e) {
-    console.assert(deviceConnection, 'Can\'t send mouse update without device');
-    var eventType = e.type.substring(0, 5);
-
-    // The <video> element:
-    const deviceDisplay = e.target;
-
-    // Before the first video frame arrives there is no way to know width and
-    // height of the device's screen, so turn every click into a click at 0x0.
-    // A click at that position is not more dangerous than anywhere else since
-    // the user is clicking blind anyways.
-    const videoWidth = deviceDisplay.videoWidth? deviceDisplay.videoWidth: 1;
-    const videoHeight = deviceDisplay.videoHeight? deviceDisplay.videoHeight: 1;
-    const elementWidth = deviceDisplay.offsetWidth? deviceDisplay.offsetWidth: 1;
-    const elementHeight = deviceDisplay.offsetHeight? deviceDisplay.offsetHeight: 1;
-
-    // vh*ew > eh*vw? then scale h instead of w
-    const scaleHeight = videoHeight * elementWidth > videoWidth * elementHeight;
-    var elementScaling = 0, videoScaling = 0;
-    if (scaleHeight) {
-      elementScaling = elementHeight;
-      videoScaling = videoHeight;
-    } else {
-      elementScaling = elementWidth;
-      videoScaling = videoWidth;
-    }
-
-    // The screen uses the 'object-fit: cover' property in order to completely
-    // fill the element while maintaining the screen content's aspect ratio.
-    // Therefore:
-    // - If vh*ew > eh*vw, w is scaled so that content width == element width
-    // - Otherwise,        h is scaled so that content height == element height
-    const scaleWidth = videoHeight * elementWidth > videoWidth * elementHeight;
-
-    // Convert to coordinates relative to the video by scaling.
-    // (This matches the scaling used by 'object-fit: cover'.)
-    //
-    // This scaling is needed to translate from the in-browser x/y to the
-    // on-device x/y.
-    //   - When the device screen has not been resized, this is simple: scale
-    //     the coordinates based on the ratio between the input video size and
-    //     the in-browser size.
-    //   - When the device screen has been resized, this scaling is still needed
-    //     even though the in-browser size and device size are identical. This
-    //     is due to the way WindowManager handles a resized screen, resized via
-    //     `adb shell wm size`:
-    //       - The ABS_X and ABS_Y max values of the screen retain their
-    //         original values equal to the value set when launching the device
-    //         (which equals the video size here).
-    //       - The sent ABS_X and ABS_Y values need to be scaled based on the
-    //         ratio between the max size (video size) and in-browser size.
-    const scaling = scaleWidth ? videoWidth / elementWidth : videoHeight / elementHeight;
-
-    var xArr = [];
-    var yArr = [];
-    var idArr = [];
-    var slotArr = [];
-
-    if (eventType == "mouse" || eventType == "point") {
-      xArr.push(e.offsetX);
-      yArr.push(e.offsetY);
-
-      let thisId = -1;
-      if (eventType == "point") {
-        thisId = e.pointerId;
-      }
-
-      slotArr.push(0);
-      idArr.push(thisId);
-    } else if (eventType == "touch") {
-      // touchstart: list of touch points that became active
-      // touchmove: list of touch points that changed
-      // touchend: list of touch points that were removed
-      let changes = e.changedTouches;
-      let rect = e.target.getBoundingClientRect();
-      for (var i=0; i < changes.length; i++) {
-        xArr.push(changes[i].pageX - rect.left);
-        yArr.push(changes[i].pageY - rect.top);
-        if (touchIdSlotMap.has(changes[i].identifier)) {
-          let slot = touchIdSlotMap.get(changes[i].identifier);
-
-          slotArr.push(slot);
-          if (e.type == 'touchstart') {
-            // error
-            console.error('touchstart when already have slot');
-            return;
-          } else if (e.type == 'touchmove') {
-            idArr.push(changes[i].identifier);
-          } else if (e.type == 'touchend') {
-            touchSlots[slot] = false;
-            touchIdSlotMap.delete(changes[i].identifier);
-            idArr.push(-1);
-          }
-        } else {
-          if (e.type == 'touchstart') {
-            let slot = -1;
-            for (var j=0; j < touchSlots.length; j++) {
-              if (!touchSlots[j]) {
-                slot = j;
-                break;
-              }
-            }
-            if (slot == -1) {
-              slot = touchSlots.length;
-              touchSlots.push(true);
-            }
-            slotArr.push(slot);
-            touchSlots[slot] = true;
-            touchIdSlotMap.set(changes[i].identifier, slot);
-            idArr.push(changes[i].identifier);
-          } else if (e.type == 'touchmove') {
-            // error
-            console.error('touchmove when no slot');
-            return;
-          } else if (e.type == 'touchend') {
-            // error
-            console.error('touchend when no slot');
-            return;
-          }
-        }
-      }
-    }
-
-    for (var i=0; i < xArr.length; i++) {
-      xArr[i] = xArr[i] * scaling;
-      yArr[i] = yArr[i] * scaling;
-
-      // Substract the offset produced by the difference in aspect ratio, if any.
-      if (scaleWidth) {
-        // Width was scaled, leaving excess content height, so subtract from y.
-        yArr[i] -= (elementHeight * scaling - videoHeight) / 2;
-      } else {
-        // Height was scaled, leaving excess content width, so subtract from x.
-        xArr[i] -= (elementWidth * scaling - videoWidth) / 2;
-      }
-
-      xArr[i] = Math.trunc(xArr[i]);
-      yArr[i] = Math.trunc(yArr[i]);
-    }
-
-    // NOTE: Rotation is handled automatically because the CSS rotation through
-    // transforms also rotates the coordinates of events on the object.
-
-    const display_label = deviceDisplay.id;
-
-    deviceConnection.sendMultiTouch(
-    {idArr, xArr, yArr, down, slotArr, display_label});
-  }
-
-  function onKeyEvent(e) {
-    e.preventDefault();
-    console.assert(deviceConnection, 'Can\'t send key event without device');
-    deviceConnection.sendKeyEvent(e.code, e.type);
-  }
-}
-
-/******************************************************************************/
-
-function ConnectDeviceCb(dev_id) {
-  console.log('Connect: ' + dev_id);
-  // Hide the device selection screen
-  document.getElementById('device-selector').style.display = 'none';
-  // Show the device control screen
-  document.getElementById('device-connection').style.visibility = 'visible';
-  ConnectToDevice(dev_id);
-}
-
-function ShowNewDeviceList(device_ids) {
-  let ul = document.getElementById('device-list');
-  ul.innerHTML = "";
-  let count = 1;
-  let device_to_button_map = {};
-  for (const dev_id of device_ids) {
-    const button_id = 'connect_' + count++;
-    ul.innerHTML += ('<li class="device_entry" title="Connect to ' + dev_id
-                     + '">' + dev_id + '<button id="' + button_id
-                     + '" >Connect</button></li>');
-    device_to_button_map[dev_id] = button_id;
-  }
-
-  for (const [dev_id, button_id] of Object.entries(device_to_button_map)) {
-    document.getElementById(button_id).addEventListener(
-        'click', evt => ConnectDeviceCb(dev_id));
-  }
-}
-
-function UpdateDeviceList() {
-  let url = ((location.protocol == 'http:') ? 'ws:' : 'wss:') + location.host +
-    '/list_devices';
-  let ws = new WebSocket(url);
-  ws.onopen = () => {
-    ws.send("give me those device ids");
-  };
-  ws.onmessage = msg => {
-   let device_ids = JSON.parse(msg.data);
-    ShowNewDeviceList(device_ids);
-  };
-}
-
-// Get any devices that are already connected
-UpdateDeviceList();
-// Update the list at the user's request
-document.getElementById('refresh-list')
-    .addEventListener('click', evt => UpdateDeviceList());
diff --git a/host/frontend/webrtc_operator/assets/js/cf_webrtc.js b/host/frontend/webrtc_operator/assets/js/cf_webrtc.js
deleted file mode 100644
index c83ee38..0000000
--- a/host/frontend/webrtc_operator/assets/js/cf_webrtc.js
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * 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.
- */
-
-function createDataChannel(pc, label, onMessage) {
-  console.log('creating data channel: ' + label);
-  let dataChannel = pc.createDataChannel(label);
-  // Return an object with a send function like that of the dataChannel, but
-  // that only actually sends over the data channel once it has connected.
-  return {
-    channelPromise: new Promise((resolve, reject) => {
-      dataChannel.onopen = (event) => {
-        resolve(dataChannel);
-      };
-      dataChannel.onclose = () => {
-        console.log(
-            'Data channel=' + label + ' state=' + dataChannel.readyState);
-      };
-      dataChannel.onmessage = onMessage ? onMessage : (msg) => {
-        console.log('Data channel=' + label + ' data="' + msg.data + '"');
-      };
-      dataChannel.onerror = err => {
-        reject(err);
-      };
-    }),
-    send: function(msg) {
-      this.channelPromise = this.channelPromise.then(channel => {
-        channel.send(msg);
-        return channel;
-      })
-    },
-  };
-}
-
-function awaitDataChannel(pc, label, onMessage) {
-  console.log('expecting data channel: ' + label);
-  // Return an object with a send function like that of the dataChannel, but
-  // that only actually sends over the data channel once it has connected.
-  return {
-    channelPromise: new Promise((resolve, reject) => {
-      let prev_ondatachannel = pc.ondatachannel;
-      pc.ondatachannel = ev => {
-        let dataChannel = ev.channel;
-        if (dataChannel.label == label) {
-          dataChannel.onopen = (event) => {
-            resolve(dataChannel);
-          };
-          dataChannel.onclose = () => {
-            console.log(
-                'Data channel=' + label + ' state=' + dataChannel.readyState);
-          };
-          dataChannel.onmessage = onMessage ? onMessage : (msg) => {
-            console.log('Data channel=' + label + ' data="' + msg.data + '"');
-          };
-          dataChannel.onerror = err => {
-            reject(err);
-          };
-        } else if (prev_ondatachannel) {
-          prev_ondatachannel(ev);
-        }
-      };
-    }),
-    send: function(msg) {
-      this.channelPromise = this.channelPromise.then(channel => {
-        channel.send(msg);
-        return channel;
-      })
-    },
-  };
-}
-
-class DeviceConnection {
-  constructor(pc, control, media_stream) {
-    this._pc = pc;
-    this._control = control;
-    this._media_stream = media_stream;
-    // Disable the microphone by default
-    this.useMic(false);
-    this.useVideo(false);
-    this._cameraDataChannel = pc.createDataChannel('camera-data-channel');
-    this._cameraDataChannel.binaryType = 'arraybuffer'
-    this._cameraInputQueue = new Array();
-    var self = this;
-    this._cameraDataChannel.onbufferedamountlow = () => {
-      if (self._cameraInputQueue.length > 0) {
-        self.sendCameraData(self._cameraInputQueue.shift());
-      }
-    }
-    this._inputChannel = createDataChannel(pc, 'input-channel');
-    this._adbChannel = createDataChannel(pc, 'adb-channel', (msg) => {
-      if (this._onAdbMessage) {
-        this._onAdbMessage(msg.data);
-      } else {
-        console.error('Received unexpected ADB message');
-      }
-    });
-    this._controlChannel = awaitDataChannel(pc, 'device-control', (msg) => {
-      if (this._onControlMessage) {
-        this._onControlMessage(msg);
-      } else {
-        console.error('Received unexpected Control message');
-      }
-    });
-    this._bluetoothChannel = createDataChannel(pc, 'bluetooth-channel', (msg) => {
-      if (this._onBluetoothMessage) {
-        this._onBluetoothMessage(msg.data);
-      } else {
-        console.error('Received unexpected Bluetooth message');
-      }
-    });
-    this.sendCameraResolution();
-    this._streams = {};
-    this._streamPromiseResolvers = {};
-
-    pc.addEventListener('track', e => {
-      console.log('Got remote stream: ', e);
-      for (const stream of e.streams) {
-        this._streams[stream.id] = stream;
-        if (this._streamPromiseResolvers[stream.id]) {
-          for (let resolver of this._streamPromiseResolvers[stream.id]) {
-            resolver();
-          }
-          delete this._streamPromiseResolvers[stream.id];
-        }
-      }
-    });
-  }
-
-  set description(desc) {
-    this._description = desc;
-  }
-
-  get description() {
-    return this._description;
-  }
-
-  get imageCapture() {
-    if (this._media_stream) {
-      const track = this._media_stream.getVideoTracks()[0]
-      return new ImageCapture(track);
-    }
-    return undefined;
-  }
-
-  get cameraWidth() {
-    return this._x_res;
-  }
-
-  get cameraHeight() {
-    return this._y_res;
-  }
-
-  get cameraEnabled() {
-    if (this._media_stream) {
-      return this._media_stream.getVideoTracks().some(track => track.enabled);
-    }
-  }
-
-  getStream(stream_id) {
-    return new Promise((resolve, reject) => {
-      if (this._streams[stream_id]) {
-        resolve(this._streams[stream_id]);
-      } else {
-        if (!this._streamPromiseResolvers[stream_id]) {
-          this._streamPromiseResolvers[stream_id] = [];
-        }
-        this._streamPromiseResolvers[stream_id].push(resolve);
-      }
-    });
-  }
-
-  _sendJsonInput(evt) {
-    this._inputChannel.send(JSON.stringify(evt));
-  }
-
-  sendMousePosition({x, y, down, display_label}) {
-    this._sendJsonInput({
-      type: 'mouse',
-      down: down ? 1 : 0,
-      x,
-      y,
-      display_label,
-    });
-  }
-
-  // TODO (b/124121375): This should probably be an array of pointer events and
-  // have different properties.
-  sendMultiTouch({idArr, xArr, yArr, down, slotArr, display_label}) {
-    this._sendJsonInput({
-      type: 'multi-touch',
-      id: idArr,
-      x: xArr,
-      y: yArr,
-      down: down ? 1 : 0,
-      slot: slotArr,
-      display_label: display_label,
-    });
-  }
-
-  sendKeyEvent(code, type) {
-    this._sendJsonInput({type: 'keyboard', keycode: code, event_type: type});
-  }
-
-  disconnect() {
-    this._pc.close();
-  }
-
-  // Sends binary data directly to the in-device adb daemon (skipping the host)
-  sendAdbMessage(msg) {
-    this._adbChannel.send(msg);
-  }
-
-  // Provide a callback to receive data from the in-device adb daemon
-  onAdbMessage(cb) {
-    this._onAdbMessage = cb;
-  }
-
-  // Send control commands to the device
-  sendControlMessage(msg) {
-    this._controlChannel.send(msg);
-  }
-
-  useMic(in_use) {
-    if (this._media_stream) {
-      this._media_stream.getAudioTracks().forEach(track => track.enabled = in_use);
-    }
-  }
-
-  useVideo(in_use) {
-    if (this._media_stream) {
-      this._media_stream.getVideoTracks().forEach(track => track.enabled = in_use);
-    }
-  }
-
-  sendCameraResolution() {
-    if (this._media_stream) {
-      const cameraTracks = this._media_stream.getVideoTracks();
-      if (cameraTracks.length > 0) {
-        const settings = cameraTracks[0].getSettings();
-        this._x_res = settings.width;
-        this._y_res = settings.height;
-        this.sendControlMessage(JSON.stringify({
-          command: 'camera_settings',
-          width: settings.width,
-          height: settings.height,
-          frame_rate: settings.frameRate,
-          facing: settings.facingMode
-        }));
-      }
-    }
-  }
-
-  sendOrQueueCameraData(data) {
-    if (this._cameraDataChannel.bufferedAmount > 0 || this._cameraInputQueue.length > 0) {
-      this._cameraInputQueue.push(data);
-    } else {
-      this.sendCameraData(data);
-    }
-  }
-
-  sendCameraData(data) {
-    const MAX_SIZE = 65535;
-    const END_MARKER = 'EOF';
-    for (let i = 0; i < data.byteLength; i += MAX_SIZE) {
-      // range is clamped to the valid index range
-      this._cameraDataChannel.send(data.slice(i, i + MAX_SIZE));
-    }
-    this._cameraDataChannel.send(END_MARKER);
-  }
-
-  // Provide a callback to receive control-related comms from the device
-  onControlMessage(cb) {
-    this._onControlMessage = cb;
-  }
-
-  sendBluetoothMessage(msg) {
-    this._bluetoothChannel.send(msg);
-  }
-
-  onBluetoothMessage(cb) {
-    this._onBluetoothMessage = cb;
-  }
-
-  // Provide a callback to receive connectionstatechange states.
-  onConnectionStateChange(cb) {
-    this._pc.addEventListener(
-      'connectionstatechange',
-      evt => cb(this._pc.connectionState));
-  }
-}
-
-
-class WebRTCControl {
-  constructor({
-    wsUrl = '',
-  }) {
-    /*
-     * Private attributes:
-     *
-     * _wsPromise: promises the underlying websocket, should resolve when the
-     *             socket passes to OPEN state, will be rejecte/replaced by a
-     *             rejected promise if an error is detected on the socket.
-     *
-     * _onOffer
-     * _onIceCandidate
-     */
-
-    this._promiseResolvers = {};
-
-    this._wsPromise = new Promise((resolve, reject) => {
-      let ws = new WebSocket(wsUrl);
-      ws.onopen = () => {
-        console.info(`Connected to ${wsUrl}`);
-        resolve(ws);
-      };
-      ws.onerror = evt => {
-        console.error('WebSocket error:', evt);
-        reject(evt);
-        // If the promise was already resolved the previous line has no effect
-        this._wsPromise = Promise.reject(new Error(evt));
-      };
-      ws.onmessage = e => {
-        let data = JSON.parse(e.data);
-        this._onWebsocketMessage(data);
-      };
-    });
-  }
-
-  _onWebsocketMessage(message) {
-    const type = message.message_type;
-    if (message.error) {
-      console.error(message.error);
-      this._on_connection_failed(message.error);
-      return;
-    }
-    switch (type) {
-      case 'config':
-        this._infra_config = message;
-        break;
-      case 'device_info':
-        if (this._on_device_available) {
-          this._on_device_available(message.device_info);
-          delete this._on_device_available;
-        } else {
-          console.error('Received unsolicited device info');
-        }
-        break;
-      case 'device_msg':
-        this._onDeviceMessage(message.payload);
-        break;
-      default:
-        console.error('Unrecognized message type from server: ', type);
-        this._on_connection_failed('Unrecognized message type from server: ' + type);
-        console.error(message);
-    }
-  }
-
-  _onDeviceMessage(message) {
-    let type = message.type;
-    switch (type) {
-      case 'offer':
-        if (this._onOffer) {
-          this._onOffer({type: 'offer', sdp: message.sdp});
-        } else {
-          console.error('Receive offer, but nothing is wating for it');
-        }
-        break;
-      case 'ice-candidate':
-        if (this._onIceCandidate) {
-          this._onIceCandidate(new RTCIceCandidate({
-            sdpMid: message.mid,
-            sdpMLineIndex: message.mLineIndex,
-            candidate: message.candidate
-          }));
-        } else {
-          console.error('Received ice candidate but nothing is waiting for it');
-        }
-        break;
-      default:
-        console.error('Unrecognized message type from device: ', type);
-    }
-  }
-
-  async _wsSendJson(obj) {
-    let ws = await this._wsPromise;
-    return ws.send(JSON.stringify(obj));
-  }
-  async _sendToDevice(payload) {
-    this._wsSendJson({message_type: 'forward', payload});
-  }
-
-  onOffer(cb) {
-    this._onOffer = cb;
-  }
-
-  onIceCandidate(cb) {
-    this._onIceCandidate = cb;
-  }
-
-  async requestDevice(device_id) {
-    return new Promise((resolve, reject) => {
-      this._on_device_available = (deviceInfo) => resolve({
-        deviceInfo,
-        infraConfig: this._infra_config,
-      });
-      this._on_connection_failed = (error) => reject(error);
-      this._wsSendJson({
-        message_type: 'connect',
-        device_id,
-      });
-    });
-  }
-
-  ConnectDevice() {
-    console.log('ConnectDevice');
-    this._sendToDevice({type: 'request-offer'});
-  }
-
-  /**
-   * Sends a remote description to the device.
-   */
-  async sendClientDescription(desc) {
-    console.log('sendClientDescription');
-    this._sendToDevice({type: 'answer', sdp: desc.sdp});
-  }
-
-  /**
-   * Sends an ICE candidate to the device
-   */
-  async sendIceCandidate(candidate) {
-    this._sendToDevice({type: 'ice-candidate', candidate});
-  }
-}
-
-function createPeerConnection(infra_config) {
-  let pc_config = {iceServers: []};
-  for (const stun of infra_config.ice_servers) {
-    pc_config.iceServers.push({urls: 'stun:' + stun});
-  }
-  let pc = new RTCPeerConnection(pc_config);
-
-  pc.addEventListener('icecandidate', evt => {
-    console.log('Local ICE Candidate: ', evt.candidate);
-  });
-  pc.addEventListener('iceconnectionstatechange', evt => {
-    console.log(`ICE State Change: ${pc.iceConnectionState}`);
-  });
-  pc.addEventListener(
-      'connectionstatechange',
-      evt =>
-          console.log(`WebRTC Connection State Change: ${pc.connectionState}`));
-  return pc;
-}
-
-export async function Connect(deviceId, options) {
-  let control = new WebRTCControl(options);
-  let requestRet = await control.requestDevice(deviceId);
-  let deviceInfo = requestRet.deviceInfo;
-  let infraConfig = requestRet.infraConfig;
-  console.log('Device available:');
-  console.log(deviceInfo);
-  let pc_config = {iceServers: []};
-  if (infraConfig.ice_servers && infraConfig.ice_servers.length > 0) {
-    for (const server of infraConfig.ice_servers) {
-      pc_config.iceServers.push(server);
-    }
-  }
-  let pc = createPeerConnection(infraConfig, control);
-
-  let mediaStream;
-  try {
-    mediaStream =
-        await navigator.mediaDevices.getUserMedia({video: true, audio: true});
-    const tracks = mediaStream.getTracks();
-    tracks.forEach(track => {
-      console.log(`Using ${track.kind} device: ${track.label}`);
-      pc.addTrack(track, mediaStream);
-    });
-  } catch (e) {
-    console.error("Failed to open audio device: ", e);
-  }
-
-  let deviceConnection = new DeviceConnection(pc, control, mediaStream);
-  deviceConnection.description = deviceInfo;
-  async function acceptOfferAndReplyAnswer(offer) {
-    try {
-      await pc.setRemoteDescription(offer);
-      let answer = await pc.createAnswer();
-      console.log('Answer: ', answer);
-      await pc.setLocalDescription(answer);
-      await control.sendClientDescription(answer);
-    } catch (e) {
-      console.error('Error establishing WebRTC connection: ', e)
-      throw e;
-    }
-  }
-  control.onOffer(desc => {
-    console.log('Offer: ', desc);
-    acceptOfferAndReplyAnswer(desc);
-  });
-  control.onIceCandidate(iceCandidate => {
-    console.log(`Remote ICE Candidate: `, iceCandidate);
-    pc.addIceCandidate(iceCandidate);
-  });
-
-  pc.addEventListener('icecandidate', evt => {
-    if (evt.candidate) control.sendIceCandidate(evt.candidate);
-  });
-  let connected_promise = new Promise((resolve, reject) => {
-    pc.addEventListener('connectionstatechange', evt => {
-      let state = pc.connectionState;
-      if (state == 'connected') {
-        resolve(deviceConnection);
-      } else if (state == 'failed') {
-        reject(evt);
-      }
-    });
-  });
-  control.ConnectDevice();
-
-  return connected_promise;
-}
diff --git a/host/frontend/webrtc_operator/assets/js/controls.js b/host/frontend/webrtc_operator/assets/js/controls.js
deleted file mode 100644
index 31db046..0000000
--- a/host/frontend/webrtc_operator/assets/js/controls.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * 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.
- */
-
-function createToggleControl(elm, iconName, onChangeCb) {
-  let icon = document.createElement("span");
-  icon.classList.add("toggle-control-icon");
-  icon.classList.add("material-icons-outlined");
-  if (iconName) {
-    icon.appendChild(document.createTextNode(iconName));
-  }
-  elm.appendChild(icon);
-  let toggle = document.createElement("label");
-  toggle.classList.add("toggle-control-switch");
-  let input = document.createElement("input");
-  input.type = "checkbox";
-  toggle.appendChild(input);
-  let slider = document.createElement("span");
-  slider.classList.add("toggle-control-slider");
-  toggle.appendChild(slider);
-  elm.classList.add("toggle-control");
-  elm.appendChild(toggle);
-  if (onChangeCb) {
-    input.onchange = e => onChangeCb(e.target.checked);
-  }
-}
diff --git a/host/frontend/webrtc_operator/assets/js/index.js b/host/frontend/webrtc_operator/assets/js/index.js
new file mode 100644
index 0000000..c04f308
--- /dev/null
+++ b/host/frontend/webrtc_operator/assets/js/index.js
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * 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.
+ */
+
+'use strict';
+
+class DeviceListApp {
+  #url;
+  #selectDeviceCb;
+
+  constructor({url, selectDeviceCb}) {
+    this.#url = url;
+    this.#selectDeviceCb = selectDeviceCb;
+  }
+
+  start() {
+    // Get any devices that are already connected
+    this.#UpdateDeviceList();
+
+    // Update the list at the user's request
+    document.getElementById('refresh-list')
+        .addEventListener('click', evt => this.#UpdateDeviceList());
+  }
+
+  async #UpdateDeviceList() {
+    try {
+      const device_ids = await fetch(this.#url, {
+        method: 'GET',
+        cache: 'no-cache',
+        redirect: 'follow',
+      });
+      this.#ShowNewDeviceList(await device_ids.json());
+    } catch (e) {
+      console.error('Error getting list of device ids: ', e);
+    }
+  }
+
+  #ShowNewDeviceList(device_ids) {
+    let ul = document.getElementById('device-list');
+    ul.innerHTML = '';
+    let count = 1;
+    let device_to_button_map = {};
+    for (const devId of device_ids) {
+      const buttonId = 'connect_' + count++;
+      let entry = this.#createDeviceEntry(devId, buttonId);
+      ul.appendChild(entry);
+      device_to_button_map[devId] = buttonId;
+    }
+
+    for (const [devId, buttonId] of Object.entries(device_to_button_map)) {
+      let button = document.getElementById(buttonId);
+      button.addEventListener('click', evt => {
+        this.#selectDeviceCb(devId);
+      });
+    }
+  }
+
+  #createDeviceEntry(devId, buttonId) {
+    let li = document.createElement('li');
+    li.className = 'device_entry';
+    li.title = 'Connect to ' + devId;
+    let div = document.createElement('div');
+    let span = document.createElement('span');
+    span.appendChild(document.createTextNode(devId));
+    let button = document.createElement('button');
+    button.id = buttonId;
+    button.appendChild(document.createTextNode('Connect'));
+    div.appendChild(span);
+    div.appendChild(button);
+    li.appendChild(div);
+    return li;
+  }
+}  // DeviceListApp
+
+window.addEventListener('load', e => {
+  let listDevicesUrl = '/devices';
+  let selectDeviceCb = deviceId => {
+    return new Promise((resolve, reject) => {
+      let client = window.open(`client.html?deviceId=${deviceId}`, deviceId);
+      client.addEventListener('load', evt => {
+        console.log('loaded');
+        resolve();
+      });
+    });
+  };
+  let deviceListApp = new DeviceListApp({url: listDevicesUrl, selectDeviceCb});
+  deviceListApp.start();
+});
diff --git a/host/frontend/webrtc_operator/assets/js/server_connector.js b/host/frontend/webrtc_operator/assets/js/server_connector.js
new file mode 100644
index 0000000..ff19a0a
--- /dev/null
+++ b/host/frontend/webrtc_operator/assets/js/server_connector.js
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+'use strict';
+
+// The public elements in this file implement the Server Connector Interface,
+// part of the contract between the signaling server and the webrtc client.
+// No changes that break backward compatibility are allowed here. Any new
+// features must be added as a new function/class in the interface. Any
+// additions to the interface must be checked for existence by the client before
+// using it.
+
+// The id of the device the client is supposed to connect to.
+// The List Devices page in the signaling server may choose any way to pass the
+// device id to the client page, this function retrieves that information once
+// the client loaded.
+// In this case the device id is passed as a parameter in the url.
+export function deviceId() {
+  const urlParams = new URLSearchParams(window.location.search);
+  return urlParams.get('deviceId');
+}
+
+// Creates a connector capable of communicating with the signaling server.
+export async function createConnector() {
+  try {
+    let ws = await connectWs();
+    console.debug(`Connected to ${ws.url}`);
+    return new WebsocketConnector(ws);
+  } catch (e) {
+    console.error('WebSocket error:', e);
+  }
+  console.warn('Failed to connect websocket, trying polling instead');
+
+  return new PollingConnector();
+}
+
+// A connector object provides high level functions for communicating with the
+// signaling server, while hiding away implementation details.
+// This class is an interface and shouldn't be instantiated direclty.
+// Only the public methods present in this class form part of the Server
+// Connector Interface, any implementations of the interface are considered
+// internal and not accessible to client code.
+class Connector {
+  constructor() {
+    if (this.constructor == Connector) {
+      throw new Error('Connector is an abstract class');
+    }
+  }
+
+  // Selects a particular device in the signaling server and opens the signaling
+  // channel with it (but doesn't send any message to the device). Returns a
+  // promise to an object with the following properties:
+  // - deviceInfo: The info object provided by the device when it registered
+  // with the server.
+  // - infraConfig: The server's infrastructure configuration (mainly STUN and
+  // TURN servers)
+  // The promise may take a long time to resolve if, for example, the server
+  // decides to wait for a device with the provided id to register with it. The
+  // promise may be rejected if there are connectivity issues, a device with
+  // that id doesn't exist or this client doesn't have rights to access that
+  // device.
+  async requestDevice(deviceId) {
+    throw 'Not implemented!';
+  }
+
+  // Sends a message to the device selected with requestDevice. It's an error to
+  // call this function before the promise from requestDevice() has resolved.
+  // Returns an empty promise that is rejected when the message can not be
+  // delivered, either because the device has not been requested yet or because
+  // of connectivity issues.
+  async sendToDevice(msg) {
+    throw 'Not implemented!';
+  }
+}
+
+// End of Server Connector Interface.
+
+// The following code is internal and shouldn't be accessed outside this file.
+
+function httpUrl(path) {
+  return location.protocol + '//' + location.host + '/' + path;
+}
+
+function websocketUrl(path) {
+  return ((location.protocol == 'http:') ? 'ws://' : 'wss://') + location.host +
+      '/' + path;
+}
+
+const kPollConfigUrl = httpUrl('infra_config');
+const kPollConnectUrl = httpUrl('connect');
+const kPollForwardUrl = httpUrl('forward');
+const kPollMessagesUrl = httpUrl('poll_messages');
+
+async function connectWs() {
+  return new Promise((resolve, reject) => {
+    let url = websocketUrl('connect_client');
+    let ws = new WebSocket(url);
+    ws.onopen = () => {
+      resolve(ws);
+    };
+    ws.onerror = evt => {
+      reject(evt);
+    };
+  });
+}
+
+async function ajaxPostJson(url, data) {
+  const response = await fetch(url, {
+    method: 'POST',
+    cache: 'no-cache',
+    headers: {'Content-Type': 'application/json'},
+    redirect: 'follow',
+    body: JSON.stringify(data),
+  });
+  return response.json();
+}
+
+// Implementation of the connector interface using websockets
+class WebsocketConnector extends Connector {
+  #websocket;
+  #futures = {};
+  #onDeviceMsgCb = msg =>
+      console.error('Received device message without registered listener');
+
+  onDeviceMsg(cb) {
+    this.#onDeviceMsgCb = cb;
+  }
+
+  constructor(ws) {
+    super();
+    ws.onmessage = e => {
+      let data = JSON.parse(e.data);
+      this.#onWebsocketMessage(data);
+    };
+    this.#websocket = ws;
+  }
+
+  async requestDevice(deviceId) {
+    return new Promise((resolve, reject) => {
+      this.#futures.onDeviceAvailable = (device) => resolve(device);
+      this.#futures.onConnectionFailed = (error) => reject(error);
+      this.#wsSendJson({
+        message_type: 'connect',
+        device_id: deviceId,
+      });
+    });
+  }
+
+  async sendToDevice(msg) {
+    return this.#wsSendJson({message_type: 'forward', payload: msg});
+  }
+
+  #onWebsocketMessage(message) {
+    const type = message.message_type;
+    if (message.error) {
+      console.error(message.error);
+      this.#futures.onConnectionFailed(message.error);
+      return;
+    }
+    switch (type) {
+      case 'config':
+        this.#futures.infraConfig = message;
+        break;
+      case 'device_info':
+        if (this.#futures.onDeviceAvailable) {
+          this.#futures.onDeviceAvailable({
+            deviceInfo: message.device_info,
+            infraConfig: this.#futures.infraConfig,
+          });
+          delete this.#futures.onDeviceAvailable;
+        } else {
+          console.error('Received unsolicited device info');
+        }
+        break;
+      case 'device_msg':
+        this.#onDeviceMsgCb(message.payload);
+        break;
+      default:
+        console.error('Unrecognized message type from server: ', type);
+        this.#futures.onConnectionFailed(
+            'Unrecognized message type from server: ' + type);
+        console.error(message);
+    }
+  }
+
+  async #wsSendJson(obj) {
+    return this.#websocket.send(JSON.stringify(obj));
+  }
+}
+
+// Implementation of the Connector interface using HTTP long polling
+class PollingConnector extends Connector {
+  #connId = undefined;
+  #config = undefined;
+  #pollerSchedule;
+  #onDeviceMsgCb = msg =>
+      console.error('Received device message without registered listener');
+
+  onDeviceMsg(cb) {
+    this.#onDeviceMsgCb = cb;
+  }
+
+  constructor() {
+    super();
+  }
+
+  async requestDevice(deviceId) {
+    let config = await this.#getConfig();
+    let response = await ajaxPostJson(kPollConnectUrl, {device_id: deviceId});
+    this.#connId = response.connection_id;
+
+    this.#startPolling();
+
+    return {
+      deviceInfo: response.device_info,
+      infraConfig: config,
+    };
+  }
+
+  async sendToDevice(msg) {
+    // Forward messages act like polling messages as well
+    let device_messages = await this.#forward(msg);
+    for (const message of device_messages) {
+      this.#onDeviceMsgCb(message);
+    }
+  }
+
+  async #getConfig() {
+    if (this.#config === undefined) {
+      this.#config = await (await fetch(kPollConfigUrl, {
+                       method: 'GET',
+                       redirect: 'follow',
+                     })).json();
+    }
+    return this.#config;
+  }
+
+  async #forward(msg) {
+    return await ajaxPostJson(kPollForwardUrl, {
+      connection_id: this.#connId,
+      payload: msg,
+    });
+  }
+
+  async #pollMessages() {
+    return await ajaxPostJson(kPollMessagesUrl, {
+      connection_id: this.#connId,
+    });
+  }
+
+  #startPolling() {
+    if (this.#pollerSchedule !== undefined) {
+      return;
+    }
+
+    let currentPollDelay = 1000;
+    let pollerRoutine = async () => {
+      let messages = await this.#pollMessages();
+
+      // Do exponential backoff on the polling up to 60 seconds
+      currentPollDelay = Math.min(60000, 2 * currentPollDelay);
+      for (const message of messages) {
+        this.#onDeviceMsgCb(message);
+        // There is at least one message, poll sooner
+        currentPollDelay = 1000;
+      }
+      this.#pollerSchedule = setTimeout(pollerRoutine, currentPollDelay);
+    };
+
+    this.#pollerSchedule = setTimeout(pollerRoutine, currentPollDelay);
+  }
+}
diff --git a/host/frontend/webrtc_operator/client_handler.cpp b/host/frontend/webrtc_operator/client_handler.cpp
index 7b631a6..a69241c 100644
--- a/host/frontend/webrtc_operator/client_handler.cpp
+++ b/host/frontend/webrtc_operator/client_handler.cpp
@@ -15,6 +15,9 @@
 
 #include "host/frontend/webrtc_operator/client_handler.h"
 
+#include <algorithm>
+#include <random>
+
 #include <android-base/logging.h>
 
 #include "host/frontend/webrtc_operator/constants/signaling_constants.h"
@@ -22,27 +25,42 @@
 
 namespace cuttlefish {
 
-ClientHandler::ClientHandler(struct lws* wsi, DeviceRegistry* registry,
+namespace {
+std::string RandomClientSecret(size_t len) {
+  static constexpr auto chars =
+      "0123456789"
+      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+      "abcdefghijklmnopqrstuvwxyz";
+  std::string ret(len, '\0');
+  std::default_random_engine e{std::random_device{}()};
+  std::uniform_int_distribution<int> random{
+      0, static_cast<int>(std::strlen(chars)) - 1};
+  std::generate_n(ret.begin(), len, [&]() { return chars[random(e)]; });
+  return ret;
+}
+}
+
+ClientWSHandler::ClientWSHandler(struct lws* wsi, DeviceRegistry* registry,
                              const ServerConfig& server_config)
     : SignalHandler(wsi, registry, server_config),
       device_handler_(),
       client_id_(0) {}
 
-void ClientHandler::OnClosed() {
+void ClientWSHandler::OnClosed() {
   auto device_handler = device_handler_.lock();
   if (device_handler) {
     device_handler->SendClientDisconnectMessage(client_id_);
   }
 }
 
-void ClientHandler::SendDeviceMessage(const Json::Value& device_message) {
+void ClientWSHandler::SendDeviceMessage(const Json::Value& device_message) {
   Json::Value message;
   message[webrtc_signaling::kTypeField] = webrtc_signaling::kDeviceMessageType;
   message[webrtc_signaling::kPayloadField] = device_message;
   Reply(message);
 }
 
-void ClientHandler::handleMessage(const std::string& type,
+void ClientWSHandler::handleMessage(const std::string& type,
                                   const Json::Value& message) {
   if (type == webrtc_signaling::kConnectType) {
     handleConnectionRequest(message);
@@ -53,7 +71,7 @@
   }
 }
 
-void ClientHandler::handleConnectionRequest(const Json::Value& message) {
+void ClientWSHandler::handleConnectionRequest(const Json::Value& message) {
   if (client_id_ > 0) {
     LogAndReplyError(
         "Attempt to connect to multiple devices over same websocket");
@@ -90,7 +108,7 @@
   Reply(device_info_reply);
 }
 
-void ClientHandler::handleForward(const Json::Value& message) {
+void ClientWSHandler::handleForward(const Json::Value& message) {
   if (client_id_ == 0) {
     LogAndReplyError("Forward failed: No device asociated to client");
     Close();
@@ -112,14 +130,232 @@
                                     message[webrtc_signaling::kPayloadField]);
 }
 
-ClientHandlerFactory::ClientHandlerFactory(DeviceRegistry* registry,
+ClientWSHandlerFactory::ClientWSHandlerFactory(DeviceRegistry* registry,
                                            const ServerConfig& server_config)
   : registry_(registry),
     server_config_(server_config) {}
 
-std::shared_ptr<WebSocketHandler> ClientHandlerFactory::Build(struct lws* wsi) {
+std::shared_ptr<WebSocketHandler> ClientWSHandlerFactory::Build(struct lws* wsi) {
   return std::shared_ptr<WebSocketHandler>(
-      new ClientHandler(wsi, registry_, server_config_));
+      new ClientWSHandler(wsi, registry_, server_config_));
+}
+
+/******************************************************************************/
+
+class PollConnectionHandler : public ClientHandler {
+ public:
+  PollConnectionHandler() = default;
+
+  void SendDeviceMessage(const Json::Value& message) override {
+    constexpr size_t kMaxMessagesInQueue = 1000;
+    if (messages_.size() > kMaxMessagesInQueue) {
+      LOG(ERROR) << "Polling client " << client_id_ << " reached "
+                 << kMaxMessagesInQueue
+                 << " messages queued. Started to drop messages.";
+      return;
+    }
+    messages_.push_back(message);
+  }
+
+  std::vector<Json::Value> PollMessages() {
+    std::vector<Json::Value> ret;
+    std::swap(ret, messages_);
+    return ret;
+  }
+
+  void SetDeviceHandler(std::weak_ptr<DeviceHandler> device_handler) {
+    device_handler_ = device_handler;
+  }
+
+  void SetClientId(size_t client_id) { client_id_ = client_id; }
+
+  size_t client_id() const { return client_id_; }
+  std::shared_ptr<DeviceHandler> device_handler() const {
+    return device_handler_.lock();
+  }
+
+ private:
+  size_t client_id_ = 0;
+  std::weak_ptr<DeviceHandler> device_handler_;
+  std::vector<Json::Value> messages_;
+};
+
+std::shared_ptr<PollConnectionHandler> PollConnectionStore::Get(
+    const std::string& conn_id) const {
+  if (!handlers_.count(conn_id)) {
+    return nullptr;
+  }
+  return handlers_.at(conn_id);
+}
+
+std::string PollConnectionStore::Add(std::shared_ptr<PollConnectionHandler> handler) {
+  std::string conn_id;
+  do {
+    conn_id = RandomClientSecret(64);
+  } while (handlers_.count(conn_id));
+  handlers_[conn_id] = handler;
+  return conn_id;
+}
+
+ClientDynHandler::ClientDynHandler(struct lws* wsi,
+                                   PollConnectionStore* poll_store)
+    : DynHandler(wsi), poll_store_(poll_store) {}
+
+HttpStatusCode ClientDynHandler::DoGet() {
+  // No message from the client uses the GET method because all of them
+  // change the server state somehow
+  return HttpStatusCode::MethodNotAllowed;
+}
+
+void ClientDynHandler::Reply(const Json::Value& json) {
+  Json::StreamWriterBuilder factory;
+  auto replyAsString = Json::writeString(factory, json);
+  AppendDataOut(replyAsString);
+}
+
+void ClientDynHandler::ReplyError(const std::string& message) {
+  LOG(ERROR) << message;
+  Json::Value reply;
+  reply["type"] = "error";
+  reply["error"] = message;
+  Reply(reply);
+}
+
+HttpStatusCode ClientDynHandler::DoPost() {
+  auto& data = GetDataIn();
+  Json::Value json_message;
+  std::shared_ptr<PollConnectionHandler> poll_handler;
+  if (data.size() > 0) {
+    Json::CharReaderBuilder builder;
+    std::unique_ptr<Json::CharReader> json_reader(builder.newCharReader());
+    std::string error_message;
+    if (!json_reader->parse(data.c_str(), data.c_str() + data.size(), &json_message,
+                            &error_message)) {
+      ReplyError("Error parsing JSON: " + error_message);
+      // Rate limiting would be a good idea here
+      return HttpStatusCode::BadRequest;
+    }
+
+    std::string conn_id;
+    if (json_message.isMember(webrtc_signaling::kClientSecretField)) {
+      conn_id =
+          json_message[webrtc_signaling::kClientSecretField].asString();
+      poll_handler = poll_store_->Get(conn_id);
+      if (!poll_handler) {
+        ReplyError("Error: Unknown connection id" + conn_id);
+        return HttpStatusCode::Unauthorized;
+      }
+    }
+  }
+  return DoPostInner(poll_handler, json_message);
+}
+
+HttpStatusCode ClientDynHandler::Poll(
+    std::shared_ptr<PollConnectionHandler> poll_handler) {
+  if (!poll_handler) {
+    ReplyError("Poll failed: No device associated to client");
+    return HttpStatusCode::Unauthorized;
+  }
+  auto messages = poll_handler->PollMessages();
+  Json::Value reply(Json::arrayValue);
+  for (auto& msg : messages) {
+    reply.append(msg);
+  }
+  Reply(reply);
+  return HttpStatusCode::Ok;
+}
+
+ConnectHandler::ConnectHandler(struct lws* wsi, DeviceRegistry* registry,
+                               PollConnectionStore* poll_store)
+    : ClientDynHandler(wsi, poll_store), registry_(registry) {}
+
+HttpStatusCode ConnectHandler::DoPostInner(
+    std::shared_ptr<PollConnectionHandler> poll_handler,
+    const Json::Value& message) {
+  if (!message.isMember(webrtc_signaling::kDeviceIdField) ||
+      !message[webrtc_signaling::kDeviceIdField].isString()) {
+    ReplyError("Invalid connection request: Missing device id");
+    return HttpStatusCode::BadRequest;
+  }
+  auto device_id = message[webrtc_signaling::kDeviceIdField].asString();
+
+  auto device_handler = registry_->GetDevice(device_id);
+  if (!device_handler) {
+    ReplyError("Connection failed: Device not found: '" + device_id + "'");
+    return HttpStatusCode::NotFound;
+  }
+
+  poll_handler = std::make_shared<PollConnectionHandler>();
+  poll_handler->SetClientId(device_handler->RegisterClient(poll_handler));
+  poll_handler->SetDeviceHandler(device_handler);
+  auto conn_id = poll_store_->Add(poll_handler);
+
+  Json::Value device_info_reply;
+  device_info_reply[webrtc_signaling::kClientSecretField] = conn_id;
+  device_info_reply[webrtc_signaling::kTypeField] =
+      webrtc_signaling::kDeviceInfoType;
+  device_info_reply[webrtc_signaling::kDeviceInfoField] =
+      device_handler->device_info();
+  Reply(device_info_reply);
+
+  return HttpStatusCode::Ok;
+}
+
+ForwardHandler::ForwardHandler(struct lws* wsi,
+                               PollConnectionStore* poll_store)
+    : ClientDynHandler(wsi, poll_store) {}
+
+HttpStatusCode ForwardHandler::DoPostInner(
+    std::shared_ptr<PollConnectionHandler> poll_handler,
+    const Json::Value& message) {
+  if (!poll_handler) {
+    ReplyError("Forward failed: No device associated to client");
+    return HttpStatusCode::Unauthorized;
+  }
+  auto client_id = poll_handler->client_id();
+  if (client_id == 0) {
+    ReplyError("Forward failed: No device associated to client");
+    return HttpStatusCode::Unauthorized;
+  }
+  if (!message.isMember(webrtc_signaling::kPayloadField)) {
+    ReplyError("Forward failed: No payload present in message");
+    return HttpStatusCode::BadRequest;
+  }
+  auto device_handler = poll_handler->device_handler();
+  if (!device_handler) {
+    ReplyError("Forward failed: Device disconnected");
+    return HttpStatusCode::NotFound;
+  }
+  device_handler->SendClientMessage(client_id,
+                                    message[webrtc_signaling::kPayloadField]);
+  // Don't waste an HTTP session returning nothing, send any pending device
+  // messages to the client instead.
+  return Poll(poll_handler);
+}
+
+PollHandler::PollHandler(struct lws* wsi, PollConnectionStore* poll_store)
+    : ClientDynHandler(wsi, poll_store) {}
+
+HttpStatusCode PollHandler::DoPostInner(
+    std::shared_ptr<PollConnectionHandler> poll_handler,
+    const Json::Value& /*message*/) {
+  return Poll(poll_handler);
+}
+
+ConfigHandler::ConfigHandler(struct lws* wsi, const ServerConfig& server_config)
+    : DynHandler(wsi), server_config_(server_config) {}
+
+HttpStatusCode ConfigHandler::DoGet() {
+  Json::Value reply = server_config_.ToJson();
+  reply[webrtc_signaling::kTypeField] = webrtc_signaling::kConfigType;
+  Json::StreamWriterBuilder factory;
+  auto replyAsString = Json::writeString(factory, reply);
+  AppendDataOut(replyAsString);
+  return HttpStatusCode::Ok;
+}
+
+HttpStatusCode ConfigHandler::DoPost() {
+  return HttpStatusCode::MethodNotAllowed;
 }
 
 }  // namespace cuttlefish
diff --git a/host/frontend/webrtc_operator/client_handler.h b/host/frontend/webrtc_operator/client_handler.h
index b10f3e8..2cb6a0e 100644
--- a/host/frontend/webrtc_operator/client_handler.h
+++ b/host/frontend/webrtc_operator/client_handler.h
@@ -27,18 +27,27 @@
 
 namespace cuttlefish {
 class DeviceHandler;
-class ClientHandler : public SignalHandler,
-                      public std::enable_shared_from_this<ClientHandler> {
+
+class ClientHandler {
  public:
-  ClientHandler(struct lws* wsi, DeviceRegistry* registry,
-                const ServerConfig& server_config);
-  void SendDeviceMessage(const Json::Value& message);
+  virtual ~ClientHandler() = default;
+  virtual void SendDeviceMessage(const Json::Value& message) = 0;
+};
+
+class ClientWSHandler : public ClientHandler,
+                        public SignalHandler,
+                        public std::enable_shared_from_this<ClientHandler> {
+ public:
+  ClientWSHandler(struct lws* wsi, DeviceRegistry* registry,
+                  const ServerConfig& server_config);
+
+  void SendDeviceMessage(const Json::Value& message) override;
 
   void OnClosed() override;
 
  protected:
   void handleMessage(const std::string& type,
-                    const Json::Value& message) override;
+                     const Json::Value& message) override;
 
  private:
   void handleConnectionRequest(const Json::Value& message);
@@ -50,14 +59,91 @@
   size_t client_id_;
 };
 
-class ClientHandlerFactory : public WebSocketHandlerFactory {
+class ClientWSHandlerFactory : public WebSocketHandlerFactory {
  public:
-  ClientHandlerFactory(DeviceRegistry* registry,
-                       const ServerConfig& server_config);
+  ClientWSHandlerFactory(DeviceRegistry* registry,
+                         const ServerConfig& server_config);
   std::shared_ptr<WebSocketHandler> Build(struct lws* wsi) override;
 
  private:
   DeviceRegistry* registry_;
   const ServerConfig& server_config_;
 };
+
+class PollConnectionHandler;
+
+class PollConnectionStore {
+  public:
+    PollConnectionStore() = default;
+
+    std::shared_ptr<PollConnectionHandler> Get(const std::string& conn_id) const;
+    std::string Add(std::shared_ptr<PollConnectionHandler> handler);
+  private:
+   std::map<std::string, std::shared_ptr<PollConnectionHandler>>
+       handlers_;
+};
+
+class ClientDynHandler : public DynHandler,
+                         public std::enable_shared_from_this<ClientHandler> {
+ public:
+  ClientDynHandler(struct lws* wsi, PollConnectionStore* poll_store);
+
+  HttpStatusCode DoGet() override;
+  HttpStatusCode DoPost() override;
+
+ protected:
+  virtual HttpStatusCode DoPostInner(std::shared_ptr<PollConnectionHandler>,
+                                     const Json::Value&) = 0;
+  // In the base class because it's shared by some of the subclasses
+  HttpStatusCode Poll(std::shared_ptr<PollConnectionHandler>);
+
+  void Reply(const Json::Value& json);
+  void ReplyError(const std::string& message);
+  bool ParseInput();
+
+  PollConnectionStore* poll_store_;
+};
+
+class ConnectHandler : public ClientDynHandler {
+ public:
+  ConnectHandler(struct lws* wsi, DeviceRegistry* registry,
+                 PollConnectionStore* poll_store);
+
+ protected:
+  HttpStatusCode DoPostInner(std::shared_ptr<PollConnectionHandler>,
+                             const Json::Value&) override;
+ private:
+  DeviceRegistry* registry_;
+};
+
+class ForwardHandler : public ClientDynHandler {
+ public:
+  ForwardHandler(struct lws* wsi, PollConnectionStore* poll_store);
+
+ protected:
+  HttpStatusCode DoPostInner(std::shared_ptr<PollConnectionHandler>,
+                             const Json::Value&) override;
+};
+
+class PollHandler : public ClientDynHandler {
+ public:
+  PollHandler(struct lws* wsi, PollConnectionStore* poll_store);
+
+ protected:
+  HttpStatusCode DoPostInner(std::shared_ptr<PollConnectionHandler>,
+                             const Json::Value&) override;
+};
+
+class ConfigHandler : public DynHandler {
+ public:
+  ConfigHandler(struct lws* wsi, const ServerConfig& server_config);
+
+  HttpStatusCode DoGet() override;
+
+  HttpStatusCode DoPost() override;
+
+ private:
+  const ServerConfig& server_config_;
+};
+
 }  // namespace cuttlefish
diff --git a/host/frontend/webrtc_operator/constants/signaling_constants.h b/host/frontend/webrtc_operator/constants/signaling_constants.h
index ecd3a3d..e03a8a8 100644
--- a/host/frontend/webrtc_operator/constants/signaling_constants.h
+++ b/host/frontend/webrtc_operator/constants/signaling_constants.h
@@ -24,6 +24,8 @@
 constexpr auto kClientIdField = "client_id";
 constexpr auto kPayloadField = "payload";
 constexpr auto kServersField = "ice_servers";
+constexpr auto kClientSecretField = "connection_id";
+constexpr auto kDevicePortField = "device_port";
 // These are defined in the IceServer dictionary
 constexpr auto kUrlsField = "urls";
 constexpr auto kUsernameField = "username";
@@ -38,6 +40,7 @@
 constexpr auto kClientMessageType = "client_msg";
 constexpr auto kClientDisconnectType = "client_disconnected";
 constexpr auto kDeviceMessageType = "device_msg";
+constexpr auto kPollType = "client_poll";
 
 }  // namespace webrtc_signaling
 }  // namespace cuttlefish
diff --git a/host/frontend/webrtc_operator/device_list_handler.cpp b/host/frontend/webrtc_operator/device_list_handler.cpp
index 314feea..c92e8e8 100644
--- a/host/frontend/webrtc_operator/device_list_handler.cpp
+++ b/host/frontend/webrtc_operator/device_list_handler.cpp
@@ -18,12 +18,10 @@
 namespace cuttlefish {
 
 DeviceListHandler::DeviceListHandler(struct lws* wsi,
-                                     const DeviceRegistry& registry)
-    : WebSocketHandler(wsi), registry_(registry) {}
+                                           DeviceRegistry& registry)
+    : DynHandler(wsi), registry_(registry) {}
 
-void DeviceListHandler::OnReceive(const uint8_t* /*msg*/, size_t /*len*/,
-                                  bool /*binary*/) {
-  // Ignore the message, just send the reply
+HttpStatusCode DeviceListHandler::DoGet() {
   Json::Value reply(Json::ValueType::arrayValue);
 
   for (const auto& id : registry_.ListDeviceIds()) {
@@ -31,18 +29,11 @@
   }
   Json::StreamWriterBuilder json_factory;
   auto replyAsString = Json::writeString(json_factory, reply);
-  EnqueueMessage(replyAsString.c_str(), replyAsString.size());
-  Close();
+  AppendDataOut(replyAsString);
+  return HttpStatusCode::Ok;
+}
+HttpStatusCode DeviceListHandler::DoPost() {
+  return HttpStatusCode::NotFound;
 }
 
-void DeviceListHandler::OnConnected() {}
-
-void DeviceListHandler::OnClosed() {}
-
-DeviceListHandlerFactory::DeviceListHandlerFactory(const DeviceRegistry& registry)
-  : registry_(registry) {}
-
-std::shared_ptr<WebSocketHandler> DeviceListHandlerFactory::Build(struct lws* wsi) {
-  return std::shared_ptr<WebSocketHandler>(new DeviceListHandler(wsi, registry_));
-}
 }  // namespace cuttlefish
diff --git a/host/frontend/webrtc_operator/device_list_handler.h b/host/frontend/webrtc_operator/device_list_handler.h
index 99d1f9c..2dc8406 100644
--- a/host/frontend/webrtc_operator/device_list_handler.h
+++ b/host/frontend/webrtc_operator/device_list_handler.h
@@ -25,24 +25,15 @@
 
 namespace cuttlefish {
 
-class DeviceListHandler : public WebSocketHandler {
+class DeviceListHandler : public DynHandler {
  public:
-  DeviceListHandler(struct lws* wsi, const DeviceRegistry& registry);
+  DeviceListHandler(struct lws* wsi, DeviceRegistry& registry);
 
-  void OnReceive(const uint8_t* msg, size_t len, bool binary) override;
-  void OnConnected() override;
-  void OnClosed() override;
+  HttpStatusCode DoGet() override;
+  HttpStatusCode DoPost() override;
 
  private:
-  const DeviceRegistry& registry_;
+  DeviceRegistry& registry_;
 };
 
-class DeviceListHandlerFactory : public WebSocketHandlerFactory {
- public:
-  DeviceListHandlerFactory(const DeviceRegistry& registry);
-  std::shared_ptr<WebSocketHandler> Build(struct lws* wsi) override;
-
- private:
-  const DeviceRegistry& registry_;
-};
 }  // namespace cuttlefish
diff --git a/host/frontend/webrtc_operator/server.cpp b/host/frontend/webrtc_operator/server.cpp
index c1f08f7..65295cf 100644
--- a/host/frontend/webrtc_operator/server.cpp
+++ b/host/frontend/webrtc_operator/server.cpp
@@ -41,7 +41,11 @@
 
 constexpr auto kRegisterDeviceUriPath = "/register_device";
 constexpr auto kConnectClientUriPath = "/connect_client";
-constexpr auto kListDevicesUriPath = "/list_devices";
+constexpr auto kListDevicesUriPath = "/devices";
+const constexpr auto kInfraConfigPath = "/infra_config";
+const constexpr auto kConnectPath = "/connect";
+const constexpr auto kForwardPath = "/forward";
+const constexpr auto kPollPath = "/poll_messages";
 
 }  // namespace
 
@@ -50,23 +54,59 @@
   ::gflags::ParseCommandLineFlags(&argc, &argv, true);
 
   cuttlefish::DeviceRegistry device_registry;
+  cuttlefish::PollConnectionStore poll_store;
   cuttlefish::ServerConfig server_config({FLAGS_stun_server});
 
-  cuttlefish::WebSocketServer wss(
-        "webrtc-operator", FLAGS_certs_dir, FLAGS_assets_dir, FLAGS_http_server_port);
+  cuttlefish::WebSocketServer wss =
+      FLAGS_use_secure_http
+          ? cuttlefish::WebSocketServer("webrtc-operator", FLAGS_certs_dir,
+                                        FLAGS_assets_dir,
+                                        FLAGS_http_server_port)
+          : cuttlefish::WebSocketServer("webrtc-operator", FLAGS_assets_dir,
+                                        FLAGS_http_server_port);
 
+  // Device list endpoint
+  wss.RegisterDynHandlerFactory(
+      kListDevicesUriPath, [&device_registry](struct lws* wsi) {
+        return std::unique_ptr<cuttlefish::DynHandler>(
+            new cuttlefish::DeviceListHandler(wsi, device_registry));
+      });
+
+  // Websocket signaling endpoints
   auto device_handler_factory_p =
       std::unique_ptr<cuttlefish::WebSocketHandlerFactory>(
-          new cuttlefish::DeviceHandlerFactory(&device_registry, server_config));
-  wss.RegisterHandlerFactory(kRegisterDeviceUriPath, std::move(device_handler_factory_p));
+          new cuttlefish::DeviceHandlerFactory(&device_registry,
+                                               server_config));
+  wss.RegisterHandlerFactory(kRegisterDeviceUriPath,
+                             std::move(device_handler_factory_p));
   auto client_handler_factory_p =
       std::unique_ptr<cuttlefish::WebSocketHandlerFactory>(
-          new cuttlefish::ClientHandlerFactory(&device_registry, server_config));
-  wss.RegisterHandlerFactory(kConnectClientUriPath, std::move(client_handler_factory_p));
-  auto device_list_handler_factory_p =
-      std::unique_ptr<cuttlefish::WebSocketHandlerFactory>(
-          new cuttlefish::DeviceListHandlerFactory(device_registry));
-  wss.RegisterHandlerFactory(kListDevicesUriPath, std::move(device_list_handler_factory_p));
+          new cuttlefish::ClientWSHandlerFactory(&device_registry,
+                                                 server_config));
+  wss.RegisterHandlerFactory(kConnectClientUriPath,
+                             std::move(client_handler_factory_p));
+
+  // Polling signaling endpoints
+  wss.RegisterDynHandlerFactory(
+      kInfraConfigPath, [&server_config](struct lws* wsi) {
+        return std::unique_ptr<cuttlefish::DynHandler>(
+            new cuttlefish::ConfigHandler(wsi, server_config));
+      });
+  wss.RegisterDynHandlerFactory(
+      kConnectPath, [&device_registry, &poll_store](struct lws* wsi) {
+        return std::unique_ptr<cuttlefish::DynHandler>(
+            new cuttlefish::ConnectHandler(wsi, &device_registry, &poll_store));
+      });
+  wss.RegisterDynHandlerFactory(
+      kForwardPath, [&poll_store](struct lws* wsi) {
+        return std::unique_ptr<cuttlefish::DynHandler>(
+            new cuttlefish::ForwardHandler(wsi, &poll_store));
+      });
+  wss.RegisterDynHandlerFactory(
+      kPollPath, [&poll_store](struct lws* wsi) {
+        return std::unique_ptr<cuttlefish::DynHandler>(
+            new cuttlefish::PollHandler(wsi, &poll_store));
+      });
 
   wss.Serve();
   return 0;
diff --git a/host/libs/allocd/Android.bp b/host/libs/allocd/Android.bp
index 3c52507..c624817 100644
--- a/host/libs/allocd/Android.bp
+++ b/host/libs/allocd/Android.bp
@@ -41,6 +41,7 @@
         "resource.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
@@ -60,6 +61,7 @@
         "test/client.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libbase",
         "libcuttlefish_allocd_utils",
         "libcuttlefish_fs",
diff --git a/host/libs/audio_connector/server.cpp b/host/libs/audio_connector/server.cpp
index c153df9..4f0570c 100644
--- a/host/libs/audio_connector/server.cpp
+++ b/host/libs/audio_connector/server.cpp
@@ -335,7 +335,9 @@
   };
   std::vector<uint8_t> buffer(sizeof(vio_status) + size, 0);
   std::memcpy(buffer.data(), &vio_status, sizeof(vio_status));
-  std::memcpy(buffer.data() + sizeof(vio_status), data, size);
+  if (data) {
+    std::memcpy(buffer.data() + sizeof(vio_status), data, size);
+  }
   auto status_sent = control_socket_->Send(buffer.data(), buffer.size(), 0);
   if (status_sent < sizeof(vio_status) + size) {
     LOG(ERROR) << "Failed to send entire command status: "
diff --git a/host/libs/config/Android.bp b/host/libs/config/Android.bp
index 3697f4e..b3d0efb 100644
--- a/host/libs/config/Android.bp
+++ b/host/libs/config/Android.bp
@@ -21,10 +21,12 @@
     name: "libcuttlefish_host_config",
     srcs: [
         "bootconfig_args.cpp",
+        "config_flag.cpp",
         "custom_actions.cpp",
         "cuttlefish_config.cpp",
         "cuttlefish_config_instance.cpp",
         "data_image.cpp",
+        "feature.cpp",
         "fetcher_config.cpp",
         "host_tools_version.cpp",
         "kernel_args.cpp",
@@ -32,9 +34,11 @@
         "logging.cpp",
     ],
     shared_libs: [
+        "libext2_blkid",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libbase",
+        "libfruit",
         "libgflags",
         "libjsoncpp",
         "libz",
diff --git a/host/libs/config/adb/Android.bp b/host/libs/config/adb/Android.bp
new file mode 100644
index 0000000..c1b74de
--- /dev/null
+++ b/host/libs/config/adb/Android.bp
@@ -0,0 +1,64 @@
+//
+// Copyright (C) 2017 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_library_static {
+    name: "libcuttlefish_host_config_adb",
+    srcs: [
+        "config.cpp",
+        "data.cpp",
+        "flags.cpp",
+        "launch.cpp",
+        "strings.cpp",
+    ],
+    shared_libs: [
+        "libcuttlefish_fs",
+        "libcuttlefish_utils",
+        "libbase",
+        "libfruit",
+        "libgflags",
+        "libjsoncpp",
+        "libz",
+    ],
+    defaults: ["cuttlefish_host"],
+}
+
+cc_test_host {
+    name: "libcuttlefish_host_config_adb_test",
+    srcs: [
+        "test.cpp",
+    ],
+    static_libs: [
+        "libbase",
+        "libcuttlefish_fs",
+        "libcuttlefish_host_config",
+        "libcuttlefish_host_config_adb",
+        "libcuttlefish_utils",
+    ],
+    shared_libs: [
+        "libext2_blkid",
+        "libgflags",
+        "libfruit",
+        "libjsoncpp",
+        "liblog",
+    ],
+    defaults: ["cuttlefish_host"],
+    test_options: {
+        unit_test: true,
+    },
+}
diff --git a/host/libs/config/adb/adb.h b/host/libs/config/adb/adb.h
new file mode 100644
index 0000000..08b1549
--- /dev/null
+++ b/host/libs/config/adb/adb.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.
+ */
+#pragma once
+
+#include <fruit/fruit.h>
+#include <set>
+
+#include "host/libs/config/command_source.h"
+#include "host/libs/config/config_flag.h"
+#include "host/libs/config/config_fragment.h"
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/feature.h"
+#include "host/libs/config/kernel_log_pipe_provider.h"
+
+namespace cuttlefish {
+
+enum class AdbMode {
+  VsockTunnel,
+  VsockHalfTunnel,
+  NativeVsock,
+  Unknown,
+};
+
+AdbMode StringToAdbMode(const std::string& mode);
+std::string AdbModeToString(AdbMode mode);
+
+class AdbConfig {
+ public:
+  virtual ~AdbConfig() = default;
+  virtual const std::set<AdbMode>& Modes() const = 0;
+  virtual bool SetModes(const std::set<AdbMode>&) = 0;
+  virtual bool SetModes(std::set<AdbMode>&&) = 0;
+
+  virtual bool RunConnector() const = 0;
+  virtual bool SetRunConnector(bool) = 0;
+};
+
+class AdbConfigFragment : public ConfigFragment {};
+class AdbConfigFlag : public FlagFeature {};
+
+fruit::Component<AdbConfig> AdbConfigComponent();
+fruit::Component<fruit::Required<AdbConfig, ConfigFlag>, AdbConfigFlag>
+AdbConfigFlagComponent();
+fruit::Component<fruit::Required<AdbConfig>, AdbConfigFragment>
+AdbConfigFragmentComponent();
+fruit::Component<fruit::Required<KernelLogPipeProvider, const AdbConfig,
+                                 const CuttlefishConfig::InstanceSpecific>>
+LaunchAdbComponent();
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/adb/config.cpp b/host/libs/config/adb/config.cpp
new file mode 100644
index 0000000..6fc6378
--- /dev/null
+++ b/host/libs/config/adb/config.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+#include "host/libs/config/adb/adb.h"
+
+#include <android-base/logging.h>
+#include <fruit/fruit.h>
+#include <json/json.h>
+
+#include "host/libs/config/config_fragment.h"
+
+namespace cuttlefish {
+namespace {
+
+class AdbConfigFragmentImpl : public AdbConfigFragment {
+ public:
+  INJECT(AdbConfigFragmentImpl(AdbConfig& config)) : config_(config) {}
+
+  std::string Name() const override { return "AdbConfigFragmentImpl"; }
+
+  Json::Value Serialize() const override {
+    Json::Value json;
+    json[kMode] = Json::Value(Json::arrayValue);
+    for (const auto& mode : config_.Modes()) {
+      json[kMode].append(AdbModeToString(mode));
+    }
+    json[kConnectorEnabled] = config_.RunConnector();
+    return json;
+  }
+  bool Deserialize(const Json::Value& json) override {
+    if (!json.isMember(kMode) || json[kMode].type() != Json::arrayValue) {
+      LOG(ERROR) << "Invalid value for " << kMode;
+      return false;
+    }
+    std::set<AdbMode> modes;
+    for (auto& mode : json[kMode]) {
+      if (mode.type() != Json::stringValue) {
+        LOG(ERROR) << "Invalid mode type" << mode;
+        return false;
+      }
+      modes.insert(StringToAdbMode(mode.asString()));
+    }
+    if (!config_.SetModes(std::move(modes))) {
+      LOG(ERROR) << "Failed to set adb modes";
+      return false;
+    }
+
+    if (!json.isMember(kConnectorEnabled) ||
+        json[kConnectorEnabled].type() != Json::booleanValue) {
+      LOG(ERROR) << "Invalid value for " << kConnectorEnabled;
+      return false;
+    }
+    if (!config_.SetRunConnector(json[kConnectorEnabled].asBool())) {
+      LOG(ERROR) << "Failed to set whether to run the adb connector";
+    }
+    return true;
+  }
+
+ private:
+  static constexpr char kMode[] = "mode";
+  static constexpr char kConnectorEnabled[] = "connector_enabled";
+  AdbConfig& config_;
+};
+
+}  // namespace
+
+fruit::Component<fruit::Required<AdbConfig>, AdbConfigFragment>
+AdbConfigFragmentComponent() {
+  return fruit::createComponent()
+      .bind<AdbConfigFragment, AdbConfigFragmentImpl>()
+      .addMultibinding<ConfigFragment, AdbConfigFragment>();
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/adb/data.cpp b/host/libs/config/adb/data.cpp
new file mode 100644
index 0000000..81db3e9
--- /dev/null
+++ b/host/libs/config/adb/data.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.
+ */
+#include "host/libs/config/adb/adb.h"
+
+#include <fruit/fruit.h>
+#include <set>
+
+namespace cuttlefish {
+namespace {}
+
+class AdbConfigImpl : public AdbConfig {
+ public:
+  INJECT(AdbConfigImpl()) {}
+
+  const std::set<AdbMode>& Modes() const override { return modes_; }
+  bool SetModes(const std::set<AdbMode>& modes) override {
+    modes_ = modes;
+    return true;
+  }
+  bool SetModes(std::set<AdbMode>&& modes) override {
+    modes_ = std::move(modes);
+    return true;
+  }
+
+  bool RunConnector() const override { return run_connector_; }
+  bool SetRunConnector(bool run) override {
+    run_connector_ = run;
+    return true;
+  }
+
+ private:
+  std::set<AdbMode> modes_;
+  bool run_connector_;
+};
+
+fruit::Component<AdbConfig> AdbConfigComponent() {
+  return fruit::createComponent().bind<AdbConfig, AdbConfigImpl>();
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/adb/flags.cpp b/host/libs/config/adb/flags.cpp
new file mode 100644
index 0000000..56451f7
--- /dev/null
+++ b/host/libs/config/adb/flags.cpp
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.
+ */
+#include "host/libs/config/adb/adb.h"
+
+#include <android-base/strings.h>
+
+#include "common/libs/utils/flag_parser.h"
+#include "host/libs/config/config_flag.h"
+#include "host/libs/config/feature.h"
+
+namespace cuttlefish {
+namespace {
+
+class AdbConfigFlagImpl : public AdbConfigFlag {
+ public:
+  INJECT(AdbConfigFlagImpl(AdbConfig& config, ConfigFlag& config_flag))
+      : config_(config), config_flag_(config_flag) {
+    mode_flag_ = GflagsCompatFlag("adb_mode").Help(mode_help);
+    mode_flag_.Getter([this]() {
+      std::stringstream modes;
+      for (const auto& mode : config_.Modes()) {
+        modes << "," << AdbModeToString(mode);
+      }
+      return modes.str().substr(1);  // First comma
+    });
+    mode_flag_.Setter([this](const FlagMatch& match) {
+      // TODO(schuffelen): Error on unknown types?
+      std::set<AdbMode> modes;
+      for (auto& mode : android::base::Split(match.value, ",")) {
+        modes.insert(StringToAdbMode(mode));
+      }
+      return config_.SetModes(modes);
+    });
+  }
+
+  std::string Name() const override { return "AdbConfigFlagImpl"; }
+
+  std::unordered_set<FlagFeature*> Dependencies() const override {
+    return {static_cast<FlagFeature*>(&config_flag_)};
+  }
+
+  bool Process(std::vector<std::string>& args) override {
+    // Defaults
+    config_.SetModes({AdbMode::VsockHalfTunnel});
+    bool run_adb_connector = !IsRunningInContainer();
+    Flag run_flag = GflagsCompatFlag("run_adb_connector", run_adb_connector);
+    if (!ParseFlags({run_flag, mode_flag_}, args)) {
+      LOG(ERROR) << "Failed to parse adb config flags";
+      return false;
+    }
+    config_.SetRunConnector(run_adb_connector);
+
+    auto adb_modes_check = config_.Modes();
+    adb_modes_check.erase(AdbMode::Unknown);
+    if (adb_modes_check.size() < 1) {
+      LOG(INFO) << "ADB not enabled";
+    }
+
+    return true;
+  }
+  bool WriteGflagsCompatHelpXml(std::ostream& out) const override {
+    bool run = config_.RunConnector();
+    Flag run_flag = GflagsCompatFlag("run_adb_connector", run).Help(run_help);
+    return WriteGflagsCompatXml({run_flag, mode_flag_}, out);
+  }
+
+ private:
+  static constexpr char run_help[] =
+      "Maintain adb connection by sending 'adb connect' commands to the "
+      "server. Only relevant with -adb_mode=tunnel or vsock_tunnel.";
+  static constexpr char mode_help[] =
+      "Mode for ADB connection."
+      "'vsock_tunnel' for a TCP connection tunneled through vsock, "
+      "'native_vsock' for a  direct connection to the guest ADB over "
+      "vsock, 'vsock_half_tunnel' for a TCP connection forwarded to "
+      "the guest ADB server, or a comma separated list of types as in "
+      "'native_vsock,vsock_half_tunnel'";
+
+  AdbConfig& config_;
+  ConfigFlag& config_flag_;
+  Flag mode_flag_;
+};
+
+}  // namespace
+
+fruit::Component<fruit::Required<AdbConfig, ConfigFlag>, AdbConfigFlag>
+AdbConfigFlagComponent() {
+  return fruit::createComponent()
+      .bind<AdbConfigFlag, AdbConfigFlagImpl>()
+      .addMultibinding<FlagFeature, AdbConfigFlag>();
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/adb/launch.cpp b/host/libs/config/adb/launch.cpp
new file mode 100644
index 0000000..35c904a
--- /dev/null
+++ b/host/libs/config/adb/launch.cpp
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.
+ */
+#include "host/libs/config/adb/adb.h"
+
+#include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/known_paths.h"
+
+namespace cuttlefish {
+namespace {
+
+class AdbHelper {
+ public:
+  INJECT(AdbHelper(const CuttlefishConfig::InstanceSpecific& instance,
+                   const AdbConfig& config))
+      : instance_(instance), config_(config) {}
+
+  bool ModeEnabled(const AdbMode& mode) const {
+    return config_.Modes().count(mode) > 0;
+  }
+
+  std::string ConnectorTcpArg() const {
+    return "0.0.0.0:" + std::to_string(instance_.adb_host_port());
+  }
+
+  std::string ConnectorVsockArg() const {
+    return "vsock:" + std::to_string(instance_.vsock_guest_cid()) + ":5555";
+  }
+
+  bool VsockTunnelEnabled() const {
+    return instance_.vsock_guest_cid() > 2 && ModeEnabled(AdbMode::VsockTunnel);
+  }
+
+  bool VsockHalfTunnelEnabled() const {
+    return instance_.vsock_guest_cid() > 2 &&
+           ModeEnabled(AdbMode::VsockHalfTunnel);
+  }
+
+  bool TcpConnectorEnabled() const {
+    bool vsock_tunnel = VsockTunnelEnabled();
+    bool vsock_half_tunnel = VsockHalfTunnelEnabled();
+    return config_.RunConnector() && (vsock_tunnel || vsock_half_tunnel);
+  }
+
+  bool VsockConnectorEnabled() const {
+    return config_.RunConnector() && ModeEnabled(AdbMode::NativeVsock);
+  }
+
+ private:
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  const AdbConfig& config_;
+};
+
+class AdbConnector : public CommandSource {
+ public:
+  INJECT(AdbConnector(const AdbHelper& helper)) : helper_(helper) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    Command console_forwarder_cmd(ConsoleForwarderBinary());
+    Command adb_connector(AdbConnectorBinary());
+    std::set<std::string> addresses;
+
+    if (helper_.TcpConnectorEnabled()) {
+      addresses.insert(helper_.ConnectorTcpArg());
+    }
+    if (helper_.VsockConnectorEnabled()) {
+      addresses.insert(helper_.ConnectorVsockArg());
+    }
+
+    if (addresses.size() == 0) {
+      return {};
+    }
+    std::string address_arg = "--addresses=";
+    for (auto& arg : addresses) {
+      address_arg += arg + ",";
+    }
+    address_arg.pop_back();
+    adb_connector.AddParameter(address_arg);
+    std::vector<Command> commands;
+    commands.emplace_back(std::move(adb_connector));
+    return std::move(commands);
+  }
+
+  // Feature
+  std::string Name() const override { return "AdbConnector"; }
+  bool Enabled() const override {
+    return helper_.TcpConnectorEnabled() || helper_.VsockConnectorEnabled();
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override { return true; }
+
+  const AdbHelper& helper_;
+};
+
+class SocketVsockProxy : public CommandSource {
+ public:
+  INJECT(SocketVsockProxy(const AdbHelper& helper,
+                          const CuttlefishConfig::InstanceSpecific& instance,
+                          KernelLogPipeProvider& log_pipe_provider))
+      : helper_(helper),
+        instance_(instance),
+        log_pipe_provider_(log_pipe_provider) {}
+
+  // CommandSource
+  std::vector<Command> Commands() override {
+    std::vector<Command> commands;
+    if (helper_.VsockTunnelEnabled()) {
+      Command adb_tunnel(SocketVsockProxyBinary());
+      adb_tunnel.AddParameter("-adbd_events_fd=", kernel_log_pipe_);
+      /**
+       * This socket_vsock_proxy (a.k.a. sv proxy) runs on the host. It assumes
+       * that another sv proxy runs inside the guest. see:
+       * shared/config/init.vendor.rc The sv proxy in the guest exposes
+       * vsock:cid:6520 across the cuttlefish instances in multi-tenancy. cid is
+       * different per instance.
+       *
+       * This host sv proxy should cooperate with the guest sv proxy. Thus, one
+       * end of the tunnel is vsock:cid:6520 regardless of instance number.
+       * Another end faces the host adb daemon via tcp. Thus, the server type is
+       * tcp here. The tcp port differs from instance to instance, and is
+       * instance.adb_host_port()
+       *
+       */
+      adb_tunnel.AddParameter("--server=tcp");
+      adb_tunnel.AddParameter("--vsock_port=6520");
+      adb_tunnel.AddParameter("--server_fd=", tcp_server_);
+      adb_tunnel.AddParameter("--vsock_cid=", instance_.vsock_guest_cid());
+      commands.emplace_back(std::move(adb_tunnel));
+    }
+    if (helper_.VsockHalfTunnelEnabled()) {
+      Command adb_tunnel(SocketVsockProxyBinary());
+      adb_tunnel.AddParameter("-adbd_events_fd=", kernel_log_pipe_);
+      /*
+       * This socket_vsock_proxy (a.k.a. sv proxy) runs on the host, and
+       * cooperates with the adbd inside the guest. See this file:
+       *  shared/device.mk, especially the line says "persist.adb.tcp.port="
+       *
+       * The guest adbd is listening on vsock:cid:5555 across cuttlefish
+       * instances. Sv proxy faces the host adb daemon via tcp. The server type
+       * should be therefore tcp, and the port should differ from instance to
+       * instance and be equal to instance.adb_host_port()
+       */
+      adb_tunnel.AddParameter("--server=tcp");
+      adb_tunnel.AddParameter("--vsock_port=", 5555);
+      adb_tunnel.AddParameter("--server_fd=", tcp_server_);
+      adb_tunnel.AddParameter("--vsock_cid=", instance_.vsock_guest_cid());
+      commands.emplace_back(std::move(adb_tunnel));
+    }
+    return commands;
+  }
+
+  // Feature
+  std::string Name() const override { return "SocketVsockProxy"; }
+  bool Enabled() const override {
+    return helper_.VsockTunnelEnabled() || helper_.VsockHalfTunnelEnabled();
+  }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override {
+    return {static_cast<Feature*>(&log_pipe_provider_)};
+  }
+  bool Setup() override {
+    tcp_server_ =
+        SharedFD::SocketLocalServer(instance_.adb_host_port(), SOCK_STREAM);
+    if (!tcp_server_->IsOpen()) {
+      LOG(ERROR) << "Unable to create socket_vsock_proxy server socket: "
+                 << tcp_server_->StrError();
+      return false;
+    }
+    kernel_log_pipe_ = log_pipe_provider_.KernelLogPipe();
+    return true;
+  }
+
+  const AdbHelper& helper_;
+  const CuttlefishConfig::InstanceSpecific& instance_;
+  KernelLogPipeProvider& log_pipe_provider_;
+  SharedFD kernel_log_pipe_;
+  SharedFD tcp_server_;
+};
+
+}  // namespace
+
+fruit::Component<fruit::Required<KernelLogPipeProvider, const AdbConfig,
+                                 const CuttlefishConfig::InstanceSpecific>>
+LaunchAdbComponent() {
+  return fruit::createComponent()
+      .addMultibinding<CommandSource, AdbConnector>()
+      .addMultibinding<CommandSource, SocketVsockProxy>()
+      .addMultibinding<Feature, AdbConnector>()
+      .addMultibinding<Feature, SocketVsockProxy>();
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/adb/strings.cpp b/host/libs/config/adb/strings.cpp
new file mode 100644
index 0000000..4de9e23
--- /dev/null
+++ b/host/libs/config/adb/strings.cpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+#include "host/libs/config/adb/adb.h"
+
+#include <algorithm>
+#include <string>
+
+namespace cuttlefish {
+
+AdbMode StringToAdbMode(const std::string& mode_cased) {
+  std::string mode = mode_cased;
+  std::transform(mode.begin(), mode.end(), mode.begin(), ::tolower);
+  if (mode == "vsock_tunnel") {
+    return AdbMode::VsockTunnel;
+  } else if (mode == "vsock_half_tunnel") {
+    return AdbMode::VsockHalfTunnel;
+  } else if (mode == "native_vsock") {
+    return AdbMode::NativeVsock;
+  } else {
+    return AdbMode::Unknown;
+  }
+}
+
+std::string AdbModeToString(AdbMode mode) {
+  switch (mode) {
+    case AdbMode::VsockTunnel:
+      return "vsock_tunnel";
+    case AdbMode::VsockHalfTunnel:
+      return "vsock_half_tunnel";
+    case AdbMode::NativeVsock:
+      return "native_vsock";
+    case AdbMode::Unknown:  // fall through
+    default:
+      return "unknown";
+  }
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/adb/test.cpp b/host/libs/config/adb/test.cpp
new file mode 100644
index 0000000..226ac83
--- /dev/null
+++ b/host/libs/config/adb/test.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <fruit/fruit.h>
+#include <gtest/gtest.h>
+#include <host/libs/config/adb/adb.h>
+
+#include <string>
+
+#include "host/libs/config/feature.h"
+
+namespace cuttlefish {
+
+struct TestData {
+  INJECT(TestData(AdbConfig& config, AdbConfigFragment& fragment))
+      : config(config), fragment(fragment) {}
+
+  AdbConfig& config;
+  AdbConfigFragment& fragment;
+};
+
+fruit::Component<TestData> TestComponent() {
+  return fruit::createComponent()
+      .install(AdbConfigComponent)
+      .install(AdbConfigFlagComponent)
+      .install(AdbConfigFragmentComponent)
+      .install(ConfigFlagPlaceholder);
+}
+
+TEST(AdbConfigTest, SetFromFlags) {
+  fruit::Injector<TestData> injector(TestComponent);
+  TestData& data = injector.get<TestData&>();
+  std::vector<std::string> args = {
+      "--adb_mode=vsock_tunnel,vsock_half_tunnel,native_vsock,unknown",
+      "--run_adb_connector=false",
+  };
+  auto flags = injector.getMultibindings<FlagFeature>();
+  ASSERT_TRUE(FlagFeature::ProcessFlags(flags, args));
+  ASSERT_TRUE(args.empty());
+
+  std::set<AdbMode> modes = {AdbMode::VsockTunnel, AdbMode::VsockHalfTunnel,
+                             AdbMode::NativeVsock, AdbMode::Unknown};
+  ASSERT_EQ(data.config.Modes(), modes);
+  ASSERT_FALSE(data.config.RunConnector());
+}
+
+TEST(AdbConfigTest, SerializeDeserialize) {
+  fruit::Injector<TestData> injector1(TestComponent);
+  TestData& data1 = injector1.get<TestData&>();
+  ASSERT_TRUE(
+      data1.config.SetModes({AdbMode::VsockTunnel, AdbMode::VsockHalfTunnel,
+                             AdbMode::NativeVsock, AdbMode::Unknown}));
+  ASSERT_TRUE(data1.config.SetRunConnector(false));
+
+  fruit::Injector<TestData> injector2(TestComponent);
+  TestData& data2 = injector2.get<TestData&>();
+  ASSERT_TRUE(data2.fragment.Deserialize(data1.fragment.Serialize()));
+  ASSERT_EQ(data1.config.Modes(), data2.config.Modes());
+  ASSERT_EQ(data1.config.RunConnector(), data2.config.RunConnector());
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/bootconfig_args.cpp b/host/libs/config/bootconfig_args.cpp
index 1f926eb..0c1a026 100644
--- a/host/libs/config/bootconfig_args.cpp
+++ b/host/libs/config/bootconfig_args.cpp
@@ -24,6 +24,7 @@
 #include "common/libs/utils/environment.h"
 #include "common/libs/utils/files.h"
 #include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/known_paths.h"
 #include "host/libs/vm_manager/crosvm_manager.h"
 #include "host/libs/vm_manager/qemu_manager.h"
 #include "host/libs/vm_manager/vm_manager.h"
@@ -47,15 +48,6 @@
   return os.str();
 }
 
-std::string mac_to_str(const std::array<unsigned char, 6>& mac) {
-  std::ostringstream stream;
-  stream << std::hex << (int)mac[0];
-  for (int i = 1; i < 6; i++) {
-    stream << ":" << std::hex << (int)mac[i];
-  }
-  return stream.str();
-}
-
 // TODO(schuffelen): Move more of this into host/libs/vm_manager, as a
 // substitute for the vm_manager comparisons.
 std::vector<std::string> VmManagerBootconfig(const CuttlefishConfig& config) {
@@ -86,7 +78,8 @@
   auto vmm = vm_manager::GetVmManager(config.vm_manager(), config.target_arch());
   bootconfig_args.push_back(
       vmm->ConfigureBootDevices(instance.virtual_disk_paths().size()));
-  AppendVector(&bootconfig_args, vmm->ConfigureGpuMode(config.gpu_mode()));
+  AppendVector(&bootconfig_args, vmm->ConfigureGraphics(config.gpu_mode(),
+      config.hwcomposer()));
 
   bootconfig_args.push_back(
       concat("androidboot.serialno=", instance.serial_number()));
@@ -108,6 +101,11 @@
                                      instance.tombstone_receiver_port()));
   }
 
+  if (instance.confui_host_vsock_port()) {
+    bootconfig_args.push_back(concat("androidboot.vsock_confirmationui_port=",
+                                     instance.confui_host_vsock_port()));
+  }
+
   if (instance.config_server_port()) {
     bootconfig_args.push_back(
         concat("androidboot.cuttlefish_config_server_port=",
@@ -126,7 +124,7 @@
 
   if (config.enable_vehicle_hal_grpc_server() &&
       instance.vehicle_hal_server_port() &&
-      FileExists(config.vehicle_hal_grpc_server_binary())) {
+      FileExists(VehicleHalGrpcServerBinary())) {
     constexpr int vehicle_hal_server_cid = 2;
     bootconfig_args.push_back(concat(
         "androidboot.vendor.vehiclehal.server.cid=", vehicle_hal_server_cid));
@@ -144,11 +142,6 @@
                instance.audiocontrol_server_port()));
   }
 
-  if (instance.frames_server_port()) {
-    bootconfig_args.push_back(concat("androidboot.vsock_frames_port=",
-                                     instance.frames_server_port()));
-  }
-
   if (instance.camera_server_port()) {
     bootconfig_args.push_back(concat("androidboot.vsock_camera_port=",
                                      instance.camera_server_port()));
@@ -162,11 +155,11 @@
                                      instance.modem_simulator_ports()));
   }
 
-  // TODO(b/158131610): Set this in crosvm instead
-  bootconfig_args.push_back(concat("androidboot.wifi_mac_address=",
-                                   mac_to_str(instance.wifi_mac_address())));
+  bootconfig_args.push_back(concat("androidboot.fstab_suffix=",
+                                   config.userdata_format()));
 
-  bootconfig_args.push_back("androidboot.verifiedbootstate=orange");
+  bootconfig_args.push_back(
+      concat("androidboot.wifi_mac_prefix=", instance.wifi_mac_prefix()));
 
   // Non-native architecture implies a significantly slower execution speed, so
   // set a large timeout multiplier.
@@ -174,7 +167,7 @@
     bootconfig_args.push_back("androidboot.hw_timeout_multiplier=50");
   }
 
-  // TODO(b/173815685): Create an extra_bootconfig flag and add it to bootconfig
+  AppendVector(&bootconfig_args, config.extra_bootconfig_args());
 
   return bootconfig_args;
 }
diff --git a/guest/hals/audio/Android.bp b/host/libs/config/command_source.h
similarity index 62%
rename from guest/hals/audio/Android.bp
rename to host/libs/config/command_source.h
index c6faae7..845bfa1 100644
--- a/guest/hals/audio/Android.bp
+++ b/host/libs/config/command_source.h
@@ -1,3 +1,4 @@
+//
 // Copyright (C) 2019 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,16 +13,20 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
+#pragma once
 
-cc_library_shared {
-    name: "audio.primary.cutf",
-    relative_install_path: "hw",
-    defaults: ["cuttlefish_guest_only"],
-    vendor: true,
-    srcs: ["audio_hw.c"],
-    cflags: ["-Wno-unused-parameter"],
-    shared_libs: ["libcutils", "libhardware", "liblog", "libtinyalsa"],
-}
+#include <fruit/fruit.h>
+#include <vector>
+
+#include "common/libs/utils/subprocess.h"
+#include "host/libs/config/feature.h"
+
+namespace cuttlefish {
+
+class CommandSource : public virtual Feature {
+ public:
+  virtual ~CommandSource() = default;
+  virtual std::vector<Command> Commands() = 0;
+};
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/config_flag.cpp b/host/libs/config/config_flag.cpp
new file mode 100644
index 0000000..d7b5f00
--- /dev/null
+++ b/host/libs/config/config_flag.cpp
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/libs/config/config_flag.h"
+
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+#include <gflags/gflags.h>
+#include <json/json.h>
+#include <fstream>
+#include <set>
+#include <string>
+
+#include "common/libs/utils/files.h"
+#include "common/libs/utils/flag_parser.h"
+#include "host/libs/config/cuttlefish_config.h"
+
+// To support other files that use this from gflags.
+DEFINE_string(system_image_dir, "", "");
+
+using gflags::FlagSettingMode::SET_FLAGS_DEFAULT;
+
+namespace cuttlefish {
+
+namespace {
+
+class SystemImageDirFlagImpl : public SystemImageDirFlag {
+ public:
+  INJECT(SystemImageDirFlagImpl()) {
+    auto help = "Location of the system partition images.";
+    flag_ = GflagsCompatFlag("system_image_dir", path_).Help(help);
+  }
+  const std::string& Path() override { return path_; }
+
+  std::string Name() const override { return "SystemImageDirFlagImpl"; }
+  std::unordered_set<FlagFeature*> Dependencies() const override { return {}; }
+  bool Process(std::vector<std::string>& args) override {
+    path_ = DefaultGuestImagePath("");
+    if (!flag_.Parse(args)) {
+      return false;
+    }
+    // To support other files that use this from gflags.
+    FLAGS_system_image_dir = path_;
+    gflags::SetCommandLineOptionWithMode("system_image_dir", path_.c_str(),
+                                         SET_FLAGS_DEFAULT);
+    return true;
+  }
+  bool WriteGflagsCompatHelpXml(std::ostream&) const override {
+    // TODO(schuffelen): Write something here when this is removed from gflags
+    return true;
+  }
+
+ private:
+  std::string path_;
+  Flag flag_;
+};
+
+class ConfigReader : public FlagFeature {
+ public:
+  INJECT(ConfigReader()) = default;
+
+  bool HasConfig(const std::string& name) const {
+    return allowed_config_presets_.count(name) > 0;
+  }
+  const std::set<std::string>& AvailableConfigs() const {
+    return allowed_config_presets_;
+  }
+  std::optional<Json::Value> ReadConfig(const std::string& name) const {
+    auto path =
+        DefaultHostArtifactsPath("etc/cvd_config/cvd_config_" + name + ".json");
+    Json::Value config;
+    Json::CharReaderBuilder builder;
+    std::ifstream ifs(path);
+    std::string errorMessage;
+    if (!Json::parseFromStream(builder, ifs, &config, &errorMessage)) {
+      LOG(ERROR) << "Could not read config file " << path << ": "
+                 << errorMessage;
+      return {};
+    }
+    return config;
+  }
+
+  // FlagFeature
+  std::string Name() const override { return "ConfigReader"; }
+  std::unordered_set<FlagFeature*> Dependencies() const override { return {}; }
+  bool Process(std::vector<std::string>&) override {
+    for (const std::string& file :
+         DirectoryContents(DefaultHostArtifactsPath("etc/cvd_config"))) {
+      std::string_view local_file(file);
+      if (android::base::ConsumePrefix(&local_file, "cvd_config_") &&
+          android::base::ConsumeSuffix(&local_file, ".json")) {
+        allowed_config_presets_.emplace(local_file);
+      }
+    }
+    return true;
+  }
+  bool WriteGflagsCompatHelpXml(std::ostream&) const override { return true; }
+
+ private:
+  std::set<std::string> allowed_config_presets_;
+};
+
+class ConfigFlagImpl : public ConfigFlag {
+ public:
+  INJECT(ConfigFlagImpl(ConfigReader& cr, SystemImageDirFlag& s))
+      : config_reader_(cr), system_image_dir_flag_(s) {
+    is_default_ = true;
+    config_ = "phone";  // default value
+    auto help =
+        "Config preset name. Will automatically set flag fields using the "
+        "values from this file of presets. See "
+        "device/google/cuttlefish/shared/config/config_*.json for possible "
+        "values.";
+    auto getter = [this]() { return config_; };
+    auto setter = [this](const FlagMatch& m) { return ChooseConfig(m.value); };
+    flag_ = GflagsCompatFlag("config").Help(help).Getter(getter).Setter(setter);
+  }
+
+  std::string Name() const override { return "ConfigFlagImpl"; }
+  std::unordered_set<FlagFeature*> Dependencies() const override {
+    return {
+        static_cast<FlagFeature*>(&config_reader_),
+        static_cast<FlagFeature*>(&system_image_dir_flag_),
+    };
+  }
+  bool Process(std::vector<std::string>& args) override {
+    if (!flag_.Parse(args)) {
+      LOG(ERROR) << "Failed to parse `--config` flag";
+      return false;
+    }
+
+    if (auto info_cfg = FindAndroidInfoConfig(); is_default_ && info_cfg) {
+      config_ = *info_cfg;
+    }
+    LOG(INFO) << "Launching CVD using --config='" << config_ << "'.";
+    auto config_values = config_reader_.ReadConfig(config_);
+    if (!config_values) {
+      LOG(ERROR) << "Failed to read config for " << config_;
+      return false;
+    }
+    for (const std::string& flag : config_values->getMemberNames()) {
+      std::string value;
+      if (flag == "custom_actions") {
+        Json::StreamWriterBuilder factory;
+        value = Json::writeString(factory, (*config_values)[flag]);
+      } else {
+        value = (*config_values)[flag].asString();
+      }
+      args.insert(args.begin(), "--" + flag + "=" + value);
+      // To avoid the flag forwarder from thinking this song is different from a
+      // default. Should fail silently if the flag doesn't exist.
+      gflags::SetCommandLineOptionWithMode(flag.c_str(), value.c_str(),
+                                           SET_FLAGS_DEFAULT);
+    }
+    return true;
+  }
+  bool WriteGflagsCompatHelpXml(std::ostream& out) const override {
+    return flag_.WriteGflagsCompatXml(out);
+  }
+
+ private:
+  bool ChooseConfig(const std::string& name) {
+    if (!config_reader_.HasConfig(name)) {
+      LOG(ERROR) << "Invalid --config option '" << name << "'. Valid options: "
+                 << android::base::Join(config_reader_.AvailableConfigs(), ",");
+      return false;
+    }
+    config_ = name;
+    is_default_ = false;
+    return true;
+  }
+  std::optional<std::string> FindAndroidInfoConfig() const {
+    auto info_path = system_image_dir_flag_.Path() + "/android-info.txt";
+    if (!FileExists(info_path)) {
+      return {};
+    }
+    std::ifstream ifs{info_path};
+    if (!ifs.is_open()) {
+      return {};
+    }
+    std::string android_info;
+    ifs >> android_info;
+    std::string_view local_android_info(android_info);
+    if (!android::base::ConsumePrefix(&local_android_info, "config=")) {
+      return {};
+    }
+    if (!config_reader_.HasConfig(std::string{local_android_info})) {
+      LOG(WARNING) << info_path << " contains invalid config preset: '"
+                   << local_android_info << "'.";
+      return {};
+    }
+    return std::string{local_android_info};
+  }
+
+  ConfigReader& config_reader_;
+  SystemImageDirFlag& system_image_dir_flag_;
+  std::string config_;
+  bool is_default_;
+  Flag flag_;
+};
+
+class ConfigFlagPlaceholderImpl : public ConfigFlag {
+ public:
+  INJECT(ConfigFlagPlaceholderImpl()) {}
+
+  std::string Name() const override { return "ConfigFlagPlaceholderImpl"; }
+  std::unordered_set<FlagFeature*> Dependencies() const override { return {}; }
+  bool Process(std::vector<std::string>&) override { return true; }
+  bool WriteGflagsCompatHelpXml(std::ostream&) const override { return true; }
+};
+
+}  // namespace
+
+fruit::Component<SystemImageDirFlag, ConfigFlag> ConfigFlagComponent() {
+  return fruit::createComponent()
+      .addMultibinding<FlagFeature, ConfigReader>()
+      .bind<ConfigFlag, ConfigFlagImpl>()
+      .addMultibinding<FlagFeature, ConfigFlag>()
+      .bind<SystemImageDirFlag, SystemImageDirFlagImpl>()
+      .addMultibinding<FlagFeature, SystemImageDirFlag>();
+}
+
+fruit::Component<ConfigFlag> ConfigFlagPlaceholder() {
+  return fruit::createComponent()
+      .addMultibinding<FlagFeature, ConfigFlag>()
+      .bind<ConfigFlag, ConfigFlagPlaceholderImpl>();
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/config_flag.h b/host/libs/config/config_flag.h
new file mode 100644
index 0000000..04258eb
--- /dev/null
+++ b/host/libs/config/config_flag.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+#pragma once
+
+#include <fruit/fruit.h>
+#include <string>
+
+#include "host/libs/config/feature.h"
+
+namespace cuttlefish {
+
+// TODO(schuffelen): Move this to a more central location?
+class SystemImageDirFlag : public FlagFeature {
+ public:
+  virtual const std::string& Path() = 0;
+};
+
+class ConfigFlag : public FlagFeature {};
+
+fruit::Component<SystemImageDirFlag, ConfigFlag> ConfigFlagComponent();
+
+fruit::Component<ConfigFlag> ConfigFlagPlaceholder();
+
+}  // namespace cuttlefish
diff --git a/common/libs/utils/size_utils.cpp b/host/libs/config/config_fragment.h
similarity index 64%
copy from common/libs/utils/size_utils.cpp
copy to host/libs/config/config_fragment.h
index 9f25445..cc1bfc1 100644
--- a/common/libs/utils/size_utils.cpp
+++ b/host/libs/config/config_fragment.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -13,16 +13,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#pragma once
 
-#include "common/libs/utils/size_utils.h"
-
-#include <unistd.h>
+#include <json/json.h>
+#include <memory>
+#include <string>
 
 namespace cuttlefish {
 
-uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {
-  uint64_t align = 1ULL << align_log;
-  return ((val + (align - 1)) / align) * align;
-}
+class ConfigFragment {
+ public:
+  virtual ~ConfigFragment();
+
+  virtual std::string Name() const = 0;
+  virtual Json::Value Serialize() const = 0;
+  virtual bool Deserialize(const Json::Value&) = 0;
+};
 
 }  // namespace cuttlefish
diff --git a/host/libs/config/custom_actions.cpp b/host/libs/config/custom_actions.cpp
index 1cc2e06..af5524e 100644
--- a/host/libs/config/custom_actions.cpp
+++ b/host/libs/config/custom_actions.cpp
@@ -16,12 +16,16 @@
 #include "host/libs/config/custom_actions.h"
 
 #include <android-base/logging.h>
+#include <android-base/strings.h>
 #include <json/json.h>
 
+#include <fstream>
 #include <optional>
 #include <string>
 #include <vector>
 
+#include "common/libs/utils/files.h"
+#include "common/libs/utils/flag_parser.h"
 #include "host/libs/config/cuttlefish_config.h"
 
 namespace cuttlefish {
@@ -38,42 +42,41 @@
 const char* kCustomActionButtonTitle = "title";
 const char* kCustomActionButtonIconName = "icon_name";
 
-} //namespace
-
-
-CustomActionConfig::CustomActionConfig(const Json::Value& dictionary) {
-  if (dictionary.isMember(kCustomActionShellCommand) +
-          dictionary.isMember(kCustomActionServer) +
-          dictionary.isMember(kCustomActionDeviceStates) !=
-      1) {
-    LOG(FATAL) << "Custom action must contain exactly one of shell_command, "
+std::optional<CustomActionConfig> CustomActionConfigFromJson(
+    const Json::Value& dictionary) {
+  bool has_shell_command = dictionary.isMember(kCustomActionShellCommand);
+  bool has_server = dictionary.isMember(kCustomActionServer);
+  bool has_device_states = dictionary.isMember(kCustomActionDeviceStates);
+  if (!!has_shell_command + !!has_server + !!has_device_states != 1) {
+    LOG(ERROR) << "Custom action must contain exactly one of shell_command, "
                << "server, or device_states";
-    return;
+    return {};
   }
-  if (dictionary.isMember(kCustomActionShellCommand)) {
+  CustomActionConfig config;
+  if (has_shell_command) {
     // Shell command with one button.
     Json::Value button_entry = dictionary[kCustomActionButton];
-    buttons = {{button_entry[kCustomActionButtonCommand].asString(),
-                button_entry[kCustomActionButtonTitle].asString(),
-                button_entry[kCustomActionButtonIconName].asString()}};
-    shell_command = dictionary[kCustomActionShellCommand].asString();
-  } else if (dictionary.isMember(kCustomActionServer)) {
+    config.buttons = {{button_entry[kCustomActionButtonCommand].asString(),
+                       button_entry[kCustomActionButtonTitle].asString(),
+                       button_entry[kCustomActionButtonIconName].asString()}};
+    config.shell_command = dictionary[kCustomActionShellCommand].asString();
+  } else if (has_server) {
     // Action server with possibly multiple buttons.
     for (const Json::Value& button_entry : dictionary[kCustomActionButtons]) {
       ControlPanelButton button = {
           button_entry[kCustomActionButtonCommand].asString(),
           button_entry[kCustomActionButtonTitle].asString(),
           button_entry[kCustomActionButtonIconName].asString()};
-      buttons.push_back(button);
+      config.buttons.push_back(button);
     }
-    server = dictionary[kCustomActionServer].asString();
-  } else if (dictionary.isMember(kCustomActionDeviceStates)) {
+    config.server = dictionary[kCustomActionServer].asString();
+  } else if (has_device_states) {
     // Device state(s) with one button.
     // Each button press cycles to the next state, then repeats to the first.
     Json::Value button_entry = dictionary[kCustomActionButton];
-    buttons = {{button_entry[kCustomActionButtonCommand].asString(),
-                button_entry[kCustomActionButtonTitle].asString(),
-                button_entry[kCustomActionButtonIconName].asString()}};
+    config.buttons = {{button_entry[kCustomActionButtonCommand].asString(),
+                       button_entry[kCustomActionButtonTitle].asString(),
+                       button_entry[kCustomActionButtonIconName].asString()}};
     for (const Json::Value& device_state_entry :
          dictionary[kCustomActionDeviceStates]) {
       DeviceState state;
@@ -86,40 +89,42 @@
         state.hinge_angle_value =
             device_state_entry[kCustomActionDeviceStateHingeAngleValue].asInt();
       }
-      device_states.push_back(state);
+      config.device_states.push_back(state);
     }
   } else {
-    LOG(FATAL) << "Unknown custom action type.";
+    LOG(ERROR) << "Unknown custom action type.";
+    return {};
   }
+  return config;
 }
 
-Json::Value CustomActionConfig::ToJson() const {
-  Json::Value custom_action;
-  if (shell_command) {
+Json::Value ToJson(const CustomActionConfig& custom_action) {
+  Json::Value json;
+  if (custom_action.shell_command) {
     // Shell command with one button.
-    custom_action[kCustomActionShellCommand] = *shell_command;
-    custom_action[kCustomActionButton] = Json::Value();
-    custom_action[kCustomActionButton][kCustomActionButtonCommand] =
-        buttons[0].command;
-    custom_action[kCustomActionButton][kCustomActionButtonTitle] =
-        buttons[0].title;
-    custom_action[kCustomActionButton][kCustomActionButtonIconName] =
-        buttons[0].icon_name;
-  } else if (server) {
+    json[kCustomActionShellCommand] = *custom_action.shell_command;
+    json[kCustomActionButton] = Json::Value();
+    json[kCustomActionButton][kCustomActionButtonCommand] =
+        custom_action.buttons[0].command;
+    json[kCustomActionButton][kCustomActionButtonTitle] =
+        custom_action.buttons[0].title;
+    json[kCustomActionButton][kCustomActionButtonIconName] =
+        custom_action.buttons[0].icon_name;
+  } else if (custom_action.server) {
     // Action server with possibly multiple buttons.
-    custom_action[kCustomActionServer] = *server;
-    custom_action[kCustomActionButtons] = Json::Value(Json::arrayValue);
-    for (const auto& button : buttons) {
+    json[kCustomActionServer] = *custom_action.server;
+    json[kCustomActionButtons] = Json::Value(Json::arrayValue);
+    for (const auto& button : custom_action.buttons) {
       Json::Value button_entry;
       button_entry[kCustomActionButtonCommand] = button.command;
       button_entry[kCustomActionButtonTitle] = button.title;
       button_entry[kCustomActionButtonIconName] = button.icon_name;
-      custom_action[kCustomActionButtons].append(button_entry);
+      json[kCustomActionButtons].append(button_entry);
     }
-  } else if (!device_states.empty()) {
+  } else if (!custom_action.device_states.empty()) {
     // Device state(s) with one button.
-    custom_action[kCustomActionDeviceStates] = Json::Value(Json::arrayValue);
-    for (const auto& device_state : device_states) {
+    json[kCustomActionDeviceStates] = Json::Value(Json::arrayValue);
+    for (const auto& device_state : custom_action.device_states) {
       Json::Value device_state_entry;
       if (device_state.lid_switch_open) {
         device_state_entry[kCustomActionDeviceStateLidSwitchOpen] =
@@ -129,19 +134,167 @@
         device_state_entry[kCustomActionDeviceStateHingeAngleValue] =
             *device_state.hinge_angle_value;
       }
-      custom_action[kCustomActionDeviceStates].append(device_state_entry);
+      json[kCustomActionDeviceStates].append(device_state_entry);
     }
-    custom_action[kCustomActionButton] = Json::Value();
-    custom_action[kCustomActionButton][kCustomActionButtonCommand] =
-        buttons[0].command;
-    custom_action[kCustomActionButton][kCustomActionButtonTitle] =
-        buttons[0].title;
-    custom_action[kCustomActionButton][kCustomActionButtonIconName] =
-        buttons[0].icon_name;
+    json[kCustomActionButton] = Json::Value();
+    json[kCustomActionButton][kCustomActionButtonCommand] =
+        custom_action.buttons[0].command;
+    json[kCustomActionButton][kCustomActionButtonTitle] =
+        custom_action.buttons[0].title;
+    json[kCustomActionButton][kCustomActionButtonIconName] =
+        custom_action.buttons[0].icon_name;
   } else {
     LOG(FATAL) << "Unknown custom action type.";
   }
-  return custom_action;
+  return json;
+}
+
+std::string DefaultCustomActionConfig() {
+  auto custom_action_config_dir =
+      DefaultHostArtifactsPath("etc/cvd_custom_action_config");
+  if (DirectoryExists(custom_action_config_dir)) {
+    auto custom_action_configs = DirectoryContents(custom_action_config_dir);
+    // Two entries are always . and ..
+    if (custom_action_configs.size() > 3) {
+      LOG(ERROR) << "Expected at most one custom action config in "
+                 << custom_action_config_dir << ". Please delete extras.";
+    } else if (custom_action_configs.size() == 3) {
+      for (const auto& config : custom_action_configs) {
+        if (android::base::EndsWithIgnoreCase(config, ".json")) {
+          return custom_action_config_dir + "/" + config;
+        }
+      }
+    }
+  }
+  return "";
+}
+
+class CustomActionConfigImpl : public CustomActionConfigProvider {
+ public:
+  INJECT(CustomActionConfigImpl(ConfigFlag& config)) : config_(config) {
+    custom_action_config_flag_ = GflagsCompatFlag("custom_action_config");
+    custom_action_config_flag_.Help(
+        "Path to a custom action config JSON. Defaults to the file provided by "
+        "build variable CVD_CUSTOM_ACTION_CONFIG. If this build variable is "
+        "empty then the custom action config will be empty as well.");
+    custom_action_config_flag_.Getter(
+        [this]() { return custom_action_config_; });
+    custom_action_config_flag_.Setter([this](const FlagMatch& match) {
+      if (!match.value.empty() && !FileExists(match.value)) {
+        LOG(ERROR) << "custom_action_config file \"" << match.value << "\" "
+                   << "does not exist.";
+        return false;
+      }
+      custom_action_config_ = match.value;
+      return true;
+    });
+    // TODO(schuffelen): Access ConfigFlag directly for these values.
+    custom_actions_flag_ = GflagsCompatFlag("custom_actions");
+    custom_actions_flag_.Help(
+        "Serialized JSON of an array of custom action objects (in the same "
+        "format as custom action config JSON files). For use within --config "
+        "preset config files; prefer --custom_action_config to specify a "
+        "custom config file on the command line. Actions in this flag are "
+        "combined with actions in --custom_action_config.");
+    custom_actions_flag_.Setter([this](const FlagMatch& match) {
+      // Load the custom action from the --config preset file.
+      Json::CharReaderBuilder builder;
+      std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
+      std::string errorMessage;
+      Json::Value custom_action_array(Json::arrayValue);
+      if (!reader->parse(&*match.value.begin(), &*match.value.end(),
+                         &custom_action_array, &errorMessage)) {
+        LOG(ERROR) << "Could not read custom actions config flag: "
+                   << errorMessage;
+        return false;
+      }
+      return AddJsonCustomActionConfigs(custom_action_array);
+    });
+  }
+
+  const std::vector<CustomActionConfig>& CustomActions() const override {
+    return custom_actions_;
+  }
+
+  // ConfigFragment
+  Json::Value Serialize() const override {
+    Json::Value actions_array(Json::arrayValue);
+    for (const auto& action : CustomActions()) {
+      actions_array.append(ToJson(action));
+    }
+    return actions_array;
+  }
+  bool Deserialize(const Json::Value& custom_actions_json) override {
+    return AddJsonCustomActionConfigs(custom_actions_json);
+  }
+
+  // FlagFeature
+  std::string Name() const override { return "CustomActionConfig"; }
+  std::unordered_set<FlagFeature*> Dependencies() const override {
+    return {static_cast<FlagFeature*>(&config_)};
+  }
+
+  bool Process(std::vector<std::string>& args) override {
+    custom_action_config_ = DefaultCustomActionConfig();
+    if (!ParseFlags(Flags(), args)) {
+      return false;
+    }
+    if (custom_action_config_ != "") {
+      Json::CharReaderBuilder builder;
+      std::ifstream ifs(custom_action_config_);
+      std::string errorMessage;
+      Json::Value custom_action_array(Json::arrayValue);
+      if (!Json::parseFromStream(builder, ifs, &custom_action_array,
+                                 &errorMessage)) {
+        LOG(ERROR) << "Could not read custom actions config file "
+                   << custom_action_config_ << ": " << errorMessage;
+        return false;
+      }
+      return AddJsonCustomActionConfigs(custom_action_array);
+    }
+    return true;
+  }
+  bool WriteGflagsCompatHelpXml(std::ostream& out) const override {
+    return WriteGflagsCompatXml(Flags(), out);
+  }
+
+ private:
+  std::vector<Flag> Flags() const {
+    return {custom_action_config_flag_, custom_actions_flag_};
+  }
+
+  bool AddJsonCustomActionConfigs(const Json::Value& custom_action_array) {
+    if (custom_action_array.type() != Json::arrayValue) {
+      LOG(ERROR) << "Expected a JSON array of custom actions";
+      return false;
+    }
+    for (const auto& custom_action_json : custom_action_array) {
+      auto custom_action = CustomActionConfigFromJson(custom_action_json);
+      if (custom_action) {
+        custom_actions_.push_back(*custom_action);
+      } else {
+        LOG(ERROR) << "Validation failed on a custom action";
+        return false;
+      }
+    }
+    return true;
+  }
+
+  ConfigFlag& config_;
+  Flag custom_action_config_flag_;
+  std::string custom_action_config_;
+  Flag custom_actions_flag_;
+  std::vector<CustomActionConfig> custom_actions_;
+};
+
+}  // namespace
+
+fruit::Component<fruit::Required<ConfigFlag>, CustomActionConfigProvider>
+CustomActionsComponent() {
+  return fruit::createComponent()
+      .bind<CustomActionConfigProvider, CustomActionConfigImpl>()
+      .addMultibinding<ConfigFragment, CustomActionConfigProvider>()
+      .addMultibinding<FlagFeature, CustomActionConfigProvider>();
 }
 
 }  // namespace cuttlefish
diff --git a/host/libs/config/custom_actions.h b/host/libs/config/custom_actions.h
index 6279401..73f3901 100644
--- a/host/libs/config/custom_actions.h
+++ b/host/libs/config/custom_actions.h
@@ -15,12 +15,15 @@
  */
 #pragma once
 
-#include <json/json.h>
-
+#include <fruit/fruit.h>
 #include <optional>
 #include <string>
 #include <vector>
 
+#include "host/libs/config/config_flag.h"
+#include "host/libs/config/config_fragment.h"
+#include "host/libs/config/feature.h"
+
 namespace cuttlefish {
 
 struct ControlPanelButton {
@@ -35,13 +38,18 @@
 };
 
 struct CustomActionConfig {
-  CustomActionConfig(const Json::Value&);
-  Json::Value ToJson() const;
-
   std::vector<ControlPanelButton> buttons;
   std::optional<std::string> shell_command;
   std::optional<std::string> server;
   std::vector<DeviceState> device_states;
 };
 
+class CustomActionConfigProvider : public FlagFeature, public ConfigFragment {
+ public:
+  virtual const std::vector<CustomActionConfig>& CustomActions() const = 0;
+};
+
+fruit::Component<fruit::Required<ConfigFlag>, CustomActionConfigProvider>
+CustomActionsComponent();
+
 }  // namespace cuttlefish
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
index b5160d0..0b0022f 100644
--- a/host/libs/config/cuttlefish_config.cpp
+++ b/host/libs/config/cuttlefish_config.cpp
@@ -40,9 +40,26 @@
 namespace cuttlefish {
 namespace {
 
+static constexpr int kDefaultInstance = 1;
+
+int InstanceFromString(std::string instance_str) {
+  if (android::base::StartsWith(instance_str, kVsocUserPrefix)) {
+    instance_str = instance_str.substr(std::string(kVsocUserPrefix).size());
+  } else if (android::base::StartsWith(instance_str, kCvdNamePrefix)) {
+    instance_str = instance_str.substr(std::string(kCvdNamePrefix).size());
+  }
+
+  int instance = std::stoi(instance_str);
+  if (instance <= 0) {
+    LOG(INFO) << "Failed to interpret \"" << instance_str << "\" as an id, "
+              << "using instance id " << kDefaultInstance;
+    return kDefaultInstance;
+  }
+  return instance;
+}
+
 int InstanceFromEnvironment() {
   static constexpr char kInstanceEnvironmentVariable[] = "CUTTLEFISH_INSTANCE";
-  static constexpr int kDefaultInstance = 1;
 
   // CUTTLEFISH_INSTANCE environment variable
   std::string instance_str = StringFromEnv(kInstanceEnvironmentVariable, "");
@@ -60,15 +77,8 @@
       LOG(DEBUG) << "Non-vsoc user, using instance id " << kDefaultInstance;
       return kDefaultInstance;
     }
-    instance_str = instance_str.substr(std::string(kVsocUserPrefix).size());
   }
-  int instance = std::stoi(instance_str);
-  if (instance <= 0) {
-    LOG(INFO) << "Failed to interpret \"" << instance_str << "\" as an id, "
-              << "using instance id " << kDefaultInstance;
-    return kDefaultInstance;
-  }
-  return instance;
+  return InstanceFromString(instance_str);
 }
 
 const char* kInstances = "instances";
@@ -81,18 +91,47 @@
 const char* const kGpuModeDrmVirgl = "drm_virgl";
 const char* const kGpuModeGfxStream = "gfxstream";
 
+const char* const kHwComposerAuto = "auto";
+const char* const kHwComposerDrmMinigbm = "drm_minigbm";
+const char* const kHwComposerRanchu = "ranchu";
+
 std::string DefaultEnvironmentPath(const char* environment_key,
                                    const char* default_value,
                                    const char* subpath) {
   return StringFromEnv(environment_key, default_value) + "/" + subpath;
 }
 
-static constexpr char kAssemblyDir[] = "assembly_dir";
-std::string CuttlefishConfig::assembly_dir() const {
-  return (*dictionary_)[kAssemblyDir].asString();
+ConfigFragment::~ConfigFragment() = default;
+
+static constexpr char kFragments[] = "fragments";
+bool CuttlefishConfig::LoadFragment(ConfigFragment& fragment) const {
+  if (!dictionary_->isMember(kFragments)) {
+    LOG(ERROR) << "Fragments member was missing";
+    return false;
+  }
+  const Json::Value& json_fragments = (*dictionary_)[kFragments];
+  if (!json_fragments.isMember(fragment.Name())) {
+    LOG(ERROR) << "Could not find a fragment called " << fragment.Name();
+    return false;
+  }
+  return fragment.Deserialize(json_fragments[fragment.Name()]);
 }
-void CuttlefishConfig::set_assembly_dir(const std::string& assembly_dir) {
-  (*dictionary_)[kAssemblyDir] = assembly_dir;
+bool CuttlefishConfig::SaveFragment(const ConfigFragment& fragment) {
+  Json::Value& json_fragments = (*dictionary_)[kFragments];
+  if (json_fragments.isMember(fragment.Name())) {
+    LOG(ERROR) << "Already have a fragment called " << fragment.Name();
+    return false;
+  }
+  json_fragments[fragment.Name()] = fragment.Serialize();
+  return true;
+}
+
+static constexpr char kRootDir[] = "root_dir";
+std::string CuttlefishConfig::root_dir() const {
+  return (*dictionary_)[kRootDir].asString();
+}
+void CuttlefishConfig::set_root_dir(const std::string& root_dir) {
+  (*dictionary_)[kRootDir] = root_dir;
 }
 
 static constexpr char kVmManager[] = "vm_manager";
@@ -111,6 +150,30 @@
   (*dictionary_)[kGpuMode] = name;
 }
 
+static constexpr char kGpuCaptureBinary[] = "gpu_capture_binary";
+std::string CuttlefishConfig::gpu_capture_binary() const {
+  return (*dictionary_)[kGpuCaptureBinary].asString();
+}
+void CuttlefishConfig::set_gpu_capture_binary(const std::string& name) {
+  (*dictionary_)[kGpuCaptureBinary] = name;
+}
+
+static constexpr char kHWComposer[] = "hwcomposer";
+std::string CuttlefishConfig::hwcomposer() const {
+  return (*dictionary_)[kHWComposer].asString();
+}
+void CuttlefishConfig::set_hwcomposer(const std::string& name) {
+  (*dictionary_)[kHWComposer] = name;
+}
+
+static constexpr char kEnableGpuUdmabuf[] = "enable_gpu_udmabuf";
+void CuttlefishConfig::set_enable_gpu_udmabuf(const bool enable_gpu_udmabuf) {
+  (*dictionary_)[kEnableGpuUdmabuf] = enable_gpu_udmabuf;
+}
+bool CuttlefishConfig::enable_gpu_udmabuf() const {
+  return (*dictionary_)[kEnableGpuUdmabuf].asBool();
+}
+
 static constexpr char kCpus[] = "cpus";
 int CuttlefishConfig::cpus() const { return (*dictionary_)[kCpus].asInt(); }
 void CuttlefishConfig::set_cpus(int cpus) { (*dictionary_)[kCpus] = cpus; }
@@ -190,35 +253,6 @@
   return (*dictionary_)[kCuttlefishEnvPath].asString();
 }
 
-static AdbMode stringToAdbMode(std::string mode) {
-  std::transform(mode.begin(), mode.end(), mode.begin(), ::tolower);
-  if (mode == "vsock_tunnel") {
-    return AdbMode::VsockTunnel;
-  } else if (mode == "vsock_half_tunnel") {
-    return AdbMode::VsockHalfTunnel;
-  } else if (mode == "native_vsock") {
-    return AdbMode::NativeVsock;
-  } else {
-    return AdbMode::Unknown;
-  }
-}
-
-static constexpr char kAdbMode[] = "adb_mode";
-std::set<AdbMode> CuttlefishConfig::adb_mode() const {
-  std::set<AdbMode> args_set;
-  for (auto& mode : (*dictionary_)[kAdbMode]) {
-    args_set.insert(stringToAdbMode(mode.asString()));
-  }
-  return args_set;
-}
-void CuttlefishConfig::set_adb_mode(const std::set<std::string>& mode) {
-  Json::Value mode_json_obj(Json::arrayValue);
-  for (const auto& arg : mode) {
-    mode_json_obj.append(arg);
-  }
-  (*dictionary_)[kAdbMode] = mode_json_obj;
-}
-
 static SecureHal StringToSecureHal(std::string mode) {
   std::transform(mode.begin(), mode.end(), mode.begin(), ::tolower);
   if (mode == "keymint") {
@@ -286,14 +320,6 @@
   return (*dictionary_)[kEnableGnssGrpcProxy].asBool();
 }
 
-static constexpr char kEnableVncServer[] = "enable_vnc_server";
-bool CuttlefishConfig::enable_vnc_server() const {
-  return (*dictionary_)[kEnableVncServer].asBool();
-}
-void CuttlefishConfig::set_enable_vnc_server(bool enable_vnc_server) {
-  (*dictionary_)[kEnableVncServer] = enable_vnc_server;
-}
-
 static constexpr char kEnableSandbox[] = "enable_sandbox";
 void CuttlefishConfig::set_enable_sandbox(const bool enable_sandbox) {
   (*dictionary_)[kEnableSandbox] = enable_sandbox;
@@ -330,30 +356,6 @@
   return (*dictionary_)[kEnableVehicleHalServer].asBool();
 }
 
-static constexpr char kVehicleHalServerBinary[] = "vehicle_hal_server_binary";
-void CuttlefishConfig::set_vehicle_hal_grpc_server_binary(const std::string& vehicle_hal_server_binary) {
-  (*dictionary_)[kVehicleHalServerBinary] = vehicle_hal_server_binary;
-}
-std::string CuttlefishConfig::vehicle_hal_grpc_server_binary() const {
-  return (*dictionary_)[kVehicleHalServerBinary].asString();
-}
-
-static constexpr char kCustomActions[] = "custom_actions";
-void CuttlefishConfig::set_custom_actions(const std::vector<CustomActionConfig>& actions) {
-  Json::Value actions_array(Json::arrayValue);
-  for (const auto& action : actions) {
-    actions_array.append(action.ToJson());
-  }
-  (*dictionary_)[kCustomActions] = actions_array;
-}
-std::vector<CustomActionConfig> CuttlefishConfig::custom_actions() const {
-  std::vector<CustomActionConfig> result;
-  for (Json::Value custom_action : (*dictionary_)[kCustomActions]) {
-    result.push_back(CustomActionConfig(custom_action));
-  }
-  return result;
-}
-
 static constexpr char kWebRTCAssetsDir[] = "webrtc_assets_dir";
 void CuttlefishConfig::set_webrtc_assets_dir(const std::string& webrtc_assets_dir) {
   (*dictionary_)[kWebRTCAssetsDir] = webrtc_assets_dir;
@@ -379,14 +381,6 @@
   (*dictionary_)[kRestartSubprocesses] = restart_subprocesses;
 }
 
-static constexpr char kRunAdbConnector[] = "run_adb_connector";
-bool CuttlefishConfig::run_adb_connector() const {
-  return (*dictionary_)[kRunAdbConnector].asBool();
-}
-void CuttlefishConfig::set_run_adb_connector(bool run_adb_connector) {
-  (*dictionary_)[kRunAdbConnector] = run_adb_connector;
-}
-
 static constexpr char kRunAsDaemon[] = "run_as_daemon";
 bool CuttlefishConfig::run_as_daemon() const {
   return (*dictionary_)[kRunAsDaemon].asBool();
@@ -411,14 +405,6 @@
   (*dictionary_)[kBlankDataImageMb] = blank_data_image_mb;
 }
 
-static constexpr char kBlankDataImageFmt[] = "blank_data_image_fmt";
-std::string CuttlefishConfig::blank_data_image_fmt() const {
-  return (*dictionary_)[kBlankDataImageFmt].asString();
-}
-void CuttlefishConfig::set_blank_data_image_fmt(const std::string& blank_data_image_fmt) {
-  (*dictionary_)[kBlankDataImageFmt] = blank_data_image_fmt;
-}
-
 static constexpr char kBootloader[] = "bootloader";
 std::string CuttlefishConfig::bootloader() const {
   return (*dictionary_)[kBootloader].asString();
@@ -498,6 +484,14 @@
   return (*dictionary_)[kSigServerPath].asString();
 }
 
+static constexpr char kSigServerSecure[] = "webrtc_sig_server_secure";
+void CuttlefishConfig::set_sig_server_secure(bool secure) {
+  (*dictionary_)[kSigServerSecure] = secure;
+}
+bool CuttlefishConfig::sig_server_secure() const {
+  return (*dictionary_)[kSigServerSecure].asBool();
+}
+
 static constexpr char kSigServerStrict[] = "webrtc_sig_server_strict";
 void CuttlefishConfig::set_sig_server_strict(bool strict) {
   (*dictionary_)[kSigServerStrict] = strict;
@@ -615,7 +609,8 @@
 }
 
 static constexpr char kExtraKernelCmdline[] = "extra_kernel_cmdline";
-void CuttlefishConfig::set_extra_kernel_cmdline(std::string extra_cmdline) {
+void CuttlefishConfig::set_extra_kernel_cmdline(
+    const std::string& extra_cmdline) {
   Json::Value args_json_obj(Json::arrayValue);
   for (const auto& arg : android::base::Split(extra_cmdline, " ")) {
     args_json_obj.append(arg);
@@ -630,6 +625,23 @@
   return cmdline;
 }
 
+static constexpr char kExtraBootconfigArgs[] = "extra_bootconfig_args";
+void CuttlefishConfig::set_extra_bootconfig_args(
+    const std::string& extra_bootconfig_args) {
+  Json::Value args_json_obj(Json::arrayValue);
+  for (const auto& arg : android::base::Split(extra_bootconfig_args, " ")) {
+    args_json_obj.append(arg);
+  }
+  (*dictionary_)[kExtraBootconfigArgs] = args_json_obj;
+}
+std::vector<std::string> CuttlefishConfig::extra_bootconfig_args() const {
+  std::vector<std::string> bootconfig;
+  for (const Json::Value& arg : (*dictionary_)[kExtraBootconfigArgs]) {
+    bootconfig.push_back(arg.asString());
+  }
+  return bootconfig;
+}
+
 static constexpr char kRilDns[] = "ril_dns";
 void CuttlefishConfig::set_ril_dns(const std::string& ril_dns) {
   (*dictionary_)[kRilDns] = ril_dns;
@@ -690,6 +702,46 @@
   return (*dictionary_)[kVhostNet].asBool();
 }
 
+static constexpr char kVhostUserMac80211Hwsim[] = "vhost_user_mac80211_hwsim";
+void CuttlefishConfig::set_vhost_user_mac80211_hwsim(const std::string& path) {
+  (*dictionary_)[kVhostUserMac80211Hwsim] = path;
+}
+std::string CuttlefishConfig::vhost_user_mac80211_hwsim() const {
+  return (*dictionary_)[kVhostUserMac80211Hwsim].asString();
+}
+
+static constexpr char kWmediumdApiServerSocket[] = "wmediumd_api_server_socket";
+void CuttlefishConfig::set_wmediumd_api_server_socket(const std::string& path) {
+  (*dictionary_)[kWmediumdApiServerSocket] = path;
+}
+std::string CuttlefishConfig::wmediumd_api_server_socket() const {
+  return (*dictionary_)[kWmediumdApiServerSocket].asString();
+}
+
+static constexpr char kApRootfsImage[] = "ap_rootfs_image";
+std::string CuttlefishConfig::ap_rootfs_image() const {
+  return (*dictionary_)[kApRootfsImage].asString();
+}
+void CuttlefishConfig::set_ap_rootfs_image(const std::string& ap_rootfs_image) {
+  (*dictionary_)[kApRootfsImage] = ap_rootfs_image;
+}
+
+static constexpr char kApKernelImage[] = "ap_kernel_image";
+std::string CuttlefishConfig::ap_kernel_image() const {
+  return (*dictionary_)[kApKernelImage].asString();
+}
+void CuttlefishConfig::set_ap_kernel_image(const std::string& ap_kernel_image) {
+  (*dictionary_)[kApKernelImage] = ap_kernel_image;
+}
+
+static constexpr char kWmediumdConfig[] = "wmediumd_config";
+void CuttlefishConfig::set_wmediumd_config(const std::string& config) {
+  (*dictionary_)[kWmediumdConfig] = config;
+}
+std::string CuttlefishConfig::wmediumd_config() const {
+  return (*dictionary_)[kWmediumdConfig].asString();
+}
+
 static constexpr char kRecordScreen[] = "record_screen";
 void CuttlefishConfig::set_record_screen(bool record_screen) {
   (*dictionary_)[kRecordScreen] = record_screen;
@@ -738,15 +790,29 @@
   (*dictionary_)[kBootconfigSupported] = bootconfig_supported;
 }
 
-// Creates the (initially empty) config object and populates it with values from
-// the config file if the CUTTLEFISH_CONFIG_FILE env variable is present.
-// Returns nullptr if there was an error loading from file
-/*static*/ CuttlefishConfig* CuttlefishConfig::BuildConfigImpl() {
-  auto config_file_path = StringFromEnv(kCuttlefishConfigEnvVarName,
-                                        GetGlobalConfigFileLink());
+static constexpr char kUserdataFormat[] = "userdata_format";
+std::string CuttlefishConfig::userdata_format() const {
+  return (*dictionary_)[kUserdataFormat].asString();
+}
+void CuttlefishConfig::set_userdata_format(const std::string& userdata_format) {
+  auto fmt = userdata_format;
+  std::transform(fmt.begin(), fmt.end(), fmt.begin(), ::tolower);
+  (*dictionary_)[kUserdataFormat] = fmt;
+}
+
+static constexpr char kApImageDevPath[] = "ap_image_dev_path";
+std::string CuttlefishConfig::ap_image_dev_path() const {
+  return (*dictionary_)[kApImageDevPath].asString();
+}
+void CuttlefishConfig::set_ap_image_dev_path(const std::string& dev_path) {
+  (*dictionary_)[kApImageDevPath] = dev_path;
+}
+
+/*static*/ CuttlefishConfig* CuttlefishConfig::BuildConfigImpl(
+    const std::string& path) {
   auto ret = new CuttlefishConfig();
   if (ret) {
-    auto loaded = ret->LoadFromFile(config_file_path.c_str());
+    auto loaded = ret->LoadFromFile(path.c_str());
     if (!loaded) {
       delete ret;
       return nullptr;
@@ -755,8 +821,19 @@
   return ret;
 }
 
+/*static*/ std::unique_ptr<const CuttlefishConfig>
+CuttlefishConfig::GetFromFile(const std::string& path) {
+  return std::unique_ptr<const CuttlefishConfig>(BuildConfigImpl(path));
+}
+
+// Creates the (initially empty) config object and populates it with values from
+// the config file if the CUTTLEFISH_CONFIG_FILE env variable is present.
+// Returns nullptr if there was an error loading from file
 /*static*/ const CuttlefishConfig* CuttlefishConfig::Get() {
-  static std::shared_ptr<CuttlefishConfig> config(BuildConfigImpl());
+  auto config_file_path =
+      StringFromEnv(kCuttlefishConfigEnvVarName, GetGlobalConfigFileLink());
+  static std::shared_ptr<CuttlefishConfig> config(
+      BuildConfigImpl(config_file_path));
   return config.get();
 }
 
@@ -800,11 +877,28 @@
   return !ofs.fail();
 }
 
+std::string CuttlefishConfig::instances_dir() const {
+  return AbsolutePath(root_dir() + "/instances");
+}
+
+std::string CuttlefishConfig::InstancesPath(
+    const std::string& file_name) const {
+  return AbsolutePath(instances_dir() + "/" + file_name);
+}
+
+std::string CuttlefishConfig::assembly_dir() const {
+  return AbsolutePath(root_dir() + "/assembly");
+}
+
 std::string CuttlefishConfig::AssemblyPath(
     const std::string& file_name) const {
   return AbsolutePath(assembly_dir() + "/" + file_name);
 }
 
+std::string CuttlefishConfig::os_composite_disk_path() const {
+  return AssemblyPath("os_composite.img");
+}
+
 CuttlefishConfig::MutableInstanceSpecific CuttlefishConfig::ForInstance(int num) {
   return MutableInstanceSpecific(this, std::to_string(num));
 }
@@ -813,8 +907,13 @@
   return InstanceSpecific(this, std::to_string(num));
 }
 
+CuttlefishConfig::InstanceSpecific CuttlefishConfig::ForInstanceName(
+    const std::string& name) const {
+  return ForInstance(InstanceFromString(name));
+}
+
 CuttlefishConfig::InstanceSpecific CuttlefishConfig::ForDefaultInstance() const {
-  return InstanceSpecific(this, std::to_string(GetInstance()));
+  return ForInstance(GetInstance());
 }
 
 std::vector<CuttlefishConfig::InstanceSpecific> CuttlefishConfig::Instances() const {
@@ -826,6 +925,39 @@
   return instances;
 }
 
+std::vector<std::string> CuttlefishConfig::instance_dirs() const {
+  std::vector<std::string> result;
+  for (const auto& instance : Instances()) {
+    result.push_back(instance.instance_dir());
+  }
+  return result;
+}
+
+static constexpr char kInstanceNames[] = "instance_names";
+void CuttlefishConfig::set_instance_names(
+    const std::vector<std::string>& instance_names) {
+  Json::Value args_json_obj(Json::arrayValue);
+  for (const auto& name : instance_names) {
+    args_json_obj.append(name);
+  }
+  (*dictionary_)[kInstanceNames] = args_json_obj;
+}
+std::vector<std::string> CuttlefishConfig::instance_names() const {
+  // NOTE: The structure of this field needs to remain stable, since
+  // cvd_server may call this on config JSON files from various builds.
+  //
+  // This info is duplicated into its own field here so it is simpler
+  // to keep stable, rather than parsing from Instances()::instance_name.
+  //
+  // Any non-stable changes must be accompanied by an uprev to the
+  // cvd_server major version.
+  std::vector<std::string> names;
+  for (const Json::Value& name : (*dictionary_)[kInstanceNames]) {
+    names.push_back(name.asString());
+  }
+  return names;
+}
+
 int GetInstance() {
   static int instance_id = InstanceFromEnvironment();
   return instance_id;
@@ -864,7 +996,7 @@
 }
 
 std::string DefaultHostArtifactsPath(const std::string& file_name) {
-  return (StringFromEnv("ANDROID_SOONG_HOST_OUT", StringFromEnv("HOME", ".")) + "/") +
+  return (StringFromEnv("ANDROID_HOST_OUT", StringFromEnv("HOME", ".")) + "/") +
          file_name;
 }
 
diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h
index db3207e..fc38be8 100644
--- a/host/libs/config/cuttlefish_config.h
+++ b/host/libs/config/cuttlefish_config.h
@@ -26,7 +26,7 @@
 #include <vector>
 
 #include "common/libs/utils/environment.h"
-#include "host/libs/config/custom_actions.h"
+#include "host/libs/config/config_fragment.h"
 
 namespace Json {
 class Value;
@@ -35,13 +35,11 @@
 namespace cuttlefish {
 constexpr char kLogcatSerialMode[] = "serial";
 constexpr char kLogcatVsockMode[] = "vsock";
-}
-
-namespace cuttlefish {
 
 constexpr char kDefaultUuidPrefix[] = "699acfc4-c8c4-11e7-882b-5065f31dc1";
 constexpr char kCuttlefishConfigEnvVarName[] = "CUTTLEFISH_CONFIG_FILE";
 constexpr char kVsocUserPrefix[] = "vsoc-";
+constexpr char kCvdNamePrefix[] = "cvd-";
 constexpr char kBootStartedMessage[] ="VIRTUAL_DEVICE_BOOT_STARTED";
 constexpr char kBootCompletedMessage[] = "VIRTUAL_DEVICE_BOOT_COMPLETED";
 constexpr char kBootFailedMessage[] = "VIRTUAL_DEVICE_BOOT_FAILED";
@@ -56,14 +54,9 @@
     "VIRTUAL_DEVICE_DISPLAY_POWER_MODE_CHANGED";
 constexpr char kInternalDirName[] = "internal";
 constexpr char kSharedDirName[] = "shared";
+constexpr char kLogDirName[] = "logs";
 constexpr char kCrosvmVarEmptyDir[] = "/var/empty";
-
-enum class AdbMode {
-  VsockTunnel,
-  VsockHalfTunnel,
-  NativeVsock,
-  Unknown,
-};
+constexpr char kKernelLoadedMessage[] = "] Linux version";
 
 enum class SecureHal {
   Unknown,
@@ -75,6 +68,8 @@
 class CuttlefishConfig {
  public:
   static const CuttlefishConfig* Get();
+  static std::unique_ptr<const CuttlefishConfig> GetFromFile(
+      const std::string& path);
   static bool ConfigExists();
 
   CuttlefishConfig();
@@ -86,17 +81,35 @@
   // processes by passing the --config_file option.
   bool SaveToFile(const std::string& file) const;
 
-  std::string assembly_dir() const;
-  void set_assembly_dir(const std::string& assembly_dir);
+  bool SaveFragment(const ConfigFragment&);
+  bool LoadFragment(ConfigFragment&) const;
 
+  std::string root_dir() const;
+  void set_root_dir(const std::string& root_dir);
+
+  std::string instances_dir() const;
+  std::string InstancesPath(const std::string&) const;
+
+  std::string assembly_dir() const;
   std::string AssemblyPath(const std::string&) const;
 
+  std::string os_composite_disk_path() const;
+
   std::string vm_manager() const;
   void set_vm_manager(const std::string& name);
 
   std::string gpu_mode() const;
   void set_gpu_mode(const std::string& name);
 
+  std::string gpu_capture_binary() const;
+  void set_gpu_capture_binary(const std::string&);
+
+  std::string hwcomposer() const;
+  void set_hwcomposer(const std::string&);
+
+  void set_enable_gpu_udmabuf(const bool enable_gpu_udmabuf);
+  bool enable_gpu_udmabuf() const;
+
   int cpus() const;
   void set_cpus(int cpus);
 
@@ -122,9 +135,6 @@
   void set_cuttlefish_env_path(const std::string& path);
   std::string cuttlefish_env_path() const;
 
-  void set_adb_mode(const std::set<std::string>& modes);
-  std::set<AdbMode> adb_mode() const;
-
   void set_secure_hals(const std::set<std::string>& hals);
   std::set<SecureHal> secure_hals() const;
 
@@ -140,9 +150,6 @@
   void set_tpm_device(const std::string& tpm_device);
   std::string tpm_device() const;
 
-  void set_enable_vnc_server(bool enable_vnc_server);
-  bool enable_vnc_server() const;
-
   void set_enable_sandbox(const bool enable_sandbox);
   bool enable_sandbox() const;
 
@@ -161,18 +168,9 @@
   void set_enable_vehicle_hal_grpc_server(bool enable_vhal_server);
   bool enable_vehicle_hal_grpc_server() const;
 
-  void set_vehicle_hal_grpc_server_binary(const std::string& vhal_server_binary);
-  std::string vehicle_hal_grpc_server_binary() const;
-
-  void set_custom_actions(const std::vector<CustomActionConfig>& actions);
-  std::vector<CustomActionConfig> custom_actions() const;
-
   void set_restart_subprocesses(bool restart_subprocesses);
   bool restart_subprocesses() const;
 
-  void set_run_adb_connector(bool run_adb_connector);
-  bool run_adb_connector() const;
-
   void set_enable_gnss_grpc_proxy(const bool enable_gnss_grpc_proxy);
   bool enable_gnss_grpc_proxy() const;
 
@@ -185,9 +183,6 @@
   void set_blank_data_image_mb(int blank_data_image_mb);
   int blank_data_image_mb() const;
 
-  void set_blank_data_image_fmt(const std::string& blank_data_image_fmt);
-  std::string blank_data_image_fmt() const;
-
   void set_bootloader(const std::string& bootloader_path);
   std::string bootloader() const;
 
@@ -221,9 +216,12 @@
   void set_metrics_binary(const std::string& metrics_binary);
   std::string metrics_binary() const;
 
-  void set_extra_kernel_cmdline(std::string extra_cmdline);
+  void set_extra_kernel_cmdline(const std::string& extra_cmdline);
   std::vector<std::string> extra_kernel_cmdline() const;
 
+  void set_extra_bootconfig_args(const std::string& extra_bootconfig_args);
+  std::vector<std::string> extra_bootconfig_args() const;
+
   // A directory containing the SSL certificates for the signaling server
   void set_webrtc_certs_dir(const std::string& certs_dir);
   std::string webrtc_certs_dir() const;
@@ -250,6 +248,11 @@
   void set_sig_server_path(const std::string& path);
   std::string sig_server_path() const;
 
+  // Whether the webrtc process should use a secure connection (WSS) to the
+  // signaling server.
+  void set_sig_server_secure(bool secure);
+  bool sig_server_secure() const;
+
   // Whether the webrtc process should attempt to verify the authenticity of the
   // signaling server (reject self signed certificates)
   void set_sig_server_strict(bool strict);
@@ -292,6 +295,21 @@
   void set_vhost_net(bool vhost_net);
   bool vhost_net() const;
 
+  void set_vhost_user_mac80211_hwsim(const std::string& path);
+  std::string vhost_user_mac80211_hwsim() const;
+
+  void set_wmediumd_api_server_socket(const std::string& path);
+  std::string wmediumd_api_server_socket() const;
+
+  void set_ap_rootfs_image(const std::string& path);
+  std::string ap_rootfs_image() const;
+
+  void set_ap_kernel_image(const std::string& path);
+  std::string ap_kernel_image() const;
+
+  void set_wmediumd_config(const std::string& path);
+  std::string wmediumd_config() const;
+
   void set_record_screen(bool record_screen);
   bool record_screen() const;
 
@@ -310,21 +328,32 @@
   void set_bootconfig_supported(bool bootconfig_supported);
   bool bootconfig_supported() const;
 
+  void set_userdata_format(const std::string& userdata_format);
+  std::string userdata_format() const;
+
+  // The path of an AP image in composite disk
+  std::string ap_image_dev_path() const;
+  void set_ap_image_dev_path(const std::string& dev_path);
+
   class InstanceSpecific;
   class MutableInstanceSpecific;
 
   MutableInstanceSpecific ForInstance(int instance_num);
   InstanceSpecific ForInstance(int instance_num) const;
+  InstanceSpecific ForInstanceName(const std::string& name) const;
   InstanceSpecific ForDefaultInstance() const;
 
   std::vector<InstanceSpecific> Instances() const;
+  std::vector<std::string> instance_dirs() const;
+
+  void set_instance_names(const std::vector<std::string>& instance_names);
+  std::vector<std::string> instance_names() const;
 
   // A view into an existing CuttlefishConfig object for a particular instance.
   class InstanceSpecific {
     const CuttlefishConfig* config_;
     std::string id_;
     friend InstanceSpecific CuttlefishConfig::ForInstance(int num) const;
-    friend InstanceSpecific CuttlefishConfig::ForDefaultInstance() const;
     friend std::vector<InstanceSpecific> CuttlefishConfig::Instances() const;
 
     InstanceSpecific(const CuttlefishConfig* config, const std::string& id)
@@ -337,8 +366,8 @@
     // If any of the following port numbers is 0, the relevant service is not
     // running on the guest.
 
-    // Port number to connect to vnc server on the host
-    int vnc_server_port() const;
+    // Port number for qemu to run a vnc server on the host
+    int qemu_vnc_server_port() const;
     // Port number to connect to the tombstone receiver on the host
     int tombstone_receiver_port() const;
     // Port number to connect to the config server on the host
@@ -349,15 +378,14 @@
     // Port number to connect to the touch server on the host. (Only
     // operational if QEMU is the vmm.)
     int touch_server_port() const;
-    // Port number to connect to the frame server on the host. (Only
-    // operational if using swiftshader as the GPU.)
-    int frames_server_port() const;
     // Port number to connect to the vehicle HAL server on the host
     int vehicle_hal_server_port() const;
     // Port number to connect to the audiocontrol server on the guest
     int audiocontrol_server_port() const;
     // Port number to connect to the adb server on the host
-    int host_port() const;
+    int adb_host_port() const;
+    // Device-specific ID to distinguish modem simulators. Must be 4 digits.
+    int modem_simulator_host_id() const;
     // Port number to connect to the gnss grpc proxy server on the host
     int gnss_grpc_proxy_server_port() const;
     std::string adb_ip_and_port() const;
@@ -371,7 +399,6 @@
     std::string rootcanal_default_commands_file() const;
 
     std::string adb_device_name() const;
-    std::string device_title() const;
     std::string gnss_file_path() const;
     std::string mobile_bridge_name() const;
     std::string mobile_tap_name() const;
@@ -388,6 +415,7 @@
     // directory..
     std::string PerInstancePath(const char* file_name) const;
     std::string PerInstanceInternalPath(const char* file_name) const;
+    std::string PerInstanceLogPath(const std::string& file_name) const;
 
     std::string instance_dir() const;
 
@@ -398,8 +426,7 @@
     std::string switches_socket_path() const;
     std::string frames_socket_path() const;
 
-    // mock hal guest socket that will be vsock/virtio later on
-    std::string confui_hal_guest_socket_path() const;
+    int confui_host_vsock_port() const;
 
     std::string access_kregistry_path() const;
 
@@ -427,14 +454,10 @@
 
     std::string sdcard_path() const;
 
-    std::string os_composite_disk_path() const;
-
     std::string persistent_composite_disk_path() const;
 
     std::string uboot_env_image_path() const;
 
-    std::string vendor_boot_image_path() const;
-
     std::string audio_server_path() const;
 
     // modem simulator related
@@ -447,12 +470,24 @@
     // Whether this instance should start the webrtc signaling server
     bool start_webrtc_sig_server() const;
 
+    // Whether to start a reverse proxy to the webrtc signaling server already
+    // running in the host
+    bool start_webrtc_sig_server_proxy() const;
+
+    // Whether this instance should start the wmediumd process
+    bool start_wmediumd() const;
+
+    // Whether this instance should start an ap instance
+    bool start_ap() const;
+
     // Wifi MAC address inside the guest
-    std::array<unsigned char, 6> wifi_mac_address() const;
+    int wifi_mac_prefix() const;
 
     std::string factory_reset_protected_path() const;
 
     std::string persistent_bootconfig_path() const;
+
+    std::string id() const;
   };
 
   // A view into an existing CuttlefishConfig object for a particular instance.
@@ -461,13 +496,12 @@
     std::string id_;
     friend MutableInstanceSpecific CuttlefishConfig::ForInstance(int num);
 
-    MutableInstanceSpecific(CuttlefishConfig* config, const std::string& id)
-        : config_(config), id_(id) {}
+    MutableInstanceSpecific(CuttlefishConfig* config, const std::string& id);
 
     Json::Value* Dictionary();
   public:
     void set_serial_number(const std::string& serial_number);
-    void set_vnc_server_port(int vnc_server_port);
+    void set_qemu_vnc_server_port(int qemu_vnc_server_port);
     void set_tombstone_receiver_port(int tombstone_receiver_port);
     void set_config_server_port(int config_server_port);
     void set_frames_server_port(int config_server_port);
@@ -477,8 +511,10 @@
     void set_keymaster_vsock_port(int keymaster_vsock_port);
     void set_vehicle_hal_server_port(int vehicle_server_port);
     void set_audiocontrol_server_port(int audiocontrol_server_port);
-    void set_host_port(int host_port);
+    void set_adb_host_port(int adb_host_port);
+    void set_modem_simulator_host_id(int modem_simulator_id);
     void set_adb_ip_and_port(const std::string& ip_port);
+    void set_confui_host_vsock_port(int confui_host_port);
     void set_rootcanal_hci_port(int rootcanal_hci_port);
     void set_rootcanal_link_port(int rootcanal_link_port);
     void set_rootcanal_test_port(int rootcanal_test_port);
@@ -486,7 +522,6 @@
     void set_rootcanal_config_file(const std::string& rootcanal_config_file);
     void set_rootcanal_default_commands_file(
         const std::string& rootcanal_default_commands_file);
-    void set_device_title(const std::string& title);
     void set_mobile_bridge_name(const std::string& mobile_bridge_name);
     void set_mobile_tap_name(const std::string& mobile_tap_name);
     void set_wifi_tap_name(const std::string& wifi_tap_name);
@@ -495,14 +530,16 @@
     void set_use_allocd(bool use_allocd);
     void set_vsock_guest_cid(int vsock_guest_cid);
     void set_uuid(const std::string& uuid);
-    void set_instance_dir(const std::string& instance_dir);
     // modem simulator related
     void set_modem_simulator_ports(const std::string& modem_simulator_ports);
     void set_virtual_disk_paths(const std::vector<std::string>& disk_paths);
     void set_webrtc_device_id(const std::string& id);
     void set_start_webrtc_signaling_server(bool start);
+    void set_start_webrtc_sig_server_proxy(bool start);
+    void set_start_wmediumd(bool start);
+    void set_start_ap(bool start);
     // Wifi MAC address inside the guest
-    void set_wifi_mac_address(const std::array<unsigned char, 6>&);
+    void set_wifi_mac_prefix(const int wifi_mac_prefix);
     // Gnss grpc proxy server port inside the host
     void set_gnss_grpc_proxy_server_port(int gnss_grpc_proxy_server_port);
     // Gnss grpc proxy local file path
@@ -514,7 +551,7 @@
 
   void SetPath(const std::string& key, const std::string& path);
   bool LoadFromFile(const char* file);
-  static CuttlefishConfig* BuildConfigImpl();
+  static CuttlefishConfig* BuildConfigImpl(const std::string& path);
 
   CuttlefishConfig(const CuttlefishConfig&) = delete;
   CuttlefishConfig& operator=(const CuttlefishConfig&) = delete;
@@ -561,4 +598,9 @@
 extern const char* const kGpuModeGuestSwiftshader;
 extern const char* const kGpuModeDrmVirgl;
 extern const char* const kGpuModeGfxStream;
+
+// HwComposer modes
+extern const char* const kHwComposerAuto;
+extern const char* const kHwComposerDrmMinigbm;
+extern const char* const kHwComposerRanchu;
 }  // namespace cuttlefish
diff --git a/host/libs/config/cuttlefish_config_instance.cpp b/host/libs/config/cuttlefish_config_instance.cpp
index 14e7037..518a6e1 100644
--- a/host/libs/config/cuttlefish_config_instance.cpp
+++ b/host/libs/config/cuttlefish_config_instance.cpp
@@ -26,8 +26,18 @@
 
 const char* kInstances = "instances";
 
+std::string IdToName(const std::string& id) { return kCvdNamePrefix + id; }
+
 }  // namespace
 
+static constexpr char kInstanceDir[] = "instance_dir";
+CuttlefishConfig::MutableInstanceSpecific::MutableInstanceSpecific(
+    CuttlefishConfig* config, const std::string& id)
+    : config_(config), id_(id) {
+  // Legacy for acloud
+  (*Dictionary())[kInstanceDir] = config_->InstancesPath(IdToName(id));
+}
+
 Json::Value* CuttlefishConfig::MutableInstanceSpecific::Dictionary() {
   return &(*config_->dictionary_)[kInstances][id_];
 }
@@ -36,13 +46,8 @@
   return &(*config_->dictionary_)[kInstances][id_];
 }
 
-static constexpr char kInstanceDir[] = "instance_dir";
 std::string CuttlefishConfig::InstanceSpecific::instance_dir() const {
-  return (*Dictionary())[kInstanceDir].asString();
-}
-void CuttlefishConfig::MutableInstanceSpecific::set_instance_dir(
-    const std::string& instance_dir) {
-  (*Dictionary())[kInstanceDir] = instance_dir;
+  return config_->InstancesPath(IdToName(id_));
 }
 
 std::string CuttlefishConfig::InstanceSpecific::instance_internal_dir() const {
@@ -140,7 +145,7 @@
 }
 
 std::string CuttlefishConfig::InstanceSpecific::logcat_path() const {
-  return AbsolutePath(PerInstancePath("logcat"));
+  return AbsolutePath(PerInstanceLogPath("logcat"));
 }
 
 std::string CuttlefishConfig::InstanceSpecific::launcher_monitor_socket_path()
@@ -158,17 +163,13 @@
 }
 
 std::string CuttlefishConfig::InstanceSpecific::launcher_log_path() const {
-  return AbsolutePath(PerInstancePath("launcher.log"));
+  return AbsolutePath(PerInstanceLogPath("launcher.log"));
 }
 
 std::string CuttlefishConfig::InstanceSpecific::sdcard_path() const {
   return AbsolutePath(PerInstancePath("sdcard.img"));
 }
 
-std::string CuttlefishConfig::InstanceSpecific::os_composite_disk_path() const {
-  return AbsolutePath(PerInstancePath("os_composite.img"));
-}
-
 std::string CuttlefishConfig::InstanceSpecific::persistent_composite_disk_path()
     const {
   return AbsolutePath(PerInstancePath("persistent_composite.img"));
@@ -178,10 +179,6 @@
   return AbsolutePath(PerInstancePath("uboot_env.img"));
 }
 
-std::string CuttlefishConfig::InstanceSpecific::vendor_boot_image_path() const {
-  return AbsolutePath(PerInstancePath("vendor_boot_repacked.img"));
-}
-
 static constexpr char kMobileBridgeName[] = "mobile_bridge_name";
 
 std::string CuttlefishConfig::InstanceSpecific::audio_server_path() const {
@@ -205,9 +202,14 @@
   (*Dictionary())[kMobileTapName] = mobile_tap_name;
 }
 
-std::string CuttlefishConfig::InstanceSpecific::confui_hal_guest_socket_path()
-    const {
-  return PerInstanceInternalPath("confui_mock_hal_guest.sock");
+static constexpr char kConfUiHostPort[] = "confirmation_ui_host_port";
+int CuttlefishConfig::InstanceSpecific::confui_host_vsock_port() const {
+  return (*Dictionary())[kConfUiHostPort].asInt();
+}
+
+void CuttlefishConfig::MutableInstanceSpecific::set_confui_host_vsock_port(
+    int port) {
+  (*Dictionary())[kConfUiHostPort] = port;
 }
 
 static constexpr char kWifiTapName[] = "wifi_tap_name";
@@ -263,12 +265,21 @@
   (*Dictionary())[kUuid] = uuid;
 }
 
-static constexpr char kHostPort[] = "host_port";
-int CuttlefishConfig::InstanceSpecific::host_port() const {
+static constexpr char kHostPort[] = "adb_host_port";
+int CuttlefishConfig::InstanceSpecific::adb_host_port() const {
   return (*Dictionary())[kHostPort].asInt();
 }
-void CuttlefishConfig::MutableInstanceSpecific::set_host_port(int host_port) {
-  (*Dictionary())[kHostPort] = host_port;
+void CuttlefishConfig::MutableInstanceSpecific::set_adb_host_port(int port) {
+  (*Dictionary())[kHostPort] = port;
+}
+
+static constexpr char kModemSimulatorId[] = "modem_simulator_host_id";
+int CuttlefishConfig::InstanceSpecific::modem_simulator_host_id() const {
+  return (*Dictionary())[kModemSimulatorId].asInt();
+}
+void CuttlefishConfig::MutableInstanceSpecific::set_modem_simulator_host_id(
+    int id) {
+  (*Dictionary())[kModemSimulatorId] = id;
 }
 
 static constexpr char kAdbIPAndPort[] = "adb_ip_and_port";
@@ -288,29 +299,13 @@
   return "NO_ADB_MODE_SET_NO_VALID_DEVICE_NAME";
 }
 
-static constexpr char kDeviceTitle[] = "device_title";
-std::string CuttlefishConfig::InstanceSpecific::device_title() const {
-  return (*Dictionary())[kDeviceTitle].asString();
+static constexpr char kQemuVncServerPort[] = "qemu_vnc_server_port";
+int CuttlefishConfig::InstanceSpecific::qemu_vnc_server_port() const {
+  return (*Dictionary())[kQemuVncServerPort].asInt();
 }
-void CuttlefishConfig::MutableInstanceSpecific::set_device_title(
-    const std::string& title) {
-  (*Dictionary())[kDeviceTitle] = title;
-}
-
-static constexpr char kVncServerPort[] = "vnc_server_port";
-int CuttlefishConfig::InstanceSpecific::vnc_server_port() const {
-  return (*Dictionary())[kVncServerPort].asInt();
-}
-void CuttlefishConfig::MutableInstanceSpecific::set_vnc_server_port(int vnc_server_port) {
-  (*Dictionary())[kVncServerPort] = vnc_server_port;
-}
-
-static constexpr char kFramesServerPort[] = "frames_server_port";
-int CuttlefishConfig::InstanceSpecific::frames_server_port() const {
-  return (*Dictionary())[kFramesServerPort].asInt();
-}
-void CuttlefishConfig::MutableInstanceSpecific::set_frames_server_port(int frames_server_port) {
-  (*Dictionary())[kFramesServerPort] = frames_server_port;
+void CuttlefishConfig::MutableInstanceSpecific::set_qemu_vnc_server_port(
+    int qemu_vnc_server_port) {
+  (*Dictionary())[kQemuVncServerPort] = qemu_vnc_server_port;
 }
 
 static constexpr char kTouchServerPort[] = "touch_server_port";
@@ -438,6 +433,31 @@
   return (*Dictionary())[kStartSigServer].asBool();
 }
 
+static constexpr char kStartSigServerProxy[] = "webrtc_start_sig_server_proxy";
+void CuttlefishConfig::MutableInstanceSpecific::
+    set_start_webrtc_sig_server_proxy(bool start) {
+  (*Dictionary())[kStartSigServerProxy] = start;
+}
+bool CuttlefishConfig::InstanceSpecific::start_webrtc_sig_server_proxy() const {
+  return (*Dictionary())[kStartSigServerProxy].asBool();
+}
+
+static constexpr char kStartWmediumd[] = "start_wmediumd";
+void CuttlefishConfig::MutableInstanceSpecific::set_start_wmediumd(bool start) {
+  (*Dictionary())[kStartWmediumd] = start;
+}
+bool CuttlefishConfig::InstanceSpecific::start_wmediumd() const {
+  return (*Dictionary())[kStartWmediumd].asBool();
+}
+
+static constexpr char kStartAp[] = "start_ap";
+void CuttlefishConfig::MutableInstanceSpecific::set_start_ap(bool start) {
+  (*Dictionary())[kStartAp] = start;
+}
+bool CuttlefishConfig::InstanceSpecific::start_ap() const {
+  return (*Dictionary())[kStartAp].asBool();
+}
+
 std::string CuttlefishConfig::InstanceSpecific::touch_socket_path(
     int screen_idx) const {
   return PerInstanceInternalPath(
@@ -456,26 +476,13 @@
   return PerInstanceInternalPath("frames.sock");
 }
 
-static constexpr char kWifiMacAddress[] = "wifi_mac_address";
-void CuttlefishConfig::MutableInstanceSpecific::set_wifi_mac_address(
-    const std::array<unsigned char, 6>& mac_address) {
-  Json::Value mac_address_obj(Json::arrayValue);
-  for (const auto& num : mac_address) {
-    mac_address_obj.append(num);
-  }
-  (*Dictionary())[kWifiMacAddress] = mac_address_obj;
+static constexpr char kWifiMacPrefix[] = "wifi_mac_prefix";
+int CuttlefishConfig::InstanceSpecific::wifi_mac_prefix() const {
+  return (*Dictionary())[kWifiMacPrefix].asInt();
 }
-std::array<unsigned char, 6> CuttlefishConfig::InstanceSpecific::wifi_mac_address() const {
-  std::array<unsigned char, 6> mac_address{0, 0, 0, 0, 0, 0};
-  auto mac_address_obj = (*Dictionary())[kWifiMacAddress];
-  if (mac_address_obj.size() != 6) {
-    LOG(ERROR) << kWifiMacAddress << " entry had wrong size";
-    return {};
-  }
-  for (int i = 0; i < 6; i++) {
-    mac_address[i] = mac_address_obj[i].asInt();
-  }
-  return mac_address;
+void CuttlefishConfig::MutableInstanceSpecific::set_wifi_mac_prefix(
+    int wifi_mac_prefix) {
+  (*Dictionary())[kWifiMacPrefix] = wifi_mac_prefix;
 }
 
 std::string CuttlefishConfig::InstanceSpecific::factory_reset_protected_path() const {
@@ -502,8 +509,20 @@
   return PerInstancePath(relative_path.c_str());
 }
 
-std::string CuttlefishConfig::InstanceSpecific::instance_name() const {
-  return "cvd-" + id_;
+std::string CuttlefishConfig::InstanceSpecific::PerInstanceLogPath(
+    const std::string& file_name) const {
+  if (file_name.size() == 0) {
+    // Don't append a / if file_name is empty.
+    return PerInstancePath(kLogDirName);
+  }
+  auto relative_path = (std::string(kLogDirName) + "/") + file_name;
+  return PerInstancePath(relative_path.c_str());
 }
 
+std::string CuttlefishConfig::InstanceSpecific::instance_name() const {
+  return IdToName(id_);
+}
+
+std::string CuttlefishConfig::InstanceSpecific::id() const { return id_; }
+
 }  // namespace cuttlefish
diff --git a/host/libs/config/data_image.cpp b/host/libs/config/data_image.cpp
index 044dadb..52992e6 100644
--- a/host/libs/config/data_image.cpp
+++ b/host/libs/config/data_image.cpp
@@ -1,14 +1,18 @@
 #include "host/libs/config/data_image.h"
 
 #include <android-base/logging.h>
+#include <android-base/result.h>
+
+#include "blkid.h"
 
 #include "common/libs/fs/shared_buf.h"
-
 #include "common/libs/utils/files.h"
 #include "common/libs/utils/subprocess.h"
-
 #include "host/libs/config/mbr.h"
 
+using android::base::Error;
+using android::base::Result;
+
 namespace cuttlefish {
 
 namespace {
@@ -20,18 +24,71 @@
 const int FSCK_ERROR_CORRECTED = 1;
 const int FSCK_ERROR_CORRECTED_REQUIRES_REBOOT = 2;
 
-bool ForceFsckImage(const char* data_image) {
-  auto fsck_path = HostBinaryPath("fsck.f2fs");
+// Currently the Cuttlefish bootloaders are built only for x86 (32-bit),
+// ARM (QEMU only, 32-bit) and AArch64 (64-bit), and U-Boot will hard-code
+// these search paths. Install all bootloaders to one of these paths.
+// NOTE: For now, just ignore the 32-bit ARM version, as Debian doesn't
+//       build an EFI monolith for this architecture.
+const std::string kBootPathIA32 = "EFI/BOOT/BOOTIA32.EFI";
+const std::string kBootPathAA64 = "EFI/BOOT/BOOTAA64.EFI";
+
+// These are the paths Debian installs the monoliths to. If another distro
+// uses an alternative monolith path, add it to this table
+const std::pair<std::string, std::string> kGrubBlobTable[] = {
+    {"/usr/lib/grub/i386-efi/monolithic/grubia32.efi", kBootPathIA32},
+    {"/usr/lib/grub/arm64-efi/monolithic/grubaa64.efi", kBootPathAA64},
+};
+
+bool ForceFsckImage(const CuttlefishConfig& config,
+                    const std::string& data_image) {
+  std::string fsck_path;
+  if (config.userdata_format() == "f2fs") {
+    fsck_path = HostBinaryPath("fsck.f2fs");
+  } else if (config.userdata_format() == "ext4") {
+    fsck_path = "/sbin/e2fsck";
+  }
   int fsck_status = execute({fsck_path, "-y", "-f", data_image});
   if (fsck_status & ~(FSCK_ERROR_CORRECTED|FSCK_ERROR_CORRECTED_REQUIRES_REBOOT)) {
-    LOG(ERROR) << "`fsck.f2fs -y -f " << data_image << "` failed with code "
+    LOG(ERROR) << "`" << fsck_path << " -y -f " << data_image << "` failed with code "
                << fsck_status;
     return false;
   }
   return true;
 }
 
-bool ResizeImage(const char* data_image, int data_image_mb) {
+bool NewfsMsdos(const std::string& data_image, int data_image_mb,
+                int offset_num_mb) {
+  off_t image_size_bytes = static_cast<off_t>(data_image_mb) << 20;
+  off_t offset_size_bytes = static_cast<off_t>(offset_num_mb) << 20;
+  image_size_bytes -= offset_size_bytes;
+  off_t image_size_sectors = image_size_bytes / 512;
+  auto newfs_msdos_path = HostBinaryPath("newfs_msdos");
+  return execute({newfs_msdos_path,
+                         "-F",
+                         "32",
+                         "-m",
+                         "0xf8",
+                         "-o",
+                         "0",
+                         "-c",
+                         "8",
+                         "-h",
+                         "255",
+                         "-u",
+                         "63",
+                         "-S",
+                         "512",
+                         "-s",
+                         std::to_string(image_size_sectors),
+                         "-C",
+                         std::to_string(data_image_mb) + "M",
+                         "-@",
+                         std::to_string(offset_size_bytes),
+                         data_image}) == 0;
+}
+
+bool ResizeImage(const CuttlefishConfig& config, const std::string& data_image,
+                 int data_image_mb) {
   auto file_mb = FileSize(data_image) >> 20;
   if (file_mb > data_image_mb) {
     LOG(ERROR) << data_image << " is already " << file_mb << " MB, will not "
@@ -48,18 +105,23 @@
                   << data_image << "` failed:" << fd->StrError();
       return false;
     }
-    bool fsck_success = ForceFsckImage(data_image);
+    bool fsck_success = ForceFsckImage(config, data_image);
     if (!fsck_success) {
       return false;
     }
-    auto resize_path = HostBinaryPath("resize.f2fs");
+    std::string resize_path;
+    if (config.userdata_format() == "f2fs") {
+      resize_path = HostBinaryPath("resize.f2fs");
+    } else if (config.userdata_format() == "ext4") {
+      resize_path = "/sbin/resize2fs";
+    }
     int resize_status = execute({resize_path, data_image});
     if (resize_status != 0) {
-      LOG(ERROR) << "`resize.f2fs " << data_image << "` failed with code "
+      LOG(ERROR) << "`" << resize_path << " " << data_image << "` failed with code "
                  << resize_status;
       return false;
     }
-    fsck_success = ForceFsckImage(data_image);
+    fsck_success = ForceFsckImage(config, data_image);
     if (!fsck_success) {
       return false;
     }
@@ -68,7 +130,7 @@
 }
 } // namespace
 
-void CreateBlankImage(
+bool CreateBlankImage(
     const std::string& image, int num_mb, const std::string& image_fmt) {
   LOG(DEBUG) << "Creating " << image;
 
@@ -80,124 +142,405 @@
     if (fd->Truncate(image_size_bytes) != 0) {
       LOG(ERROR) << "`truncate --size=" << num_mb << "M " << image
                  << "` failed:" << fd->StrError();
-      return;
+      return false;
     }
   }
 
   if (image_fmt == "ext4") {
-    execute({"/sbin/mkfs.ext4", image});
+    if (execute({"/sbin/mkfs.ext4", image}) != 0) {
+      return false;
+    }
   } else if (image_fmt == "f2fs") {
     auto make_f2fs_path = cuttlefish::HostBinaryPath("make_f2fs");
-    execute({make_f2fs_path, "-t", image_fmt, image, "-C", "utf8", "-O",
-             "compression,extra_attr,prjquota", "-g", "android"});
+    if (execute({make_f2fs_path, "-t", image_fmt, image, "-C", "utf8", "-O",
+             "compression,extra_attr,project_quota", "-g", "android"}) != 0) {
+      return false;
+    }
   } else if (image_fmt == "sdcard") {
     // Reserve 1MB in the image for the MBR and padding, to simulate what
     // other OSes do by default when partitioning a drive
     off_t offset_size_bytes = 1 << 20;
     image_size_bytes -= offset_size_bytes;
-    off_t image_size_sectors = image_size_bytes / 512;
-    auto newfs_msdos_path = HostBinaryPath("newfs_msdos");
-    execute({newfs_msdos_path, "-F", "32", "-m", "0xf8", "-a", "4088",
-                               "-o", "0",  "-c", "8",    "-h", "255",
-                               "-u", "63", "-S", "512",
-                               "-s", std::to_string(image_size_sectors),
-                               "-C", std::to_string(num_mb) + "M",
-                               "-@", std::to_string(offset_size_bytes),
-                               image});
+    if (!NewfsMsdos(image, num_mb, 1)) {
+      LOG(ERROR) << "Failed to create SD-Card filesystem";
+      return false;
+    }
     // Write the MBR after the filesystem is formatted, as the formatting tools
     // don't consistently preserve the image contents
     MasterBootRecord mbr = {
-      .partitions = {{
-        .partition_type = 0xC,
-        .first_lba = (std::uint32_t) offset_size_bytes / SECTOR_SIZE,
-        .num_sectors = (std::uint32_t) image_size_bytes / SECTOR_SIZE,
-      }},
-      .boot_signature = { 0x55, 0xAA },
+        .partitions = {{
+            .partition_type = 0xC,
+            .first_lba = (std::uint32_t) offset_size_bytes / SECTOR_SIZE,
+            .num_sectors = (std::uint32_t) image_size_bytes / SECTOR_SIZE,
+        }},
+        .boot_signature = {0x55, 0xAA},
     };
     auto fd = SharedFD::Open(image, O_RDWR);
     if (WriteAllBinary(fd, &mbr) != sizeof(MasterBootRecord)) {
       LOG(ERROR) << "Writing MBR to " << image << " failed:" << fd->StrError();
-      return;
+      return false;
     }
   } else if (image_fmt != "none") {
     LOG(WARNING) << "Unknown image format '" << image_fmt
                  << "' for " << image << ", treating as 'none'.";
   }
+  return true;
 }
 
-DataImageResult ApplyDataImagePolicy(const CuttlefishConfig& config,
-                                     const std::string& data_image) {
-  bool data_exists = FileHasContent(data_image.c_str());
-  bool remove{};
-  bool create{};
-  bool resize{};
-
-  if (config.data_policy() == kDataPolicyUseExisting) {
-    if (!data_exists) {
-      LOG(ERROR) << "Specified data image file does not exists: " << data_image;
-      return DataImageResult::Error;
-    }
-    if (config.blank_data_image_mb() > 0) {
-      LOG(ERROR) << "You should NOT use -blank_data_image_mb with -data_policy="
-                 << kDataPolicyUseExisting;
-      return DataImageResult::Error;
-    }
-    create = false;
-    remove = false;
-    resize = false;
-  } else if (config.data_policy() == kDataPolicyAlwaysCreate) {
-    remove = data_exists;
-    create = true;
-    resize = false;
-  } else if (config.data_policy() == kDataPolicyCreateIfMissing) {
-    create = !data_exists;
-    remove = false;
-    resize = false;
-  } else if (config.data_policy() == kDataPolicyResizeUpTo) {
-    create = false;
-    remove = false;
-    resize = true;
-  } else {
-    LOG(ERROR) << "Invalid data_policy: " << config.data_policy();
-    return DataImageResult::Error;
+std::string GetFsType(const std::string& path) {
+  std::string fs_type;
+  blkid_cache cache;
+  if (blkid_get_cache(&cache, NULL) < 0) {
+    LOG(INFO) << "blkid_get_cache failed";
+    return fs_type;
+  }
+  blkid_dev dev = blkid_get_dev(cache, path.c_str(), BLKID_DEV_NORMAL);
+  if (!dev) {
+    LOG(INFO) << "blkid_get_dev failed";
+    blkid_put_cache(cache);
+    return fs_type;
   }
 
-  if (remove) {
-    RemoveFile(data_image.c_str());
-  }
-
-  if (create) {
-    if (config.blank_data_image_mb() <= 0) {
-      LOG(ERROR) << "-blank_data_image_mb is required to create data image";
-      return DataImageResult::Error;
+  const char *type, *value;
+  blkid_tag_iterate iter = blkid_tag_iterate_begin(dev);
+  while (blkid_tag_next(iter, &type, &value) == 0) {
+    if (!strcmp(type, "TYPE")) {
+      fs_type = value;
     }
-    CreateBlankImage(data_image.c_str(), config.blank_data_image_mb(),
-                     config.blank_data_image_fmt());
-    return DataImageResult::FileUpdated;
-  } else if (resize) {
-    if (!data_exists) {
-      LOG(ERROR) << data_image << " does not exist, but resizing was requested";
-      return DataImageResult::Error;
-    }
-    bool success = ResizeImage(data_image.c_str(), config.blank_data_image_mb());
-    return success ? DataImageResult::FileUpdated : DataImageResult::Error;
-  } else {
-    LOG(DEBUG) << data_image << " exists. Not creating it.";
-    return DataImageResult::NoChange;
   }
+  blkid_tag_iterate_end(iter);
+  blkid_put_cache(cache);
+  return fs_type;
 }
 
-bool InitializeMiscImage(const std::string& misc_image) {
-  bool misc_exists = FileHasContent(misc_image.c_str());
+struct DataImageTag {};
 
-  if (misc_exists) {
-    LOG(DEBUG) << "misc partition image: use existing";
+class FixedDataImagePath : public DataImagePath {
+ public:
+  INJECT(FixedDataImagePath(ANNOTATED(DataImageTag, std::string) path))
+      : path_(path) {}
+
+  const std::string& Path() const override { return path_; }
+
+ private:
+  std::string path_;
+};
+
+fruit::Component<DataImagePath> FixedDataImagePathComponent(
+    const std::string* path) {
+  return fruit::createComponent()
+      .bind<DataImagePath, FixedDataImagePath>()
+      .bindInstance<fruit::Annotated<DataImageTag, std::string>>(*path);
+}
+
+class InitializeDataImageImpl : public InitializeDataImage {
+ public:
+  INJECT(InitializeDataImageImpl(const CuttlefishConfig& config,
+                                 DataImagePath& data_path))
+      : config_(config), data_path_(data_path) {}
+
+  // Feature
+  std::string Name() const override { return "InitializeDataImageImpl"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    auto action = ChooseAction();
+    if (!action.ok()) {
+      LOG(ERROR) << "Failed to select a userdata processing action: "
+                 << action.error();
+      return false;
+    }
+    auto result = EvaluateAction(*action);
+    if (!result.ok()) {
+      LOG(ERROR) << "Failed to evaluate userdata action: " << result.error();
+      return false;
+    }
     return true;
   }
 
-  LOG(DEBUG) << "misc partition image: creating empty";
-  CreateBlankImage(misc_image, 1 /* mb */, "none");
-  return true;
+ private:
+  enum class DataImageAction { kNoAction, kCreateImage, kResizeImage };
+
+  Result<DataImageAction> ChooseAction() {
+    if (config_.data_policy() == kDataPolicyAlwaysCreate) {
+      return DataImageAction::kCreateImage;
+    }
+    if (!FileHasContent(data_path_.Path())) {
+      if (config_.data_policy() == kDataPolicyUseExisting) {
+        return Error() << "A data image must exist to use -data_policy="
+                       << kDataPolicyUseExisting;
+      } else if (config_.data_policy() == kDataPolicyResizeUpTo) {
+        return Error() << data_path_.Path()
+                       << " does not exist, but resizing was requested";
+      }
+      return DataImageAction::kCreateImage;
+    }
+    if (GetFsType(data_path_.Path()) != config_.userdata_format()) {
+      if (config_.data_policy() == kDataPolicyResizeUpTo) {
+        return Error()
+               << "Changing the fs format is incompatible with -data_policy="
+               << kDataPolicyResizeUpTo;
+      }
+      return DataImageAction::kCreateImage;
+    }
+    if (config_.data_policy() == kDataPolicyResizeUpTo) {
+      return DataImageAction::kResizeImage;
+    }
+    return DataImageAction::kNoAction;
+  }
+
+  Result<void> EvaluateAction(DataImageAction action) {
+    switch (action) {
+      case DataImageAction::kNoAction:
+        LOG(DEBUG) << data_path_.Path() << " exists. Not creating it.";
+        return {};
+      case DataImageAction::kCreateImage: {
+        RemoveFile(data_path_.Path());
+        if (config_.blank_data_image_mb() == 0) {
+          return Error() << "Expected `-blank_data_image_mb` to be set for "
+                         << "image creation.";
+        }
+        bool success =
+            CreateBlankImage(data_path_.Path(), config_.blank_data_image_mb(),
+                             config_.userdata_format());
+        if (!success) {
+          return Error() << "Failed to create a blank image at \""
+                         << data_path_.Path() << "\" with size "
+                         << config_.blank_data_image_mb() << " and format \""
+                         << config_.userdata_format() << "\"";
+        }
+        return {};
+      }
+      case DataImageAction::kResizeImage: {
+        if (config_.blank_data_image_mb() == 0) {
+          return Error() << "Expected `-blank_data_image_mb` to be set for "
+                         << "image resizing.";
+        }
+        bool success = ResizeImage(config_, data_path_.Path(),
+                                   config_.blank_data_image_mb());
+        if (!success) {
+          return Error() << "Failed to resize \"" << data_path_.Path()
+                         << "\" to " << config_.blank_data_image_mb() << " MB";
+        }
+        return {};
+      }
+    }
+  }
+
+  const CuttlefishConfig& config_;
+  DataImagePath& data_path_;
+};
+
+fruit::Component<fruit::Required<const CuttlefishConfig, DataImagePath>,
+                 InitializeDataImage>
+InitializeDataImageComponent() {
+  return fruit::createComponent()
+      .addMultibinding<Feature, InitializeDataImage>()
+      .bind<InitializeDataImage, InitializeDataImageImpl>();
+}
+
+struct MiscImageTag {};
+
+class FixedMiscImagePath : public MiscImagePath {
+ public:
+  INJECT(FixedMiscImagePath(ANNOTATED(MiscImageTag, std::string) path))
+      : path_(path) {}
+
+  const std::string& Path() const override { return path_; }
+
+ private:
+  std::string path_;
+};
+
+class InitializeMiscImageImpl : public InitializeMiscImage {
+ public:
+  INJECT(InitializeMiscImageImpl(MiscImagePath& misc_path))
+      : misc_path_(misc_path) {}
+
+  // Feature
+  std::string Name() const override { return "InitializeMiscImageImpl"; }
+  bool Enabled() const override { return true; }
+
+ private:
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Setup() override {
+    bool misc_exists = FileHasContent(misc_path_.Path());
+
+    if (misc_exists) {
+      LOG(DEBUG) << "misc partition image: use existing at \""
+                 << misc_path_.Path() << "\"";
+      return true;
+    }
+
+    LOG(DEBUG) << "misc partition image: creating empty at \""
+               << misc_path_.Path() << "\"";
+    if (!CreateBlankImage(misc_path_.Path(), 1 /* mb */, "none")) {
+      LOG(ERROR) << "Failed to create misc image";
+      return false;
+    }
+    return true;
+  }
+
+ private:
+  MiscImagePath& misc_path_;
+};
+
+fruit::Component<MiscImagePath> FixedMiscImagePathComponent(
+    const std::string* path) {
+  return fruit::createComponent()
+      .bind<MiscImagePath, FixedMiscImagePath>()
+      .bindInstance<fruit::Annotated<MiscImageTag, std::string>>(*path);
+}
+
+fruit::Component<fruit::Required<MiscImagePath>, InitializeMiscImage>
+InitializeMiscImageComponent() {
+  return fruit::createComponent()
+      .addMultibinding<Feature, InitializeMiscImage>()
+      .bind<InitializeMiscImage, InitializeMiscImageImpl>();
+}
+
+struct EspImageTag {};
+struct KernelPathTag {};
+struct InitRamFsTag {};
+struct RootFsTag {};
+
+class InitializeEspImageImpl : public InitializeEspImage {
+ public:
+  INJECT(InitializeEspImageImpl(ANNOTATED(EspImageTag, std::string) esp_image,
+                                ANNOTATED(KernelPathTag, std::string)
+                                    kernel_path,
+                                ANNOTATED(InitRamFsTag, std::string)
+                                    initramfs_path,
+                                ANNOTATED(RootFsTag, std::string) rootfs_path))
+      : esp_image_(esp_image),
+        kernel_path_(kernel_path),
+        initramfs_path_(initramfs_path),
+        rootfs_path_(rootfs_path) {}
+
+  // Feature
+  std::string Name() const override { return "InitializeEspImageImpl"; }
+  std::unordered_set<Feature*> Dependencies() const override { return {}; }
+  bool Enabled() const override { return !rootfs_path_.empty(); }
+
+ protected:
+  bool Setup() override {
+    bool esp_exists = FileHasContent(esp_image_);
+    if (esp_exists) {
+      LOG(DEBUG) << "esp partition image: use existing";
+      return true;
+    }
+
+    LOG(DEBUG) << "esp partition image: creating default";
+
+    // newfs_msdos won't make a partition smaller than 257 mb
+    // this should be enough for anybody..
+    auto tmp_esp_image = esp_image_ + ".tmp";
+    if (!NewfsMsdos(tmp_esp_image, 257 /* mb */, 0 /* mb (offset) */)) {
+      LOG(ERROR) << "Failed to create filesystem for " << tmp_esp_image;
+      return false;
+    }
+
+    // For licensing and build reproducibility reasons, pick up the bootloaders
+    // from the host Linux distribution (if present) and pack them into the
+    // automatically generated ESP. If the user wants their own bootloaders,
+    // they can use -esp_image=/path/to/esp.img to override, so we don't need
+    // to accommodate customizations of this packing process.
+
+    // Currently we only support Debian based distributions, and GRUB is built
+    // for those distros to always load grub.cfg from EFI/debian/grub.cfg, and
+    // nowhere else. If you want to add support for other distros, make the
+    // extra directories below and copy the initial grub.cfg there as well
+    auto mmd = HostBinaryPath("mmd");
+    auto success =
+        execute({mmd, "-i", tmp_esp_image, "EFI", "EFI/BOOT", "EFI/debian"});
+    if (success != 0) {
+      LOG(ERROR) << "Failed to create directories in " << tmp_esp_image;
+      return false;
+    }
+
+    // The grub binaries are small, so just copy all the architecture blobs
+    // we can find, which minimizes complexity. If the user removed the grub bin
+    // package from their system, the ESP will be empty and Other OS will not be
+    // supported
+    auto mcopy = HostBinaryPath("mcopy");
+    bool copied = false;
+    for (auto grub : kGrubBlobTable) {
+      if (!FileExists(grub.first)) {
+        continue;
+      }
+      success = execute({mcopy, "-o", "-i", tmp_esp_image, "-s", grub.first,
+                         "::" + grub.second});
+      if (success != 0) {
+        LOG(ERROR) << "Failed to copy " << grub.first << " to " << grub.second
+                   << " in " << tmp_esp_image;
+        return false;
+      }
+      copied = true;
+    }
+
+    if (!copied) {
+      LOG(ERROR) << "No GRUB binaries were found on this system; Other OS "
+                    "support will be broken";
+      return false;
+    }
+
+    auto grub_cfg = DefaultHostArtifactsPath("etc/grub/grub.cfg");
+    CHECK(FileExists(grub_cfg)) << "Missing file " << grub_cfg << "!";
+    success =
+        execute({mcopy, "-i", tmp_esp_image, "-s", grub_cfg, "::EFI/debian/"});
+    if (success != 0) {
+      LOG(ERROR) << "Failed to copy " << grub_cfg << " to " << tmp_esp_image;
+      return false;
+    }
+
+    if (!kernel_path_.empty()) {
+      success = execute(
+          {mcopy, "-i", tmp_esp_image, "-s", kernel_path_, "::vmlinuz"});
+      if (success != 0) {
+        LOG(ERROR) << "Failed to copy " << kernel_path_ << " to "
+                   << tmp_esp_image;
+        return false;
+      }
+
+      if (!initramfs_path_.empty()) {
+        success = execute({mcopy, "-i", tmp_esp_image, "-s", initramfs_path_,
+                           "::initrd.img"});
+        if (success != 0) {
+          LOG(ERROR) << "Failed to copy " << initramfs_path_ << " to "
+                     << tmp_esp_image;
+          return false;
+        }
+      }
+    }
+
+    if (!cuttlefish::RenameFile(tmp_esp_image, esp_image_)) {
+      LOG(ERROR) << "Renaming " << tmp_esp_image << " to " << esp_image_
+                 << " failed";
+      return false;
+    }
+    return true;
+  }
+
+ private:
+  std::string esp_image_;
+  std::string kernel_path_;
+  std::string initramfs_path_;
+  std::string rootfs_path_;
+};
+
+fruit::Component<InitializeEspImage> InitializeEspImageComponent(
+    const std::string* esp_image, const std::string* kernel_path,
+    const std::string* initramfs_path, const std::string* rootfs_path) {
+  return fruit::createComponent()
+      .addMultibinding<Feature, InitializeEspImage>()
+      .bind<InitializeEspImage, InitializeEspImageImpl>()
+      .bindInstance<fruit::Annotated<EspImageTag, std::string>>(*esp_image)
+      .bindInstance<fruit::Annotated<KernelPathTag, std::string>>(*kernel_path)
+      .bindInstance<fruit::Annotated<InitRamFsTag, std::string>>(
+          *initramfs_path)
+      .bindInstance<fruit::Annotated<RootFsTag, std::string>>(*rootfs_path);
 }
 
 } // namespace cuttlefish
diff --git a/host/libs/config/data_image.h b/host/libs/config/data_image.h
index 6a6a810..c60ec51 100644
--- a/host/libs/config/data_image.h
+++ b/host/libs/config/data_image.h
@@ -1,21 +1,48 @@
 #pragma once
 
 #include <string>
+//
+#include <fruit/fruit.h>
 
 #include "host/libs/config/cuttlefish_config.h"
+#include "host/libs/config/feature.h"
 
 namespace cuttlefish {
 
-enum class DataImageResult {
-  Error,
-  NoChange,
-  FileUpdated,
+class DataImagePath {
+ public:
+  virtual ~DataImagePath() = default;
+  virtual const std::string& Path() const = 0;
 };
 
-DataImageResult ApplyDataImagePolicy(const CuttlefishConfig& config,
-                                     const std::string& path);
-bool InitializeMiscImage(const std::string& misc_image);
-void CreateBlankImage(
+class InitializeDataImage : public Feature {};
+
+fruit::Component<DataImagePath> FixedDataImagePathComponent(
+    const std::string* path);
+fruit::Component<fruit::Required<const CuttlefishConfig, DataImagePath>,
+                 InitializeDataImage>
+InitializeDataImageComponent();
+
+class InitializeEspImage : public Feature {};
+
+fruit::Component<InitializeEspImage> InitializeEspImageComponent(
+    const std::string* esp_image, const std::string* kernel_path,
+    const std::string* initramfs_path, const std::string* root_fs);
+
+bool CreateBlankImage(
     const std::string& image, int num_mb, const std::string& image_fmt);
 
+class MiscImagePath {
+ public:
+  virtual ~MiscImagePath() = default;
+  virtual const std::string& Path() const = 0;
+};
+
+class InitializeMiscImage : public Feature {};
+
+fruit::Component<MiscImagePath> FixedMiscImagePathComponent(
+    const std::string* path);
+fruit::Component<fruit::Required<MiscImagePath>, InitializeMiscImage>
+InitializeMiscImageComponent();
+
 } // namespace cuttlefish
diff --git a/host/libs/config/feature.cpp b/host/libs/config/feature.cpp
new file mode 100644
index 0000000..3604fb4
--- /dev/null
+++ b/host/libs/config/feature.cpp
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/libs/config/feature.h"
+
+#include <unordered_set>
+
+namespace cuttlefish {
+
+Feature::~Feature() {}
+
+/* static */ bool Feature::RunSetup(const std::vector<Feature*>& features) {
+  std::unordered_set<Feature*> enabled;
+  for (const auto& feature : features) {
+    CHECK(feature != nullptr) << "Received null feature";
+    if (feature->Enabled()) {
+      enabled.insert(feature);
+    }
+  }
+  // Collect these in a vector first to trigger any obvious dependency issues.
+  std::vector<Feature*> ordered_features;
+  auto add_feature = [&ordered_features](Feature* feature) -> bool {
+    ordered_features.push_back(feature);
+    return true;
+  };
+  if (!FeatureSuperclass<Feature>::TopologicalVisit(enabled, add_feature)) {
+    LOG(ERROR) << "Dependency issue detected, not performing any setup.";
+    return false;
+  }
+  // TODO(b/189153501): This can potentially be parallelized.
+  for (auto& feature : ordered_features) {
+    LOG(DEBUG) << "Running setup for " << feature->Name();
+    if (!feature->Setup()) {
+      LOG(ERROR) << "Setup failed for " << feature->Name();
+      return false;
+    }
+  }
+  return true;
+}
+
+bool FlagFeature::ProcessFlags(const std::vector<FlagFeature*>& features,
+                               std::vector<std::string>& flags) {
+  std::unordered_set<FlagFeature*> features_set(features.begin(),
+                                                features.end());
+  if (features_set.count(nullptr)) {
+    LOG(ERROR) << "Received null feature";
+    return false;
+  }
+  auto handle = [&flags](FlagFeature* feature) -> bool {
+    return feature->Process(flags);
+  };
+  if (!FeatureSuperclass<FlagFeature>::TopologicalVisit(features_set, handle)) {
+    LOG(ERROR) << "Unable to parse flags.";
+    return false;
+  }
+  return true;
+}
+
+bool FlagFeature::WriteGflagsHelpXml(const std::vector<FlagFeature*>& features,
+                                     std::ostream& out) {
+  // Lifted from external/gflags/src/gflags_reporting.cc:ShowXMLOfFlags
+  out << "<?xml version=\"1.0\"?>\n";
+  out << "<AllFlags>\n";
+  out << "  <program>program</program>\n";
+  out << "  <usage>usage</usage>\n";
+  for (const auto& feature : features) {
+    if (!feature) {
+      LOG(ERROR) << "Received null feature";
+      return false;
+    }
+    if (!feature->WriteGflagsCompatHelpXml(out)) {
+      LOG(ERROR) << "Failure to write xml";
+      return false;
+    }
+  }
+  out << "</AllFlags>";
+  return true;
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/feature.h b/host/libs/config/feature.h
new file mode 100644
index 0000000..02d1542
--- /dev/null
+++ b/host/libs/config/feature.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+#pragma once
+
+#include <android-base/logging.h>
+#include <ostream>
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+
+namespace cuttlefish {
+
+// TODO(schuffelen): Rename this "Feature"
+template <typename Subclass>
+class FeatureSuperclass {
+ public:
+  virtual ~FeatureSuperclass() = default;
+
+  virtual std::string Name() const = 0;
+
+  static bool TopologicalVisit(const std::unordered_set<Subclass*>& features,
+                               const std::function<bool(Subclass*)>& callback);
+
+ private:
+  virtual std::unordered_set<Subclass*> Dependencies() const = 0;
+};
+
+// TODO(schuffelen): Rename this "SetupFeature"
+class Feature : public virtual FeatureSuperclass<Feature> {
+ public:
+  virtual ~Feature();
+
+  static bool RunSetup(const std::vector<Feature*>& features);
+
+  virtual bool Enabled() const = 0;
+
+ private:
+  virtual bool Setup() = 0;
+};
+
+class FlagFeature : public FeatureSuperclass<FlagFeature> {
+ public:
+  static bool ProcessFlags(const std::vector<FlagFeature*>& features,
+                           std::vector<std::string>& flags);
+  static bool WriteGflagsHelpXml(const std::vector<FlagFeature*>& features,
+                                 std::ostream& out);
+
+ private:
+  // Must be executed in dependency order following Dependencies(). Expected to
+  // mutate the `flags` argument to remove handled flags, and possibly introduce
+  // new flag values (e.g. from a file).
+  virtual bool Process(std::vector<std::string>& flags) = 0;
+
+  // TODO(schuffelen): Migrate the xml help to human-readable help output after
+  // the gflags migration is done.
+
+  // Write an xml fragment that is compatible with gflags' `--helpxml` format.
+  virtual bool WriteGflagsCompatHelpXml(std::ostream& out) const = 0;
+};
+
+template <typename Subclass>
+bool FeatureSuperclass<Subclass>::TopologicalVisit(
+    const std::unordered_set<Subclass*>& features,
+    const std::function<bool(Subclass*)>& callback) {
+  enum class Status { UNVISITED, VISITING, VISITED };
+  std::unordered_map<Subclass*, Status> features_status;
+  for (const auto& feature : features) {
+    features_status[feature] = Status::UNVISITED;
+  }
+  std::function<bool(Subclass*)> visit;
+  visit = [&callback, &features_status, &visit](Subclass* feature) -> bool {
+    if (features_status.count(feature) == 0) {
+      LOG(ERROR) << "Dependency edge to " << feature->Name() << " but it is not"
+                 << " part of the feature graph. This feature is either "
+                 << "disabled or not correctly registered.";
+      return false;
+    } else if (features_status[feature] == Status::VISITED) {
+      return true;
+    } else if (features_status[feature] == Status::VISITING) {
+      LOG(ERROR) << "Cycle detected while visiting " << feature->Name();
+      return false;
+    }
+    features_status[feature] = Status::VISITING;
+    for (const auto& dependency : feature->Dependencies()) {
+      CHECK(dependency != nullptr)
+          << "Feature " << feature->Name() << " has a null dependency.";
+      if (!visit(dependency)) {
+        LOG(ERROR) << "Error detected while visiting " << feature->Name();
+        return false;
+      }
+    }
+    features_status[feature] = Status::VISITED;
+    if (!callback(feature)) {
+      LOG(ERROR) << "Callback error on " << feature->Name();
+      return false;
+    }
+    return true;
+  };
+  for (const auto& feature : features) {
+    if (!visit(feature)) {  // `visit` will log the error chain.
+      return false;
+    }
+  }
+  return true;
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/inject.h b/host/libs/config/inject.h
new file mode 100644
index 0000000..4e2a6e0
--- /dev/null
+++ b/host/libs/config/inject.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <fruit/fruit.h>
+#include <type_traits>
+
+namespace cuttlefish {
+
+/**
+ * This is a template helper to add bindings for a set of implementation
+ * classes that may each be part of multiple multibindings. To be more specific,
+ * for these example classes:
+ *
+ *   class ImplementationA : public IntX, IntY {};
+ *   class ImplementationB : public IntY, IntZ {};
+ *
+ * can be installed with
+ *
+ *   using Deps = fruit::Required<...>;
+ *   using Bases = Multibindings<Deps>::Bases<IntX, IntY, IntZ>;
+ *   return fruit::createComponent()
+ *     .install(Bases::Impls<ImplementationA, ImplementationB>);
+ *
+ * Note that not all implementations have to implement all interfaces. Invalid
+ * combinations are filtered out at compile-time through SFINAE.
+ */
+template <typename Deps>
+struct Multibindings {
+  /* SFINAE logic for an individual interface binding. The class does implement
+   * the interface, so add a multibinding. */
+  template <typename Base, typename Impl,
+            std::enable_if_t<std::is_base_of<Base, Impl>::value, bool> = true>
+  static fruit::Component<Deps> OneBaseOneImpl() {
+    return fruit::createComponent().addMultibinding<Base, Impl>();
+  }
+  /* SFINAE logic for an individual interface binding. The class does not
+   * implement the interface, so do not add a multibinding. */
+  template <typename Base, typename Impl,
+            std::enable_if_t<!std::is_base_of<Base, Impl>::value, bool> = true>
+  static fruit::Component<Deps> OneBaseOneImpl() {
+    return fruit::createComponent();
+  }
+
+  template <typename Base>
+  struct OneBase {
+    template <typename... ImplTypes>
+    static fruit::Component<Deps> Impls() {
+      return fruit::createComponent().installComponentFunctions(
+          fruit::componentFunction(OneBaseOneImpl<Base, ImplTypes>)...);
+    }
+  };
+
+  template <typename... BaseTypes>
+  struct Bases {
+    template <typename... ImplTypes>
+    static fruit::Component<Deps> Impls() {
+      return fruit::createComponent().installComponentFunctions(
+          fruit::componentFunction(
+              OneBase<BaseTypes>::template Impls<ImplTypes...>)...);
+    }
+  };
+};
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/kernel_args.cpp b/host/libs/config/kernel_args.cpp
index f5393d5..9a1277d 100644
--- a/host/libs/config/kernel_args.cpp
+++ b/host/libs/config/kernel_args.cpp
@@ -58,6 +58,8 @@
         // Crosvm ARM only supports earlycon uart over mmio.
         vm_manager_cmdline.push_back(" earlycon=uart8250,mmio,0x3f8");
       }
+      // Cuttlefish does not use CMA, so don't reserve RAM for it
+      vm_manager_cmdline.push_back(" cma=0");
     } else {
       // To update the uart8250 address:
       // $ qemu-system-x86_64 -kernel bzImage -serial stdio | grep ttyS0
@@ -80,7 +82,7 @@
         vm_manager_cmdline.push_back("ramoops.dump_oops=1");
       } else {
         // crosvm requires these additional parameters on x86_64 in bootloader mode
-        AppendVector(&vm_manager_cmdline, {"reboot=k"});
+        AppendVector(&vm_manager_cmdline, {"acpi=noirq", "reboot=k"});
       }
     }
   }
@@ -100,12 +102,6 @@
 
   AppendVector(&kernel_cmdline, VmManagerKernelCmdline(config));
 
-  if (config.enable_gnss_grpc_proxy()) {
-    kernel_cmdline.push_back("gnss_cmdline.serdev=serial8250/serial0/serial0-0");
-    kernel_cmdline.push_back("gnss_cmdline.type=0");
-    kernel_cmdline.push_back("serdev_ttyport.pdev_tty_port=ttyS1");
-  }
-
   if (config.guest_audit_security()) {
     kernel_cmdline.push_back("audit=1");
   } else {
diff --git a/guest/hals/audio/Android.bp b/host/libs/config/kernel_log_pipe_provider.h
similarity index 62%
copy from guest/hals/audio/Android.bp
copy to host/libs/config/kernel_log_pipe_provider.h
index c6faae7..f7cc20b 100644
--- a/guest/hals/audio/Android.bp
+++ b/host/libs/config/kernel_log_pipe_provider.h
@@ -1,3 +1,4 @@
+//
 // Copyright (C) 2019 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,16 +13,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
+#pragma once
 
-cc_library_shared {
-    name: "audio.primary.cutf",
-    relative_install_path: "hw",
-    defaults: ["cuttlefish_guest_only"],
-    vendor: true,
-    srcs: ["audio_hw.c"],
-    cflags: ["-Wno-unused-parameter"],
-    shared_libs: ["libcutils", "libhardware", "liblog", "libtinyalsa"],
-}
+#include <fruit/fruit.h>
+#include <vector>
+
+#include "common/libs/fs/shared_fd.h"
+
+namespace cuttlefish {
+
+class KernelLogPipeProvider : public virtual Feature {
+ public:
+  virtual ~KernelLogPipeProvider() = default;
+  virtual SharedFD KernelLogPipe() = 0;
+};
+
+}  // namespace cuttlefish
diff --git a/host/libs/config/known_paths.cpp b/host/libs/config/known_paths.cpp
index 1581a06..5a457e6 100644
--- a/host/libs/config/known_paths.cpp
+++ b/host/libs/config/known_paths.cpp
@@ -64,6 +64,11 @@
   return HostBinaryPath("tombstone_receiver");
 }
 
+std::string VehicleHalGrpcServerBinary() {
+  return HostBinaryPath(
+      "android.hardware.automotive.vehicle@2.0-virtualization-grpc-server");
+}
+
 std::string WebRtcBinary() {
   return HostBinaryPath("webRTC");
 }
@@ -72,8 +77,14 @@
   return HostBinaryPath("webrtc_operator");
 }
 
-std::string VncServerBinary() {
-  return HostBinaryPath("vnc_server");
+std::string WebRtcSigServerProxyBinary() {
+  return HostBinaryPath("operator_proxy");
+}
+
+std::string WmediumdBinary() { return HostBinaryPath("wmediumd"); }
+
+std::string WmediumdGenConfigBinary() {
+  return HostBinaryPath("wmediumd_gen_config");
 }
 
 } // namespace cuttlefish
diff --git a/host/libs/config/known_paths.h b/host/libs/config/known_paths.h
index 71b6253..8c39e61 100644
--- a/host/libs/config/known_paths.h
+++ b/host/libs/config/known_paths.h
@@ -30,8 +30,11 @@
 std::string RootCanalBinary();
 std::string SocketVsockProxyBinary();
 std::string TombstoneReceiverBinary();
+std::string VehicleHalGrpcServerBinary();
 std::string WebRtcBinary();
 std::string WebRtcSigServerBinary();
-std::string VncServerBinary();
+std::string WebRtcSigServerProxyBinary();
+std::string WmediumdBinary();
+std::string WmediumdGenConfigBinary();
 
 } // namespace cuttlefish
diff --git a/host/libs/confui/Android.bp b/host/libs/confui/Android.bp
index b74eb24..d51c738 100644
--- a/host/libs/confui/Android.bp
+++ b/host/libs/confui/Android.bp
@@ -32,11 +32,13 @@
 cc_library_static {
     name: "libcuttlefish_confui_host",
     srcs: [
+        "cbor.cc",
         "host_renderer.cc",
         "host_server.cc",
         "host_utils.cc",
         "server_common.cc",
         "session.cc",
+        "sign.cc",
         "fonts.S",
     ],
     shared_libs: [
@@ -44,6 +46,8 @@
         "libbase",
         "libjsoncpp",
         "liblog",
+        "libcrypto",
+        "[email protected]",
     ],
     header_libs: [
         "libcuttlefish_confui_host_headers",
diff --git a/host/libs/confui/cbor.cc b/host/libs/confui/cbor.cc
new file mode 100644
index 0000000..66ced51
--- /dev/null
+++ b/host/libs/confui/cbor.cc
@@ -0,0 +1,210 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/libs/confui/cbor.h"
+
+#include <algorithm>
+
+namespace cuttlefish {
+namespace confui {
+bool Cbor::WriteBytes(uint64_t value, uint8_t size) {
+  if (!IsOk()) {
+    return false;
+  }
+
+  if (formatted_message_buffer_.size() + size >= kMax) {
+    buffer_status_ = Cbor::Error::OUT_OF_DATA;
+    return false;
+  }
+
+  switch (size) {
+    case 8:
+      formatted_message_buffer_.emplace_back(getByte(value, 7));
+      formatted_message_buffer_.emplace_back(getByte(value, 6));
+      formatted_message_buffer_.emplace_back(getByte(value, 5));
+      formatted_message_buffer_.emplace_back(getByte(value, 4));
+      [[fallthrough]];
+    case 4:
+      formatted_message_buffer_.emplace_back(getByte(value, 3));
+      formatted_message_buffer_.emplace_back(getByte(value, 2));
+      [[fallthrough]];
+    case 2:
+      formatted_message_buffer_.emplace_back(getByte(value, 1));
+      [[fallthrough]];
+    case 1:
+      formatted_message_buffer_.emplace_back(value);
+      break;
+    case 0:
+      break;
+    default:
+      buffer_status_ = Cbor::Error::MALFORMED;
+      return false;
+  }
+  return true;
+}
+
+// TODO(kwstephenkim): replace these using cbor libraries under external
+bool Cbor::WriteHeader(const Cbor::Type type, const std::uint64_t value) {
+  /**
+   * reference implementation is, as of 08/30/2021, here:
+   *
+   * https://cs.android.com/android/platform/superproject/+/master:hardware/interfaces/confirmationui/support/src/cbor.cpp;drc=master;bpv=0;bpt=1;l=58
+   *
+   */
+  if (!IsOk()) {
+    return false;
+  }
+
+  enum class Condition { k24, k0x100, k0x10000, k0x100000000, kBeyond };
+  std::map<Condition, const std::uint8_t> bits_to_set = {
+      {Condition::k24, static_cast<uint8_t>(value)},
+      {Condition::k0x100, 24},
+      {Condition::k0x10000, 25},
+      {Condition::k0x100000000, 26},
+      {Condition::kBeyond, 27}};
+  std::map<Condition, int> optional_byte_size = {{Condition::k24, 0},
+                                                 {Condition::k0x100, 1},
+                                                 {Condition::k0x10000, 2},
+                                                 {Condition::k0x100000000, 4},
+                                                 {Condition::kBeyond, 8}};
+  Condition cond = Condition::k24;
+
+  if (value < 24) {
+    cond = Condition::k24;
+  } else if (value < 0x100) {
+    cond = Condition::k0x100;
+  } else if (value < 0x10000) {
+    cond = Condition::k0x10000;
+  } else if (value < 0x100000000) {
+    cond = Condition::k0x100000000;
+  } else {
+    cond = Condition::kBeyond;
+  }
+
+  // see if we have rooms. 1 byte for the mandatory byte in the header
+  // n bytes for optional bytes in the header
+  if (formatted_message_buffer_.size() + optional_byte_size[cond] + 1 > kMax) {
+    buffer_status_ = Cbor::Error::OUT_OF_DATA;
+    return false;
+  }
+
+  std::uint8_t header = (static_cast<uint8_t>(type) << 5) | bits_to_set[cond];
+  formatted_message_buffer_.emplace_back(header);
+  return WriteBytes(value, optional_byte_size[cond]);
+}
+
+void Cbor::Init() {
+  // reference implementation was available in:
+  //  1.0/generic/GenericOperation.h
+  // See class template Operation, and its init()
+
+  /*
+   * formatted_message_buffer_ will be:
+   *   header followed by std::string("prompt") followed by prompt_text_ (no
+   * null char) followed by std::string("extra") followed by extra_data_ (no
+   * ending null, surely)
+   *
+   */
+  if (!WriteHeader(Type::MAP, 2)) {
+    return;
+  }
+  const std::string prompt("prompt");
+  const std::string extra("extra");
+
+  (WriteTextToBuffer(prompt) && WriteTextToBuffer(prompt_text_) &&
+   WriteTextToBuffer(extra) && WriteBytesToBuffer(extra_data_));
+}
+
+bool Cbor::WriteTextToBuffer(const std::string& text) {
+  // write(WriteState, const StringBuffer<T, TextStr>() is ported here
+  if (!IsOk() || !WriteHeader(Type::TEXT_STRING, text.size())) {
+    return false;
+  }
+  buffer_status_ = CheckUTF8Copy(text);
+  return IsOk();
+}
+
+bool Cbor::WriteBytesToBuffer(const std::vector<std::uint8_t>& bytes) {
+  if (!IsOk() || !WriteHeader(Type::BYTE_STRING, bytes.size())) {
+    return false;
+  }
+  if (formatted_message_buffer_.size() + bytes.size() >= kMax) {
+    buffer_status_ = Cbor::Error::OUT_OF_DATA;
+    return false;
+  }
+  formatted_message_buffer_.insert(formatted_message_buffer_.end(),
+                                   std::begin(bytes), std::end(bytes));
+  return true;
+}
+
+Cbor::Error Cbor::CheckUTF8Copy(const std::string& text) {
+  auto begin = text.cbegin();
+  auto end = text.cend();
+
+  if (!IsOk()) {
+    return buffer_status_;
+  }
+
+  uint32_t multi_byte_length = 0;
+  Cbor::Error err_code = buffer_status_;  // OK
+
+  while (begin != end) {
+    if (multi_byte_length) {
+      // parsing multi byte character - must start with 10xxxxxx
+      --multi_byte_length;
+      if ((*begin & 0xc0) != 0x80) {
+        return Cbor::Error::MALFORMED_UTF8;
+      }
+    } else if (!((*begin) & 0x80)) {
+      // 7bit character -> nothing to be done
+    } else {
+      // msb is set and we were not parsing a multi byte character
+      // so this must be a header byte
+      char c = *begin << 1;
+      while (c & 0x80) {
+        ++multi_byte_length;
+        c <<= 1;
+      }
+      // headers of the form 10xxxxxx are not allowed
+      if (multi_byte_length < 1) {
+        return Cbor::Error::MALFORMED_UTF8;
+      }
+      // chars longer than 4 bytes are not allowed (multi_byte_length does not
+      // count the header thus > 3
+      if (multi_byte_length > 3) {
+        return Cbor::Error::MALFORMED_UTF8;
+      }
+    }
+
+    if (formatted_message_buffer_.size() < kMax) {
+      formatted_message_buffer_.emplace_back(
+          static_cast<const std::uint8_t>(*begin));
+      begin++;
+    } else {
+      // not returning with this error to be consistent with the reference
+      // implementation
+      err_code = Cbor::Error::OUT_OF_DATA;
+    }
+  }
+  // if the string ends in the middle of a multi byte char it is invalid
+  if (multi_byte_length) {
+    return Cbor::Error::MALFORMED_UTF8;
+  }
+  return err_code;
+}
+
+}  // end of namespace confui
+}  // end of namespace cuttlefish
diff --git a/host/libs/confui/cbor.h b/host/libs/confui/cbor.h
new file mode 100644
index 0000000..1870dd6
--- /dev/null
+++ b/host/libs/confui/cbor.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <cstdint>
+#include <string>
+#include <vector>
+
+#include <android/hardware/keymaster/4.0/types.h>
+
+namespace cuttlefish {
+namespace confui {
+
+/** take prompt_text_, extra_data
+ * returns "message"
+ * using "message", communicating with host keymaster,
+ * returns signed confirmation when appropriate
+ */
+class Cbor {
+  // TODO(kwstephenkim): replace this using cbor libraries under external
+  enum class Error : uint32_t {
+    OK = 0,
+    OUT_OF_DATA = 1,
+    MALFORMED = 2,
+    MALFORMED_UTF8 = 3,
+  };
+
+  enum class MessageSize : uint32_t { MAX = 6144u };
+
+  enum class Type : uint8_t {
+    NUMBER = 0,
+    NEGATIVE = 1,
+    BYTE_STRING = 2,
+    TEXT_STRING = 3,
+    ARRAY = 4,
+    MAP = 5,
+    TAG = 6,
+    FLOAT = 7,
+  };
+
+ public:
+  using HardwareAuthToken =
+      android::hardware::keymaster::V4_0::HardwareAuthToken;
+  Cbor(const std::string& prompt_text,
+       const std::vector<std::uint8_t>& extra_data)
+      : prompt_text_(prompt_text),
+        extra_data_(extra_data),
+        buffer_status_{Error::OK} {
+    Init();
+  }
+
+  bool IsOk() const { return buffer_status_ == Error::OK; }
+  Error GetErrorCode() const { return buffer_status_; }
+  bool IsMessageTooLong() const { return buffer_status_ == Error::OUT_OF_DATA; }
+  bool IsMalformedUtf8() const {
+    return buffer_status_ == Error::MALFORMED_UTF8;
+  }
+  std::vector<std::uint8_t>&& GetMessage() {
+    return std::move(formatted_message_buffer_);
+  }
+  const std::uint32_t kMax = static_cast<std::uint32_t>(MessageSize::MAX);
+
+ private:
+  std::string prompt_text_;
+  std::vector<std::uint8_t> extra_data_;
+
+  // should be shorter than or equal to buf[std::uint32_t(MessageSize::MAX)]
+  std::vector<std::uint8_t> formatted_message_buffer_;
+  Error buffer_status_;
+  void Init();
+  /**
+   * formatted_message_buffer_.emplace_back(created_header)
+   */
+  bool WriteHeader(const Cbor::Type type, const std::uint64_t value);
+  bool WriteTextToBuffer(const std::string& text);
+  bool WriteBytesToBuffer(const std::vector<std::uint8_t>& bytes);
+
+  inline uint8_t getByte(const uint64_t& v, const uint8_t index) {
+    return v >> (index * 8);
+  }
+  bool WriteBytes(uint64_t value, uint8_t size);
+  Error CheckUTF8Copy(const std::string& text);
+};
+}  // namespace confui
+}  // end of namespace cuttlefish
diff --git a/host/libs/confui/host_mode_ctrl.h b/host/libs/confui/host_mode_ctrl.h
index 7cf991c..bf8b575 100644
--- a/host/libs/confui/host_mode_ctrl.h
+++ b/host/libs/confui/host_mode_ctrl.h
@@ -30,7 +30,7 @@
  * mechanism to orchestrate concurrent executions of threads
  * that work for screen connector
  *
- * Within VNC or WebRTC service, it tells when it is now in the Android Mode or
+ * Within WebRTC service, it tells when it is now in the Android Mode or
  * Confirmation UI mode
  */
 class HostModeCtrl {
@@ -76,14 +76,14 @@
 
   void SetMode(const ModeType mode) {
     ConfUiLog(DEBUG) << cuttlefish::confui::thread::GetName()
-                     << "tries to acquire the lock in SetMode";
+                     << " tries to acquire the lock in SetMode";
     std::lock_guard<std::mutex> lock(mode_mtx_);
     ConfUiLog(DEBUG) << cuttlefish::confui::thread::GetName()
-                     << "acquired the lock in SetMode";
+                     << " acquired the lock in SetMode";
     atomic_mode_ = mode;
     if (atomic_mode_ == ModeType::kAndroidMode) {
       ConfUiLog(DEBUG) << cuttlefish::confui::thread::GetName()
-                       << "signals kAndroidMode in SetMode";
+                       << " signals kAndroidMode in SetMode";
       and_mode_cv_.notify_all();
       return;
     }
diff --git a/host/libs/confui/host_renderer.cc b/host/libs/confui/host_renderer.cc
index f3e0c52..a7dac6a 100644
--- a/host/libs/confui/host_renderer.cc
+++ b/host/libs/confui/host_renderer.cc
@@ -31,31 +31,56 @@
   return result << shift;
 }
 
-ConfUiRenderer::ConfUiRenderer(const std::uint32_t display)
-    : display_num_(display),
-      lang_id_{"en"},
-      prompt_("Am I Yumi Meow?"),
-      current_height_(ScreenConnectorInfo::ScreenHeight(display_num_)),
-      current_width_(ScreenConnectorInfo::ScreenWidth(display_num_)),
-      color_bg_{kColorBackground},
-      color_text_{kColorDisabled},
-      shield_color_{kColorShield},
-      is_inverted_{false},
-      ctx_{GetDeviceContext()} {
-  auto opted_frame = RepaintRawFrame(prompt_, lang_id_);
-  if (opted_frame) {
-    raw_frame_ = std::move(opted_frame.value());
+std::unique_ptr<ConfUiRenderer> ConfUiRenderer::GenerateRenderer(
+    const std::uint32_t display, const std::string& confirmation_msg,
+    const std::string& locale, const bool inverted, const bool magnified) {
+  ConfUiRenderer* raw_ptr = new ConfUiRenderer(display, confirmation_msg,
+                                               locale, inverted, magnified);
+  if (raw_ptr && raw_ptr->IsSetUpSuccessful()) {
+    return std::unique_ptr<ConfUiRenderer>(raw_ptr);
   }
+  return nullptr;
 }
 
-void ConfUiRenderer::SetConfUiMessage(const std::string& msg) {
-  prompt_ = msg;
-  SetText<LabelConfMsg>(msg);
+/**
+ * device configuration
+ *
+ * ctx_{# of pixels in 1 mm, # of pixels per 1 density independent pixels}
+ *
+ * The numbers are, however, to fit for the host webRTC local/remote clients
+ * in general, not necessarily the supposedly guest device (e.g. Auto, phone,
+ * etc)
+ *
+ */
+ConfUiRenderer::ConfUiRenderer(const std::uint32_t display,
+                               const std::string& confirmation_msg,
+                               const std::string& locale, const bool inverted,
+                               const bool magnified)
+    : display_num_{display},
+      lang_id_{locale},
+      prompt_text_{confirmation_msg},
+      current_height_{ScreenConnectorInfo::ScreenHeight(display_num_)},
+      current_width_{ScreenConnectorInfo::ScreenWidth(display_num_)},
+      is_inverted_(inverted),
+      is_magnified_(magnified),
+      ctx_(6.45211, 400.0 / 412.0),
+      is_setup_well_(false) {
+  SetDeviceContext(current_width_, current_height_, is_inverted_,
+                   is_magnified_);
+  layout_ = teeui::instantiateLayout(teeui::ConfUILayout(), ctx_);
+
+  if (auto error = UpdateLocale()) {
+    ConfUiLog(ERROR) << "Update Translation Error: " << Enum2Base(error.code());
+    // is_setup_well_ = false;
+    return;
+  }
+  UpdateColorScheme(is_inverted_);
+  SetText<LabelConfMsg>(prompt_text_);
+  is_setup_well_ = true;
 }
 
-teeui::Error ConfUiRenderer::SetLangId(const std::string& lang_id) {
+teeui::Error ConfUiRenderer::UpdateLocale() {
   using teeui::Error;
-  lang_id_ = lang_id;
   teeui::localization::selectLangId(lang_id_.c_str());
   if (auto error = UpdateTranslations()) {
     return error;
@@ -63,14 +88,25 @@
   return Error::OK;
 }
 
+template <typename Label>
+teeui::Error ConfUiRenderer::UpdateString() {
+  using namespace teeui;
+  const char* str;
+  auto& label = std::get<Label>(layout_);
+  str = localization::lookup(TranslationId(label.textId()));
+  if (str == nullptr) {
+    ConfUiLog(ERROR) << "Given translation_id" << label.textId() << "not found";
+    return Error::Localization;
+  }
+  label.setText({str, str + strlen(str)});
+  return Error::OK;
+}
+
 teeui::Error ConfUiRenderer::UpdateTranslations() {
   using namespace teeui;
   if (auto error = UpdateString<LabelOK>()) {
     return error;
   }
-  if (auto error = UpdateString<LabelOK>()) {
-    return error;
-  }
   if (auto error = UpdateString<LabelCancel>()) {
     return error;
   }
@@ -83,41 +119,41 @@
   return Error::OK;
 }
 
-teeui::context<teeui::ConUIParameters> ConfUiRenderer::GetDeviceContext() {
+void ConfUiRenderer::SetDeviceContext(const unsigned long long w,
+                                      const unsigned long long h,
+                                      const bool is_inverted,
+                                      const bool is_magnified) {
   using namespace teeui;
-  const unsigned long long w = ScreenConnectorInfo::ScreenWidth(display_num_);
-  const unsigned long long h = ScreenConnectorInfo::ScreenHeight(display_num_);
   const auto screen_width = operator""_px(w);
   const auto screen_height = operator""_px(h);
-  context<teeui::ConUIParameters> ctx(6.45211, 400.0 / 412.0);
-  ctx.setParam<RightEdgeOfScreen>(screen_width);
-  ctx.setParam<BottomOfScreen>(screen_height);
-  ctx.setParam<PowerButtonTop>(20.26_mm);
-  ctx.setParam<PowerButtonBottom>(30.26_mm);
-  ctx.setParam<VolUpButtonTop>(40.26_mm);
-  ctx.setParam<VolUpButtonBottom>(50.26_mm);
-  ctx.setParam<DefaultFontSize>(14_dp);
-  ctx.setParam<BodyFontSize>(16_dp);
-  return ctx;
-}
-
-bool ConfUiRenderer::InitLayout(const std::string& lang_id) {
-  layout_ = teeui::instantiateLayout(teeui::ConfUILayout(), ctx_);
-  SetLangId(lang_id);
-  if (auto error = UpdateTranslations()) {
-    ConfUiLog(ERROR) << "Update Translation Error";
-    return false;
+  ctx_.setParam<RightEdgeOfScreen>(pxs(screen_width));
+  ctx_.setParam<BottomOfScreen>(pxs(screen_height));
+  if (is_magnified) {
+    ctx_.setParam<DefaultFontSize>(18_dp);
+    ctx_.setParam<BodyFontSize>(20_dp);
+  } else {
+    ctx_.setParam<DefaultFontSize>(14_dp);
+    ctx_.setParam<BodyFontSize>(16_dp);
   }
-  UpdateColorScheme(&ctx_);
-  return true;
+  if (is_inverted) {
+    ctx_.setParam<ShieldColor>(kColorShieldInv);
+    ctx_.setParam<ColorText>(kColorTextInv);
+    ctx_.setParam<ColorBG>(kColorBackgroundInv);
+    ctx_.setParam<ColorButton>(kColorShieldInv);
+  } else {
+    ctx_.setParam<ShieldColor>(kColorShield);
+    ctx_.setParam<ColorText>(kColorText);
+    ctx_.setParam<ColorBG>(kColorBackground);
+    ctx_.setParam<ColorButton>(kColorShield);
+  }
 }
 
-teeui::Error ConfUiRenderer::UpdatePixels(TeeUiFrame& raw_frame,
+teeui::Error ConfUiRenderer::UpdatePixels(TeeUiFrameWrapper& raw_frame,
                                           std::uint32_t x, std::uint32_t y,
                                           teeui::Color color) {
   auto buffer = raw_frame.data();
-  const auto height = ScreenConnectorInfo::ScreenHeight(display_num_);
-  const auto width = ScreenConnectorInfo::ScreenWidth(display_num_);
+  const auto height = raw_frame.Height();
+  const auto width = raw_frame.Width();
   auto pos = width * y + x;
   if (pos >= (height * width)) {
     ConfUiLog(ERROR) << "Rendering Out of Bound";
@@ -131,114 +167,69 @@
   return teeui::Error::OK;
 }
 
-std::tuple<TeeUiFrame&, bool> ConfUiRenderer::RenderRawFrame(
-    const std::string& confirmation_msg, const std::string& lang_id) {
+void ConfUiRenderer::UpdateColorScheme(const bool is_inverted) {
+  using namespace teeui;
+  color_text_ = is_inverted ? kColorDisabledInv : kColorDisabled;
+  shield_color_ = is_inverted ? kColorShieldInv : kColorShield;
+  color_bg_ = is_inverted ? kColorBackgroundInv : kColorBackground;
+
+  ctx_.setParam<ShieldColor>(shield_color_);
+  ctx_.setParam<ColorText>(color_text_);
+  ctx_.setParam<ColorBG>(color_bg_);
+  return;
+}
+
+std::shared_ptr<TeeUiFrameWrapper> ConfUiRenderer::RenderRawFrame() {
   /* we repaint only if one or more of the followng meet:
    *
    *  1. raw_frame_ is empty
    *  2. the current_width_ and current_height_ is out of date
-   *  3. lang_id is different (e.g. new locale)
    *
-   *  in the future, maybe you wanna inverted, new background, etc?
    */
-  if (lang_id != lang_id_ || !IsFrameReady() ||
-      current_height_ != ScreenConnectorInfo::ScreenHeight(display_num_) ||
-      current_width_ != ScreenConnectorInfo::ScreenWidth(display_num_)) {
-    auto opted_new_frame = RepaintRawFrame(confirmation_msg, lang_id_);
-    if (opted_new_frame) {
-      // repainting from the scratch successful in a new frame
-      raw_frame_ = std::move(opted_new_frame.value());
-      return {raw_frame_, true};
+  const int w = ScreenConnectorInfo::ScreenWidth(display_num_);
+  const int h = ScreenConnectorInfo::ScreenHeight(display_num_);
+  if (!IsFrameReady() || current_height_ != h || current_width_ != w) {
+    auto new_frame = RepaintRawFrame(w, h);
+    if (!new_frame) {
+      // must repaint but failed
+      raw_frame_ = nullptr;
+      return nullptr;
     }
-    // repaint failed even if it was necessary, so returns invalid values
-    raw_frame_.clear();
-    return {raw_frame_, false};
+    // repainting from the scratch successful in a new frame
+    raw_frame_ = std::move(new_frame);
+    current_width_ = w;
+    current_height_ = h;
   }
-  // no need to repaint from the scratch. repaint the confirmation message only
-  // the frame is mostly already in raw_frame_
-  auto ret_code = RenderConfirmationMsgOnly(confirmation_msg);
-  return {raw_frame_, (ret_code == teeui::Error::OK)};
+  return raw_frame_;
 }
 
-std::optional<TeeUiFrame> ConfUiRenderer::RepaintRawFrame(
-    const std::string& confirmation_msg, const std::string& lang_id) {
-  /*
-   * NOTE: DON'T use current_width_/height_ to create this frame
-   * it may fail, and then we must not mess up the current_width_, height_
-   *
-   */
-  if (!InitLayout(lang_id)) {
-    return std::nullopt;
-  }
-  SetConfUiMessage(confirmation_msg);
-  auto color = kColorEnabled;
-  std::get<teeui::LabelOK>(layout_).setTextColor(color);
-  std::get<teeui::LabelCancel>(layout_).setTextColor(color);
+std::unique_ptr<TeeUiFrameWrapper> ConfUiRenderer::RepaintRawFrame(
+    const int w, const int h) {
+  std::get<teeui::LabelOK>(layout_).setTextColor(kColorEnabled);
+  std::get<teeui::LabelCancel>(layout_).setTextColor(kColorEnabled);
 
-  /* in the future, if ever we need to register a handler for the
-     Label{OK,Cancel}. do this: std::get<teeui::LabelOK>(layout_)
-     .setCB(teeui::makeCallback<teeui::Error, teeui::Event>(
-     [](teeui::Event e, void* p) -> teeui::Error {
-     LOG(DEBUG) << "Calling callback for Confirm?";
-     return reinterpret_cast<decltype(owner)*>(p)->TapOk(e); },
-     owner));
-  */
-  // we manually check if click happened, where if yes, and generate the label
-  // event manually. So we won't register the handler here.
   /**
    * should be uint32_t for teeui APIs.
    * It assumes that each raw frame buffer element is 4 bytes
    */
-  TeeUiFrame new_raw_frame(
-      ScreenConnectorInfo::ScreenSizeInBytes(display_num_) / 4,
-      kColorBackground);
-
+  const teeui::Color background_color =
+      is_inverted_ ? kColorBackgroundInv : kColorBackground;
+  auto new_raw_frame =
+      std::make_unique<TeeUiFrameWrapper>(w, h, background_color);
   auto draw_pixel = teeui::makePixelDrawer(
       [this, &new_raw_frame](std::uint32_t x, std::uint32_t y,
                              teeui::Color color) -> teeui::Error {
-        return this->UpdatePixels(new_raw_frame, x, y, color);
+        return this->UpdatePixels(*new_raw_frame, x, y, color);
       });
 
   // render all components
   const auto error = drawElements(layout_, draw_pixel);
   if (error) {
     ConfUiLog(ERROR) << "Painting failed: " << error.code();
-    return std::nullopt;
+    return nullptr;
   }
 
-  // set current frame's dimension as frame generation was successful
-  current_height_ = ScreenConnectorInfo::ScreenHeight(display_num_);
-  current_width_ = ScreenConnectorInfo::ScreenWidth(display_num_);
-
-  return {new_raw_frame};
-}
-
-teeui::Error ConfUiRenderer::RenderConfirmationMsgOnly(
-    const std::string& confirmation_msg) {
-  // repaint labelbody on the raw_frame__ only
-  auto callback_func = [this](std::uint32_t x, std::uint32_t y,
-                              teeui::Color color) -> teeui::Error {
-    return UpdatePixels(raw_frame_, x, y, color);
-  };
-  auto draw_pixel = teeui::makePixelDrawer(callback_func);
-  LabelConfMsg& label = std::get<LabelConfMsg>(layout_);
-  auto b = GetBoundary(label);
-  for (std::uint32_t i = 0; i != b.w; i++) {
-    const auto col_index = i + b.x - 1;
-    for (std::uint32_t j = 0; j != b.y; j++) {
-      const auto row_index = (j + b.y - 1);
-      raw_frame_[current_width_ * row_index + col_index] = color_bg_;
-    }
-  }
-
-  SetConfUiMessage(confirmation_msg);
-  ConfUiLog(DEBUG) << "Repaint Confirmation Msg with :" << prompt_;
-  if (auto error = std::get<LabelConfMsg>(layout_).draw(draw_pixel)) {
-    ConfUiLog(ERROR) << "Repainting Confirmation Message Label failed:"
-                     << error.code();
-    return error;
-  }
-  return teeui::Error::OK;
+  return new_raw_frame;
 }
 
 }  // end of namespace confui
diff --git a/host/libs/confui/host_renderer.h b/host/libs/confui/host_renderer.h
index c614109..6dac3e3 100644
--- a/host/libs/confui/host_renderer.h
+++ b/host/libs/confui/host_renderer.h
@@ -29,45 +29,78 @@
 #include "common/libs/confui/confui.h"
 #include "host/libs/confui/layouts/layout.h"
 #include "host/libs/confui/server_common.h"
-#include "host/libs/screen_connector/screen_connector.h"
+#include "host/libs/screen_connector/screen_connector_common.h"
 
 namespace cuttlefish {
 namespace confui {
+class TeeUiFrameWrapper {
+ public:
+  TeeUiFrameWrapper(const int w, const int h, const teeui::Color color)
+      : w_(w), h_(h), teeui_frame_(ScreenSizeInBytes(w, h), color) {}
+  TeeUiFrameWrapper() = delete;
+  auto data() { return teeui_frame_.data(); }
+  int Width() const { return w_; }
+  int Height() const { return h_; }
+  bool IsEmpty() const { return teeui_frame_.empty(); }
+  auto Size() const { return teeui_frame_.size(); }
+  auto& operator[](const int idx) { return teeui_frame_[idx]; }
+  std::uint32_t ScreenStrideBytes() const {
+    return ScreenConnectorInfo::ComputeScreenStrideBytes(w_);
+  }
+
+ private:
+  static std::uint32_t ScreenSizeInBytes(const int w, const int h) {
+    return ScreenConnectorInfo::ComputeScreenSizeInBytes(w, h);
+  }
+
+  int w_;
+  int h_;
+  TeeUiFrame teeui_frame_;
+};
 
 /**
  * create a raw frame for confirmation UI dialog
+ *
+ * Many rendering code borrowed from the following source
+ *  https://android.googlesource.com/trusty/app/confirmationui/+/0429cc7/src
  */
 class ConfUiRenderer {
  public:
   using LabelConfMsg = teeui::LabelBody;
 
-  ConfUiRenderer(const std::uint32_t display);
+  static std::unique_ptr<ConfUiRenderer> GenerateRenderer(
+      const std::uint32_t display, const std::string& confirmation_msg,
+      const std::string& locale, const bool inverted, const bool magnified);
 
   /**
    * this does not repaint from the scratch all the time
    *
-   * Unless repainting the whole thing is needed, it remove the message
-   * label, and re-draw there. There seems yet no fancy way of doing this.
-   * Thus, it repaint the background color on the top of the label, and
-   * draw the label on the new background
-   *
-   * As HostRenderer is intended to be shared across sessions, HostRender
-   * owns the buffer, and returns reference to the buffer. Note that no
-   * 2 or more sessions are concurrently executed. Only 1 or 0 is active
-   * at the given moment.
+   * It does repaint its frame buffer only when w/h of
+   * current display has changed
    */
-  std::tuple<TeeUiFrame&, bool> RenderRawFrame(
-      const std::string& confirmation_msg, const std::string& lang_id = "en");
+  std::shared_ptr<TeeUiFrameWrapper> RenderRawFrame();
 
-  bool IsFrameReady() const { return !raw_frame_.empty(); }
+  bool IsFrameReady() const { return raw_frame_ && !raw_frame_->IsEmpty(); }
+
+  bool IsInConfirm(const std::uint32_t x, const std::uint32_t y) {
+    return IsInside<teeui::LabelOK>(x, y);
+  }
+  bool IsInCancel(const std::uint32_t x, const std::uint32_t y) {
+    return IsInside<teeui::LabelCancel>(x, y);
+  }
 
  private:
+  bool IsSetUpSuccessful() const { return is_setup_well_; }
+  ConfUiRenderer(const std::uint32_t display,
+                 const std::string& confirmation_msg, const std::string& locale,
+                 const bool inverted, const bool magnified);
+
   struct Boundary {            // inclusive but.. LayoutElement's size is float
     std::uint32_t x, y, w, h;  // (x, y) is the top left
   };
 
   template <typename LayoutElement>
-  Boundary GetBoundary(LayoutElement&& e) {
+  Boundary GetBoundary(LayoutElement&& e) const {
     auto box = e.bounds_;
     Boundary b;
     // (x,y) is left top. so floor() makes sense
@@ -80,28 +113,28 @@
     return b;
   }
 
+  template <typename Element>
+  bool IsInside(const std::uint32_t x, const std::uint32_t y) const {
+    auto box = GetBoundary(std::get<Element>(layout_));
+    if (x >= box.x && x <= box.x + box.w && y >= box.y && y <= box.y + box.h) {
+      return true;
+    }
+    return false;
+  }
   // essentially, to repaint from the scratch, so returns new frame
   // when successful. Or, nullopt
-  std::optional<TeeUiFrame> RepaintRawFrame(const std::string& confirmation_msg,
-                                            const std::string& lang_id = "en");
+  std::unique_ptr<TeeUiFrameWrapper> RepaintRawFrame(const int w, const int h);
 
   bool InitLayout(const std::string& lang_id);
   teeui::Error UpdateTranslations();
-  /**
-   * could be confusing. update prompt_, and update the text_ in the Label
-   * object, the GUI components. This does not render immediately. And..
-   * to render it, we must clean up the existing dirty pixels, which
-   * this method does not do.
-   */
-  void SetConfUiMessage(const std::string& s);
-  teeui::Error SetLangId(const std::string& lang_id);
-  teeui::context<teeui::ConUIParameters> GetDeviceContext();
+  teeui::Error UpdateLocale();
+  void SetDeviceContext(const unsigned long long w, const unsigned long long h,
+                        bool is_inverted, bool is_magnified);
 
-  // effectively, will be send to teeui as a callback function
-  teeui::Error UpdatePixels(TeeUiFrame& buffer, std::uint32_t x,
+  // a callback function to be effectively sent to TeeUI library
+  teeui::Error UpdatePixels(TeeUiFrameWrapper& buffer, std::uint32_t x,
                             std::uint32_t y, teeui::Color color);
 
-  // from Trusty
   // second param is for type deduction
   template <typename... Elements>
   static teeui::Error drawElements(std::tuple<Elements...>& layout,
@@ -111,70 +144,49 @@
     // draw the remaining elements in the order they appear in the layout tuple.
     return (std::get<Elements>(layout).draw(drawPixel) || ...);
   }
-
-  // repaint the confirmation UI label only
-  teeui::Error RenderConfirmationMsgOnly(const std::string& confirmation_msg);
-
-  // from Trusty
-  template <typename Context>
-  void UpdateColorScheme(Context* ctx) {
-    using namespace teeui;
-    color_text_ = is_inverted_ ? kColorDisabledInv : kColorDisabled;
-    shield_color_ = is_inverted_ ? kColorShieldInv : kColorShield;
-    color_bg_ = is_inverted_ ? kColorBackgroundInv : kColorBackground;
-
-    ctx->template setParam<ShieldColor>(shield_color_);
-    ctx->template setParam<ColorText>(color_text_);
-    ctx->template setParam<ColorBG>(color_bg_);
-    return;
-  }
-
+  void UpdateColorScheme(const bool is_inverted);
   template <typename Label>
   auto SetText(const std::string& text) {
     return std::get<Label>(layout_).setText(
         {text.c_str(), text.c_str() + text.size()});
   }
 
-  /**
-   * source:
-   * https://android.googlesource.com/trusty/app/confirmationui/+/0429cc7/src/trusty_confirmation_ui.cpp#49
-   */
   template <typename Label>
-  teeui::Error UpdateString() {
-    using namespace teeui;
-    const char* str;
-    auto& label = std::get<Label>(layout_);
-    str = localization::lookup(TranslationId(label.textId()));
-    if (str == nullptr) {
-      ConfUiLog(ERROR) << "Given translation_id" << label.textId()
-                       << "not found";
-      return Error::Localization;
-    }
-    label.setText({str, str + strlen(str)});
-    return Error::OK;
-  }
+  teeui::Error UpdateString();
 
-  const int display_num_;
+  std::uint32_t display_num_;
   teeui::layout_t<teeui::ConfUILayout> layout_;
   std::string lang_id_;
-  std::string prompt_;  // confirmation ui message
-  TeeUiFrame raw_frame_;
+  std::string prompt_text_;  // confirmation ui message
+
+  /**
+   * Potentially, the same frame could be requested multiple times.
+   *
+   * While another thread/caller is using this frame, the frame should
+   * be kept here, too, to be returned upon future requests.
+   *
+   */
+  std::shared_ptr<TeeUiFrameWrapper> raw_frame_;
   std::uint32_t current_height_;
   std::uint32_t current_width_;
   teeui::Color color_bg_;
   teeui::Color color_text_;
   teeui::Color shield_color_;
   bool is_inverted_;
-  teeui::context<teeui::ConUIParameters> ctx_;
+  bool is_magnified_;
+  teeui::context<teeui::ConfUIParameters> ctx_;
+  bool is_setup_well_;
 
-  static constexpr const teeui::Color kColorEnabled = 0xff212121;
-  static constexpr const teeui::Color kColorDisabled = 0xffbdbdbd;
-  static constexpr const teeui::Color kColorEnabledInv = 0xffdedede;
-  static constexpr const teeui::Color kColorDisabledInv = 0xff424242;
   static constexpr const teeui::Color kColorBackground = 0xffffffff;
   static constexpr const teeui::Color kColorBackgroundInv = 0xff212121;
-  static constexpr const teeui::Color kColorShieldInv = 0xffc4cb80;
+  static constexpr const teeui::Color kColorDisabled = 0xffbdbdbd;
+  static constexpr const teeui::Color kColorDisabledInv = 0xff424242;
+  static constexpr const teeui::Color kColorEnabled = 0xff212121;
+  static constexpr const teeui::Color kColorEnabledInv = 0xffdedede;
   static constexpr const teeui::Color kColorShield = 0xff778500;
+  static constexpr const teeui::Color kColorShieldInv = 0xffc4cb80;
+  static constexpr const teeui::Color kColorText = 0xff212121;
+  static constexpr const teeui::Color kColorTextInv = 0xffdedede;
 };
 }  // end of namespace confui
 }  // end of namespace cuttlefish
diff --git a/host/libs/confui/host_server.cc b/host/libs/confui/host_server.cc
index c14e0ed..97e80f4 100644
--- a/host/libs/confui/host_server.cc
+++ b/host/libs/confui/host_server.cc
@@ -22,6 +22,7 @@
 #include <tuple>
 
 #include "common/libs/confui/confui.h"
+#include "common/libs/fs/shared_buf.h"
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/confui/host_utils.h"
 
@@ -33,8 +34,8 @@
   return config->ForDefaultInstance();
 }
 
-static std::string HalGuestSocketPath() {
-  return CuttlefishConfigDefaultInstance().confui_hal_guest_socket_path();
+static int HalHostVsockPort() {
+  return CuttlefishConfigDefaultInstance().confui_host_vsock_port();
 }
 
 HostServer& HostServer::Get(
@@ -50,16 +51,24 @@
     : display_num_(0),
       host_mode_ctrl_(host_mode_ctrl),
       screen_connector_{screen_connector},
-      renderer_(display_num_),
-      hal_socket_path_(HalGuestSocketPath()),
-      input_multiplexer_{/* max n_elems */ 20, /* n_Qs */ 2} {
-  hal_cmd_q_id_ = input_multiplexer_.GetNewQueueId();         // return 0
-  user_input_evt_q_id_ = input_multiplexer_.GetNewQueueId();  // return 1
+      hal_vsock_port_(HalHostVsockPort()) {
+  ConfUiLog(DEBUG) << "Confirmation UI Host session is listening on: "
+                   << hal_vsock_port_;
+  const size_t max_elements = 20;
+  auto ignore_new =
+      [](ThreadSafeQueue<std::unique_ptr<ConfUiMessage>>::QueueImpl*) {
+        // no op, so the queue is still full, and the new item will be discarded
+        return;
+      };
+  hal_cmd_q_id_ = input_multiplexer_.RegisterQueue(
+      HostServer::Multiplexer::CreateQueue(max_elements, ignore_new));
+  user_input_evt_q_id_ = input_multiplexer_.RegisterQueue(
+      HostServer::Multiplexer::CreateQueue(max_elements, ignore_new));
 }
 
 void HostServer::Start() {
-  guest_hal_socket_ = cuttlefish::SharedFD::SocketLocalServer(
-      hal_socket_path_, false, SOCK_STREAM, 0666);
+  guest_hal_socket_ =
+      cuttlefish::SharedFD::VsockServer(hal_vsock_port_, SOCK_STREAM);
   if (!guest_hal_socket_->IsOpen()) {
     ConfUiLog(FATAL) << "Confirmation UI host service mandates a server socket"
                      << "to which the guest HAL to connect.";
@@ -70,67 +79,63 @@
   hal_input_fetcher_thread_ =
       thread::RunThread("HalInputLoop", hal_cmd_fetching);
   main_loop_thread_ = thread::RunThread("MainLoop", main);
-  ConfUiLog(DEBUG) << "configured internal socket based input.";
+  ConfUiLog(DEBUG) << "configured internal vsock based input.";
   return;
 }
 
 void HostServer::HalCmdFetcherLoop() {
-  hal_cli_socket_ = EstablishHalConnection();
-  if (!hal_cli_socket_->IsOpen()) {
-    ConfUiLog(FATAL)
-        << "Confirmation UI host service mandates connection with HAL.";
-    return;
-  }
   while (true) {
-    auto opted_msg = RecvConfUiMsg(hal_cli_socket_);
-    if (!opted_msg) {
-      ConfUiLog(ERROR) << "Error in RecvConfUiMsg from HAL";
+    if (!hal_cli_socket_->IsOpen()) {
+      ConfUiLog(DEBUG) << "client is disconnected";
+      std::unique_lock<std::mutex> lk(socket_flag_mtx_);
+      hal_cli_socket_ = EstablishHalConnection();
+      is_socket_ok_ = true;
       continue;
     }
-    auto input = std::move(opted_msg.value());
-    input_multiplexer_.Push(hal_cmd_q_id_, std::move(input));
+    auto msg = RecvConfUiMsg(hal_cli_socket_);
+    if (!msg) {
+      ConfUiLog(ERROR) << "Error in RecvConfUiMsg from HAL";
+      hal_cli_socket_->Close();
+      is_socket_ok_ = false;
+      continue;
+    }
+    /*
+     * In case of Vts test, the msg could be a user input. For now, we do not
+     * enforce the input grace period for Vts. However, if ever we do, here is
+     * where the time point check should happen. Once it is enqueued, it is not
+     * always guaranteed to be picked up reasonably soon.
+     */
+    input_multiplexer_.Push(hal_cmd_q_id_, std::move(msg));
   }
 }
 
-bool HostServer::SendUserSelection(UserResponse::type selection) {
-  if (!curr_session_) {
-    ConfUiLog(FATAL) << "Current session must not be null";
-    return false;
-  }
-  if (curr_session_->GetState() != MainLoopState::kInSession) {
+void HostServer::SendUserSelection(std::unique_ptr<ConfUiMessage>& input) {
+  if (!curr_session_ ||
+      curr_session_->GetState() != MainLoopState::kInSession ||
+      !curr_session_->IsReadyForUserInput()) {
     // ignore
-    return true;
+    return;
   }
-
-  std::lock_guard<std::mutex> lock(input_socket_mtx_);
-  if (selection != UserResponse::kConfirm &&
-      selection != UserResponse::kCancel) {
-    ConfUiLog(FATAL) << selection << " must be either" << UserResponse::kConfirm
-                     << "or" << UserResponse::kCancel;
-    return false;  // not reaching here
-  }
-
-  ConfUiMessage input{GetCurrentSessionId(),
-                      ToString(ConfUiCmd::kUserInputEvent), selection};
-
   input_multiplexer_.Push(user_input_evt_q_id_, std::move(input));
-  return true;
 }
 
-void HostServer::PressConfirmButton(const bool is_down) {
-  if (!is_down) {
+void HostServer::TouchEvent(const int x, const int y, const bool is_down) {
+  if (!is_down || !curr_session_) {
     return;
   }
-  // shared by N vnc/webRTC clients
-  SendUserSelection(UserResponse::kConfirm);
+  std::unique_ptr<ConfUiMessage> input =
+      std::make_unique<ConfUiUserTouchMessage>(GetCurrentSessionId(), x, y);
+  SendUserSelection(input);
 }
 
-void HostServer::PressCancelButton(const bool is_down) {
-  if (!is_down) {
+void HostServer::UserAbortEvent() {
+  if (!curr_session_) {
     return;
   }
-  // shared by N vnc/webRTC clients
-  SendUserSelection(UserResponse::kCancel);
+  std::unique_ptr<ConfUiMessage> input =
+      std::make_unique<ConfUiUserSelectionMessage>(GetCurrentSessionId(),
+                                                   UserResponse::kUserAbort);
+  SendUserSelection(input);
 }
 
 bool HostServer::IsConfUiActive() {
@@ -141,119 +146,105 @@
 }
 
 SharedFD HostServer::EstablishHalConnection() {
-  ConfUiLog(DEBUG) << "Waiting hal accepting";
-  auto new_cli = SharedFD::Accept(*guest_hal_socket_);
-  ConfUiLog(DEBUG) << "hal client accepted";
-  return new_cli;
-}
-
-std::unique_ptr<Session> HostServer::ComputeCurrentSession(
-    const std::string& session_id) {
-  if (curr_session_ && (GetCurrentSessionId() != session_id)) {
-    ConfUiLog(FATAL) << curr_session_->GetId() << " is active and in the"
-                     << GetCurrentState() << "but HAL sends command to"
-                     << session_id;
+  using namespace std::chrono_literals;
+  while (true) {
+    ConfUiLog(VERBOSE) << "Waiting hal accepting";
+    auto new_cli = SharedFD::Accept(*guest_hal_socket_);
+    ConfUiLog(VERBOSE) << "hal client accepted";
+    if (new_cli->IsOpen()) {
+      return new_cli;
+    }
+    std::this_thread::sleep_for(500ms);
   }
-  if (curr_session_) {
-    return std::move(curr_session_);
-  }
-
-  // pick up a new session, or create one
-  auto result = GetSession(session_id);
-  if (result) {
-    return std::move(result);
-  }
-
-  auto raw_ptr = new Session(session_id, display_num_, renderer_,
-                             host_mode_ctrl_, screen_connector_);
-  result = std::unique_ptr<Session>(raw_ptr);
-  // note that the new session is directly going to curr_session_
-  // when it is suspended, it will be moved to session_map_
-  return std::move(result);
 }
 
 // read the comments in the header file
 [[noreturn]] void HostServer::MainLoop() {
   while (true) {
     // this gets one input from either queue:
-    // from HAL or from all webrtc/vnc clients
+    // from HAL or from all webrtc clients
     // if no input, sleep until there is
-    const auto input = input_multiplexer_.Pop();
-    const auto& [session_id, cmd_str, additional_info] = input;
+    auto input_ptr = input_multiplexer_.Pop();
+    auto& input = *input_ptr;
+    const auto session_id = input.GetSessionId();
+    const auto cmd = input.GetType();
+    const std::string cmd_str(ToString(cmd));
 
     // take input for the Finite States Machine below
-    const ConfUiCmd cmd = ToCmd(cmd_str);
-    const bool is_user_input = (cmd == ConfUiCmd::kUserInputEvent);
+    const bool is_user_input = (cmd == ConfUiCmd::kUserInputEvent) ||
+                               (cmd == ConfUiCmd::kUserTouchEvent);
     std::string src = is_user_input ? "input" : "hal";
+    ConfUiLog(VERBOSE) << "In Session " << GetCurrentSessionId() << ", "
+                       << "in state " << GetCurrentState() << ", "
+                       << "received input from " << src << " cmd =" << cmd_str
+                       << " going to session " << session_id;
 
-    ConfUiLog(DEBUG) << "In Session" << GetCurrentSessionId() << ","
-                     << "in state" << GetCurrentState() << ","
-                     << "received input from" << src << "cmd =" << cmd_str
-                     << "and additional_info =" << additional_info
-                     << "going to session" << session_id;
-
-    FsmInput fsm_input = ToFsmInput(input);
-
-    if (is_user_input && !curr_session_) {
-      // discard the input, there's no session to take it yet
-      // actually, no confirmation UI screen is available
-      ConfUiLog(DEBUG) << "Took user input but no active session is available.";
-      continue;
-    }
-
-    /**
-     * if the curr_session_ is null, create one
-     * if the curr_session_ is not null but the session id doesn't match,
-     * something is wrong. Confirmation UI doesn't allow preemption by
-     * another confirmation UI session back to back. When it's preempted,
-     * HAL must send "kSuspend"
-     *
-     */
-    curr_session_ = ComputeCurrentSession(session_id);
-    ConfUiLog(DEBUG) << "Host service picked up "
-                     << (curr_session_ ? curr_session_->GetId()
-                                       : "null session");
-    ConfUiLog(DEBUG) << "The state of current session is "
-                     << (curr_session_ ? ToString(curr_session_->GetState())
-                                       : "null session");
-
-    if (is_user_input) {
-      curr_session_->Transition(is_user_input, hal_cli_socket_, fsm_input,
-                                additional_info);
-    } else {
-      ConfUiCmd cmd = ToCmd(cmd_str);
-      switch (cmd) {
-        case ConfUiCmd::kSuspend:
-          curr_session_->Suspend(hal_cli_socket_);
-          break;
-        case ConfUiCmd::kRestore:
-          curr_session_->Restore(hal_cli_socket_);
-          break;
-        case ConfUiCmd::kAbort:
-          curr_session_->Abort(hal_cli_socket_);
-          break;
-        default:
-          curr_session_->Transition(is_user_input, hal_cli_socket_, fsm_input,
-                                    additional_info);
-          break;
+    if (!curr_session_) {
+      if (cmd != ConfUiCmd::kStart) {
+        ConfUiLog(VERBOSE) << ToString(cmd) << " to " << session_id
+                           << " is ignored as there is no session to receive";
+        continue;
       }
+      // the session is created as kInit
+      curr_session_ = CreateSession(input.GetSessionId());
     }
-
-    // check the session if it is inactive (e.g. init, suspended)
-    // and if it is done (transitioned to init from any other state)
-    if (curr_session_->IsSuspended()) {
-      session_map_[GetCurrentSessionId()] = std::move(curr_session_);
-      curr_session_ = nullptr;
-      continue;
+    if (cmd == ConfUiCmd::kUserTouchEvent) {
+      ConfUiUserTouchMessage& touch_event =
+          static_cast<ConfUiUserTouchMessage&>(input);
+      auto [x, y] = touch_event.GetLocation();
+      const bool is_confirm = curr_session_->IsConfirm(x, y);
+      const bool is_cancel = curr_session_->IsCancel(x, y);
+      if (!is_confirm && !is_cancel) {
+        // ignore, take the next input
+        continue;
+      }
+      input_ptr = std::make_unique<ConfUiUserSelectionMessage>(
+          GetCurrentSessionId(),
+          (is_confirm ? UserResponse::kConfirm : UserResponse::kCancel));
     }
+    Transition(input_ptr);
 
-    if (curr_session_->GetState() == MainLoopState::kAwaitCleanup) {
+    // finalize
+    if (curr_session_ &&
+        curr_session_->GetState() == MainLoopState::kAwaitCleanup) {
       curr_session_->CleanUp();
       curr_session_ = nullptr;
     }
-    // otherwise, continue with keeping the curr_session_
   }  // end of the infinite while loop
 }
 
+std::shared_ptr<Session> HostServer::CreateSession(const std::string& name) {
+  return std::make_shared<Session>(name, display_num_, host_mode_ctrl_,
+                                   screen_connector_);
+}
+
+static bool IsUserAbort(ConfUiMessage& msg) {
+  if (msg.GetType() != ConfUiCmd::kUserInputEvent) {
+    return false;
+  }
+  ConfUiUserSelectionMessage& selection =
+      static_cast<ConfUiUserSelectionMessage&>(msg);
+  return (selection.GetResponse() == UserResponse::kUserAbort);
+}
+
+void HostServer::Transition(std::unique_ptr<ConfUiMessage>& input_ptr) {
+  auto& input = *input_ptr;
+  const auto session_id = input.GetSessionId();
+  const auto cmd = input.GetType();
+  const std::string cmd_str(ToString(cmd));
+  FsmInput fsm_input = ToFsmInput(input);
+  ConfUiLog(VERBOSE) << "Handling " << ToString(cmd);
+  if (IsUserAbort(input)) {
+    curr_session_->UserAbort(hal_cli_socket_);
+    return;
+  }
+
+  if (cmd == ConfUiCmd::kAbort) {
+    curr_session_->Abort();
+    return;
+  }
+  curr_session_->Transition(hal_cli_socket_, fsm_input, input);
+}
+
 }  // end of namespace confui
 }  // end of namespace cuttlefish
diff --git a/host/libs/confui/host_server.h b/host/libs/confui/host_server.h
index be5caeb..904af33 100644
--- a/host/libs/confui/host_server.h
+++ b/host/libs/confui/host_server.h
@@ -35,7 +35,6 @@
 #include "host/commands/kernel_log_monitor/utils.h"
 #include "host/libs/config/logging.h"
 #include "host/libs/confui/host_mode_ctrl.h"
-#include "host/libs/confui/host_renderer.h"
 #include "host/libs/confui/host_virtual_input.h"
 #include "host/libs/confui/server_common.h"
 #include "host/libs/confui/session.h"
@@ -50,11 +49,11 @@
       cuttlefish::ScreenConnectorFrameRenderer& screen_connector);
 
   void Start();  // start this server itself
-  virtual ~HostServer() = default;
+  virtual ~HostServer() {}
 
-  // implement input interfaces. called by webRTC & vnc
-  void PressConfirmButton(const bool is_down) override;
-  void PressCancelButton(const bool is_down) override;
+  // implement input interfaces. called by webRTC
+  void TouchEvent(const int x, const int y, const bool is_down) override;
+  void UserAbortEvent() override;
   bool IsConfUiActive() override;
 
  private:
@@ -89,7 +88,7 @@
    *  should render the Android guest frames but keep the confirmation
    *  UI session and frame
    *
-   *  The inputs are I = {u, g}. 'u' is the user input from vnc/webRTC
+   *  The inputs are I = {u, g}. 'u' is the user input from webRTC
    *  clients. Note that the host service serialized the concurrent user
    *  inputs from multiple clients. 'g' is the command from the HAL service
    *
@@ -115,21 +114,10 @@
 
   SharedFD EstablishHalConnection();
 
-  // failed to start dialog, etc
-  // basically, will reset the session, so start from the beginning in the same
-  // session
-  void ResetOnCommandFailure();
+  std::shared_ptr<Session> CreateSession(const std::string& session_name);
+  void SendUserSelection(std::unique_ptr<ConfUiMessage>& input);
 
-  // note: the picked session will be removed from session_map_
-  std::unique_ptr<Session> GetSession(const std::string& session_id) {
-    if (session_map_.find(session_id) == session_map_.end()) {
-      return nullptr;
-    }
-    std::unique_ptr<Session> temp = std::move(session_map_[session_id]);
-    session_map_.erase(session_id);
-    return temp;
-  }
-
+  void Transition(std::unique_ptr<ConfUiMessage>& input_ptr);
   std::string GetCurrentSessionId() {
     if (curr_session_) {
       return curr_session_->GetId();
@@ -143,29 +131,23 @@
     }
     return ToString(curr_session_->GetState());
   }
-  std::unique_ptr<Session> ComputeCurrentSession(const std::string& session_id);
-  bool SendUserSelection(UserResponse::type selection);
 
   const std::uint32_t display_num_;
   HostModeCtrl& host_mode_ctrl_;
   ScreenConnectorFrameRenderer& screen_connector_;
 
-  // this member creates a raw frame
-  ConfUiRenderer renderer_;
-
   std::string input_socket_path_;
-  std::string hal_socket_path_;
+  int hal_vsock_port_;
 
-  // session id to Session object map, for those that are suspended
-  std::unordered_map<std::string, std::unique_ptr<Session>> session_map_;
-  // curr_session_ doesn't belong to session_map_
-  std::unique_ptr<Session> curr_session_;
+  std::shared_ptr<Session> curr_session_;
 
   SharedFD guest_hal_socket_;
   // ACCEPTED fd on guest_hal_socket_
   SharedFD hal_cli_socket_;
-  std::mutex input_socket_mtx_;
 
+  using Multiplexer =
+      Multiplexer<std::unique_ptr<ConfUiMessage>,
+                  ThreadSafeQueue<std::unique_ptr<ConfUiMessage>>>;
   /*
    * Multiplexer has N queues. When pop(), it is going to sleep until
    * there's at least one item in at least one queue. The lower the Q
@@ -174,12 +156,16 @@
    * For HostServer, we have a queue for the user input events, and
    * another for hal cmd/msg queues
    */
-  Multiplexer<ConfUiMessage> input_multiplexer_;
+  Multiplexer input_multiplexer_;
   int hal_cmd_q_id_;         // Q id in input_multiplexer_
   int user_input_evt_q_id_;  // Q id in input_multiplexer_
 
   std::thread main_loop_thread_;
   std::thread hal_input_fetcher_thread_;
+
+  std::mutex socket_flag_mtx_;
+  std::condition_variable socket_flag_cv_;
+  bool is_socket_ok_;
 };
 
 }  // end of namespace confui
diff --git a/host/libs/confui/host_virtual_input.h b/host/libs/confui/host_virtual_input.h
index ec800cb..65ec577 100644
--- a/host/libs/confui/host_virtual_input.h
+++ b/host/libs/confui/host_virtual_input.h
@@ -23,13 +23,13 @@
 enum class ConfUiKeys : std::uint32_t { Confirm = 7, Cancel = 8 };
 
 /**
- * vnc, webrtc will deliver the user inputs from their client
+ * webrtc will deliver the user inputs from their client
  * to this class object
  */
 class HostVirtualInput {
  public:
-  virtual void PressConfirmButton(const bool is_down) = 0;
-  virtual void PressCancelButton(const bool is_down) = 0;
+  virtual void TouchEvent(const int x, const int y, const bool is_down) = 0;
+  virtual void UserAbortEvent() = 0;
   virtual ~HostVirtualInput() = default;
   // guarantees that if this returns true, it is confirmation UI mode
   virtual bool IsConfUiActive() = 0;
diff --git a/host/libs/confui/layouts/layout.h b/host/libs/confui/layouts/layout.h
index bb40b67..4f6c4dc 100644
--- a/host/libs/confui/layouts/layout.h
+++ b/host/libs/confui/layouts/layout.h
@@ -29,38 +29,13 @@
 
 DECLARE_PARAMETER(RightEdgeOfScreen);
 DECLARE_PARAMETER(BottomOfScreen);
-DECLARE_PARAMETER(PowerButtonTop);
-DECLARE_PARAMETER(PowerButtonBottom);
-DECLARE_PARAMETER(VolUpButtonTop);
-DECLARE_PARAMETER(VolUpButtonBottom);
 DECLARE_PARAMETER(DefaultFontSize);  // 14_dp regular and 18_dp magnified
 DECLARE_PARAMETER(BodyFontSize);     // 16_dp regular and 20_dp magnified
 DECLARE_TYPED_PARAMETER(ShieldColor, ::teeui::Color);
 DECLARE_TYPED_PARAMETER(ColorText, ::teeui::Color);
 DECLARE_TYPED_PARAMETER(ColorBG, ::teeui::Color);
 
-NEW_PARAMETER_SET(ConUIParameters, RightEdgeOfScreen, BottomOfScreen,
-                  PowerButtonTop, PowerButtonBottom, VolUpButtonTop,
-                  VolUpButtonBottom, DefaultFontSize, BodyFontSize, ShieldColor,
-                  ColorText, ColorBG);
-
 CONSTANT(BorderWidth, 24_dp);
-CONSTANT(PowerButtonCenter, (PowerButtonTop() + PowerButtonBottom()) / 2_px);
-CONSTANT(VolUpButtonCenter, (VolUpButtonTop() + VolUpButtonBottom()) / 2.0_px);
-CONSTANT(GrayZone, 12_dp);
-CONSTANT(RightLabelEdge, RightEdgeOfScreen() - BorderWidth - GrayZone);
-CONSTANT(LabelWidth, RightLabelEdge - BorderWidth);
-
-CONSTANT(SQRT2, 1.4142135623_dp);
-CONSTANT(SQRT8, 2.828427125_dp);
-
-CONSTANT(ARROW_SHAPE,
-         CONVEX_OBJECTS(
-             CONVEX_OBJECT(Vec2d{.0_dp, .0_dp}, Vec2d{6.0_dp, 6.0_dp},
-                           Vec2d{6.0_dp - SQRT8, 6.0_dp}, Vec2d{-SQRT2, SQRT2}),
-             CONVEX_OBJECT(Vec2d{6.0_dp - SQRT8, 6.0_dp}, Vec2d{6.0_dp, 6.0_dp},
-                           Vec2d{0.0_dp, 12.0_dp},
-                           Vec2d{-SQRT2, 12.0_dp - SQRT2})));
 
 DECLARE_FONT_BUFFER(RobotoMedium, RobotoMedium, RobotoMedium_length);
 DECLARE_FONT_BUFFER(RobotoRegular, RobotoRegular, RobotoRegular_length);
@@ -68,63 +43,32 @@
 
 CONSTANT(DefaultFont, FONT(RobotoRegular));
 
-BEGIN_ELEMENT(LabelOK, teeui::Label)
-FontSize(DefaultFontSize());
-LineHeight(20_dp);
-NumberOfLines(2);
-Dimension(LabelWidth, HeightFromLines);
-Position(BorderWidth, PowerButtonCenter - dim_h / 2.0_px);
-DefaultText("Press Power Button Confirm");
-RightJustified;
-VerticallyCentered;
-TextColor(ColorText());
-Font(FONT(RobotoMedium));
-TextID(TEXT_ID(TranslationId::CONFIRM_PWR_BUTTON_DOUBLE_PRESS));
-END_ELEMENT();
+DECLARE_TYPED_PARAMETER(ColorButton, ::teeui::Color);
 
-BEGIN_ELEMENT(IconPower, teeui::Button, ConvexObjectCount(2))
-Dimension(BorderWidth, PowerButtonBottom() - PowerButtonTop());
-Position(RightEdgeOfScreen() - BorderWidth, PowerButtonTop());
-CornerRadius(3_dp);
-ButtonColor(ColorText());
-RoundTopLeft;
-RoundBottomLeft;
-ConvexObjectColor(ColorBG());
-ConvexObjects(ARROW_SHAPE);
-END_ELEMENT();
+NEW_PARAMETER_SET(ConfUIParameters, RightEdgeOfScreen, BottomOfScreen,
+                  DefaultFontSize, BodyFontSize, ShieldColor, ColorText,
+                  ColorBG, ColorButton);
 
-BEGIN_ELEMENT(LabelCancel, teeui::Label)
-FontSize(DefaultFontSize());
-LineHeight(20_dp);
-NumberOfLines(2);
-Dimension(LabelWidth, HeightFromLines);
-Position(BorderWidth, VolUpButtonCenter - dim_h / 2.0_px);
-DefaultText("Press Menu Button to Cancel");
-RightJustified;
-VerticallyCentered;
-TextColor(ColorText());
-Font(FONT(RobotoMedium));
-TextID(TEXT_ID(TranslationId::CANCEL));
-END_ELEMENT();
-
-BEGIN_ELEMENT(IconVolUp, teeui::Button, ConvexObjectCount(2))
-Dimension(BorderWidth, VolUpButtonBottom() - VolUpButtonTop());
-Position(RightEdgeOfScreen() - BorderWidth, VolUpButtonTop());
-CornerRadius(5_dp);
-ButtonColor(ColorBG());
-ConvexObjectColor(ColorText());
-ConvexObjects(ARROW_SHAPE);
-END_ELEMENT();
+CONSTANT(IconShieldDistanceFromTop, 100_dp);
+CONSTANT(LabelBorderZone, 4_dp);
+CONSTANT(RightLabelEdge, RightEdgeOfScreen() - BorderWidth);
+CONSTANT(LabelWidth, RightLabelEdge - BorderWidth);
+CONSTANT(ButtonHeight, 72_dp);
+CONSTANT(ButtonPositionX, 0);
+CONSTANT(ButtonPositionY, BottomOfScreen() - ButtonHeight);
+CONSTANT(ButtonWidth, 130_dp);
+CONSTANT(ButtonLabelDistance, 12_dp);
 
 BEGIN_ELEMENT(IconShield, teeui::Label)
 FontSize(24_dp);
 LineHeight(24_dp);
 NumberOfLines(1);
 Dimension(LabelWidth, HeightFromLines);
-Position(BorderWidth, BOTTOM_EDGE_OF(LabelCancel) + 40_dp);
+Position(BorderWidth, IconShieldDistanceFromTop);
 DefaultText(
     "A");  // ShieldTTF has just one glyph at the code point for capital A
 TextColor(ShieldColor());
+HorizontalTextAlignment(Alignment::CENTER);
 Font(FONT(Shield));
 END_ELEMENT();
 
@@ -132,8 +76,8 @@
 FontSize(20_dp);
 LineHeight(20_dp);
 NumberOfLines(1);
-Dimension(RightEdgeOfScreen() - BorderWidth, HeightFromLines);
-Position(BorderWidth, BOTTOM_EDGE_OF(IconShield) + 12_dp);
+Dimension(LabelWidth, HeightFromLines);
+Position(BorderWidth, BOTTOM_EDGE_OF(IconShield) + 16_dp);
 DefaultText("Android Protected Confirmation");
 Font(FONT(RobotoMedium));
 VerticallyCentered;
@@ -141,12 +85,56 @@
 TextID(TEXT_ID(TranslationId::TITLE));
 END_ELEMENT();
 
+BEGIN_ELEMENT(IconOk, teeui::Button, ConvexObjectCount(1))
+Dimension(ButtonWidth, ButtonHeight - BorderWidth);
+Position(RightEdgeOfScreen() - ButtonWidth - BorderWidth,
+         ButtonPositionY + ButtonLabelDistance);
+CornerRadius(4_dp);
+ButtonColor(ColorButton());
+RoundTopLeft;
+RoundBottomLeft;
+RoundTopRight;
+RoundBottomRight;
+END_ELEMENT();
+
+BEGIN_ELEMENT(LabelOK, teeui::Label)
+FontSize(BodyFontSize());
+LineHeight(BodyFontSize() * 1.4_px);
+NumberOfLines(1);
+Dimension(ButtonWidth - (LabelBorderZone * 2_dp),
+          ButtonHeight - BorderWidth - (LabelBorderZone * 2_dp));
+Position(RightEdgeOfScreen() - ButtonWidth - BorderWidth + LabelBorderZone,
+         ButtonPositionY + ButtonLabelDistance + LabelBorderZone);
+DefaultText("Confirm");
+Font(FONT(RobotoMedium));
+HorizontalTextAlignment(Alignment::CENTER);
+VerticalTextAlignment(Alignment::CENTER);
+TextColor(ColorBG());
+TextID(TEXT_ID(TranslationId::CONFIRM));
+END_ELEMENT();
+
+BEGIN_ELEMENT(LabelCancel, teeui::Label)
+FontSize(BodyFontSize());
+LineHeight(BodyFontSize() * 1.4_px);
+NumberOfLines(1);
+Dimension(ButtonWidth - (LabelBorderZone * 2_dp),
+          ButtonHeight - BorderWidth - (LabelBorderZone * 2_dp));
+Position(BorderWidth + LabelBorderZone,
+         ButtonPositionY + ButtonLabelDistance + LabelBorderZone);
+DefaultText("Cancel");
+HorizontalTextAlignment(Alignment::LEFT);
+Font(FONT(RobotoMedium));
+VerticallyCentered;
+TextColor(ColorButton());
+TextID(TEXT_ID(TranslationId::CANCEL));
+END_ELEMENT();
+
 BEGIN_ELEMENT(LabelHint, teeui::Label)
 FontSize(DefaultFontSize());
 LineHeight(DefaultFontSize() * 1.5_px);
 NumberOfLines(4);
 Dimension(LabelWidth, HeightFromLines);
-Position(BorderWidth, BottomOfScreen() - BorderWidth - dim_h);
+Position(BorderWidth, ButtonPositionY - dim_h - 48_dp);
 DefaultText(
     "This confirmation provides an extra layer of security for the action "
     "you're "
@@ -161,7 +149,7 @@
 FontSize(BodyFontSize());
 LineHeight(BodyFontSize() * 1.4_px);
 NumberOfLines(20);
-Position(BorderWidth, BOTTOM_EDGE_OF(LabelTitle) + 18_dp);
+Position(BorderWidth, BOTTOM_EDGE_OF(LabelTitle) + 16_dp);
 Dimension(LabelWidth, LabelHint::pos_y - pos_y - 24_dp);
 DefaultText(
     "12345678901234567890123456789012345678901234567890123456789012345678901234"
@@ -171,7 +159,7 @@
 Font(FONT(RobotoRegular));
 END_ELEMENT();
 
-NEW_LAYOUT(ConfUILayout, LabelOK, IconPower, LabelCancel, IconVolUp, IconShield,
-           LabelTitle, LabelHint, LabelBody);
+NEW_LAYOUT(ConfUILayout, IconShield, LabelTitle, LabelHint, LabelBody, IconOk,
+           LabelOK, LabelCancel);
 
 }  // namespace teeui
diff --git a/host/libs/confui/server_common.cc b/host/libs/confui/server_common.cc
index cf46fe3..66adb55 100644
--- a/host/libs/confui/server_common.cc
+++ b/host/libs/confui/server_common.cc
@@ -17,60 +17,37 @@
 #include "host/libs/confui/server_common.h"
 namespace cuttlefish {
 namespace confui {
-static FsmInput UserEvtToFsmInput(UserResponse::type user_response) {
-  if (user_response == UserResponse::kConfirm) {
-    return FsmInput::kUserUnknown;
-  }
-  if (user_response == UserResponse::kCancel) {
-    return FsmInput::kUserCancel;
-  }
-  return FsmInput::kUserUnknown;
-}
-
-FsmInput ToFsmInput(const ConfUiMessage& confui_msg) {
-  ConfUiCmd cmd = ToCmd(confui_msg.type_);
-  if (cmd == ConfUiCmd::kUserInputEvent) {
-    return UserEvtToFsmInput(confui_msg.msg_);
-  }
-  const auto hal_cmd = cmd;
-  switch (hal_cmd) {
+FsmInput ToFsmInput(const ConfUiMessage& msg) {
+  const auto cmd = msg.GetType();
+  switch (cmd) {
+    case ConfUiCmd::kUserInputEvent:
+      return FsmInput::kUserEvent;
     case ConfUiCmd::kUnknown:
       return FsmInput::kHalUnknown;
     case ConfUiCmd::kStart:
       return FsmInput::kHalStart;
     case ConfUiCmd::kStop:
       return FsmInput::kHalStop;
-    case ConfUiCmd::kSuspend:
-      return FsmInput::kHalSuspend;
-    case ConfUiCmd::kRestore:
-      return FsmInput::kHalRestore;
     case ConfUiCmd::kAbort:
       return FsmInput::kHalAbort;
     case ConfUiCmd::kCliAck:
     case ConfUiCmd::kCliRespond:
     default:
-      ConfUiLog(FATAL) << "The" << ToString(hal_cmd)
-                       << "is not handled by Session";
+      ConfUiLog(FATAL) << "The" << ToString(cmd)
+                       << "is not handled by the Session FSM but "
+                       << "directly calls Abort()";
   }
   return FsmInput::kHalUnknown;
 }
 
 std::string ToString(FsmInput input) {
   switch (input) {
-    case FsmInput::kUserConfirm:
-      return {"kUserConfirm"};
-    case FsmInput::kUserCancel:
-      return {"kUserCancel"};
-    case FsmInput::kUserUnknown:
-      return {"kUserUnknown"};
+    case FsmInput::kUserEvent:
+      return {"kUserEvent"};
     case FsmInput::kHalStart:
       return {"kHalStart"};
     case FsmInput::kHalStop:
       return {"kHalStop"};
-    case FsmInput::kHalSuspend:
-      return {"kHalSuspend"};
-    case FsmInput::kHalRestore:
-      return {"kHalRestore"};
     case FsmInput::kHalAbort:
       return {"kHalAbort"};
     case FsmInput::kHalUnknown:
@@ -88,10 +65,10 @@
       return "kInSession";
     case MainLoopState::kWaitStop:
       return "kWaitStop";
-    case MainLoopState::kSuspended:
-      return "kSuspended";
     case MainLoopState::kAwaitCleanup:
       return "kAwaitCleanup";
+    case MainLoopState::kTerminated:
+      return "kTerminated";
     default:
       return "kInvalid";
   }
diff --git a/host/libs/confui/server_common.h b/host/libs/confui/server_common.h
index 6175d16..8ffd578 100644
--- a/host/libs/confui/server_common.h
+++ b/host/libs/confui/server_common.h
@@ -17,6 +17,7 @@
 #pragma once
 
 #include <cstdint>
+#include <memory>
 #include <vector>
 
 #include "common/libs/confui/confui.h"
@@ -27,8 +28,8 @@
   kInit = 1,
   kInSession = 2,
   kWaitStop = 3,  // wait ack after sending confirm/cancel
-  kSuspended = 4,
   kAwaitCleanup = 5,
+  kTerminated = 8,
   kInvalid = 9
 };
 
@@ -36,13 +37,9 @@
 
 // FSM input to Session FSM
 enum class FsmInput : std::uint32_t {
-  kUserConfirm,
-  kUserCancel,
-  kUserUnknown,
+  kUserEvent = 1,
   kHalStart,
   kHalStop,
-  kHalSuspend,
-  kHalRestore,
   kHalAbort,
   kHalUnknown
 };
@@ -50,7 +47,9 @@
 std::string ToString(FsmInput input);
 std::string ToString(const MainLoopState& state);
 
-FsmInput ToFsmInput(const ConfUiMessage& confui_msg);
+FsmInput ToFsmInput(const ConfUiMessage& msg);
 
+std::unique_ptr<ConfUiMessage> CreateFromUserSelection(
+    const std::string& session_id, const UserResponse::type user_selection);
 }  // end of namespace confui
 }  // end of namespace cuttlefish
diff --git a/host/libs/confui/session.cc b/host/libs/confui/session.cc
index 891250d..d12af9f 100644
--- a/host/libs/confui/session.cc
+++ b/host/libs/confui/session.cc
@@ -16,22 +16,45 @@
 
 #include "host/libs/confui/session.h"
 
+#include <algorithm>
+
 namespace cuttlefish {
 namespace confui {
 
-Session::Session(const std::string& session_id, const std::uint32_t display_num,
-                 ConfUiRenderer& host_renderer, HostModeCtrl& host_mode_ctrl,
+Session::Session(const std::string& session_name,
+                 const std::uint32_t display_num, HostModeCtrl& host_mode_ctrl,
                  ScreenConnectorFrameRenderer& screen_connector,
                  const std::string& locale)
-    : session_id_{session_id},
+    : session_id_{session_name},
       display_num_{display_num},
-      renderer_{host_renderer},
       host_mode_ctrl_{host_mode_ctrl},
       screen_connector_{screen_connector},
       locale_{locale},
       state_{MainLoopState::kInit},
       saved_state_{MainLoopState::kInit} {}
 
+/** return grace period + alpha
+ *
+ * grace period is the gap between user seeing the dialog
+ * and the UI starts to take the user inputs
+ * Grace period should be at least 1s.
+ * Session requests the Renderer to render the dialog,
+ * but it might not be immediate. So, add alpha to 1s
+ */
+static const std::chrono::milliseconds GetGracePeriod() {
+  using std::literals::chrono_literals::operator""ms;
+  return 1000ms + 100ms;
+}
+
+bool Session::IsReadyForUserInput() const {
+  using std::literals::chrono_literals::operator""ms;
+  if (!start_time_) {
+    return false;
+  }
+  const auto right_now = Clock::now();
+  return (right_now - *start_time_) >= GetGracePeriod();
+}
+
 bool Session::IsConfUiActive() const {
   if (state_ == MainLoopState::kInSession ||
       state_ == MainLoopState::kWaitStop) {
@@ -40,234 +63,236 @@
   return false;
 }
 
-bool Session::RenderDialog(const std::string& msg, const std::string& locale) {
-  auto [teeui_frame, is_success] = renderer_.RenderRawFrame(msg, locale);
-  if (!is_success) {
+template <typename C, typename T>
+static bool Contains(const C& c, T&& item) {
+  auto itr = std::find(c.begin(), c.end(), std::forward<T>(item));
+  return itr != c.end();
+}
+
+bool Session::IsInverted() const {
+  return Contains(ui_options_, teeui::UIOption::AccessibilityInverted);
+}
+
+bool Session::IsMagnified() const {
+  return Contains(ui_options_, teeui::UIOption::AccessibilityMagnified);
+}
+
+bool Session::RenderDialog() {
+  renderer_ = ConfUiRenderer::GenerateRenderer(
+      display_num_, prompt_text_, locale_, IsInverted(), IsMagnified());
+  if (!renderer_) {
     return false;
   }
-  prompt_ = msg;
-  locale_ = locale;
-
-  ConfUiLog(DEBUG) << "actually trying to render the frame"
-                   << thread::GetName();
-  auto frame_width = ScreenConnectorInfo::ScreenWidth(display_num_);
-  auto frame_height = ScreenConnectorInfo::ScreenHeight(display_num_);
-  auto frame_stride_bytes =
-      ScreenConnectorInfo::ScreenStrideBytes(display_num_);
-  auto frame_bytes = reinterpret_cast<std::uint8_t*>(teeui_frame.data());
+  auto teeui_frame = renderer_->RenderRawFrame();
+  if (!teeui_frame) {
+    return false;
+  }
+  ConfUiLog(VERBOSE) << "actually trying to render the frame"
+                     << thread::GetName();
+  auto frame_width = teeui_frame->Width();
+  auto frame_height = teeui_frame->Height();
+  auto frame_stride_bytes = teeui_frame->ScreenStrideBytes();
+  auto frame_bytes = reinterpret_cast<std::uint8_t*>(teeui_frame->data());
   return screen_connector_.RenderConfirmationUi(
       display_num_, frame_width, frame_height, frame_stride_bytes, frame_bytes);
 }
 
-bool Session::IsSuspended() const {
-  return (state_ == MainLoopState::kSuspended);
-}
-
-MainLoopState Session::Transition(const bool is_user_input, SharedFD& hal_cli,
-                                  const FsmInput fsm_input,
-                                  const std::string& additional_info) {
+MainLoopState Session::Transition(SharedFD& hal_cli, const FsmInput fsm_input,
+                                  const ConfUiMessage& conf_ui_message) {
+  bool should_keep_running = false;
+  bool already_terminated = false;
   switch (state_) {
     case MainLoopState::kInit: {
-      HandleInit(is_user_input, hal_cli, fsm_input, additional_info);
+      should_keep_running = HandleInit(hal_cli, fsm_input, conf_ui_message);
     } break;
     case MainLoopState::kInSession: {
-      HandleInSession(is_user_input, hal_cli, fsm_input);
+      should_keep_running =
+          HandleInSession(hal_cli, fsm_input, conf_ui_message);
     } break;
     case MainLoopState::kWaitStop: {
-      if (is_user_input) {
-        ConfUiLog(DEBUG) << "User input ignored" << ToString(fsm_input) << " : "
-                         << additional_info << "at state" << ToString(state_);
+      if (IsUserInput(fsm_input)) {
+        ConfUiLog(VERBOSE) << "User input ignored " << ToString(fsm_input)
+                           << " : " << ToString(conf_ui_message)
+                           << " at the state " << ToString(state_);
       }
-      HandleWaitStop(is_user_input, hal_cli, fsm_input);
+      should_keep_running = HandleWaitStop(hal_cli, fsm_input);
+    } break;
+    case MainLoopState::kTerminated: {
+      already_terminated = true;
     } break;
     default:
-      // host service explicitly calls restore and suspend
-      ConfUiLog(FATAL) << "Must not be in the state of" << ToString(state_);
+      ConfUiLog(FATAL) << "Must not be in the state of " << ToString(state_);
       break;
   }
+  if (!should_keep_running && !already_terminated) {
+    ScheduleToTerminate();
+  }
   return state_;
 };
 
-bool Session::Suspend(SharedFD hal_cli) {
-  if (state_ == MainLoopState::kInit) {
-    // HAL sent wrong command
-    ConfUiLog(FATAL)
-        << "HAL sent wrong command, suspend, when the session is in kIinit";
-    return false;
-  }
-  if (state_ == MainLoopState::kSuspended) {
-    ConfUiLog(DEBUG) << "Already kSuspended state";
-    return false;
-  }
-  saved_state_ = state_;
-  state_ = MainLoopState::kSuspended;
-  host_mode_ctrl_.SetMode(HostModeCtrl::ModeType::kAndroidMode);
-  if (!packet::SendAck(hal_cli, session_id_, /*is success*/ true,
-                       "suspended")) {
-    ConfUiLog(FATAL) << "I/O error";
-    return false;
-  }
-  return true;
-}
-
-bool Session::Restore(SharedFD hal_cli) {
-  if (state_ == MainLoopState::kInit) {
-    // HAL sent wrong command
-    ConfUiLog(FATAL)
-        << "HAL sent wrong command, restore, when the session is in kIinit";
-    return false;
-  }
-
-  if (state_ != MainLoopState::kSuspended) {
-    ConfUiLog(DEBUG) << "Already Restored to state " + ToString(state_);
-    return false;
-  }
-  host_mode_ctrl_.SetMode(HostModeCtrl::ModeType::kConfUI_Mode);
-  if (!RenderDialog(prompt_, locale_)) {
-    // the confirmation UI is driven by a user app, not running from the start
-    // automatically so that means webRTC/vnc should have been set up
-    ConfUiLog(ERROR) << "Dialog is not rendered. However, it should."
-                     << "No webRTC can't initiate any confirmation UI.";
-    if (!packet::SendAck(hal_cli, session_id_, false,
-                         "render failed in restore")) {
-      ConfUiLog(FATAL) << "Rendering failed in restore, and ack failed in I/O";
-    }
-    state_ = MainLoopState::kInit;
-    return false;
-  }
-  if (!packet::SendAck(hal_cli, session_id_, true, "restored")) {
-    ConfUiLog(FATAL) << "Ack to restore failed in I/O";
-  }
-  state_ = saved_state_;
-  saved_state_ = MainLoopState::kInit;
-  return true;
-}
-
-bool Session::Kill(SharedFD hal_cli, const std::string& response_msg) {
-  state_ = MainLoopState::kAwaitCleanup;
-  saved_state_ = MainLoopState::kInvalid;
-  if (!packet::SendAck(hal_cli, session_id_, true, response_msg)) {
-    ConfUiLog(FATAL) << "I/O error in ack to Abort";
-    return false;
-  }
-  return true;
-}
-
 void Session::CleanUp() {
   if (state_ != MainLoopState::kAwaitCleanup) {
     ConfUiLog(FATAL) << "Clean up a session only when in kAwaitCleanup";
   }
+  state_ = MainLoopState::kTerminated;
   // common action done when the state is back to init state
   host_mode_ctrl_.SetMode(HostModeCtrl::ModeType::kAndroidMode);
 }
 
-void Session::ReportErrorToHal(SharedFD hal_cli, const std::string& msg) {
-  // reset the session -- destroy it & recreate it with the same
-  // session id
+void Session::ScheduleToTerminate() {
   state_ = MainLoopState::kAwaitCleanup;
-  if (!packet::SendAck(hal_cli, session_id_, false, msg)) {
-    ConfUiLog(FATAL) << "I/O error in sending ack to report rendering failure";
+  saved_state_ = MainLoopState::kInvalid;
+}
+
+bool Session::ReportErrorToHal(SharedFD hal_cli, const std::string& msg) {
+  ScheduleToTerminate();
+  if (!SendAck(hal_cli, session_id_, false, msg)) {
+    ConfUiLog(ERROR) << "I/O error in sending ack to report rendering failure";
+    return false;
   }
+  return true;
+}
+
+void Session::Abort() {
+  ConfUiLog(VERBOSE) << "Abort is called";
+  ScheduleToTerminate();
   return;
 }
 
-bool Session::Abort(SharedFD hal_cli) { return Kill(hal_cli, "aborted"); }
+void Session::UserAbort(SharedFD hal_cli) {
+  ConfUiLog(VERBOSE) << "it is a user abort input.";
+  SendAbortCmd(hal_cli, GetId());
+  Abort();
+  ScheduleToTerminate();
+}
 
-void Session::HandleInit(const bool is_user_input, SharedFD hal_cli,
-                         const FsmInput fsm_input,
-                         const std::string& additional_info) {
-  using namespace cuttlefish::confui::packet;
-  if (is_user_input) {
+bool Session::HandleInit(SharedFD hal_cli, const FsmInput fsm_input,
+                         const ConfUiMessage& conf_ui_message) {
+  if (IsUserInput(fsm_input)) {
     // ignore user input
     state_ = MainLoopState::kInit;
-    return;
+    return true;
   }
 
-  ConfUiLog(DEBUG) << ToString(fsm_input) << "is handled in HandleInit";
+  ConfUiLog(VERBOSE) << ToString(fsm_input) << "is handled in HandleInit";
   if (fsm_input != FsmInput::kHalStart) {
     ConfUiLog(ERROR) << "invalid cmd for Init State:" << ToString(fsm_input);
-    // reset the session -- destroy it & recreate it with the same
-    // session id
-    ReportErrorToHal(hal_cli, "wrong hal command");
-    return;
+    // ReportErrorToHal returns true if error report was successful
+    // However, anyway we abort this session on the host
+    ReportErrorToHal(hal_cli, HostError::kSystemError);
+    return false;
   }
 
   // Start Session
-  ConfUiLog(DEBUG) << "Sending ack to hal_cli: "
-                   << Enum2Base(ConfUiCmd::kCliAck);
+  ConfUiLog(VERBOSE) << "Sending ack to hal_cli: "
+                     << Enum2Base(ConfUiCmd::kCliAck);
   host_mode_ctrl_.SetMode(HostModeCtrl::ModeType::kConfUI_Mode);
-  auto confirmation_msg = additional_info;
-  if (!RenderDialog(confirmation_msg, locale_)) {
+
+  auto start_cmd_msg = static_cast<const ConfUiStartMessage&>(conf_ui_message);
+  prompt_text_ = start_cmd_msg.GetPromptText();
+  locale_ = start_cmd_msg.GetLocale();
+  extra_data_ = start_cmd_msg.GetExtraData();
+  ui_options_ = start_cmd_msg.GetUiOpts();
+
+  // cbor_ can be correctly created after the session received kStart cmd
+  // at runtime
+  cbor_ = std::make_unique<Cbor>(prompt_text_, extra_data_);
+  if (cbor_->IsMessageTooLong()) {
+    ConfUiLog(ERROR) << "The prompt text and extra_data are too long to be "
+                     << "properly encoded.";
+    ReportErrorToHal(hal_cli, HostError::kMessageTooLongError);
+    return false;
+  }
+  if (cbor_->IsMalformedUtf8()) {
+    ConfUiLog(ERROR) << "The prompt text appears to have incorrect UTF8 format";
+    ReportErrorToHal(hal_cli, HostError::kIncorrectUTF8);
+    return false;
+  }
+
+  if (!RenderDialog()) {
     // the confirmation UI is driven by a user app, not running from the start
-    // automatically so that means webRTC/vnc should have been set up
+    // automatically so that means webRTC should have been set up
     ConfUiLog(ERROR) << "Dialog is not rendered. However, it should."
                      << "No webRTC can't initiate any confirmation UI.";
-    ReportErrorToHal(hal_cli, "rendering failed");
-    return;
+    ReportErrorToHal(hal_cli, HostError::kUIError);
+    return false;
   }
-  if (!packet::SendAck(hal_cli, session_id_, true, "started")) {
-    ConfUiLog(FATAL) << "Ack to kStart failed in I/O";
+  start_time_ = std::make_unique<TimePoint>(std::move(Clock::now()));
+  if (!SendAck(hal_cli, session_id_, true, "started")) {
+    ConfUiLog(ERROR) << "Ack to kStart failed in I/O";
+    return false;
   }
   state_ = MainLoopState::kInSession;
-  return;
+  return true;
 }
 
-void Session::HandleInSession(const bool is_user_input, SharedFD hal_cli,
-                              const FsmInput fsm_input) {
-  if (!is_user_input) {
-    ConfUiLog(FATAL) << "cmd" << ToString(fsm_input)
-                     << "should not be handled in HandleInSession";
-    ReportErrorToHal(hal_cli, "wrong hal command");
-    return;
+bool Session::HandleInSession(SharedFD hal_cli, const FsmInput fsm_input,
+                              const ConfUiMessage& conf_ui_msg) {
+  auto invalid_input_handler = [&, this]() {
+    ReportErrorToHal(hal_cli, HostError::kSystemError);
+    ConfUiLog(ERROR) << "cmd " << ToString(fsm_input)
+                     << " should not be handled in HandleInSession";
+  };
+
+  if (!IsUserInput(fsm_input)) {
+    invalid_input_handler();
+    return false;
   }
 
-  // send to hal_cli either confirm or cancel
-  if (fsm_input != FsmInput::kUserConfirm &&
-      fsm_input != FsmInput::kUserCancel) {
-    /*
-     * TODO([email protected]): change here when other user inputs must
-     * be handled
-     *
-     */
-    if (!packet::SendAck(hal_cli, session_id_, true,
-                         "invalid user input error")) {
-      // note that input is what we control in memory
-      ConfUiCheck(false) << "Input must be either confirm or cancel for now.";
+  const auto& user_input_msg =
+      static_cast<const ConfUiUserSelectionMessage&>(conf_ui_msg);
+  const auto response = user_input_msg.GetResponse();
+  if (response == UserResponse::kUnknown ||
+      response == UserResponse::kUserAbort) {
+    invalid_input_handler();
+    return false;
+  }
+
+  ConfUiLog(VERBOSE) << "In HandleInSession, session " << session_id_
+                     << " is sending the user input " << ToString(fsm_input);
+
+  bool is_success = false;
+  if (response == UserResponse::kCancel) {
+    // no need to sign
+    is_success =
+        SendResponse(hal_cli, session_id_, UserResponse::kCancel,
+                     std::vector<std::uint8_t>{}, std::vector<std::uint8_t>{});
+  } else {
+    // TODO(kwstephenkim): sign using cuttlefish host secure_env
+    message_ = std::move(cbor_->GetMessage());
+    auto message_opt = sign(message_);
+    if (!message_opt) {
+      ReportErrorToHal(hal_cli, HostError::kSystemError);
+      return false;
     }
-    return;
+    signed_confirmation_ = message_opt.value();
+    is_success = SendResponse(hal_cli, session_id_, UserResponse::kConfirm,
+                              signed_confirmation_, message_);
   }
 
-  ConfUiLog(DEBUG) << "In HandlieInSession, session" << session_id_
-                   << "is sending the user input" << ToString(fsm_input);
-  auto selection = UserResponse::kConfirm;
-  if (fsm_input == FsmInput::kUserCancel) {
-    selection = UserResponse::kCancel;
-  }
-  if (!packet::SendResponse(hal_cli, session_id_, selection)) {
-    ConfUiLog(FATAL) << "I/O error in sending user response to HAL";
+  if (!is_success) {
+    ConfUiLog(ERROR) << "I/O error in sending user response to HAL";
+    return false;
   }
   state_ = MainLoopState::kWaitStop;
-  return;
+  return true;
 }
 
-void Session::HandleWaitStop(const bool is_user_input, SharedFD hal_cli,
-                             const FsmInput fsm_input) {
-  using namespace cuttlefish::confui::packet;
-
-  if (is_user_input) {
+bool Session::HandleWaitStop(SharedFD hal_cli, const FsmInput fsm_input) {
+  if (IsUserInput(fsm_input)) {
     // ignore user input
     state_ = MainLoopState::kWaitStop;
-    return;
+    return true;
   }
   if (fsm_input == FsmInput::kHalStop) {
-    ConfUiLog(DEBUG) << "Handling Abort in kWaitStop.";
-    Kill(hal_cli, "stopped");
-    return;
+    ConfUiLog(VERBOSE) << "Handling Abort in kWaitStop.";
+    ScheduleToTerminate();
+    return true;
   }
+  ReportErrorToHal(hal_cli, HostError::kSystemError);
   ConfUiLog(FATAL) << "In WaitStop, received wrong HAL command "
                    << ToString(fsm_input);
-  state_ = MainLoopState::kAwaitCleanup;
-  return;
+  return false;
 }
 
 }  // end of namespace confui
diff --git a/host/libs/confui/session.h b/host/libs/confui/session.h
index 87e98c9..1afccac 100644
--- a/host/libs/confui/session.h
+++ b/host/libs/confui/session.h
@@ -16,13 +16,19 @@
 
 #pragma once
 
+#include <atomic>
+#include <chrono>
 #include <memory>
+#include <string>
+
+#include <teeui/msg_formatting.h>
 
 #include "common/libs/confui/confui.h"
+#include "host/libs/confui/cbor.h"
 #include "host/libs/confui/host_mode_ctrl.h"
 #include "host/libs/confui/host_renderer.h"
 #include "host/libs/confui/server_common.h"
-#include "host/libs/confui/session.h"
+#include "host/libs/confui/sign.h"
 #include "host/libs/screen_connector/screen_connector.h"
 
 namespace cuttlefish {
@@ -37,8 +43,8 @@
  */
 class Session {
  public:
-  Session(const std::string& session_id, const std::uint32_t display_num,
-          ConfUiRenderer& host_renderer, HostModeCtrl& host_mode_ctrl,
+  Session(const std::string& session_name, const std::uint32_t display_num,
+          HostModeCtrl& host_mode_ctrl,
           ScreenConnectorFrameRenderer& screen_connector,
           const std::string& locale = "en");
 
@@ -48,9 +54,8 @@
 
   MainLoopState GetState() { return state_; }
 
-  MainLoopState Transition(const bool is_user_input, SharedFD& hal_cli,
-                           const FsmInput fsm_input,
-                           const std::string& additional_info);
+  MainLoopState Transition(SharedFD& hal_cli, const FsmInput fsm_input,
+                           const ConfUiMessage& conf_ui_message);
 
   /**
    * this make a transition from kWaitStop or kInSession to kSuspend
@@ -63,49 +68,82 @@
   bool Restore(SharedFD hal_cli);
 
   // abort session
-  bool Abort(SharedFD hal_cli);
+  void Abort();
+
+  // client on the host wants to abort
+  // should let the guest know it
+  void UserAbort(SharedFD hal_cli);
 
   bool IsSuspended() const;
   void CleanUp();
 
+  bool IsConfirm(const int x, const int y) {
+    return renderer_->IsInConfirm(x, y);
+  }
+
+  bool IsCancel(const int x, const int y) {
+    return renderer_->IsInCancel(x, y);
+  }
+
+  // tell if grace period has passed
+  bool IsReadyForUserInput() const;
+
  private:
-  /** create a frame, and render it on the vnc/webRTC client
+  bool IsUserInput(const FsmInput fsm_input) {
+    return fsm_input == FsmInput::kUserEvent;
+  }
+
+  /** create a frame, and render it on the webRTC client
    *
    * note that this does not check host_ctrl_mode_
    */
-  bool RenderDialog(const std::string& msg, const std::string& locale);
+  bool RenderDialog();
 
   // transition actions on each state per input
   // the new state will be save to the state_ at the end of each call
-  void HandleInit(const bool is_user_input, SharedFD hal_cli,
-                  const FsmInput fsm_input, const std::string& additional_info);
+  //
+  // when false is returned, the FSM must terminate
+  // and, no need to let the guest know
+  bool HandleInit(SharedFD hal_cli, const FsmInput fsm_input,
+                  const ConfUiMessage& conf_ui_msg);
 
-  void HandleWaitStop(const bool is_user_input, SharedFD hal_cli,
-                      const FsmInput fsm_input);
+  bool HandleWaitStop(SharedFD hal_cli, const FsmInput fsm_input);
 
-  void HandleInSession(const bool is_user_input, SharedFD hal_cli,
-                       const FsmInput fsm_input);
-
-  bool Kill(SharedFD hal_cli, const std::string& response_msg);
+  bool HandleInSession(SharedFD hal_cli, const FsmInput fsm_input,
+                       const ConfUiMessage& conf_ui_msg);
 
   // report with an error ack to HAL, and reset the FSM
-  void ReportErrorToHal(SharedFD hal_cli, const std::string& msg);
+  bool ReportErrorToHal(SharedFD hal_cli, const std::string& msg);
+
+  void ScheduleToTerminate();
+
+  bool IsInverted() const;
+  bool IsMagnified() const;
 
   const std::string session_id_;
   const std::uint32_t display_num_;
-  // host renderer is shared across sessions
-  ConfUiRenderer& renderer_;
+  std::unique_ptr<ConfUiRenderer> renderer_;
   HostModeCtrl& host_mode_ctrl_;
   ScreenConnectorFrameRenderer& screen_connector_;
 
   // only context to save
-  std::string prompt_;
+  std::string prompt_text_;
   std::string locale_;
+  std::vector<teeui::UIOption> ui_options_;
+  std::vector<std::uint8_t> extra_data_;
+  // the second argument for resultCB of promptUserConfirmation
+  std::vector<std::uint8_t> signed_confirmation_;
+  std::vector<std::uint8_t> message_;
 
-  // effectively, this variables are shared with vnc, webRTC thread
+  std::unique_ptr<Cbor> cbor_;
+
+  // effectively, this variables are shared with webRTC thread
   // the input demuxer will check the confirmation UI mode based on this
   std::atomic<MainLoopState> state_;
   MainLoopState saved_state_;  // for restore/suspend
+  using Clock = std::chrono::steady_clock;
+  using TimePoint = std::chrono::time_point<Clock>;
+  std::unique_ptr<TimePoint> start_time_;
 };
 }  // end of namespace confui
 }  // end of namespace cuttlefish
diff --git a/host/libs/confui/sign.cc b/host/libs/confui/sign.cc
new file mode 100644
index 0000000..683e9fc
--- /dev/null
+++ b/host/libs/confui/sign.cc
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "host/libs/confui/sign.h"
+
+#include <openssl/hmac.h>
+#include <openssl/sha.h>
+
+#include "host/libs/confui/sign_utils.h"
+
+namespace cuttlefish {
+namespace confui {
+class HMacImplementation {
+ public:
+  static std::optional<support::hmac_t> hmac256(
+      const support::auth_token_key_t& key,
+      std::initializer_list<support::ByteBufferProxy> buffers);
+};
+
+std::optional<support::hmac_t> HMacImplementation::hmac256(
+    const support::auth_token_key_t& key,
+    std::initializer_list<support::ByteBufferProxy> buffers) {
+  HMAC_CTX hmacCtx;
+  HMAC_CTX_init(&hmacCtx);
+  if (!HMAC_Init_ex(&hmacCtx, key.data(), key.size(), EVP_sha256(), nullptr)) {
+    return {};
+  }
+  for (auto& buffer : buffers) {
+    if (!HMAC_Update(&hmacCtx, buffer.data(), buffer.size())) {
+      return {};
+    }
+  }
+  support::hmac_t result;
+  if (!HMAC_Final(&hmacCtx, result.data(), nullptr)) {
+    return {};
+  }
+  return result;
+}
+
+/**
+ * The test key is 32byte word with all bytes set to TestKeyBits::BYTE.
+ */
+enum class TestKeyBits : uint8_t {
+  BYTE = 165 /* 0xA5 */,
+};
+
+std::optional<std::vector<std::uint8_t>> sign(
+    const std::vector<std::uint8_t>& message) {
+  // the same as userConfirm()
+  using namespace support;
+  auth_token_key_t key;
+  key.fill(static_cast<std::uint8_t>(TestKeyBits::BYTE));
+  using HMacer = HMacImplementation;
+  auto confirm_signed_opt =
+      HMacer::hmac256(key, {"confirmation token", message});
+  if (!confirm_signed_opt) {
+    return std::nullopt;
+  }
+  auto confirm_signed = confirm_signed_opt.value();
+  return {
+      std::vector<std::uint8_t>(confirm_signed.begin(), confirm_signed.end())};
+}
+
+}  // namespace confui
+}  // end of namespace cuttlefish
diff --git a/host/libs/confui/sign.h b/host/libs/confui/sign.h
new file mode 100644
index 0000000..d617da7
--- /dev/null
+++ b/host/libs/confui/sign.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <cstdint>
+#include <optional>
+#include <vector>
+
+namespace cuttlefish {
+namespace confui {
+
+// TODO(kwstephenkim): replace this with signing using secure env host services
+std::optional<std::vector<std::uint8_t>> sign(
+    const std::vector<std::uint8_t>& message);
+
+}  // namespace confui
+}  // end of namespace cuttlefish
diff --git a/host/libs/confui/sign_utils.h b/host/libs/confui/sign_utils.h
new file mode 100644
index 0000000..929f32a
--- /dev/null
+++ b/host/libs/confui/sign_utils.h
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2021, The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <array>
+#include <cstdint>
+
+namespace cuttlefish {
+namespace confui {
+namespace support {
+using auth_token_key_t = std::array<std::uint8_t, 32>;
+using hmac_t = auth_token_key_t;
+
+template <typename T>
+auto bytes_cast(const T& v) -> const uint8_t (&)[sizeof(T)] {
+  return *reinterpret_cast<const uint8_t(*)[sizeof(T)]>(&v);
+}
+template <typename T>
+auto bytes_cast(T& v) -> uint8_t (&)[sizeof(T)] {
+  return *reinterpret_cast<uint8_t(*)[sizeof(T)]>(&v);
+}
+
+template <typename IntType, uint32_t byteOrder>
+struct choose_hton;
+
+template <typename IntType>
+struct choose_hton<IntType, __ORDER_LITTLE_ENDIAN__> {
+  inline static IntType hton(const IntType& value) {
+    IntType result = {};
+    const unsigned char* inbytes =
+        reinterpret_cast<const unsigned char*>(&value);
+    unsigned char* outbytes = reinterpret_cast<unsigned char*>(&result);
+    for (int i = sizeof(IntType) - 1; i >= 0; --i) {
+      *(outbytes++) = inbytes[i];
+    }
+    return result;
+  }
+};
+
+template <typename IntType>
+struct choose_hton<IntType, __ORDER_BIG_ENDIAN__> {
+  inline static IntType hton(const IntType& value) { return value; }
+};
+
+template <typename IntType>
+inline IntType hton(const IntType& value) {
+  return choose_hton<IntType, __BYTE_ORDER__>::hton(value);
+}
+
+class ByteBufferProxy {
+  template <typename T>
+  struct has_data {
+    template <typename U>
+    static int f(const U*, const void*) {
+      return 0;
+    }
+    template <typename U>
+    static int* f(const U* u, decltype(u->data())) {
+      return nullptr;
+    }
+    static constexpr bool value =
+        std::is_pointer<decltype(f((T*)nullptr, ""))>::value;
+  };
+
+ public:
+  template <typename T>
+  ByteBufferProxy(const T& buffer, decltype(buffer.data()) = nullptr)
+      : data_(reinterpret_cast<const uint8_t*>(buffer.data())),
+        size_(buffer.size()) {
+    static_assert(sizeof(decltype(*buffer.data())) == 1, "elements to large");
+  }
+
+  // this overload kicks in for types that have .c_str() but not .data(), such
+  // as hidl_string. std::string has both so we need to explicitly disable this
+  // overload if .data() is present.
+  template <typename T>
+  ByteBufferProxy(
+      const T& buffer,
+      std::enable_if_t<!has_data<T>::value, decltype(buffer.c_str())> = nullptr)
+      : data_(reinterpret_cast<const uint8_t*>(buffer.c_str())),
+        size_(buffer.size()) {
+    static_assert(sizeof(decltype(*buffer.c_str())) == 1, "elements to large");
+  }
+
+  template <size_t size>
+  ByteBufferProxy(const char (&buffer)[size])
+      : data_(reinterpret_cast<const uint8_t*>(buffer)), size_(size - 1) {
+    static_assert(size > 0, "even an empty string must be 0-terminated");
+  }
+
+  template <size_t size>
+  ByteBufferProxy(const uint8_t (&buffer)[size]) : data_(buffer), size_(size) {}
+
+  ByteBufferProxy() : data_(nullptr), size_(0) {}
+
+  const uint8_t* data() const { return data_; }
+  size_t size() const { return size_; }
+
+  const uint8_t* begin() const { return data_; }
+  const uint8_t* end() const { return data_ + size_; }
+
+ private:
+  const uint8_t* data_;
+  size_t size_;
+};
+
+// copied from:
+// hardware/interface/confirmationui/support/include/android/hardware/confirmationui/support/confirmationui_utils.h
+
+}  // end of namespace support
+}  // end of namespace confui
+}  // end of namespace cuttlefish
diff --git a/host/libs/graphics_detector/Android.bp b/host/libs/graphics_detector/Android.bp
index bd6a55e..679825a 100644
--- a/host/libs/graphics_detector/Android.bp
+++ b/host/libs/graphics_detector/Android.bp
@@ -36,6 +36,7 @@
     ],
     header_libs: [
         "egl_headers",
+        "gl_headers",
         "vulkan_headers",
     ],
     shared_libs: [
@@ -44,3 +45,19 @@
     ],
     defaults: ["cuttlefish_host"],
 }
+
+cc_binary {
+    name: "detect_graphics",
+    srcs: [
+        "detect_graphics.cpp",
+    ],
+    shared_libs: [
+        "libbase",
+        "liblog",
+    ],
+    static_libs: [
+        "libcuttlefish_graphics_detector",
+        "libgflags",
+    ],
+    defaults: ["cuttlefish_host"],
+}
diff --git a/host/libs/graphics_detector/detect_graphics.cpp b/host/libs/graphics_detector/detect_graphics.cpp
new file mode 100644
index 0000000..6032520
--- /dev/null
+++ b/host/libs/graphics_detector/detect_graphics.cpp
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include <string>
+
+#include <gflags/gflags.h>
+
+#include "android-base/logging.h"
+#include "host/libs/graphics_detector/graphics_detector.h"
+
+int main(int argc, char* argv[]) {
+  ::android::base::InitLogging(argv, android::base::StdioLogger);
+  ::android::base::SetMinimumLogSeverity(android::base::VERBOSE);
+  ::gflags::ParseCommandLineFlags(&argc, &argv, true);
+  LOG(INFO) << cuttlefish::GetGraphicsAvailabilityWithSubprocessCheck();
+}
\ No newline at end of file
diff --git a/host/libs/graphics_detector/graphics_detector.cpp b/host/libs/graphics_detector/graphics_detector.cpp
index 367e637..5776c41 100644
--- a/host/libs/graphics_detector/graphics_detector.cpp
+++ b/host/libs/graphics_detector/graphics_detector.cpp
@@ -21,6 +21,7 @@
 
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
+#include <GLES2/gl2.h>
 #include <android-base/logging.h>
 #include <android-base/strings.h>
 #include <dlfcn.h>
@@ -57,50 +58,50 @@
 void PopulateGlAvailability(GraphicsAvailability* availability) {
   ManagedLibrary gl_lib(dlopen(kGlLib, RTLD_NOW | RTLD_LOCAL));
   if (!gl_lib) {
-    LOG(VERBOSE) << "Failed to dlopen " << kGlLib << ".";
+    LOG(DEBUG) << "Failed to dlopen " << kGlLib << ".";
     return;
   }
-  LOG(VERBOSE) << "Loaded " << kGlLib << ".";
+  LOG(DEBUG) << "Loaded " << kGlLib << ".";
   availability->has_gl = true;
 }
 
 void PopulateGles1Availability(GraphicsAvailability* availability) {
   ManagedLibrary gles1_lib(dlopen(kGles1Lib, RTLD_NOW | RTLD_LOCAL));
   if (!gles1_lib) {
-    LOG(VERBOSE) << "Failed to dlopen " << kGles1Lib << ".";
+    LOG(DEBUG) << "Failed to dlopen " << kGles1Lib << ".";
     return;
   }
-  LOG(VERBOSE) << "Loaded " << kGles1Lib << ".";
+  LOG(DEBUG) << "Loaded " << kGles1Lib << ".";
   availability->has_gles1 = true;
 }
 
 void PopulateGles2Availability(GraphicsAvailability* availability) {
   ManagedLibrary gles2_lib(dlopen(kGles2Lib, RTLD_NOW | RTLD_LOCAL));
   if (!gles2_lib) {
-    LOG(VERBOSE) << "Failed to dlopen " << kGles2Lib << ".";
+    LOG(DEBUG) << "Failed to dlopen " << kGles2Lib << ".";
     return;
   }
-  LOG(VERBOSE) << "Loaded " << kGles2Lib << ".";
+  LOG(DEBUG) << "Loaded " << kGles2Lib << ".";
   availability->has_gles2 = true;
 }
 
 void PopulateEglAvailability(GraphicsAvailability* availability) {
   ManagedLibrary egllib(dlopen(kEglLib, RTLD_NOW | RTLD_LOCAL));
   if (!egllib) {
-    LOG(VERBOSE) << "Failed to dlopen " << kEglLib << ".";
+    LOG(DEBUG) << "Failed to dlopen " << kEglLib << ".";
     return;
   }
-  LOG(VERBOSE) << "Loaded " << kEglLib << ".";
+  LOG(DEBUG) << "Loaded " << kEglLib << ".";
   availability->has_egl = true;
 
   PFNEGLGETPROCADDRESSPROC eglGetProcAddress =
       reinterpret_cast<PFNEGLGETPROCADDRESSPROC>(
           dlsym(egllib.get(), "eglGetProcAddress"));
   if (eglGetProcAddress == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglGetProcAddress.";
+    LOG(DEBUG) << "Failed to find function eglGetProcAddress.";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglGetProcAddress.";
+  LOG(DEBUG) << "Loaded eglGetProcAddress.";
 
   // Some implementations have it so that eglGetProcAddress is only for
   // loading EXT functions.
@@ -115,155 +116,127 @@
   PFNEGLGETERRORPROC eglGetError =
     reinterpret_cast<PFNEGLGETERRORPROC>(EglLoadFunction("eglGetError"));
   if (eglGetError == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglGetError.";
+    LOG(DEBUG) << "Failed to find function eglGetError.";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglGetError.";
+  LOG(DEBUG) << "Loaded eglGetError.";
 
   PFNEGLGETDISPLAYPROC eglGetDisplay =
     reinterpret_cast<PFNEGLGETDISPLAYPROC>(EglLoadFunction("eglGetDisplay"));
   if (eglGetDisplay == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglGetDisplay.";
+    LOG(DEBUG) << "Failed to find function eglGetDisplay.";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglGetDisplay.";
-
-  EGLDisplay default_display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-  if (default_display == EGL_NO_DISPLAY) {
-    LOG(VERBOSE) << "Failed to get default display. " << eglGetError();
-    return;
-  }
-  LOG(VERBOSE) << "Found default display.";
-  availability->has_egl_default_display = true;
-
-  PFNEGLINITIALIZEPROC eglInitialize =
-    reinterpret_cast<PFNEGLINITIALIZEPROC>(EglLoadFunction("eglInitialize"));
-  if (eglInitialize == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglQueryString";
-    return;
-  }
-
-  EGLint client_version_major = 0;
-  EGLint client_version_minor = 0;
-  if (eglInitialize(default_display,
-                    &client_version_major,
-                    &client_version_minor) != EGL_TRUE) {
-    LOG(VERBOSE) << "Failed to initialize default display.";
-    return;
-  }
-  LOG(VERBOSE) << "Initialized default display.";
+  LOG(DEBUG) << "Loaded eglGetDisplay.";
 
   PFNEGLQUERYSTRINGPROC eglQueryString =
     reinterpret_cast<PFNEGLQUERYSTRINGPROC>(EglLoadFunction("eglQueryString"));
   if (eglQueryString == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglQueryString";
+    LOG(DEBUG) << "Failed to find function eglQueryString";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglQueryString.";
+  LOG(DEBUG) << "Loaded eglQueryString.";
 
-  std::string client_extensions;
-  if (client_version_major >= 1 && client_version_minor >= 5) {
-    client_extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
-  }
-  availability->egl_client_extensions = client_extensions;
-
-  EGLDisplay display = EGL_NO_DISPLAY;
-
-  if (client_extensions.find("EGL_EXT_platform_base") != std::string::npos) {
-    LOG(VERBOSE) << "Client extension EGL_EXT_platform_base is supported.";
+  EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+  if (display != EGL_NO_DISPLAY) {
+    LOG(DEBUG) << "Found default display.";
+  } else {
+    LOG(DEBUG) << "Failed to get default display. " << eglGetError()
+                 << ". Attempting to get surfaceless display via "
+                 << "eglGetPlatformDisplayEXT(EGL_PLATFORM_SURFACELESS_MESA)";
 
     PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT =
       reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(
         EglLoadFunction("eglGetPlatformDisplayEXT"));
     if (eglGetPlatformDisplayEXT == nullptr) {
-      LOG(VERBOSE) << "Failed to find function eglGetPlatformDisplayEXT";
-      return;
+      LOG(DEBUG) << "Failed to find function eglGetPlatformDisplayEXT";
+    } else {
+      display = eglGetPlatformDisplayEXT(EGL_PLATFORM_SURFACELESS_MESA,
+                                         EGL_DEFAULT_DISPLAY, NULL);
     }
+  }
 
-    display =
-      eglGetPlatformDisplayEXT(EGL_PLATFORM_SURFACELESS_MESA,
-                               EGL_DEFAULT_DISPLAY,
-                               NULL);
-  } else {
-    LOG(VERBOSE) << "Failed to find client extension EGL_EXT_platform_base.";
-  }
   if (display == EGL_NO_DISPLAY) {
-    LOG(VERBOSE) << "Failed to get EGL_PLATFORM_SURFACELESS_MESA display..."
-                 << "failing back to EGL_DEFAULT_DISPLAY display.";
-    display = default_display;
-  }
-  if (display == EGL_NO_DISPLAY) {
-    LOG(VERBOSE) << "Failed to find display.";
+    LOG(DEBUG) << "Failed to find display.";
     return;
   }
 
+  PFNEGLINITIALIZEPROC eglInitialize =
+      reinterpret_cast<PFNEGLINITIALIZEPROC>(EglLoadFunction("eglInitialize"));
+  if (eglInitialize == nullptr) {
+    LOG(DEBUG) << "Failed to find function eglQueryString";
+    return;
+  }
+
+  EGLint client_version_major = 0;
+  EGLint client_version_minor = 0;
   if (eglInitialize(display,
                     &client_version_major,
                     &client_version_minor) != EGL_TRUE) {
-    LOG(VERBOSE) << "Failed to initialize surfaceless display.";
+    LOG(DEBUG) << "Failed to initialize display.";
     return;
   }
-  LOG(VERBOSE) << "Initialized surfaceless display.";
+  LOG(DEBUG) << "Initialized display.";
 
   const std::string version_string = eglQueryString(display, EGL_VERSION);
   if (version_string.empty()) {
-    LOG(VERBOSE) << "Failed to query client version.";
+    LOG(DEBUG) << "Failed to query client version.";
     return;
   }
-  LOG(VERBOSE) << "Found version: " << version_string;
+  LOG(DEBUG) << "Found version: " << version_string;
   availability->egl_version = version_string;
 
   const std::string vendor_string = eglQueryString(display, EGL_VENDOR);
   if (vendor_string.empty()) {
-    LOG(VERBOSE) << "Failed to query vendor.";
+    LOG(DEBUG) << "Failed to query vendor.";
     return;
   }
-  LOG(VERBOSE) << "Found vendor: " << vendor_string;
+  LOG(DEBUG) << "Found vendor: " << vendor_string;
   availability->egl_vendor = vendor_string;
 
   const std::string extensions_string = eglQueryString(display, EGL_EXTENSIONS);
   if (extensions_string.empty()) {
-    LOG(VERBOSE) << "Failed to query extensions.";
+    LOG(DEBUG) << "Failed to query extensions.";
     return;
   }
-  LOG(VERBOSE) << "Found extensions: " << extensions_string;
+  LOG(DEBUG) << "Found extensions: " << extensions_string;
   availability->egl_extensions = extensions_string;
 
   if (extensions_string.find(kSurfacelessContextExt) == std::string::npos) {
-    LOG(VERBOSE) << "Failed to find extension EGL_KHR_surfaceless_context.";
+    LOG(DEBUG) << "Failed to find extension EGL_KHR_surfaceless_context.";
     return;
   }
 
   const std::string display_apis_string = eglQueryString(display,
                                                          EGL_CLIENT_APIS);
   if (display_apis_string.empty()) {
-    LOG(VERBOSE) << "Failed to query display apis.";
+    LOG(DEBUG) << "Failed to query display apis.";
     return;
   }
-  LOG(VERBOSE) << "Found display apis: " << display_apis_string;
+  LOG(DEBUG) << "Found display apis: " << display_apis_string;
 
   PFNEGLBINDAPIPROC eglBindAPI =
     reinterpret_cast<PFNEGLBINDAPIPROC>(EglLoadFunction("eglBindAPI"));
   if (eglBindAPI == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglBindAPI";
+    LOG(DEBUG) << "Failed to find function eglBindAPI";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglBindAPI.";
+  LOG(DEBUG) << "Loaded eglBindAPI.";
 
   if (eglBindAPI(EGL_OPENGL_ES_API) == EGL_FALSE) {
-    LOG(VERBOSE) << "Failed to bind GLES API.";
+    LOG(DEBUG) << "Failed to bind GLES API.";
     return;
   }
-  LOG(VERBOSE) << "Bound GLES API.";
+  LOG(DEBUG) << "Bound GLES API.";
 
   PFNEGLCHOOSECONFIGPROC eglChooseConfig =
     reinterpret_cast<PFNEGLCHOOSECONFIGPROC>(
       EglLoadFunction("eglChooseConfig"));
   if (eglChooseConfig == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglChooseConfig";
+    LOG(DEBUG) << "Failed to find function eglChooseConfig";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglChooseConfig.";
+  LOG(DEBUG) << "Loaded eglChooseConfig.";
 
   const EGLint framebuffer_config_attributes[] = {
     EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
@@ -282,28 +255,28 @@
                       &framebuffer_config,
                       1,
                       &num_framebuffer_configs) != EGL_TRUE) {
-    LOG(VERBOSE) << "Failed to find matching framebuffer config.";
+    LOG(DEBUG) << "Failed to find matching framebuffer config.";
     return;
   }
-  LOG(VERBOSE) << "Found matching framebuffer config.";
+  LOG(DEBUG) << "Found matching framebuffer config.";
 
   PFNEGLCREATECONTEXTPROC eglCreateContext =
     reinterpret_cast<PFNEGLCREATECONTEXTPROC>(
       EglLoadFunction("eglCreateContext"));
   if (eglCreateContext == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglCreateContext";
+    LOG(DEBUG) << "Failed to find function eglCreateContext";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglCreateContext.";
+  LOG(DEBUG) << "Loaded eglCreateContext.";
 
   PFNEGLDESTROYCONTEXTPROC eglDestroyContext =
     reinterpret_cast<PFNEGLDESTROYCONTEXTPROC>(
       EglLoadFunction("eglDestroyContext"));
   if (eglDestroyContext == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglDestroyContext";
+    LOG(DEBUG) << "Failed to find function eglDestroyContext";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglDestroyContext.";
+  LOG(DEBUG) << "Loaded eglDestroyContext.";
 
   const EGLint context_attributes[] = {
     EGL_CONTEXT_CLIENT_VERSION, 2,
@@ -315,38 +288,77 @@
                                         EGL_NO_CONTEXT,
                                         context_attributes);
   if (context == EGL_NO_CONTEXT) {
-    LOG(VERBOSE) << "Failed to create EGL context.";
+    LOG(DEBUG) << "Failed to create EGL context.";
     return;
   }
-  LOG(VERBOSE) << "Created EGL context.";
+  LOG(DEBUG) << "Created EGL context.";
   Closer context_closer([&]() { eglDestroyContext(display, context); });
 
   PFNEGLMAKECURRENTPROC eglMakeCurrent =
     reinterpret_cast<PFNEGLMAKECURRENTPROC>(EglLoadFunction("eglMakeCurrent"));
   if (eglMakeCurrent == nullptr) {
-    LOG(VERBOSE) << "Failed to find function eglMakeCurrent";
+    LOG(DEBUG) << "Failed to find function eglMakeCurrent";
     return;
   }
-  LOG(VERBOSE) << "Loaded eglMakeCurrent.";
+  LOG(DEBUG) << "Loaded eglMakeCurrent.";
 
   if (eglMakeCurrent(display,
                      EGL_NO_SURFACE,
                      EGL_NO_SURFACE,
                      context) != EGL_TRUE) {
-    LOG(VERBOSE) << "Failed to make EGL context current.";
+    LOG(DEBUG) << "Failed to make EGL context current.";
     return;
   }
-  LOG(VERBOSE) << "Make EGL context current.";
-  availability->has_egl_surfaceless_with_gles = true;
+  LOG(DEBUG) << "Make EGL context current.";
+  availability->can_init_gles2_on_egl_surfaceless = true;
+
+  PFNGLGETSTRINGPROC glGetString =
+      reinterpret_cast<PFNGLGETSTRINGPROC>(eglGetProcAddress("glGetString"));
+
+  const GLubyte* gles2_vendor = glGetString(GL_VENDOR);
+  if (gles2_vendor == nullptr) {
+    LOG(DEBUG) << "Failed to query GLES2 vendor.";
+    return;
+  }
+  const std::string gles2_vendor_string((const char*)gles2_vendor);
+  LOG(DEBUG) << "Found GLES2 vendor: " << gles2_vendor_string;
+  availability->gles2_vendor = gles2_vendor_string;
+
+  const GLubyte* gles2_version = glGetString(GL_VERSION);
+  if (gles2_version == nullptr) {
+    LOG(DEBUG) << "Failed to query GLES2 vendor.";
+    return;
+  }
+  const std::string gles2_version_string((const char*)gles2_version);
+  LOG(DEBUG) << "Found GLES2 version: " << gles2_version_string;
+  availability->gles2_version = gles2_version_string;
+
+  const GLubyte* gles2_renderer = glGetString(GL_RENDERER);
+  if (gles2_renderer == nullptr) {
+    LOG(DEBUG) << "Failed to query GLES2 renderer.";
+    return;
+  }
+  const std::string gles2_renderer_string((const char*)gles2_renderer);
+  LOG(DEBUG) << "Found GLES2 renderer: " << gles2_renderer_string;
+  availability->gles2_renderer = gles2_renderer_string;
+
+  const GLubyte* gles2_extensions = glGetString(GL_EXTENSIONS);
+  if (gles2_extensions == nullptr) {
+    LOG(DEBUG) << "Failed to query GLES2 extensions.";
+    return;
+  }
+  const std::string gles2_extensions_string((const char*)gles2_extensions);
+  LOG(DEBUG) << "Found GLES2 extensions: " << gles2_extensions_string;
+  availability->gles2_extensions = gles2_extensions_string;
 }
 
 void PopulateVulkanAvailability(GraphicsAvailability* availability) {
   ManagedLibrary vklib(dlopen(kVulkanLib, RTLD_NOW | RTLD_LOCAL));
   if (!vklib) {
-    LOG(VERBOSE) << "Failed to dlopen " << kVulkanLib << ".";
+    LOG(DEBUG) << "Failed to dlopen " << kVulkanLib << ".";
     return;
   }
-  LOG(VERBOSE) << "Loaded " << kVulkanLib << ".";
+  LOG(DEBUG) << "Loaded " << kVulkanLib << ".";
   availability->has_vulkan = true;
 
   uint32_t instance_version = 0;
@@ -355,7 +367,7 @@
       reinterpret_cast<PFN_vkGetInstanceProcAddr>(
           dlsym(vklib.get(), "vkGetInstanceProcAddr"));
   if (vkGetInstanceProcAddr == nullptr) {
-    LOG(VERBOSE) << "Failed to find symbol vkGetInstanceProcAddr.";
+    LOG(DEBUG) << "Failed to find symbol vkGetInstanceProcAddr.";
     return;
   }
 
@@ -371,7 +383,7 @@
     reinterpret_cast<PFN_vkCreateInstance>(
       vkGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance"));
   if (vkCreateInstance == nullptr) {
-    LOG(VERBOSE) << "Failed to get function vkCreateInstance.";
+    LOG(DEBUG) << "Failed to get function vkCreateInstance.";
     return;
   }
 
@@ -398,25 +410,25 @@
   VkResult result = vkCreateInstance(&instance_create_info, nullptr, &instance);
   if (result != VK_SUCCESS) {
     if (result == VK_ERROR_OUT_OF_HOST_MEMORY) {
-      LOG(VERBOSE) << "Failed to create Vulkan instance: "
+      LOG(DEBUG) << "Failed to create Vulkan instance: "
                    << "VK_ERROR_OUT_OF_HOST_MEMORY.";
     } else if (result == VK_ERROR_OUT_OF_DEVICE_MEMORY) {
-      LOG(VERBOSE) << "Failed to create Vulkan instance: "
+      LOG(DEBUG) << "Failed to create Vulkan instance: "
                    << "VK_ERROR_OUT_OF_DEVICE_MEMORY.";
     } else if (result == VK_ERROR_INITIALIZATION_FAILED) {
-      LOG(VERBOSE) << "Failed to create Vulkan instance: "
+      LOG(DEBUG) << "Failed to create Vulkan instance: "
                    << "VK_ERROR_INITIALIZATION_FAILED.";
     } else if (result == VK_ERROR_LAYER_NOT_PRESENT) {
-      LOG(VERBOSE) << "Failed to create Vulkan instance: "
+      LOG(DEBUG) << "Failed to create Vulkan instance: "
                    << "VK_ERROR_LAYER_NOT_PRESENT.";
     } else if (result == VK_ERROR_EXTENSION_NOT_PRESENT) {
-      LOG(VERBOSE) << "Failed to create Vulkan instance: "
+      LOG(DEBUG) << "Failed to create Vulkan instance: "
                    << "VK_ERROR_EXTENSION_NOT_PRESENT.";
     } else if (result == VK_ERROR_INCOMPATIBLE_DRIVER) {
-      LOG(VERBOSE) << "Failed to create Vulkan instance: "
+      LOG(DEBUG) << "Failed to create Vulkan instance: "
                    << "VK_ERROR_INCOMPATIBLE_DRIVER.";
     } else {
-      LOG(VERBOSE) << "Failed to create Vulkan instance.";
+      LOG(DEBUG) << "Failed to create Vulkan instance.";
     }
     return;
   }
@@ -425,7 +437,7 @@
     reinterpret_cast<PFN_vkDestroyInstance>(
       vkGetInstanceProcAddr(instance, "vkDestroyInstance"));
   if (vkDestroyInstance == nullptr) {
-    LOG(VERBOSE) << "Failed to get function vkDestroyInstance.";
+    LOG(DEBUG) << "Failed to get function vkDestroyInstance.";
     return;
   }
 
@@ -435,7 +447,7 @@
     reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(
       vkGetInstanceProcAddr(instance, "vkEnumeratePhysicalDevices"));
   if (vkEnumeratePhysicalDevices == nullptr) {
-    LOG(VERBOSE) << "Failed to "
+    LOG(DEBUG) << "Failed to "
                  << "vkGetInstanceProcAddr(vkEnumeratePhysicalDevices).";
     return;
   }
@@ -444,7 +456,7 @@
     reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(
       vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties"));
   if (vkGetPhysicalDeviceProperties == nullptr) {
-    LOG(VERBOSE) << "Failed to "
+    LOG(DEBUG) << "Failed to "
                  << "vkGetInstanceProcAddr(vkGetPhysicalDeviceProperties).";
     return;
   }
@@ -453,7 +465,7 @@
     reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(
       vkGetInstanceProcAddr(instance, "vkEnumerateDeviceExtensionProperties"));
   if (vkEnumerateDeviceExtensionProperties == nullptr) {
-    LOG(VERBOSE) << "Failed to "
+    LOG(DEBUG) << "Failed to "
                  << "vkGetInstanceProcAddr("
                  << "vkEnumerateDeviceExtensionProperties"
                  << ").";
@@ -464,32 +476,32 @@
   result = vkEnumeratePhysicalDevices(instance, &device_count, nullptr);
   if (result != VK_SUCCESS) {
     if (result == VK_INCOMPLETE) {
-      LOG(VERBOSE) << "Failed to enumerate physical device count: "
+      LOG(DEBUG) << "Failed to enumerate physical device count: "
                    << "VK_INCOMPLETE";
     } else if (result == VK_ERROR_OUT_OF_HOST_MEMORY) {
-      LOG(VERBOSE) << "Failed to enumerate physical device count: "
+      LOG(DEBUG) << "Failed to enumerate physical device count: "
                    << "VK_ERROR_OUT_OF_HOST_MEMORY";
     } else if (result == VK_ERROR_OUT_OF_DEVICE_MEMORY) {
-      LOG(VERBOSE) << "Failed to enumerate physical device count: "
+      LOG(DEBUG) << "Failed to enumerate physical device count: "
                    << "VK_ERROR_OUT_OF_DEVICE_MEMORY";
     } else if (result == VK_ERROR_INITIALIZATION_FAILED) {
-      LOG(VERBOSE) << "Failed to enumerate physical device count: "
+      LOG(DEBUG) << "Failed to enumerate physical device count: "
                    << "VK_ERROR_INITIALIZATION_FAILED";
     } else {
-      LOG(VERBOSE) << "Failed to enumerate physical device count.";
+      LOG(DEBUG) << "Failed to enumerate physical device count.";
     }
     return;
   }
 
   if (device_count == 0) {
-    LOG(VERBOSE) << "No physical devices present.";
+    LOG(DEBUG) << "No physical devices present.";
     return;
   }
 
   std::vector<VkPhysicalDevice> devices(device_count, VK_NULL_HANDLE);
   result = vkEnumeratePhysicalDevices(instance, &device_count, devices.data());
   if (result != VK_SUCCESS) {
-    LOG(VERBOSE) << "Failed to enumerate physical devices.";
+    LOG(DEBUG) << "Failed to enumerate physical devices.";
     return;
   }
 
@@ -497,6 +509,8 @@
     VkPhysicalDeviceProperties device_properties = {};
     vkGetPhysicalDeviceProperties(device, &device_properties);
 
+    LOG(DEBUG) << "Found physical device: " << device_properties.deviceName;
+
     uint32_t device_extensions_count = 0;
     vkEnumerateDeviceExtensionProperties(device,
                                          nullptr,
@@ -519,6 +533,9 @@
     std::string device_extensions_string =
       android::base::Join(device_extensions_strings, ' ');
 
+    LOG(DEBUG) << "Found physical device extensions: "
+                 << device_extensions_string;
+
     if (device_properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) {
       availability->has_discrete_gpu = true;
       availability->discrete_gpu_device_name = device_properties.deviceName;
@@ -528,6 +545,18 @@
   }
 }
 
+std::string ToLower(const std::string& v) {
+  std::string result = v;
+  std::transform(result.begin(), result.end(), result.begin(),
+                 [](unsigned char c) { return std::tolower(c); });
+  return result;
+}
+
+bool IsLikelySoftwareRenderer(const std::string& renderer) {
+  const std::string lower_renderer = ToLower(renderer);
+  return lower_renderer.find("llvmpipe") != std::string::npos;
+}
+
 GraphicsAvailability GetGraphicsAvailability() {
   GraphicsAvailability availability;
 
@@ -544,7 +573,8 @@
 
 bool ShouldEnableAcceleratedRendering(
     const GraphicsAvailability& availability) {
-  return availability.has_egl && availability.has_egl_surfaceless_with_gles &&
+  return availability.can_init_gles2_on_egl_surfaceless &&
+         !IsLikelySoftwareRenderer(availability.gles2_renderer) &&
          availability.has_discrete_gpu;
 }
 
@@ -560,13 +590,13 @@
   }
   int status;
   if (waitpid(pid, &status, 0) != pid) {
-    PLOG(ERROR) << "Failed to wait for graphics check subprocess";
+    PLOG(DEBUG) << "Failed to wait for graphics check subprocess";
     return GraphicsAvailability{};
   }
   if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
     return GetGraphicsAvailability();
   }
-  LOG(VERBOSE) << "Subprocess for detect_graphics failed with " << status;
+  LOG(DEBUG) << "Subprocess for detect_graphics failed with " << status;
   return GraphicsAvailability{};
 }
 
@@ -575,20 +605,32 @@
   std::ios_base::fmtflags flags_backup(stream.flags());
   stream << std::boolalpha;
   stream << "Graphics Availability:\n";
-  stream << "OpenGL available: " << availability.has_gl << "\n";
-  stream << "OpenGL ES1 available: " << availability.has_gles1 << "\n";
-  stream << "OpenGL ES2 available: " << availability.has_gles2 << "\n";
-  stream << "EGL available: " << availability.has_egl << "\n";
+
+  stream << "\n";
+  stream << "OpenGL lib available: " << availability.has_gl << "\n";
+  stream << "OpenGL ES1 lib available: " << availability.has_gles1 << "\n";
+  stream << "OpenGL ES2 lib available: " << availability.has_gles2 << "\n";
+  stream << "EGL lib available: " << availability.has_egl << "\n";
+  stream << "Vulkan lib available: " << availability.has_vulkan << "\n";
+
+  stream << "\n";
   stream << "EGL client extensions: " << availability.egl_client_extensions
          << "\n";
-  stream << "EGL default display available: "
-         << availability.has_egl_default_display << "\n";
+
+  stream << "\n";
   stream << "EGL display vendor: " << availability.egl_vendor << "\n";
   stream << "EGL display version: " << availability.egl_version << "\n";
   stream << "EGL display extensions: " << availability.egl_extensions << "\n";
-  stream << "EGL surfaceless display with GLES: "
-         << availability.has_egl_surfaceless_with_gles << "\n";
-  stream << "Vulkan available: " << availability.has_vulkan << "\n";
+
+  stream << "GLES2 can init on surfaceless display: "
+         << availability.can_init_gles2_on_egl_surfaceless << "\n";
+  stream << "\n";
+  stream << "GLES2 vendor: " << availability.gles2_vendor << "\n";
+  stream << "GLES2 version: " << availability.gles2_version << "\n";
+  stream << "GLES2 renderer: " << availability.gles2_renderer << "\n";
+  stream << "GLES2 extensions: " << availability.gles2_extensions << "\n";
+
+  stream << "\n";
   stream << "Vulkan discrete GPU detected: " << availability.has_discrete_gpu
          << "\n";
   if (availability.has_discrete_gpu) {
@@ -597,6 +639,11 @@
     stream << "Vulkan discrete GPU device extensions: "
            << availability.discrete_gpu_device_extensions << "\n";
   }
+
+  stream << "\n";
+  stream << "Accelerated rendering supported: "
+         << ShouldEnableAcceleratedRendering(availability);
+
   stream.flags(flags_backup);
   return stream;
 }
diff --git a/host/libs/graphics_detector/graphics_detector.h b/host/libs/graphics_detector/graphics_detector.h
index 83a7068..1bacc3d 100644
--- a/host/libs/graphics_detector/graphics_detector.h
+++ b/host/libs/graphics_detector/graphics_detector.h
@@ -25,13 +25,20 @@
   bool has_gles1 = false;
   bool has_gles2 = false;
   bool has_egl = false;
-  bool has_egl_default_display = false;
+  bool has_vulkan = false;
+
   std::string egl_client_extensions;
+
   std::string egl_version;
   std::string egl_vendor;
   std::string egl_extensions;
-  bool has_egl_surfaceless_with_gles = false;
-  bool has_vulkan = false;
+
+  bool can_init_gles2_on_egl_surfaceless = false;
+  std::string gles2_vendor;
+  std::string gles2_version;
+  std::string gles2_renderer;
+  std::string gles2_extensions;
+
   bool has_discrete_gpu = false;
   std::string discrete_gpu_device_name;
   std::string discrete_gpu_device_extensions;
diff --git a/host/libs/image_aggregator/image_aggregator.cc b/host/libs/image_aggregator/image_aggregator.cc
index b6b412d..4f50835 100644
--- a/host/libs/image_aggregator/image_aggregator.cc
+++ b/host/libs/image_aggregator/image_aggregator.cc
@@ -31,6 +31,7 @@
 
 #include <android-base/file.h>
 #include <android-base/logging.h>
+#include <android-base/strings.h>
 #include <cdisk_spec.pb.h>
 #include <google/protobuf/text_format.h>
 #include <sparse/sparse.h>
@@ -39,6 +40,7 @@
 
 #include "common/libs/fs/shared_buf.h"
 #include "common/libs/fs/shared_fd.h"
+#include "common/libs/utils/cf_endian.h"
 #include "common/libs/utils/files.h"
 #include "common/libs/utils/size_utils.h"
 #include "common/libs/utils/subprocess.h"
@@ -48,6 +50,8 @@
 namespace {
 
 constexpr int GPT_NUM_PARTITIONS = 128;
+static const std::string CDISK_MAGIC = "composite_disk\x1d";
+static const std::string QCOW2_MAGIC = "QFI\xfb";
 
 /**
  * Creates a "Protective" MBR Partition Table header. The GUID
@@ -100,32 +104,53 @@
 struct __attribute__((packed)) GptBeginning {
   MasterBootRecord protective_mbr;
   GptHeader header;
-  std::uint8_t header_padding[420];
+  std::uint8_t header_padding[SECTOR_SIZE - sizeof(GptHeader)];
   GptPartitionEntry entries[GPT_NUM_PARTITIONS];
   std::uint8_t partition_alignment[3072];
 };
 
-static_assert(sizeof(GptBeginning) == SECTOR_SIZE * 40);
+static_assert(AlignToPowerOf2(sizeof(GptBeginning), PARTITION_SIZE_SHIFT) ==
+              sizeof(GptBeginning));
 
 struct __attribute__((packed)) GptEnd {
   GptPartitionEntry entries[GPT_NUM_PARTITIONS];
   GptHeader footer;
-  std::uint8_t footer_padding[420];
+  std::uint8_t footer_padding[SECTOR_SIZE - sizeof(GptHeader)];
 };
 
-static_assert(sizeof(GptEnd) == SECTOR_SIZE * 33);
+static_assert(sizeof(GptEnd) % SECTOR_SIZE == 0);
 
 struct PartitionInfo {
   MultipleImagePartition source;
-  std::uint64_t guest_size;
-  std::uint64_t host_size;
+  std::uint64_t size;
   std::uint64_t offset;
+
+  std::uint64_t AlignedSize() const { return AlignToPartitionSize(size); }
 };
 
+struct __attribute__((packed)) QCowHeader {
+  Be32 magic;
+  Be32 version;
+  Be64 backing_file_offset;
+  Be32 backing_file_size;
+  Be32 cluster_bits;
+  Be64 size;
+  Be32 crypt_method;
+  Be32 l1_size;
+  Be64 l1_table_offset;
+  Be64 refcount_table_offset;
+  Be32 refcount_table_clusters;
+  Be32 nb_snapshots;
+  Be64 snapshots_offset;
+};
+
+static_assert(sizeof(QCowHeader) == 72);
+
 /*
- * Returns the file size of `file_path`. If `file_path` is an Android-Sparse
- * file, returns the file size it would have after being converted to a raw
- * file.
+ * Returns the expanded file size of `file_path`. Note that the raw size of
+ * files doesn't match how large they may appear inside a VM.
+ *
+ * Supported types: Composite disk image, Qcows2, Android-Sparse, Raw
  *
  * Android-Sparse is a file format invented by Android that optimizes for
  * chunks of zeroes or repeated data. The Android build system can produce
@@ -133,15 +158,63 @@
  * disk file, as the imag eflashing process also can handle Android-Sparse
  * images.
  */
-std::uint64_t UnsparsedSize(const std::string& file_path) {
-  auto fd = open(file_path.c_str(), O_RDONLY);
-  CHECK(fd >= 0) << "Could not open \"" << file_path << "\""
-                 << strerror(errno);
-  auto sparse = sparse_file_import(fd, /* verbose */ false, /* crc */ false);
-  auto size =
-      sparse ? sparse_file_len(sparse, false, true) : FileSize(file_path);
-  close(fd);
-  return size;
+std::uint64_t ExpandedStorageSize(const std::string& file_path) {
+  android::base::unique_fd fd(open(file_path.c_str(), O_RDONLY));
+  CHECK(fd.get() >= 0) << "Could not open \"" << file_path << "\""
+                       << strerror(errno);
+
+  std::uint64_t file_size = FileSize(file_path);
+
+  // Try to read the disk in a nicely-aligned block size unless the whole file
+  // is smaller.
+  constexpr uint64_t MAGIC_BLOCK_SIZE = 4096;
+  std::string magic(std::min(file_size, MAGIC_BLOCK_SIZE), '\0');
+  if (!android::base::ReadFully(fd, magic.data(), magic.size())) {
+    PLOG(FATAL) << "Fail to read: " << file_path;
+    return 0;
+  }
+  CHECK(lseek(fd, 0, SEEK_SET) != -1)
+      << "Fail to seek(\"" << file_path << "\")" << strerror(errno);
+
+  // Composite disk image
+  if (android::base::StartsWith(magic, CDISK_MAGIC)) {
+    // seek to the beginning of proto message
+    CHECK(lseek(fd, CDISK_MAGIC.size(), SEEK_SET) != -1)
+        << "Fail to seek(\"" << file_path << "\")" << strerror(errno);
+    std::string message;
+    if (!android::base::ReadFdToString(fd, &message)) {
+      PLOG(FATAL) << "Fail to read(cdisk): " << file_path;
+      return 0;
+    }
+    CompositeDisk cdisk;
+    if (!cdisk.ParseFromString(message)) {
+      PLOG(FATAL) << "Fail to parse(cdisk): " << file_path;
+      return 0;
+    }
+    return cdisk.length();
+  }
+
+  // Qcow2 image
+  if (android::base::StartsWith(magic, QCOW2_MAGIC)) {
+    QCowHeader header;
+    if (!android::base::ReadFully(fd, &header, sizeof(QCowHeader))) {
+      PLOG(FATAL) << "Fail to read(qcow2 header): " << file_path;
+      return 0;
+    }
+    return header.size.as_uint64_t();
+  }
+
+  // Android-Sparse
+  if (auto sparse =
+          sparse_file_import(fd, /* verbose */ false, /* crc */ false);
+      sparse) {
+    auto size = sparse_file_len(sparse, false, true);
+    sparse_file_destroy(sparse);
+    return size;
+  }
+
+  // raw image file
+  return file_size;
 }
 
 /*
@@ -200,27 +273,24 @@
   }
 
   void AppendPartition(MultipleImagePartition source) {
-    uint64_t host_size = 0;
+    uint64_t size = 0;
     for (const auto& path : source.image_file_paths) {
-      host_size += UnsparsedSize(path);
+      size += ExpandedStorageSize(path);
     }
-    auto guest_size = AlignToPowerOf2(host_size, PARTITION_SIZE_SHIFT);
-    CHECK(host_size == guest_size || source.read_only)
+    auto aligned_size = AlignToPartitionSize(size);
+    CHECK(size == aligned_size || source.read_only)
         << "read-write partition " << source.label
         << " is not aligned to the size of " << (1 << PARTITION_SIZE_SHIFT);
     partitions_.push_back(PartitionInfo{
         .source = source,
-        .guest_size = guest_size,
-        .host_size = host_size,
+        .size = size,
         .offset = next_disk_offset_,
     });
-    next_disk_offset_ =
-        AlignToPowerOf2(next_disk_offset_ + guest_size, PARTITION_SIZE_SHIFT);
+    next_disk_offset_ = next_disk_offset_ + aligned_size;
   }
 
   std::uint64_t DiskSize() const {
-    std::uint64_t val = next_disk_offset_ + sizeof(GptEnd);
-    return AlignToPowerOf2(val, DISK_SIZE_SHIFT);
+    return AlignToPowerOf2(next_disk_offset_ + sizeof(GptEnd), DISK_SIZE_SHIFT);
   }
 
   /**
@@ -239,27 +309,27 @@
     header->set_offset(0);
 
     for (auto& partition : partitions_) {
-      uint64_t host_size = 0;
+      uint64_t size = 0;
       for (const auto& path : partition.source.image_file_paths) {
         ComponentDisk* component = disk.add_component_disks();
         component->set_file_path(AbsolutePath(path));
-        component->set_offset(partition.offset + host_size);
+        component->set_offset(partition.offset + size);
         component->set_read_write_capability(
             partition.source.read_only ? ReadWriteCapability::READ_ONLY
                                        : ReadWriteCapability::READ_WRITE);
-        host_size += UnsparsedSize(path);
+        size += ExpandedStorageSize(path);
       }
-      CHECK(partition.host_size == host_size);
-      // When partition's size differs from its size on the host
+      CHECK(partition.size == size);
+      // When partition's aligned size differs from its (unaligned) size
       // reading the disk within the guest os would fail due to the gap.
       // Putting any disk bigger than 4K can fill this gap.
       // Here we reuse the header which is always > 4K.
       // We don't fill the "writable" disk's hole and it should be an error
       // because writes in the guest of can't be reflected to the backing file.
-      if (partition.guest_size != partition.host_size) {
+      if (partition.AlignedSize() != partition.size) {
         ComponentDisk* component = disk.add_component_disks();
         component->set_file_path(AbsolutePath(header_file));
-        component->set_offset(partition.offset + partition.host_size);
+        component->set_offset(partition.offset + partition.size);
         component->set_read_write_capability(ReadWriteCapability::READ_ONLY);
       }
     }
@@ -284,19 +354,20 @@
       return {};
     }
     GptBeginning gpt = {
-      .protective_mbr = ProtectiveMbr(DiskSize()),
-      .header = {
-        .signature = {'E', 'F', 'I', ' ', 'P', 'A', 'R', 'T'},
-        .revision = {0, 0, 1, 0},
-        .header_size = sizeof(GptHeader),
-        .current_lba = 1,
-        .backup_lba = (next_disk_offset_ + sizeof(GptEnd)) / SECTOR_SIZE - 1,
-        .first_usable_lba = sizeof(GptBeginning) / SECTOR_SIZE,
-        .last_usable_lba = (next_disk_offset_ - SECTOR_SIZE) / SECTOR_SIZE,
-        .partition_entries_lba = 2,
-        .num_partition_entries = GPT_NUM_PARTITIONS,
-        .partition_entry_size = sizeof(GptPartitionEntry),
-      },
+        .protective_mbr = ProtectiveMbr(DiskSize()),
+        .header =
+            {
+                .signature = {'E', 'F', 'I', ' ', 'P', 'A', 'R', 'T'},
+                .revision = {0, 0, 1, 0},
+                .header_size = sizeof(GptHeader),
+                .current_lba = 1,
+                .backup_lba = (DiskSize() / SECTOR_SIZE) - 1,
+                .first_usable_lba = sizeof(GptBeginning) / SECTOR_SIZE,
+                .last_usable_lba = (next_disk_offset_ / SECTOR_SIZE) - 1,
+                .partition_entries_lba = 2,
+                .num_partition_entries = GPT_NUM_PARTITIONS,
+                .partition_entry_size = sizeof(GptPartitionEntry),
+            },
     };
     uuid_generate(gpt.header.disk_guid);
     for (std::size_t i = 0; i < partitions_.size(); i++) {
@@ -304,7 +375,7 @@
       gpt.entries[i] = GptPartitionEntry{
           .first_lba = partition.offset / SECTOR_SIZE,
           .last_lba =
-              (partition.offset + partition.guest_size) / SECTOR_SIZE - 1,
+              (partition.offset + partition.AlignedSize()) / SECTOR_SIZE - 1,
       };
       uuid_generate(gpt.entries[i].unique_partition_guid);
       if (uuid_parse(GetPartitionGUID(partition.source),
@@ -330,9 +401,10 @@
    */
   GptEnd End(const GptBeginning& head) const {
     GptEnd gpt;
-    std::memcpy((void*) gpt.entries, (void*) head.entries, 128 * 128);
+    std::memcpy((void*)gpt.entries, (void*)head.entries, sizeof(gpt.entries));
     gpt.footer = head.header;
-    gpt.footer.partition_entries_lba = next_disk_offset_ / SECTOR_SIZE;
+    gpt.footer.partition_entries_lba =
+        (DiskSize() - sizeof(gpt.entries)) / SECTOR_SIZE - 1;
     std::swap(gpt.footer.current_lba, gpt.footer.backup_lba);
     gpt.footer.header_crc32 = 0;
     gpt.footer.header_crc32 =
@@ -350,11 +422,17 @@
   return true;
 }
 
-bool WriteEnd(SharedFD out, const GptEnd& end, std::int64_t padding) {
-  std::string end_str((const char*) &end, sizeof(GptEnd));
-  end_str.resize(end_str.size() + padding, '\0');
-  if (WriteAll(out, end_str) != end_str.size()) {
-    LOG(ERROR) << "Could not write GPT end: " << out->StrError();
+bool WriteEnd(SharedFD out, const GptEnd& end) {
+  auto disk_size = (end.footer.current_lba + 1) * SECTOR_SIZE;
+  auto footer_start = (end.footer.last_usable_lba + 1) * SECTOR_SIZE;
+  auto padding = disk_size - footer_start - sizeof(GptEnd);
+  std::string padding_str(padding, '\0');
+  if (WriteAll(out, padding_str) != padding_str.size()) {
+    LOG(ERROR) << "Could not write GPT end padding: " << out->StrError();
+    return false;
+  }
+  if (WriteAllBinary(out, &end) != sizeof(end)) {
+    LOG(ERROR) << "Could not write GPT end contents: " << out->StrError();
     return false;
   }
   return true;
@@ -435,8 +513,7 @@
                  << "\" to \"" << output_path << "\": " << output->StrError();
     }
     // Handle disk images that are not aligned to PARTITION_SIZE_SHIFT
-    std::uint64_t padding =
-        AlignToPowerOf2(file_size, PARTITION_SIZE_SHIFT) - file_size;
+    std::uint64_t padding = AlignToPartitionSize(file_size) - file_size;
     std::string padding_str;
     padding_str.resize(padding, '\0');
     if (WriteAll(output, padding_str) != padding_str.size()) {
@@ -444,9 +521,7 @@
                  << "\": " << output->StrError();
     }
   }
-  std::uint64_t padding =
-      builder.DiskSize() - ((beginning.header.backup_lba + 1) * SECTOR_SIZE);
-  if (!WriteEnd(output, builder.End(beginning), padding)) {
+  if (!WriteEnd(output, builder.End(beginning))) {
     LOG(FATAL) << "Could not write GPT end to \"" << output_path
                << "\": " << output->StrError();
   }
@@ -479,16 +554,14 @@
                << "\": " << header->StrError();
   }
   auto footer = SharedFD::Creat(footer_file, 0600);
-  std::uint64_t padding =
-      builder.DiskSize() - ((beginning.header.backup_lba + 1) * SECTOR_SIZE);
-  if (!WriteEnd(footer, builder.End(beginning), padding)) {
+  if (!WriteEnd(footer, builder.End(beginning))) {
     LOG(FATAL) << "Could not write GPT end to \"" << footer_file
                << "\": " << footer->StrError();
   }
   auto composite_proto = builder.MakeCompositeDiskSpec(header_file, footer_file);
   std::ofstream composite(output_composite_path.c_str(),
                           std::ios::binary | std::ios::trunc);
-  composite << "composite_disk\x1d";
+  composite << CDISK_MAGIC;
   composite_proto.SerializeToOstream(&composite);
   composite.flush();
 }
@@ -500,6 +573,12 @@
   crosvm_qcow2_cmd.AddParameter("create_qcow2");
   crosvm_qcow2_cmd.AddParameter("--backing_file=", backing_file);
   crosvm_qcow2_cmd.AddParameter(output_overlay_path);
+
+  auto devnull = SharedFD::Open("/dev/null", O_RDONLY);
+  CHECK(devnull->IsOpen()) << "Failed to open /dev/null";
+  crosvm_qcow2_cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdOut, devnull);
+  crosvm_qcow2_cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdErr, devnull);
+
   int success = crosvm_qcow2_cmd.Start().Wait();
   if (success != 0) {
     LOG(FATAL) << "Unable to run crosvm create_qcow2. Exited with status " << success;
diff --git a/host/libs/screen_connector/screen_connector.h b/host/libs/screen_connector/screen_connector.h
index ca6b155..49e5253 100644
--- a/host/libs/screen_connector/screen_connector.h
+++ b/host/libs/screen_connector/screen_connector.h
@@ -16,8 +16,6 @@
 
 #pragma once
 
-#include <cassert>
-#include <chrono>
 #include <cstdint>
 #include <functional>
 #include <memory>
@@ -28,15 +26,15 @@
 #include <type_traits>
 
 #include <android-base/logging.h>
-#include "common/libs/concurrency/semaphore.h"
+
 #include "common/libs/confui/confui.h"
 #include "common/libs/fs/shared_fd.h"
 #include "common/libs/utils/size_utils.h"
-
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/confui/host_mode_ctrl.h"
 #include "host/libs/confui/host_utils.h"
 #include "host/libs/screen_connector/screen_connector_common.h"
+#include "host/libs/screen_connector/screen_connector_multiplexer.h"
 #include "host/libs/screen_connector/screen_connector_queue.h"
 #include "host/libs/screen_connector/wayland_screen_connector.h"
 
@@ -51,17 +49,15 @@
   static_assert(std::is_base_of<ScreenConnectorFrameInfo, ProcessedFrameType>::value,
                 "ProcessedFrameType should inherit ScreenConnectorFrameInfo");
 
+  using FrameMultiplexer = ScreenConnectorInputMultiplexer<ProcessedFrameType>;
+
   /**
-   * This is the type of the callback function WebRTC/VNC is supposed to provide
+   * This is the type of the callback function WebRTC is supposed to provide
    * ScreenConnector with.
    *
-   * The callback function should be defined so that the two parameters are
-   * given by the callback function caller (e.g. ScreenConnectorSource) and used
-   * to fill out the ProcessedFrameType object, msg.
+   * The callback function is how a raw bytes frame should be processed for
+   * WebRTC
    *
-   * The ProcessedFrameType object is internally created by ScreenConnector,
-   * filled out by the ScreenConnectorSource, and returned via OnNextFrame()
-   * call.
    */
   using GenerateProcessedFrameCallback = std::function<void(
       std::uint32_t /*display_number*/, std::uint32_t /*frame_width*/,
@@ -88,9 +84,9 @@
   virtual ~ScreenConnector() = default;
 
   /**
-   * set the callback function to be eventually used by Wayland/Socket-Based Connectors
+   * set the callback function to be eventually used by Wayland-Based
+   * Connector
    *
-   * @param[in] To tell how ScreenConnectorSource caches the frame & meta info
    */
   void SetCallback(GenerateProcessedFrameCallback&& frame_callback) {
     std::lock_guard<std::mutex> lock(streamer_callback_mutex_);
@@ -115,7 +111,7 @@
                                     processed_frame);
           }
 
-          sc_android_queue_.PushBack(std::move(processed_frame));
+          sc_frame_multiplexer_.PushToAndroidQueue(std::move(processed_frame));
         });
   }
 
@@ -131,44 +127,7 @@
    *
    * NOTE THAT THIS IS THE ONLY CONSUMER OF THE TWO QUEUES
    */
-  ProcessedFrameType OnNextFrame() {
-    on_next_frame_cnt_++;
-    while (true) {
-      ConfUiLog(VERBOSE) << "Streamer waiting Semaphore with host ctrl mode ="
-                         << static_cast<std::uint32_t>(
-                                host_mode_ctrl_.GetMode())
-                         << " and cnd = #" << on_next_frame_cnt_;
-      sc_sem_.SemWait();
-      ConfUiLog(VERBOSE)
-          << "Streamer got Semaphore'ed resources with host ctrl mode ="
-          << static_cast<std::uint32_t>(host_mode_ctrl_.GetMode())
-          << "and cnd = #" << on_next_frame_cnt_;
-      // do something
-      if (!sc_android_queue_.Empty()) {
-        auto mode = host_mode_ctrl_.GetMode();
-        if (mode == HostModeCtrl::ModeType::kAndroidMode) {
-          ConfUiLog(VERBOSE)
-              << "Streamer gets Android frame with host ctrl mode ="
-              << static_cast<std::uint32_t>(mode) << "and cnd = #"
-              << on_next_frame_cnt_;
-          return sc_android_queue_.PopFront();
-        }
-        // AndroidFrameFetchingLoop could have added 1 or 2 frames
-        // before it becomes Conf UI mode.
-        ConfUiLog(VERBOSE)
-            << "Streamer ignores Android frame with host ctrl mode ="
-            << static_cast<std::uint32_t>(mode) << "and cnd = #"
-            << on_next_frame_cnt_;
-        sc_android_queue_.PopFront();
-        continue;
-      }
-      ConfUiLog(VERBOSE) << "Streamer gets Conf UI frame with host ctrl mode = "
-                         << static_cast<std::uint32_t>(
-                                host_mode_ctrl_.GetMode())
-                         << " and cnd = #" << on_next_frame_cnt_;
-      return sc_confui_queue_.PopFront();
-    }
-  }
+  ProcessedFrameType OnNextFrame() { return sc_frame_multiplexer_.Pop(); }
 
   /**
    * ConfUi calls this when it has frames to render
@@ -197,39 +156,32 @@
     callback_from_streamer_(display_number, frame_width, frame_height,
                             frame_stride_bytes, frame_bytes, processed_frame);
     // now add processed_frame to the queue
-    sc_confui_queue_.PushBack(std::move(processed_frame));
+    sc_frame_multiplexer_.PushToConfUiQueue(std::move(processed_frame));
     return true;
   }
 
-  // Let the screen connector know when there are clients connected
-  void ReportClientsConnected(bool have_clients) {
-    // screen connector implementation must implement ReportClientsConnected
-    sc_android_src_->ReportClientsConnected(have_clients);
-    return ;
-  }
-
  protected:
-  template <typename T,
-            typename = std::enable_if_t<
-                std::is_base_of<ScreenConnectorSource, T>::value, void>>
-  ScreenConnector(std::unique_ptr<T>&& impl, HostModeCtrl& host_mode_ctrl)
+  ScreenConnector(std::unique_ptr<WaylandScreenConnector>&& impl,
+                  HostModeCtrl& host_mode_ctrl)
       : sc_android_src_{std::move(impl)},
         host_mode_ctrl_{host_mode_ctrl},
         on_next_frame_cnt_{0},
         render_confui_cnt_{0},
-        sc_android_queue_{sc_sem_},
-        sc_confui_queue_{sc_sem_} {}
+        sc_frame_multiplexer_{host_mode_ctrl_} {}
   ScreenConnector() = delete;
 
  private:
-  // either socket_based or wayland
-  std::unique_ptr<ScreenConnectorSource> sc_android_src_;
+  std::unique_ptr<WaylandScreenConnector> sc_android_src_;
   HostModeCtrl& host_mode_ctrl_;
   unsigned long long int on_next_frame_cnt_;
   unsigned long long int render_confui_cnt_;
-  Semaphore sc_sem_;
-  ScreenConnectorQueue<ProcessedFrameType> sc_android_queue_;
-  ScreenConnectorQueue<ProcessedFrameType> sc_confui_queue_;
+  /**
+   * internally has conf ui & android queues.
+   *
+   * multiplexting the two input queues, so the consumer gets one input
+   * at a time from the right queue
+   */
+  FrameMultiplexer sc_frame_multiplexer_;
   GenerateProcessedFrameCallback callback_from_streamer_;
   std::mutex streamer_callback_mutex_; // mutex to set & read callback_from_streamer_
   std::condition_variable streamer_callback_set_cv_;
diff --git a/host/libs/screen_connector/screen_connector_common.h b/host/libs/screen_connector/screen_connector_common.h
index 1df6d86..32bac76 100644
--- a/host/libs/screen_connector/screen_connector_common.h
+++ b/host/libs/screen_connector/screen_connector_common.h
@@ -18,9 +18,9 @@
 
 #include <cstdint>
 #include <functional>
-#include <type_traits>
 
 #include <android-base/logging.h>
+
 #include "common/libs/utils/size_utils.h"
 #include "host/libs/config/cuttlefish_config.h"
 
@@ -41,17 +41,6 @@
                        std::uint32_t /*frame_stride_bytes*/,  //
                        std::uint8_t* /*frame_pixels*/)>;
 
-class ScreenConnectorSource {
- public:
-  virtual ~ScreenConnectorSource() = default;
-  // Runs the given callback on the next available frame after the given
-  // frame number and returns true if successful.
-  virtual void SetFrameCallback(
-      GenerateProcessedFrameCallbackImpl frame_callback) = 0;
-  virtual void ReportClientsConnected(bool /*have_clients*/) { /* ignore by default */ }
-  ScreenConnectorSource() = default;
-};
-
 struct ScreenConnectorInfo {
   // functions are intended to be inlined
   static constexpr std::uint32_t BytesPerPixel() { return 4; }
@@ -72,12 +61,21 @@
     CHECK_GE(display_configs.size(), display_number);
     return display_configs[display_number].width;
   }
-  static std::uint32_t ScreenStrideBytes(std::uint32_t display_number) {
-    return AlignToPowerOf2(ScreenWidth(display_number) * BytesPerPixel(), 4);
+  static std::uint32_t ComputeScreenStrideBytes(const std::uint32_t w) {
+    return AlignToPowerOf2(w * BytesPerPixel(), 4);
   }
-  static std::uint32_t ScreenSizeInBytes(std::uint32_t display_number) {
-    return ScreenStrideBytes(display_number) * ScreenHeight(display_number);
+  static std::uint32_t ComputeScreenSizeInBytes(const std::uint32_t w,
+                                                const std::uint32_t h) {
+    return ComputeScreenStrideBytes(w) * h;
   }
+  static std::uint32_t ScreenStrideBytes(const std::uint32_t display_number) {
+    return ComputeScreenStrideBytes(ScreenWidth(display_number));
+  }
+  static std::uint32_t ScreenSizeInBytes(const std::uint32_t display_number) {
+    return ComputeScreenStrideBytes(ScreenWidth(display_number)) *
+           ScreenHeight(display_number);
+  }
+
  private:
   static auto ChkAndGetConfig() -> decltype(cuttlefish::CuttlefishConfig::Get()) {
     auto config = cuttlefish::CuttlefishConfig::Get();
diff --git a/host/libs/screen_connector/screen_connector_multiplexer.h b/host/libs/screen_connector/screen_connector_multiplexer.h
new file mode 100644
index 0000000..b620531
--- /dev/null
+++ b/host/libs/screen_connector/screen_connector_multiplexer.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <cstdint>
+
+#include "common/libs/concurrency/multiplexer.h"
+#include "common/libs/confui/confui.h"
+
+#include "host/libs/confui/host_mode_ctrl.h"
+#include "host/libs/screen_connector/screen_connector_queue.h"
+
+namespace cuttlefish {
+template <typename ProcessedFrameType>
+class ScreenConnectorInputMultiplexer {
+  using Queue = ScreenConnectorQueue<ProcessedFrameType>;
+  using Multiplexer = Multiplexer<ProcessedFrameType, Queue>;
+
+ public:
+  ScreenConnectorInputMultiplexer(HostModeCtrl& host_mode_ctrl)
+      : host_mode_ctrl_(host_mode_ctrl) {
+    sc_android_queue_id_ =
+        multiplexer_.RegisterQueue(multiplexer_.CreateQueue(/* q size */ 2));
+    sc_confui_queue_id_ =
+        multiplexer_.RegisterQueue(multiplexer_.CreateQueue(/* q size */ 2));
+  }
+
+  virtual ~ScreenConnectorInputMultiplexer() = default;
+
+  void PushToAndroidQueue(ProcessedFrameType&& t) {
+    multiplexer_.Push(sc_android_queue_id_, std::move(t));
+  }
+
+  void PushToConfUiQueue(ProcessedFrameType&& t) {
+    multiplexer_.Push(sc_confui_queue_id_, std::move(t));
+  }
+
+  // customize Pop()
+  ProcessedFrameType Pop() {
+    on_next_frame_cnt_++;
+
+    // is_discard_frame is thread-specific
+    bool is_discard_frame = false;
+
+    // callback to select the queue index, and update is_discard_frame
+    auto selector = [this, &is_discard_frame]() -> int {
+      if (multiplexer_.IsEmpty(sc_android_queue_id_)) {
+        ConfUiLog(VERBOSE)
+            << "Streamer gets Conf UI frame with host ctrl mode = "
+            << static_cast<std::uint32_t>(host_mode_ctrl_.GetMode())
+            << " and cnd = #" << on_next_frame_cnt_;
+        return sc_confui_queue_id_;
+      }
+      auto mode = host_mode_ctrl_.GetMode();
+      if (mode != HostModeCtrl::ModeType::kAndroidMode) {
+        // AndroidFrameFetchingLoop could have added 1 or 2 frames
+        // before it becomes Conf UI mode.
+        ConfUiLog(VERBOSE)
+            << "Streamer ignores Android frame with host ctrl mode ="
+            << static_cast<std::uint32_t>(mode) << "and cnd = #"
+            << on_next_frame_cnt_;
+        is_discard_frame = true;
+      }
+      ConfUiLog(VERBOSE) << "Streamer gets Android frame with host ctrl mode ="
+                         << static_cast<std::uint32_t>(mode) << "and cnd = #"
+                         << on_next_frame_cnt_;
+      return sc_android_queue_id_;
+    };
+
+    while (true) {
+      ConfUiLog(VERBOSE) << "Streamer waiting Semaphore with host ctrl mode ="
+                         << static_cast<std::uint32_t>(
+                                host_mode_ctrl_.GetMode())
+                         << " and cnd = #" << on_next_frame_cnt_;
+      auto processed_frame = multiplexer_.Pop(selector);
+      if (!is_discard_frame) {
+        return processed_frame;
+      }
+      is_discard_frame = false;
+    }
+  }
+
+ private:
+  HostModeCtrl& host_mode_ctrl_;
+  Multiplexer multiplexer_;
+  unsigned long long int on_next_frame_cnt_;
+  int sc_android_queue_id_;
+  int sc_confui_queue_id_;
+};
+}  // end of namespace cuttlefish
diff --git a/host/libs/screen_connector/screen_connector_queue.h b/host/libs/screen_connector/screen_connector_queue.h
index 2019168..66fd7f7 100644
--- a/host/libs/screen_connector/screen_connector_queue.h
+++ b/host/libs/screen_connector/screen_connector_queue.h
@@ -16,12 +16,11 @@
 
 #pragma once
 
+#include <condition_variable>
 #include <deque>
 #include <memory>
-#include <thread>
 #include <mutex>
-#include <condition_variable>
-#include <chrono>
+#include <thread>
 
 #include "common/libs/concurrency/semaphore.h"
 
@@ -31,19 +30,17 @@
 class ScreenConnectorQueue {
 
  public:
-  static const int kQSize = 2;
-
   static_assert( is_movable<T>::value,
                  "Items in ScreenConnectorQueue should be std::mov-able");
 
-  ScreenConnectorQueue(Semaphore& sc_sem)
-      : q_mutex_(std::make_unique<std::mutex>()), sc_semaphore_(sc_sem) {}
+  ScreenConnectorQueue(const int q_max_size = 2)
+      : q_mutex_(std::make_unique<std::mutex>()), q_max_size_{q_max_size} {}
   ScreenConnectorQueue(ScreenConnectorQueue&& cq) = delete;
   ScreenConnectorQueue(const ScreenConnectorQueue& cq) = delete;
   ScreenConnectorQueue& operator=(const ScreenConnectorQueue& cq) = delete;
   ScreenConnectorQueue& operator=(ScreenConnectorQueue&& cq) = delete;
 
-  bool Empty() const {
+  bool IsEmpty() const {
     const std::lock_guard<std::mutex> lock(*q_mutex_);
     return buffer_.empty();
   }
@@ -60,23 +57,23 @@
   }
 
   /*
-   * PushBack( std::move(src) );
+   * Push( std::move(src) );
    *
-   * Note: this queue is suppoed to be used only by ScreenConnector-
+   * Note: this queue is supposed to be used only by ScreenConnector-
    * related components such as ScreenConnectorSource
    *
-   * The traditional assumption was that when webRTC or VNC calls
+   * The traditional assumption was that when webRTC calls
    * OnFrameAfter, the call should be block until it could return
    * one frame.
    *
    * Thus, the producers of this queue must not produce frames
-   * much faster than the consumer, VNC or WebRTC consumes.
+   * much faster than the consumer, WebRTC consumes.
    * Therefore, when the small buffer is full -- which means
-   * VNC or WebRTC would not call OnFrameAfter --, the producer
+   * WebRTC would not call OnNextFrame --, the producer
    * should stop adding itmes to the queue.
    *
    */
-  void PushBack(T&& item) {
+  void Push(T&& item) {
     std::unique_lock<std::mutex> lock(*q_mutex_);
     if (Full()) {
       auto is_empty =
@@ -84,23 +81,11 @@
       q_empty_.wait(lock, is_empty);
     }
     buffer_.push_back(std::move(item));
-    /* Whether the total number of items in ALL queus is 0 or not
-     * is tracked via a semaphore shared by all queues
-     *
-     * This is NOT intended to block queue from pushing an item
-     * This IS intended to awake the screen_connector consumer thread
-     * when one or more items are available at least in one queue
-     */
-    sc_semaphore_.SemPost();
   }
-  void PushBack(T& item) = delete;
-  void PushBack(const T& item) = delete;
+  void Push(T& item) = delete;
+  void Push(const T& item) = delete;
 
-  /*
-   * PopFront must be preceded by sc_semaphore_.SemWaitItem()
-   *
-   */
-  T PopFront() {
+  T Pop() {
     const std::lock_guard<std::mutex> lock(*q_mutex_);
     auto item = std::move(buffer_.front());
     buffer_.pop_front();
@@ -114,12 +99,12 @@
   bool Full() const {
     // call this in a critical section
     // after acquiring q_mutex_
-    return kQSize == buffer_.size();
+    return q_max_size_ == buffer_.size();
   }
   std::deque<T> buffer_;
   std::unique_ptr<std::mutex> q_mutex_;
   std::condition_variable q_empty_;
-  Semaphore& sc_semaphore_;
+  const int q_max_size_;
 };
 
 } // namespace cuttlefish
diff --git a/host/libs/screen_connector/wayland_screen_connector.h b/host/libs/screen_connector/wayland_screen_connector.h
index 36ed322..ab3120b 100644
--- a/host/libs/screen_connector/wayland_screen_connector.h
+++ b/host/libs/screen_connector/wayland_screen_connector.h
@@ -16,23 +16,19 @@
 
 #pragma once
 
-#include "host/libs/screen_connector/screen_connector_common.h"
-
 #include <memory>
 
+#include "host/libs/screen_connector/screen_connector_common.h"
 #include "host/libs/wayland/wayland_server.h"
 
 namespace cuttlefish {
 
-class WaylandScreenConnector : public ScreenConnectorSource {
+class WaylandScreenConnector {
  public:
   WaylandScreenConnector(int frames_fd);
-
-  void SetFrameCallback(
-      GenerateProcessedFrameCallbackImpl frame_callback) override;
+  void SetFrameCallback(GenerateProcessedFrameCallbackImpl frame_callback);
 
  private:
   std::unique_ptr<wayland::WaylandServer> server_;
 };
-
 }
diff --git a/host/libs/vm_manager/Android.bp b/host/libs/vm_manager/Android.bp
index 20c9027..0b0aaae 100644
--- a/host/libs/vm_manager/Android.bp
+++ b/host/libs/vm_manager/Android.bp
@@ -17,9 +17,32 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
+soong_config_module_type {
+    name: "cf_cc_defaults",
+    module_type: "cc_defaults",
+    config_namespace: "cvdhost",
+    bool_variables: ["enforce_mac80211_hwsim"],
+    properties: ["cflags"],
+}
+
+// This is the customization layer driven by soong config variables.
+cf_cc_defaults {
+    name: "cvd_cc_defaults",
+    soong_config_variables: {
+        // PRODUCT_ENFORCE_MAC80211_HWSIM sets this
+        enforce_mac80211_hwsim: {
+            cflags: ["-DENFORCE_MAC80211_HWSIM=true"],
+            conditions_default: {
+                cflags: [],
+            }
+        },
+    }
+}
+
 cc_library_static {
     name: "libcuttlefish_vm_manager",
     srcs: [
+        "crosvm_builder.cpp",
         "crosvm_manager.cpp",
         "host_configuration.cpp",
         "qemu_manager.cpp",
@@ -32,10 +55,15 @@
         "libcuttlefish_fs",
         "libcuttlefish_utils",
         "libbase",
+        "libfruit",
         "libjsoncpp",
     ],
     static_libs: [
         "libcuttlefish_host_config",
     ],
-    defaults: ["cuttlefish_host", "cuttlefish_libicuuc"],
+    defaults: [
+        "cuttlefish_host",
+        "cuttlefish_libicuuc",
+        "cvd_cc_defaults",
+    ],
 }
diff --git a/host/libs/vm_manager/crosvm_builder.cpp b/host/libs/vm_manager/crosvm_builder.cpp
new file mode 100644
index 0000000..cb7fbc4
--- /dev/null
+++ b/host/libs/vm_manager/crosvm_builder.cpp
@@ -0,0 +1,106 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#include "host/libs/vm_manager/crosvm_builder.h"
+
+#include <android-base/logging.h>
+
+#include <string>
+
+#include "common/libs/utils/network.h"
+#include "common/libs/utils/subprocess.h"
+
+namespace cuttlefish {
+
+CrosvmBuilder::CrosvmBuilder() : command_("crosvm") {
+  command_.AddParameter("run");
+}
+
+void CrosvmBuilder::SetBinary(const std::string& binary) {
+  command_.SetExecutable(binary);
+}
+
+void CrosvmBuilder::AddControlSocket(const std::string& control_socket) {
+  // Store this value so it persists after std::move(this->Cmd())
+  auto crosvm = command_.Executable();
+  command_.SetStopper([crosvm, control_socket](Subprocess* proc) {
+    Command stop_cmd(crosvm);
+    stop_cmd.AddParameter("stop");
+    stop_cmd.AddParameter(control_socket);
+    if (stop_cmd.Start().Wait() == 0) {
+      return StopperResult::kStopSuccess;
+    }
+    LOG(WARNING) << "Failed to stop VMM nicely, attempting to KILL";
+    return KillSubprocess(proc) == StopperResult::kStopSuccess
+               ? StopperResult::kStopCrash
+               : StopperResult::kStopFailure;
+  });
+  command_.AddParameter("--socket=", control_socket);
+}
+
+void CrosvmBuilder::AddHvcSink() {
+  command_.AddParameter("--serial=hardware=virtio-console,num=", ++hvc_num_,
+                        ",type=sink");
+}
+void CrosvmBuilder::AddHvcConsoleReadOnly(const std::string& output) {
+  command_.AddParameter("--serial=hardware=virtio-console,num=", ++hvc_num_,
+                        ",type=file,path=", output, ",console=true");
+}
+void CrosvmBuilder::AddHvcReadOnly(const std::string& output) {
+  command_.AddParameter("--serial=hardware=virtio-console,num=", ++hvc_num_,
+                        ",type=file,path=", output);
+}
+void CrosvmBuilder::AddHvcReadWrite(const std::string& output,
+                                    const std::string& input) {
+  command_.AddParameter("--serial=hardware=virtio-console,num=", ++hvc_num_,
+                        ",type=file,path=", output, ",input=", input);
+}
+
+void CrosvmBuilder::AddSerialSink() {
+  command_.AddParameter("--serial=hardware=serial,num=", ++serial_num_,
+                        ",type=sink");
+}
+void CrosvmBuilder::AddSerialConsoleReadOnly(const std::string& output) {
+  command_.AddParameter("--serial=hardware=serial,num=", ++serial_num_,
+                        ",type=file,path=", output, ",earlycon=true");
+}
+void CrosvmBuilder::AddSerialConsoleReadWrite(const std::string& output,
+                                              const std::string& input) {
+  command_.AddParameter("--serial=hardware=serial,num=", ++serial_num_,
+                        ",type=file,path=", output, ",input=", input,
+                        ",earlycon=true");
+}
+void CrosvmBuilder::AddSerial(const std::string& output,
+                              const std::string& input) {
+  command_.AddParameter("--serial=hardware=serial,num=", ++serial_num_,
+                        ",type=file,path=", output, ",input=", input);
+}
+
+SharedFD CrosvmBuilder::AddTap(const std::string& tap_name) {
+  auto tap_fd = OpenTapInterface(tap_name);
+  if (tap_fd->IsOpen()) {
+    command_.AddParameter("--tap-fd=", tap_fd);
+  } else {
+    LOG(ERROR) << "Unable to connect to \"" << tap_name
+               << "\": " << tap_fd->StrError();
+  }
+  return tap_fd;
+}
+
+int CrosvmBuilder::HvcNum() { return hvc_num_; }
+
+Command& CrosvmBuilder::Cmd() { return command_; }
+
+}  // namespace cuttlefish
diff --git a/host/libs/vm_manager/crosvm_builder.h b/host/libs/vm_manager/crosvm_builder.h
new file mode 100644
index 0000000..90457b2
--- /dev/null
+++ b/host/libs/vm_manager/crosvm_builder.h
@@ -0,0 +1,57 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#pragma once
+
+#include <string>
+#include <utility>
+
+#include "common/libs/fs/shared_fd.h"
+#include "common/libs/utils/subprocess.h"
+
+namespace cuttlefish {
+
+class CrosvmBuilder {
+ public:
+  CrosvmBuilder();
+
+  void SetBinary(const std::string&);
+  void AddControlSocket(const std::string&);
+
+  void AddHvcSink();
+  void AddHvcConsoleReadOnly(const std::string& output);
+  void AddHvcReadOnly(const std::string& output);
+  void AddHvcReadWrite(const std::string& output, const std::string& input);
+
+  void AddSerialSink();
+  void AddSerialConsoleReadOnly(const std::string& output);
+  void AddSerialConsoleReadWrite(const std::string& output,
+                                 const std::string& input);
+  // [[deprecated("do not add any more users")]]
+  void AddSerial(const std::string& output, const std::string& input);
+
+  SharedFD AddTap(const std::string& tap_name);
+
+  int HvcNum();
+
+  Command& Cmd();
+
+ private:
+  Command command_;
+  int hvc_num_;
+  int serial_num_;
+};
+
+}  // namespace cuttlefish
diff --git a/host/libs/vm_manager/crosvm_manager.cpp b/host/libs/vm_manager/crosvm_manager.cpp
index e424fd5..2b729f5 100644
--- a/host/libs/vm_manager/crosvm_manager.cpp
+++ b/host/libs/vm_manager/crosvm_manager.cpp
@@ -16,23 +16,24 @@
 
 #include "host/libs/vm_manager/crosvm_manager.h"
 
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/strings.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <vulkan/vulkan.h>
 
 #include <cassert>
 #include <string>
 #include <vector>
 
-#include <android-base/strings.h>
-#include <android-base/logging.h>
-#include <vulkan/vulkan.h>
-
 #include "common/libs/utils/environment.h"
+#include "common/libs/utils/files.h"
 #include "common/libs/utils/network.h"
 #include "common/libs/utils/subprocess.h"
-#include "common/libs/utils/files.h"
 #include "host/libs/config/cuttlefish_config.h"
 #include "host/libs/config/known_paths.h"
+#include "host/libs/vm_manager/crosvm_builder.h"
 #include "host/libs/vm_manager/qemu_manager.h"
 
 namespace cuttlefish {
@@ -40,52 +41,10 @@
 
 namespace {
 
-std::string GetControlSocketPath(const CuttlefishConfig& config) {
-  return config.ForDefaultInstance()
-      .PerInstanceInternalPath("crosvm_control.sock");
-}
-
-SharedFD AddTapFdParameter(Command* crosvm_cmd,
-                                const std::string& tap_name) {
-  auto tap_fd = OpenTapInterface(tap_name);
-  if (tap_fd->IsOpen()) {
-    crosvm_cmd->AddParameter("--tap-fd=", tap_fd);
-  } else {
-    LOG(ERROR) << "Unable to connect to " << tap_name << ": "
-               << tap_fd->StrError();
-  }
-  return tap_fd;
-}
-
-bool ReleaseDhcpLeases(const std::string& lease_path, SharedFD tap_fd) {
-  auto lease_file_fd = SharedFD::Open(lease_path, O_RDONLY);
-  if (!lease_file_fd->IsOpen()) {
-    LOG(ERROR) << "Could not open leases file \"" << lease_path << '"';
-    return false;
-  }
-  bool success = true;
-  auto dhcp_leases = ParseDnsmasqLeases(lease_file_fd);
-  for (auto& lease : dhcp_leases) {
-    std::uint8_t dhcp_server_ip[] = {192, 168, 96, (std::uint8_t) (ForCurrentInstance(1) * 4 - 3)};
-    if (!ReleaseDhcp4(tap_fd, lease.mac_address, lease.ip_address, dhcp_server_ip)) {
-      LOG(ERROR) << "Failed to release " << lease;
-      success = false;
-    } else {
-      LOG(INFO) << "Successfully dropped " << lease;
-    }
-  }
-  return success;
-}
-
-bool Stop() {
-  auto config = CuttlefishConfig::Get();
-  Command command(config->crosvm_binary());
-  command.AddParameter("stop");
-  command.AddParameter(GetControlSocketPath(*config));
-
-  auto process = command.Start();
-
-  return process.Wait() == 0;
+std::string GetControlSocketPath(
+    const CuttlefishConfig::InstanceSpecific& instance,
+    const std::string& socket_name) {
+  return instance.PerInstanceInternalPath(socket_name.c_str());
 }
 
 }  // namespace
@@ -98,8 +57,8 @@
 #endif
 }
 
-std::vector<std::string> CrosvmManager::ConfigureGpuMode(
-    const std::string& gpu_mode) {
+std::vector<std::string> CrosvmManager::ConfigureGraphics(
+    const std::string& gpu_mode, const std::string& hwcomposer) {
   // Override the default HAL search paths in all cases. We do this because
   // the HAL search path allows for fallbacks, and fallbacks in conjunction
   // with properities lead to non-deterministic behavior while loading the
@@ -108,10 +67,10 @@
     return {
         "androidboot.cpuvulkan.version=" + std::to_string(VK_API_VERSION_1_2),
         "androidboot.hardware.gralloc=minigbm",
-        "androidboot.hardware.hwcomposer=ranchu",
+        "androidboot.hardware.hwcomposer="+ hwcomposer,
         "androidboot.hardware.egl=angle",
         "androidboot.hardware.vulkan=pastel",
-    };
+        "androidboot.opengles.version=196609"};  // OpenGL ES 3.1
   }
 
   if (gpu_mode == kGpuModeDrmVirgl) {
@@ -123,14 +82,13 @@
     };
   }
   if (gpu_mode == kGpuModeGfxStream) {
-    return {
-        "androidboot.cpuvulkan.version=0",
-        "androidboot.hardware.gralloc=minigbm",
-        "androidboot.hardware.hwcomposer=ranchu",
-        "androidboot.hardware.egl=emulation",
-        "androidboot.hardware.vulkan=ranchu",
-        "androidboot.hardware.gltransport=virtio-gpu-asg",
-    };
+    return {"androidboot.cpuvulkan.version=0",
+            "androidboot.hardware.gralloc=minigbm",
+            "androidboot.hardware.hwcomposer=" + hwcomposer,
+            "androidboot.hardware.egl=emulation",
+            "androidboot.hardware.vulkan=ranchu",
+            "androidboot.hardware.gltransport=virtio-gpu-asg",
+            "androidboot.opengles.version=196608"};  // OpenGL ES 3.0
   }
   return {};
 }
@@ -147,110 +105,73 @@
   }
 }
 
+constexpr auto crosvm_socket = "crosvm_control.sock";
+
 std::vector<Command> CrosvmManager::StartCommands(
     const CuttlefishConfig& config) {
   auto instance = config.ForDefaultInstance();
-  Command crosvm_cmd(config.crosvm_binary(), [](Subprocess* proc) {
-    auto stopped = Stop();
-    if (stopped) {
-      return true;
-    }
-    LOG(WARNING) << "Failed to stop VMM nicely, attempting to KILL";
-    return KillSubprocess(proc);
-  });
-
-  int hvc_num = 0;
-  int serial_num = 0;
-  auto add_hvc_sink = [&crosvm_cmd, &hvc_num]() {
-    crosvm_cmd.AddParameter("--serial=hardware=virtio-console,num=", ++hvc_num,
-                            ",type=sink");
-  };
-  auto add_serial_sink = [&crosvm_cmd, &serial_num]() {
-    crosvm_cmd.AddParameter("--serial=hardware=serial,num=", ++serial_num,
-                            ",type=sink");
-  };
-  auto add_hvc_console = [&crosvm_cmd, &hvc_num](const std::string& output) {
-    crosvm_cmd.AddParameter("--serial=hardware=virtio-console,num=", ++hvc_num,
-                            ",type=file,path=", output, ",console=true");
-  };
-  auto add_serial_console_ro = [&crosvm_cmd,
-                                &serial_num](const std::string& output) {
-    crosvm_cmd.AddParameter("--serial=hardware=serial,num=", ++serial_num,
-                            ",type=file,path=", output, ",earlycon=true");
-  };
-  auto add_serial_console = [&crosvm_cmd, &serial_num](
-                                const std::string& output,
-                                const std::string& input) {
-    crosvm_cmd.AddParameter("--serial=hardware=serial,num=", ++serial_num,
-                            ",type=file,path=", output, ",input=", input,
-                            ",earlycon=true");
-  };
-  auto add_hvc_ro = [&crosvm_cmd, &hvc_num](const std::string& output) {
-    crosvm_cmd.AddParameter("--serial=hardware=virtio-console,num=", ++hvc_num,
-                            ",type=file,path=", output);
-  };
-  auto add_hvc = [&crosvm_cmd, &hvc_num](const std::string& output,
-                                         const std::string& input) {
-    crosvm_cmd.AddParameter("--serial=hardware=virtio-console,num=", ++hvc_num,
-                            ",type=file,path=", output, ",input=", input);
-  };
-  // Deprecated; do not add any more users
-  auto add_serial = [&crosvm_cmd, &serial_num](const std::string& output,
-                                               const std::string& input) {
-    crosvm_cmd.AddParameter("--serial=hardware=serial,num=", ++serial_num,
-                            ",type=file,path=", output, ",input=", input);
-  };
-
-  crosvm_cmd.AddParameter("run");
+  CrosvmBuilder crosvm_cmd;
+  crosvm_cmd.SetBinary(config.crosvm_binary());
+  crosvm_cmd.AddControlSocket(GetControlSocketPath(instance, crosvm_socket));
 
   if (!config.smt()) {
-    crosvm_cmd.AddParameter("--no-smt");
+    crosvm_cmd.Cmd().AddParameter("--no-smt");
   }
 
   if (config.vhost_net()) {
-    crosvm_cmd.AddParameter("--vhost-net");
+    crosvm_cmd.Cmd().AddParameter("--vhost-net");
   }
 
+#ifdef ENFORCE_MAC80211_HWSIM
+  if (!config.vhost_user_mac80211_hwsim().empty()) {
+    crosvm_cmd.Cmd().AddParameter("--vhost-user-mac80211-hwsim=",
+                                  config.vhost_user_mac80211_hwsim());
+  }
+#endif
+
   if (config.protected_vm()) {
-    crosvm_cmd.AddParameter("--protected-vm");
+    crosvm_cmd.Cmd().AddParameter("--protected-vm");
   }
 
   if (config.gdb_port() > 0) {
     CHECK(config.cpus() == 1) << "CPUs must be 1 for crosvm gdb mode";
-    crosvm_cmd.AddParameter("--gdb=", config.gdb_port());
+    crosvm_cmd.Cmd().AddParameter("--gdb=", config.gdb_port());
   }
 
+  auto gpu_capture_enabled = !config.gpu_capture_binary().empty();
   auto gpu_mode = config.gpu_mode();
+  auto udmabuf_string = config.enable_gpu_udmabuf() ? "true" : "false";
   if (gpu_mode == kGpuModeGuestSwiftshader) {
-    crosvm_cmd.AddParameter("--gpu=2D");
+    crosvm_cmd.Cmd().AddParameter("--gpu=2D,udmabuf=", udmabuf_string);
   } else if (gpu_mode == kGpuModeDrmVirgl || gpu_mode == kGpuModeGfxStream) {
-    crosvm_cmd.AddParameter(gpu_mode == kGpuModeGfxStream ?
-                                "--gpu=gfxstream," : "--gpu=",
-                            "egl=true,surfaceless=true,glx=false,gles=true");
+    crosvm_cmd.Cmd().AddParameter(
+        gpu_mode == kGpuModeGfxStream ? "--gpu=gfxstream," : "--gpu=",
+        "egl=true,surfaceless=true,glx=false,gles=true,udmabuf=", udmabuf_string);
   }
 
   for (const auto& display_config : config.display_configs()) {
-    crosvm_cmd.AddParameter("--gpu-display=", "width=", display_config.width,
-                            ",", "height=", display_config.height);
+    crosvm_cmd.Cmd().AddParameter(
+        "--gpu-display=", "width=", display_config.width, ",",
+        "height=", display_config.height);
   }
 
-  crosvm_cmd.AddParameter("--wayland-sock=", instance.frames_socket_path());
+  crosvm_cmd.Cmd().AddParameter("--wayland-sock=",
+                                instance.frames_socket_path());
 
-  // crosvm_cmd.AddParameter("--null-audio");
-  crosvm_cmd.AddParameter("--mem=", config.memory_mb());
-  crosvm_cmd.AddParameter("--cpus=", config.cpus());
+  // crosvm_cmd.Cmd().AddParameter("--null-audio");
+  crosvm_cmd.Cmd().AddParameter("--mem=", config.memory_mb());
+  crosvm_cmd.Cmd().AddParameter("--cpus=", config.cpus());
 
   auto disk_num = instance.virtual_disk_paths().size();
   CHECK_GE(VmManager::kMaxDisks, disk_num)
       << "Provided too many disks (" << disk_num << "), maximum "
       << VmManager::kMaxDisks << "supported";
   for (const auto& disk : instance.virtual_disk_paths()) {
-    crosvm_cmd.AddParameter(config.protected_vm() ? "--disk=" :
-                                                    "--rwdisk=", disk);
+    crosvm_cmd.Cmd().AddParameter(
+        config.protected_vm() ? "--disk=" : "--rwdisk=", disk);
   }
-  crosvm_cmd.AddParameter("--socket=", GetControlSocketPath(config));
 
-  if (config.enable_vnc_server() || config.enable_webrtc()) {
+  if (config.enable_webrtc()) {
     auto touch_type_parameter =
         config.enable_webrtc() ? "--multi-touch=" : "--single-touch=";
 
@@ -260,28 +181,41 @@
     for (int i = 0; i < display_configs.size(); ++i) {
       auto display_config = display_configs[i];
 
-      crosvm_cmd.AddParameter(touch_type_parameter,
-                              instance.touch_socket_path(i), ":",
-                              display_config.width, ":", display_config.height);
+      crosvm_cmd.Cmd().AddParameter(
+          touch_type_parameter, instance.touch_socket_path(i), ":",
+          display_config.width, ":", display_config.height);
     }
-    crosvm_cmd.AddParameter("--keyboard=", instance.keyboard_socket_path());
+    crosvm_cmd.Cmd().AddParameter("--keyboard=",
+                                  instance.keyboard_socket_path());
   }
   if (config.enable_webrtc()) {
-    crosvm_cmd.AddParameter("--switches=", instance.switches_socket_path());
+    crosvm_cmd.Cmd().AddParameter("--switches=",
+                                  instance.switches_socket_path());
   }
 
-  AddTapFdParameter(&crosvm_cmd, instance.mobile_tap_name());
-  AddTapFdParameter(&crosvm_cmd, instance.ethernet_tap_name());
-  auto wifi_tap = AddTapFdParameter(&crosvm_cmd, instance.wifi_tap_name());
+  SharedFD wifi_tap;
+  // GPU capture can only support named files and not file descriptors due to
+  // having to pass arguments to crosvm via a wrapper script.
+  if (!gpu_capture_enabled) {
+    crosvm_cmd.AddTap(instance.mobile_tap_name());
+    crosvm_cmd.AddTap(instance.ethernet_tap_name());
 
-  if (FileExists(instance.access_kregistry_path())) {
-    crosvm_cmd.AddParameter("--rw-pmem-device=",
-                            instance.access_kregistry_path());
+    // TODO(b/199103204): remove this as well when
+    // PRODUCT_ENFORCE_MAC80211_HWSIM is removed
+#ifndef ENFORCE_MAC80211_HWSIM
+    wifi_tap = crosvm_cmd.AddTap(instance.wifi_tap_name());
+#endif
+  }
+
+  bool is_arm = HostArch() == Arch::Arm || HostArch() == Arch::Arm64;
+  if (!is_arm && FileExists(instance.access_kregistry_path())) {
+    crosvm_cmd.Cmd().AddParameter("--rw-pmem-device=",
+                                  instance.access_kregistry_path());
   }
 
   if (FileExists(instance.pstore_path())) {
-    crosvm_cmd.AddParameter("--pstore=path=", instance.pstore_path(),
-                            ",size=", FileSize(instance.pstore_path()));
+    crosvm_cmd.Cmd().AddParameter("--pstore=path=", instance.pstore_path(),
+                                  ",size=", FileSize(instance.pstore_path()));
   }
 
   if (config.enable_sandbox()) {
@@ -294,19 +228,20 @@
                  << " does not exist " << std::endl;
       return {};
     }
-    crosvm_cmd.AddParameter("--seccomp-policy-dir=", config.seccomp_policy_dir());
+    crosvm_cmd.Cmd().AddParameter("--seccomp-policy-dir=",
+                                  config.seccomp_policy_dir());
   } else {
-    crosvm_cmd.AddParameter("--disable-sandbox");
+    crosvm_cmd.Cmd().AddParameter("--disable-sandbox");
   }
 
   if (instance.vsock_guest_cid() >= 2) {
-    crosvm_cmd.AddParameter("--cid=", instance.vsock_guest_cid());
+    crosvm_cmd.Cmd().AddParameter("--cid=", instance.vsock_guest_cid());
   }
 
   // Use a virtio-console instance for the main kernel console. All
   // messages will switch from earlycon to virtio-console after the driver
   // is loaded, and crosvm will append to the kernel log automatically
-  add_hvc_console(instance.kernel_log_pipe_name());
+  crosvm_cmd.AddHvcConsoleReadOnly(instance.kernel_log_pipe_name());
 
   if (config.console()) {
     // stdin is the only currently supported way to write data to a serial port in
@@ -314,18 +249,18 @@
     // the serial port output is received by the console forwarder as crosvm may
     // print other messages to stdout.
     if (config.kgdb() || config.use_bootloader()) {
-      add_serial_console(instance.console_out_pipe_name(),
-                         instance.console_in_pipe_name());
+      crosvm_cmd.AddSerialConsoleReadWrite(instance.console_out_pipe_name(),
+                                           instance.console_in_pipe_name());
       // In kgdb mode, we have the interactive console on ttyS0 (both Android's
       // console and kdb), so we can disable the virtio-console port usually
       // allocated to Android's serial console, and redirect it to a sink. This
       // ensures that that the PCI device assignments (and thus sepolicy) don't
       // have to change
-      add_hvc_sink();
+      crosvm_cmd.AddHvcSink();
     } else {
-      add_serial_sink();
-      add_hvc(instance.console_out_pipe_name(),
-              instance.console_in_pipe_name());
+      crosvm_cmd.AddSerialSink();
+      crosvm_cmd.AddHvcReadWrite(instance.console_out_pipe_name(),
+                                 instance.console_in_pipe_name());
     }
   } else {
     // Use an 8250 UART (ISA or platform device) for earlycon, as the
@@ -333,86 +268,160 @@
     // In kgdb mode, earlycon is an interactive console, and so early
     // dmesg will go there instead of the kernel.log
     if (config.kgdb() || config.use_bootloader()) {
-      add_serial_console_ro(instance.kernel_log_pipe_name());
+      crosvm_cmd.AddSerialConsoleReadOnly(instance.kernel_log_pipe_name());
     }
 
     // as above, create a fake virtio-console 'sink' port when the serial
     // console is disabled, so the PCI device ID assignments don't move
     // around
-    add_hvc_sink();
+    crosvm_cmd.AddHvcSink();
   }
 
-  if (config.enable_gnss_grpc_proxy()) {
-    add_serial(instance.gnss_out_pipe_name(), instance.gnss_in_pipe_name());
-  }
-
-  SharedFD log_out_rd, log_out_wr;
-  if (!SharedFD::Pipe(&log_out_rd, &log_out_wr)) {
-    LOG(ERROR) << "Failed to create log pipe for crosvm's stdout/stderr: "
-               << log_out_rd->StrError();
+  auto crosvm_logs_path = instance.PerInstanceInternalPath("crosvm.fifo");
+  auto crosvm_logs = SharedFD::Fifo(crosvm_logs_path, 0666);
+  if (!crosvm_logs->IsOpen()) {
+    LOG(FATAL) << "Failed to create log fifo for crosvm's stdout/stderr: "
+               << crosvm_logs->StrError();
     return {};
   }
-  crosvm_cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdOut, log_out_wr);
-  crosvm_cmd.RedirectStdIO(Subprocess::StdIOChannel::kStdErr, log_out_wr);
 
-  Command log_tee_cmd(HostBinaryPath("log_tee"));
-  log_tee_cmd.AddParameter("--process_name=crosvm");
-  log_tee_cmd.AddParameter("--log_fd_in=", log_out_rd);
+  Command crosvm_log_tee_cmd(HostBinaryPath("log_tee"));
+  crosvm_log_tee_cmd.AddParameter("--process_name=crosvm");
+  crosvm_log_tee_cmd.AddParameter("--log_fd_in=", crosvm_logs);
 
   // Serial port for logcat, redirected to a pipe
-  add_hvc_ro(instance.logcat_pipe_name());
+  crosvm_cmd.AddHvcReadOnly(instance.logcat_pipe_name());
 
-  add_hvc(instance.PerInstanceInternalPath("keymaster_fifo_vm.out"),
-          instance.PerInstanceInternalPath("keymaster_fifo_vm.in"));
-  add_hvc(instance.PerInstanceInternalPath("gatekeeper_fifo_vm.out"),
-          instance.PerInstanceInternalPath("gatekeeper_fifo_vm.in"));
+  crosvm_cmd.AddHvcReadWrite(
+      instance.PerInstanceInternalPath("keymaster_fifo_vm.out"),
+      instance.PerInstanceInternalPath("keymaster_fifo_vm.in"));
+  crosvm_cmd.AddHvcReadWrite(
+      instance.PerInstanceInternalPath("gatekeeper_fifo_vm.out"),
+      instance.PerInstanceInternalPath("gatekeeper_fifo_vm.in"));
 
   if (config.enable_host_bluetooth()) {
-    add_hvc(instance.PerInstanceInternalPath("bt_fifo_vm.out"),
-            instance.PerInstanceInternalPath("bt_fifo_vm.in"));
+    crosvm_cmd.AddHvcReadWrite(
+        instance.PerInstanceInternalPath("bt_fifo_vm.out"),
+        instance.PerInstanceInternalPath("bt_fifo_vm.in"));
   } else {
-    add_hvc_sink();
+    crosvm_cmd.AddHvcSink();
   }
+  if (config.enable_gnss_grpc_proxy()) {
+    crosvm_cmd.AddHvcReadWrite(
+        instance.PerInstanceInternalPath("gnsshvc_fifo_vm.out"),
+        instance.PerInstanceInternalPath("gnsshvc_fifo_vm.in"));
+  } else {
+    crosvm_cmd.AddHvcSink();
+  }
+
   for (auto i = 0; i < VmManager::kMaxDisks - disk_num; i++) {
-    add_hvc_sink();
+    crosvm_cmd.AddHvcSink();
   }
-  CHECK(hvc_num + disk_num == VmManager::kMaxDisks + VmManager::kDefaultNumHvcs)
-      << "HVC count (" << hvc_num << ") + disk count (" << disk_num << ") "
-      << "is not the expected total of "
+  CHECK(crosvm_cmd.HvcNum() + disk_num ==
+        VmManager::kMaxDisks + VmManager::kDefaultNumHvcs)
+      << "HVC count (" << crosvm_cmd.HvcNum() << ") + disk count (" << disk_num
+      << ") is not the expected total of "
       << VmManager::kMaxDisks + VmManager::kDefaultNumHvcs << " devices";
 
   if (config.enable_audio()) {
-    crosvm_cmd.AddParameter("--sound=",
-                            config.ForDefaultInstance().audio_server_path());
+    crosvm_cmd.Cmd().AddParameter(
+        "--sound=", config.ForDefaultInstance().audio_server_path());
   }
 
   // TODO(b/162071003): virtiofs crashes without sandboxing, this should be fixed
-  if (config.enable_sandbox()) {
+  if (0 && config.enable_sandbox()) {
     // Set up directory shared with virtiofs
-    crosvm_cmd.AddParameter("--shared-dir=", instance.PerInstancePath(kSharedDirName),
-                            ":shared:type=fs");
+    crosvm_cmd.Cmd().AddParameter(
+        "--shared-dir=", instance.PerInstancePath(kSharedDirName),
+        ":shared:type=fs");
   }
 
   // This needs to be the last parameter
-  crosvm_cmd.AddParameter("--bios=", config.bootloader());
+  crosvm_cmd.Cmd().AddParameter("--bios=", config.bootloader());
 
+  // TODO(b/199103204): remove this as well when PRODUCT_ENFORCE_MAC80211_HWSIM
+  // is removed
   // Only run the leases workaround if we are not using the new network
   // bridge architecture - in that case, we have a wider DHCP address
   // space and stale leases should be much less of an issue
-  if (!FileExists("/var/run/cuttlefish-dnsmasq-cvd-wbr.leases")) {
+  if (!FileExists("/var/run/cuttlefish-dnsmasq-cvd-wbr.leases") &&
+      wifi_tap->IsOpen()) {
     // TODO(schuffelen): QEMU also needs this and this is not the best place for
     // this code. Find a better place to put it.
     auto lease_file =
         ForCurrentInstance("/var/run/cuttlefish-dnsmasq-cvd-wbr-") + ".leases";
-    if (!ReleaseDhcpLeases(lease_file, wifi_tap)) {
+
+    std::uint8_t dhcp_server_ip[] = {
+        192, 168, 96, (std::uint8_t)(ForCurrentInstance(1) * 4 - 3)};
+    if (!ReleaseDhcpLeases(lease_file, wifi_tap, dhcp_server_ip)) {
       LOG(ERROR) << "Failed to release wifi DHCP leases. Connecting to the wifi "
                  << "network may not work.";
     }
   }
 
   std::vector<Command> ret;
-  ret.push_back(std::move(crosvm_cmd));
-  ret.push_back(std::move(log_tee_cmd));
+
+  if (gpu_capture_enabled) {
+    const std::string gpu_capture_basename =
+        cpp_basename(config.gpu_capture_binary());
+
+    auto gpu_capture_logs_path =
+        instance.PerInstanceInternalPath("gpu_capture.fifo");
+    auto gpu_capture_logs = SharedFD::Fifo(gpu_capture_logs_path, 0666);
+    if (!gpu_capture_logs->IsOpen()) {
+      LOG(FATAL)
+          << "Failed to create log fifo for gpu capture's stdout/stderr: "
+          << gpu_capture_logs->StrError();
+      return {};
+    }
+
+    Command gpu_capture_log_tee_cmd(HostBinaryPath("log_tee"));
+    gpu_capture_log_tee_cmd.AddParameter("--process_name=",
+                                         gpu_capture_basename);
+    gpu_capture_log_tee_cmd.AddParameter("--log_fd_in=", gpu_capture_logs);
+
+    Command gpu_capture_command(config.gpu_capture_binary());
+    if (gpu_capture_basename == "ngfx") {
+      // Crosvm depends on command line arguments being passed as multiple
+      // arguments but ngfx only allows a single `--args`. To work around this,
+      // create a wrapper script that launches crosvm with all of the arguments
+      // and pass this wrapper script to ngfx.
+      const std::string crosvm_wrapper_path =
+          instance.PerInstanceInternalPath("crosvm_wrapper.sh");
+      const std::string crosvm_wrapper_content =
+          crosvm_cmd.Cmd().AsBashScript(crosvm_logs_path);
+
+      CHECK(android::base::WriteStringToFile(crosvm_wrapper_content,
+                                             crosvm_wrapper_path));
+      CHECK(MakeFileExecutable(crosvm_wrapper_path));
+
+      gpu_capture_command.AddParameter("--exe=", crosvm_wrapper_path);
+      gpu_capture_command.AddParameter("--launch-detached");
+      gpu_capture_command.AddParameter("--verbose");
+      gpu_capture_command.AddParameter("--activity=Frame Debugger");
+    } else {
+      // TODO(natsu): renderdoc
+      LOG(FATAL) << "Unhandled GPU capture binary: "
+                 << config.gpu_capture_binary();
+    }
+
+    gpu_capture_command.RedirectStdIO(Subprocess::StdIOChannel::kStdOut,
+                                      gpu_capture_logs);
+    gpu_capture_command.RedirectStdIO(Subprocess::StdIOChannel::kStdErr,
+                                      gpu_capture_logs);
+
+    ret.push_back(std::move(gpu_capture_log_tee_cmd));
+    ret.push_back(std::move(gpu_capture_command));
+  } else {
+    crosvm_cmd.Cmd().RedirectStdIO(Subprocess::StdIOChannel::kStdOut,
+                                   crosvm_logs);
+    crosvm_cmd.Cmd().RedirectStdIO(Subprocess::StdIOChannel::kStdErr,
+                                   crosvm_logs);
+
+    ret.push_back(std::move(crosvm_cmd.Cmd()));
+  }
+
+  ret.push_back(std::move(crosvm_log_tee_cmd));
   return ret;
 }
 
diff --git a/host/libs/vm_manager/crosvm_manager.h b/host/libs/vm_manager/crosvm_manager.h
index 9d41d68..0c14da8 100644
--- a/host/libs/vm_manager/crosvm_manager.h
+++ b/host/libs/vm_manager/crosvm_manager.h
@@ -31,11 +31,11 @@
 class CrosvmManager : public VmManager {
  public:
   static std::string name() { return "crosvm"; }
-  CrosvmManager(Arch arch) : VmManager(arch) {}
   virtual ~CrosvmManager() = default;
 
   bool IsSupported() override;
-  std::vector<std::string> ConfigureGpuMode(const std::string&) override;
+  std::vector<std::string> ConfigureGraphics(const std::string&,
+      const std::string&) override;
   std::string ConfigureBootDevices(int num_disks) override;
 
   std::vector<cuttlefish::Command> StartCommands(
diff --git a/host/libs/vm_manager/qemu_manager.cpp b/host/libs/vm_manager/qemu_manager.cpp
index c8c1084..c8bce99 100644
--- a/host/libs/vm_manager/qemu_manager.cpp
+++ b/host/libs/vm_manager/qemu_manager.cpp
@@ -85,14 +85,46 @@
   return true;
 }
 
+std::pair<int,int> GetQemuVersion(const std::string& qemu_binary)
+{
+  Command qemu_version_cmd(qemu_binary);
+  qemu_version_cmd.AddParameter("-version");
+
+  std::string qemu_version_input, qemu_version_output, qemu_version_error;
+  cuttlefish::SubprocessOptions options;
+  options.Verbose(false);
+  int qemu_version_ret =
+      cuttlefish::RunWithManagedStdio(std::move(qemu_version_cmd),
+                                      &qemu_version_input,
+                                      &qemu_version_output,
+                                      &qemu_version_error, options);
+  if (qemu_version_ret != 0) {
+    LOG(FATAL) << qemu_binary << " -version returned unexpected response "
+               << qemu_version_output << ". Stderr was " << qemu_version_error;
+    return { 0, 0 };
+  }
+
+  // Snip around the extra text we don't care about
+  qemu_version_output.erase(0, std::string("QEMU emulator version ").length());
+  auto space_pos = qemu_version_output.find(" ", 0);
+  if (space_pos != std::string::npos) {
+    qemu_version_output.resize(space_pos);
+  }
+
+  auto qemu_version_bits = android::base::Split(qemu_version_output, ".");
+  return { std::stoi(qemu_version_bits[0]), std::stoi(qemu_version_bits[1]) };
+}
+
 }  // namespace
 
+QemuManager::QemuManager(Arch arch) : arch_(arch) {}
+
 bool QemuManager::IsSupported() {
   return HostSupportsQemuCli();
 }
 
-std::vector<std::string> QemuManager::ConfigureGpuMode(
-    const std::string& gpu_mode) {
+std::vector<std::string> QemuManager::ConfigureGraphics(
+    const std::string& gpu_mode, const std::string& hwcomposer) {
   if (gpu_mode == kGpuModeGuestSwiftshader) {
     // Override the default HAL search paths in all cases. We do this because
     // the HAL search path allows for fallbacks, and fallbacks in conjunction
@@ -101,8 +133,8 @@
     return {
         "androidboot.cpuvulkan.version=" + std::to_string(VK_API_VERSION_1_1),
         "androidboot.hardware.gralloc=minigbm",
-        "androidboot.hardware.hwcomposer=ranchu",
-        "androidboot.hardware.egl=swiftshader",
+        "androidboot.hardware.hwcomposer=" + hwcomposer,
+        "androidboot.hardware.egl=angle",
         "androidboot.hardware.vulkan=pastel",
     };
   }
@@ -140,11 +172,13 @@
   auto stop = [](Subprocess* proc) {
     auto stopped = Stop();
     if (stopped) {
-      return true;
+      return StopperResult::kStopSuccess;
     }
     LOG(WARNING) << "Failed to stop VMM nicely, "
                   << "attempting to KILL";
-    return KillSubprocess(proc);
+    return KillSubprocess(proc) == StopperResult::kStopSuccess
+               ? StopperResult::kStopCrash
+               : StopperResult::kStopFailure;
   };
   std::string qemu_binary = config.qemu_binary_dir();
   switch (arch_) {
@@ -161,6 +195,8 @@
       qemu_binary += "/qemu-system-x86_64";
       break;
   }
+
+  auto qemu_version = GetQemuVersion(qemu_binary);
   Command qemu_cmd(qemu_binary, stop);
 
   int hvc_num = 0;
@@ -228,6 +264,7 @@
   };
 
   bool is_arm = arch_ == Arch::Arm || arch_ == Arch::Arm64;
+  bool is_arm64 = arch_ == Arch::Arm64;
 
   auto access_kregistry_size_bytes = 0;
   if (FileExists(instance.access_kregistry_path())) {
@@ -249,8 +286,22 @@
   qemu_cmd.AddParameter("guest=", instance.instance_name(), ",debug-threads=on");
 
   qemu_cmd.AddParameter("-machine");
-  auto machine = is_arm ? "virt,gic-version=2,mte=on"
-                        : "pc-i440fx-2.8,accel=kvm,nvdimm=on";
+  std::string machine = is_arm ? "virt" : "pc-i440fx-2.8,nvdimm=on";
+  if (IsHostCompatible(arch_)) {
+    machine += ",accel=kvm";
+    if (is_arm) {
+      machine += ",gic-version=3";
+    }
+  } else if (is_arm) {
+    // QEMU doesn't support GICv3 with TCG yet
+    machine += ",gic-version=2";
+    if (is_arm64) {
+      // Only enable MTE in TCG mode. We haven't started to run on ARMv8/ARMv9
+      // devices with KVM and MTE, so MTE will always require TCG
+      machine += ",mte=on";
+    }
+    CHECK(config.cpus() <= 8) << "CPUs must be no more than 8 with GICv2";
+  }
   qemu_cmd.AddParameter(machine, ",usb=off,dump-guest-core=off");
 
   qemu_cmd.AddParameter("-m");
@@ -292,7 +343,7 @@
 
   qemu_cmd.AddParameter("-chardev");
   qemu_cmd.AddParameter("socket,id=charmonitor,path=", GetMonitorPath(config),
-                        ",server,nowait");
+                        ",server=on,wait=off");
 
   qemu_cmd.AddParameter("-mon");
   qemu_cmd.AddParameter("chardev=charmonitor,id=monitor,mode=control");
@@ -336,10 +387,6 @@
     add_hvc_sink();
   }
 
-  if (config.enable_gnss_grpc_proxy()) {
-    add_serial_console(instance.gnss_pipe_prefix());
-  }
-
   // Serial port for logcat, redirected to a pipe
   add_hvc_ro(instance.logcat_pipe_name());
 
@@ -351,6 +398,12 @@
     add_hvc_sink();
   }
 
+  if (config.enable_gnss_grpc_proxy()) {
+    add_hvc(instance.PerInstanceInternalPath("gnsshvc_fifo_vm"));
+  } else {
+    add_hvc_sink();
+  }
+
   auto disk_num = instance.virtual_disk_paths().size();
 
   for (auto i = 0; i < VmManager::kMaxDisks - disk_num; i++) {
@@ -383,7 +436,7 @@
     qemu_cmd.AddParameter("egl-headless");
 
     qemu_cmd.AddParameter("-vnc");
-    qemu_cmd.AddParameter(":", instance.vnc_server_port() - 5900);
+    qemu_cmd.AddParameter(":", instance.qemu_vnc_server_port());
   } else {
     qemu_cmd.AddParameter("-display");
     qemu_cmd.AddParameter("none");
@@ -394,7 +447,7 @@
     // As we will pass this to ramoops, define this region first so it is always
     // located at this address. This is currently x86 only.
     qemu_cmd.AddParameter("-object");
-    qemu_cmd.AddParameter("memory-backend-file,id=objpmem0,share,mem-path=",
+    qemu_cmd.AddParameter("memory-backend-file,id=objpmem0,share=on,mem-path=",
                           instance.pstore_path(), ",size=", pstore_size_bytes);
 
     qemu_cmd.AddParameter("-device");
@@ -403,9 +456,9 @@
 
   // QEMU does not implement virtio-pmem-pci for ARM64 yet; restore this
   // when the device has been added
-  if (!is_arm && FileExists(instance.access_kregistry_path())) {
+  if (!is_arm && access_kregistry_size_bytes > 0) {
     qemu_cmd.AddParameter("-object");
-    qemu_cmd.AddParameter("memory-backend-file,id=objpmem1,share,mem-path=",
+    qemu_cmd.AddParameter("memory-backend-file,id=objpmem1,share=on,mem-path=",
                           instance.access_kregistry_path(), ",size=",
                           access_kregistry_size_bytes);
 
@@ -421,10 +474,14 @@
                         "max-bytes=1024,period=2000");
 
   qemu_cmd.AddParameter("-device");
-  qemu_cmd.AddParameter("virtio-mouse-pci");
+  qemu_cmd.AddParameter("virtio-mouse-pci,disable-legacy=on");
 
   qemu_cmd.AddParameter("-device");
-  qemu_cmd.AddParameter("virtio-keyboard-pci");
+  qemu_cmd.AddParameter("virtio-keyboard-pci,disable-legacy=on");
+
+  // device padding for unsupported "switches" input
+  qemu_cmd.AddParameter("-device");
+  qemu_cmd.AddParameter("virtio-keyboard-pci,disable-legacy=on");
 
   auto vhost_net = config.vhost_net() ? ",vhost=on" : "";
 
@@ -444,16 +501,23 @@
 
   qemu_cmd.AddParameter("-device");
   qemu_cmd.AddParameter("virtio-net-pci-non-transitional,netdev=hostnet1,id=net1");
-
+#ifndef ENFORCE_MAC80211_HWSIM
   qemu_cmd.AddParameter("-netdev");
   qemu_cmd.AddParameter("tap,id=hostnet2,ifname=", instance.wifi_tap_name(),
                         ",script=no,downscript=no", vhost_net);
-
   qemu_cmd.AddParameter("-device");
   qemu_cmd.AddParameter("virtio-net-pci-non-transitional,netdev=hostnet2,id=net2");
+#endif
+
+  auto display_configs = config.display_configs();
+  CHECK_GE(display_configs.size(), 1);
+  auto display_config = display_configs[0];
 
   qemu_cmd.AddParameter("-device");
-  qemu_cmd.AddParameter("virtio-gpu-pci,id=gpu0");
+  qemu_cmd.AddParameter(qemu_version.first < 6 ?
+                            "virtio-gpu-pci" : "virtio-gpu-gl-pci", ",id=gpu0",
+                        ",xres=", display_config.width,
+                        ",yres=", display_config.height);
 
   qemu_cmd.AddParameter("-cpu");
   qemu_cmd.AddParameter(IsHostCompatible(arch_) ? "host" : "max");
diff --git a/host/libs/vm_manager/qemu_manager.h b/host/libs/vm_manager/qemu_manager.h
index 934a976..21ff3d0 100644
--- a/host/libs/vm_manager/qemu_manager.h
+++ b/host/libs/vm_manager/qemu_manager.h
@@ -31,15 +31,19 @@
  public:
   static std::string name() { return "qemu_cli"; }
 
-  QemuManager(Arch arch) : VmManager(arch) {}
+  QemuManager(Arch);
   virtual ~QemuManager() = default;
 
   bool IsSupported() override;
-  std::vector<std::string> ConfigureGpuMode(const std::string&) override;
+  std::vector<std::string> ConfigureGraphics(const std::string&,
+      const std::string&) override;
   std::string ConfigureBootDevices(int num_disks) override;
 
   std::vector<cuttlefish::Command> StartCommands(
       const CuttlefishConfig& config) override;
+
+ private:
+  Arch arch_;
 };
 
 } // namespace vm_manager
diff --git a/host/libs/vm_manager/vm_manager.cpp b/host/libs/vm_manager/vm_manager.cpp
index 8c2ef57..b59ff68 100644
--- a/host/libs/vm_manager/vm_manager.cpp
+++ b/host/libs/vm_manager/vm_manager.cpp
@@ -17,6 +17,7 @@
 #include "host/libs/vm_manager/vm_manager.h"
 
 #include <android-base/logging.h>
+#include <fruit/fruit.h>
 
 #include <iomanip>
 #include <memory>
@@ -33,7 +34,7 @@
   if (name == QemuManager::name()) {
     vmm.reset(new QemuManager(arch));
   } else if (name == CrosvmManager::name()) {
-    vmm.reset(new CrosvmManager(arch));
+    vmm.reset(new CrosvmManager());
   }
   if (!vmm) {
     LOG(ERROR) << "Invalid VM manager: " << name;
@@ -61,6 +62,17 @@
   return {boot_devices_prop};
 }
 
+fruit::Component<fruit::Required<const CuttlefishConfig>, VmManager>
+VmManagerComponent() {
+  return fruit::createComponent().registerProvider(
+      [](const CuttlefishConfig& config) {
+        auto vmm = GetVmManager(config.vm_manager(), config.target_arch());
+        CHECK(vmm) << "Invalid VMM/Arch: \"" << config.vm_manager() << "\""
+                   << (int)config.target_arch() << "\"";
+        return vmm.release();  // fruit takes ownership of raw pointers
+      });
+}
+
 } // namespace vm_manager
 } // namespace cuttlefish
 
diff --git a/host/libs/vm_manager/vm_manager.h b/host/libs/vm_manager/vm_manager.h
index b538e8f..f829b6b 100644
--- a/host/libs/vm_manager/vm_manager.h
+++ b/host/libs/vm_manager/vm_manager.h
@@ -14,21 +14,18 @@
  * limitations under the License.
  */
 #pragma once
+#include <common/libs/utils/subprocess.h>
+#include <fruit/fruit.h>
+#include <host/libs/config/cuttlefish_config.h>
 
 #include <string>
 #include <vector>
 
-#include <common/libs/utils/subprocess.h>
-#include <host/libs/config/cuttlefish_config.h>
-
 namespace cuttlefish {
 namespace vm_manager {
 
 // Superclass of every guest VM manager.
 class VmManager {
- protected:
-  const Arch arch_;
-
  public:
   // This is the number of HVC virtual console ports that should be configured
   // by the VmManager. Because crosvm currently allocates these ports as the
@@ -40,7 +37,7 @@
   // need to consume host resources, except for the PCI ID. Use this trick to
   // keep the number of PCI IDs assigned constant for all flags/vm manager
   // combinations
-  static const int kDefaultNumHvcs = 6;
+  static const int kDefaultNumHvcs = 7;
 
   // This is the number of virtual disks (block devices) that should be
   // configured by the VmManager. Related to the description above regarding
@@ -58,11 +55,11 @@
   // the persistent disk
   static const int kDefaultNumBootDevices = 2;
 
-  VmManager(Arch arch) : arch_(arch) {}
   virtual ~VmManager() = default;
 
   virtual bool IsSupported() = 0;
-  virtual std::vector<std::string> ConfigureGpuMode(const std::string&) = 0;
+  virtual std::vector<std::string> ConfigureGraphics(const std::string&,
+      const std::string&) = 0;
   virtual std::string ConfigureBootDevices(int num_disks) = 0;
 
   // Starts the VMM. It will usually build a command and pass it to the
@@ -73,6 +70,9 @@
       const CuttlefishConfig& config) = 0;
 };
 
+fruit::Component<fruit::Required<const CuttlefishConfig>, VmManager>
+VmManagerComponent();
+
 std::unique_ptr<VmManager> GetVmManager(const std::string&, Arch arch);
 
 std::string ConfigureMultipleBootDevices(const std::string& pci_path, int pci_offset,
diff --git a/host/libs/websocket/websocket_handler.cpp b/host/libs/websocket/websocket_handler.cpp
index 9d6f636..c80b150 100644
--- a/host/libs/websocket/websocket_handler.cpp
+++ b/host/libs/websocket/websocket_handler.cpp
@@ -18,8 +18,18 @@
 #include <android-base/logging.h>
 #include <libwebsockets.h>
 
+#include "host/libs/websocket/websocket_server.h"
+
 namespace cuttlefish {
 
+namespace {
+void AppendData(const char* data, size_t len, std::string& buffer) {
+  auto ptr = reinterpret_cast<const uint8_t*>(data);
+  buffer.reserve(buffer.size() + len);
+  buffer.insert(buffer.end(), ptr, ptr + len);
+}
+}  // namespace
+
 WebSocketHandler::WebSocketHandler(struct lws* wsi) : wsi_(wsi) {}
 
 void WebSocketHandler::EnqueueMessage(const uint8_t* data, size_t len,
@@ -34,6 +44,8 @@
 // updating the buffer.
 void WebSocketHandler::WriteWsBuffer(WebSocketHandler::WsBuffer& ws_buffer) {
   auto len = ws_buffer.data.size() - LWS_PRE;
+  // For http2 there must be LWS_PRE bytes at the end as well.
+  ws_buffer.data.resize(ws_buffer.data.size() + LWS_PRE);
   auto flags = lws_write_ws_flags(
       ws_buffer.binary ? LWS_WRITE_BINARY : LWS_WRITE_TEXT, true, true);
   auto res = lws_write(wsi_, &ws_buffer.data[LWS_PRE], len,
@@ -44,7 +56,7 @@
   if (res < 0) {
     // This shouldn't happen since this function is called in response to a
     // LWS_CALLBACK_SERVER_WRITEABLE call.
-    LOG(FATAL) << "Failed to write data on the websocket";
+    LOG(ERROR) << "Failed to write data on the websocket";
   }
 }
 
@@ -67,4 +79,28 @@
   lws_callback_on_writable(wsi_);
 }
 
+DynHandler::DynHandler(struct lws* wsi) : wsi_(wsi), out_buffer_(LWS_PRE, 0) {}
+
+void DynHandler::AppendDataOut(const std::string& data) {
+  AppendData(data.c_str(), data.size(), out_buffer_);
+}
+
+void DynHandler::AppendDataIn(void* data, size_t len) {
+  AppendData(reinterpret_cast<char*>(data), len, in_buffer_);
+}
+
+int DynHandler::OnWritable() {
+  auto len = out_buffer_.size() - LWS_PRE;
+  // For http2 there must be LWS_PRE bytes at the end as well.
+  out_buffer_.resize(out_buffer_.size() + LWS_PRE);
+  auto res = lws_write(wsi_, reinterpret_cast<uint8_t*>(&out_buffer_[LWS_PRE]),
+                       len, LWS_WRITE_HTTP_FINAL);
+  if (res != len) {
+    // This shouldn't happen since this function is called in response to a
+    // LWS_CALLBACK_SERVER_WRITEABLE call.
+    LOG(ERROR) << "Failed to write HTTP response";
+  }
+  return lws_http_transaction_completed(wsi_);
+}
+size_t DynHandler::content_len() const { return out_buffer_.size() - LWS_PRE; }
 }  // namespace cuttlefish
diff --git a/host/libs/websocket/websocket_handler.h b/host/libs/websocket/websocket_handler.h
index 45b51fa..e9a63ca 100644
--- a/host/libs/websocket/websocket_handler.h
+++ b/host/libs/websocket/websocket_handler.h
@@ -16,6 +16,7 @@
 #pragma once
 
 #include <deque>
+#include <string>
 #include <vector>
 
 struct lws;
@@ -63,4 +64,46 @@
   virtual std::shared_ptr<WebSocketHandler> Build(struct lws* wsi) = 0;
 };
 
+class WebSocketServer;
+
+enum class HttpStatusCode : int {
+  // From https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
+  Ok = 200,
+  NoContent = 204,
+  BadRequest = 400,
+  Unauthorized = 401,
+  NotFound = 404,
+  MethodNotAllowed = 405,
+  Conflict = 409,
+};
+
+class DynHandler {
+ public:
+  DynHandler(struct lws* wsi);
+
+  virtual ~DynHandler() = default;
+  // TODO (jemoreira): Allow more than just JSON replies
+  // TODO (jemoreira): Receive request parameters
+  // Handle a GET request.
+  virtual HttpStatusCode DoGet() = 0;
+  // Handle a POST request.
+  virtual HttpStatusCode DoPost() = 0;
+
+ protected:
+  void AppendDataOut(const std::string& data);
+  const std::string& GetDataIn() const { return in_buffer_; }
+
+ private:
+  friend WebSocketServer;
+  void AppendDataIn(void* data, size_t len);
+  int OnWritable();
+  size_t content_len() const;
+
+  struct lws* wsi_;
+  std::string in_buffer_ = {};
+  std::string out_buffer_ = {};
+};
+
+using DynHandlerFactory =
+    std::function<std::unique_ptr<DynHandler>(struct lws*)>;
 }  // namespace cuttlefish
diff --git a/host/libs/websocket/websocket_server.cpp b/host/libs/websocket/websocket_server.cpp
index 40f1357..f48209b 100644
--- a/host/libs/websocket/websocket_server.cpp
+++ b/host/libs/websocket/websocket_server.cpp
@@ -26,29 +26,158 @@
 #include <host/libs/websocket/websocket_handler.h>
 
 namespace cuttlefish {
-WebSocketServer::WebSocketServer(
-    const char* protocol_name,
-    const std::string &certs_dir,
-    const std::string &assets_dir,
-    int server_port) {
-  std::string cert_file = certs_dir + "/server.crt";
-  std::string key_file = certs_dir + "/server.key";
-  std::string ca_file = certs_dir + "/CA.crt";
+namespace {
+
+std::string GetPath(struct lws* wsi) {
+  auto len = lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI);
+  std::string path(len + 1, '\0');
+  auto ret = lws_hdr_copy(wsi, path.data(), path.size(), WSI_TOKEN_GET_URI);
+  if (ret <= 0) {
+    len = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH);
+    path.resize(len + 1, '\0');
+    ret =
+        lws_hdr_copy(wsi, path.data(), path.size(), WSI_TOKEN_HTTP_COLON_PATH);
+  }
+  if (ret < 0) {
+    LOG(FATAL) << "Something went wrong getting the path";
+  }
+  path.resize(len);
+  return path;
+}
+
+const std::vector<std::pair<std::string, std::string>> kCORSHeaders = {
+    {"Access-Control-Allow-Origin:", "*"},
+    {"Access-Control-Allow-Methods:", "POST, GET, OPTIONS"},
+    {"Access-Control-Allow-Headers:",
+     "Content-Type, Access-Control-Allow-Headers, Authorization, "
+     "X-Requested-With, Accept"}};
+
+bool AddCORSHeaders(struct lws* wsi, unsigned char** buffer_ptr,
+                    unsigned char* buffer_end) {
+  for (const auto& header : kCORSHeaders) {
+    const auto& name = header.first;
+    const auto& value = header.second;
+    if (lws_add_http_header_by_name(
+            wsi, reinterpret_cast<const unsigned char*>(name.c_str()),
+            reinterpret_cast<const unsigned char*>(value.c_str()), value.size(),
+            buffer_ptr, buffer_end)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+bool WriteCommonHttpHeaders(int status, const char* mime_type,
+                            size_t content_len, struct lws* wsi) {
+  constexpr size_t BUFF_SIZE = 2048;
+  uint8_t header_buffer[LWS_PRE + BUFF_SIZE];
+  const auto start = &header_buffer[LWS_PRE];
+  auto p = &header_buffer[LWS_PRE];
+  auto end = start + BUFF_SIZE;
+  if (lws_add_http_common_headers(wsi, status, mime_type, content_len, &p,
+                                  end)) {
+    LOG(ERROR) << "Failed to write headers for response";
+    return false;
+  }
+  if (!AddCORSHeaders(wsi, &p, end)) {
+    LOG(ERROR) << "Failed to write CORS headers for response";
+    return false;
+  }
+  if (lws_finalize_write_http_header(wsi, start, &p, end)) {
+    LOG(ERROR) << "Failed to finalize headers for response";
+    return false;
+  }
+  return true;
+}
+
+}  // namespace
+WebSocketServer::WebSocketServer(const char* protocol_name,
+                                 const std::string& assets_dir, int server_port)
+    : WebSocketServer(protocol_name, "", assets_dir, server_port) {}
+
+WebSocketServer::WebSocketServer(const char* protocol_name,
+                                 const std::string& certs_dir,
+                                 const std::string& assets_dir, int server_port)
+    : protocol_name_(protocol_name),
+      assets_dir_(assets_dir),
+      certs_dir_(certs_dir),
+      server_port_(server_port) {}
+
+void WebSocketServer::InitializeLwsObjects() {
+  std::string cert_file = certs_dir_ + "/server.crt";
+  std::string key_file = certs_dir_ + "/server.key";
+  std::string ca_file = certs_dir_ + "/CA.crt";
 
   retry_ = {
       .secs_since_valid_ping = 3,
       .secs_since_valid_hangup = 10,
   };
 
-  struct lws_protocols protocols[] = {
-      {protocol_name, ServerCallback, 4096, 0, 0, nullptr, 0},
-      {nullptr, nullptr, 0, 0, 0, nullptr, 0}};
+  struct lws_protocols protocols[] =  //
+      {{
+           .name = protocol_name_.c_str(),
+           .callback = WebsocketCallback,
+           .per_session_data_size = 0,
+           .rx_buffer_size = 0,
+           .id = 0,
+           .user = this,
+           .tx_packet_size = 0,
+       },
+       {
+           .name = "__http_polling__",
+           .callback = DynHttpCallback,
+           .per_session_data_size = 0,
+           .rx_buffer_size = 0,
+           .id = 0,
+           .user = this,
+           .tx_packet_size = 0,
+       },
+       {
+           .name = nullptr,
+           .callback = nullptr,
+           .per_session_data_size = 0,
+           .rx_buffer_size = 0,
+           .id = 0,
+           .user = nullptr,
+           .tx_packet_size = 0,
+       }};
 
-  mount_ = {
-      .mount_next = nullptr,
+  dyn_mounts_.reserve(dyn_handler_factories_.size());
+  for (auto& handler_entry : dyn_handler_factories_) {
+    auto& path = handler_entry.first;
+    dyn_mounts_.push_back({
+        .mount_next = nullptr,
+        .mountpoint = path.c_str(),
+        .mountpoint_len = static_cast<uint8_t>(path.size()),
+        .origin = "__http_polling__",
+        .def = nullptr,
+        .protocol = nullptr,
+        .cgienv = nullptr,
+        .extra_mimetypes = nullptr,
+        .interpret = nullptr,
+        .cgi_timeout = 0,
+        .cache_max_age = 0,
+        .auth_mask = 0,
+        .cache_reusable = 0,
+        .cache_revalidate = 0,
+        .cache_intermediaries = 0,
+        .origin_protocol = LWSMPRO_CALLBACK,  // dynamic
+        .basic_auth_login_file = nullptr,
+    });
+  }
+  struct lws_http_mount* next_mount = nullptr;
+  // Set up the linked list after all the mounts have been created to ensure
+  // pointers are not invalidated.
+  for (auto& mount : dyn_mounts_) {
+    mount.mount_next = next_mount;
+    next_mount = &mount;
+  }
+
+  static_mount_ = {
+      .mount_next = next_mount,
       .mountpoint = "/",
       .mountpoint_len = 1,
-      .origin = assets_dir.c_str(),
+      .origin = assets_dir_.c_str(),
       .def = "index.html",
       .protocol = nullptr,
       .cgienv = nullptr,
@@ -71,20 +200,22 @@
               "font-src  https://fonts.gstatic.com/; "};
 
   memset(&info, 0, sizeof info);
-  info.port = server_port;
-  info.mounts = &mount_;
+  info.port = server_port_;
+  info.mounts = &static_mount_;
   info.protocols = protocols;
   info.vhost_name = "localhost";
-  info.ws_ping_pong_interval = 10;
   info.headers = &headers_;
-  info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
-  info.ssl_cert_filepath = cert_file.c_str();
-  info.ssl_private_key_filepath = key_file.c_str();
-  if (FileExists(ca_file)) {
-    info.ssl_ca_filepath = ca_file.c_str();
-  }
   info.retry_and_idle_policy = &retry_;
 
+  if (!certs_dir_.empty()) {
+    info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
+    info.ssl_cert_filepath = cert_file.c_str();
+    info.ssl_private_key_filepath = key_file.c_str();
+    if (FileExists(ca_file)) {
+      info.ssl_ca_filepath = ca_file.c_str();
+    }
+  }
+
   context_ = lws_create_context(&info);
   if (!context_) {
     LOG(FATAL) << "Failed to create websocket context";
@@ -92,12 +223,19 @@
 }
 
 void WebSocketServer::RegisterHandlerFactory(
-    const std::string &path,
+    const std::string& path,
     std::unique_ptr<WebSocketHandlerFactory> handler_factory_p) {
   handler_factories_[path] = std::move(handler_factory_p);
 }
 
+void WebSocketServer::RegisterDynHandlerFactory(
+    const std::string& path,
+    DynHandlerFactory handler_factory) {
+  dyn_handler_factories_[path] = std::move(handler_factory);
+}
+
 void WebSocketServer::Serve() {
+  InitializeLwsObjects();
   int n = 0;
   while (n >= 0) {
     n = lws_service(context_, 0);
@@ -105,27 +243,127 @@
   lws_context_destroy(context_);
 }
 
-std::unordered_map<struct lws*, std::shared_ptr<WebSocketHandler>> WebSocketServer::handlers_ = {};
-std::unordered_map<std::string, std::unique_ptr<WebSocketHandlerFactory>>
-    WebSocketServer::handler_factories_ = {};
-
-std::string WebSocketServer::GetPath(struct lws* wsi) {
-  auto len = lws_hdr_total_length(wsi, WSI_TOKEN_GET_URI);
-  std::string path(len + 1, '\0');
-  auto ret = lws_hdr_copy(wsi, path.data(), path.size(), WSI_TOKEN_GET_URI);
-  if (ret <= 0) {
-      len = lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_COLON_PATH);
-      path.resize(len + 1, '\0');
-      ret = lws_hdr_copy(wsi, path.data(), path.size(), WSI_TOKEN_HTTP_COLON_PATH);
+int WebSocketServer::WebsocketCallback(struct lws* wsi,
+                                       enum lws_callback_reasons reason,
+                                       void* user, void* in, size_t len) {
+  auto protocol = lws_get_protocol(wsi);
+  if (!protocol) {
+    // Some callback reasons are always handled by the first protocol, before a
+    // wsi struct is even created.
+    return lws_callback_http_dummy(wsi, reason, user, in, len);
   }
-  if (ret < 0) {
-    LOG(FATAL) << "Something went wrong getting the path";
-  }
-  path.resize(len);
-  return path;
+  return reinterpret_cast<WebSocketServer*>(protocol->user)
+      ->ServerCallback(wsi, reason, user, in, len);
 }
 
-int WebSocketServer::ServerCallback(struct lws* wsi, enum lws_callback_reasons reason,
+int WebSocketServer::DynHttpCallback(struct lws* wsi,
+                                     enum lws_callback_reasons reason,
+                                     void* user, void* in, size_t len) {
+  auto protocol = lws_get_protocol(wsi);
+  if (!protocol) {
+    LOG(ERROR) << "No protocol associated with connection";
+    return 1;
+  }
+  return reinterpret_cast<WebSocketServer*>(protocol->user)
+      ->DynServerCallback(wsi, reason, user, in, len);
+}
+
+int WebSocketServer::DynServerCallback(struct lws* wsi,
+                                       enum lws_callback_reasons reason,
+                                       void* user, void* in, size_t len) {
+  switch (reason) {
+    case LWS_CALLBACK_HTTP: {
+      char* path_raw;
+      int path_len;
+      auto method = lws_http_get_uri_and_method(wsi, &path_raw, &path_len);
+      if (method < 0) {
+        return 1;
+      }
+      std::string path(path_raw, path_len);
+      auto handler = InstantiateDynHandler(path, wsi);
+      if (!handler) {
+        if (!WriteCommonHttpHeaders(static_cast<int>(HttpStatusCode::NotFound),
+                                    "application/json", 0, wsi)) {
+          return 1;
+        }
+        return lws_http_transaction_completed(wsi);
+      }
+      dyn_handlers_[wsi] = std::move(handler);
+      switch (method) {
+        case LWSHUMETH_GET: {
+          auto status = dyn_handlers_[wsi]->DoGet();
+          if (!WriteCommonHttpHeaders(static_cast<int>(status),
+                                      "application/json",
+                                      dyn_handlers_[wsi]->content_len(), wsi)) {
+            return 1;
+          }
+          // Write the response later, when the server is ready
+          lws_callback_on_writable(wsi);
+          break;
+        }
+        case LWSHUMETH_POST:
+          // Do nothing until the body has been read
+          break;
+        case LWSHUMETH_OPTIONS: {
+          // Response for CORS preflight
+          auto status = HttpStatusCode::NoContent;
+          if (!WriteCommonHttpHeaders(static_cast<int>(status), "", 0, wsi)) {
+            return 1;
+          }
+          lws_callback_on_writable(wsi);
+          break;
+        }
+        default:
+          LOG(ERROR) << "Unsupported HTTP method: " << method;
+          return 1;
+      }
+      break;
+    }
+    case LWS_CALLBACK_HTTP_BODY: {
+      auto handler = dyn_handlers_[wsi].get();
+      if (!handler) {
+        LOG(WARNING) << "Received body for unknown wsi";
+        return 1;
+      }
+      handler->AppendDataIn(in, len);
+      break;
+    }
+    case LWS_CALLBACK_HTTP_BODY_COMPLETION: {
+      auto handler = dyn_handlers_[wsi].get();
+      if (!handler) {
+        LOG(WARNING) << "Unexpected body completion event from unknown wsi";
+        return 1;
+      }
+      auto status = handler->DoPost();
+      if (!WriteCommonHttpHeaders(static_cast<int>(status), "application/json",
+                                  dyn_handlers_[wsi]->content_len(), wsi)) {
+        return 1;
+      }
+      lws_callback_on_writable(wsi);
+      break;
+    }
+    case LWS_CALLBACK_HTTP_WRITEABLE: {
+      auto handler = dyn_handlers_[wsi].get();
+      if (!handler) {
+        LOG(WARNING) << "Unknown wsi became writable";
+        return 1;
+      }
+      auto ret = handler->OnWritable();
+      dyn_handlers_.erase(wsi);
+      // Make sure the connection (in HTTP 1) or stream (in HTTP 2) is closed
+      // after the response is written
+      return ret;
+    }
+    case LWS_CALLBACK_CLOSED_HTTP:
+      break;
+    default:
+      return lws_callback_http_dummy(wsi, reason, user, in, len);
+  }
+  return 0;
+}
+
+int WebSocketServer::ServerCallback(struct lws* wsi,
+                                    enum lws_callback_reasons reason,
                                     void* user, void* in, size_t len) {
   switch (reason) {
     case LWS_CALLBACK_ESTABLISHED: {
@@ -170,7 +408,7 @@
         handler->OnReceive(reinterpret_cast<const uint8_t*>(in), len,
                            lws_frame_is_binary(wsi), is_final);
       } else {
-        LOG(WARNING) << "Unkwnown wsi sent data";
+        LOG(WARNING) << "Unknown wsi sent data";
       }
       break;
     }
@@ -187,9 +425,21 @@
     LOG(ERROR) << "Wrong path provided in URI: " << uri_path;
     return nullptr;
   } else {
-    LOG(INFO) << "Creating handler for " << uri_path;
+    LOG(VERBOSE) << "Creating handler for " << uri_path;
     return it->second->Build(wsi);
   }
 }
 
+std::unique_ptr<DynHandler> WebSocketServer::InstantiateDynHandler(
+    const std::string& uri_path, struct lws* wsi) {
+  auto it = dyn_handler_factories_.find(uri_path);
+  if (it == dyn_handler_factories_.end()) {
+    LOG(ERROR) << "Wrong path provided in URI: " << uri_path;
+    return nullptr;
+  } else {
+    LOG(VERBOSE) << "Creating handler for " << uri_path;
+    return it->second(wsi);
+  }
+}
+
 }  // namespace cuttlefish
diff --git a/host/libs/websocket/websocket_server.h b/host/libs/websocket/websocket_server.h
index 0695b3b..768578a 100644
--- a/host/libs/websocket/websocket_server.h
+++ b/host/libs/websocket/websocket_server.h
@@ -18,6 +18,7 @@
 
 #include <string>
 #include <unordered_map>
+#include <vector>
 
 #include <android-base/logging.h>
 #include <libwebsockets.h>
@@ -27,32 +28,62 @@
 namespace cuttlefish {
 class WebSocketServer {
  public:
-  WebSocketServer(
-    const char* protocol_name,
-    const std::string &certs_dir,
-    const std::string &assets_dir,
-    int port);
+  // Uses HTTP and WS
+  WebSocketServer(const char* protocol_name, const std::string& assets_dir,
+                  int port);
+  // Uses HTTPS and WSS when a certificates directory is provided
+  WebSocketServer(const char* protocol_name, const std::string& certs_dir,
+                  const std::string& assets_dir, int port);
   ~WebSocketServer() = default;
 
+  // Register a handler factory for websocket connections. A new handler will be
+  // created for each new websocket connection.
   void RegisterHandlerFactory(
-    const std::string &path,
-    std::unique_ptr<WebSocketHandlerFactory> handler_factory_p);
+      const std::string& path,
+      std::unique_ptr<WebSocketHandlerFactory> handler_factory_p);
+
+  // Register a handler factory for dynamic HTTP requests. A new handler will be
+  // created for each HTTP request.
+  void RegisterDynHandlerFactory(const std::string& path,
+                                 DynHandlerFactory handler_factory);
+
   void Serve();
 
-
  private:
-  static std::unordered_map<struct lws*, std::shared_ptr<WebSocketHandler>> handlers_;
-  static std::unordered_map<std::string, std::unique_ptr<WebSocketHandlerFactory>>
-      handler_factories_;
+  static int WebsocketCallback(struct lws* wsi,
+                               enum lws_callback_reasons reason, void* user,
+                               void* in, size_t len);
 
-  static std::string GetPath(struct lws* wsi);
-  static int ServerCallback(struct lws* wsi, enum lws_callback_reasons reason,
+  static int DynHttpCallback(struct lws* wsi, enum lws_callback_reasons reason,
+                             void* user, void* in, size_t len);
+
+  int ServerCallback(struct lws* wsi, enum lws_callback_reasons reason,
                             void* user, void* in, size_t len);
-  static std::shared_ptr<WebSocketHandler> InstantiateHandler(
+  int DynServerCallback(struct lws* wsi,
+                               enum lws_callback_reasons reason, void* user,
+                               void* in, size_t len);
+  std::shared_ptr<WebSocketHandler> InstantiateHandler(
+      const std::string& uri_path, struct lws* wsi);
+  std::unique_ptr<DynHandler> InstantiateDynHandler(
       const std::string& uri_path, struct lws* wsi);
 
+  void InitializeLwsObjects();
+
+  std::unordered_map<struct lws*, std::shared_ptr<WebSocketHandler>> handlers_ =
+      {};
+  std::unordered_map<std::string, std::unique_ptr<WebSocketHandlerFactory>>
+      handler_factories_ = {};
+  std::unordered_map<struct lws*, std::unique_ptr<DynHandler>> dyn_handlers_ =
+      {};
+  std::unordered_map<std::string, DynHandlerFactory> dyn_handler_factories_ =
+      {};
+  std::string protocol_name_;
+  std::string assets_dir_;
+  std::string certs_dir_;
+  int server_port_;
   struct lws_context* context_;
-  struct lws_http_mount mount_;
+  struct lws_http_mount static_mount_;
+  std::vector<struct lws_http_mount> dyn_mounts_ = {};
   struct lws_protocol_vhost_options headers_;
   lws_retry_bo_t retry_;
 };
diff --git a/host/commands/mk_cdisk/Android.bp b/host/libs/wmediumd_controller/Android.bp
similarity index 77%
copy from host/commands/mk_cdisk/Android.bp
copy to host/libs/wmediumd_controller/Android.bp
index a0cf8ba..e41e6da 100644
--- a/host/commands/mk_cdisk/Android.bp
+++ b/host/libs/wmediumd_controller/Android.bp
@@ -17,25 +17,21 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-cc_binary {
-    name: "mk_cdisk",
+cc_library_static {
+    name: "libcuttlefish_wmediumd_controller",
     srcs: [
-        "mk_cdisk.cc",
+        "wmediumd_api_protocol.cpp",
+        "wmediumd_controller.cpp",
+    ],
+    export_include_dirs: [
+        ".",
     ],
     shared_libs: [
+        "libbase",
         "libcuttlefish_fs",
         "libcuttlefish_utils",
-        "libbase",
-        "libjsoncpp",
-        "liblog",
-        "libz",
     ],
     static_libs: [
-        "libcdisk_spec",
-        "libext2_uuid",
-        "libimage_aggregator",
-        "libprotobuf-cpp-lite",
-        "libsparse",
     ],
     defaults: ["cuttlefish_host"],
 }
diff --git a/host/libs/wmediumd_controller/wmediumd_api_protocol.cpp b/host/libs/wmediumd_controller/wmediumd_api_protocol.cpp
new file mode 100644
index 0000000..b1ffc5e
--- /dev/null
+++ b/host/libs/wmediumd_controller/wmediumd_api_protocol.cpp
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#include "wmediumd_api_protocol.h"
+
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+
+#include <cstdlib>
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "common/libs/fs/shared_buf.h"
+
+template <class T>
+static void AppendBinaryRepresentation(std::string& buf, const T& data) {
+  std::copy(reinterpret_cast<const char*>(&data),
+            reinterpret_cast<const char*>(&data) + sizeof(T),
+            std::back_inserter(buf));
+}
+
+namespace cuttlefish {
+
+std::string WmediumdMessage::Serialize(void) const {
+  std::string result;
+
+  AppendBinaryRepresentation(result, this->Type());
+
+  std::string body;
+  this->SerializeBody(body);
+
+  AppendBinaryRepresentation(result, static_cast<uint32_t>(body.size()));
+
+  std::copy(std::begin(body), std::end(body), std::back_inserter(result));
+
+  return result;
+}
+
+void WmediumdMessageSetControl::SerializeBody(std::string& buf) const {
+  AppendBinaryRepresentation(buf, flags_);
+}
+
+WmediumdMessageSetSnr::WmediumdMessageSetSnr(const std::string& node1,
+                                             const std::string& node2,
+                                             uint8_t snr) {
+  auto splitted_mac1 = android::base::Split(node1, ":");
+  auto splitted_mac2 = android::base::Split(node2, ":");
+
+  if (splitted_mac1.size() != 6) {
+    LOG(FATAL) << "invalid mac address length " << node1;
+  }
+
+  if (splitted_mac2.size() != 6) {
+    LOG(FATAL) << "invalid mac address length " << node2;
+  }
+
+  for (int i = 0; i < 6; i++) {
+    char* end_ptr;
+    node1_mac_[i] = (uint8_t)strtol(splitted_mac1[i].c_str(), &end_ptr, 16);
+    if (end_ptr != splitted_mac1[i].c_str() + splitted_mac1[i].size()) {
+      LOG(FATAL) << "cannot parse " << splitted_mac1[i] << " of " << node1;
+    }
+
+    node2_mac_[i] = (uint8_t)strtol(splitted_mac2[i].c_str(), &end_ptr, 16);
+    if (end_ptr != splitted_mac2[i].c_str() + splitted_mac2[i].size()) {
+      LOG(FATAL) << "cannot parse " << splitted_mac2[i] << " of " << node1;
+    }
+  }
+
+  snr_ = snr;
+}
+
+void WmediumdMessageSetSnr::SerializeBody(std::string& buf) const {
+  std::copy(std::begin(node1_mac_), std::end(node1_mac_),
+            std::back_inserter(buf));
+  std::copy(std::begin(node2_mac_), std::end(node2_mac_),
+            std::back_inserter(buf));
+  buf.push_back(snr_);
+}
+
+void WmediumdMessageReloadConfig::SerializeBody(std::string& buf) const {
+  std::copy(std::begin(config_path_), std::end(config_path_),
+            std::back_inserter(buf));
+  buf.push_back('\0');
+}
+
+void WmediumdMessageStartPcap::SerializeBody(std::string& buf) const {
+  std::copy(std::begin(pcap_path_), std::end(pcap_path_),
+            std::back_inserter(buf));
+  buf.push_back('\0');
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/wmediumd_controller/wmediumd_api_protocol.h b/host/libs/wmediumd_controller/wmediumd_api_protocol.h
new file mode 100644
index 0000000..b6fb90f
--- /dev/null
+++ b/host/libs/wmediumd_controller/wmediumd_api_protocol.h
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <cstdint>
+#include <memory>
+#include <string>
+
+#include "common/libs/fs/shared_fd.h"
+
+namespace cuttlefish {
+
+enum class WmediumdMessageType : uint32_t {
+  kInvalid = 0,
+  kAck = 1,
+  kRegister = 2,
+  kUnregister = 3,
+  kNetlink = 4,
+  kSetControl = 5,
+  kTxStart = 6,
+  kGetNodes = 7,
+  kSetSnr = 8,
+  kReloadConfig = 9,
+  kReloadCurrentConfig = 10,
+  kStartPcap = 11,
+  kStopPcap = 12,
+};
+
+class WmediumdMessage {
+ public:
+  virtual ~WmediumdMessage() {}
+
+  std::string Serialize(void) const;
+
+  virtual WmediumdMessageType Type() const = 0;
+
+ private:
+  virtual void SerializeBody(std::string&) const {};
+};
+
+class WmediumdMessageSetControl : public WmediumdMessage {
+ public:
+  WmediumdMessageSetControl(uint32_t flags) : flags_(flags) {}
+
+  WmediumdMessageType Type() const override {
+    return WmediumdMessageType::kSetControl;
+  }
+
+ private:
+  void SerializeBody(std::string& out) const override;
+  uint32_t flags_;
+};
+
+class WmediumdMessageSetSnr : public WmediumdMessage {
+ public:
+  WmediumdMessageSetSnr(const std::string& node1, const std::string& node2,
+                        uint8_t snr);
+
+  WmediumdMessageType Type() const override {
+    return WmediumdMessageType::kSetSnr;
+  }
+
+ private:
+  void SerializeBody(std::string& out) const override;
+
+  uint8_t node1_mac_[6];
+  uint8_t node2_mac_[6];
+  uint8_t snr_;
+};
+
+class WmediumdMessageReloadConfig : public WmediumdMessage {
+ public:
+  WmediumdMessageReloadConfig(const std::string& configPath)
+      : config_path_(configPath) {}
+
+  WmediumdMessageType Type() const override {
+    return WmediumdMessageType::kReloadConfig;
+  }
+
+ private:
+  void SerializeBody(std::string& out) const override;
+
+  std::string config_path_;
+};
+
+class WmediumdMessageReloadCurrentConfig : public WmediumdMessage {
+ public:
+  WmediumdMessageReloadCurrentConfig() = default;
+
+  WmediumdMessageType Type() const override {
+    return WmediumdMessageType::kReloadCurrentConfig;
+  }
+};
+
+class WmediumdMessageStartPcap : public WmediumdMessage {
+ public:
+  WmediumdMessageStartPcap(const std::string& pcapPath)
+      : pcap_path_(pcapPath) {}
+
+  WmediumdMessageType Type() const override {
+    return WmediumdMessageType::kStartPcap;
+  }
+
+ private:
+  void SerializeBody(std::string& out) const override;
+
+  std::string pcap_path_;
+};
+
+class WmediumdMessageStopPcap : public WmediumdMessage {
+ public:
+  WmediumdMessageStopPcap() = default;
+
+  WmediumdMessageType Type() const override {
+    return WmediumdMessageType::kStopPcap;
+  }
+};
+
+}  // namespace cuttlefish
diff --git a/host/libs/wmediumd_controller/wmediumd_controller.cpp b/host/libs/wmediumd_controller/wmediumd_controller.cpp
new file mode 100644
index 0000000..481aa6f
--- /dev/null
+++ b/host/libs/wmediumd_controller/wmediumd_controller.cpp
@@ -0,0 +1,104 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#include "wmediumd_controller.h"
+
+#include <android-base/logging.h>
+#include <sys/socket.h>
+
+#include <cstdint>
+#include <memory>
+#include <string>
+
+#include "common/libs/fs/shared_buf.h"
+
+#include "host/libs/wmediumd_controller/wmediumd_api_protocol.h"
+
+namespace cuttlefish {
+
+std::unique_ptr<WmediumdController> WmediumdController::New(
+    const std::string& serverSocketPath) {
+  std::unique_ptr<WmediumdController> result(new WmediumdController);
+
+  if (!result->Connect(serverSocketPath)) {
+    return nullptr;
+  }
+
+  return result;
+}
+
+bool WmediumdController::Connect(const std::string& serverSocketPath) {
+  wmediumd_socket_ =
+      SharedFD::SocketLocalClient(serverSocketPath, false, SOCK_STREAM);
+
+  if (!wmediumd_socket_->IsOpen()) {
+    LOG(ERROR) << "Cannot connect wmediumd control socket " << serverSocketPath
+               << ": " << wmediumd_socket_->StrError();
+    return false;
+  }
+
+  return SetControl(0);
+}
+
+bool WmediumdController::SetSnr(const std::string& node1,
+                                const std::string& node2, uint8_t snr) {
+  return SendMessage(WmediumdMessageSetSnr(node1, node2, snr));
+}
+
+bool WmediumdController::SetControl(const uint32_t flags) {
+  return SendMessage(WmediumdMessageSetControl(flags));
+}
+
+bool WmediumdController::ReloadCurrentConfig(void) {
+  return SendMessage(WmediumdMessageReloadCurrentConfig());
+}
+
+bool WmediumdController::ReloadConfig(const std::string& configPath) {
+  return SendMessage(WmediumdMessageReloadConfig(configPath));
+}
+
+bool WmediumdController::StartPcap(const std::string& pcapPath) {
+  return SendMessage(WmediumdMessageStartPcap(pcapPath));
+}
+
+bool WmediumdController::StopPcap(void) {
+  return SendMessage(WmediumdMessageStopPcap());
+}
+
+bool WmediumdController::SendMessage(const WmediumdMessage& message) {
+  auto sendResult = SendAll(wmediumd_socket_, message.Serialize());
+
+  if (!sendResult) {
+    LOG(ERROR) << "sendmessage failed: " << wmediumd_socket_->StrError();
+    return false;
+  }
+
+  std::string recvBuf = RecvAll(wmediumd_socket_, sizeof(uint32_t) * 2);
+
+  if (recvBuf.size() != sizeof(uint32_t) * 2) {
+    LOG(ERROR) << "error: RecvAll failed while receiving result from server";
+    return false;
+  }
+
+  uint32_t type = *reinterpret_cast<const uint32_t*>(recvBuf.c_str());
+
+  if (static_cast<WmediumdMessageType>(type) != WmediumdMessageType::kAck) {
+    return false;
+  }
+
+  return true;
+}
+
+}  // namespace cuttlefish
diff --git a/host/libs/wmediumd_controller/wmediumd_controller.h b/host/libs/wmediumd_controller/wmediumd_controller.h
new file mode 100644
index 0000000..acd6363
--- /dev/null
+++ b/host/libs/wmediumd_controller/wmediumd_controller.h
@@ -0,0 +1,56 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+#pragma once
+
+#include <cstdint>
+#include <memory>
+#include <string>
+
+#include "common/libs/fs/shared_fd.h"
+#include "host/libs/wmediumd_controller/wmediumd_api_protocol.h"
+
+namespace cuttlefish {
+
+class WmediumdController {
+ public:
+  static std::unique_ptr<WmediumdController> New(
+      const std::string& serverSocketPath);
+
+  virtual ~WmediumdController() {}
+
+  WmediumdController(const WmediumdController& rhs) = delete;
+  WmediumdController& operator=(const WmediumdController& rhs) = delete;
+
+  WmediumdController(WmediumdController&& rhs) = delete;
+  WmediumdController& operator=(WmediumdController&& rhs) = delete;
+
+  bool SetControl(const uint32_t flags);
+  bool SetSnr(const std::string& node1, const std::string& node2, uint8_t snr);
+  bool ReloadCurrentConfig(void);
+  bool ReloadConfig(const std::string& configPath);
+  bool StartPcap(const std::string& pcapPath);
+  bool StopPcap(void);
+
+ private:
+  WmediumdController() {}
+
+  bool Connect(const std::string& serverSocketPath);
+  bool SendMessage(const WmediumdMessage& message);
+
+  SharedFD wmediumd_socket_;
+};
+
+}  // namespace cuttlefish
diff --git a/host_package.mk b/host_package.mk
index bd6b51f..e1afedf 100644
--- a/host_package.mk
+++ b/host_package.mk
@@ -1,6 +1,6 @@
-cvd_host_packages := $(SOONG_HOST_OUT)/cvd-host_package.tar.gz
+cvd_host_packages := $(HOST_OUT)/cvd-host_package.tar.gz
 ifeq ($(HOST_CROSS_OS)_$(HOST_CROSS_ARCH),linux_bionic_arm64)
-  cvd_host_packages += $(SOONG_OUT_DIR)/host/$(HOST_CROSS_OS)-$(HOST_CROSS_ARCH)/cvd-host_package.tar.gz
+  cvd_host_packages += $(OUT_DIR)/host/$(HOST_CROSS_OS)-$(HOST_CROSS_ARCH)/cvd-host_package.tar.gz
 endif
 
 .PHONY: hosttar
diff --git a/multiarch-howto.md b/multiarch-howto.md
new file mode 100644
index 0000000..fe24a66
--- /dev/null
+++ b/multiarch-howto.md
@@ -0,0 +1,57 @@
+# Adjusting APT Sources for Multiarch
+
+The Cuttlefish host Debian packages can also be built and used on an `arm64`
+based system. However, because certain parts of it are still `amd64`, the
+APT sources of the system need to be adjusted for multiarch so that package
+dependencies can be correctly looked up and installed.
+
+For detailed context, see [Multiarch HOWTO](https://wiki.debian.org/Multiarch/HOWTO), and this document will use Ubuntu 21.04 (Hirsute) as an example for
+making such adjustments.
+
+The basic idea is to first limit the existing APT sources to `arm64` only,
+so that when a new architecture like `amd64` is added, APT won't try to
+fetch packages for the new architecture from the existing repository, as
+`arm64` packages are in "ports", while `amd64` ones are in the main
+repository. So a line in `/etc/apt/sources.list` such as:
+
+```
+deb http://ports.ubuntu.com/ubuntu-ports hirsute main restricted
+```
+
+would be changed to:
+
+```
+deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports hirsute main restricted
+```
+
+Next, each line of config like the above will be duplicated and modified into
+an entry that corresponds to what's in the main repository, with its
+architecture limited to `amd64`. For example, for the same line as shown above,
+a new entry will be added like this:
+
+```
+deb [arch=amd64] http://archive.ubuntu.com/ubuntu hirsute main restricted
+```
+
+The script below might be handy for this task:
+```bash
+#!/bin/bash
+cp /etc/apt/sources.list ~/sources.list.bak
+(
+  (grep ^deb /etc/apt/sources.list | sed 's/deb /deb [arch=arm64] /') && \
+  (grep ^deb /etc/apt/sources.list | sed 's/deb /deb [arch=amd64] /g; s/ports\.ubuntu/archive.ubuntu/g; s/ubuntu-ports/ubuntu/g') \
+) | tee /tmp/sources.list
+mv /tmp/sources.list /etc/apt/sources.list
+```
+**Note:** please run the above script as `root`, and adjust for differences in
+Ubuntu releases or location prefixed repositories for faster download (e.g.
+`us.archive.ubuntu.com` instead of `archive.ubuntu.com`).
+
+Finally, add the new architecture and do an APT update with:
+```bash
+sudo dpkg --add-architecture amd64
+sudo apt update
+```
+Make sure there's no errors or warnings in the output of `apt update`. To
+restore the previous APT sources list, use the backup file `sources.list.bak`
+saved by the script in your home directory.
diff --git a/required_images b/required_images
index 6f5c180..e6f0616 100644
--- a/required_images
+++ b/required_images
@@ -1,4 +1,5 @@
 boot.img
+init_boot.img
 bootloader
 super.img
 userdata.img
diff --git a/shared/BoardConfig.mk b/shared/BoardConfig.mk
index 2963874..bfaeefe 100644
--- a/shared/BoardConfig.mk
+++ b/shared/BoardConfig.mk
@@ -27,7 +27,7 @@
 
 BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)
 
-# Boot partition size: 32M
+# Boot partition size: 64M
 # This is only used for OTA update packages. The image size on disk
 # will not change (as is it not a filesystem.)
 BOARD_BOOTIMAGE_PARTITION_SIZE := 67108864
@@ -36,6 +36,8 @@
 endif
 BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE := 67108864
 
+BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE := 8388608
+
 # Build a separate vendor.img partition
 BOARD_USES_VENDORIMAGE := true
 BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)
@@ -58,30 +60,38 @@
 
 # Build a separate vendor_dlkm partition
 BOARD_USES_VENDOR_DLKMIMAGE := true
-BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
+BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)
 TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
 
 # Build a separate odm_dlkm partition
 BOARD_USES_ODM_DLKMIMAGE := true
-BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
+BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)
 TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
 
-# FIXME: Remove this once we generate the vbmeta digest correctly
-BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --flag 2
+# Enable AVB
+BOARD_AVB_ENABLE := true
+BOARD_AVB_ALGORITHM := SHA256_RSA4096
+BOARD_AVB_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
 
 # Enable chained vbmeta for system image mixing
 BOARD_AVB_VBMETA_SYSTEM := product system system_ext
-BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
-BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA2048
+BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
+BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA4096
 BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
 BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 1
 
 # Enable chained vbmeta for boot images
-BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
-BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA2048
+BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
+BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA4096
 BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
 BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2
 
+# Enable chained vbmeta for init_boot images
+BOARD_AVB_INIT_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
+BOARD_AVB_INIT_BOOT_ALGORITHM := SHA256_RSA4096
+BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
+BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 3
+
 # Using sha256 for dm-verity partitions. b/178983355
 # system, system_other, product.
 TARGET_AVB_SYSTEM_HASHTREE_ALGORITHM ?= sha256
@@ -144,7 +154,13 @@
 USE_OPENGL_RENDERER := true
 
 # Wifi.
+ifeq ($(PRODUCT_ENFORCE_MAC80211_HWSIM),true)
+BOARD_WLAN_DEVICE           := emulator
+BOARD_HOSTAPD_PRIVATE_LIB   := lib_driver_cmd_simulated_cf
+WIFI_HIDL_FEATURE_DUAL_INTERFACE := true
+else
 BOARD_WLAN_DEVICE           := wlan0
+endif
 BOARD_HOSTAPD_DRIVER        := NL80211
 BOARD_WPA_SUPPLICANT_DRIVER := NL80211
 BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_simulated_cf
@@ -212,9 +228,6 @@
 BOARD_KERNEL_CMDLINE += init=/init
 BOARD_BOOTCONFIG += androidboot.hardware=cutf_cvm
 
-# TODO(b/179489292): Remove once kfence is enabled everywhere
-BOARD_KERNEL_CMDLINE += kfence.sample_interval=500
-
 BOARD_KERNEL_CMDLINE += loop.max_part=7
 
 # TODO(b/182417593): Move all of these module options to modules.options
@@ -224,17 +237,16 @@
 BOARD_BOOTCONFIG += \
     kernel.vmw_vsock_virtio_transport_common.virtio_transport_max_vsock_pkt_buf_size=16384
 
-ifeq ($(TARGET_USERDATAIMAGE_FILE_SYSTEM_TYPE),f2fs)
-BOARD_BOOTCONFIG += androidboot.fstab_suffix=f2fs
-endif
-
-ifeq ($(TARGET_USERDATAIMAGE_FILE_SYSTEM_TYPE),ext4)
-BOARD_BOOTCONFIG += androidboot.fstab_suffix=ext4
-endif
+BOARD_BOOTCONFIG += \
+    androidboot.vendor.apex.com.android.wifi.hal=com.google.cf.wifi
 
 BOARD_INCLUDE_DTB_IN_BOOTIMG := true
+ifndef BOARD_BOOT_HEADER_VERSION
 BOARD_BOOT_HEADER_VERSION := 4
+endif
 BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION)
+BOARD_INIT_BOOT_HEADER_VERSION := 4
+BOARD_MKBOOTIMG_INIT_ARGS += --header_version $(BOARD_INIT_BOOT_HEADER_VERSION)
 PRODUCT_COPY_FILES += \
     device/google/cuttlefish/dtb.img:dtb.img \
     device/google/cuttlefish/required_images:required_images \
@@ -253,16 +265,6 @@
 endif
 BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
 
-# TARGET_KERNEL_USE is defined in kernel.mk, if not defined in the environment variable.
-# Keep in sync with GKI APEX in device.mk
-ifneq (,$(TARGET_KERNEL_USE))
-  ifneq (,$(filter 5.4, $(TARGET_KERNEL_USE)))
-    BOARD_KERNEL_MODULE_INTERFACE_VERSIONS := 5.4-android12-0
-  else
-    BOARD_KERNEL_MODULE_INTERFACE_VERSIONS := $(TARGET_KERNEL_USE)-android12-unstable
-  endif
-endif
-
 BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD := dm-user.ko
 
 BOARD_HAVE_BLUETOOTH := true
diff --git a/shared/auto/device.mk b/shared/auto/device.mk
index 3e6604e..383e270 100644
--- a/shared/auto/device.mk
+++ b/shared/auto/device.mk
@@ -84,7 +84,7 @@
     canhalsend
 
 # Cuttlefish RIL support
-TARGET_USES_CF_RILD ?= false
+TARGET_USES_CF_RILD ?= true
 ifeq ($(TARGET_USES_CF_RILD),true)
     PRODUCT_PACKAGES += \
         libcuttlefish-ril-2 \
diff --git a/shared/auto/overlay/frameworks/base/core/res/res/values/config.xml b/shared/auto/overlay/frameworks/base/core/res/res/values/config.xml
index e42a10f..4875dca 100644
--- a/shared/auto/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/shared/auto/overlay/frameworks/base/core/res/res/values/config.xml
@@ -22,20 +22,20 @@
   See also packages/services/Car/service/res/values/config.xml
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <!-- Enable multi-user. -->
-  <bool name="config_enableMultiUserUI" translatable="false">true</bool>
-  <!-- If true, all guest users created on the device will be ephemeral. -->
-  <bool name="config_guestUserEphemeral" translatable="false">true</bool>
-  <!--  Maximum number of users allowed on the device. -->
-  <integer name="config_multiuserMaximumUsers" translatable="false">4</integer>
-  <!-- Restricting eth1 -->
-  <string-array translatable="false" name="config_ethernet_interfaces">
-    <item>eth1;11,12,14;;</item>
-  </string-array>
-  <!-- Car uses hardware amplifier for volume. -->
-  <bool name="config_useFixedVolume">true</bool>
-      <!--
-          Handle volume keys directly in CarAudioService without passing them to the foreground app
-      -->
-  <bool name="config_handleVolumeKeysInWindowManager">true</bool>
+    <!-- Enable multi-user. -->
+    <bool name="config_enableMultiUserUI" translatable="false">true</bool>
+    <!-- If true, all guest users created on the device will be ephemeral. -->
+    <bool name="config_guestUserEphemeral" translatable="false">true</bool>
+    <!--  Maximum number of users allowed on the device. -->
+    <integer name="config_multiuserMaximumUsers" translatable="false">4</integer>
+    <!-- Restricting eth1 -->
+    <string-array translatable="false" name="config_ethernet_interfaces">
+        <item>eth1;11,12,14;;</item>
+    </string-array>
+    <!-- Car uses hardware amplifier for volume. -->
+    <bool name="config_useFixedVolume">true</bool>
+    <!--
+      Handle volume keys directly in CarAudioService without passing them to the foreground app
+    -->
+    <bool name="config_handleVolumeKeysInWindowManager">true</bool>
 </resources>
diff --git a/shared/auto/overlay/packages/services/Car/service/res/values/config.xml b/shared/auto/overlay/packages/services/Car/service/res/values/config.xml
index 6cfd2cc..ea4cb27 100644
--- a/shared/auto/overlay/packages/services/Car/service/res/values/config.xml
+++ b/shared/auto/overlay/packages/services/Car/service/res/values/config.xml
@@ -23,16 +23,6 @@
 -->
 <resources>
     <bool name="audioUseDynamicRouting">true</bool>
-    <!--  Configuration to enable muting of individual volume groups. If this is set to
-          false, muting of individual volume groups is disabled, instead muting will toggle master
-          mute. If this is set to true, car volume group muting is enabled and each individual
-          volume group can be muted separately. -->
-    <bool name="audioUseCarVolumeGroupMuting">false</bool>
-    <!--  Configuration to enable IAudioControl#onDevicesToDuckChange API to inform HAL when to
-      duck. If this is set to true, the API will receive signals indicating which output devices
-      to duck as well as what usages are currently holding focus. If set to false, the API will
-      not be called. -->
-    <bool name="audioUseHalDuckingSignals">false</bool>
 
     <!--
     Lists all occupant (= driver + passenger) zones available in the car.
diff --git a/shared/config/Android.bp b/shared/config/Android.bp
index 03bbc08..c1ea54b 100644
--- a/shared/config/Android.bp
+++ b/shared/config/Android.bp
@@ -31,3 +31,22 @@
     src: "config_tv.json",
     sub_dir: "cvd_config",
 }
+
+prebuilt_etc_host {
+    name: "grub.cfg",
+    src: "grub.cfg",
+    sub_dir: "grub",
+}
+
+prebuilt_etc {
+    name: "wpa_supplicant_overlay.conf.cf",
+    src: "wpa_supplicant_overlay.conf",
+    filename_from_src: true,
+    relative_install_path: "wifi",
+    installable: false,
+}
+
+filegroup {
+    name: "[email protected]",
+    srcs: ["[email protected]"]
+}
diff --git a/shared/config/config_auto.json b/shared/config/config_auto.json
index b8f2bfe..67dd3bc 100644
--- a/shared/config/config_auto.json
+++ b/shared/config/config_auto.json
@@ -1,6 +1,5 @@
 {
-	"x_res" : 1280,
-	"y_res" : 800,
-	"dpi" : 160,
+	"display0": "width=1080,height=600,dpi=120",
+	"display1": "width=400,height=600,dpi=120",
 	"memory_mb" : 4096
 }
diff --git a/shared/config/fstab-erofs.ext4 b/shared/config/fstab-erofs.ext4
index ec7b3fe..7722fbe 100644
--- a/shared/config/fstab-erofs.ext4
+++ b/shared/config/fstab-erofs.ext4
@@ -1,6 +1,7 @@
-/dev/block/by-name/boot /boot emmc defaults recoveryonly,slotselect
+/dev/block/by-name/boot /boot emmc defaults recoveryonly,slotselect,first_stage_mount,avb=boot
+/dev/block/by-name/init_boot /init_boot emmc defaults recoveryonly,slotselect,first_stage_mount,avb=init_boot
 /dev/block/by-name/vendor_boot /vendor_boot emmc defaults recoveryonly,slotselect
-system /system erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta_system
+system /system erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta_system,avb_keys=/avb
 # Add all non-dynamic partitions except system, after this comment
 /dev/block/by-name/userdata /data ext4 nodev,noatime,nosuid,errors=panic latemount,wait,check,quota,formattable,fileencryption=aes-256-xts:aes-256-cts,keydirectory=/metadata/vold/metadata_encryption,checkpoint=block
 /dev/block/by-name/metadata /metadata ext4 nodev,noatime,nosuid,errors=panic wait,formattable,first_stage_mount,check
@@ -10,8 +11,8 @@
 product /product erofs ro wait,logical,first_stage_mount,slotselect,avb
 system_ext /system_ext erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta_system
 vendor /vendor erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta
-vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
-odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
+vendor_dlkm /vendor_dlkm erofs noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
+odm_dlkm /odm_dlkm erofs noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
 /dev/block/zram0 none swap defaults zramsize=75%
 /dev/block/vdc1 /sdcard vfat defaults recoveryonly
 /devices/*/block/vdc auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
diff --git a/shared/config/fstab-erofs.f2fs b/shared/config/fstab-erofs.f2fs
index 1b5486e..0b28b93 100644
--- a/shared/config/fstab-erofs.f2fs
+++ b/shared/config/fstab-erofs.f2fs
@@ -1,6 +1,7 @@
-/dev/block/by-name/boot /boot emmc defaults recoveryonly,slotselect
+/dev/block/by-name/boot /boot emmc defaults recoveryonly,slotselect,first_stage_mount,avb=boot
+/dev/block/by-name/init_boot /init_boot emmc defaults recoveryonly,slotselect,first_stage_mount,avb=init_boot
 /dev/block/by-name/vendor_boot /vendor_boot emmc defaults recoveryonly,slotselect
-system /system erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta_system
+system /system erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta_system,avb_keys=/avb
 # Add all non-dynamic partitions except system, after this comment
 /dev/block/by-name/userdata /data f2fs nodev,noatime,nosuid,inlinecrypt,reserve_root=32768 latemount,wait,check,quota,formattable,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,fscompress,keydirectory=/metadata/vold/metadata_encryption,checkpoint=fs
 /dev/block/by-name/metadata /metadata ext4 nodev,noatime,nosuid,errors=panic wait,formattable,first_stage_mount,check
@@ -10,8 +11,8 @@
 product /product erofs ro wait,logical,first_stage_mount,slotselect,avb
 system_ext /system_ext erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta_system
 vendor /vendor erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta
-vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
-odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
+vendor_dlkm /vendor_dlkm erofs noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
+odm_dlkm /odm_dlkm erofs noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
 /dev/block/zram0 none swap defaults zramsize=75%
 /dev/block/vdc1 /sdcard vfat defaults recoveryonly
 /devices/*/block/vdc auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
diff --git a/shared/config/fstab.ext4 b/shared/config/fstab.ext4
index 1677941..7567d14 100644
--- a/shared/config/fstab.ext4
+++ b/shared/config/fstab.ext4
@@ -1,6 +1,7 @@
-/dev/block/by-name/boot /boot emmc defaults recoveryonly,slotselect
+/dev/block/by-name/boot /boot emmc defaults recoveryonly,slotselect,first_stage_mount,avb=boot
+/dev/block/by-name/init_boot /init_boot emmc defaults recoveryonly,slotselect,first_stage_mount,avb=init_boot
 /dev/block/by-name/vendor_boot /vendor_boot emmc defaults recoveryonly,slotselect
-system /system ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb=vbmeta_system
+system /system ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb=vbmeta_system,avb_keys=/avb
 # Add all non-dynamic partitions except system, after this comment
 /dev/block/by-name/userdata /data ext4 nodev,noatime,nosuid,errors=panic latemount,wait,check,quota,formattable,fileencryption=aes-256-xts:aes-256-cts,keydirectory=/metadata/vold/metadata_encryption,checkpoint=block
 /dev/block/by-name/metadata /metadata ext4 nodev,noatime,nosuid,errors=panic wait,formattable,first_stage_mount,check
diff --git a/shared/config/fstab.f2fs b/shared/config/fstab.f2fs
index 597e3f0..008ca00 100644
--- a/shared/config/fstab.f2fs
+++ b/shared/config/fstab.f2fs
@@ -1,6 +1,7 @@
-/dev/block/by-name/boot /boot emmc defaults recoveryonly,slotselect
+/dev/block/by-name/boot /boot emmc defaults recoveryonly,slotselect,first_stage_mount,avb=boot
+/dev/block/by-name/init_boot /init_boot emmc defaults recoveryonly,slotselect,first_stage_mount,avb=init_boot
 /dev/block/by-name/vendor_boot /vendor_boot emmc defaults recoveryonly,slotselect
-system /system ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb=vbmeta_system
+system /system ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb=vbmeta_system,avb_keys=/avb
 # Add all non-dynamic partitions except system, after this comment
 /dev/block/by-name/userdata /data f2fs nodev,noatime,nosuid,inlinecrypt,reserve_root=32768 latemount,wait,check,quota,formattable,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,fscompress,keydirectory=/metadata/vold/metadata_encryption,checkpoint=fs
 /dev/block/by-name/metadata /metadata ext4 nodev,noatime,nosuid,errors=panic wait,formattable,first_stage_mount,check
diff --git a/shared/config/grub.cfg b/shared/config/grub.cfg
new file mode 100644
index 0000000..d15eb8e
--- /dev/null
+++ b/shared/config/grub.cfg
@@ -0,0 +1,43 @@
+# Root grub.cfg used either to boot raw kernel and/or initramfs.img, or to
+# chain to an installed distro's GRUB configuration file
+
+# These options are accessible to chain-loaded configurations as well:
+#
+# pnpacpi=off      Disable on QEMU; allows serdev to claim platform serial
+# acpi=noirq       Do not configure IRQ routing using ACPI tables
+# reboot=k         Reboot using keyboard method, rather than ACPI
+# noexec=off       Some kernels panic when setting up NX
+# noefi            Some kernels panic when trying to use U-Boot EFI
+# panic=-1         Don't reboot on panic
+# console=hvc0     Switch kernel logging to virtio-console once available
+# console=ttyAMA0  QEMU on ARM64 uses alternative serial implementation
+#
+if [ "$grub_cpu" = "i386" ]; then
+  set cmdline="pnpacpi=off acpi=noirq reboot=k noexec=off console=ttyS0 noefi panic=-1 console=hvc0"
+elif [ "$grub_cpu" = "arm64" ]; then
+  set cmdline="console=ttyS0 console=ttyAMA0 noefi panic=-1 console=hvc0"
+else
+  echo "Warning: No architecture found for ${grub_cpu}"
+fi
+
+# Root filesystem is on a GUID partition with label "otheros_root"
+set rootfs="/dev/vda14"
+
+# Root filesystem with grub installed
+search --file --set root /boot/grub/grub.cfg --hint (hd0)
+if [ $? = 0 ]; then
+  set prefix=($root)/boot/grub
+  export cmdline
+  export rootfs
+  configfile $prefix/grub.cfg
+  normal_exit
+fi
+
+# Fall back if we couldn't chain to another GRUB install
+set timeout=0
+menuentry "Linux" {
+  linux /vmlinuz $cmdline root=$rootfs
+  if [ -e /initrd.img ]; then
+    initrd /initrd.img
+  fi
+}
diff --git a/shared/config/init.insmod.sh b/shared/config/init.insmod.sh
deleted file mode 100755
index ccbf716..0000000
--- a/shared/config/init.insmod.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/vendor/bin/sh
-
-# Copyright (C) 2019 The Android Open Source Project
-#
-# 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.
-#
-
-KERNEL_VERSION_NUMBER=`uname -r`
-MAINLINE_STR='mainline'
-if [[ $KERNEL_VERSION_NUMBER == *$MAINLINE_STR* ]]; then
-    IS_MAINLINE=1
-else
-    IS_MAINLINE=0
-fi
-
-KERNEL_VERSION_NUMBER=`echo $KERNEL_VERSION_NUMBER | grep -o -E '^[0-9]+\.[0-9]+'`
-# This folder on cuttlefish contains modules for multiple kernel versions.
-# Hence the need to filter them instead of relying on module.order
-VENDOR_MODULES='/vendor/lib/modules/*.ko'
-
-for f in $VENDOR_MODULES
-do
-    MOD_VERSION=`modinfo $f`
-    MOD_VERSION=`echo $MOD_VERSION | grep -o -E 'vermagic: [0-9a-zA-Z\.-]+'`
-    MOD_VERSION_NUMBER=`echo $MOD_VERSION | grep -o -E '[0-9]+\.[0-9]+'`
-    if [[ $MOD_VERSION == *$MAINLINE_STR* ]]; then
-        IS_MOD_MAINLINE=1
-    else
-        IS_MOD_MAINLINE=0
-    fi
-
-    # TODO (137683279) When we have a few more kernel modules, we'll have to do the module
-    # insertion of least dependencies.
-    if [ $IS_MOD_MAINLINE -eq $IS_MAINLINE ] && [ $MOD_VERSION_NUMBER == $KERNEL_VERSION_NUMBER ]
-    then
-        `insmod $f`
-        echo "Insmod " $f
-    fi
-done
diff --git a/shared/config/init.vendor.rc b/shared/config/init.vendor.rc
index 94ef593..4876ead 100644
--- a/shared/config/init.vendor.rc
+++ b/shared/config/init.vendor.rc
@@ -11,9 +11,10 @@
     setprop ro.hardware.vulkan ${ro.boot.hardware.vulkan}
     setprop ro.cpuvulkan.version ${ro.boot.cpuvulkan.version}
     setprop ro.hw_timeout_multiplier ${ro.boot.hw_timeout_multiplier}
+    setprop ro.opengles.version ${ro.boot.opengles.version}
 
     # start module load in the background
-    start vendor.insmod_sh
+    start vendor.dlkm_loader
 
 on init
     # ZRAM setup
@@ -47,10 +48,6 @@
     mount_all --early
     restorecon_recursive /vendor
 
-    start setup_wifi
-    # works around framework netiface enumeration issue
-    start rename_eth0
-
     # So GceBootReporter can print to kmsg
     chmod 622 /dev/kmsg
 
@@ -58,21 +55,29 @@
     # set RLIMIT_MEMLOCK to 64MB
     setrlimit 8 67108864 67108864
 
-    start bt_vhci_forwarder
+on post-fs-data
+    # works around framework netiface enumeration issue
+    # TODO(b/202731768): Add this `start rename_eth0` command to the init.rc for rename_netiface
+    start rename_eth0
+
+on post-fs-data && property:ro.vendor.wifi_impl=virt_wifi
+    # TODO(b/202731768): Add this `start setup_wifi` command to the init.rc for setup_wifi
+    start setup_wifi
 
 on post-fs-data
     mkdir /data/vendor/modem_dump 0777 system system
     mkdir /data/vendor/radio 0777 system system
 
 on late-fs
-    # Wait for keymaster
-    exec_start wait_for_keymaster
-
     # Mount RW partitions which need run fsck
     mount_all --late
 
     write /dev/kmsg "GUEST_BUILD_FINGERPRINT: ${ro.build.fingerprint}"
 
+on post-fs-data && property:ro.vendor.wifi_impl=mac8011_hwsim_virtio
+    setprop vold.post_fs_data_done 1
+    start wifi-net-sh
+
 on boot
     chmod 0660 /dev/cpuctl
     mkdir /data/vendor/wifi 0770 wifi wifi
@@ -80,16 +85,14 @@
     mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi
     start socket_vsock_proxy
     setprop ro.hardware.audio.primary goldfish
+    symlink /dev/hvc6 /dev/gnss0
 
-service bt_vhci_forwarder /vendor/bin/bt_vhci_forwarder -virtio_console_dev=${vendor.ser.bt-uart}
-    user bluetooth
-    group bluetooth
-
-service setup_wifi /vendor/bin/setup_wifi
+service wifi-net-sh /vendor/bin/init.wifi.sh
+    class late_start
+    user root
+    group root wakelock wifi
     oneshot
-
-service rename_eth0 /vendor/bin/rename_netiface eth0 rmnet0
-    oneshot
+    disabled    # Started on post-fs-data
 
 on property:sys.boot_completed=1
     trigger sys-boot-completed-set
@@ -101,7 +104,7 @@
 on sys-boot-completed-set && property:persist.sys.zram_enabled=1
     swapon_all
 
-service vendor.insmod_sh /vendor/bin/init.insmod.sh
+service vendor.dlkm_loader /vendor/bin/dlkm_loader
     class main
     user root
     group root system
@@ -127,17 +130,6 @@
    enable vsoc_input_service
    start vsoc_input_service
 
-service wpa_supplicant /vendor/bin/hw/wpa_supplicant -g@android:wpa_wlan0
-    interface [email protected]::ISupplicant default
-    interface [email protected]::ISupplicant default
-    interface [email protected]::ISupplicant default
-    interface [email protected]::ISupplicant default
-    interface [email protected]::ISupplicant default
-    socket wpa_wlan0 dgram 660 wifi wifi
-    group system wifi inet
-    disabled
-    oneshot
-
 service bugreport /system/bin/dumpstate -d -p -z
     class main
     disabled
diff --git a/shared/config/input/Android.bp b/shared/config/input/Android.bp
new file mode 100644
index 0000000..3c85557
--- /dev/null
+++ b/shared/config/input/Android.bp
@@ -0,0 +1,47 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// 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.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+prebuilt_defaults {
+    name: "crosvm_idc_defaults",
+    relative_install_path: "usr/idc",
+    soc_specific: true,
+}
+
+prebuilt_etc {
+    name: "Crosvm_Virtio_Multitouch_Touchscreen_0.idc",
+    src: "Crosvm_Virtio_Multitouch_Touchscreen_0.idc",
+    defaults: ["crosvm_idc_defaults"],
+}
+
+prebuilt_etc {
+    name: "Crosvm_Virtio_Multitouch_Touchscreen_1.idc",
+    src: "Crosvm_Virtio_Multitouch_Touchscreen_1.idc",
+    defaults: ["crosvm_idc_defaults"],
+}
+
+prebuilt_etc {
+    name: "Crosvm_Virtio_Multitouch_Touchscreen_2.idc",
+    src: "Crosvm_Virtio_Multitouch_Touchscreen_2.idc",
+    defaults: ["crosvm_idc_defaults"],
+}
+
+prebuilt_etc {
+    name: "Crosvm_Virtio_Multitouch_Touchscreen_3.idc",
+    src: "Crosvm_Virtio_Multitouch_Touchscreen_3.idc",
+    defaults: ["crosvm_idc_defaults"],
+}
diff --git a/shared/config/manifest.xml b/shared/config/manifest.xml
index 5917647..ab529eb 100644
--- a/shared/config/manifest.xml
+++ b/shared/config/manifest.xml
@@ -16,7 +16,7 @@
 ** limitations under the License.
 */
 -->
-<manifest version="1.0" type="device" target-level="6">
+<manifest version="1.0" type="device" target-level="7">
     <hal format="hidl">
         <name>android.hardware.audio.effect</name>
         <transport>hwbinder</transport>
diff --git a/shared/config/task_profiles.json b/shared/config/task_profiles.json
index 42366fc..0974952 100644
--- a/shared/config/task_profiles.json
+++ b/shared/config/task_profiles.json
@@ -27,6 +27,19 @@
       ]
     },
     {
+      "Name": "ServicePerformance",
+      "Actions": [
+        {
+          "Name": "JoinCgroup",
+          "Params":
+          {
+            "Controller": "cpu",
+            "Path": "system-background"
+          }
+        }
+      ]
+    },
+    {
       "Name": "HighPerformance",
       "Actions": [
         {
@@ -433,6 +446,10 @@
       "Profiles": [ "MaxPerformance", "MaxIoPriority", "TimerSlackNormal" ]
     },
     {
+      "Name": "SCHED_SP_SYSTEM",
+      "Profiles": [ "ServicePerformance", "LowIoPriority", "TimerSlackNormal" ]
+    },
+    {
       "Name": "SCHED_SP_RT_APP",
       "Profiles": [ "RealtimePerformance", "MaxIoPriority", "TimerSlackNormal" ]
     },
diff --git a/shared/config/ueventd.rc b/shared/config/ueventd.rc
index 8f24201..1e51a82 100644
--- a/shared/config/ueventd.rc
+++ b/shared/config/ueventd.rc
@@ -26,6 +26,8 @@
 /dev/hvc5 0660 bluetooth bluetooth
 /dev/vhci 0660 bluetooth bluetooth
 
+# gnss hal can access hvc6 in addition to gnss0
+/dev/hvc6 0666 system system
 /dev/gnss0 0666 system system
 
 # Factory Reset Protection
diff --git a/shared/config/wpa_supplicant.rc b/shared/config/wpa_supplicant.rc
new file mode 100644
index 0000000..843279a
--- /dev/null
+++ b/shared/config/wpa_supplicant.rc
@@ -0,0 +1,10 @@
+service wpa_supplicant /vendor/bin/hw/wpa_supplicant -g@android:wpa_wlan0
+    interface [email protected]::ISupplicant default
+    interface [email protected]::ISupplicant default
+    interface [email protected]::ISupplicant default
+    interface [email protected]::ISupplicant default
+    interface [email protected]::ISupplicant default
+    socket wpa_wlan0 dgram 660 wifi wifi
+    group system wifi inet
+    disabled
+    oneshot
diff --git a/shared/device.mk b/shared/device.mk
index b7f788b..8bf4d19 100644
--- a/shared/device.mk
+++ b/shared/device.mk
@@ -26,13 +26,27 @@
 # Enforce generic ramdisk allow list
 $(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
 
+# Set Vendor SPL to match platform
+VENDOR_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH)
+
+# Set boot SPL
+BOOT_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH)
+
+PRODUCT_VENDOR_PROPERTIES += \
+    ro.vendor.boot_security_patch=$(BOOT_SECURITY_PATCH)
+
 PRODUCT_SOONG_NAMESPACES += device/generic/goldfish-opengl # for vulkan
 PRODUCT_SOONG_NAMESPACES += device/generic/goldfish # for audio and wifi
 
-PRODUCT_SHIPPING_API_LEVEL := 31
+PRODUCT_SHIPPING_API_LEVEL := 33
 PRODUCT_USE_DYNAMIC_PARTITIONS := true
 DISABLE_RILD_OEM_HOOK := true
 
+# TODO(b/205788876) remove this condition when openwrt has an image for arm.
+ifndef PRODUCT_ENFORCE_MAC80211_HWSIM
+PRODUCT_ENFORCE_MAC80211_HWSIM := true
+endif
+
 PRODUCT_SET_DEBUGFS_RESTRICTIONS := true
 
 PRODUCT_SOONG_NAMESPACES += device/generic/goldfish-opengl # for vulkan
@@ -46,6 +60,9 @@
 TARGET_ENABLE_HOST_BLUETOOTH_EMULATION ?= true
 TARGET_USE_BTLINUX_HAL_IMPL ?= true
 
+# TODO(b/65201432): Swiftshader needs to create executable memory.
+PRODUCT_REQUIRES_INSECURE_EXECMEM_FOR_SWIFTSHADER := true
+
 AB_OTA_UPDATER := true
 AB_OTA_PARTITIONS += \
     boot \
@@ -61,7 +78,9 @@
     vendor_dlkm \
 
 # Enable Virtual A/B
-$(call inherit-product, $(SRC_TARGET_DIR)/product/virtual_ab_ota/compression.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/virtual_ab_ota/compression_with_xor.mk)
+
+PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.userspace.snapshots.enabled=true
 
 # Enable Scoped Storage related
 $(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)
@@ -76,7 +95,6 @@
 
 # Explanation of specific properties:
 #   debug.hwui.swap_with_damage avoids boot failure on M http://b/25152138
-#   ro.opengles.version OpenGLES 3.0
 #   ro.hardware.keystore_desede=true needed for CtsKeystoreTestCases
 PRODUCT_VENDOR_PROPERTIES += \
     tombstoned.max_tombstone_count=500 \
@@ -86,7 +104,6 @@
     ro.com.android.dataroaming?=false \
     ro.hardware.virtual_device=1 \
     ro.logd.size=1M \
-    ro.opengles.version=196608 \
     wifi.interface=wlan0 \
     persist.sys.zram_enabled=1 \
     ro.hardware.keystore_desede=true \
@@ -157,9 +174,6 @@
 PRODUCT_PACKAGES += \
     CuttlefishService \
     cuttlefish_sensor_injection \
-    rename_netiface \
-    setup_wifi \
-    bt_vhci_forwarder \
     socket_vsock_proxy \
     tombstone_transmit \
     tombstone_producer \
@@ -167,13 +181,8 @@
     vsoc_input_service \
     vtpm_manager \
 
-SOONG_CONFIG_NAMESPACES += cvd
-SOONG_CONFIG_cvd += launch_configs
-SOONG_CONFIG_cvd_launch_configs += \
-    cvd_config_auto.json \
-    cvd_config_phone.json \
-    cvd_config_tablet.json \
-    cvd_config_tv.json \
+$(call soong_config_append, cvd, launch_configs, cvd_config_auto.json cvd_config_phone.json cvd_config_tablet.json cvd_config_tv.json)
+$(call soong_config_append, cvd, grub_config, grub.cfg)
 
 #
 # Packages for AOSP-available stuff we use from the framework
@@ -183,7 +192,6 @@
     ip \
     sleep \
     tcpdump \
-    wpa_supplicant \
     wificond \
 
 #
@@ -196,12 +204,6 @@
     libGLESv1_CM_angle \
     libGLESv2_angle
 
-# SwiftShader provides a software-only implementation that is not thread-safe
-PRODUCT_PACKAGES += \
-    libEGL_swiftshader \
-    libGLESv1_CM_swiftshader \
-    libGLESv2_swiftshader
-
 # GL implementation for virgl
 PRODUCT_PACKAGES += \
     libGLES_mesa \
@@ -235,9 +237,18 @@
 #
 PRODUCT_PACKAGES += \
     aidl_lazy_test_server \
-    hidl_lazy_test_server
+    aidl_lazy_cb_test_server \
+    hidl_lazy_test_server \
+    hidl_lazy_cb_test_server
 
-DEVICE_PACKAGE_OVERLAYS := device/google/cuttlefish/shared/overlay
+# Runtime Resource Overlays
+ifneq ($(LOCAL_PREFER_VENDOR_APEX),true)
+PRODUCT_PACKAGES += \
+    cuttlefish_overlay_frameworks_base_core \
+    cuttlefish_overlay_settings_provider \
+
+endif
+
 # PRODUCT_AAPT_CONFIG and PRODUCT_AAPT_PREF_CONFIG are intentionally not set to
 # pick up every density resources.
 
@@ -252,6 +263,7 @@
 
 
 ifneq ($(LOCAL_SENSOR_FILE_OVERRIDES),true)
+ifneq ($(LOCAL_PREFER_VENDOR_APEX),true)
     PRODUCT_COPY_FILES += \
         frameworks/native/data/etc/android.hardware.sensor.ambient_temperature.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.ambient_temperature.xml \
         frameworks/native/data/etc/android.hardware.sensor.barometer.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.barometer.xml \
@@ -261,30 +273,12 @@
         frameworks/native/data/etc/android.hardware.sensor.proximity.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.proximity.xml \
         frameworks/native/data/etc/android.hardware.sensor.relative_humidity.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.relative_humidity.xml
 endif
+endif
 
+ifneq ($(LOCAL_PREFER_VENDOR_APEX),true)
 PRODUCT_COPY_FILES += \
-    hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_back.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_back.json \
-    hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_front.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_front.json \
-    hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_depth.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_depth.json \
-    device/google/cuttlefish/shared/config/init.vendor.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.cutf_cvm.rc \
-    device/google/cuttlefish/shared/config/init.product.rc:$(TARGET_COPY_OUT_PRODUCT)/etc/init/init.rc \
-    device/google/cuttlefish/shared/config/ueventd.rc:$(TARGET_COPY_OUT_VENDOR)/ueventd.rc \
-    device/google/cuttlefish/shared/config/media_codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \
-    device/google/cuttlefish/shared/config/media_codecs_google_video.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_video.xml \
-    device/google/cuttlefish/shared/config/media_codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml \
-    device/google/cuttlefish/shared/config/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml \
     device/google/cuttlefish/shared/permissions/cuttlefish_excluded_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/cuttlefish_excluded_hardware.xml \
-    device/google/cuttlefish/shared/permissions/privapp-permissions-cuttlefish.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/privapp-permissions-cuttlefish.xml \
-    frameworks/av/media/libeffects/data/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
-    frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_audio.xml \
-    frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \
-    frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
-    frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
-    frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
-    frameworks/av/services/audiopolicy/config/surround_sound_configuration_5_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/surround_sound_configuration_5_0.xml \
     frameworks/native/data/etc/android.hardware.audio.low_latency.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.low_latency.xml \
-    frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \
-    frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml \
     frameworks/native/data/etc/android.hardware.camera.concurrent.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.concurrent.xml \
     frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.flash-autofocus.xml \
     frameworks/native/data/etc/android.hardware.camera.front.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.front.xml \
@@ -299,43 +293,75 @@
     frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \
     frameworks/native/data/etc/android.software.ipsec_tunnels.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnels.xml \
     frameworks/native/data/etc/android.software.sip.voip.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.sip.voip.xml \
-    frameworks/native/data/etc/android.software.verified_boot.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.verified_boot.xml \
-    system/bt/vendor_libs/test_vendor_lib/data/controller_properties.json:vendor/etc/bluetooth/controller_properties.json \
+    frameworks/native/data/etc/android.software.verified_boot.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.verified_boot.xml
+endif
+PRODUCT_COPY_FILES += \
+    hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_back.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_back.json \
+    hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_front.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_front.json \
+    hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_depth.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_depth.json \
+    frameworks/native/data/etc/android.hardware.consumerir.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.consumerir.xml \
+    device/google/cuttlefish/shared/config/init.vendor.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.cutf_cvm.rc \
+    device/google/cuttlefish/shared/config/init.product.rc:$(TARGET_COPY_OUT_PRODUCT)/etc/init/init.rc \
+    device/google/cuttlefish/shared/config/ueventd.rc:$(TARGET_COPY_OUT_VENDOR)/etc/ueventd.rc \
+    device/google/cuttlefish/shared/config/media_codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \
+    device/google/cuttlefish/shared/config/media_codecs_google_video.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_video.xml \
+    device/google/cuttlefish/shared/config/media_codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml \
+    device/google/cuttlefish/shared/config/media_profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml \
+    device/google/cuttlefish/shared/permissions/privapp-permissions-cuttlefish.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/privapp-permissions-cuttlefish.xml \
+    frameworks/av/media/libeffects/data/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
+    frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_audio.xml \
+    frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \
+    frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
+    frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
+    frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
+    frameworks/av/services/audiopolicy/config/surround_sound_configuration_5_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/surround_sound_configuration_5_0.xml \
     device/google/cuttlefish/shared/config/task_profiles.json:$(TARGET_COPY_OUT_VENDOR)/etc/task_profiles.json \
+
+# TODO(b/205065320): remove this when wifi vendor apex support mac80211_hwsim
+ifeq ($(PRODUCT_ENFORCE_MAC80211_HWSIM),true)
+PRODUCT_COPY_FILES += \
+    frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \
+    frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \
+
+endif
+
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+PRODUCT_PACKAGES += com.google.cf.input.config
+else
+PRODUCT_COPY_FILES += \
     device/google/cuttlefish/shared/config/input/Crosvm_Virtio_Multitouch_Touchscreen_0.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/Crosvm_Virtio_Multitouch_Touchscreen_0.idc \
     device/google/cuttlefish/shared/config/input/Crosvm_Virtio_Multitouch_Touchscreen_1.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/Crosvm_Virtio_Multitouch_Touchscreen_1.idc \
     device/google/cuttlefish/shared/config/input/Crosvm_Virtio_Multitouch_Touchscreen_2.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/Crosvm_Virtio_Multitouch_Touchscreen_2.idc \
     device/google/cuttlefish/shared/config/input/Crosvm_Virtio_Multitouch_Touchscreen_3.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/Crosvm_Virtio_Multitouch_Touchscreen_3.idc
+endif
 
 ifeq ($(TARGET_RO_FILE_SYSTEM_TYPE),ext4)
 PRODUCT_COPY_FILES += \
     device/google/cuttlefish/shared/config/fstab.f2fs:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/first_stage_ramdisk/fstab.f2fs \
-    device/google/cuttlefish/shared/config/fstab.f2fs:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/fstab.f2fs \
     device/google/cuttlefish/shared/config/fstab.f2fs:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.f2fs \
     device/google/cuttlefish/shared/config/fstab.f2fs:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.f2fs \
     device/google/cuttlefish/shared/config/fstab.ext4:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/first_stage_ramdisk/fstab.ext4 \
-    device/google/cuttlefish/shared/config/fstab.ext4:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/fstab.ext4 \
     device/google/cuttlefish/shared/config/fstab.ext4:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.ext4 \
     device/google/cuttlefish/shared/config/fstab.ext4:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.ext4
 else
 PRODUCT_COPY_FILES += \
     device/google/cuttlefish/shared/config/fstab-$(TARGET_RO_FILE_SYSTEM_TYPE).f2fs:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/first_stage_ramdisk/fstab.f2fs \
-    device/google/cuttlefish/shared/config/fstab-$(TARGET_RO_FILE_SYSTEM_TYPE).f2fs:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/fstab.f2fs \
     device/google/cuttlefish/shared/config/fstab-$(TARGET_RO_FILE_SYSTEM_TYPE).f2fs:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.f2fs \
     device/google/cuttlefish/shared/config/fstab-$(TARGET_RO_FILE_SYSTEM_TYPE).f2fs:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.f2fs \
     device/google/cuttlefish/shared/config/fstab-$(TARGET_RO_FILE_SYSTEM_TYPE).ext4:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/first_stage_ramdisk/fstab.ext4 \
-    device/google/cuttlefish/shared/config/fstab-$(TARGET_RO_FILE_SYSTEM_TYPE).ext4:$(TARGET_COPY_OUT_VENDOR_RAMDISK)/fstab.ext4 \
     device/google/cuttlefish/shared/config/fstab-$(TARGET_RO_FILE_SYSTEM_TYPE).ext4:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.ext4 \
     device/google/cuttlefish/shared/config/fstab-$(TARGET_RO_FILE_SYSTEM_TYPE).ext4:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.ext4
 endif
 
 ifeq ($(TARGET_VULKAN_SUPPORT),true)
+ifneq ($(LOCAL_PREFER_VENDOR_APEX),true)
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/android.hardware.vulkan.level-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \
     frameworks/native/data/etc/android.hardware.vulkan.version-1_0_3.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \
     frameworks/native/data/etc/android.software.vulkan.deqp.level-2021-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \
     frameworks/native/data/etc/android.software.opengles.deqp.level-2021-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml
 endif
+endif
 
 # Packages for HAL implementations
 
@@ -352,6 +378,12 @@
     android.hardware.weaver-service.example
 
 #
+# IR aidl HAL
+#
+PRODUCT_PACKAGES += \
+	android.hardware.ir-service.example
+
+#
 # OemLock aidl HAL
 #
 PRODUCT_PACKAGES += \
@@ -387,6 +419,7 @@
 #
 # Bluetooth HAL and Compatibility Bluetooth library (for older revs).
 #
+ifneq ($(LOCAL_PREFER_VENDOR_APEX),true)
 ifeq ($(LOCAL_BLUETOOTH_PRODUCT_PACKAGE),)
 ifeq ($(TARGET_ENABLE_HOST_BLUETOOTH_EMULATION),true)
 ifeq ($(TARGET_USE_BTLINUX_HAL_IMPL),true)
@@ -400,9 +433,23 @@
     DEVICE_MANIFEST_FILE += device/google/cuttlefish/shared/config/[email protected]
 endif
 
+PRODUCT_COPY_FILES +=\
+    frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \
+    frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml
+
 PRODUCT_PACKAGES += $(LOCAL_BLUETOOTH_PRODUCT_PACKAGE)
 
-PRODUCT_PACKAGES += [email protected]
+PRODUCT_PACKAGES += [email protected]  bt_vhci_forwarder
+
+# Bluetooth initialization configuration is copied to the init folder here instead of being added
+# as an init_rc attribute of the bt_vhci_forward binary.  The bt_vhci_forward binary is used by
+# multiple targets with different initialization configurations.
+PRODUCT_COPY_FILES += \
+    device/google/cuttlefish/guest/commands/bt_vhci_forwarder/bt_vhci_forwarder.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/bt_vhci_forwarder.rc
+
+else
+PRODUCT_PACKAGES += com.google.cf.bt [email protected]
+endif
 
 #
 # Audio HAL
@@ -461,13 +508,21 @@
 #
 PRODUCT_PACKAGES += \
     [email protected] \
-    [email protected]
+    [email protected]
+
+#
+# Confirmation UI HAL
+#
+ifeq ($(LOCAL_CONFIRMATIONUI_PRODUCT_PACKAGE),)
+    LOCAL_CONFIRMATIONUI_PRODUCT_PACKAGE := [email protected]
+endif
+PRODUCT_PACKAGES += $(LOCAL_CONFIRMATIONUI_PRODUCT_PACKAGE)
 
 #
 # Dumpstate HAL
 #
 ifeq ($(LOCAL_DUMPSTATE_PRODUCT_PACKAGE),)
-    LOCAL_DUMPSTATE_PRODUCT_PACKAGE := [email protected]
+    LOCAL_DUMPSTATE_PRODUCT_PACKAGE += android.hardware.dumpstate-service.example
 endif
 PRODUCT_PACKAGES += $(LOCAL_DUMPSTATE_PRODUCT_PACKAGE)
 
@@ -491,7 +546,7 @@
 # Gatekeeper
 #
 ifeq ($(LOCAL_GATEKEEPER_PRODUCT_PACKAGE),)
-       LOCAL_GATEKEEPER_PRODUCT_PACKAGE := [email protected]
+       LOCAL_GATEKEEPER_PRODUCT_PACKAGE := [email protected]
 endif
 PRODUCT_PACKAGES += \
     $(LOCAL_GATEKEEPER_PRODUCT_PACKAGE)
@@ -505,8 +560,9 @@
 # Health
 ifeq ($(LOCAL_HEALTH_PRODUCT_PACKAGE),)
     LOCAL_HEALTH_PRODUCT_PACKAGE := \
-    [email protected] \
-    [email protected]
+    android.hardware.health-service.cuttlefish \
+    android.hardware.health-service.cuttlefish_recovery \
+
 endif
 PRODUCT_PACKAGES += $(LOCAL_HEALTH_PRODUCT_PACKAGE)
 
@@ -516,7 +572,7 @@
 
 # Identity Credential
 PRODUCT_PACKAGES += \
-    android.hardware.identity-service.example
+    android.hardware.identity-service.remote
 
 # Input Classifier HAL
 PRODUCT_PACKAGES += \
@@ -526,8 +582,12 @@
 # Sensors
 #
 ifeq ($(LOCAL_SENSOR_PRODUCT_PACKAGE),)
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+       LOCAL_SENSOR_PRODUCT_PACKAGE := com.android.hardware.sensors
+else
        LOCAL_SENSOR_PRODUCT_PACKAGE := [email protected]
 endif
+endif
 PRODUCT_PACKAGES += \
     $(LOCAL_SENSOR_PRODUCT_PACKAGE)
 #
@@ -546,26 +606,31 @@
 # KeyMint HAL
 #
 ifeq ($(LOCAL_KEYMINT_PRODUCT_PACKAGE),)
-       LOCAL_KEYMINT_PRODUCT_PACKAGE := android.hardware.security.keymint-service
+       LOCAL_KEYMINT_PRODUCT_PACKAGE := android.hardware.security.keymint-service.remote
+# Indicate that this KeyMint includes support for the ATTEST_KEY key purpose.
+PRODUCT_COPY_FILES += \
+    frameworks/native/data/etc/android.hardware.keystore.app_attest_key.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.keystore.app_attest_key.xml
 endif
  PRODUCT_PACKAGES += \
     $(LOCAL_KEYMINT_PRODUCT_PACKAGE)
 
 # Keymint configuration
+ifneq ($(LOCAL_PREFER_VENDOR_APEX),true)
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/android.software.device_id_attestation.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.device_id_attestation.xml
+endif
 
 #
-# Power HAL
+# Power and PowerStats HALs
 #
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+PRODUCT_PACKAGES += com.android.hardware.power
+else
 PRODUCT_PACKAGES += \
-    android.hardware.power-service.example
+    android.hardware.power-service.example \
+    android.hardware.power.stats-service.example \
 
-#
-# PowerStats HAL
-#
-PRODUCT_PACKAGES += \
-    android.hardware.power.stats-service.example
+endif
 
 #
 # NeuralNetworks HAL
@@ -585,12 +650,21 @@
 
 #
 # USB
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+PRODUCT_PACKAGES += \
+    com.android.hardware.usb
+else
 PRODUCT_PACKAGES += \
     [email protected]
+endif
 
 # Vibrator HAL
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+PRODUCT_PACKAGES += com.android.hardware.vibrator
+else
 PRODUCT_PACKAGES += \
     android.hardware.vibrator-service.example
+endif
 
 # BootControl HAL
 PRODUCT_PACKAGES += \
@@ -606,26 +680,6 @@
 PRODUCT_PACKAGES += \
     android.hardware.memtrack-service.example
 
-# GKI APEX
-# Keep in sync with BOARD_KERNEL_MODULE_INTERFACE_VERSIONS
-ifneq (,$(TARGET_KERNEL_USE))
-  ifneq (,$(filter 5.4, $(TARGET_KERNEL_USE)))
-    PRODUCT_PACKAGES += com.android.gki.kmi_5_4_android12_unstable
-  else
-    PRODUCT_PACKAGES += com.android.gki.kmi_$(subst .,_,$(TARGET_KERNEL_USE))_android12_unstable
-  endif
-endif
-
-# Prevent GKI and boot image downgrades
-PRODUCT_PRODUCT_PROPERTIES += \
-    ro.build.ab_update.gki.prevent_downgrade_version=true \
-    ro.build.ab_update.gki.prevent_downgrade_spl=true \
-
-# WLAN driver configuration files
-PRODUCT_COPY_FILES += \
-    external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant_template.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant.conf \
-    $(LOCAL_PATH)/config/wpa_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant_overlay.conf
-
 # Fastboot HAL & fastbootd
 PRODUCT_PACKAGES += \
     [email protected] \
@@ -651,16 +705,73 @@
 PRODUCT_PACKAGES += linker.recovery shell_and_utilities_recovery
 endif
 
+# wifi
+
+# TODO(b/205065320): remove this when wifi vendor apex support mac80211_hwsim
+LOCAL_USE_WIFI_VENDOR_APEX := false
+ifneq ($(PRODUCT_ENFORCE_MAC80211_HWSIM),true)
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+LOCAL_USE_WIFI_VENDOR_APEX := true
+endif
+endif
+
+ifeq ($(LOCAL_USE_WIFI_VENDOR_APEX),true)
+
+PRODUCT_PACKAGES += com.google.cf.wifi
+# Demonstrate multi-installed vendor APEXes by installing another wifi HAL vendor APEX
+# which does not include the passpoint feature XML.
 #
-# Shell script Vendor Module Loading
-#
+# The default is set in BoardConfig.mk using bootconfig.
+# This can be changed at CVD launch-time using
+#     --extra_bootconfig_args "androidboot.vendor.apex.com.android.wifi.hal:=X"
+# or post-launch, at runtime using
+#     setprop persist.vendor.apex.com.android.wifi.hal X && reboot
+# where X is the name of the APEX file to use.
+PRODUCT_PACKAGES += com.google.cf.wifi.no-passpoint
+
+$(call add_soong_config_namespace, wpa_supplicant)
+$(call add_soong_config_var_value, wpa_supplicant, platform_version, $(PLATFORM_VERSION))
+$(call add_soong_config_var_value, wpa_supplicant, nl80211_driver, CONFIG_DRIVER_NL80211_QCA)
+# TODO(b/205065320): Convert com.google.cf.wifi to use mac8011_hwsim_virtio
+PRODUCT_VENDOR_PROPERTIES += ro.vendor.wifi_impl=virt_wifi
+else
+
+PRODUCT_PACKAGES += \
+    rename_netiface \
+    wpa_supplicant
 PRODUCT_COPY_FILES += \
-   $(LOCAL_PATH)/config/init.insmod.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.insmod.sh \
+    device/google/cuttlefish/shared/config/wpa_supplicant.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/wpa_supplicant.rc
+
+# WLAN driver configuration files
+LOCAL_WPA_SUPPLICANT_OVERLAY ?= $(LOCAL_PATH)/config/wpa_supplicant_overlay.conf
+PRODUCT_COPY_FILES += \
+    external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant_template.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant.conf \
+    $(LOCAL_WPA_SUPPLICANT_OVERLAY):$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant_overlay.conf
+
+ifeq ($(PRODUCT_ENFORCE_MAC80211_HWSIM),true)
+PRODUCT_PACKAGES += \
+    mac80211_create_radios \
+    hostapd \
+    [email protected]
+
+PRODUCT_COPY_FILES += \
+    device/google/cuttlefish/guest/services/wifi/init.wifi.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.wifi.sh \
+
+PRODUCT_VENDOR_PROPERTIES += ro.vendor.wifi_impl=mac8011_hwsim_virtio
+
+$(call soong_config_append,cvdhost,enforce_mac80211_hwsim,true)
+
+else
+PRODUCT_PACKAGES += setup_wifi
+PRODUCT_VENDOR_PROPERTIES += ro.vendor.wifi_impl=virt_wifi
+endif
+
+endif
 
 # Host packages to install
 PRODUCT_HOST_PACKAGES += socket_vsock_proxy
 
-PRODUCT_EXTRA_VNDK_VERSIONS := 28 29 30
+PRODUCT_EXTRA_VNDK_VERSIONS := 28 29 30 31
 
 PRODUCT_SOONG_NAMESPACES += external/mesa3d
 
@@ -672,6 +783,10 @@
 PRODUCT_VENDOR_PROPERTIES += \
     ro.surface_flinger.running_without_sync_framework=true
 
+# Enable GPU-intensive background blur support on Cuttlefish when requested by apps
+PRODUCT_VENDOR_PROPERTIES += \
+    ro.surface_flinger.supports_background_blur 1
+
 # Set support one-handed mode
 PRODUCT_PRODUCT_PROPERTIES += \
     ro.support_one_handed_mode=true
@@ -683,3 +798,7 @@
 # Set one_handed_mode translate animation duration milliseconds
 PRODUCT_PRODUCT_PROPERTIES += \
     persist.debug.one_handed_translate_animation_duration=300
+
+# Vendor Dlkm Locader
+PRODUCT_PACKAGES += \
+   dlkm_loader
diff --git a/shared/overlays/SettingsProvider/Android.bp b/shared/overlays/SettingsProvider/Android.bp
new file mode 100644
index 0000000..6072a34
--- /dev/null
+++ b/shared/overlays/SettingsProvider/Android.bp
@@ -0,0 +1,8 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+runtime_resource_overlay {
+    name: "cuttlefish_overlay_settings_provider",
+    soc_specific: true,
+}
diff --git a/shared/overlays/SettingsProvider/AndroidManifest.xml b/shared/overlays/SettingsProvider/AndroidManifest.xml
new file mode 100644
index 0000000..74656f1
--- /dev/null
+++ b/shared/overlays/SettingsProvider/AndroidManifest.xml
@@ -0,0 +1,10 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.providers.settings.cuttlefish.overlay">
+
+    <application android:hasCode="false" />
+
+    <overlay
+      android:targetPackage="com.android.providers.settings"
+      android:isStatic="true"
+      />
+</manifest>
diff --git a/shared/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/shared/overlays/SettingsProvider/res/values/defaults.xml
similarity index 100%
rename from shared/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
rename to shared/overlays/SettingsProvider/res/values/defaults.xml
diff --git a/shared/overlays/core/Android.bp b/shared/overlays/core/Android.bp
new file mode 100644
index 0000000..e297776
--- /dev/null
+++ b/shared/overlays/core/Android.bp
@@ -0,0 +1,8 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+runtime_resource_overlay {
+    name: "cuttlefish_overlay_frameworks_base_core",
+    soc_specific: true,
+}
diff --git a/shared/overlays/core/AndroidManifest.xml b/shared/overlays/core/AndroidManifest.xml
new file mode 100644
index 0000000..284ab6b
--- /dev/null
+++ b/shared/overlays/core/AndroidManifest.xml
@@ -0,0 +1,10 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.cuttlefish.overlay">
+
+    <application android:hasCode="false" />
+
+    <overlay
+      android:targetPackage="android"
+      android:isStatic="true"
+      />
+</manifest>
diff --git a/shared/overlay/frameworks/base/core/res/res/xml/power_profile.xml b/shared/overlays/core/res/xml/power_profile.xml
similarity index 100%
rename from shared/overlay/frameworks/base/core/res/res/xml/power_profile.xml
rename to shared/overlays/core/res/xml/power_profile.xml
diff --git a/shared/permissions/Android.bp b/shared/permissions/Android.bp
new file mode 100644
index 0000000..1b1e7bb
--- /dev/null
+++ b/shared/permissions/Android.bp
@@ -0,0 +1,10 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+prebuilt_etc {
+    name: "cuttlefish_excluded_hardware.prebuilt.xml",
+    src: "cuttlefish_excluded_hardware.xml",
+    relative_install_path: "permissions",
+    soc_specific: true,
+}
diff --git a/shared/phone/device.mk b/shared/phone/device.mk
index faa2c7c..b87aedc 100644
--- a/shared/phone/device.mk
+++ b/shared/phone/device.mk
@@ -32,9 +32,14 @@
     Phone \
     PhoneService \
     Telecom \
-    TeleService \
+    TeleService
+
+TARGET_USES_CF_RILD ?= true
+ifeq ($(TARGET_USES_CF_RILD),true)
+PRODUCT_PACKAGES += \
     libcuttlefish-ril-2 \
     libcuttlefish-rild
+endif
 
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/android.hardware.faketouch.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.faketouch.xml \
diff --git a/shared/phone/device_vendor.mk b/shared/phone/device_vendor.mk
index 61f72c1..2f5fda0 100644
--- a/shared/phone/device_vendor.mk
+++ b/shared/phone/device_vendor.mk
@@ -20,8 +20,10 @@
 $(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_vendor.mk)
 $(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk)
 
+ifneq ($(LOCAL_PREFER_VENDOR_APEX),true)
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml
+endif
 
 $(call inherit-product, frameworks/native/build/phone-xhdpi-2048-dalvik-heap.mk)
 $(call inherit-product, device/google/cuttlefish/shared/device.mk)
@@ -33,22 +35,31 @@
     ro.com.android.dataroaming=true \
     ro.telephony.default_network=9 \
 
-# TODO: not existing anymore?
-PRODUCT_PACKAGES += \
-    Phone \
-    PhoneService \
-
+TARGET_USES_CF_RILD ?= true
+ifeq ($(TARGET_USES_CF_RILD),true)
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+PRODUCT_PACKAGES += com.google.cf.rild
+else
 PRODUCT_PACKAGES += \
     libcuttlefish-ril-2 \
     libcuttlefish-rild
+endif
+endif
 
+ifneq ($(LOCAL_PREFER_VENDOR_APEX),true)
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/android.hardware.biometrics.face.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.biometrics.face.xml \
     frameworks/native/data/etc/android.hardware.faketouch.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.faketouch.xml \
     frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml \
     frameworks/native/data/etc/android.hardware.telephony.gsm.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.telephony.gsm.xml \
     frameworks/native/data/etc/android.hardware.telephony.ims.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.telephony.ims.xml
+endif
 
-DEVICE_PACKAGE_OVERLAYS += device/google/cuttlefish/shared/phone/overlay
+# Runtime Resource Overlays
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+PRODUCT_PACKAGES += com.google.aosp_cf_x86_64_phone.rros
+else
+PRODUCT_PACKAGES += cuttlefish_phone_overlay_frameworks_base_core
+endif
 
 TARGET_BOARD_INFO_FILE ?= device/google/cuttlefish/shared/phone/android-info.txt
diff --git a/shared/phone/overlays/core/Android.bp b/shared/phone/overlays/core/Android.bp
new file mode 100644
index 0000000..23fddab
--- /dev/null
+++ b/shared/phone/overlays/core/Android.bp
@@ -0,0 +1,8 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+runtime_resource_overlay {
+    name: "cuttlefish_phone_overlay_frameworks_base_core",
+    soc_specific: true,
+}
diff --git a/shared/phone/overlays/core/AndroidManifest.xml b/shared/phone/overlays/core/AndroidManifest.xml
new file mode 100644
index 0000000..268a8bc
--- /dev/null
+++ b/shared/phone/overlays/core/AndroidManifest.xml
@@ -0,0 +1,10 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.cuttlefish.phone.overlay">
+
+    <application android:hasCode="false" />
+
+    <overlay
+      android:targetPackage="android"
+      android:isStatic="true"
+      />
+</manifest>
diff --git a/shared/phone/overlay/frameworks/base/core/res/res/values/config.xml b/shared/phone/overlays/core/res/values/config.xml
similarity index 96%
rename from shared/phone/overlay/frameworks/base/core/res/res/values/config.xml
rename to shared/phone/overlays/core/res/values/config.xml
index 61feabf..8eff541 100644
--- a/shared/phone/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/shared/phone/overlays/core/res/values/config.xml
@@ -68,4 +68,7 @@
     <item>2:2:255</item> <!-- ID2:Fingerprint(HIDL):Weak -->
     <item>3:8:255</item> <!-- ID3:Face(HIDL):Weak -->
   </string-array>
+
+  <!-- Enable Night display, which requires HWC 2.0. -->
+  <bool name="config_nightDisplayAvailable">true</bool>
 </resources>
diff --git a/shared/sepolicy/OWNERS b/shared/sepolicy/OWNERS
index 2975ddf..9b37b0e 100644
--- a/shared/sepolicy/OWNERS
+++ b/shared/sepolicy/OWNERS
@@ -1,12 +1,4 @@
[email protected]
+include platform/system/sepolicy:/OWNERS
+
 [email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
diff --git a/shared/sepolicy/system_ext/private/logger_app.te b/shared/sepolicy/system_ext/private/logger_app.te
deleted file mode 100644
index 33d1934..0000000
--- a/shared/sepolicy/system_ext/private/logger_app.te
+++ /dev/null
@@ -1,17 +0,0 @@
-type logger_app, domain;
-
-# Taken from bonito-sepolicy:
-# https://cs.android.com/android/_/android/device/google/bonito-sepolicy/+/5396ef0aa04dc69ed04ecbc7f55eacf2a76b040b:vendor/qcom/common/logger_app.te;drc=dd2c2053296b0c00b5ef103adcabb8cd82eb0045
-userdebug_or_eng(`
-  app_domain(logger_app)
-  net_domain(logger_app)
-
-  allow logger_app app_api_service:service_manager find;
-  allow logger_app surfaceflinger_service:service_manager find;
-  allow logger_app radio_vendor_data_file:file create_file_perms;
-  allow logger_app radio_vendor_data_file:file rw_file_perms;
-  allow logger_app radio_vendor_data_file:dir create_dir_perms;
-  allow logger_app radio_vendor_data_file:dir rw_dir_perms;
-
-  gpu_access(logger_app)
-')
diff --git a/shared/sepolicy/system_ext/private/seapp_contexts b/shared/sepolicy/system_ext/private/seapp_contexts
index 1cd8665..375870c 100644
--- a/shared/sepolicy/system_ext/private/seapp_contexts
+++ b/shared/sepolicy/system_ext/private/seapp_contexts
@@ -1,6 +1,5 @@
 # Ramdump app
 user=_app seinfo=platform name=com.android.ramdump domain=ramdump_app type=app_data_file levelFrom=all
-user=_app seinfo=platform name=com.android.pixellogger domain=logger_app type=app_data_file levelFrom=all
 
 # Connectivity monitor
 user=_app isPrivApp=true seinfo=platform name=com.google.android.connectivitymonitor domain=con_monitor_app type=app_data_file levelFrom=all
diff --git a/shared/sepolicy/vendor/adbd.te b/shared/sepolicy/vendor/adbd.te
index 4ed653a..c933fe7 100644
--- a/shared/sepolicy/vendor/adbd.te
+++ b/shared/sepolicy/vendor/adbd.te
@@ -1,9 +1,4 @@
 allow adbd self:{ socket vsock_socket } {create listen accept rw_socket_perms_no_ioctl};
-# TODO(b/130668487): Label the vsock sockets.
-allow adbd unlabeled:{socket vsock_socket} rw_socket_perms_no_ioctl;
 allow adbd kernel:system module_request;
 
-recovery_only(`
-# TODO(b/130668487): Label the vsock sockets.
-allow su unlabeled:{ socket vsock_socket } rw_socket_perms_no_ioctl;
-')
+gpu_access(adbd)
diff --git a/shared/sepolicy/vendor/bluetooth.te b/shared/sepolicy/vendor/bluetooth.te
new file mode 100644
index 0000000..aa2671a
--- /dev/null
+++ b/shared/sepolicy/vendor/bluetooth.te
@@ -0,0 +1 @@
+gpu_access(bluetooth)
diff --git a/shared/sepolicy/vendor/bootanim.te b/shared/sepolicy/vendor/bootanim.te
index 9ac7954..b183efa 100644
--- a/shared/sepolicy/vendor/bootanim.te
+++ b/shared/sepolicy/vendor/bootanim.te
@@ -1,6 +1,2 @@
-# TODO(b/65049764): Update this once the FD owner process is relabelled. This is probably one of the
-# processes whch is started before Android init.
-allow bootanim kernel:fd use;
-
 allow bootanim self:process execmem;
 gpu_access(bootanim)
diff --git a/shared/sepolicy/vendor/bug_map b/shared/sepolicy/vendor/bug_map
index 57cbf3c..86b097a 100644
--- a/shared/sepolicy/vendor/bug_map
+++ b/shared/sepolicy/vendor/bug_map
@@ -1,6 +1,7 @@
+init init capability b/199386018
 init system_lib_file dir b/133444385
 init system_lib_file file b/133444385
+kernel kernel capability b/179966921
 migrate_legacy_obb_data dalvikcache_data_file file b/152338071
-system_server system_server process b/65201432
 gmscore_app hal_camera_prop file b/156287758
 priv_app radio_vendor_data_file dir b/188833462
diff --git a/shared/sepolicy/vendor/dlkm_loader.te b/shared/sepolicy/vendor/dlkm_loader.te
new file mode 100644
index 0000000..afdc65c
--- /dev/null
+++ b/shared/sepolicy/vendor/dlkm_loader.te
@@ -0,0 +1,16 @@
+type dlkm_loader, domain;
+type dlkm_loader_exec, exec_type, vendor_file_type, file_type;
+
+init_daemon_domain(dlkm_loader)
+
+# Allow insmod on vendor and system partitions
+allow dlkm_loader self:capability sys_module;
+allow dlkm_loader system_file:system module_load;
+allow dlkm_loader vendor_file:system module_load;
+
+# needed for libmodprobe to read kernel commandline
+allow dlkm_loader proc_cmdline:file r_file_perms;
+
+# dlkm_loader searches tracefs while looking for modules
+dontaudit dlkm_loader debugfs_bootreceiver_tracing:dir search;
+dontaudit dlkm_loader debugfs_mm_events_tracing:dir search;
diff --git a/shared/sepolicy/vendor/file.te b/shared/sepolicy/vendor/file.te
index 53c4628..803d3a8 100644
--- a/shared/sepolicy/vendor/file.te
+++ b/shared/sepolicy/vendor/file.te
@@ -1,7 +1,5 @@
 # File types
 type sensors_hal_socket, file_type;
-type tombstone_snapshot_file, file_type;
-type var_run_system_file, file_type;
 type sysfs_gpu, fs_type, sysfs_type;
 type sysfs_iio_devices, fs_type, sysfs_type;
 type mediadrm_vendor_data_file, file_type, data_file_type;
diff --git a/shared/sepolicy/vendor/file_contexts b/shared/sepolicy/vendor/file_contexts
index 49ef362..f6903b7 100644
--- a/shared/sepolicy/vendor/file_contexts
+++ b/shared/sepolicy/vendor/file_contexts
@@ -4,6 +4,7 @@
 
 /dev/block/by-name/misc u:object_r:misc_block_device:s0
 /dev/block/by-name/boot_[ab] u:object_r:boot_block_device:s0
+/dev/block/by-name/init_boot_[ab] u:object_r:boot_block_device:s0
 /dev/block/by-name/vendor_boot_[ab] u:object_r:boot_block_device:s0
 /dev/block/by-name/vbmeta_[ab] u:object_r:ab_block_device:s0
 /dev/block/by-name/vbmeta_system_[ab] u:object_r:ab_block_device:s0
@@ -27,22 +28,18 @@
 
 /dev/vhci  u:object_r:bt_device:s0
 
+# gnss hal can also read/write from hvc6
+# /dev/hvc6  u:object_r:serial_device:s0
+/dev/hvc6  u:object_r:gnss_device:s0
+
 # ARM serial console device
 /dev/ttyAMA[0-9]*  u:object_r:serial_device:s0
 
 #############################
-# Root files
-/ts_snap\.txt  u:object_r:tombstone_snapshot_file:s0
-
-#############################
 # data files
 /data/vendor/mediadrm(/.*)?  u:object_r:mediadrm_vendor_data_file:s0
 
 #############################
-# var files
-/var/run/system(/.*)?  u:object_r:var_run_system_file:s0
-
-#############################
 # sys files
 # x86
 /sys/devices/pci0000:00/0000:00:[0-9a-fA-F]{2}\.0/virtio[0-9]+/net(/.*)? u:object_r:sysfs_net:s0
@@ -57,6 +54,7 @@
 # Vendor files
 #
 /vendor/bin/cuttlefish_sensor_injection   u:object_r:cuttlefish_sensor_injection_exec:s0
+/vendor/bin/mac80211_create_radios u:object_r:mac80211_create_radios_exec:s0
 /vendor/bin/socket_vsock_proxy  u:object_r:socket_vsock_proxy_exec:s0
 /vendor/bin/vsoc_input_service  u:object_r:vsoc_input_service_exec:s0
 /vendor/bin/rename_netiface  u:object_r:rename_netiface_exec:s0
@@ -75,6 +73,7 @@
 /vendor/bin/hw/android\.hardware\.drm@[0-9]+\.[0-9]+-service-lazy\.widevine  u:object_r:hal_drm_widevine_exec:s0
 /vendor/bin/hw/android\.hardware\.graphics\.allocator@4\.0-service\.minigbm   u:object_r:hal_graphics_allocator_default_exec:s0
 /vendor/bin/hw/android\.hardware\.gatekeeper@1\.0-service\.software  u:object_r:hal_gatekeeper_default_exec:s0
+/vendor/bin/hw/android\.hardware\.health-service\.cuttlefish u:object_r:hal_health_default_exec:s0
 /vendor/bin/hw/android\.hardware\.health\.storage-service\.cuttlefish u:object_r:hal_health_storage_default_exec:s0
 /vendor/bin/hw/android\.hardware\.lights-service\.example u:object_r:hal_light_default_exec:s0
 /vendor/bin/hw/android\.hardware\.neuralnetworks@1\.3-service-sample-.*   u:object_r:hal_neuralnetworks_sample_exec:s0
@@ -87,15 +86,18 @@
 /vendor/bin/hw/android\.hardware\.sensors@2\.1-service\.mock  u:object_r:hal_sensors_default_exec:s0
 /vendor/bin/hw/android\.hardware\.input\.classifier@1\.0-service.default  u:object_r:hal_input_classifier_default_exec:s0
 /vendor/bin/hw/android\.hardware\.thermal@2\.0-service\.mock  u:object_r:hal_thermal_default_exec:s0
+/vendor/bin/hw/android\.hardware\.identity-service\.remote  u:object_r:hal_identity_remote_exec:s0
 /vendor/bin/hw/android\.hardware\.security\.keymint-service\.remote  u:object_r:hal_keymint_remote_exec:s0
 /vendor/bin/hw/android\.hardware\.keymaster@4\.1-service.remote  u:object_r:hal_keymaster_remote_exec:s0
 /vendor/bin/hw/android\.hardware\.gatekeeper@1\.0-service.remote  u:object_r:hal_gatekeeper_remote_exec:s0
+/vendor/bin/hw/android\.hardware\.confirmationui@1\.0-service.cuttlefish  u:object_r:hal_confirmationui_cuttlefish_exec:s0
 /vendor/bin/hw/android\.hardware\.oemlock-service.example u:object_r:hal_oemlock_default_exec:s0
 /vendor/bin/hw/android\.hardware\.weaver-service.example u:object_r:hal_weaver_default_exec:s0
 /vendor/bin/hw/android\.hardware\.authsecret@1\.0-service  u:object_r:hal_authsecret_default_exec:s0
 /vendor/bin/hw/android\.hardware\.authsecret-service.example u:object_r:hal_authsecret_default_exec:s0
 /vendor/bin/hw/android\.hardware\.rebootescrow-service\.default  u:object_r:hal_rebootescrow_default_exec:s0
-/vendor/bin/init\.insmod\.sh  u:object_r:init_insmod_sh_exec:s0
+/vendor/bin/dlkm_loader  u:object_r:dlkm_loader_exec:s0
+/vendor/bin/init\.wifi\.sh    u:object_r:init_wifi_sh_exec:s0
 
 /vendor/lib(64)?/libdrm.so  u:object_r:same_process_hal_file:s0
 /vendor/lib(64)?/libglapi.so  u:object_r:same_process_hal_file:s0
diff --git a/shared/sepolicy/vendor/gceservice.te b/shared/sepolicy/vendor/gceservice.te
index b6f84be..57181ec 100644
--- a/shared/sepolicy/vendor/gceservice.te
+++ b/shared/sepolicy/vendor/gceservice.te
@@ -13,12 +13,6 @@
 allow gceservice kmsg_device:chr_file w_file_perms;
 allow gceservice kmsg_device:chr_file getattr;
 
-# Read tombstone snapshot file
-allow gceservice tombstone_snapshot_file:file r_file_perms;
-# List tombstone files
-allow gceservice tombstone_data_file:dir r_dir_perms;
-allow gceservice tombstone_data_file:file getattr;
-
 # Communicate with GCE Metadata Proxy over Unix domain sockets
 # The proxy process uses the default label ("kernel") because it is
 # started before Android init and thus before SELinux rule are applied.
diff --git a/shared/sepolicy/vendor/genfs_contexts b/shared/sepolicy/vendor/genfs_contexts
index 3a18743..a62ae44 100644
--- a/shared/sepolicy/vendor/genfs_contexts
+++ b/shared/sepolicy/vendor/genfs_contexts
@@ -29,8 +29,8 @@
 dnl')dnl
 dnl
 # crosvm (x86)
-cf_pci_block_device(/devices/pci0000:00, 0x6, 5)
-cf_pci_gpu_device(/devices/pci0000:00, 0x11)
+cf_pci_block_device(/devices/pci0000:00, 0x7, 8)
+cf_pci_gpu_device(/devices/pci0000:00, 0x15)
 ## find /sys/devices/platform/* -type d -name 'rtc[0-9]' | sed 's,/rtc[0-9],,'
 genfscon sysfs /devices/platform/rtc_cmos/rtc u:object_r:sysfs_rtc:s0
 ## find /sys/devices/platform/* -type d -name 'wakeup[0-9]'
@@ -38,33 +38,41 @@
 cf_rtc_wakeup_alarmtimer(/devices/platform/rtc_cmos, 0, 1)
 ## currently disabled
 #genfscon sysfs /devices/LNXSYSTM:00/GFSH0001:00/wakeup u:object_r:sysfs_wakeup:s0
+#genfscon sysfs /devices/platform/GFSH0001:00/power_supply u:object_r:sysfs_batteryinfo:s0
+#genfscon sysfs /devices/platform/GFSH0001:00/power_supply/ac/wakeup3 u:object_r:sysfs_wakeup:s0
+#genfscon sysfs /devices/platform/GFSH0001:00/power_supply/battery/wakeup4 u:object_r:sysfs_wakeup:s0
+genfscon sysfs /devices/virtual/mac80211_hwsim/hwsim0/net u:object_r:sysfs_net:s0
+genfscon sysfs /devices/virtual/mac80211_hwsim/hwsim1/net u:object_r:sysfs_net:s0
 
 # crosvm (arm64)
-cf_pci_block_device(/devices/platform/10000.pci, 0x6, 4)
-cf_pci_gpu_device(/devices/platform/10000.pci/pci0000:00, 0x11)
+cf_pci_block_device(/devices/platform/10000.pci, 0x7, 7)
+cf_pci_gpu_device(/devices/platform/10000.pci/pci0000:00, 0x13)
 ## find /sys/devices/platform/* -type d -name 'rtc[0-9]' | sed 's,/rtc[0-9],,'
 genfscon sysfs /devices/platform/2000.rtc/rtc u:object_r:sysfs_rtc:s0
 ## find /sys/devices/platform/* -type d -name 'wakeup[0-9]'
 ## arm64 2000.rtc on crosvm does not currently expose a wakeup node
 
 # qemu (x86)
-cf_pci_block_device(/devices/pci0000:00, 0x7, 5)
+cf_pci_block_device(/devices/pci0000:00, 0x8, 7)
+cf_pci_gpu_device(/devices/pci0000:00, 0x14)
 ## find /sys/devices/platform/* -type d -name 'rtc[0-9]' | sed 's,/rtc[0-9],,'
 genfscon sysfs /devices/pnp0/00:04/rtc u:object_r:sysfs_rtc:s0
 ## find /sys/devices/platform/* -type d -name 'wakeup[0-9][0-9]'
 cf_rtc_wakeup_alarmtimer(/devices/pnp0/00:04, 0, 19)
 
 # qemu (arm64)
-cf_pci_block_device(/devices/platform/4010000000.pcie/pci0000:00, 0x6, 4)
-cf_pci_gpu_device(/devices/platform/4010000000.pcie/pci0000:00, 0x10)
+cf_pci_block_device(/devices/platform/4010000000.pcie/pci0000:00, 0x7, 7)
+cf_pci_gpu_device(/devices/platform/4010000000.pcie/pci0000:00, 0x13)
 ## find /sys/devices/platform/* -type d -name 'rtc[0-9]' | sed 's,/rtc[0-9],,'
 genfscon sysfs /devices/platform/9010000.pl031/rtc u:object_r:sysfs_rtc:s0
 ## find /sys/devices/platform/* -type d -name 'wakeup[0-9]'
 cf_rtc_wakeup_alarmtimer(/devices/platform/9010000.pl031, 0, 0)
 
 # qemu (arm)
-cf_pci_block_device(/devices/platform/3f000000.pcie/pci0000:00, 0x6, 4)
-cf_pci_gpu_device(/devices/platform/3f000000.pcie/pci0000:00, 0xf)
+cf_pci_block_device(/devices/platform/3f000000.pcie/pci0000:00, 0x7, 7)
+cf_pci_gpu_device(/devices/platform/3f000000.pcie/pci0000:00, 0x13)
+genfscon sysfs /devices/platform/rtc-test.1/wakeup/wakeup2 u:object_r:sysfs_wakeup:s0
+genfscon sysfs /devices/platform/rtc-test.2/wakeup/wakeup3 u:object_r:sysfs_wakeup:s0
 
 # common on all platforms / vm managers
 genfscon sysfs /devices/platform/rtc-test.0/rtc u:object_r:sysfs_rtc:s0
diff --git a/shared/sepolicy/vendor/hal_confirmationui_cuttlefish.te b/shared/sepolicy/vendor/hal_confirmationui_cuttlefish.te
new file mode 100644
index 0000000..13cd1a9
--- /dev/null
+++ b/shared/sepolicy/vendor/hal_confirmationui_cuttlefish.te
@@ -0,0 +1,14 @@
+type hal_confirmationui_cuttlefish, domain;
+hal_server_domain(hal_confirmationui_cuttlefish, hal_confirmationui)
+
+type hal_confirmationui_cuttlefish_exec, exec_type, vendor_file_type, file_type;
+init_daemon_domain(hal_confirmationui_cuttlefish)
+
+vendor_internal_prop(vendor_vsock_confirmationui_port_prop)
+get_prop(hal_confirmationui_cuttlefish, vendor_vsock_confirmationui_port_prop)
+
+allow hal_confirmationui_cuttlefish self:{ vsock_socket } { create getopt read write getattr connect shutdown };
+
+# Write to kernel log (/dev/kmsg)
+allow hal_confirmationui_cuttlefish kmsg_device:chr_file w_file_perms;
+allow hal_confirmationui_cuttlefish kmsg_device:chr_file getattr;
diff --git a/shared/sepolicy/vendor/hal_graphics_composer.te b/shared/sepolicy/vendor/hal_graphics_composer.te
index 4929038..cda5fdf 100644
--- a/shared/sepolicy/vendor/hal_graphics_composer.te
+++ b/shared/sepolicy/vendor/hal_graphics_composer.te
@@ -1,8 +1,5 @@
-vendor_restricted_prop(vendor_vsock_frames_port_prop)
-
 allow hal_graphics_composer_server hal_graphics_allocator_default_tmpfs:file read;
 allow hal_graphics_composer_server self:{ socket vsock_socket } create_socket_perms_no_ioctl;
 gpu_access(hal_graphics_composer_server)
 
-get_prop(hal_graphics_composer_server, vendor_vsock_frames_port_prop)
 get_prop(hal_graphics_composer_server, vendor_cuttlefish_config_server_port_prop)
diff --git a/shared/sepolicy/vendor/hal_identity_remote.te b/shared/sepolicy/vendor/hal_identity_remote.te
new file mode 100644
index 0000000..3f89226
--- /dev/null
+++ b/shared/sepolicy/vendor/hal_identity_remote.te
@@ -0,0 +1,5 @@
+type hal_identity_remote, domain;
+hal_server_domain(hal_identity_remote, hal_identity)
+
+type hal_identity_remote_exec, exec_type, vendor_file_type, file_type;
+init_daemon_domain(hal_identity_remote)
diff --git a/shared/sepolicy/vendor/hal_keymint_remote.te b/shared/sepolicy/vendor/hal_keymint_remote.te
index 27f8291..7d5f6d5 100644
--- a/shared/sepolicy/vendor/hal_keymint_remote.te
+++ b/shared/sepolicy/vendor/hal_keymint_remote.te
@@ -10,3 +10,6 @@
 # Write to kernel log (/dev/kmsg)
 allow hal_keymint_remote kmsg_device:chr_file w_file_perms;
 allow hal_keymint_remote kmsg_device:chr_file getattr;
+
+get_prop(hal_keymint_remote, vendor_security_patch_level_prop)
+get_prop(hal_keymint_remote, vendor_boot_security_patch_level_prop)
diff --git a/shared/sepolicy/vendor/hal_wifi_default.te b/shared/sepolicy/vendor/hal_wifi_default.te
new file mode 100644
index 0000000..cde7ada
--- /dev/null
+++ b/shared/sepolicy/vendor/hal_wifi_default.te
@@ -0,0 +1,3 @@
+allow hal_wifi_default hal_wifi_default:netlink_route_socket {
+    create bind write read nlmsg_read nlmsg_readpriv };
+allow hal_wifi_default self:capability { sys_module };
diff --git a/shared/sepolicy/vendor/init.te b/shared/sepolicy/vendor/init.te
index 7f362ef..8676c60 100644
--- a/shared/sepolicy/vendor/init.te
+++ b/shared/sepolicy/vendor/init.te
@@ -12,8 +12,9 @@
 allow init binfmt_miscfs:file w_file_perms;
 allow init proc:dir mounton;
 
-# init relabel vbmeta* symlinks
+# init relabel vbmeta* and boot* symlinks under /dev/block/by-name/.
 allow init ab_block_device:lnk_file relabelto;
+allow init boot_block_device:lnk_file relabelto;
 
 # /mnt/sdcard -> /storage/self/primary symlink is deprecated. Ignore attempts to
 # create it. This denial is fixed in core policy in Android R aosp/943799.
diff --git a/shared/sepolicy/vendor/init_insmod_sh.te b/shared/sepolicy/vendor/init_insmod_sh.te
deleted file mode 100644
index 5400a37..0000000
--- a/shared/sepolicy/vendor/init_insmod_sh.te
+++ /dev/null
@@ -1,11 +0,0 @@
-type init_insmod_sh, domain;
-type init_insmod_sh_exec, exec_type, vendor_file_type, file_type;
-
-init_daemon_domain(init_insmod_sh)
-
-allow init_insmod_sh vendor_shell_exec:file rx_file_perms;
-allow init_insmod_sh vendor_toolbox_exec:file rx_file_perms;
-
-# Allow insmod
-allow init_insmod_sh self:capability sys_module;
-allow init_insmod_sh vendor_file:system module_load;
diff --git a/shared/sepolicy/vendor/init_wifi_sh.te b/shared/sepolicy/vendor/init_wifi_sh.te
new file mode 100644
index 0000000..331a745
--- /dev/null
+++ b/shared/sepolicy/vendor/init_wifi_sh.te
@@ -0,0 +1,14 @@
+# cuttlefish-setup service: runs init.cuttlefish.sh script
+type init_wifi_sh, domain;
+type init_wifi_sh_exec, vendor_file_type, exec_type, file_type;
+
+init_daemon_domain(init_wifi_sh)
+
+allow init_wifi_sh self:capability { fowner chown net_admin net_raw };
+allow init_wifi_sh vendor_toolbox_exec:file execute_no_trans;
+allow init_wifi_sh mac80211_create_radios_exec:file execute_no_trans;
+
+vendor_internal_prop(vendor_wifi_mac_prefix);
+get_prop(init_wifi_sh, vendor_wifi_mac_prefix);
+
+allow init_wifi_sh self:netlink_generic_socket create_socket_perms_no_ioctl;
diff --git a/shared/sepolicy/vendor/libcuttlefish_rild.te b/shared/sepolicy/vendor/libcuttlefish_rild.te
index 8f3bbe7..28412c7 100644
--- a/shared/sepolicy/vendor/libcuttlefish_rild.te
+++ b/shared/sepolicy/vendor/libcuttlefish_rild.te
@@ -11,4 +11,4 @@
 get_prop(libcuttlefish_rild, vendor_cuttlefish_config_server_port_prop)
 get_prop(libcuttlefish_rild, vendor_modem_simulator_ports_prop)
 
-allow libcuttlefish_rild self:{ socket vsock_socket } create_socket_perms_no_ioctl;
+allow libcuttlefish_rild self:{ socket vsock_socket } { create_socket_perms_no_ioctl getattr };
diff --git a/shared/sepolicy/vendor/mac80211_create_radios.te b/shared/sepolicy/vendor/mac80211_create_radios.te
new file mode 100644
index 0000000..f7e6b7f
--- /dev/null
+++ b/shared/sepolicy/vendor/mac80211_create_radios.te
@@ -0,0 +1,2 @@
+type mac80211_create_radios, domain;
+type mac80211_create_radios_exec, exec_type, vendor_file_type, file_type;
diff --git a/shared/sepolicy/system_ext/private/mediatranscoding.te b/shared/sepolicy/vendor/mediatranscoding.te
similarity index 100%
rename from shared/sepolicy/system_ext/private/mediatranscoding.te
rename to shared/sepolicy/vendor/mediatranscoding.te
diff --git a/shared/sepolicy/vendor/property.te b/shared/sepolicy/vendor/property.te
index a727365..679941b 100644
--- a/shared/sepolicy/vendor/property.te
+++ b/shared/sepolicy/vendor/property.te
@@ -1,2 +1,3 @@
 vendor_restricted_prop(vendor_cuttlefish_config_server_port_prop)
 vendor_internal_prop(vendor_modem_simulator_ports_prop)
+vendor_internal_prop(vendor_boot_security_patch_level_prop)
diff --git a/shared/sepolicy/vendor/property_contexts b/shared/sepolicy/vendor/property_contexts
index ebbe271..9369d44 100644
--- a/shared/sepolicy/vendor/property_contexts
+++ b/shared/sepolicy/vendor/property_contexts
@@ -5,10 +5,12 @@
 ro.boot.hardware.hwcomposer u:object_r:vendor_graphics_config_prop:s0 exact string
 ro.boot.hardware.vulkan u:object_r:vendor_graphics_config_prop:s0 exact string
 ro.boot.lcd_density u:object_r:vendor_graphics_config_prop:s0 exact int
-ro.boot.vsock_frames_port  u:object_r:vendor_vsock_frames_port_prop:s0
 ro.boot.vsock_keyboard_port  u:object_r:vendor_vsock_keyboard_port:s0
+ro.boot.vsock_confirmationui_port  u:object_r:vendor_vsock_confirmationui_port_prop:s0
 ro.boot.modem_simulator_ports  u:object_r:vendor_modem_simulator_ports_prop:s0
 ro.boot.vsock_touch_port  u:object_r:vendor_vsock_touch_port:s0
-ro.boot.wifi_mac_address  u:object_r:vendor_wifi_mac_address:s0
+ro.boot.wifi_mac_prefix  u:object_r:vendor_wifi_mac_prefix:s0 exact string
+ro.vendor.wifi_impl u:object_r:vendor_wifi_impl:s0 exact string
+ro.vendor.boot_security_patch u:object_r:vendor_boot_security_patch_level_prop:s0
 vendor.bt.rootcanal_mac_address  u:object_r:vendor_bt_rootcanal_prop:s0
 vendor.bt.rootcanal_test_console  u:object_r:vendor_bt_rootcanal_prop:s0
diff --git a/shared/sepolicy/vendor/rename_netiface.te b/shared/sepolicy/vendor/rename_netiface.te
index 1ec0f06..f648a7e 100644
--- a/shared/sepolicy/vendor/rename_netiface.te
+++ b/shared/sepolicy/vendor/rename_netiface.te
@@ -5,6 +5,6 @@
 
 allow rename_netiface self:capability { net_admin net_raw sys_module };
 allow rename_netiface self:udp_socket { create ioctl };
-allow rename_netiface self:netlink_route_socket { bind create nlmsg_write read write };
+allow rename_netiface self:netlink_route_socket { bind create nlmsg_write read write getattr };
 
 allow rename_netiface kernel:system module_request;
diff --git a/shared/sepolicy/vendor/setup_wifi.te b/shared/sepolicy/vendor/setup_wifi.te
index 23a34eb..6a8d054 100644
--- a/shared/sepolicy/vendor/setup_wifi.te
+++ b/shared/sepolicy/vendor/setup_wifi.te
@@ -5,10 +5,8 @@
 
 allow setup_wifi self:capability { net_admin net_raw sys_module };
 allow setup_wifi self:udp_socket { create ioctl };
-allow setup_wifi self:netlink_route_socket { bind create nlmsg_write read write };
+allow setup_wifi self:netlink_route_socket { bind create nlmsg_write read write getattr };
 
 allow setup_wifi kernel:system module_request;
 
-vendor_internal_prop(vendor_wifi_mac_address)
-
-get_prop(setup_wifi, vendor_wifi_mac_address)
+get_prop(setup_wifi, vendor_wifi_mac_prefix)
diff --git a/shared/sepolicy/vendor/shell.te b/shared/sepolicy/vendor/shell.te
index cc26032..2ef1897 100644
--- a/shared/sepolicy/vendor/shell.te
+++ b/shared/sepolicy/vendor/shell.te
@@ -1,5 +1,2 @@
 allow shell serial_device:chr_file { getattr ioctl read write };
 allow shell cuttlefish_sensor_injection_exec:file rx_file_perms;
-
-# TODO(b/130668487): Label the vsock sockets.
-allow shell adbd:{ socket vsock_socket } rw_socket_perms_no_ioctl;
diff --git a/shared/sepolicy/vendor/socket_vsock_proxy.te b/shared/sepolicy/vendor/socket_vsock_proxy.te
index d4e2b1a..6f72963 100644
--- a/shared/sepolicy/vendor/socket_vsock_proxy.te
+++ b/shared/sepolicy/vendor/socket_vsock_proxy.te
@@ -4,7 +4,7 @@
 init_daemon_domain(socket_vsock_proxy)
 
 allow socket_vsock_proxy self:global_capability_class_set { net_admin net_raw };
-allow socket_vsock_proxy self:{ socket vsock_socket } { create getopt read write listen accept bind shutdown };
+allow socket_vsock_proxy self:{ socket vsock_socket } { create getopt read write getattr listen accept bind shutdown };
 
 # TODO: socket returned by accept() has unlabeled context on it. Give it a
 # specific label.
diff --git a/shared/sepolicy/vendor/system_server.te b/shared/sepolicy/vendor/system_server.te
index 372ca50..1df4c7d 100644
--- a/shared/sepolicy/vendor/system_server.te
+++ b/shared/sepolicy/vendor/system_server.te
@@ -1,11 +1,7 @@
-# TODO(b/65201432): Switch into enforcing mode once execmem issue due to OpenGL is resolved. Also
-# remove the corresponding dontaudit.
-# The current (at the time of writing) implementation of OpenGL needs to create executable memory.
-# Unfortunately, we cannot grant execmem power using an allow rule because global policy
-# (system/sepolicy) contains a corresponding neverallow which would cause build-time errors if the
-# allow execmem rule were added here.
-permissive system_server;
 gpu_access(system_server)
 
 # Cuttlefish is still using the legacy wifi HAL (pre-HIDL)
 get_prop(system_server, wifi_hal_prop)
+
+# TODO(b/65201432): Swiftshader needs to create executable memory.
+allow system_server self:process execmem;
diff --git a/shared/sepolicy/vendor/vendor_init.te b/shared/sepolicy/vendor/vendor_init.te
index 37e76e1..5bddb14 100644
--- a/shared/sepolicy/vendor/vendor_init.te
+++ b/shared/sepolicy/vendor/vendor_init.te
@@ -7,3 +7,8 @@
 set_prop(vendor_init, vendor_bt_rootcanal_prop)
 
 get_prop(vendor_init, vendor_graphics_config_prop)
+
+vendor_internal_prop(vendor_wifi_impl)
+set_prop(vendor_init, vendor_wifi_impl)
+
+set_prop(vendor_init, vendor_boot_security_patch_level_prop)
diff --git a/shared/tv/OWNERS b/shared/tv/OWNERS
new file mode 100644
index 0000000..4df9f27
--- /dev/null
+++ b/shared/tv/OWNERS
@@ -0,0 +1,2 @@
+# Bug component: 760438
+include device/google/atv:/OWNERS
diff --git a/shared/tv/device.mk b/shared/tv/device.mk
index 9b78ee1..f0ae93d 100644
--- a/shared/tv/device.mk
+++ b/shared/tv/device.mk
@@ -40,6 +40,9 @@
 # Tuner HAL
 PRODUCT_PACKAGES += [email protected]
 
+# Fallback IME and Home apps
+PRODUCT_PACKAGES += LeanbackIME TvSampleLeanbackLauncher TvProvision
+
 # Enabling managed profiles
 DEVICE_PACKAGE_OVERLAYS += device/google/cuttlefish/shared/tv/overlay
 
diff --git a/tags b/tags
new file mode 100644
index 0000000..a8a02a1
--- /dev/null
+++ b/tags
@@ -0,0 +1,13371 @@
+!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
+!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
+!_TAG_OUTPUT_EXCMD	mixed	/number, pattern, mixed, or combineV2/
+!_TAG_OUTPUT_FILESEP	slash	/slash or backslash/
+!_TAG_OUTPUT_MODE	u-ctags	/u-ctags or e-ctags/
+!_TAG_PATTERN_LENGTH_LIMIT	96	/0 for no limit/
+!_TAG_PROC_CWD	/usr/local/google/home/jaeman/android/aosp/device/google/cuttlefish/	//
+!_TAG_PROGRAM_AUTHOR	Universal Ctags Team	//
+!_TAG_PROGRAM_NAME	Universal Ctags	/Derived from Exuberant Ctags/
+!_TAG_PROGRAM_URL	https://ctags.io/	/official site/
+!_TAG_PROGRAM_VERSION	5.9.0	//
+#app-controls	host/frontend/webrtc_operator/assets/style.css	/^#app-controls {$/;"	i
+#app-controls > div	host/frontend/webrtc_operator/assets/style.css	/^#app-controls > div {$/;"	s
+#bluetooth-console-cmd-label	host/frontend/webrtc_operator/assets/style.css	/^#bluetooth-console-cmd-label {$/;"	i
+#bluetooth-console-input	host/frontend/webrtc_operator/assets/style.css	/^#bluetooth-console-input {$/;"	i
+#camera-control	host/frontend/webrtc_operator/assets/style.css	/^#camera-control {$/;"	i
+#control-panel-custom-buttons	host/frontend/webrtc_operator/assets/style.css	/^#control-panel-custom-buttons {$/;"	i
+#controls-and-displays	host/frontend/webrtc_operator/assets/style.css	/^#controls-and-displays {$/;"	i
+#controls-and-displays > div	host/frontend/webrtc_operator/assets/style.css	/^#controls-and-displays > div {$/;"	s
+#device-audio	host/frontend/webrtc_operator/assets/style.css	/^#device-audio {$/;"	i
+#device-connection	host/frontend/webrtc_operator/assets/style.css	/^#device-connection {$/;"	i
+#device-details-modal span	host/frontend/webrtc_operator/assets/style.css	/^#device-details-modal span {$/;"	s
+#device-displays	host/frontend/webrtc_operator/assets/style.css	/^#device-displays {$/;"	i
+#device-list .device-entry button	host/frontend/webrtc_operator/assets/index.css	/^#device-list .device-entry button {$/;"	s
+#device-selector	host/frontend/webrtc_operator/assets/index.css	/^#device-selector {$/;"	i
+#device-selector li.device-entry	host/frontend/webrtc_operator/assets/index.css	/^#device-selector li.device-entry {$/;"	c
+#error-message	host/frontend/webrtc_operator/assets/style.css	/^#error-message {$/;"	i
+#error-message-div	host/frontend/webrtc_operator/assets/style.css	/^#error-message-div {$/;"	i
+#error-message.error	host/frontend/webrtc_operator/assets/style.css	/^#error-message.error {$/;"	c
+#error-message.warning	host/frontend/webrtc_operator/assets/style.css	/^#error-message.warning {$/;"	c
+#header	host/frontend/webrtc_operator/assets/style.css	/^#header {$/;"	i
+#loader	host/frontend/webrtc_operator/assets/style.css	/^#loader {$/;"	i
+#record-video-control	host/frontend/webrtc_operator/assets/style.css	/^#record-video-control {$/;"	i
+#refresh-list	host/frontend/webrtc_operator/assets/index.css	/^#refresh-list {$/;"	i
+#status-div	host/frontend/webrtc_operator/assets/style.css	/^#status-div {$/;"	i
+#status-message	host/frontend/webrtc_operator/assets/style.css	/^#status-message {$/;"	i
+#status-message.connected	host/frontend/webrtc_operator/assets/style.css	/^#status-message.connected {$/;"	c
+#status-message.connecting	host/frontend/webrtc_operator/assets/style.css	/^#status-message.connecting {$/;"	c
+#status-message.error	host/frontend/webrtc_operator/assets/style.css	/^#status-message.error {$/;"	c
+.control-panel-column	host/frontend/webrtc_operator/assets/style.css	/^.control-panel-column {$/;"	c
+.control-panel-column button	host/frontend/webrtc_operator/assets/style.css	/^.control-panel-column button {$/;"	s
+.control-panel-column button.modal-button-opened	host/frontend/webrtc_operator/assets/style.css	/^.control-panel-column button.modal-button-opened {$/;"	c
+.control-panel-column button:disabled	host/frontend/webrtc_operator/assets/style.css	/^.control-panel-column button:disabled {$/;"	s
+.device-display	host/frontend/webrtc_operator/assets/style.css	/^.device-display {$/;"	c
+.device-display-info	host/frontend/webrtc_operator/assets/style.css	/^.device-display-info {$/;"	c
+.device-display-video	host/frontend/webrtc_operator/assets/style.css	/^.device-display-video {$/;"	c
+.modal	host/frontend/webrtc_operator/assets/style.css	/^.modal {$/;"	c
+.modal-close	host/frontend/webrtc_operator/assets/style.css	/^.modal-close {$/;"	c
+.modal-header	host/frontend/webrtc_operator/assets/style.css	/^.modal-header {$/;"	c
+.toggle-control	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control {$/;"	c
+.toggle-control .toggle-control-icon	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control .toggle-control-icon {$/;"	c
+.toggle-control .toggle-control-slider	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control .toggle-control-slider {$/;"	c
+.toggle-control .toggle-control-slider:before	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control .toggle-control-slider:before {$/;"	c
+.toggle-control .toggle-control-switch	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control .toggle-control-switch {$/;"	c
+.toggle-control .toggle-control-switch input	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control .toggle-control-switch input {$/;"	s
+.toggle-control input:checked + .toggle-control-slider	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control input:checked + .toggle-control-slider {$/;"	c
+.toggle-control input:checked + .toggle-control-slider:before	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control input:checked + .toggle-control-slider:before {$/;"	c
+.toggle-control input:focus + .toggle-control-slider	host/frontend/webrtc_operator/assets/controls.css	/^.toggle-control input:focus + .toggle-control-slider {$/;"	c
+0	host/example_custom_actions/custom_action_config.json	/^			{$/;"	o	array:1.buttons
+0	host/example_custom_actions/custom_action_config.json	/^	{$/;"	o
+0	shared/config/cgroups.json	/^    {$/;"	o	array:Cgroups
+0	shared/config/config_foldable.json	/^                                {$/;"	o	array:custom_actions.0.device_states
+0	shared/config/config_foldable.json	/^                                {$/;"	o	array:custom_actions.1.device_states
+0	shared/config/config_foldable.json	/^                {$/;"	o	array:custom_actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.0.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.1.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.10.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.11.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.12.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.13.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.14.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.15.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.16.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.17.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.18.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.19.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.2.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.20.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.21.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.22.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.23.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.24.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.25.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.26.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.27.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.28.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.29.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.3.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.30.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.4.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.5.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.6.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.7.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.8.Actions
+0	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.9.Actions
+0	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "LowIoPriority", "TimerSlackHigh" ]$/;"	s	array:AggregateProfiles.1.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "ProcessCapacityLow", "LowIoPriority", "TimerSlackHigh" /;"	s	array:AggregateProfiles.7.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "HighIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.2.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "ProcessCapacityHigh", "HighIoPriority", "TimerSlackNorma/;"	s	array:AggregateProfiles.8.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "MaxIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.3.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "ProcessCapacityMax", "MaxIoPriority", "TimerSlackNormal" /;"	s	array:AggregateProfiles.9.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "RealtimePerformance", "MaxIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.5.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "ServiceCapacityLow", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.10.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "ServiceCapacityRestricted", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.11.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "ServicePerformance", "LowIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.4.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.0.Profiles
+0	shared/config/task_profiles.json	/^      "Profiles": [ "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.6.Profiles
+0	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+0	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+1	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^            <DISPLAYTEXT id="1" cmd="21" menuId="01" text="D0228103012181820281028D1708662F54266/;"	i
+1	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <DISPLAYTEXT id="1" cmd="21" menuId="01" text="D03A8103012181820281028D2F08666E901A00550/;"	i
+1	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <SELECTITEM id="1" cmd="24" menuId="01" text="D0218103012400820281828F0A01806DFB52A083DC/;"	i
+1	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^    <SELECTITEM id="1" cmd="24" menuId="50" text="D02D8103012400820281828F0A018053E34EE48BBE7F6E/;"	i
+1	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^            <DISPLAYTEXT id="1" cmd="21" menuId="01" text="D0228103012181820281028D1708662F54266/;"	i
+1	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <DISPLAYTEXT id="1" cmd="21" menuId="01" text="D03A8103012181820281028D2F08666E901A00550/;"	i
+1	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <SELECTITEM id="1" cmd="24" menuId="01" text="D0218103012400820281828F0A01806DFB52A083DC/;"	i
+1	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^    <SELECTITEM id="1" cmd="24" menuId="50" text="D02D8103012400820281828F0A018053E34EE48BBE7F6E/;"	i
+1	host/example_custom_actions/custom_action_config.json	/^			{$/;"	o	array:1.buttons
+1	host/example_custom_actions/custom_action_config.json	/^	{$/;"	o
+1	shared/config/config_foldable.json	/^                {$/;"	o	array:custom_actions
+1	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.28.Actions
+1	shared/config/task_profiles.json	/^        {$/;"	o	array:Profiles.29.Actions
+1	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "LowIoPriority", "TimerSlackHigh" ]$/;"	s	array:AggregateProfiles.1.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "ProcessCapacityLow", "LowIoPriority", "TimerSlackHigh" /;"	s	array:AggregateProfiles.7.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "HighIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.2.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "ProcessCapacityHigh", "HighIoPriority", "TimerSlackNorma/;"	s	array:AggregateProfiles.8.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "MaxIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.3.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "ProcessCapacityMax", "MaxIoPriority", "TimerSlackNormal" /;"	s	array:AggregateProfiles.9.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "RealtimePerformance", "MaxIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.5.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "ServiceCapacityLow", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.10.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "ServiceCapacityRestricted", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.11.Profiles
+1	shared/config/task_profiles.json	/^      "Profiles": [ "ServicePerformance", "LowIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.4.Profiles
+1	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+1	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+10	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+10	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+11	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+11	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+12	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+13	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+14	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+15	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+16	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+17	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+18	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+19	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+2	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^            <DISPLAYTEXT id="2" cmd="21" menuId="02" text="D01A8103012101820281028D0F0883DC53555/;"	i
+2	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <DISPLAYTEXT id="2" cmd="21" menuId="02" text="D05C8103012181820281028D510875358BDD53F77/;"	i
+2	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <DISPLAYTEXT id="2" cmd="21" menuId="02" text="D081BB8103012181820281028D81AF08201C00530/;"	i
+2	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^    <SELECTITEM id="2" cmd="24" menuId="4E" text="D04E810301240082028182850F80005500530049004D53/;"	i
+2	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^            <DISPLAYTEXT id="2" cmd="21" menuId="02" text="D01A8103012101820281028D0F0883DC53555/;"	i
+2	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <DISPLAYTEXT id="2" cmd="21" menuId="02" text="D05C8103012181820281028D510875358BDD53F77/;"	i
+2	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <DISPLAYTEXT id="2" cmd="21" menuId="02" text="D081BB8103012181820281028D81AF08201C00530/;"	i
+2	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^    <SELECTITEM id="2" cmd="24" menuId="4E" text="D04E810301240082028182850F80005500530049004D53/;"	i
+2	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "LowIoPriority", "TimerSlackHigh" ]$/;"	s	array:AggregateProfiles.1.Profiles
+2	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "ProcessCapacityLow", "LowIoPriority", "TimerSlackHigh" /;"	s	array:AggregateProfiles.7.Profiles
+2	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "HighIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.2.Profiles
+2	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "ProcessCapacityHigh", "HighIoPriority", "TimerSlackNorma/;"	s	array:AggregateProfiles.8.Profiles
+2	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "MaxIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.3.Profiles
+2	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "ProcessCapacityMax", "MaxIoPriority", "TimerSlackNormal" /;"	s	array:AggregateProfiles.9.Profiles
+2	shared/config/task_profiles.json	/^      "Profiles": [ "RealtimePerformance", "MaxIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.5.Profiles
+2	shared/config/task_profiles.json	/^      "Profiles": [ "ServicePerformance", "LowIoPriority", "TimerSlackNormal" ]$/;"	s	array:AggregateProfiles.4.Profiles
+2	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+2	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+20	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+21	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+22	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+23	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+24	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+25	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+26	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+27	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+28	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+29	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+2F00	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^    <EF name="EF_DIR" id="2F00" structure="linear fixed">$/;"	i
+2F00	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^    <EF name="EF_DIR" id="2F00" structure="linear fixed">$/;"	i
+2F05	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^    <EF name="EF_PL" id="2F05" structure="transparent">$/;"	i
+2F05	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^    <EF name="EF_PL" id="2F05" structure="transparent">$/;"	i
+2FE2	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^    <EF name="EF_ICCID" id="2FE2" structure="transparent">$/;"	i
+2FE2	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^    <EF name="EF_ICCID" id="2FE2" structure="transparent">$/;"	i
+3	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <DISPLAYTEXT id="3" cmd="21" menuId="03" text="D02E8103012181820281028D23084E2D56FD79FB5/;"	i
+3	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <DISPLAYTEXT id="3" cmd="21" menuId="03" text="D05E8103012181820281028D5308004F005400415/;"	i
+3	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <DISPLAYTEXT id="3" cmd="21" menuId="03" text="D02E8103012181820281028D23084E2D56FD79FB5/;"	i
+3	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <DISPLAYTEXT id="3" cmd="21" menuId="03" text="D05E8103012181820281028D5308004F005400415/;"	i
+3	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "ProcessCapacityLow", "LowIoPriority", "TimerSlackHigh" /;"	s	array:AggregateProfiles.7.Profiles
+3	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "ProcessCapacityHigh", "HighIoPriority", "TimerSlackNorma/;"	s	array:AggregateProfiles.8.Profiles
+3	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "ProcessCapacityMax", "MaxIoPriority", "TimerSlackNormal" /;"	s	array:AggregateProfiles.9.Profiles
+3	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+3	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+30	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+4	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+4	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+4300	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^    <File id="4300">$/;"	i
+4318	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^    <File id="4318">$/;"	i
+4F09	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^            <EF name="EF_PBC" id="4F09" structure="linear fixed">$/;"	i
+4F09	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^            <EF name="EF_PBC" id="4F09" structure="linear fixed">$/;"	i
+4F11	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^            <EF name="EF_ANR" id="4F11" structure="linear fixed">$/;"	i
+4F11	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^            <EF name="EF_ANR" id="4F11" structure="linear fixed">$/;"	i
+4F30	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^            <EF name="EF_PBR" id="4F30" structure="linear fixed">$/;"	i
+4F30	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^            <EF name="EF_PBR" id="4F30" structure="linear fixed">$/;"	i
+4F33	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^            <EF name="EF_IAP" id="4F33" structure="linear fixed">$/;"	i
+4F33	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^            <EF name="EF_IAP" id="4F33" structure="linear fixed">$/;"	i
+4F3A	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^            <EF name="EF_ADN" id="4F3A" structure="linear fixed">$/;"	i
+4F3A	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^            <EF name="EF_ADN" id="4F3A" structure="linear fixed">$/;"	i
+4F4C	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^            <EF name="EF_GAS" id="4F4C" structure="linear fixed">$/;"	i
+4F4C	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^            <EF name="EF_GAS" id="4F4C" structure="linear fixed">$/;"	i
+5	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+5	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+6	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+6	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+6F07	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <EF name="EF_IMSI" id="6F07" structure="transparent">$/;"	i
+6F07	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <EF name="EF_IMSI" id="6F07" structure="transparent">$/;"	i
+6F11	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^       <EF name="EF_VOICE_MAIL_INDICATOR_CPHS" id="6F11" structure="transparent">$/;"	i
+6F11	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^       <EF name="EF_VOICE_MAIL_INDICATOR_CPHS" id="6F11" structure="transparent">$/;"	i
+6F3B	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^       <EF name="EF_FDN" id="6F3B" structure="linear fixed">$/;"	i
+6F3B	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^       <EF name="EF_FDN" id="6F3B" structure="linear fixed">$/;"	i
+6F40	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <EF name="EF_MSISDN" id="6F40" structure="linear fixed">$/;"	i
+6F40	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <EF name="EF_MSISDN" id="6F40" structure="linear fixed">$/;"	i
+6F7B	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^       <EF name="EF_FPLMN" id="6F7B" structure="transparent">$/;"	i
+6F7B	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^       <EF name="EF_FPLMN" id="6F7B" structure="transparent">$/;"	i
+6FAD	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^       <EF name="EF_AD" id="6FAD" structure="transparent">$/;"	i
+6FAD	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^       <EF name="EF_AD" id="6FAD" structure="transparent">$/;"	i
+6FC7	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <EF name="EF_MBDN" id="6FC7" structure="linear fixed">$/;"	i
+6FC7	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^       <EF name="EF_MBDN" id="6FC7" structure="linear fixed">$/;"	i
+6FC9	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^        <EF name="EF_MBI" id="6FC9" structure="linear fixed">$/;"	i
+6FC9	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^        <EF name="EF_MBI" id="6FC9" structure="linear fixed">$/;"	i
+6FCA	host/commands/modem_simulator/files/iccprofile_for_sim0.xml	/^       <EF name="EF_MWIS" id="6FCA" structure="linear fixed">$/;"	i
+6FCA	host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml	/^       <EF name="EF_MWIS" id="6FCA" structure="linear fixed">$/;"	i
+7	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+7	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+8	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+8	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+9	shared/config/task_profiles.json	/^    {$/;"	o	array:AggregateProfiles
+9	shared/config/task_profiles.json	/^    {$/;"	o	array:Profiles
+AB	host/commands/modem_simulator/sim_service.h	/^      AB = 6,  \/\/ All barring services$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+AB_OTA_UPDATER	shared/device.mk	/^AB_OTA_UPDATER := true$/;"	m
+AC	host/commands/modem_simulator/sim_service.h	/^      AC = 8,  \/\/ All incoming barring services$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+ACESS_TECH_EC_GSM_IoT	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_EC_GSM_IoT   = 8,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_EGPRS	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_EGPRS        = 3,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_EUTRAN	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_EUTRAN       = 7,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_E_UTRA	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_E_UTRA       = 10,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_E_UTRAN	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_E_UTRAN      = 9,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_E_UTRA_NR	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_E_UTRA_NR    = 13$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_GSM	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_GSM          = 0,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_GSM_COMPACT	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_GSM_COMPACT  = 1,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_HSDPA	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_HSDPA        = 4,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_HSPA	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_HSPA         = 6,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_HSUPA	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_HSUPA        = 5,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_NG_RAN	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_NG_RAN       = 12,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_NR	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_NR           = 11,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACESS_TECH_UTRAN	host/commands/modem_simulator/network_service.h	/^      ACESS_TECH_UTRAN        = 2,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+ACQUIRE	common/libs/concurrency/thread_annotations.h	/^#define ACQUIRE(/;"	d
+ACQUIRED_AFTER	common/libs/concurrency/thread_annotations.h	/^#define ACQUIRED_AFTER(/;"	d
+ACQUIRED_BEFORE	common/libs/concurrency/thread_annotations.h	/^#define ACQUIRED_BEFORE(/;"	d
+ACQUIRE_SHARED	common/libs/concurrency/thread_annotations.h	/^#define ACQUIRE_SHARED(/;"	d
+ACTIVE	host/commands/modem_simulator/data_service.h	/^    enum CidState {ACTIVE, NO_ACTIVE};$/;"	e	enum:cuttlefish::DataService::PDPContext::CidState
+AF_VSOCK	common/libs/fs/vm_sockets.h	/^#define AF_VSOCK /;"	d
+AG	host/commands/modem_simulator/sim_service.h	/^      AG = 7,  \/\/ All outgoing barring services$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+AI	host/commands/modem_simulator/sim_service.h	/^      AI = 4,  \/\/ Barr all incoming calls$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+ALL_CF	host/commands/modem_simulator/sup_service.h	/^      ALL_CF      = 4,  \/\/ all call forwarding$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::Reason
+ALL_CONDITIONAL_CF	host/commands/modem_simulator/sup_service.h	/^      ALL_CONDITIONAL_CF = 5, \/\/all conditional call forwarding$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::Reason
+ALL_MATCHING_RULES_FAILED	guest/hals/ril/reference-libril/ril.h	/^    ALL_MATCHING_RULES_FAILED = 0x8CE,$/;"	e	enum:__anon0bfbaecf2f03
+ANDROID_HARDWARE_CONFIRMATIONUI_V1_0_TRUSTY_CONFIRMATIONUI_H	guest/hals/confirmationui/TrustyConfirmationUI.h	/^#define ANDROID_HARDWARE_CONFIRMATIONUI_V1_0_TRUSTY_CONFIRMATIONUI_H$/;"	d
+ANDROID_RIL_H	guest/hals/ril/reference-libril/ril.h	/^#define ANDROID_RIL_H /;"	d
+ANDROID_RIL_INTERNAL_H	guest/hals/ril/reference-libril/ril_internal.h	/^#define ANDROID_RIL_INTERNAL_H$/;"	d
+ANDROID_WAKE_LOCK_NAME	guest/hals/ril/reference-libril/ril.cpp	/^#define ANDROID_WAKE_LOCK_NAME /;"	d	file:
+ANDROID_WAKE_LOCK_SECS	guest/hals/ril/reference-libril/ril.cpp	/^#define ANDROID_WAKE_LOCK_SECS /;"	d	file:
+ANDROID_WAKE_LOCK_USECS	guest/hals/ril/reference-libril/ril.cpp	/^#define ANDROID_WAKE_LOCK_USECS /;"	d	file:
+AO	host/commands/modem_simulator/sim_service.h	/^      AO = 1,  \/\/ Barr all outgoing calls$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+ARRAY	host/libs/confui/cbor.h	/^    ARRAY = 4,$/;"	e	enum:cuttlefish::confui::Cbor::Type
+ASSERT_CAPABILITY	common/libs/concurrency/thread_annotations.h	/^#define ASSERT_CAPABILITY(/;"	d
+ASSERT_SHARED_CAPABILITY	common/libs/concurrency/thread_annotations.h	/^#define ASSERT_SHARED_CAPABILITY(/;"	d
+ASSERT_VALID_MSG_TYPE	host/libs/audio_connector/shm_layout.h	/^#define ASSERT_VALID_MSG_TYPE(/;"	d
+ATCHANNEL_H	guest/hals/ril/reference-ril/atchannel.h	/^#define ATCHANNEL_H /;"	d
+ATCommandType	guest/hals/ril/reference-ril/atchannel.h	/^} ATCommandType;$/;"	t	typeref:enum:__anon512a2c1f0103
+ATLine	guest/hals/ril/reference-ril/atchannel.h	/^typedef struct ATLine  {$/;"	s
+ATLine	guest/hals/ril/reference-ril/atchannel.h	/^} ATLine;$/;"	t	typeref:struct:ATLine
+ATOI_NULL_HANDLED	guest/hals/ril/reference-libril/ril_service.cpp	/^#define ATOI_NULL_HANDLED(/;"	d	file:
+ATOI_NULL_HANDLED_DEF	guest/hals/ril/reference-libril/ril_service.cpp	/^#define ATOI_NULL_HANDLED_DEF(/;"	d	file:
+ATResponse	guest/hals/ril/reference-ril/atchannel.h	/^} ATResponse;$/;"	t	typeref:struct:__anon512a2c1f0208
+ATUnsolHandler	guest/hals/ril/reference-ril/atchannel.h	/^typedef void (*ATUnsolHandler)(const char *s, const char *sms_pdu);$/;"	t	typeref:typename:void (*)(const char * s,const char * sms_pdu)
+AT_CME_Error	guest/hals/ril/reference-ril/atchannel.h	/^} AT_CME_Error;$/;"	t	typeref:enum:__anon512a2c1f0303
+AT_DEBUG	guest/hals/ril/reference-ril/atchannel.h	/^#define AT_DEBUG /;"	d
+AT_DUMP	guest/hals/ril/reference-ril/atchannel.c	/^void  AT_DUMP(const char*  prefix __unused, const char*  buff, int  len)$/;"	f	typeref:typename:void
+AT_ERROR_CHANNEL_CLOSED	guest/hals/ril/reference-ril/atchannel.h	/^#define AT_ERROR_CHANNEL_CLOSED /;"	d
+AT_ERROR_COMMAND_PENDING	guest/hals/ril/reference-ril/atchannel.h	/^#define AT_ERROR_COMMAND_PENDING /;"	d
+AT_ERROR_GENERIC	guest/hals/ril/reference-ril/atchannel.h	/^#define AT_ERROR_GENERIC /;"	d
+AT_ERROR_INVALID_RESPONSE	guest/hals/ril/reference-ril/atchannel.h	/^#define AT_ERROR_INVALID_RESPONSE /;"	d
+AT_ERROR_INVALID_THREAD	guest/hals/ril/reference-ril/atchannel.h	/^#define AT_ERROR_INVALID_THREAD /;"	d
+AT_ERROR_TIMEOUT	guest/hals/ril/reference-ril/atchannel.h	/^#define AT_ERROR_TIMEOUT /;"	d
+AT_TOK_H	guest/hals/ril/reference-ril/at_tok.h	/^#define AT_TOK_H /;"	d
+AUDIOSERVER_MULTILIB	vsoc_arm64_only/BoardConfig.mk	/^AUDIOSERVER_MULTILIB := first$/;"	m
+AUDIOSERVER_MULTILIB	vsoc_x86_64_only/BoardConfig.mk	/^AUDIOSERVER_MULTILIB := first$/;"	m
+AUTH_CONTEXT_EAP_AKA	guest/hals/ril/reference-ril/reference-ril.c	/^#define AUTH_CONTEXT_EAP_AKA /;"	d	file:
+AUTH_CONTEXT_EAP_SIM	guest/hals/ril/reference-ril/reference-ril.c	/^#define AUTH_CONTEXT_EAP_SIM /;"	d	file:
+A_CNXN	host/frontend/webrtc_operator/assets/js/adb.js	/^const A_CNXN = 0x4e584e43;$/;"	C
+A_OKAY	host/frontend/webrtc_operator/assets/js/adb.js	/^const A_OKAY = 0x59414b4f;$/;"	C
+A_OPEN	host/frontend/webrtc_operator/assets/js/adb.js	/^const A_OPEN = 0x4e45504f;$/;"	C
+A_WRTE	host/frontend/webrtc_operator/assets/js/adb.js	/^const A_WRTE = 0x45545257;$/;"	C
+Abort	guest/hals/confirmationui/guest_session.cpp	/^Return<void> GuestSession::Abort() {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:Return<void>
+Abort	host/libs/confui/session.cc	/^void Session::Abort() {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:void
+AbortOperation	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::AbortOperation(const AbortOperationRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+AbortOperation	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::AbortOperation(const AbortOperationRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+AbsolutePath	common/libs/utils/files.cpp	/^std::string AbsolutePath(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+Accept	common/libs/fs/shared_fd.cpp	/^FileInstance* FileInstance::Accept(struct sockaddr* addr,$/;"	f	class:cuttlefish::FileInstance	typeref:typename:FileInstance *
+Accept	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Accept(const FileInstance& listener) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+Accept	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Accept(const FileInstance& listener, struct sockaddr* addr,$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+Accept	common/libs/utils/tcp_socket.cpp	/^ClientSocket ServerSocket::Accept() {$/;"	f	class:cuttlefish::ServerSocket	typeref:typename:ClientSocket
+AcceptClient	host/libs/audio_connector/server.cpp	/^std::unique_ptr<AudioClientConnection> AudioServer::AcceptClient($/;"	f	class:cuttlefish::AudioServer	typeref:typename:std::unique_ptr<AudioClientConnection>
+AcceptIncomingConnection	host/commands/modem_simulator/channel_monitor.cpp	/^void ChannelMonitor::AcceptIncomingConnection() {$/;"	f	class:cuttlefish::ChannelMonitor	typeref:typename:void
+AccessTechnoloy	host/commands/modem_simulator/network_service.h	/^    enum AccessTechnoloy {$/;"	g	struct:cuttlefish::NetworkService::NetworkRegistrationStatus
+AcquireResource	host/libs/allocd/resource.cpp	/^bool EthernetIface::AcquireResource() {$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:bool
+AcquireResource	host/libs/allocd/resource.cpp	/^bool MobileIface::AcquireResource() {$/;"	f	class:cuttlefish::MobileIface	typeref:typename:bool
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.0
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.1
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.10
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.11
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.12
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.13
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.14
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.15
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.16
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.17
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.18
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.19
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.2
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.20
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.21
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.22
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.23
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.24
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.25
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.26
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.27
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.28
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.29
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.3
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.30
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.4
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.5
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.6
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.7
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.8
+Actions	shared/config/task_profiles.json	/^      "Actions": [$/;"	a	object:Profiles.9
+ActiveAudioLayer	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::ActiveAudioLayer(AudioLayer* audioLayer) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+AdbChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^AdbChannelHandler::AdbChannelHandler($/;"	f	class:cuttlefish::webrtc_streaming::AdbChannelHandler
+AdbChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^class AdbChannelHandler : public webrtc::DataChannelObserver {$/;"	c	namespace:cuttlefish::webrtc_streaming	file:
+AdbConfig	host/libs/config/adb/adb.h	/^class AdbConfig {$/;"	c	namespace:cuttlefish
+AdbConfigComponent	host/libs/config/adb/data.cpp	/^fruit::Component<AdbConfig> AdbConfigComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<AdbConfig>
+AdbConfigFlag	host/libs/config/adb/adb.h	/^class AdbConfigFlag : public FlagFeature {};$/;"	c	namespace:cuttlefish
+AdbConfigFlagComponent	host/libs/config/adb/flags.cpp	/^AdbConfigFlagComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<AdbConfig,ConfigFlag>,AdbConfigFlag>
+AdbConfigFlagImpl	host/libs/config/adb/flags.cpp	/^class AdbConfigFlagImpl : public AdbConfigFlag {$/;"	c	namespace:cuttlefish::__anon459bf0e40111	file:
+AdbConfigFragment	host/libs/config/adb/adb.h	/^class AdbConfigFragment : public ConfigFragment {};$/;"	c	namespace:cuttlefish
+AdbConfigFragmentComponent	host/libs/config/adb/config.cpp	/^AdbConfigFragmentComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<AdbConfig>,AdbConfigFragment>
+AdbConfigFragmentImpl	host/libs/config/adb/config.cpp	/^class AdbConfigFragmentImpl : public AdbConfigFragment {$/;"	c	namespace:cuttlefish::__anone963d72d0111	file:
+AdbConfigImpl	host/libs/config/adb/data.cpp	/^class AdbConfigImpl : public AdbConfig {$/;"	c	namespace:cuttlefish	file:
+AdbConnect	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^bool AdbConnect(const std::string& address) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:bool
+AdbConnector	host/libs/config/adb/launch.cpp	/^class AdbConnector : public CommandSource {$/;"	c	namespace:cuttlefish::__anon7ea6a0320111	file:
+AdbConnectorBinary	host/libs/config/known_paths.cpp	/^std::string AdbConnectorBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+AdbDisconnect	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^bool AdbDisconnect(const std::string& address) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:bool
+AdbHandler	host/frontend/webrtc/adb_handler.cpp	/^AdbHandler::AdbHandler($/;"	f	class:cuttlefish::webrtc_streaming::AdbHandler
+AdbHandler	host/frontend/webrtc/adb_handler.h	/^struct AdbHandler {$/;"	s	namespace:cuttlefish::webrtc_streaming
+AdbHelper	host/libs/config/adb/launch.cpp	/^class AdbHelper {$/;"	c	namespace:cuttlefish::__anon7ea6a0320111	file:
+AdbMode	host/libs/config/adb/adb.h	/^enum class AdbMode {$/;"	g	namespace:cuttlefish
+AdbModeToString	host/libs/config/adb/strings.cpp	/^std::string AdbModeToString(AdbMode mode) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+AdbSendMessage	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^bool AdbSendMessage(const std::string& message) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:bool
+AdbSendMessage	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^bool AdbSendMessage(cuttlefish::SharedFD sock, const std::string& message) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:bool
+AdbdStarted	host/commands/kernel_log_monitor/kernel_log_server.h	/^  AdbdStarted = 5,$/;"	e	enum:monitor::Event
+Add	host/frontend/webrtc/audio_handler.cpp	/^size_t AudioHandler::HoldingBuffer::Add(const volatile uint8_t* data,$/;"	f	class:cuttlefish::AudioHandler::HoldingBuffer	typeref:typename:size_t
+Add	host/frontend/webrtc_operator/client_handler.cpp	/^std::string PollConnectionStore::Add(std::shared_ptr<PollConnectionHandler> handler) {$/;"	f	class:cuttlefish::PollConnectionStore	typeref:typename:std::string
+AddAddrInfo	common/libs/net/netlink_request.cpp	/^void NetlinkRequest::AddAddrInfo(int32_t if_index, int prefix_len) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void
+AddAudio	host/frontend/webrtc/lib/client_handler.cpp	/^bool ClientHandler::AddAudio($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:bool
+AddAudioStream	host/frontend/webrtc/lib/streamer.cpp	/^std::shared_ptr<AudioSink> Streamer::AddAudioStream(const std::string& label) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:std::shared_ptr<AudioSink>
+AddCORSHeaders	host/libs/websocket/websocket_server.cpp	/^bool AddCORSHeaders(struct lws* wsi, unsigned char** buffer_ptr,$/;"	f	namespace:cuttlefish::__anon8185be2f0111	typeref:typename:bool
+AddCamera	host/frontend/webrtc/lib/streamer.cpp	/^CameraController* Streamer::AddCamera(unsigned int port, unsigned int cid) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:CameraController *
+AddCommand	host/commands/run_cvd/process_monitor.cc	/^void ProcessMonitor::AddCommand(Command cmd) {$/;"	f	class:cuttlefish::ProcessMonitor	typeref:typename:void
+AddCommands	host/commands/run_cvd/process_monitor.h	/^  void AddCommands(T&& commands) {$/;"	f	class:cuttlefish::ProcessMonitor	typeref:typename:void
+AddControlSocket	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddControlSocket(const std::string& control_socket) {$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddCustomActionServer	host/frontend/webrtc/connection_observer.cpp	/^void CfConnectionObserverFactory::AddCustomActionServer($/;"	f	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:void
+AddCustomControlPanelButton	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::AddCustomControlPanelButton(const std::string& command,$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:void
+AddCustomControlPanelButtonWithDeviceStates	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::AddCustomControlPanelButtonWithDeviceStates($/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:void
+AddCustomControlPanelButtonWithShellCommand	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::AddCustomControlPanelButtonWithShellCommand($/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:void
+AddDisplay	host/frontend/webrtc/lib/client_handler.cpp	/^bool ClientHandler::AddDisplay($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:bool
+AddDisplay	host/frontend/webrtc/lib/local_recorder.cpp	/^void LocalRecorder::AddDisplay($/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder	typeref:typename:void
+AddDisplay	host/frontend/webrtc/lib/streamer.cpp	/^std::shared_ptr<VideoSink> Streamer::AddDisplay(const std::string& label,$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:std::shared_ptr<VideoSink>
+AddEncodedSink	host/frontend/webrtc/lib/video_track_source_impl.h	/^  void AddEncodedSink($/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:void
+AddEvent	host/frontend/webrtc/connection_observer.cpp	/^  void AddEvent(uint16_t type, uint16_t code, int32_t value) override {$/;"	f	struct:cuttlefish::InputEventBufferImpl	typeref:typename:void	file:
+AddFilesToConfig	host/commands/fetcher/fetch_cvd.cc	/^void AddFilesToConfig(FileSource purpose, const Build& build,$/;"	f	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:void
+AddGateway	host/libs/allocd/alloc_utils.cpp	/^bool AddGateway(const std::string& name, const std::string& gateway,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+AddHttpHeaders	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionImpl::AddHttpHeaders(unsigned char** p,$/;"	f	class:WsConnectionImpl	typeref:typename:void
+AddHvcConsoleReadOnly	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddHvcConsoleReadOnly(const std::string& output) {$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddHvcReadOnly	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddHvcReadOnly(const std::string& output) {$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddHvcReadWrite	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddHvcReadWrite(const std::string& output,$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddHvcSink	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddHvcSink() {$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddIfInfo	common/libs/net/netlink_request.cpp	/^void NetlinkRequest::AddIfInfo(int32_t if_index, bool operational) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void
+AddInt	common/libs/net/netlink_request.h	/^  void AddInt(uint16_t type, T value) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void
+AddInterface	host/libs/allocd/resource_manager.cpp	/^bool ResourceManager::AddInterface(const std::string& iface, IfaceType ty,$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:bool
+AddJsonCustomActionConfigs	host/libs/config/custom_actions.cpp	/^  bool AddJsonCustomActionConfigs(const Json::Value& custom_action_array) {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:bool	file:
+AddMacAddress	common/libs/net/netlink_request.cpp	/^void NetlinkRequest::AddMacAddress(const std::array<unsigned char, 6>& address) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void
+AddOrUpdateSink	host/frontend/webrtc/lib/client_handler.cpp	/^  void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame> *sink,$/;"	f	class:cuttlefish::webrtc_streaming::ClientVideoTrackImpl	typeref:typename:void	file:
+AddParameter	common/libs/utils/subprocess.h	/^  void AddParameter(Args... args) {$/;"	f	class:cuttlefish::Command	typeref:typename:void
+AddPendingIceCandidates	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::AddPendingIceCandidates() {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+AddRngEntropy	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::AddRngEntropy(const AddEntropyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+AddRngEntropy	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::AddRngEntropy(const AddEntropyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+AddRngEntropy	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster_error_t AddRngEntropy(const uint8_t* buf,$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster_error_t
+AddRngEntropy	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster_error_t TpmKeymasterContext::AddRngEntropy($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster_error_t
+AddRngEntropy	host/commands/secure_env/tpm_random_source.cpp	/^keymaster_error_t TpmRandomSource::AddRngEntropy($/;"	f	class:cuttlefish::TpmRandomSource	typeref:typename:keymaster_error_t
+AddSerial	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddSerial(const std::string& output,$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddSerialConsoleReadOnly	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddSerialConsoleReadOnly(const std::string& output) {$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddSerialConsoleReadWrite	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddSerialConsoleReadWrite(const std::string& output,$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddSerialSink	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::AddSerialSink() {$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+AddSink	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^void AudioTrackSourceImpl::AddSink(webrtc::AudioTrackSinkInterface* sink) {$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:void
+AddString	common/libs/net/netlink_request.cpp	/^void NetlinkRequest::AddString(uint16_t type, const std::string& value) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void
+AddSubscriber	host/frontend/webrtc/kernel_log_events_handler.cpp	/^int KernelLogEventsHandler::AddSubscriber($/;"	f	class:cuttlefish::KernelLogEventsHandler	typeref:typename:int
+AddTap	host/libs/vm_manager/crosvm_builder.cpp	/^SharedFD CrosvmBuilder::AddTap(const std::string& tap_name) {$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:SharedFD
+AddTapIface	host/libs/allocd/alloc_utils.cpp	/^bool AddTapIface(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+Address	common/libs/net/network_interface.h	/^  const std::string& Address() const {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:const std::string &
+AdjustSignalStrengthValue	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::AdjustSignalStrengthValue(int& value,$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+Adjusting APT Sources for Multiarch	multiarch-howto.md	/^# Adjusting APT Sources for Multiarch$/;"	c
+AfterSelect	host/commands/kernel_log_monitor/kernel_log_server.cc	/^void KernelLogServer::AfterSelect(const cuttlefish::SharedFDSet& fd_read) {$/;"	f	class:monitor::KernelLogServer	typeref:typename:void
+AggregateImage	host/libs/image_aggregator/image_aggregator.cc	/^void AggregateImage(const std::vector<ImagePartition>& partitions,$/;"	f	namespace:cuttlefish	typeref:typename:void
+AggregateProfiles	shared/config/task_profiles.json	/^  "AggregateProfiles": [$/;"	a
+AidlPackageCheck	tests/hal/hal_implementation_test.cpp	/^struct AidlPackageCheck {$/;"	s	file:
+Alias	common/libs/utils/flag_parser.cpp	/^Flag Flag::Alias(const FlagAlias& alias) && {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag
+Alias	common/libs/utils/flag_parser.cpp	/^Flag& Flag::Alias(const FlagAlias& alias) & {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag &
+AlignStride	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^inline int AlignStride(int width) {$/;"	f	namespace:cuttlefish::__anonfb30483e0111	typeref:typename:int
+AlignToPartitionSize	host/libs/image_aggregator/image_aggregator.cc	/^uint64_t AlignToPartitionSize(uint64_t size) {$/;"	f	namespace:cuttlefish	typeref:typename:uint64_t
+AlignToPowerOf2	common/libs/utils/size_utils.h	/^constexpr uint64_t AlignToPowerOf2(uint64_t val, uint8_t align_log) {$/;"	f	namespace:cuttlefish	typeref:typename:uint64_t
+AlignedSize	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t AlignedSize() const { return AlignToPartitionSize(size); }$/;"	f	struct:cuttlefish::__anon02806fd80111::PartitionInfo	typeref:typename:std::uint64_t	file:
+Allocate	host/commands/secure_env/fragile_tpm_storage.cpp	/^bool FragileTpmStorage::Allocate(const Json::Value& key, uint16_t size) {$/;"	f	class:cuttlefish::FragileTpmStorage	typeref:typename:bool
+Allocate	host/commands/secure_env/insecure_fallback_storage.cpp	/^bool InsecureFallbackStorage::Allocate(const Json::Value& key, uint16_t size) {$/;"	f	class:cuttlefish::InsecureFallbackStorage	typeref:typename:bool
+AllocateNetworkInterfaces	host/commands/assemble_cvd/alloc.cc	/^std::optional<IfaceConfig> AllocateNetworkInterfaces() {$/;"	f	namespace:cuttlefish	typeref:typename:std::optional<IfaceConfig>
+AllocateResourceID	host/libs/allocd/resource_manager.cpp	/^uint32_t ResourceManager::AllocateResourceID() {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:uint32_t
+AllocateSessionID	host/libs/allocd/resource_manager.cpp	/^uint32_t ResourceManager::AllocateSessionID() {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:uint32_t
+AllocateShm	host/libs/audio_connector/server.cpp	/^ScopedMMap AllocateShm(size_t size, const std::string& name, SharedFD* shm_fd) {$/;"	f	namespace:cuttlefish::__anon8078843e0111	typeref:typename:ScopedMMap
+Answer	host/libs/config/cuttlefish_config.h	/^  enum Answer {$/;"	g	class:cuttlefish::CuttlefishConfig
+Append	common/libs/net/netlink_request.h	/^  template <typename T> T* Append(const T& data) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:T *
+AppendAad	host/commands/secure_env/hmac_serializable.cpp	/^std::optional<std::vector<uint8_t>> HmacSerializable::AppendAad($/;"	f	class:cuttlefish::HmacSerializable	typeref:typename:std::optional<std::vector<uint8_t>>
+AppendBinaryRepresentation	host/libs/wmediumd_controller/wmediumd_api_protocol.cpp	/^static void AppendBinaryRepresentation(std::string& buf, const T& data) {$/;"	f	typeref:typename:void	file:
+AppendCommandArguments	host/commands/run_cvd/launch_streamer.cpp	/^  void AppendCommandArguments(Command& cmd) {$/;"	f	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:void	file:
+AppendData	host/libs/websocket/websocket_handler.cpp	/^void AppendData(const char* data, size_t len, std::string& buffer) {$/;"	f	namespace:cuttlefish::__anon79ba8e560111	typeref:typename:void
+AppendDataIn	host/libs/websocket/websocket_handler.cpp	/^void DynHandler::AppendDataIn(void* data, size_t len) {$/;"	f	class:cuttlefish::DynHandler	typeref:typename:void
+AppendDataOut	host/libs/websocket/websocket_handler.cpp	/^void DynHandler::AppendDataOut(const std::string& data) {$/;"	f	class:cuttlefish::DynHandler	typeref:typename:void
+AppendInNetworkByteOrder	common/libs/utils/tcp_socket.cpp	/^void AppendInNetworkByteOrder(Message* msg, const std::int32_t w) {$/;"	f	namespace:cuttlefish	typeref:typename:void
+AppendInNetworkByteOrder	common/libs/utils/tcp_socket.cpp	/^void AppendInNetworkByteOrder(Message* msg, const std::string& str) {$/;"	f	namespace:cuttlefish	typeref:typename:void
+AppendInNetworkByteOrder	common/libs/utils/tcp_socket.cpp	/^void AppendInNetworkByteOrder(Message* msg, const std::uint16_t s) {$/;"	f	namespace:cuttlefish	typeref:typename:void
+AppendInNetworkByteOrder	common/libs/utils/tcp_socket.cpp	/^void AppendInNetworkByteOrder(Message* msg, const std::uint32_t w) {$/;"	f	namespace:cuttlefish	typeref:typename:void
+AppendInNetworkByteOrder	common/libs/utils/tcp_socket.cpp	/^void AppendInNetworkByteOrder(Message* msg, const std::uint8_t b) {$/;"	f	namespace:cuttlefish	typeref:typename:void
+AppendNewElement	host/commands/modem_simulator/sim_service.cpp	/^XMLElement* SimService::SimFileSystem::AppendNewElement(XMLElement* parent,$/;"	f	class:cuttlefish::SimService::SimFileSystem	typeref:typename:XMLElement *
+AppendNewElementWithText	host/commands/modem_simulator/sim_service.cpp	/^XMLElement* SimService::SimFileSystem::AppendNewElementWithText($/;"	f	class:cuttlefish::SimService::SimFileSystem	typeref:typename:XMLElement *
+AppendPartition	host/libs/image_aggregator/image_aggregator.cc	/^  void AppendPartition(ImagePartition source) {$/;"	f	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:void	file:
+AppendPartition	host/libs/image_aggregator/image_aggregator.cc	/^  void AppendPartition(MultipleImagePartition source) {$/;"	f	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:void	file:
+AppendRaw	common/libs/net/netlink_request.cpp	/^void* NetlinkRequest::AppendRaw(const void* data, size_t length) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void *
+AppendTag	common/libs/net/netlink_request.cpp	/^nlattr* NetlinkRequest::AppendTag($/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:nlattr *
+AppendToBuffer	common/libs/confui/packet.h	/^void AppendToBuffer(Buffer& buffer, Args&&... args) {$/;"	f	namespace:cuttlefish::confui::packet::impl	typeref:typename:void
+AppendToLastParameter	common/libs/utils/subprocess.h	/^  void AppendToLastParameter(Args... args) {$/;"	f	class:cuttlefish::Command	typeref:typename:void
+AppendToMessage	common/libs/utils/tcp_socket.h	/^inline void AppendToMessage(Message*) {}$/;"	f	namespace:cuttlefish	typeref:typename:void
+AppendToMessage	common/libs/utils/tcp_socket.h	/^void AppendToMessage(Message* msg, T v, Ts... vals) {$/;"	f	namespace:cuttlefish	typeref:typename:void
+AppendVector	host/libs/config/bootconfig_args.cpp	/^void AppendVector(std::vector<T>* destination, const std::vector<T>& source) {$/;"	f	namespace:cuttlefish::__anond90bdb570111	typeref:typename:void
+AppendVector	host/libs/config/kernel_args.cpp	/^void AppendVector(std::vector<T>* destination, const std::vector<T>& source) {$/;"	f	namespace:cuttlefish::__anonfb53392e0111	typeref:typename:void
+ApplyChanges	common/libs/net/network_interface_manager.cpp	/^bool NetworkInterfaceManager::ApplyChanges(const NetworkInterface& iface) {$/;"	f	class:cuttlefish::NetworkInterfaceManager	typeref:typename:bool
+Arch	common/libs/utils/environment.h	/^enum class Arch {$/;"	g	namespace:cuttlefish
+Archive	common/libs/utils/archive.cpp	/^Archive::Archive(const std::string& file) : file(file) {$/;"	f	class:cuttlefish::Archive
+Archive	common/libs/utils/archive.h	/^class Archive {$/;"	c	namespace:cuttlefish
+ArgsToString	common/libs/confui/utils.h	/^std::string ArgsToString(Args&&... args) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string
+ArgsToStringWithDelim	common/libs/confui/utils.h	/^std::string ArgsToStringWithDelim(Delim&& delim, Args&&... args) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string
+ArgsToVec	common/libs/utils/flag_parser.cpp	/^std::vector<std::string> ArgsToVec(int argc, char** argv) {$/;"	f	namespace:cuttlefish	typeref:typename:std::vector<std::string>
+ArgumentToBuild	host/commands/fetcher/build_api.cc	/^Build ArgumentToBuild(BuildApi* build_api, const std::string& arg,$/;"	f	namespace:cuttlefish	typeref:typename:Build
+ArgvForSubprocess	host/commands/start/flag_forwarder.cc	/^std::vector<std::string> FlagForwarder::ArgvForSubprocess($/;"	f	class:FlagForwarder	typeref:typename:std::vector<std::string>
+Arm	common/libs/utils/environment.h	/^  Arm,$/;"	e	enum:cuttlefish::Arch
+Arm64	common/libs/utils/environment.h	/^  Arm64,$/;"	e	enum:cuttlefish::Arch
+Artifact	host/commands/fetcher/build_api.cc	/^Artifact::Artifact(const Json::Value& json_artifact) {$/;"	f	class:cuttlefish::Artifact
+Artifact	host/commands/fetcher/build_api.h	/^  Artifact(const std::string& name) : name(name) {}$/;"	f	class:cuttlefish::Artifact
+Artifact	host/commands/fetcher/build_api.h	/^class Artifact {$/;"	c	namespace:cuttlefish
+ArtifactToFile	host/commands/fetcher/build_api.cc	/^bool BuildApi::ArtifactToFile(const DeviceBuild& build,$/;"	f	class:cuttlefish::BuildApi	typeref:typename:bool
+ArtifactToFile	host/commands/fetcher/build_api.cc	/^bool BuildApi::ArtifactToFile(const DirectoryBuild& build,$/;"	f	class:cuttlefish::BuildApi	typeref:typename:bool
+ArtifactToFile	host/commands/fetcher/build_api.h	/^  bool ArtifactToFile(const Build& build, const std::string& artifact,$/;"	f	class:cuttlefish::BuildApi	typeref:typename:bool
+Artifacts	host/commands/fetcher/build_api.cc	/^std::vector<Artifact> BuildApi::Artifacts(const DeviceBuild& build) {$/;"	f	class:cuttlefish::BuildApi	typeref:typename:std::vector<Artifact>
+Artifacts	host/commands/fetcher/build_api.cc	/^std::vector<Artifact> BuildApi::Artifacts(const DirectoryBuild& build) {$/;"	f	class:cuttlefish::BuildApi	typeref:typename:std::vector<Artifact>
+Artifacts	host/commands/fetcher/build_api.h	/^ std::vector<Artifact> Artifacts(const Build& build) {$/;"	f	class:cuttlefish::BuildApi	typeref:typename:std::vector<Artifact>
+AsBashScript	common/libs/utils/subprocess.cpp	/^std::string Command::AsBashScript($/;"	f	class:cuttlefish::Command	typeref:typename:std::string
+AsCredentials	common/libs/utils/unix_sockets.cpp	/^Result<ucred> ControlMessage::AsCredentials() const {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:Result<ucred>
+AsSharedFDs	common/libs/utils/unix_sockets.cpp	/^Result<std::vector<SharedFD>> ControlMessage::AsSharedFDs() const {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:Result<std::vector<SharedFD>>
+AssembleCvdMain	host/commands/assemble_cvd/assemble_cvd.cc	/^int AssembleCvdMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+AssemblyPath	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::AssemblyPath(const std::string& file_name) const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+Attach	host/libs/wayland/wayland_surface.cpp	/^void Surface::Attach(struct wl_resource* buffer) {$/;"	f	class:wayland::Surface	typeref:typename:void
+AttestKey	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::AttestKey(const AttestKeyRequest& request, AttestKeyResponse* response) {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+AttestKey	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::AttestKey(const AttestKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+AudioChannelMap	host/libs/audio_connector/shm_layout.h	/^enum AudioChannelMap : uint8_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint8_t
+AudioClientConnection	host/libs/audio_connector/server.h	/^  AudioClientConnection(ScopedMMap tx_shm, ScopedMMap rx_shm,$/;"	f	class:cuttlefish::AudioClientConnection
+AudioClientConnection	host/libs/audio_connector/server.h	/^class AudioClientConnection {$/;"	c	namespace:cuttlefish
+AudioCommand	host/libs/audio_connector/commands.h	/^  AudioCommand(AudioCommandType type) : type_(type) {}$/;"	f	class:cuttlefish::AudioCommand
+AudioCommand	host/libs/audio_connector/commands.h	/^class AudioCommand {$/;"	c	namespace:cuttlefish
+AudioCommandType	host/libs/audio_connector/shm_layout.h	/^enum class AudioCommandType : uint32_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint32_t
+AudioDeviceModuleWrapper	host/frontend/webrtc/lib/streamer.cpp	/^  AudioDeviceModuleWrapper($/;"	f	class:cuttlefish::webrtc_streaming::__anonab9390d10111::AudioDeviceModuleWrapper	file:
+AudioDeviceModuleWrapper	host/frontend/webrtc/lib/streamer.cpp	/^class AudioDeviceModuleWrapper : public AudioSource {$/;"	c	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	file:
+AudioFrameBuffer	host/frontend/webrtc/lib/audio_frame_buffer.h	/^class AudioFrameBuffer {$/;"	c	namespace:cuttlefish::webrtc_streaming
+AudioHandler	host/frontend/webrtc/audio_handler.cpp	/^AudioHandler::AudioHandler($/;"	f	class:cuttlefish::AudioHandler
+AudioHandler	host/frontend/webrtc/audio_handler.h	/^class AudioHandler : public AudioServerExecutor {$/;"	c	namespace:cuttlefish
+AudioJackFeatures	host/libs/audio_connector/shm_layout.h	/^enum AudioJackFeatures: uint8_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint8_t
+AudioServer	host/libs/audio_connector/server.h	/^  AudioServer(SharedFD server_socket) : server_socket_(server_socket) {}$/;"	f	class:cuttlefish::AudioServer
+AudioServer	host/libs/audio_connector/server.h	/^class AudioServer {$/;"	c	namespace:cuttlefish
+AudioServerExecutor	host/libs/audio_connector/server.h	/^class AudioServerExecutor {$/;"	c	namespace:cuttlefish
+AudioSink	host/frontend/webrtc/lib/audio_sink.h	/^class AudioSink {$/;"	c	namespace:cuttlefish::webrtc_streaming
+AudioSource	host/frontend/webrtc/lib/audio_source.h	/^class AudioSource {$/;"	c	namespace:cuttlefish::webrtc_streaming
+AudioStatus	host/libs/audio_connector/shm_layout.h	/^enum class AudioStatus : uint32_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint32_t
+AudioStreamDirection	host/libs/audio_connector/shm_layout.h	/^enum class AudioStreamDirection : uint8_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint8_t
+AudioStreamFormat	host/libs/audio_connector/shm_layout.h	/^enum class AudioStreamFormat : uint8_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint8_t
+AudioStreamRate	host/libs/audio_connector/shm_layout.h	/^enum AudioStreamRate : uint8_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint8_t
+AudioTrackSourceImpl	host/frontend/webrtc/lib/audio_track_source_impl.h	/^class AudioTrackSourceImpl : public webrtc::AudioSourceInterface {$/;"	c	namespace:cuttlefish::webrtc_streaming
+AudioTrackSourceImplSinkWrapper	host/frontend/webrtc/lib/audio_track_source_impl.h	/^  AudioTrackSourceImplSinkWrapper(rtc::scoped_refptr<AudioTrackSourceImpl> obj)$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImplSinkWrapper
+AudioTrackSourceImplSinkWrapper	host/frontend/webrtc/lib/audio_track_source_impl.h	/^class AudioTrackSourceImplSinkWrapper : public AudioSink {$/;"	c	namespace:cuttlefish::webrtc_streaming
+Available devices &#8635;	host/frontend/webrtc_operator/assets/index.html	/^        <h1>Available devices <span id='refresh-list'>&#8635;<\/span><\/h1>$/;"	h
+AvailableConfigs	host/libs/config/config_flag.cpp	/^  const std::set<std::string>& AvailableConfigs() const {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigReader	typeref:typename:const std::set<std::string> &	file:
+AvailableFilesReport	host/commands/start/filesystem_explorer.cc	/^cuttlefish::FetcherConfig AvailableFilesReport() {$/;"	f	typeref:typename:cuttlefish::FetcherConfig
+AvailableSpaceAtPath	host/commands/assemble_cvd/disk_flags.cc	/^static uint64_t AvailableSpaceAtPath(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:uint64_t	file:
+BAND_MODE_10_800M_2	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_10_800M_2 = 15,       \/\/"Band Class 10" (Secondary 800-MHz Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_5_450M	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_5_450M = 10,          \/\/"Band Class 5" (450-MHz Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_7_700M_2	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_7_700M_2 = 12,        \/\/"Band Class 7" (Upper 700-MHz Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_8_1800M	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_8_1800M = 13,         \/\/"Band Class 8" (1800-MHz Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_9_900M	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_9_900M = 14,          \/\/"Band Class 9" (900-MHz Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_AUS	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_AUS = 4,              \/\/"AUS band" (GSM-900 \/ DCS-1800 \/ WCDMA-850 \/ WCDMA-IM/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_AUS_2	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_AUS_2 = 5,            \/\/"AUS band 2" (GSM-900 \/ DCS-1800 \/ WCDMA-850)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_AWS	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_AWS = 17,             \/\/"Band Class 15" (AWS Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_CELL_800	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_CELL_800 = 6,         \/\/"Cellular" (800-MHz Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_EURO	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_EURO = 1,             \/\/"EURO band" (GSM-900 \/ DCS-1800 \/ WCDMA-IMT-2000)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_EURO_PAMR_400M	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_EURO_PAMR_400M = 16,  \/\/"Band Class 11" (400-MHz European PAMR Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_IMT2000	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_IMT2000 = 11,         \/\/"Band Class 6" (2-GMHz IMT2000 Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_JPN	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_JPN = 3,              \/\/"JPN band" (WCDMA-800 \/ WCDMA-IMT-2000)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_JTACS	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_JTACS = 8,            \/\/"Band Class 3" (JTACS Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_KOREA_PCS	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_KOREA_PCS = 9,        \/\/"Band Class 4" (Korean PCS Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_PCS	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_PCS = 7,              \/\/"PCS" (1900-MHz Band)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_UNSPECIFIED = 0,      \/\/"unspecified" (selected by baseband automatically)$/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_USA	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_USA = 2,              \/\/"US band" (GSM-850 \/ PCS-1900 \/ WCDMA-850 \/ WCDMA-PCS/;"	e	enum:__anon0bfbaecf0703
+BAND_MODE_USA_2500M	guest/hals/ril/reference-libril/ril.h	/^    BAND_MODE_USA_2500M = 18        \/\/"Band Class 16" (US 2.5-GHz Band)$/;"	e	enum:__anon0bfbaecf0703
+BCDToString	host/commands/modem_simulator/pdu_parser.cpp	/^std::string PDUParser::BCDToString(std::string& data) {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:std::string
+BLOCK_SIZE	host/commands/secure_env/encrypted_serializable.cpp	/^static constexpr uint32_t BLOCK_SIZE = 16;$/;"	v	namespace:cuttlefish	typeref:typename:uint32_t	file:
+BLUETOOTH_PROCESS	guest/hals/ril/reference-libril/ril.cpp	/^#define BLUETOOTH_PROCESS /;"	d	file:
+BOARD_AVB_ALGORITHM	shared/BoardConfig.mk	/^BOARD_AVB_ALGORITHM := SHA256_RSA4096$/;"	m
+BOARD_AVB_BOOT_ALGORITHM	shared/BoardConfig.mk	/^BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA4096$/;"	m
+BOARD_AVB_BOOT_KEY_PATH	shared/BoardConfig.mk	/^BOARD_AVB_BOOT_KEY_PATH := external\/avb\/test\/data\/testkey_rsa4096.pem$/;"	m
+BOARD_AVB_BOOT_ROLLBACK_INDEX	shared/BoardConfig.mk	/^BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)$/;"	m
+BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION	shared/BoardConfig.mk	/^BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2$/;"	m
+BOARD_AVB_ENABLE	shared/BoardConfig.mk	/^BOARD_AVB_ENABLE := true$/;"	m
+BOARD_AVB_KEY_PATH	shared/BoardConfig.mk	/^BOARD_AVB_KEY_PATH := external\/avb\/test\/data\/testkey_rsa4096.pem$/;"	m
+BOARD_AVB_VBMETA_SYSTEM	shared/BoardConfig.mk	/^BOARD_AVB_VBMETA_SYSTEM := product system system_ext$/;"	m
+BOARD_AVB_VBMETA_SYSTEM_ALGORITHM	shared/BoardConfig.mk	/^BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA4096$/;"	m
+BOARD_AVB_VBMETA_SYSTEM_KEY_PATH	shared/BoardConfig.mk	/^BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external\/avb\/test\/data\/testkey_rsa4096.pem$/;"	m
+BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX	shared/BoardConfig.mk	/^BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)$/;"	m
+BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION	shared/BoardConfig.mk	/^BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 1$/;"	m
+BOARD_BOOTIMAGE_MAX_SIZE	shared/BoardConfig.mk	/^BOARD_BOOTIMAGE_MAX_SIZE := 8388608$/;"	m
+BOARD_BOOTIMAGE_PARTITION_SIZE	shared/BoardConfig.mk	/^BOARD_BOOTIMAGE_PARTITION_SIZE := 67108864$/;"	m
+BOARD_BOOTLOADER_IN_UPDATE_PACKAGE	shared/BoardConfig.mk	/^BOARD_BOOTLOADER_IN_UPDATE_PACKAGE := true$/;"	m
+BOARD_BOOT_HEADER_VERSION	shared/BoardConfig.mk	/^BOARD_BOOT_HEADER_VERSION := 4$/;"	m
+BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT	shared/BoardConfig.mk	/^BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT := true$/;"	m
+BOARD_BUILD_SYSTEM_ROOT_IMAGE	shared/BoardConfig.mk	/^BOARD_BUILD_SYSTEM_ROOT_IMAGE := false$/;"	m
+BOARD_DISK_IMAGE_MINIMUM_SIZE	shared/BoardConfig.mk	/^BOARD_DISK_IMAGE_MINIMUM_SIZE := 10737418240$/;"	m
+BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE	shared/BoardConfig.mk	/^  BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE := true$/;"	m
+BOARD_FLASH_BLOCK_SIZE	shared/BoardConfig.mk	/^BOARD_FLASH_BLOCK_SIZE := 512$/;"	m
+BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD	shared/BoardConfig.mk	/^BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD := dm-user.ko$/;"	m
+BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST	shared/BoardConfig.mk	/^BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := product system system_ext$/;"	m
+BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_SIZE	shared/BoardConfig.mk	/^BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_SIZE := 5771362304  # 5.375GiB$/;"	m
+BOARD_GOOGLE_VENDOR_DYNAMIC_PARTITIONS_PARTITION_LIST	shared/BoardConfig.mk	/^BOARD_GOOGLE_VENDOR_DYNAMIC_PARTITIONS_PARTITION_LIST := odm vendor vendor_dlkm odm_dlkm$/;"	m
+BOARD_GOOGLE_VENDOR_DYNAMIC_PARTITIONS_SIZE	shared/BoardConfig.mk	/^BOARD_GOOGLE_VENDOR_DYNAMIC_PARTITIONS_SIZE := 1472200704$/;"	m
+BOARD_GPU_DRIVERS	shared/BoardConfig.mk	/^BOARD_GPU_DRIVERS := virgl$/;"	m
+BOARD_HAVE_BLUETOOTH	shared/BoardConfig.mk	/^BOARD_HAVE_BLUETOOTH := true$/;"	m
+BOARD_HOSTAPD_DRIVER	shared/BoardConfig.mk	/^BOARD_HOSTAPD_DRIVER        := NL80211$/;"	m
+BOARD_HOSTAPD_PRIVATE_LIB	shared/BoardConfig.mk	/^BOARD_HOSTAPD_PRIVATE_LIB   := lib_driver_cmd_simulated_cf$/;"	m
+BOARD_INCLUDE_DTB_IN_BOOTIMG	shared/BoardConfig.mk	/^BOARD_INCLUDE_DTB_IN_BOOTIMG := true$/;"	m
+BOARD_IS_AUTOMOTIVE	shared/auto/device.mk	/^BOARD_IS_AUTOMOTIVE := true$/;"	m
+BOARD_MALLOC_ALIGNMENT	shared/BoardConfig.mk	/^BOARD_MALLOC_ALIGNMENT := 16$/;"	m
+BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT	shared/BoardConfig.mk	/^BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true$/;"	m
+BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT	shared/BoardConfig.mk	/^  BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true$/;"	m
+BOARD_ODMIMAGE_FILE_SYSTEM_TYPE	shared/BoardConfig.mk	/^BOARD_ODMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)$/;"	m
+BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE	shared/BoardConfig.mk	/^BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4$/;"	m
+BOARD_PARTIAL_OTA_UPDATE_PARTITIONS_LIST	shared/BoardConfig.mk	/^BOARD_PARTIAL_OTA_UPDATE_PARTITIONS_LIST := product system system_ext vbmeta_system$/;"	m
+BOARD_PREBUILT_BOOTLOADER	vsoc_arm64/bootloader.mk	/^BOARD_PREBUILT_BOOTLOADER := \\$/;"	m
+BOARD_PREBUILT_BOOTLOADER	vsoc_arm_only/bootloader.mk	/^BOARD_PREBUILT_BOOTLOADER := \\$/;"	m
+BOARD_PREBUILT_BOOTLOADER	vsoc_x86_64/bootloader.mk	/^BOARD_PREBUILT_BOOTLOADER := \\$/;"	m
+BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE	shared/BoardConfig.mk	/^BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)$/;"	m
+BOARD_RAMDISK_USE_LZ4	shared/BoardConfig.mk	/^BOARD_RAMDISK_USE_LZ4 := true$/;"	m
+BOARD_RECOVERYIMAGE_PARTITION_SIZE	shared/BoardConfig.mk	/^BOARD_RECOVERYIMAGE_PARTITION_SIZE := 67108864$/;"	m
+BOARD_SUPER_IMAGE_IN_UPDATE_PACKAGE	shared/BoardConfig.mk	/^BOARD_SUPER_IMAGE_IN_UPDATE_PACKAGE := true$/;"	m
+BOARD_SUPER_PARTITION_GROUPS	shared/BoardConfig.mk	/^BOARD_SUPER_PARTITION_GROUPS := google_system_dynamic_partitions google_vendor_dynamic_partition/;"	m
+BOARD_SUPER_PARTITION_SIZE	shared/BoardConfig.mk	/^BOARD_SUPER_PARTITION_SIZE := 7516192768  # 7GiB$/;"	m
+BOARD_SYSLOADER_MAX_SIZE	shared/BoardConfig.mk	/^BOARD_SYSLOADER_MAX_SIZE := 7340032$/;"	m
+BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE	shared/BoardConfig.mk	/^BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)$/;"	m
+BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE	shared/BoardConfig.mk	/^BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)$/;"	m
+BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE	shared/BoardConfig.mk	/^BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE := $(TARGET_USERDATAIMAGE_FILE_SYSTEM_TYPE)$/;"	m
+BOARD_USERDATAIMAGE_PARTITION_SIZE	shared/BoardConfig.mk	/^BOARD_USERDATAIMAGE_PARTITION_SIZE := $(TARGET_USERDATAIMAGE_PARTITION_SIZE)$/;"	m
+BOARD_USES_GENERIC_AUDIO	shared/BoardConfig.mk	/^BOARD_USES_GENERIC_AUDIO := false$/;"	m
+BOARD_USES_GENERIC_KERNEL_IMAGE	shared/BoardConfig.mk	/^BOARD_USES_GENERIC_KERNEL_IMAGE := true$/;"	m
+BOARD_USES_METADATA_PARTITION	shared/BoardConfig.mk	/^BOARD_USES_METADATA_PARTITION := true$/;"	m
+BOARD_USES_ODMIMAGE	shared/BoardConfig.mk	/^BOARD_USES_ODMIMAGE := true$/;"	m
+BOARD_USES_ODM_DLKMIMAGE	shared/BoardConfig.mk	/^BOARD_USES_ODM_DLKMIMAGE := true$/;"	m
+BOARD_USES_PRODUCTIMAGE	shared/BoardConfig.mk	/^BOARD_USES_PRODUCTIMAGE := true$/;"	m
+BOARD_USES_SYSTEM_EXTIMAGE	shared/BoardConfig.mk	/^BOARD_USES_SYSTEM_EXTIMAGE := true$/;"	m
+BOARD_USES_VENDORIMAGE	shared/BoardConfig.mk	/^BOARD_USES_VENDORIMAGE := true$/;"	m
+BOARD_USES_VENDOR_DLKMIMAGE	shared/BoardConfig.mk	/^BOARD_USES_VENDOR_DLKMIMAGE := true$/;"	m
+BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE	shared/BoardConfig.mk	/^BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE)$/;"	m
+BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE	shared/BoardConfig.mk	/^BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE := 67108864$/;"	m
+BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE	shared/BoardConfig.mk	/^BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4$/;"	m
+BOARD_WLAN_DEVICE	shared/BoardConfig.mk	/^BOARD_WLAN_DEVICE           := emulator$/;"	m
+BOARD_WLAN_DEVICE	shared/BoardConfig.mk	/^BOARD_WLAN_DEVICE           := wlan0$/;"	m
+BOARD_WPA_SUPPLICANT_DRIVER	shared/BoardConfig.mk	/^BOARD_WPA_SUPPLICANT_DRIVER := NL80211$/;"	m
+BOARD_WPA_SUPPLICANT_PRIVATE_LIB	shared/BoardConfig.mk	/^BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_simulated_cf$/;"	m
+BOOL_TO_INT	guest/hals/ril/reference-libril/ril_service.cpp	/^#define BOOL_TO_INT(/;"	d	file:
+BOOTLOADER_BUILD	host/libs/config/fetcher_config.h	/^  BOOTLOADER_BUILD,$/;"	e	enum:cuttlefish::FileSource
+BOOT_SECURITY_PATCH	shared/device.mk	/^BOOT_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH)$/;"	m
+BUFF_SIZE	common/libs/fs/shared_buf.cc	/^const size_t BUFF_SIZE = 1 << 14;$/;"	v	namespace:cuttlefish::__anoncf090a650111	typeref:typename:const size_t
+BUILD_API	host/commands/fetcher/build_api.cc	/^const std::string BUILD_API =$/;"	v	namespace:cuttlefish::__anon948178400111	typeref:typename:const std::string
+BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES	vsoc_x86/BoardConfig.mk	/^BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true$/;"	m
+BUILD_EMULATOR_OPENGL	shared/BoardConfig.mk	/^BUILD_EMULATOR_OPENGL := true$/;"	m
+BUILD_EMULATOR_OPENGL_DRIVER	shared/BoardConfig.mk	/^BUILD_EMULATOR_OPENGL_DRIVER := true$/;"	m
+BYTE	host/libs/confui/sign.cc	/^  BYTE = 165 \/* 0xA5 *\/,$/;"	e	enum:cuttlefish::confui::TestKeyBits	file:
+BYTE_STRING	host/libs/confui/cbor.h	/^    BYTE_STRING = 2,$/;"	e	enum:cuttlefish::confui::Cbor::Type
+BackToPool	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^void BackToPool(std::vector<uint8_t> item) {$/;"	f	namespace:cuttlefish::__anonfb30483e0111	typeref:typename:void
+BadMessage	host/libs/audio_connector/buffers.h	/^  BadMessage,$/;"	e	enum:cuttlefish::Status
+BadRequest	host/libs/websocket/websocket_handler.h	/^  BadRequest = 400,$/;"	e	enum:cuttlefish::HttpStatusCode
+BaseDependencyTag	build/cvd-host-package.go	/^	blueprint.BaseDependencyTag$/;"	M	struct:cuttlefish.dependencyTag	typeref:typename:blueprint.BaseDependencyTag
+Bases	host/commands/run_cvd/launch.cc	/^  using Bases = Multi::Bases<CommandSource, DiagnosticInformation, Feature>;$/;"	t	function:cuttlefish::launchComponent	typeref:typename:Multi::Bases<CommandSource,DiagnosticInformation,Feature>	file:
+Bases	host/libs/config/inject.h	/^  struct Bases {$/;"	s	struct:cuttlefish::Multibindings
+BeforeSelect	host/commands/kernel_log_monitor/kernel_log_server.cc	/^void KernelLogServer::BeforeSelect(cuttlefish::SharedFDSet* fd_read) const {$/;"	f	class:monitor::KernelLogServer	typeref:typename:void
+BeginOperation	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::BeginOperation(const BeginOperationRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+BeginOperation	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::BeginOperation(const BeginOperationRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+Beginning	host/libs/image_aggregator/image_aggregator.cc	/^  GptBeginning Beginning() const {$/;"	f	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:GptBeginning	file:
+Bind	common/libs/fs/shared_fd.cpp	/^int FileInstance::Bind(const struct sockaddr* addr, socklen_t addrlen) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+BindCompositorInterface	host/libs/wayland/wayland_compositor.cpp	/^void BindCompositorInterface(wl_display* display, Surfaces* surfaces) {$/;"	f	namespace:wayland	typeref:typename:void
+BindDmabufInterface	host/libs/wayland/wayland_dmabuf.cpp	/^void BindDmabufInterface(wl_display* display) {$/;"	f	namespace:wayland	typeref:typename:void
+BindSeatInterface	host/libs/wayland/wayland_seat.cpp	/^void BindSeatInterface(wl_display* display) {$/;"	f	namespace:wayland	typeref:typename:void
+BindShellInterface	host/libs/wayland/wayland_shell.cpp	/^void BindShellInterface(wl_display* display) {$/;"	f	namespace:wayland	typeref:typename:void
+BindSubcompositorInterface	host/libs/wayland/wayland_subcompositor.cpp	/^void BindSubcompositorInterface(wl_display* display) {$/;"	f	namespace:wayland	typeref:typename:void
+BindVirtioGpuMetadataInterface	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^void BindVirtioGpuMetadataInterface(wl_display* display, Surfaces* surfaces) {$/;"	f	namespace:wayland	typeref:typename:void
+BitsPerSample	host/frontend/webrtc/audio_handler.cpp	/^int BitsPerSample(uint8_t virtio_format) {$/;"	f	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:int
+Bluetooth Console	host/frontend/webrtc_operator/assets/client.html	/^          <h2>Bluetooth Console<\/h2>$/;"	i
+BluetoothChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^BluetoothChannelHandler::BluetoothChannelHandler($/;"	f	class:cuttlefish::webrtc_streaming::BluetoothChannelHandler
+BluetoothChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^class BluetoothChannelHandler : public webrtc::DataChannelObserver {$/;"	c	namespace:cuttlefish::webrtc_streaming	file:
+BluetoothChecker	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java	/^    public BluetoothChecker(Context context) {$/;"	m	class:BluetoothChecker
+BluetoothChecker	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java	/^public class BluetoothChecker extends JobBase {$/;"	c
+BluetoothConnector	host/commands/run_cvd/launch.cc	/^class BluetoothConnector : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+BluetoothDeathRecipient	guest/hals/bt/remote/remote_bluetooth.cpp	/^  BluetoothDeathRecipient(const sp<IBluetoothHci> hci) : mHci(hci) {}$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothDeathRecipient	file:
+BluetoothDeathRecipient	guest/hals/bt/remote/remote_bluetooth.cpp	/^class BluetoothDeathRecipient : public hidl_death_recipient {$/;"	c	namespace:android::hardware::bluetooth::V1_1::remote	file:
+BluetoothHandler	host/frontend/webrtc/bluetooth_handler.cpp	/^BluetoothHandler::BluetoothHandler($/;"	f	class:cuttlefish::webrtc_streaming::BluetoothHandler
+BluetoothHandler	host/frontend/webrtc/bluetooth_handler.h	/^struct BluetoothHandler {$/;"	s	namespace:cuttlefish::webrtc_streaming
+BluetoothHci	guest/hals/bt/remote/remote_bluetooth.cpp	/^BluetoothHci::BluetoothHci(const std::string& dev_path)$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci
+BluetoothHci	guest/hals/bt/remote/remote_bluetooth.h	/^class BluetoothHci : public IBluetoothHci {$/;"	c	namespace:android::hardware::bluetooth::V1_1::remote
+Boost	shared/config/task_profiles.json	/^            "Boost": "0",$/;"	s	object:Profiles.27.Actions.0.Params
+Boost	shared/config/task_profiles.json	/^            "Boost": "50%",$/;"	s	object:Profiles.26.Actions.0.Params
+BootCompleted	host/commands/kernel_log_monitor/kernel_log_server.h	/^  BootCompleted = 1,$/;"	e	enum:monitor::Event
+BootCompleted	host/commands/run_cvd/boot_state_machine.cc	/^  bool BootCompleted() const { return state_ & kGuestBootCompleted; }$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:bool	file:
+BootFailed	host/commands/kernel_log_monitor/kernel_log_server.h	/^  BootFailed = 2,$/;"	e	enum:monitor::Event
+BootFailed	host/commands/run_cvd/boot_state_machine.cc	/^  bool BootFailed() const { return state_ & kGuestBootFailed; }$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:bool	file:
+BootImageRepacker	host/commands/assemble_cvd/disk_flags.cc	/^class BootImageRepacker : public Feature {$/;"	c	namespace:cuttlefish	file:
+BootStarted	host/commands/kernel_log_monitor/kernel_log_server.h	/^  BootStarted = 0,$/;"	e	enum:monitor::Event
+BootconfigArgsFromConfig	host/libs/config/bootconfig_args.cpp	/^std::vector<std::string> BootconfigArgsFromConfig($/;"	f	namespace:cuttlefish	typeref:typename:std::vector<std::string>
+Boundary	host/libs/confui/host_renderer.h	/^  struct Boundary {            \/\/ inclusive but.. LayoutElement's size is float$/;"	s	class:cuttlefish::confui::ConfUiRenderer
+BringUpIface	host/libs/allocd/alloc_utils.cpp	/^bool BringUpIface(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+BroadcastAddress	common/libs/net/network_interface.h	/^  const std::string& BroadcastAddress() const {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:const std::string &
+BroadcastConfig	host/commands/modem_simulator/sms_service.h	/^  struct BroadcastConfig {$/;"	s	class:cuttlefish::SmsService
+BufferType	common/libs/confui/packet_types.h	/^using BufferType = std::vector<std::uint8_t>;$/;"	t	namespace:cuttlefish::confui::packet	typeref:typename:std::vector<std::uint8_t>
+Build	host/commands/fetcher/build_api.h	/^using Build = std::variant<DeviceBuild, DirectoryBuild>;$/;"	t	namespace:cuttlefish	typeref:typename:std::variant<DeviceBuild,DirectoryBuild>
+Build	host/frontend/webrtc_operator/client_handler.cpp	/^std::shared_ptr<WebSocketHandler> ClientWSHandlerFactory::Build(struct lws* wsi) {$/;"	f	class:cuttlefish::ClientWSHandlerFactory	typeref:typename:std::shared_ptr<WebSocketHandler>
+Build	host/frontend/webrtc_operator/device_handler.cpp	/^std::shared_ptr<WebSocketHandler> DeviceHandlerFactory::Build(struct lws* wsi) {$/;"	f	class:cuttlefish::DeviceHandlerFactory	typeref:typename:std::shared_ptr<WebSocketHandler>
+BuildAddrRequest	common/libs/net/network_interface_manager.cpp	/^NetlinkRequest BuildAddrRequest($/;"	f	namespace:cuttlefish::__anon72e4bdb10111	typeref:typename:NetlinkRequest
+BuildApi	host/commands/fetcher/build_api.cc	/^BuildApi::BuildApi(CurlWrapper& curl, CredentialSource* credential_source)$/;"	f	class:cuttlefish::BuildApi
+BuildApi	host/commands/fetcher/build_api.h	/^class BuildApi {$/;"	c	namespace:cuttlefish
+BuildConfigImpl	host/commands/modem_simulator/nvram_config.cpp	/^NvramConfig* NvramConfig::BuildConfigImpl(size_t num_instances, int sim_type) {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:NvramConfig *
+BuildConfigImpl	host/libs/config/cuttlefish_config.cpp	/^\/*static*\/ CuttlefishConfig* CuttlefishConfig::BuildConfigImpl() {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:CuttlefishConfig *
+BuildLinkRequest	common/libs/net/network_interface_manager.cpp	/^NetlinkRequest BuildLinkRequest($/;"	f	namespace:cuttlefish::__anon72e4bdb10111	typeref:typename:NetlinkRequest
+BuildParameter	common/libs/utils/subprocess.cpp	/^void Command::BuildParameter(std::stringstream* stream, SharedFD shared_fd) {$/;"	f	class:cuttlefish::Command	typeref:typename:void
+BuildParameter	common/libs/utils/subprocess.h	/^  void BuildParameter(std::stringstream* stream, T t) {$/;"	f	class:cuttlefish::Command	typeref:typename:void
+BuildParameter	common/libs/utils/subprocess.h	/^  void BuildParameter(std::stringstream* stream, T t, Args... args) {$/;"	f	class:cuttlefish::Command	typeref:typename:void
+BuildProtectedDataPayload	host/commands/secure_env/tpm_remote_provisioning_context.cpp	/^TpmRemoteProvisioningContext::BuildProtectedDataPayload($/;"	f	class:cuttlefish::TpmRemoteProvisioningContext	typeref:typename:ErrMsgOr<std::vector<uint8_t>>
+BuildStatus	host/commands/fetcher/build_api.cc	/^std::string BuildApi::BuildStatus(const DeviceBuild& build) {$/;"	f	class:cuttlefish::BuildApi	typeref:typename:std::string
+BuildSuperImage	host/commands/assemble_cvd/super_image_mixer.cc	/^bool BuildSuperImage(const std::string& combined_target_zip,$/;"	f	namespace:cuttlefish::__anonae6530d30111	typeref:typename:bool
+BuiltInAECIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::BuiltInAECIsAvailable() const { return false; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+BuiltInAGCIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::BuiltInAGCIsAvailable() const { return false; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+BuiltInNSIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::BuiltInNSIsAvailable() const { return false; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+ByteBufferProxy	host/libs/confui/sign_utils.h	/^  ByteBufferProxy($/;"	f	class:cuttlefish::confui::support::ByteBufferProxy
+ByteBufferProxy	host/libs/confui/sign_utils.h	/^  ByteBufferProxy() : data_(nullptr), size_(0) {}$/;"	f	class:cuttlefish::confui::support::ByteBufferProxy
+ByteBufferProxy	host/libs/confui/sign_utils.h	/^  ByteBufferProxy(const char (&buffer)[size])$/;"	f	class:cuttlefish::confui::support::ByteBufferProxy
+ByteBufferProxy	host/libs/confui/sign_utils.h	/^  ByteBufferProxy(const uint8_t (&buffer)[size]) : data_(buffer), size_(size) {}$/;"	f	class:cuttlefish::confui::support::ByteBufferProxy
+ByteBufferProxy	host/libs/confui/sign_utils.h	/^class ByteBufferProxy {$/;"	c	namespace:cuttlefish::confui::support
+ByteVecToString	common/libs/confui/protocol_types.cpp	/^static std::string ByteVecToString(const std::vector<T>& v) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string	file:
+BytesPerPixel	host/libs/screen_connector/screen_connector_common.h	/^  static constexpr std::uint32_t BytesPerPixel() { return 4; }$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:std::uint32_t
+CALL_FAIL_ACCESS_CLASS_BLOCKED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_ACCESS_CLASS_BLOCKED = 260, \/* Access class barring *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_ACCESS_INFORMATION_DISCARDED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_ACCESS_INFORMATION_DISCARDED = 43,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_ACM_LIMIT_EXCEEDED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_ACM_LIMIT_EXCEEDED = 68,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_BEARER_CAPABILITY_NOT_AUTHORIZED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_BEARER_CAPABILITY_NOT_AUTHORIZED = 57,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_BEARER_CAPABILITY_UNAVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_BEARER_CAPABILITY_UNAVAILABLE = 58,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_BEARER_SERVICE_NOT_IMPLEMENTED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_BEARER_SERVICE_NOT_IMPLEMENTED = 65,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_BUSY	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_BUSY = 17,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CALL_BARRED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CALL_BARRED = 240,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CALL_REJECTED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CALL_REJECTED = 21,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_ACCESS_BLOCKED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_ACCESS_BLOCKED = 1009, \/* CDMA network access probes blocked *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_ACCESS_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_ACCESS_FAILURE = 1006,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_DROP	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_DROP = 1001,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_INTERCEPT	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_INTERCEPT = 1002,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_LOCKED_UNTIL_POWER_CYCLE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_NOT_EMERGENCY	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_NOT_EMERGENCY = 1008, \/* For non-emergency number dialed$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_PREEMPTED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_PREEMPTED = 1007,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_REORDER	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_REORDER = 1003,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_RETRY_ORDER	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_RETRY_ORDER = 1005,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CDMA_SO_REJECT	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CDMA_SO_REJECT = 1004,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CHANNEL_UNACCEPTABLE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CHANNEL_UNACCEPTABLE = 6,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CONDITIONAL_IE_ERROR	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CONDITIONAL_IE_ERROR = 100,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_CONGESTION	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_CONGESTION = 34,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_DESTINATION_OUT_OF_ORDER	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_DESTINATION_OUT_OF_ORDER = 27,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_DIAL_MODIFIED_TO_DIAL	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_DIAL_MODIFIED_TO_DIAL = 246,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_DIAL_MODIFIED_TO_SS	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_DIAL_MODIFIED_TO_SS = 245,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_DIAL_MODIFIED_TO_USSD	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_DIAL_MODIFIED_TO_USSD = 244, \/* STK Call Control *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_ERROR_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_ERROR_UNSPECIFIED = 0xffff \/* This error will be deprecated soon,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_FACILITY_REJECTED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_FACILITY_REJECTED = 29,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_FDN_BLOCKED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_FDN_BLOCKED = 241,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_IMEI_NOT_ACCEPTED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_IMEI_NOT_ACCEPTED = 243,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_IMSI_UNKNOWN_IN_VLR	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_IMSI_UNKNOWN_IN_VLR = 242,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_INCOMING_CALLS_BARRED_WITHIN_CUG	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_INCOMING_CALLS_BARRED_WITHIN_CUG = 55,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_INCOMPATIBLE_DESTINATION	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_INCOMPATIBLE_DESTINATION = 88,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_INFORMATION_ELEMENT_NON_EXISTENT	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_INFORMATION_ELEMENT_NON_EXISTENT = 99,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_INTERWORKING_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_INTERWORKING_UNSPECIFIED = 127,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_INVALID_MANDATORY_INFORMATION	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_INVALID_MANDATORY_INFORMATION = 96,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_INVALID_NUMBER_FORMAT	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_INVALID_NUMBER_FORMAT = 28,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_INVALID_TRANSACTION_IDENTIFIER	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_INVALID_TRANSACTION_IDENTIFIER = 81,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_INVALID_TRANSIT_NW_SELECTION	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_INVALID_TRANSIT_NW_SELECTION = 91,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_MESSAGE_TYPE_NON_IMPLEMENTED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_MESSAGE_TYPE_NON_IMPLEMENTED = 97,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NETWORK_DETACH	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NETWORK_DETACH = 261, \/* Explicit network detach *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NETWORK_OUT_OF_ORDER	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NETWORK_OUT_OF_ORDER = 38,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NETWORK_REJECT	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NETWORK_REJECT = 252, \/* Explicit network reject *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NETWORK_RESP_TIMEOUT	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NETWORK_RESP_TIMEOUT = 251, \/* No response from network *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NORMAL	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NORMAL = 16,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NORMAL_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NORMAL_UNSPECIFIED = 31,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NO_ANSWER_FROM_USER	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NO_ANSWER_FROM_USER = 19,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NO_ROUTE_TO_DESTINATION	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NO_ROUTE_TO_DESTINATION = 3,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NO_USER_RESPONDING	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NO_USER_RESPONDING = 18,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NO_VALID_SIM	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NO_VALID_SIM = 249, \/* No valid SIM is present *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_NUMBER_CHANGED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_NUMBER_CHANGED = 22,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_1	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_1 = 0xf001,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_10	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_10 = 0xf00a,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_11	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_11 = 0xf00b,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_12	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_12 = 0xf00c,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_13	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_13 = 0xf00d,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_14	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_14 = 0xf00e,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_15	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_15 = 0xf00f,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_2	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_2 = 0xf002,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_3	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_3 = 0xf003,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_4	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_4 = 0xf004,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_5	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_5 = 0xf005,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_6	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_6 = 0xf006,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_7	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_7 = 0xf007,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_8	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_8 = 0xf008,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OEM_CAUSE_9	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OEM_CAUSE_9 = 0xf009,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 70,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OPERATOR_DETERMINED_BARRING	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OPERATOR_DETERMINED_BARRING = 8,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_OUT_OF_SERVICE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_OUT_OF_SERVICE = 248, \/* No cellular coverage *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_PREEMPTION	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_PREEMPTION = 25,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_PROTOCOL_ERROR_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_PROTOCOL_ERROR_UNSPECIFIED = 111,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_QOS_UNAVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_QOS_UNAVAILABLE = 49,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_ACCESS_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_ACCESS_FAILURE = 253, \/* RRC connection failure. Eg.RACH *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_INTERNAL_ERROR	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_INTERNAL_ERROR = 250, \/* Internal error at Modem *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_LINK_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_LINK_FAILURE = 254, \/* Radio Link Failure *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_LINK_LOST	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_LINK_LOST = 255, \/* Radio link lost due to poor coverage *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_OFF	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_OFF = 247, \/* Radio is OFF *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_RELEASE_ABNORMAL	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_RELEASE_ABNORMAL = 259, \/* RRC connection release, abnormal *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_RELEASE_NORMAL	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_RELEASE_NORMAL = 258, \/* RRC connection release, normal *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_SETUP_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_SETUP_FAILURE = 257, \/* RRC connection setup failure *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RADIO_UPLINK_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RADIO_UPLINK_FAILURE = 256, \/* Radio uplink failure *\/$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RECOVERY_ON_TIMER_EXPIRED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RECOVERY_ON_TIMER_EXPIRED = 102,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_REQUESTED_CIRCUIT_OR_CHANNEL_NOT_AVAILABLE = 44,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_REQUESTED_FACILITY_NOT_IMPLEMENTED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_REQUESTED_FACILITY_NOT_IMPLEMENTED = 69,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_REQUESTED_FACILITY_NOT_SUBSCRIBED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_REQUESTED_FACILITY_NOT_SUBSCRIBED = 50,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RESOURCES_UNAVAILABLE_OR_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 47,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_RESP_TO_STATUS_ENQUIRY	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_RESP_TO_STATUS_ENQUIRY = 30,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_SEMANTICALLY_INCORRECT_MESSAGE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_SEMANTICALLY_INCORRECT_MESSAGE = 95,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_SERVICE_OPTION_NOT_AVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_SERVICE_OPTION_NOT_AVAILABLE = 63,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_SERVICE_OR_OPTION_NOT_IMPLEMENTED	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_SERVICE_OR_OPTION_NOT_IMPLEMENTED = 79,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_SWITCHING_EQUIPMENT_CONGESTION	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_SWITCHING_EQUIPMENT_CONGESTION = 42,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_TEMPORARY_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_TEMPORARY_FAILURE = 41,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_UNOBTAINABLE_NUMBER	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_UNOBTAINABLE_NUMBER = 1,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_FAIL_USER_NOT_MEMBER_OF_CUG	guest/hals/ril/reference-libril/ril.h	/^    CALL_FAIL_USER_NOT_MEMBER_OF_CUG = 87,$/;"	e	enum:__anon0bfbaecf2d03
+CALL_ONREQUEST	guest/hals/ril/reference-libril/ril_config.cpp	/^#define CALL_ONREQUEST(/;"	d	file:
+CALL_ONREQUEST	guest/hals/ril/reference-libril/ril_service.cpp	/^#define CALL_ONREQUEST(/;"	d	file:
+CALL_ONSTATEREQUEST	guest/hals/ril/reference-libril/ril_config.cpp	/^#define CALL_ONSTATEREQUEST(/;"	d	file:
+CALL_ONSTATEREQUEST	guest/hals/ril/reference-libril/ril_service.cpp	/^#define CALL_ONSTATEREQUEST(/;"	d	file:
+CALL_STATE_ACTIVE	host/commands/modem_simulator/call_service.h	/^      CALL_STATE_ACTIVE = 0,$/;"	e	enum:cuttlefish::CallService::CallStatus::CallState
+CALL_STATE_ALERTING	host/commands/modem_simulator/call_service.h	/^      CALL_STATE_ALERTING,$/;"	e	enum:cuttlefish::CallService::CallStatus::CallState
+CALL_STATE_DIALING	host/commands/modem_simulator/call_service.h	/^      CALL_STATE_DIALING,$/;"	e	enum:cuttlefish::CallService::CallStatus::CallState
+CALL_STATE_HANGUP	host/commands/modem_simulator/call_service.h	/^      CALL_STATE_HANGUP$/;"	e	enum:cuttlefish::CallService::CallStatus::CallState
+CALL_STATE_HELD	host/commands/modem_simulator/call_service.h	/^      CALL_STATE_HELD,$/;"	e	enum:cuttlefish::CallService::CallStatus::CallState
+CALL_STATE_INCOMING	host/commands/modem_simulator/call_service.h	/^      CALL_STATE_INCOMING,$/;"	e	enum:cuttlefish::CallService::CallStatus::CallState
+CALL_STATE_WAITING	host/commands/modem_simulator/call_service.h	/^      CALL_STATE_WAITING,$/;"	e	enum:cuttlefish::CallService::CallStatus::CallState
+CAPABILITY	common/libs/concurrency/thread_annotations.h	/^#define CAPABILITY(/;"	d
+CATEGORY_AIEC	guest/hals/ril/reference-libril/ril.h	/^    CATEGORY_AIEC            = 1 << 6,  \/* Automatically Initiated eCall (AIeC) *\/$/;"	e	enum:__anon0bfbaecfb403
+CATEGORY_AMBULANCE	guest/hals/ril/reference-libril/ril.h	/^    CATEGORY_AMBULANCE       = 1 << 1,$/;"	e	enum:__anon0bfbaecfb403
+CATEGORY_FIRE_BRIGADE	guest/hals/ril/reference-libril/ril.h	/^    CATEGORY_FIRE_BRIGADE    = 1 << 2,$/;"	e	enum:__anon0bfbaecfb403
+CATEGORY_MARINE_GUARD	guest/hals/ril/reference-libril/ril.h	/^    CATEGORY_MARINE_GUARD    = 1 << 3,$/;"	e	enum:__anon0bfbaecfb403
+CATEGORY_MIEC	guest/hals/ril/reference-libril/ril.h	/^    CATEGORY_MIEC            = 1 << 5,  \/* Manually Initiated eCall (MIeC) *\/$/;"	e	enum:__anon0bfbaecfb403
+CATEGORY_MOUNTAIN_RESCUE	guest/hals/ril/reference-libril/ril.h	/^    CATEGORY_MOUNTAIN_RESCUE = 1 << 4,$/;"	e	enum:__anon0bfbaecfb403
+CATEGORY_POLICE	guest/hals/ril/reference-libril/ril.h	/^    CATEGORY_POLICE          = 1 << 0,$/;"	e	enum:__anon0bfbaecfb403
+CATEGORY_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    CATEGORY_UNSPECIFIED     = 0,        \/* General emergency call, all categories *\/$/;"	e	enum:__anon0bfbaecfb403
+CD	host/commands/modem_simulator/sup_service.h	/^      CD          = 6,  \/\/ communication deflection$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::Reason
+CDISK_MAGIC	host/libs/image_aggregator/image_aggregator.cc	/^static const std::string CDISK_MAGIC = "composite_disk\\x1d";$/;"	v	namespace:cuttlefish::__anon02806fd80111	typeref:typename:const std::string	file:
+CDMA	guest/hals/ril/reference-ril/reference-ril.c	/^#define CDMA /;"	d	file:
+CDMA2000	guest/hals/ril/reference-libril/ril.h	/^    CDMA2000 = 0x05,    \/\/ CDMA 2000 Radio AccessNetwork$/;"	e	enum:__anon0bfbaecfa503
+CDMA_ALPHA_INFO_BUFFER_LENGTH	guest/hals/ril/reference-libril/ril.h	/^#define CDMA_ALPHA_INFO_BUFFER_LENGTH /;"	d
+CDMA_NUMBER_INFO_BUFFER_LENGTH	guest/hals/ril/reference-libril/ril.h	/^#define CDMA_NUMBER_INFO_BUFFER_LENGTH /;"	d
+CDMA_OTA_PROVISION_STATUS_A_KEY_EXCHANGED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_A_KEY_EXCHANGED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_COMMITTED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_COMMITTED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_IMSI_DOWNLOADED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_IMSI_DOWNLOADED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_MDN_DOWNLOADED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_MDN_DOWNLOADED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_NAM_DOWNLOADED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_NAM_DOWNLOADED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_OTAPA_ABORTED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_OTAPA_ABORTED$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_OTAPA_STARTED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_OTAPA_STARTED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_OTAPA_STOPPED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_OTAPA_STOPPED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_PRL_DOWNLOADED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_PRL_DOWNLOADED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_SPC_RETRIES_EXCEEDED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_SPC_RETRIES_EXCEEDED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_SPL_UNLOCKED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_SPL_UNLOCKED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_OTA_PROVISION_STATUS_SSD_UPDATED	guest/hals/ril/reference-libril/ril.h	/^    CDMA_OTA_PROVISION_STATUS_SSD_UPDATED,$/;"	e	enum:__anon0bfbaecf4503
+CDMA_SUBSCRIPTION_SOURCE_NV	guest/hals/ril/reference-libril/ril.h	/^   CDMA_SUBSCRIPTION_SOURCE_NV = 1$/;"	e	enum:__anon0bfbaecf0c03
+CDMA_SUBSCRIPTION_SOURCE_RUIM_SIM	guest/hals/ril/reference-libril/ril.h	/^   CDMA_SUBSCRIPTION_SOURCE_RUIM_SIM = 0,$/;"	e	enum:__anon0bfbaecf0c03
+CDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_SignalStrength     CDMA_SignalStrength;$/;"	m	struct:__anon0bfbaecf5108	typeref:typename:RIL_CDMA_SignalStrength
+CDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_SignalStrength     CDMA_SignalStrength;$/;"	m	struct:__anon0bfbaecf5208	typeref:typename:RIL_CDMA_SignalStrength
+CDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_SignalStrength     CDMA_SignalStrength;$/;"	m	struct:__anon0bfbaecf5308	typeref:typename:RIL_CDMA_SignalStrength
+CDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_SignalStrength CDMA_SignalStrength;$/;"	m	struct:__anon0bfbaecf4f08	typeref:typename:RIL_CDMA_SignalStrength
+CDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_SignalStrength CDMA_SignalStrength;$/;"	m	struct:__anon0bfbaecf5008	typeref:typename:RIL_CDMA_SignalStrength
+CELL_CONNECTION_NONE	guest/hals/ril/reference-libril/ril.h	/^    CELL_CONNECTION_NONE = 0,           \/\/ Cell is not a serving cell.$/;"	e	enum:__anon0bfbaecf6d03
+CELL_CONNECTION_PRIMARY_SERVING	guest/hals/ril/reference-libril/ril.h	/^    CELL_CONNECTION_PRIMARY_SERVING,    \/\/ UE has connection to cell for signalling and$/;"	e	enum:__anon0bfbaecf6d03
+CELL_CONNECTION_SECONDARY_SERVING	guest/hals/ril/reference-libril/ril.h	/^    CELL_CONNECTION_SECONDARY_SERVING,  \/\/ UE has connection to cell for data (3GPP 36.331, 25/;"	e	enum:__anon0bfbaecf6d03
+CFB	host/commands/modem_simulator/sup_service.h	/^      CFB         = 1,  \/\/communication forwarding on busy user$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::Reason
+CFNL	host/commands/modem_simulator/sup_service.h	/^      CFNL        = 7,  \/\/ communication forwarding on not logged-in$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::Reason
+CFNR	host/commands/modem_simulator/sup_service.h	/^      CFNR        = 2,  \/\/ communication forwarding on no reply$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::Reason
+CFNRC	host/commands/modem_simulator/sup_service.h	/^      CFNRC       = 3,  \/\/ communication forwarding on subscriber not reachable$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::Reason
+CFU	host/commands/modem_simulator/sup_service.h	/^      CFU         = 0,  \/\/ communication forwarding unconditional$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::Reason
+CGFPCCFG	guest/hals/ril/reference-ril/reference-ril.c	/^#define  CGFPCCFG /;"	d	file:
+CHMAPS	host/frontend/webrtc/audio_handler.cpp	/^const virtio_snd_chmap_info CHMAPS[] = {{$/;"	v	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:const virtio_snd_chmap_info[]
+CHUNK_RECV_MAX_LEN	host/commands/tombstone_receiver/main.cpp	/^static constexpr size_t CHUNK_RECV_MAX_LEN = 1024;$/;"	v	namespace:cuttlefish	typeref:typename:size_t	file:
+CLIR_INVOCATION	host/commands/modem_simulator/sup_service.h	/^      CLIR_INVOCATION        = 1,   \/\/ restrict CLI presentation$/;"	e	enum:cuttlefish::SupService::ClirStatusInfo::ClirType
+CLIR_NOT_PROVISIONED	host/commands/modem_simulator/sup_service.h	/^      CLIR_NOT_PROVISIONED         = 0,$/;"	e	enum:cuttlefish::SupService::ClirStatusInfo::ClirStatus
+CLIR_PRESENTATION_ALLOWED	host/commands/modem_simulator/sup_service.h	/^      CLIR_PRESENTATION_ALLOWED    = 4,$/;"	e	enum:cuttlefish::SupService::ClirStatusInfo::ClirStatus
+CLIR_PRESENTATION_RESTRICTED	host/commands/modem_simulator/sup_service.h	/^      CLIR_PRESENTATION_RESTRICTED = 3,$/;"	e	enum:cuttlefish::SupService::ClirStatusInfo::ClirStatus
+CLIR_PROVISIONED	host/commands/modem_simulator/sup_service.h	/^      CLIR_PROVISIONED             = 1,$/;"	e	enum:cuttlefish::SupService::ClirStatusInfo::ClirStatus
+CLIR_SUPPRESSION	host/commands/modem_simulator/sup_service.h	/^      CLIR_SUPPRESSION       = 2,   \/\/ allow CLI presentation$/;"	e	enum:cuttlefish::SupService::ClirStatusInfo::ClirType
+CLOSE_CHANNEL	host/commands/modem_simulator/stk_service.h	/^    CLOSE_CHANNEL       = 0x41,$/;"	e	enum:cuttlefish::StkService::CommandType
+CMD_GET_LOCATION	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^constexpr char CMD_GET_LOCATION[] = "CMD_GET_LOCATION";$/;"	v	typeref:typename:char[]
+CMD_GET_RAWMEASUREMENT	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^constexpr char CMD_GET_RAWMEASUREMENT[] = "CMD_GET_RAWMEASUREMENT";$/;"	v	typeref:typename:char[]
+CME_ERROR_NON_CME	guest/hals/ril/reference-ril/atchannel.h	/^    CME_ERROR_NON_CME = -1,$/;"	e	enum:__anon512a2c1f0303
+CME_SIM_NOT_INSERTED	guest/hals/ril/reference-ril/atchannel.h	/^    CME_SIM_NOT_INSERTED = 10$/;"	e	enum:__anon512a2c1f0303
+CME_SUCCESS	guest/hals/ril/reference-ril/atchannel.h	/^    CME_SUCCESS = 0,$/;"	e	enum:__anon512a2c1f0303
+COMMON_LIBS_NET_NETLINK_CLIENT_H_	common/libs/net/netlink_client.h	/^#define COMMON_LIBS_NET_NETLINK_CLIENT_H_$/;"	d
+COMMON_LIBS_NET_NETLINK_REQUEST_H_	common/libs/net/netlink_request.h	/^#define COMMON_LIBS_NET_NETLINK_REQUEST_H_$/;"	d
+COMMON_LIBS_NET_NETWORK_INTERFACE_MANAGER_H_	common/libs/net/network_interface_manager.h	/^#define COMMON_LIBS_NET_NETWORK_INTERFACE_MANAGER_H_$/;"	d
+COMMON_LUNCH_CHOICES	AndroidProducts.mk	/^COMMON_LUNCH_CHOICES := \\$/;"	m
+COMPLETE	guest/hals/ril/reference-libril/ril.h	/^    COMPLETE = 0x02,  \/\/ The result contains the last part of the scan results$/;"	e	enum:__anon0bfbaecfb203
+CONCATENATED_VENDOR_RAMDISK	host/commands/assemble_cvd/boot_image_utils.cc	/^const char CONCATENATED_VENDOR_RAMDISK[] = "concatenated_vendor_ramdisk";$/;"	v	typeref:typename:const char[]
+CONFIG_DRIVER_$(BOARD_WPA_SUPPLICANT_DRIVER)	guest/libs/wpa_supplicant_8_lib/Android.mk	/^  CONFIG_DRIVER_$(BOARD_WPA_SUPPLICANT_DRIVER) := y$/;"	m
+CONFIRMATIONUI_CMD_INIT	guest/hals/confirmationui/include/TrustyIpc.h	/^    CONFIRMATIONUI_CMD_INIT = (1 << CONFIRMATIONUI_REQ_SHIFT),$/;"	e	enum:confirmationui_cmd
+CONFIRMATIONUI_CMD_MSG	guest/hals/confirmationui/include/TrustyIpc.h	/^    CONFIRMATIONUI_CMD_MSG = (2 << CONFIRMATIONUI_REQ_SHIFT),$/;"	e	enum:confirmationui_cmd
+CONFIRMATIONUI_MAX_MSG_SIZE	guest/hals/confirmationui/include/TrustyIpc.h	/^#define CONFIRMATIONUI_MAX_MSG_SIZE /;"	d
+CONFIRMATIONUI_PORT	guest/hals/confirmationui/include/TrustyIpc.h	/^#define CONFIRMATIONUI_PORT /;"	d
+CONFIRMATIONUI_REQ_SHIFT	guest/hals/confirmationui/include/TrustyIpc.h	/^    CONFIRMATIONUI_REQ_SHIFT = 1,$/;"	e	enum:confirmationui_cmd
+CONFIRMATIONUI_RESP_BIT	guest/hals/confirmationui/include/TrustyIpc.h	/^    CONFIRMATIONUI_RESP_BIT = 1,$/;"	e	enum:confirmationui_cmd
+CPIO_EXT	host/commands/assemble_cvd/boot_image_utils.cc	/^const char CPIO_EXT[] = ".cpio";$/;"	v	typeref:typename:const char[]
+CUTTLEFISH_COMMON_COMMON_LIBS_FS_SHARED_FD_H_	common/libs/fs/shared_fd.h	/^#define CUTTLEFISH_COMMON_COMMON_LIBS_FS_SHARED_FD_H_$/;"	d
+CUTTLEFISH_COMMON_COMMON_LIBS_FS_SHARED_FD_STREAM_H_	common/libs/fs/shared_fd_stream.h	/^#define CUTTLEFISH_COMMON_COMMON_LIBS_FS_SHARED_FD_STREAM_H_$/;"	d
+CUTTLEFISH_COMMON_COMMON_LIBS_FS_SHARED_SELECT_H_	common/libs/fs/shared_select.h	/^#define CUTTLEFISH_COMMON_COMMON_LIBS_FS_SHARED_SELECT_H_$/;"	d
+CUTTLEFISH_DEVICE_TYPE_GUEST	host/commands/metrics/proto/cf_log.proto	/^    CUTTLEFISH_DEVICE_TYPE_GUEST = 2;$/;"	e	enum:cuttlefish.CuttlefishLogEvent.DeviceType
+CUTTLEFISH_DEVICE_TYPE_HOST	host/commands/metrics/proto/cf_log.proto	/^    CUTTLEFISH_DEVICE_TYPE_HOST = 1;$/;"	e	enum:cuttlefish.CuttlefishLogEvent.DeviceType
+CUTTLEFISH_DEVICE_TYPE_UNSPECIFIED	host/commands/metrics/proto/cf_log.proto	/^    CUTTLEFISH_DEVICE_TYPE_UNSPECIFIED = 0;$/;"	e	enum:cuttlefish.CuttlefishLogEvent.DeviceType
+CUTTLEFISH_ERROR_TYPE_UNSPECIFIED	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_ERROR_TYPE_UNSPECIFIED = 0;$/;"	e	enum:cuttlefish.MetricsEvent.ErrorType
+CUTTLEFISH_EVENT_TYPE_DEVICE_BOOT	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_EVENT_TYPE_DEVICE_BOOT = 3;$/;"	e	enum:cuttlefish.MetricsEvent.EventType
+CUTTLEFISH_EVENT_TYPE_ERROR	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_EVENT_TYPE_ERROR = 1;$/;"	e	enum:cuttlefish.MetricsEvent.EventType
+CUTTLEFISH_EVENT_TYPE_LOCK_SCREEN_AVAILABLE	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_EVENT_TYPE_LOCK_SCREEN_AVAILABLE = 4;$/;"	e	enum:cuttlefish.MetricsEvent.EventType
+CUTTLEFISH_EVENT_TYPE_UNSPECIFIED	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_EVENT_TYPE_UNSPECIFIED = 0;$/;"	e	enum:cuttlefish.MetricsEvent.EventType
+CUTTLEFISH_EVENT_TYPE_VM_INSTANTIATION	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_EVENT_TYPE_VM_INSTANTIATION = 2;$/;"	e	enum:cuttlefish.MetricsEvent.EventType
+CUTTLEFISH_EVENT_TYPE_VM_STOP	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_EVENT_TYPE_VM_STOP = 5;$/;"	e	enum:cuttlefish.MetricsEvent.EventType
+CUTTLEFISH_OS_TYPE_LINUX_AARCH32	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_OS_TYPE_LINUX_AARCH32 = 3;$/;"	e	enum:cuttlefish.MetricsEvent.OsType
+CUTTLEFISH_OS_TYPE_LINUX_AARCH64	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_OS_TYPE_LINUX_AARCH64 = 4;$/;"	e	enum:cuttlefish.MetricsEvent.OsType
+CUTTLEFISH_OS_TYPE_LINUX_X86	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_OS_TYPE_LINUX_X86 = 1;$/;"	e	enum:cuttlefish.MetricsEvent.OsType
+CUTTLEFISH_OS_TYPE_LINUX_X86_64	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_OS_TYPE_LINUX_X86_64 = 2;$/;"	e	enum:cuttlefish.MetricsEvent.OsType
+CUTTLEFISH_OS_TYPE_UNSPECIFIED	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_OS_TYPE_UNSPECIFIED = 0;$/;"	e	enum:cuttlefish.MetricsEvent.OsType
+CUTTLEFISH_VMM_TYPE_CROSVM	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_VMM_TYPE_CROSVM = 1;$/;"	e	enum:cuttlefish.MetricsEvent.VmmType
+CUTTLEFISH_VMM_TYPE_QEMU	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_VMM_TYPE_QEMU = 2;$/;"	e	enum:cuttlefish.MetricsEvent.VmmType
+CUTTLEFISH_VMM_TYPE_UNSPECIFIED	host/commands/metrics/proto/cf_metrics_event.proto	/^    CUTTLEFISH_VMM_TYPE_UNSPECIFIED = 0;$/;"	e	enum:cuttlefish.MetricsEvent.VmmType
+CachedStreamBuffer	guest/hals/camera/cached_stream_buffer.cpp	/^CachedStreamBuffer::CachedStreamBuffer()$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer
+CachedStreamBuffer	guest/hals/camera/cached_stream_buffer.cpp	/^CachedStreamBuffer::CachedStreamBuffer(CachedStreamBuffer&& from) noexcept {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer
+CachedStreamBuffer	guest/hals/camera/cached_stream_buffer.cpp	/^CachedStreamBuffer::CachedStreamBuffer(const StreamBuffer& buffer)$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer
+CachedStreamBuffer	guest/hals/camera/cached_stream_buffer.h	/^class CachedStreamBuffer {$/;"	c	namespace:android::hardware::camera::device::V3_4::implementation
+CallForwardInfo	host/commands/modem_simulator/sup_service.h	/^    CallForwardInfo(Reason reason) :$/;"	f	struct:cuttlefish::SupService::CallForwardInfo
+CallForwardInfo	host/commands/modem_simulator/sup_service.h	/^  struct CallForwardInfo {$/;"	s	class:cuttlefish::SupService
+CallForwardInfoStatus	host/commands/modem_simulator/sup_service.h	/^    enum CallForwardInfoStatus {$/;"	g	struct:cuttlefish::SupService::CallForwardInfo
+CallService	host/commands/modem_simulator/call_service.cpp	/^CallService::CallService(int32_t service_id, ChannelMonitor* channel_monitor,$/;"	f	class:cuttlefish::CallService
+CallService	host/commands/modem_simulator/call_service.h	/^class CallService : public ModemService, public std::enable_shared_from_this<CallService>  {$/;"	c	namespace:cuttlefish
+CallState	host/commands/modem_simulator/call_service.h	/^    enum CallState {$/;"	g	struct:cuttlefish::CallService::CallStatus
+CallStateUpdate	host/commands/modem_simulator/call_service.cpp	/^void CallService::CallStateUpdate() {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+CallStatus	host/commands/modem_simulator/call_service.h	/^    CallStatus()$/;"	f	struct:cuttlefish::CallService::CallStatus
+CallStatus	host/commands/modem_simulator/call_service.h	/^    CallStatus(const std::string_view number)$/;"	f	struct:cuttlefish::CallService::CallStatus
+CallStatus	host/commands/modem_simulator/call_service.h	/^  struct CallStatus {$/;"	s	class:cuttlefish::CallService
+CallToken	host/commands/modem_simulator/call_service.h	/^  using CallToken = std::pair<int, std::string>;$/;"	t	class:cuttlefish::CallService	typeref:typename:std::pair<int,std::string>
+CallWaitingInfo	host/commands/modem_simulator/sup_service.h	/^    CallWaitingInfo() :$/;"	f	struct:cuttlefish::SupService::CallWaitingInfo
+CallWaitingInfo	host/commands/modem_simulator/sup_service.h	/^  struct CallWaitingInfo {$/;"	s	class:cuttlefish::SupService
+Callback	host/commands/modem_simulator/thread_looper.h	/^  typedef std::function<void()> Callback;$/;"	t	class:cuttlefish::ThreadLooper
+CameraChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^CameraChannelHandler::CameraChannelHandler($/;"	f	class:cuttlefish::webrtc_streaming::CameraChannelHandler
+CameraChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^class CameraChannelHandler : public webrtc::DataChannelObserver {$/;"	c	namespace:cuttlefish::webrtc_streaming	file:
+CameraController	host/frontend/webrtc/lib/camera_controller.h	/^class CameraController {$/;"	c	namespace:cuttlefish
+CameraStreamer	host/frontend/webrtc/lib/camera_streamer.cpp	/^CameraStreamer::CameraStreamer(unsigned int port, unsigned int cid)$/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer
+CameraStreamer	host/frontend/webrtc/lib/camera_streamer.h	/^class CameraStreamer : public rtc::VideoSinkInterface<webrtc::VideoFrame>,$/;"	c	namespace:cuttlefish::webrtc_streaming
+Cancel	host/libs/confui/host_virtual_input.h	/^enum class ConfUiKeys : std::uint32_t { Confirm = 7, Cancel = 8 };$/;"	e	enum:cuttlefish::confui::ConfUiKeys
+CancelSerial	host/commands/modem_simulator/thread_looper.cpp	/^bool ThreadLooper::CancelSerial(Serial serial) {$/;"	f	class:cuttlefish::ThreadLooper	typeref:typename:bool
+CancelSubscription	host/commands/kernel_log_monitor/kernel_log_server.h	/^  CancelSubscription,$/;"	e	enum:monitor::SubscriptionAction
+Cbor	host/libs/confui/cbor.h	/^  Cbor(const std::string& prompt_text,$/;"	f	class:cuttlefish::confui::Cbor
+Cbor	host/libs/confui/cbor.h	/^class Cbor {$/;"	c	namespace:cuttlefish::confui
+CellInfo	guest/hals/ril/reference-libril/ril.h	/^  } CellInfo;$/;"	m	struct:__anon0bfbaecf6e08	typeref:union:__anon0bfbaecf6e08::__anon0bfbaecf6f0a
+CellInfo	guest/hals/ril/reference-libril/ril.h	/^  } CellInfo;$/;"	m	struct:__anon0bfbaecf7008	typeref:union:__anon0bfbaecf7008::__anon0bfbaecf710a
+CellInfo	guest/hals/ril/reference-libril/ril.h	/^  } CellInfo;$/;"	m	struct:__anon0bfbaecf7208	typeref:union:__anon0bfbaecf7208::__anon0bfbaecf730a
+CfAudioDeviceModule	host/frontend/webrtc/lib/audio_device.cpp	/^CfAudioDeviceModule::CfAudioDeviceModule() {}$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule
+CfAudioDeviceModule	host/frontend/webrtc/lib/audio_device.h	/^class CfAudioDeviceModule : public webrtc::AudioDeviceModule,$/;"	c	namespace:cuttlefish::webrtc_streaming
+CfConnectionObserverFactory	host/frontend/webrtc/connection_observer.cpp	/^CfConnectionObserverFactory::CfConnectionObserverFactory($/;"	f	class:cuttlefish::CfConnectionObserverFactory
+CfConnectionObserverFactory	host/frontend/webrtc/connection_observer.h	/^class CfConnectionObserverFactory$/;"	c	namespace:cuttlefish
+CfOperatorObserver	host/frontend/webrtc/main.cpp	/^class CfOperatorObserver$/;"	c	file:
+Cgroups	shared/config/cgroups.json	/^  "Cgroups": [$/;"	a
+ChangeMode	host/commands/modem_simulator/sim_service.h	/^    enum ChangeMode {WITH_PIN, WITH_PUK};$/;"	g	struct:cuttlefish::SimService::PinStatus
+ChangePIN	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::PinStatus::ChangePIN(ChangeMode mode,$/;"	f	class:cuttlefish::SimService::PinStatus	typeref:typename:bool
+ChangePUK	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::PinStatus::ChangePUK(const std::string_view puk,$/;"	f	class:cuttlefish::SimService::PinStatus	typeref:typename:bool
+ChangePin1AndAdjustSimStatus	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::ChangePin1AndAdjustSimStatus(PinStatus::ChangeMode mode,$/;"	f	class:cuttlefish::SimService	typeref:typename:bool
+ChannelMonitor	host/commands/modem_simulator/channel_monitor.cpp	/^ChannelMonitor::ChannelMonitor(ModemSimulator* modem,$/;"	f	class:cuttlefish::ChannelMonitor
+ChannelMonitor	host/commands/modem_simulator/channel_monitor.h	/^class ChannelMonitor {$/;"	c	namespace:cuttlefish
+ChdirIntoRuntimeDir	host/commands/run_cvd/main.cc	/^bool ChdirIntoRuntimeDir(const CuttlefishConfig::InstanceSpecific& instance) {$/;"	f	namespace:cuttlefish::__anonadab6e0c0111	typeref:typename:bool
+CheckCredentials	host/libs/allocd/resource_manager.cpp	/^bool ResourceManager::CheckCredentials(SharedFD client_socket, uid_t uid) {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:bool
+CheckIdx	common/libs/concurrency/multiplexer.h	/^  void CheckIdx(const int idx) {$/;"	f	class:cuttlefish::Multiplexer	typeref:typename:void
+CheckMarked	common/libs/fs/shared_fd.cpp	/^void CheckMarked(fd_set* in_out_mask, SharedFDSet* in_out_set) {$/;"	f	namespace:cuttlefish::__anond70c3a4f0111	typeref:typename:void
+CheckPasswordValid	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::PinStatus::CheckPasswordValid(std::string_view password) {$/;"	f	class:cuttlefish::SimService::PinStatus	typeref:typename:bool
+CheckResponse	common/libs/net/netlink_client.cpp	/^bool NetlinkClientImpl::CheckResponse(uint32_t seq_no) {$/;"	f	class:cuttlefish::__anon61381e100111::NetlinkClientImpl	typeref:typename:bool
+CheckUTF8Copy	host/libs/confui/cbor.cc	/^Cbor::Error Cbor::CheckUTF8Copy(const std::string& text) {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:Cbor::Error
+ChkAndGetConfig	host/libs/screen_connector/screen_connector_common.h	/^  static auto ChkAndGetConfig() -> decltype(cuttlefish::CuttlefishConfig::Get()) {$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:decltype(cuttlefish::CuttlefishConfig::Get ())
+ChmapInfoCommand	host/libs/audio_connector/commands.cpp	/^ChmapInfoCommand::ChmapInfoCommand(uint32_t start_id, size_t count,$/;"	f	class:cuttlefish::ChmapInfoCommand
+ChmapInfoCommand	host/libs/audio_connector/commands.h	/^class ChmapInfoCommand : public InfoCommand<virtio_snd_chmap_info> {$/;"	c	namespace:cuttlefish
+ChmapsInfo	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::ChmapsInfo(ChmapInfoCommand& cmd) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+ChooseAction	host/libs/config/data_image.cpp	/^  Result<DataImageAction> ChooseAction() {$/;"	f	class:cuttlefish::InitializeDataImageImpl	typeref:typename:Result<DataImageAction>	file:
+ChooseConfig	host/libs/config/config_flag.cpp	/^  bool ChooseConfig(const std::string& name) {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:bool	file:
+CidState	host/commands/modem_simulator/data_service.h	/^    enum CidState {ACTIVE, NO_ACTIVE};$/;"	g	struct:cuttlefish::DataService::PDPContext
+Clamp	shared/config/task_profiles.json	/^            "Clamp": "0"$/;"	s	object:Profiles.26.Actions.0.Params
+Clamp	shared/config/task_profiles.json	/^            "Clamp": "30%"$/;"	s	object:Profiles.27.Actions.0.Params
+Class	host/commands/modem_simulator/sim_service.h	/^    enum Class : int32_t {$/;"	g	struct:cuttlefish::SimService::FacilityLock	typeref:typename:int32_t
+CleanPriorFiles	host/commands/assemble_cvd/clean.cc	/^bool CleanPriorFiles(const std::set<std::string>& preserving,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+CleanPriorFiles	host/commands/assemble_cvd/clean.cc	/^bool CleanPriorFiles(const std::string& path, const std::set<std::string>& preserving) {$/;"	f	namespace:cuttlefish::__anon587bcda10111	typeref:typename:bool
+CleanPriorFiles	host/commands/assemble_cvd/clean.cc	/^bool CleanPriorFiles(const std::vector<std::string>& paths, const std::set<std::string>& preserv/;"	f	namespace:cuttlefish::__anon587bcda10111	typeref:typename:bool
+CleanStopInstance	host/commands/stop/main.cc	/^bool CleanStopInstance(const CuttlefishConfig::InstanceSpecific& instance) {$/;"	f	namespace:cuttlefish::__anon65a808010111	typeref:typename:bool
+CleanUp	host/libs/confui/session.cc	/^void Session::CleanUp() {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:void
+CleanupBridgeGateway	host/libs/allocd/alloc_utils.cpp	/^void CleanupBridgeGateway(const std::string& name, const std::string& ipaddr,$/;"	f	namespace:cuttlefish	typeref:typename:void
+CleanupEthernetIface	host/libs/allocd/alloc_utils.cpp	/^void CleanupEthernetIface(const std::string& name,$/;"	f	namespace:cuttlefish	typeref:typename:void
+ClearFailureRecord	host/commands/secure_env/soft_gatekeeper.h	/^    virtual bool ClearFailureRecord(uint32_t uid, secure_id_t user_id, bool \/* secure *\/) {$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:bool
+ClearFailureRecord	host/commands/secure_env/tpm_gatekeeper.cpp	/^bool TpmGatekeeper::ClearFailureRecord($/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:bool
+Client	host/commands/modem_simulator/channel_monitor.cpp	/^Client::Client(cuttlefish::SharedFD fd) : client_fd(fd) {}$/;"	f	class:cuttlefish::Client
+Client	host/commands/modem_simulator/channel_monitor.cpp	/^Client::Client(cuttlefish::SharedFD fd, ClientType client_type)$/;"	f	class:cuttlefish::Client
+Client	host/commands/modem_simulator/channel_monitor.h	/^class Client {$/;"	c	namespace:cuttlefish
+ClientDynHandler	host/frontend/webrtc_operator/client_handler.cpp	/^ClientDynHandler::ClientDynHandler(struct lws* wsi,$/;"	f	class:cuttlefish::ClientDynHandler
+ClientDynHandler	host/frontend/webrtc_operator/client_handler.h	/^class ClientDynHandler : public DynHandler,$/;"	c	namespace:cuttlefish
+ClientHandler	host/frontend/webrtc/lib/client_handler.cpp	/^ClientHandler::ClientHandler($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler
+ClientHandler	host/frontend/webrtc/lib/client_handler.h	/^class ClientHandler : public webrtc::PeerConnectionObserver,$/;"	c	namespace:cuttlefish::webrtc_streaming
+ClientHandler	host/frontend/webrtc_operator/client_handler.h	/^class ClientHandler {$/;"	c	namespace:cuttlefish
+ClientInfo	host/commands/metrics/proto/clientanalytics.proto	/^message ClientInfo {$/;"	m
+ClientSocket	common/libs/utils/tcp_socket.cpp	/^ClientSocket::ClientSocket(int port)$/;"	f	class:cuttlefish::ClientSocket
+ClientSocket	common/libs/utils/tcp_socket.h	/^  ClientSocket(ClientSocket&& other) : fd_{other.fd_} {}$/;"	f	class:cuttlefish::ClientSocket
+ClientSocket	common/libs/utils/tcp_socket.h	/^  explicit ClientSocket(SharedFD fd) : fd_(fd) {}$/;"	f	class:cuttlefish::ClientSocket
+ClientSocket	common/libs/utils/tcp_socket.h	/^class ClientSocket {$/;"	c	namespace:cuttlefish
+ClientType	host/commands/modem_simulator/channel_monitor.h	/^  enum ClientType { RIL, REMOTE };$/;"	g	class:cuttlefish::Client
+ClientVideoTrackImpl	host/frontend/webrtc/lib/client_handler.cpp	/^class ClientVideoTrackImpl : public ClientVideoTrackInterface {$/;"	c	namespace:cuttlefish::webrtc_streaming	file:
+ClientVideoTrackInterface	host/frontend/webrtc/lib/client_handler.h	/^class ClientVideoTrackInterface {$/;"	c	namespace:cuttlefish::webrtc_streaming
+ClientWSHandler	host/frontend/webrtc_operator/client_handler.cpp	/^ClientWSHandler::ClientWSHandler(struct lws* wsi, DeviceRegistry* registry,$/;"	f	class:cuttlefish::ClientWSHandler
+ClientWSHandler	host/frontend/webrtc_operator/client_handler.h	/^class ClientWSHandler : public ClientHandler,$/;"	c	namespace:cuttlefish
+ClientWSHandlerFactory	host/frontend/webrtc_operator/client_handler.cpp	/^ClientWSHandlerFactory::ClientWSHandlerFactory(DeviceRegistry* registry,$/;"	f	class:cuttlefish::ClientWSHandlerFactory
+ClientWSHandlerFactory	host/frontend/webrtc_operator/client_handler.h	/^class ClientWSHandlerFactory : public WebSocketHandlerFactory {$/;"	c	namespace:cuttlefish
+ClirStatus	host/commands/modem_simulator/sup_service.h	/^    enum ClirStatus {$/;"	g	struct:cuttlefish::SupService::ClirStatusInfo
+ClirStatusInfo	host/commands/modem_simulator/sup_service.h	/^  struct ClirStatusInfo {$/;"	s	class:cuttlefish::SupService
+ClirType	host/commands/modem_simulator/sup_service.h	/^    enum ClirType {$/;"	g	struct:cuttlefish::SupService::ClirStatusInfo
+Clock	host/libs/confui/session.h	/^  using Clock = std::chrono::steady_clock;$/;"	t	class:cuttlefish::confui::Session	typeref:typename:std::chrono::steady_clock
+Clone	host/frontend/webrtc/display_handler.h	/^  std::unique_ptr<WebRtcScProcessedFrame> Clone() {$/;"	f	struct:cuttlefish::WebRtcScProcessedFrame	typeref:typename:std::unique_ptr<WebRtcScProcessedFrame>
+Close	common/libs/fs/shared_fd.cpp	/^void FileInstance::Close() {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:void
+Close	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::Close() {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+Close	host/libs/websocket/websocket_handler.cpp	/^void WebSocketHandler::Close() {$/;"	f	class:cuttlefish::WebSocketHandler	typeref:typename:void
+CloseDir	host/commands/fetcher/build_api.cc	/^struct CloseDir {$/;"	s	namespace:cuttlefish	file:
+CloseRemoteConnection	host/commands/modem_simulator/channel_monitor.cpp	/^void ChannelMonitor::CloseRemoteConnection(cuttlefish::SharedFD client) {$/;"	f	class:cuttlefish::ChannelMonitor	typeref:typename:void
+CloseRemoteConnection	host/commands/modem_simulator/modem_service.cpp	/^void ModemService::CloseRemoteConnection(cuttlefish::SharedFD remote_client) {$/;"	f	class:cuttlefish::ModemService	typeref:typename:void
+ClosedInstance	common/libs/fs/shared_fd.cpp	/^\/* static *\/ std::shared_ptr<FileInstance> FileInstance::ClosedInstance() {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:std::shared_ptr<FileInstance>
+Closer	host/libs/graphics_detector/graphics_detector.cpp	/^  Closer(std::function<void()> on_close) : on_close_(on_close) {}$/;"	f	class:cuttlefish::__anon29a199ff0111::Closer	file:
+Closer	host/libs/graphics_detector/graphics_detector.cpp	/^class Closer {$/;"	c	namespace:cuttlefish::__anon29a199ff0111	file:
+Clr	common/libs/fs/shared_select.h	/^  void Clr(const SharedFD& in) {$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:void
+Cmd	host/libs/vm_manager/crosvm_builder.cpp	/^Command& CrosvmBuilder::Cmd() { return command_; }$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:Command &
+CmdReply	host/libs/audio_connector/server.cpp	/^bool AudioClientConnection::CmdReply(AudioStatus status, const void* data,$/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:bool
+CombineTargetZipFiles	host/commands/assemble_cvd/super_image_mixer.cc	/^bool CombineTargetZipFiles(const std::string& default_target_zip,$/;"	f	namespace:cuttlefish::__anonae6530d30111	typeref:typename:bool
+Command	common/libs/utils/subprocess.h	/^  Command(const std::string& executable,$/;"	f	class:cuttlefish::Command
+Command	common/libs/utils/subprocess.h	/^class Command {$/;"	c	namespace:cuttlefish
+CommandHandler	host/commands/modem_simulator/modem_service.cpp	/^CommandHandler::CommandHandler(const std::string& command, f_func handler)$/;"	f	class:cuttlefish::CommandHandler
+CommandHandler	host/commands/modem_simulator/modem_service.cpp	/^CommandHandler::CommandHandler(const std::string& command, p_func handler)$/;"	f	class:cuttlefish::CommandHandler
+CommandHandler	host/commands/modem_simulator/modem_service.h	/^class CommandHandler {$/;"	c	namespace:cuttlefish
+CommandInfo	guest/hals/ril/reference-libril/ril_internal.h	/^typedef struct CommandInfo CommandInfo;$/;"	t	namespace:android	typeref:struct:CommandInfo
+CommandInfo	guest/hals/ril/reference-libril/ril_internal.h	/^typedef struct CommandInfo {$/;"	s	namespace:android
+CommandInfo	guest/hals/ril/reference-libril/ril_internal.h	/^} CommandInfo;$/;"	t	namespace:android	typeref:struct:android::CommandInfo
+CommandParser	host/commands/modem_simulator/command_parser.h	/^  explicit CommandParser(const std::string& command) : copy_command_(command) {$/;"	f	class:cuttlefish::CommandParser
+CommandParser	host/commands/modem_simulator/command_parser.h	/^class CommandParser {$/;"	c	namespace:cuttlefish
+CommandSource	host/libs/config/command_source.h	/^class CommandSource : public virtual Feature {$/;"	c	namespace:cuttlefish
+CommandToBinaryMap	host/commands/cvd/main.cc	/^const std::map<std::string, std::string> CommandToBinaryMap = {$/;"	v	namespace:cuttlefish::__anon483fb9980111	typeref:typename:const std::map<std::string,std::string>
+CommandType	host/commands/modem_simulator/stk_service.h	/^  enum CommandType {$/;"	g	class:cuttlefish::StkService
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::BluetoothConnector	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::ConfigServer	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::KernelLogMonitor	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::LogcatReceiver	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::MetricsService	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::OpenWrt	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::RootCanal	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::SecureEnvironment	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::TombstoneReceiver	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::VehicleHalServer	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::VmmCommands	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch.cc	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::WmediumdServer	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch_modem.cpp	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:std::vector<Command>	file:
+Commands	host/commands/run_cvd/launch_streamer.cpp	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:std::vector<Command>	file:
+Commands	host/libs/config/adb/launch.cpp	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbConnector	typeref:typename:std::vector<Command>	file:
+Commands	host/libs/config/adb/launch.cpp	/^  std::vector<Command> Commands() override {$/;"	f	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:std::vector<Command>	file:
+Commit	host/libs/wayland/wayland_surface.cpp	/^void Surface::Commit() {$/;"	f	class:wayland::Surface	typeref:typename:void
+Compare	common/libs/net/netlink_request_test.cpp	/^bool Compare(MatchResultListener* result_listener,$/;"	f	namespace:cuttlefish::__anon1ff2f3d90111	typeref:typename:bool
+Compare	host/commands/modem_simulator/modem_service.cpp	/^int CommandHandler::Compare(const std::string& command) const {$/;"	f	class:cuttlefish::CommandHandler	typeref:typename:int
+CompareHmacSharingParams	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^class CompareHmacSharingParams {$/;"	c	namespace:cuttlefish	file:
+CompleteReleaseFrame	common/libs/utils/network.cpp	/^struct __attribute__((packed)) CompleteReleaseFrame {$/;"	s	namespace:cuttlefish	file:
+ComponentDisk	host/libs/image_aggregator/cdisk_spec.proto	/^message ComponentDisk {$/;"	m
+CompositeDisk	host/libs/image_aggregator/cdisk_spec.proto	/^message CompositeDisk {$/;"	m
+CompositeDiskBuilder	host/libs/image_aggregator/image_aggregator.cc	/^  CompositeDiskBuilder() : next_disk_offset_(sizeof(GptBeginning)) {}$/;"	f	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	file:
+CompositeDiskBuilder	host/libs/image_aggregator/image_aggregator.cc	/^class CompositeDiskBuilder {$/;"	c	namespace:cuttlefish::__anon02806fd80111	file:
+CompositeSerializable	host/commands/secure_env/composite_serialization.cpp	/^CompositeSerializable::CompositeSerializable($/;"	f	class:cuttlefish::CompositeSerializable
+CompositeSerializable	host/commands/secure_env/composite_serialization.h	/^class CompositeSerializable : public keymaster::Serializable {$/;"	c	namespace:cuttlefish
+ComputeFastHash	host/commands/secure_env/soft_gatekeeper.h	/^    fast_hash_t ComputeFastHash(const SizedBuffer& password, uint64_t salt) {$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:fast_hash_t
+ComputePasswordSignature	host/commands/secure_env/soft_gatekeeper.h	/^    virtual void ComputePasswordSignature(uint8_t* signature, uint32_t signature_length,$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:void
+ComputePasswordSignature	host/commands/secure_env/tpm_gatekeeper.cpp	/^void TpmGatekeeper::ComputePasswordSignature($/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:void
+ComputeScreenSizeInBytes	host/libs/screen_connector/screen_connector_common.h	/^  static std::uint32_t ComputeScreenSizeInBytes(const std::uint32_t w,$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:std::uint32_t
+ComputeScreenStrideBytes	host/libs/screen_connector/screen_connector_common.h	/^  static std::uint32_t ComputeScreenStrideBytes(const std::uint32_t w) {$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:std::uint32_t
+ComputeSharedHmac	guest/hals/keymaster/remote/remote_keymaster.cpp	/^ComputeSharedHmacResponse RemoteKeymaster::ComputeSharedHmac($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:ComputeSharedHmacResponse
+ComputeSharedHmac	guest/hals/keymint/remote/remote_keymaster.cpp	/^ComputeSharedHmacResponse RemoteKeymaster::ComputeSharedHmac($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:ComputeSharedHmacResponse
+ComputeSharedHmac	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^keymaster_error_t TpmKeymasterEnforcement::ComputeSharedHmac($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:keymaster_error_t
+ComputeSignature	host/commands/secure_env/soft_gatekeeper.h	/^    virtual void ComputeSignature(uint8_t* signature, uint32_t signature_length, const uint8_t*,$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:void
+ComputeSignature	host/commands/secure_env/tpm_gatekeeper.cpp	/^void TpmGatekeeper::ComputeSignature($/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:void
+Condition	host/libs/confui/cbor.cc	/^  enum class Condition { k24, k0x100, k0x10000, k0x100000000, kBeyond };$/;"	g	function:cuttlefish::confui::Cbor::WriteHeader	file:
+ConfUiAbortMessage	common/libs/confui/protocol_types.h	/^using ConfUiAbortMessage = ConfUiGenericMessage<ConfUiCmd::kAbort>;$/;"	t	namespace:cuttlefish::confui	typeref:typename:ConfUiGenericMessage<ConfUiCmd::kAbort>
+ConfUiAckMessage	common/libs/confui/protocol_types.h	/^  ConfUiAckMessage(const std::string& session_id, const bool is_success,$/;"	f	class:cuttlefish::confui::ConfUiAckMessage
+ConfUiAckMessage	common/libs/confui/protocol_types.h	/^class ConfUiAckMessage : public ConfUiMessage {$/;"	c	namespace:cuttlefish::confui
+ConfUiAckMessage	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    using ConfUiAckMessage = cuttlefish::confui::ConfUiAckMessage;$/;"	t	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:cuttlefish::confui::ConfUiAckMessage
+ConfUiAckMessage	guest/hals/confirmationui/guest_session.h	/^    using ConfUiAckMessage = cuttlefish::confui::ConfUiAckMessage;$/;"	t	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:cuttlefish::confui::ConfUiAckMessage
+ConfUiCheck	common/libs/confui/utils.h	/^#define ConfUiCheck(/;"	d
+ConfUiCliResponseMessage	common/libs/confui/protocol_types.h	/^  ConfUiCliResponseMessage(const std::string& session_id,$/;"	f	class:cuttlefish::confui::ConfUiCliResponseMessage
+ConfUiCliResponseMessage	common/libs/confui/protocol_types.h	/^class ConfUiCliResponseMessage : public ConfUiMessage {$/;"	c	namespace:cuttlefish::confui
+ConfUiCmd	common/libs/confui/protocol_types.h	/^enum class ConfUiCmd : std::uint32_t {$/;"	g	namespace:cuttlefish::confui	typeref:typename:std::uint32_t
+ConfUiGenericMessage	common/libs/confui/protocol_types.h	/^  ConfUiGenericMessage(const std::string& session_id)$/;"	f	class:cuttlefish::confui::ConfUiGenericMessage
+ConfUiGenericMessage	common/libs/confui/protocol_types.h	/^class ConfUiGenericMessage : public ConfUiMessage {$/;"	c	namespace:cuttlefish::confui
+ConfUiKeys	host/libs/confui/host_virtual_input.h	/^enum class ConfUiKeys : std::uint32_t { Confirm = 7, Cancel = 8 };$/;"	g	namespace:cuttlefish::confui	typeref:typename:std::uint32_t
+ConfUiLog	common/libs/confui/utils.h	/^#define ConfUiLog(/;"	d
+ConfUiMessage	common/libs/confui/protocol_types.h	/^  ConfUiMessage(const std::string& session_id) : session_id_{session_id} {}$/;"	f	class:cuttlefish::confui::ConfUiMessage
+ConfUiMessage	common/libs/confui/protocol_types.h	/^class ConfUiMessage {$/;"	c	namespace:cuttlefish::confui
+ConfUiMessage	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    using ConfUiMessage = cuttlefish::confui::ConfUiMessage;$/;"	t	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:cuttlefish::confui::ConfUiMessage
+ConfUiMessage	guest/hals/confirmationui/guest_session.h	/^    using ConfUiMessage = cuttlefish::confui::ConfUiMessage;$/;"	t	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:cuttlefish::confui::ConfUiMessage
+ConfUiPacketInfo	common/libs/confui/packet_types.h	/^using ConfUiPacketInfo = std::vector<std::vector<std::uint8_t>>;$/;"	t	namespace:cuttlefish::confui::packet	typeref:typename:std::vector<std::vector<std::uint8_t>>
+ConfUiRenderer	host/libs/confui/host_renderer.cc	/^ConfUiRenderer::ConfUiRenderer(const std::uint32_t display,$/;"	f	class:cuttlefish::confui::ConfUiRenderer
+ConfUiRenderer	host/libs/confui/host_renderer.h	/^class ConfUiRenderer {$/;"	c	namespace:cuttlefish::confui
+ConfUiStartMessage	common/libs/confui/protocol_types.h	/^  ConfUiStartMessage(const std::string session_id,$/;"	f	class:cuttlefish::confui::ConfUiStartMessage
+ConfUiStartMessage	common/libs/confui/protocol_types.h	/^class ConfUiStartMessage : public ConfUiMessage {$/;"	c	namespace:cuttlefish::confui
+ConfUiStopMessage	common/libs/confui/protocol_types.h	/^using ConfUiStopMessage = ConfUiGenericMessage<ConfUiCmd::kStop>;$/;"	t	namespace:cuttlefish::confui	typeref:typename:ConfUiGenericMessage<ConfUiCmd::kStop>
+ConfUiUserSelectionMessage	common/libs/confui/protocol_types.h	/^  ConfUiUserSelectionMessage(const std::string& session_id,$/;"	f	class:cuttlefish::confui::ConfUiUserSelectionMessage
+ConfUiUserSelectionMessage	common/libs/confui/protocol_types.h	/^class ConfUiUserSelectionMessage : public ConfUiMessage {$/;"	c	namespace:cuttlefish::confui
+ConfUiUserTouchMessage	common/libs/confui/protocol_types.h	/^  ConfUiUserTouchMessage(const std::string& session_id, const int x,$/;"	f	class:cuttlefish::confui::ConfUiUserTouchMessage
+ConfUiUserTouchMessage	common/libs/confui/protocol_types.h	/^class ConfUiUserTouchMessage : public ConfUiMessage {$/;"	c	namespace:cuttlefish::confui
+ConfigExists	host/libs/config/cuttlefish_config.cpp	/^\/*static*\/ bool CuttlefishConfig::ConfigExists() {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+ConfigFileLocation	host/commands/modem_simulator/nvram_config.cpp	/^std::string NvramConfig::ConfigFileLocation() const {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:std::string
+ConfigFlag	host/libs/config/config_flag.h	/^class ConfigFlag : public FlagFeature {};$/;"	c	namespace:cuttlefish
+ConfigFlagComponent	host/libs/config/config_flag.cpp	/^fruit::Component<SystemImageDirFlag, ConfigFlag> ConfigFlagComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<SystemImageDirFlag,ConfigFlag>
+ConfigFlagImpl	host/libs/config/config_flag.cpp	/^class ConfigFlagImpl : public ConfigFlag {$/;"	c	namespace:cuttlefish::__anon2e549bd00111	file:
+ConfigFlagPlaceholder	host/libs/config/config_flag.cpp	/^fruit::Component<ConfigFlag> ConfigFlagPlaceholder() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<ConfigFlag>
+ConfigFlagPlaceholderImpl	host/libs/config/config_flag.cpp	/^class ConfigFlagPlaceholderImpl : public ConfigFlag {$/;"	c	namespace:cuttlefish::__anon2e549bd00111	file:
+ConfigFragment	host/libs/config/config_fragment.h	/^class ConfigFragment {$/;"	c	namespace:cuttlefish
+ConfigHandler	host/frontend/webrtc_operator/client_handler.cpp	/^ConfigHandler::ConfigHandler(struct lws* wsi, const ServerConfig& server_config)$/;"	f	class:cuttlefish::ConfigHandler
+ConfigHandler	host/frontend/webrtc_operator/client_handler.h	/^class ConfigHandler : public DynHandler {$/;"	c	namespace:cuttlefish
+ConfigReader	host/libs/config/config_flag.cpp	/^class ConfigReader : public FlagFeature {$/;"	c	namespace:cuttlefish::__anon2e549bd00111	file:
+ConfigServer	host/commands/run_cvd/launch.cc	/^class ConfigServer : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+ConfigServerBinary	host/libs/config/known_paths.cpp	/^std::string ConfigServerBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+Configure	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::Configure(const ConfigureRequest& request, ConfigureResponse* response) {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+Configure	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::Configure(const ConfigureRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ConfigureBootDevices	host/libs/vm_manager/crosvm_manager.cpp	/^std::string CrosvmManager::ConfigureBootDevices(int num_disks) {$/;"	f	class:cuttlefish::vm_manager::CrosvmManager	typeref:typename:std::string
+ConfigureBootDevices	host/libs/vm_manager/qemu_manager.cpp	/^std::string QemuManager::ConfigureBootDevices(int num_disks) {$/;"	f	class:cuttlefish::vm_manager::QemuManager	typeref:typename:std::string
+ConfigureBootPatchlevel	guest/hals/keymint/remote/remote_keymaster.cpp	/^ConfigureBootPatchlevelResponse RemoteKeymaster::ConfigureBootPatchlevel($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:ConfigureBootPatchlevelResponse
+ConfigureGpuMode	host/libs/vm_manager/crosvm_manager.cpp	/^std::vector<std::string> CrosvmManager::ConfigureGpuMode($/;"	f	class:cuttlefish::vm_manager::CrosvmManager	typeref:typename:std::vector<std::string>
+ConfigureGpuMode	host/libs/vm_manager/qemu_manager.cpp	/^std::vector<std::string> QemuManager::ConfigureGpuMode($/;"	f	class:cuttlefish::vm_manager::QemuManager	typeref:typename:std::vector<std::string>
+ConfigureLogs	host/commands/run_cvd/main.cc	/^void ConfigureLogs(const CuttlefishConfig& config,$/;"	f	namespace:cuttlefish::__anonadab6e0c0111	typeref:typename:void
+ConfigureMultipleBootDevices	host/libs/vm_manager/vm_manager.cpp	/^std::string ConfigureMultipleBootDevices(const std::string& pci_path,$/;"	f	namespace:cuttlefish::vm_manager	typeref:typename:std::string
+ConfigureVendorPatchlevel	guest/hals/keymint/remote/remote_keymaster.cpp	/^ConfigureVendorPatchlevelResponse RemoteKeymaster::ConfigureVendorPatchlevel($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:ConfigureVendorPatchlevelResponse
+Confirm	host/libs/confui/host_virtual_input.h	/^enum class ConfUiKeys : std::uint32_t { Confirm = 7, Cancel = 8 };$/;"	e	enum:cuttlefish::confui::ConfUiKeys
+Conflict	host/libs/websocket/websocket_handler.h	/^  Conflict = 409,$/;"	e	enum:cuttlefish::HttpStatusCode
+Connect	common/libs/fs/shared_fd.cpp	/^int FileInstance::Connect(const struct sockaddr* addr, socklen_t addrlen) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+Connect	common/libs/utils/vsock_connection.cpp	/^bool VsockClientConnection::Connect(unsigned int port, unsigned int cid) {$/;"	f	class:cuttlefish::VsockClientConnection	typeref:typename:bool
+Connect	common/libs/utils/vsock_connection.cpp	/^bool VsockServerConnection::Connect(unsigned int port, unsigned int cid) {$/;"	f	class:cuttlefish::VsockServerConnection	typeref:typename:bool
+Connect	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionImpl::Connect() {$/;"	f	class:WsConnectionImpl	typeref:typename:void
+Connect	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^export async function Connect(deviceId, serverConnector) {$/;"	f
+Connect	host/libs/wmediumd_controller/wmediumd_controller.cpp	/^bool WmediumdController::Connect(const std::string& serverSocketPath) {$/;"	f	class:cuttlefish::WmediumdController	typeref:typename:bool
+ConnectAsync	common/libs/utils/vsock_connection.cpp	/^std::future<bool> VsockConnection::ConnectAsync(unsigned int port,$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:std::future<bool>
+ConnectDevice	host/frontend/webrtc_operator/assets/js/app.js	/^async function ConnectDevice(deviceId, serverConnector) {$/;"	f
+ConnectDevice	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  ConnectDevice(pc) {$/;"	m	class:Controller
+ConnectHandler	host/frontend/webrtc_operator/client_handler.cpp	/^ConnectHandler::ConnectHandler(struct lws* wsi, DeviceRegistry* registry,$/;"	f	class:cuttlefish::ConnectHandler
+ConnectHandler	host/frontend/webrtc_operator/client_handler.h	/^class ConnectHandler : public ClientDynHandler {$/;"	c	namespace:cuttlefish
+ConnectInner	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionImpl::ConnectInner() {$/;"	f	class:WsConnectionImpl	typeref:typename:void
+ConnectToHost	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^cuttlefish::SharedFD TrustyConfirmationUI::ConnectToHost() {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:cuttlefish::SharedFD
+ConnectToRemoteCvd	host/commands/modem_simulator/modem_service.cpp	/^cuttlefish::SharedFD ModemService::ConnectToRemoteCvd(std::string port) {$/;"	f	class:cuttlefish::ModemService	typeref:typename:cuttlefish::SharedFD
+ConnectWithTimeout	common/libs/fs/shared_fd.cpp	/^int FileInstance::ConnectWithTimeout(const struct sockaddr* addr,$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+Connecting to device	host/frontend/webrtc_operator/assets/client.html	/^            <h3 id='status-message' class='connecting'>Connecting to device<\/h3>$/;"	j
+ConnectionObserver	host/frontend/webrtc/lib/connection_observer.h	/^class ConnectionObserver {$/;"	c	namespace:cuttlefish::webrtc_streaming
+ConnectionObserverFactory	host/frontend/webrtc/lib/connection_observer.h	/^class ConnectionObserverFactory {$/;"	c	namespace:cuttlefish::webrtc_streaming
+ConnectionObserverImpl	host/frontend/webrtc/connection_observer.cpp	/^  ConnectionObserverImpl($/;"	f	class:cuttlefish::ConnectionObserverImpl	file:
+ConnectionObserverImpl	host/frontend/webrtc/connection_observer.cpp	/^class ConnectionObserverImpl$/;"	c	namespace:cuttlefish	file:
+ConnectivityChecker	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    public ConnectivityChecker(Context context, EventReporter eventReporter) {$/;"	m	class:ConnectivityChecker
+ConnectivityChecker	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^public class ConnectivityChecker extends JobBase {$/;"	c
+Connector	host/frontend/webrtc_operator/assets/js/server_connector.js	/^class Connector {$/;"	c
+ConnectorTcpArg	host/libs/config/adb/launch.cpp	/^  std::string ConnectorTcpArg() const {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:std::string	file:
+ConnectorVsockArg	host/libs/config/adb/launch.cpp	/^  std::string ConnectorVsockArg() const {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:std::string	file:
+ConsoleForwarder	host/commands/console_forwarder/main.cpp	/^  ConsoleForwarder(std::string console_path, SharedFD console_in,$/;"	f	class:cuttlefish::ConsoleForwarder	file:
+ConsoleForwarder	host/commands/console_forwarder/main.cpp	/^class ConsoleForwarder {$/;"	c	namespace:cuttlefish	file:
+ConsoleForwarder	host/commands/run_cvd/launch.cc	/^class ConsoleForwarder : public CommandSource, public DiagnosticInformation {$/;"	c	namespace:cuttlefish	file:
+ConsoleForwarderBinary	host/libs/config/known_paths.cpp	/^std::string ConsoleForwarderBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+ConsoleForwarderMain	host/commands/console_forwarder/main.cpp	/^int ConsoleForwarderMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+ConsoleSeverity	common/libs/utils/tee_logging.cpp	/^LogSeverity ConsoleSeverity() {$/;"	f	namespace:cuttlefish	typeref:typename:LogSeverity
+Contains	host/libs/confui/session.cc	/^static bool Contains(const C& c, T&& item) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool	file:
+ContentType	host/commands/fetcher/build_api.h	/^  const std::string& ContentType() const { return content_type; }$/;"	f	class:cuttlefish::Artifact	typeref:typename:const std::string &
+Contents	common/libs/utils/archive.cpp	/^std::vector<std::string> Archive::Contents() {$/;"	f	class:cuttlefish::Archive	typeref:typename:std::vector<std::string>
+ContinueSubscription	host/commands/kernel_log_monitor/kernel_log_server.h	/^  ContinueSubscription,$/;"	e	enum:monitor::SubscriptionAction
+ControlChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^ControlChannelHandler::ControlChannelHandler($/;"	f	class:cuttlefish::webrtc_streaming::ControlChannelHandler
+ControlChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^class ControlChannelHandler : public webrtc::DataChannelObserver {$/;"	c	namespace:cuttlefish::webrtc_streaming	file:
+ControlMessage	common/libs/utils/unix_sockets.cpp	/^ControlMessage::ControlMessage(ControlMessage&& existing) {$/;"	f	class:cuttlefish::ControlMessage
+ControlMessage	common/libs/utils/unix_sockets.h	/^struct ControlMessage {$/;"	s	namespace:cuttlefish
+ControlPanelButton	host/libs/config/custom_actions.h	/^struct ControlPanelButton {$/;"	s	namespace:cuttlefish
+ControlPanelButtonDescriptor	host/frontend/webrtc/lib/streamer.cpp	/^struct ControlPanelButtonDescriptor {$/;"	s	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	file:
+Controller	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^class Controller {$/;"	c
+Controller	shared/config/cgroups.json	/^      "Controller": "cpuset",$/;"	s	object:Cgroups.0
+Controller	shared/config/task_profiles.json	/^            "Controller": "blkio",$/;"	s	object:Profiles.20.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "blkio",$/;"	s	object:Profiles.21.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "blkio",$/;"	s	object:Profiles.22.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "blkio",$/;"	s	object:Profiles.23.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpu",$/;"	s	object:Profiles.0.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpu",$/;"	s	object:Profiles.1.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpu",$/;"	s	object:Profiles.2.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpu",$/;"	s	object:Profiles.3.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpu",$/;"	s	object:Profiles.4.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpu",$/;"	s	object:Profiles.5.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.10.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.11.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.12.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.13.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.14.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.15.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.16.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.17.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.18.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.19.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.6.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.7.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.8.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "cpuset",$/;"	s	object:Profiles.9.Actions.0.Params
+Controller	shared/config/task_profiles.json	/^            "Controller": "memory",$/;"	s	object:Profiles.30.Actions.0.Params
+CopyFrom	common/libs/fs/shared_fd.cpp	/^bool FileInstance::CopyFrom(FileInstance& in, size_t length) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:bool
+CountSizeAndNewLines	common/libs/utils/tee_logging.cpp	/^static std::pair<int, int> CountSizeAndNewLines(const char* message) {$/;"	f	namespace:cuttlefish	typeref:typename:std::pair<int,int>	file:
+Crc32	host/commands/fetcher/build_api.h	/^  unsigned int Crc32() const { return crc32; }$/;"	f	class:cuttlefish::Artifact	typeref:typename:unsigned int
+Creat	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Creat(const std::string& path, mode_t mode) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+Create	host/commands/fetcher/curl_wrapper.cc	/^\/* static *\/ std::unique_ptr<CurlWrapper> CurlWrapper::Create() {$/;"	f	class:cuttlefish::CurlWrapper	typeref:typename:std::unique_ptr<CurlWrapper>
+Create	host/frontend/webrtc/lib/client_handler.cpp	/^std::shared_ptr<ClientHandler> ClientHandler::Create($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::shared_ptr<ClientHandler>
+Create	host/frontend/webrtc/lib/local_recorder.cpp	/^std::unique_ptr<LocalRecorder> LocalRecorder::Create($/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder	typeref:typename:std::unique_ptr<LocalRecorder>
+Create	host/frontend/webrtc/lib/streamer.cpp	/^std::unique_ptr<Streamer> Streamer::Create($/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:std::unique_ptr<Streamer>
+Create	host/frontend/webrtc/lib/ws_connection.cpp	/^std::shared_ptr<WsConnectionContext> WsConnectionContext::Create() {$/;"	f	class:WsConnectionContext	typeref:typename:std::shared_ptr<WsConnectionContext>
+Create	host/libs/audio_connector/server.cpp	/^std::unique_ptr<AudioClientConnection> AudioClientConnection::Create($/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:std::unique_ptr<AudioClientConnection>
+Create	host/libs/msg_queue/msg_queue.cc	/^std::unique_ptr<SysVMessageQueue> SysVMessageQueue::Create($/;"	f	class:cuttlefish::SysVMessageQueue	typeref:typename:std::unique_ptr<SysVMessageQueue>
+CreateAndStartThread	host/frontend/webrtc/lib/streamer.cpp	/^std::unique_ptr<rtc::Thread> CreateAndStartThread(const std::string& name) {$/;"	f	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:std::unique_ptr<rtc::Thread>
+CreateAudioServer	host/frontend/webrtc/main.cpp	/^std::unique_ptr<cuttlefish::AudioServer> CreateAudioServer() {$/;"	f	typeref:typename:std::unique_ptr<cuttlefish::AudioServer>
+CreateBlankImage	host/libs/config/data_image.cpp	/^bool CreateBlankImage($/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreateBridge	host/libs/allocd/alloc_utils.cpp	/^bool CreateBridge(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreateClientHandler	host/frontend/webrtc/lib/streamer.cpp	/^std::shared_ptr<ClientHandler> Streamer::Impl::CreateClientHandler($/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::shared_ptr<ClientHandler>
+CreateCompositeDisk	host/libs/image_aggregator/image_aggregator.cc	/^void CreateCompositeDisk(std::vector<ImagePartition> partitions,$/;"	f	namespace:cuttlefish	typeref:typename:void
+CreateCompositeDisk	host/libs/image_aggregator/image_aggregator.cc	/^void CreateCompositeDisk(std::vector<MultipleImagePartition> partitions,$/;"	f	namespace:cuttlefish	typeref:typename:void
+CreateConnection	host/frontend/webrtc/lib/ws_connection.cpp	/^std::shared_ptr<WsConnection> WsConnectionContextImpl::CreateConnection($/;"	f	class:WsConnectionContextImpl	typeref:typename:std::shared_ptr<WsConnection>
+CreateConnectionCallback	host/frontend/webrtc/lib/ws_connection.cpp	/^void CreateConnectionCallback(lws_sorted_usec_list_t* sul) {$/;"	f	typeref:typename:void
+CreateConnectionSul	host/frontend/webrtc/lib/ws_connection.cpp	/^  struct CreateConnectionSul {$/;"	s	class:WsConnectionImpl	file:
+CreateDeviceInfo	host/commands/secure_env/tpm_remote_provisioning_context.cpp	/^std::unique_ptr<cppbor::Map> TpmRemoteProvisioningContext::CreateDeviceInfo()$/;"	f	class:cuttlefish::TpmRemoteProvisioningContext	typeref:typename:std::unique_ptr<cppbor::Map>
+CreateDynamicDiskFiles	host/commands/assemble_cvd/disk_flags.cc	/^void CreateDynamicDiskFiles(const FetcherConfig& fetcher_config,$/;"	f	namespace:cuttlefish	typeref:typename:void
+CreateEbtables	host/libs/allocd/alloc_utils.cpp	/^bool CreateEbtables(const std::string& name, bool use_ipv4,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreateEthernetBridgeIface	host/libs/allocd/alloc_utils.cpp	/^bool CreateEthernetBridgeIface(const std::string& name,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreateEthernetIface	host/libs/allocd/alloc_utils.cpp	/^bool CreateEthernetIface(const std::string& name, const std::string& bridge_name,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreateGatekeeperMessage	common/libs/security/gatekeeper_channel.cpp	/^ManagedGatekeeperMessage CreateGatekeeperMessage($/;"	f	namespace:cuttlefish	typeref:typename:ManagedGatekeeperMessage
+CreateInterface	host/libs/allocd/request.h	/^  CreateInterface,   \/\/ Request to create new network interface$/;"	e	enum:cuttlefish::RequestType
+CreateKey	host/commands/secure_env/encrypted_serializable.cpp	/^static bool CreateKey($/;"	f	namespace:cuttlefish	typeref:typename:bool	file:
+CreateKey	host/commands/secure_env/primary_key_builder.cpp	/^TpmObjectSlot PrimaryKeyBuilder::CreateKey($/;"	f	class:cuttlefish::PrimaryKeyBuilder	typeref:typename:TpmObjectSlot
+CreateKeyBlob	host/commands/secure_env/tpm_key_blob_maker.cpp	/^keymaster_error_t TpmKeyBlobMaker::CreateKeyBlob($/;"	f	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:keymaster_error_t
+CreateKeyId	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^bool TpmKeymasterEnforcement::CreateKeyId($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:bool
+CreateKeymasterMessage	common/libs/security/keymaster_channel.cpp	/^ManagedKeymasterMessage CreateKeymasterMessage($/;"	f	namespace:cuttlefish	typeref:typename:ManagedKeymasterMessage
+CreateMemFDWithData	common/libs/utils/unix_sockets_test.cpp	/^SharedFD CreateMemFDWithData(const std::string& data) {$/;"	f	namespace:cuttlefish	typeref:typename:SharedFD
+CreateMessage	common/libs/utils/tcp_socket.h	/^Message CreateMessage(Ts... vals) {$/;"	f	namespace:cuttlefish	typeref:typename:Message
+CreateMobileIface	host/libs/allocd/alloc_utils.cpp	/^bool CreateMobileIface(const std::string& name, uint16_t id,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreateObserver	host/frontend/webrtc/connection_observer.cpp	/^CfConnectionObserverFactory::CreateObserver() {$/;"	f	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:std::shared_ptr<cuttlefish::webrtc_streaming::ConnectionObserver>
+CreateOsCompositeDisk	host/commands/assemble_cvd/disk_flags.cc	/^bool CreateOsCompositeDisk(const CuttlefishConfig& config) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreatePDU	host/commands/modem_simulator/pdu_parser.cpp	/^std::string PDUParser::CreatePDU() {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:std::string
+CreatePersistentCompositeDisk	host/commands/assemble_cvd/disk_flags.cc	/^bool CreatePersistentCompositeDisk($/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreateQcowOverlay	host/commands/run_cvd/server_loop.cpp	/^bool CreateQcowOverlay(const std::string& crosvm_path,$/;"	f	namespace:cuttlefish::__anon527e8bd40111	typeref:typename:bool
+CreateQcowOverlay	host/libs/image_aggregator/image_aggregator.cc	/^void CreateQcowOverlay(const std::string& crosvm_path,$/;"	f	namespace:cuttlefish	typeref:typename:void
+CreateQueue	common/libs/concurrency/multiplexer.h	/^  static QueuePtr CreateQueue(Args&&... args) {$/;"	f	class:cuttlefish::Multiplexer	typeref:typename:QueuePtr
+CreateRemotePDU	host/commands/modem_simulator/pdu_parser.cpp	/^std::string PDUParser::CreateRemotePDU(std::string& host_port) {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:std::string
+CreateServerTcpSocket	host/frontend/webrtc/lib/port_range_socket_factory.cpp	/^rtc::AsyncPacketSocket* PortRangeSocketFactory::CreateServerTcpSocket($/;"	f	class:cuttlefish::webrtc_streaming::PortRangeSocketFactory	typeref:typename:rtc::AsyncPacketSocket *
+CreateSession	host/libs/confui/host_server.cc	/^std::shared_ptr<Session> HostServer::CreateSession(const std::string& name) {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:std::shared_ptr<Session>
+CreateSocketPair	host/libs/audio_connector/server.cpp	/^bool CreateSocketPair(SharedFD* local, SharedFD* remote) {$/;"	f	namespace:cuttlefish::__anon8078843e0111	typeref:typename:bool
+CreateStatuReport	host/commands/modem_simulator/pdu_parser.cpp	/^std::string PDUParser::CreateStatuReport(int message_reference) {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:std::string
+CreateString	common/libs/confui/protocol_types.h	/^  static std::string CreateString(Args&&... args) {$/;"	f	class:cuttlefish::confui::ConfUiMessage	typeref:typename:std::string
+CreateTap	host/libs/allocd/alloc_utils.cpp	/^bool CreateTap(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+CreateUdpSocket	host/frontend/webrtc/lib/port_range_socket_factory.cpp	/^rtc::AsyncPacketSocket* PortRangeSocketFactory::CreateUdpSocket($/;"	f	class:cuttlefish::webrtc_streaming::PortRangeSocketFactory	typeref:typename:rtc::AsyncPacketSocket *
+CreateUnixInputServer	host/commands/run_cvd/launch_streamer.cpp	/^SharedFD CreateUnixInputServer(const std::string& path) {$/;"	f	namespace:cuttlefish::__anon6b0274e10111	typeref:typename:SharedFD
+CreateVideoEncoder	host/frontend/webrtc/lib/vp8only_encoder_factory.cpp	/^std::unique_ptr<webrtc::VideoEncoder> VP8OnlyEncoderFactory::CreateVideoEncoder($/;"	f	class:cuttlefish::webrtc_streaming::VP8OnlyEncoderFactory	typeref:typename:std::unique_ptr<webrtc::VideoEncoder>
+CreateWifiWrapper	guest/commands/setup_wifi/main.cpp	/^int CreateWifiWrapper(const std::string& source,$/;"	f	typeref:typename:int
+CreationTime	host/commands/fetcher/build_api.h	/^  unsigned long CreationTime() const { return creation_time; }$/;"	f	class:cuttlefish::Artifact	typeref:typename:unsigned long
+Credential	host/commands/fetcher/credential_source.cc	/^std::string FixedCredentialSource::Credential() {$/;"	f	class:cuttlefish::FixedCredentialSource	typeref:typename:std::string
+Credential	host/commands/fetcher/credential_source.cc	/^std::string GceMetadataCredentialSource::Credential() {$/;"	f	class:cuttlefish::GceMetadataCredentialSource	typeref:typename:std::string
+CredentialSource	host/commands/fetcher/credential_source.h	/^class CredentialSource {$/;"	c	namespace:cuttlefish
+Credentials	common/libs/utils/unix_sockets.cpp	/^Result<ucred> UnixSocketMessage::Credentials() {$/;"	f	class:cuttlefish::UnixSocketMessage	typeref:typename:Result<ucred>
+CrosvmBuilder	host/libs/vm_manager/crosvm_builder.cpp	/^CrosvmBuilder::CrosvmBuilder() : command_("crosvm") {$/;"	f	class:cuttlefish::CrosvmBuilder
+CrosvmBuilder	host/libs/vm_manager/crosvm_builder.h	/^class CrosvmBuilder {$/;"	c	namespace:cuttlefish
+CrosvmManager	host/libs/vm_manager/crosvm_manager.h	/^class CrosvmManager : public VmManager {$/;"	c	namespace:cuttlefish::vm_manager
+CurlResponse	host/commands/fetcher/curl_wrapper.h	/^struct CurlResponse {$/;"	s	namespace:cuttlefish
+CurlServerErrorRetryingWrapper	host/commands/fetcher/curl_wrapper.cc	/^  CurlServerErrorRetryingWrapper(CurlWrapper& inner, int retry_attempts,$/;"	f	class:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper	file:
+CurlServerErrorRetryingWrapper	host/commands/fetcher/curl_wrapper.cc	/^class CurlServerErrorRetryingWrapper : public CurlWrapper {$/;"	c	namespace:cuttlefish::__anondfffca8d0111	file:
+CurlWrapper	host/commands/fetcher/curl_wrapper.h	/^class CurlWrapper {$/;"	c	namespace:cuttlefish
+CurlWrapperImpl	host/commands/fetcher/curl_wrapper.cc	/^  CurlWrapperImpl() {$/;"	f	class:cuttlefish::__anondfffca8d0111::CurlWrapperImpl	file:
+CurlWrapperImpl	host/commands/fetcher/curl_wrapper.cc	/^class CurlWrapperImpl : public CurlWrapper {$/;"	c	namespace:cuttlefish::__anondfffca8d0111	file:
+CurrentDirectory	common/libs/utils/files.cpp	/^std::string CurrentDirectory() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+CurrentFlagsToTypes	host/commands/start/flag_forwarder.cc	/^std::map<std::string, std::string> CurrentFlagsToTypes() {$/;"	f	namespace:__anon4552bec90111	typeref:typename:std::map<std::string,std::string>
+Custom Actions	build/README.md	/^## Custom Actions$/;"	s
+CustomActionConfig	host/libs/config/custom_actions.h	/^struct CustomActionConfig {$/;"	s	namespace:cuttlefish
+CustomActionConfigFromJson	host/libs/config/custom_actions.cpp	/^std::optional<CustomActionConfig> CustomActionConfigFromJson($/;"	f	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:std::optional<CustomActionConfig>
+CustomActionConfigImpl	host/libs/config/custom_actions.cpp	/^class CustomActionConfigImpl : public CustomActionConfigProvider {$/;"	c	namespace:cuttlefish::__anon12e4c76c0111	file:
+CustomActionConfigProvider	host/libs/config/custom_actions.h	/^class CustomActionConfigProvider : public FlagFeature, public ConfigFragment {$/;"	c	namespace:cuttlefish
+CustomActions	host/libs/config/custom_actions.cpp	/^  const std::vector<CustomActionConfig>& CustomActions() const override {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:const std::vector<CustomActionConfig> &	file:
+CustomActionsComponent	host/libs/config/custom_actions.cpp	/^CustomActionsComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<ConfigFlag>,CustomActionConfigProvider>
+Cuttlefish Getting Started	README.md	/^# Cuttlefish Getting Started$/;"	c
+CuttlefishConfig	host/libs/config/cuttlefish_config.cpp	/^CuttlefishConfig::CuttlefishConfig() : dictionary_(new Json::Value()) {}$/;"	f	class:cuttlefish::CuttlefishConfig
+CuttlefishConfig	host/libs/config/cuttlefish_config.h	/^class CuttlefishConfig {$/;"	c	namespace:cuttlefish
+CuttlefishConfigDefaultInstance	host/libs/confui/host_server.cc	/^static auto CuttlefishConfigDefaultInstance() {$/;"	f	namespace:cuttlefish::confui	typeref:typename:auto	file:
+CuttlefishEnvironment	host/commands/run_cvd/main.cc	/^class CuttlefishEnvironment : public Feature, public DiagnosticInformation {$/;"	c	namespace:cuttlefish::__anonadab6e0c0111	file:
+CuttlefishLogEvent	host/commands/metrics/proto/cf_log.proto	/^message CuttlefishLogEvent {$/;"	m	package:cuttlefish
+CuttlefishRecoveryUI	recovery/recovery_ui.cpp	/^class CuttlefishRecoveryUI : public EthernetRecoveryUI {$/;"	c	file:
+CvdAudioFrameBuffer	host/frontend/webrtc/audio_handler.cpp	/^  CvdAudioFrameBuffer(const uint8_t* buffer, int bits_per_sample,$/;"	f	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	file:
+CvdAudioFrameBuffer	host/frontend/webrtc/audio_handler.cpp	/^class CvdAudioFrameBuffer : public webrtc_streaming::AudioFrameBuffer {$/;"	c	namespace:cuttlefish::__anon2a3d92f70111	file:
+CvdBootStateMachine	host/commands/run_cvd/boot_state_machine.cc	/^class CvdBootStateMachine : public Feature {$/;"	c	namespace:cuttlefish::__anone7ed366f0111	file:
+CvdCreateSessionDescriptionObserver	host/frontend/webrtc/lib/client_handler.cpp	/^  CvdCreateSessionDescriptionObserver($/;"	f	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdCreateSessionDescriptionObserver	file:
+CvdCreateSessionDescriptionObserver	host/frontend/webrtc/lib/client_handler.cpp	/^class CvdCreateSessionDescriptionObserver$/;"	c	namespace:cuttlefish::webrtc_streaming::__anond0fc42ea0111	file:
+CvdFile	host/libs/config/fetcher_config.cpp	/^CvdFile::CvdFile() {$/;"	f	class:cuttlefish::CvdFile
+CvdFile	host/libs/config/fetcher_config.cpp	/^CvdFile::CvdFile(const FileSource& source, const std::string& build_id,$/;"	f	class:cuttlefish::CvdFile
+CvdFile	host/libs/config/fetcher_config.h	/^struct CvdFile {$/;"	s	namespace:cuttlefish
+CvdFileToJson	host/libs/config/fetcher_config.cpp	/^Json::Value CvdFileToJson(const CvdFile& cvd_file) {$/;"	f	namespace:cuttlefish::__anonf7286d770211	typeref:typename:Json::Value
+CvdHostBugreportMain	host/commands/host_bugreport/main.cc	/^int CvdHostBugreportMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish::__anond3364bd20111	typeref:typename:int
+CvdMain	host/commands/cvd/main.cc	/^int CvdMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish::__anon483fb9980111	typeref:typename:int
+CvdOnSetRemoteDescription	host/frontend/webrtc/lib/client_handler.cpp	/^  CvdOnSetRemoteDescription($/;"	f	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdOnSetRemoteDescription	file:
+CvdOnSetRemoteDescription	host/frontend/webrtc/lib/client_handler.cpp	/^class CvdOnSetRemoteDescription$/;"	c	namespace:cuttlefish::webrtc_streaming::__anond0fc42ea0111	file:
+CvdSetSessionDescriptionObserver	host/frontend/webrtc/lib/client_handler.cpp	/^  CvdSetSessionDescriptionObserver(std::weak_ptr<ClientHandler> client_handler)$/;"	f	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdSetSessionDescriptionObserver	file:
+CvdSetSessionDescriptionObserver	host/frontend/webrtc/lib/client_handler.cpp	/^class CvdSetSessionDescriptionObserver$/;"	c	namespace:cuttlefish::webrtc_streaming::__anond0fc42ea0111	file:
+CvdStatusMain	host/commands/status/main.cc	/^int CvdStatusMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+CvdVideoFrameBuffer	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^CvdVideoFrameBuffer::CvdVideoFrameBuffer(int width, int height)$/;"	f	class:cuttlefish::CvdVideoFrameBuffer
+CvdVideoFrameBuffer	host/frontend/webrtc/cvd_video_frame_buffer.h	/^class CvdVideoFrameBuffer : public webrtc_streaming::VideoFrameBuffer {$/;"	c	namespace:cuttlefish
+D	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.h	/^#define D(/;"	d
+DATA	host/commands/modem_simulator/sim_service.h	/^      DATA = 1 << 1,    \/\/ to all bear service$/;"	e	enum:cuttlefish::SimService::FacilityLock::Class
+DATA_REQ_REASOPN_HANDOVER	guest/hals/ril/reference-libril/ril.h	/^    DATA_REQ_REASOPN_HANDOVER  = 0x03,  \/\/ The reason of the data request is IWLAN data handov/;"	e	enum:__anon0bfbaecfbe03
+DATA_REQ_REASOPN_NORMAL	guest/hals/ril/reference-libril/ril.h	/^    DATA_REQ_REASOPN_NORMAL    = 0x01,  \/\/ The reason of the data request is normal$/;"	e	enum:__anon0bfbaecfbe03
+DATA_REQ_REASOPN_SHUTDOWN	guest/hals/ril/reference-libril/ril.h	/^    DATA_REQ_REASOPN_SHUTDOWN  = 0x02,  \/\/ The reason of the data request is device shutdown$/;"	e	enum:__anon0bfbaecfbe03
+DEBUG	guest/hals/ril/reference-libril/ril_event.cpp	/^#define DEBUG /;"	d	file:
+DECLARE_TYPE	common/libs/utils/cf_endian.h	/^#define DECLARE_TYPE(/;"	d
+DEFAULT	host/commands/modem_simulator/sim_service.h	/^      DEFAULT = 7,      \/\/ all classes$/;"	e	enum:cuttlefish::SimService::FacilityLock::Class
+DEFAULT	host/commands/modem_simulator/sup_service.h	/^      DEFAULT = 0,                  \/\/ "use subscription default value"$/;"	e	enum:cuttlefish::SupService::ClirStatusInfo::ClirType
+DEFAULT_BRANCH	host/commands/fetcher/fetch_cvd.cc	/^const std::string DEFAULT_BRANCH = "aosp-master";$/;"	v	namespace:__anonccb356fd0111	typeref:typename:const std::string
+DEFAULT_BUILD	host/libs/config/fetcher_config.h	/^  DEFAULT_BUILD,$/;"	e	enum:cuttlefish::FileSource
+DEFAULT_BUILD_TARGET	host/commands/fetcher/fetch_cvd.cc	/^const std::string DEFAULT_BUILD_TARGET = "aosp_cf_x86_64_phone-userdebug";$/;"	v	namespace:__anonccb356fd0111	typeref:typename:const std::string
+DEFAULT_MTU	guest/hals/ril/reference-ril/reference-ril.c	/^#define DEFAULT_MTU /;"	d	file:
+DF_ADF	host/commands/modem_simulator/sim_service.cpp	/^static const std::string DF_ADF       = "7FFF";  \/\/ UICC access$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+DF_CDMA	host/commands/modem_simulator/sim_service.cpp	/^static const std::string DF_CDMA      = "7F25";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+DF_GRAPHICS	host/commands/modem_simulator/sim_service.cpp	/^static const std::string DF_GRAPHICS  = "5F50";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+DF_GSM	host/commands/modem_simulator/sim_service.cpp	/^static const std::string DF_GSM       = "7F20";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+DF_PHONEBOOK	host/commands/modem_simulator/sim_service.cpp	/^static const std::string DF_PHONEBOOK = "5F3A";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+DF_TELECOM	host/commands/modem_simulator/sim_service.cpp	/^static const std::string DF_TELECOM   = "7F10";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+DHCPCD_USE_DBUS	shared/BoardConfig.mk	/^DHCPCD_USE_DBUS := no$/;"	m
+DHCPCD_USE_IPV6	shared/BoardConfig.mk	/^DHCPCD_USE_IPV6 := no$/;"	m
+DHCPCD_USE_SCRIPT	shared/BoardConfig.mk	/^DHCPCD_USE_SCRIPT := yes$/;"	m
+DISABLE	host/commands/modem_simulator/sim_service.h	/^      DISABLE,$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockStatus
+DISABLE	host/commands/modem_simulator/sup_service.h	/^      DISABLE       = 0,$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::CallForwardInfoStatus
+DISABLE_RILD_OEM_HOOK	shared/device.mk	/^DISABLE_RILD_OEM_HOOK := true$/;"	m
+DISK_SIZE_SHIFT	common/libs/utils/size_utils.h	/^constexpr int DISK_SIZE_SHIFT = 16;$/;"	v	namespace:cuttlefish	typeref:typename:int
+DISPLAY_TEXT	host/commands/modem_simulator/stk_service.h	/^    DISPLAY_TEXT        = 0x21,$/;"	e	enum:cuttlefish::StkService::CommandType
+DONT_WAKE	guest/hals/ril/reference-libril/ril.cpp	/^enum WakeType {DONT_WAKE, WAKE_PARTIAL};$/;"	e	enum:android::WakeType	file:
+DONT_WAKE	guest/hals/ril/reference-libril/ril_ex.h	/^enum SocketWakeType {DONT_WAKE, WAKE_PARTIAL};$/;"	e	enum:SocketWakeType
+DaemonizeLauncher	host/commands/run_cvd/boot_state_machine.cc	/^SharedFD DaemonizeLauncher(const CuttlefishConfig& config) {$/;"	f	namespace:cuttlefish::__anone7ed366f0111	typeref:typename:SharedFD
+DataAvailable	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::DataAvailable() const {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+DataImageAction	host/libs/config/data_image.cpp	/^  enum class DataImageAction { kNoAction, kCreateImage, kResizeImage };$/;"	g	class:cuttlefish::InitializeDataImageImpl	file:
+DataImagePath	host/libs/config/data_image.h	/^class DataImagePath {$/;"	c	namespace:cuttlefish
+DataImageTag	host/libs/config/data_image.cpp	/^struct DataImageTag {};$/;"	s	namespace:cuttlefish	file:
+DataService	host/commands/modem_simulator/data_service.cpp	/^DataService::DataService(int32_t service_id, ChannelMonitor* channel_monitor,$/;"	f	class:cuttlefish::DataService
+DataService	host/commands/modem_simulator/data_service.h	/^class DataService : public ModemService, public std::enable_shared_from_this<DataService> {$/;"	c	namespace:cuttlefish
+DataU	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^const uint8_t *CvdVideoFrameBuffer::DataU() const { return u_.data(); }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:const uint8_t *
+DataU	host/frontend/webrtc/cvd_video_frame_buffer.h	/^  uint8_t *DataU() { return u_.data(); }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:uint8_t *
+DataU	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  const uint8_t *DataU() const override { return frame_buffer_->DataU(); }$/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:const uint8_t *	file:
+DataV	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^const uint8_t *CvdVideoFrameBuffer::DataV() const { return v_.data(); }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:const uint8_t *
+DataV	host/frontend/webrtc/cvd_video_frame_buffer.h	/^  uint8_t *DataV() { return v_.data(); }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:uint8_t *
+DataV	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  const uint8_t *DataV() const override { return frame_buffer_->DataV(); }$/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:const uint8_t *	file:
+DataY	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^const uint8_t *CvdVideoFrameBuffer::DataY() const { return y_.data(); }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:const uint8_t *
+DataY	host/frontend/webrtc/cvd_video_frame_buffer.h	/^  uint8_t *DataY() { return y_.data(); }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:uint8_t *
+DataY	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  const uint8_t *DataY() const override { return frame_buffer_->DataY(); }$/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:const uint8_t *	file:
+DeAndroidSparse	host/libs/image_aggregator/image_aggregator.cc	/^void DeAndroidSparse(const std::vector<ImagePartition>& partitions) {$/;"	f	namespace:cuttlefish::__anon02806fd80111	typeref:typename:void
+Debug Cuttlefish	README.md	/^## Debug Cuttlefish$/;"	s	chapter:Cuttlefish Getting Started
+DecodeBase64	common/libs/utils/base64.cpp	/^bool DecodeBase64(const std::string &data, std::vector<uint8_t> *buffer) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DecodePDU	host/commands/modem_simulator/pdu_parser.cpp	/^bool PDUParser::DecodePDU(std::string& pdu) {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:bool
+Default	common/libs/net/netlink_client.cpp	/^NetlinkClientFactory* NetlinkClientFactory::Default() {$/;"	f	class:cuttlefish::NetlinkClientFactory	typeref:typename:NetlinkClientFactory *
+DefaultCustomActionConfig	host/libs/config/custom_actions.cpp	/^std::string DefaultCustomActionConfig() {$/;"	f	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:std::string
+DefaultEnvironmentPath	host/libs/config/cuttlefish_config.cpp	/^std::string DefaultEnvironmentPath(const char* environment_key,$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+DefaultGuestImagePath	host/libs/config/cuttlefish_config.cpp	/^std::string DefaultGuestImagePath(const std::string& file_name) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+DefaultHostArtifactsPath	host/commands/modem_simulator/cf_device_config.cpp	/^std::string DeviceConfig::DefaultHostArtifactsPath(const std::string& file) {$/;"	f	class:cuttlefish::modem::DeviceConfig	typeref:typename:std::string
+DefaultHostArtifactsPath	host/libs/config/cuttlefish_config.cpp	/^std::string DefaultHostArtifactsPath(const std::string& file_name) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+DefaultNetworkInterfaces	host/commands/assemble_cvd/alloc.cc	/^IfaceConfig DefaultNetworkInterfaces(int num) {$/;"	f	namespace:cuttlefish	typeref:typename:IfaceConfig
+DefaultRecord	host/commands/secure_env/tpm_gatekeeper.cpp	/^gatekeeper::failure_record_t DefaultRecord($/;"	f	namespace:cuttlefish	typeref:typename:gatekeeper::failure_record_t
+DefaultSubprocessLogging	host/libs/config/logging.cpp	/^void DefaultSubprocessLogging(char* argv[]) {$/;"	f	namespace:cuttlefish	typeref:typename:void
+DeleteAllKeys	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::DeleteAllKeys(const DeleteAllKeysRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+DeleteAllKeys	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::DeleteAllKeys(const DeleteAllKeysRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+DeleteFifos	host/commands/run_cvd/server_loop.cpp	/^  void DeleteFifos() {$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:void	file:
+DeleteIface	host/libs/allocd/alloc_utils.cpp	/^bool DeleteIface(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DeleteKey	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::DeleteKey(const DeleteKeyRequest& request, DeleteKeyResponse* response) {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+DeleteKey	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::DeleteKey(const DeleteKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+DeleteTmpFileIfNotChanged	host/commands/assemble_cvd/boot_image_utils.cc	/^bool DeleteTmpFileIfNotChanged(const std::string& tmp_file, const std::string& current_file) {$/;"	f	namespace:cuttlefish::__anonbfa95aa40111	typeref:typename:bool
+DeliverEvent	host/frontend/webrtc/kernel_log_events_handler.cpp	/^void KernelLogEventsHandler::DeliverEvent(const Json::Value& event) {$/;"	f	class:cuttlefish::KernelLogEventsHandler	typeref:typename:void
+DeliverSecureInputEvent	guest/hals/confirmationui/guest_session.cpp	/^Return<ResponseCode> GuestSession::DeliverSecureInputEvent($/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:Return<ResponseCode>
+Dependencies	host/commands/assemble_cvd/disk_flags.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::BootImageRepacker	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/assemble_cvd/disk_flags.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::InitializeAccessKregistryImage	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/assemble_cvd/disk_flags.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::InitializeMetadataImage	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/assemble_cvd/flag_feature.cpp	/^  std::unordered_set<FlagFeature*> Dependencies() const override {$/;"	f	class:cuttlefish::ParseGflagsImpl	typeref:typename:std::unordered_set<FlagFeature * >	file:
+Dependencies	host/commands/run_cvd/boot_state_machine.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anone7ed366f0111::ProcessLeader	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/boot_state_machine.cc	/^  std::unordered_set<Feature*> Dependencies() const {$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::BluetoothConnector	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::ConfigServer	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::KernelLogMonitor	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::LogcatReceiver	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::MetricsService	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::OpenWrt	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::RootCanal	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::TombstoneReceiver	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::VehicleHalServer	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::VmmCommands	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::WmediumdServer	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch.cc	/^  std::unordered_set<Feature*> Dependencies() const override {$/;"	f	class:cuttlefish::SecureEnvironment	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch_modem.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch_streamer.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/launch_streamer.cpp	/^  std::unordered_set<Feature*> Dependencies() const override {$/;"	f	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/main.cc	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anonadab6e0c0111::CuttlefishEnvironment	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/server_loop.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/validate.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateHostConfigurationFeature	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/commands/run_cvd/validate.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateTapDevices	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/libs/config/adb/flags.cpp	/^  std::unordered_set<FlagFeature*> Dependencies() const override {$/;"	f	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:std::unordered_set<FlagFeature * >	file:
+Dependencies	host/libs/config/adb/launch.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbConnector	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/libs/config/adb/launch.cpp	/^  std::unordered_set<Feature*> Dependencies() const override {$/;"	f	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/libs/config/config_flag.cpp	/^  std::unordered_set<FlagFeature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagPlaceholderImpl	typeref:typename:std::unordered_set<FlagFeature * >	file:
+Dependencies	host/libs/config/config_flag.cpp	/^  std::unordered_set<FlagFeature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigReader	typeref:typename:std::unordered_set<FlagFeature * >	file:
+Dependencies	host/libs/config/config_flag.cpp	/^  std::unordered_set<FlagFeature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::__anon2e549bd00111::SystemImageDirFlagImpl	typeref:typename:std::unordered_set<FlagFeature * >	file:
+Dependencies	host/libs/config/config_flag.cpp	/^  std::unordered_set<FlagFeature*> Dependencies() const override {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:std::unordered_set<FlagFeature * >	file:
+Dependencies	host/libs/config/custom_actions.cpp	/^  std::unordered_set<FlagFeature*> Dependencies() const override {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:std::unordered_set<FlagFeature * >	file:
+Dependencies	host/libs/config/data_image.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::InitializeDataImageImpl	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/libs/config/data_image.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::InitializeEspImageImpl	typeref:typename:std::unordered_set<Feature * >	file:
+Dependencies	host/libs/config/data_image.cpp	/^  std::unordered_set<Feature*> Dependencies() const override { return {}; }$/;"	f	class:cuttlefish::InitializeMiscImageImpl	typeref:typename:std::unordered_set<Feature * >	file:
+DepsMutator	build/cvd-host-package.go	/^func (c *cvdHostPackage) DepsMutator(ctx android.BottomUpMutatorContext) {$/;"	f	struct:cuttlefish.cvdHostPackage
+DeriveBytesFromHbk	host/commands/secure_env/tpm_remote_provisioning_context.cpp	/^std::vector<uint8_t> TpmRemoteProvisioningContext::DeriveBytesFromHbk($/;"	f	class:cuttlefish::TpmRemoteProvisioningContext	typeref:typename:std::vector<uint8_t>
+Deserialize	host/commands/secure_env/composite_serialization.cpp	/^bool CompositeSerializable::Deserialize($/;"	f	class:cuttlefish::CompositeSerializable	typeref:typename:bool
+Deserialize	host/commands/secure_env/encrypted_serializable.cpp	/^bool EncryptedSerializable::Deserialize($/;"	f	class:cuttlefish::EncryptedSerializable	typeref:typename:bool
+Deserialize	host/commands/secure_env/hmac_serializable.cpp	/^bool HmacSerializable::Deserialize(const uint8_t** buf_ptr, const uint8_t* end) {$/;"	f	class:cuttlefish::HmacSerializable	typeref:typename:bool
+Deserialize	host/commands/secure_env/json_serializable.cpp	/^bool JsonSerializable::Deserialize($/;"	f	class:cuttlefish::JsonSerializable	typeref:typename:bool
+Deserialize	host/commands/secure_env/tpm_serialize.cpp	/^bool TpmSerializable<T>::Deserialize($/;"	f	class:cuttlefish::TpmSerializable	typeref:typename:bool
+Deserialize	host/libs/config/adb/config.cpp	/^  bool Deserialize(const Json::Value& json) override {$/;"	f	class:cuttlefish::__anone963d72d0111::AdbConfigFragmentImpl	typeref:typename:bool	file:
+Deserialize	host/libs/config/custom_actions.cpp	/^  bool Deserialize(const Json::Value& custom_actions_json) override {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:bool	file:
+DestroyBridge	host/libs/allocd/alloc_utils.cpp	/^bool DestroyBridge(const std::string& name) { return DeleteIface(name); }$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DestroyClientHandler	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::DestroyClientHandler(int client_id) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+DestroyEbtables	host/libs/allocd/alloc_utils.cpp	/^bool DestroyEbtables(const std::string& name, bool use_ipv4,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DestroyEthernetBridgeIface	host/libs/allocd/alloc_utils.cpp	/^bool DestroyEthernetBridgeIface(const std::string& name,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DestroyEthernetIface	host/libs/allocd/alloc_utils.cpp	/^bool DestroyEthernetIface(const std::string& name, bool has_ipv4_bridge,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DestroyGateway	host/libs/allocd/alloc_utils.cpp	/^bool DestroyGateway(const std::string& name, const std::string& gateway,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DestroyIface	host/libs/allocd/alloc_utils.cpp	/^bool DestroyIface(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DestroyInterface	host/libs/allocd/request.h	/^  DestroyInterface,  \/\/ Request to destroy a managed network interface$/;"	e	enum:cuttlefish::RequestType
+DestroyMobileIface	host/libs/allocd/alloc_utils.cpp	/^bool DestroyMobileIface(const std::string& name, uint16_t id,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+DestroyUserData	host/libs/wayland/wayland_utils.h	/^void DestroyUserData(wl_resource* resource) {$/;"	f	namespace:wayland	typeref:typename:void
+Device Details	host/frontend/webrtc_operator/assets/client.html	/^          <h2>Device Details<\/h2>$/;"	i
+DeviceBuild	host/commands/fetcher/build_api.h	/^  DeviceBuild(const std::string& id, const std::string& target) {$/;"	f	struct:cuttlefish::DeviceBuild
+DeviceBuild	host/commands/fetcher/build_api.h	/^struct DeviceBuild {$/;"	s	namespace:cuttlefish
+DeviceConfig	common/libs/device_config/device_config.proto	/^message DeviceConfig {$/;"	m	package:cuttlefish
+DeviceConfig	host/commands/modem_simulator/device_config.h	/^class DeviceConfig {$/;"	c	namespace:cuttlefish::modem
+DeviceConfigHelper	common/libs/device_config/device_config.cpp	/^DeviceConfigHelper::DeviceConfigHelper(const DeviceConfig& device_config)$/;"	f	class:cuttlefish::DeviceConfigHelper
+DeviceConfigHelper	common/libs/device_config/device_config.h	/^class DeviceConfigHelper {$/;"	c	namespace:cuttlefish
+DeviceConnection	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^class DeviceConnection {$/;"	c
+DeviceControlApp	host/frontend/webrtc_operator/assets/js/app.js	/^class DeviceControlApp {$/;"	c
+DeviceDetailsUpdater	host/frontend/webrtc_operator/assets/js/app.js	/^class DeviceDetailsUpdater {$/;"	c
+DeviceHandler	host/frontend/webrtc_operator/device_handler.cpp	/^DeviceHandler::DeviceHandler(struct lws* wsi, DeviceRegistry* registry,$/;"	f	class:cuttlefish::DeviceHandler
+DeviceHandler	host/frontend/webrtc_operator/device_handler.h	/^class DeviceHandler : public SignalHandler,$/;"	c	namespace:cuttlefish
+DeviceHandlerFactory	host/frontend/webrtc_operator/device_handler.cpp	/^DeviceHandlerFactory::DeviceHandlerFactory(DeviceRegistry* registry,$/;"	f	class:cuttlefish::DeviceHandlerFactory
+DeviceHandlerFactory	host/frontend/webrtc_operator/device_handler.h	/^class DeviceHandlerFactory : public WebSocketHandlerFactory {$/;"	c	namespace:cuttlefish
+DeviceListApp	host/frontend/webrtc_operator/assets/js/index.js	/^class DeviceListApp {$/;"	c
+DeviceListHandler	host/frontend/webrtc_operator/device_list_handler.cpp	/^DeviceListHandler::DeviceListHandler(struct lws* wsi,$/;"	f	class:cuttlefish::DeviceListHandler
+DeviceListHandler	host/frontend/webrtc_operator/device_list_handler.h	/^class DeviceListHandler : public DynHandler {$/;"	c	namespace:cuttlefish
+DeviceLocked	guest/hals/keymaster/remote/remote_keymaster.cpp	/^DeviceLockedResponse RemoteKeymaster::DeviceLocked($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:DeviceLockedResponse
+DeviceLocked	guest/hals/keymint/remote/remote_keymaster.cpp	/^DeviceLockedResponse RemoteKeymaster::DeviceLocked($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:DeviceLockedResponse
+DeviceRegistry	host/frontend/webrtc_operator/device_registry.h	/^class DeviceRegistry {$/;"	c	namespace:cuttlefish
+DeviceState	host/libs/config/custom_actions.h	/^struct DeviceState {$/;"	s	namespace:cuttlefish
+DeviceTpm	host/commands/secure_env/device_tpm.cpp	/^DeviceTpm::DeviceTpm(const std::string& path) : tpm_(nullptr, &FinalizeTcti) {$/;"	f	class:cuttlefish::DeviceTpm
+DeviceTpm	host/commands/secure_env/device_tpm.h	/^class DeviceTpm : public Tpm {$/;"	c	namespace:cuttlefish
+DeviceType	host/commands/metrics/proto/cf_log.proto	/^  enum DeviceType {$/;"	g	message:cuttlefish.CuttlefishLogEvent
+Dhcp4MessageTypeOption	common/libs/utils/network.cpp	/^struct __attribute__((packed)) Dhcp4MessageTypeOption {$/;"	s	namespace:cuttlefish	file:
+Dhcp4ReleaseMessage	common/libs/utils/network.cpp	/^struct __attribute__((packed)) Dhcp4ReleaseMessage {$/;"	s	namespace:cuttlefish	file:
+Dhcp4ServerIdentifier	common/libs/utils/network.cpp	/^struct __attribute__((packed)) Dhcp4ServerIdentifier {$/;"	s	namespace:cuttlefish	file:
+DiagnosticInformation	host/commands/run_cvd/reporting.h	/^class DiagnosticInformation {$/;"	c	namespace:cuttlefish
+Diagnostics	host/commands/run_cvd/launch.cc	/^  std::vector<std::string> Diagnostics() const override {$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:std::vector<std::string>	file:
+Diagnostics	host/commands/run_cvd/launch.cc	/^  std::vector<std::string> Diagnostics() const override {$/;"	f	class:cuttlefish::KernelLogMonitor	typeref:typename:std::vector<std::string>	file:
+Diagnostics	host/commands/run_cvd/launch.cc	/^  std::vector<std::string> Diagnostics() const override {$/;"	f	class:cuttlefish::LogcatReceiver	typeref:typename:std::vector<std::string>	file:
+Diagnostics	host/commands/run_cvd/launch_streamer.cpp	/^  std::vector<std::string> Diagnostics() const override {$/;"	f	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:std::vector<std::string>	file:
+Diagnostics	host/commands/run_cvd/main.cc	/^  std::vector<std::string> Diagnostics() const override {$/;"	f	class:cuttlefish::__anonadab6e0c0111::CuttlefishEnvironment	typeref:typename:std::vector<std::string>	file:
+Dictionary	host/commands/modem_simulator/nvram_config.cpp	/^Json::Value* NvramConfig::InstanceSpecific::Dictionary() {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:Json::Value *
+Dictionary	host/commands/modem_simulator/nvram_config.cpp	/^const Json::Value* NvramConfig::InstanceSpecific::Dictionary() const {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:const Json::Value *
+Dictionary	host/libs/config/cuttlefish_config_instance.cpp	/^Json::Value* CuttlefishConfig::MutableInstanceSpecific::Dictionary() {$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:Json::Value *
+Dictionary	host/libs/config/cuttlefish_config_instance.cpp	/^const Json::Value* CuttlefishConfig::InstanceSpecific::Dictionary() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:const Json::Value *
+DirectoryBuild	host/commands/fetcher/build_api.cc	/^DirectoryBuild::DirectoryBuild(const std::vector<std::string>& paths,$/;"	f	class:cuttlefish::DirectoryBuild
+DirectoryBuild	host/commands/fetcher/build_api.h	/^struct DirectoryBuild {$/;"	s	namespace:cuttlefish
+DirectoryContents	common/libs/utils/files.cpp	/^std::vector<std::string> DirectoryContents(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:std::vector<std::string>
+DirectoryCrc	host/libs/config/host_tools_version.cpp	/^static std::map<std::string, uint32_t> DirectoryCrc(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:std::map<std::string,uint32_t>	file:
+DirectoryExists	common/libs/utils/files.cpp	/^bool DirectoryExists(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+Disconnect	common/libs/utils/vsock_connection.cpp	/^void VsockConnection::Disconnect() {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:void
+Disconnect	host/frontend/webrtc/lib/camera_streamer.cpp	/^void CameraStreamer::Disconnect() {$/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:void
+DiskChangesComponent	host/commands/assemble_cvd/disk_flags.cc	/^static fruit::Component<> DiskChangesComponent(const FetcherConfig* fetcher,$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<>	file:
+DiskChangesPerInstanceComponent	host/commands/assemble_cvd/disk_flags.cc	/^static fruit::Component<> DiskChangesPerInstanceComponent($/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<>	file:
+DiskSize	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t DiskSize() const {$/;"	f	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:std::uint64_t	file:
+DispatchCommand	host/commands/modem_simulator/modem_simulator.cpp	/^void ModemSimulator::DispatchCommand(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:void
+Display	host/frontend/webrtc/lib/local_recorder.cpp	/^LocalRecorder::Display::Display(LocalRecorder::Impl& impl) : impl_(impl) {$/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder::Display
+Display	host/frontend/webrtc/lib/local_recorder.cpp	/^class LocalRecorder::Display$/;"	c	class:cuttlefish::webrtc_streaming::LocalRecorder	file:
+DisplayConfig	common/libs/device_config/device_config.proto	/^  message DisplayConfig {$/;"	m	message:cuttlefish.DeviceConfig
+DisplayConfig	host/libs/config/cuttlefish_config.h	/^  struct DisplayConfig {$/;"	s	class:cuttlefish::CuttlefishConfig
+DisplayDescriptor	host/frontend/webrtc/lib/streamer.cpp	/^struct DisplayDescriptor {$/;"	s	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	file:
+DisplayHandler	host/frontend/webrtc/display_handler.cpp	/^DisplayHandler::DisplayHandler($/;"	f	class:cuttlefish::DisplayHandler
+DisplayHandler	host/frontend/webrtc/display_handler.h	/^class DisplayHandler {$/;"	c	namespace:cuttlefish
+DisplayPowerModeChanged	host/commands/kernel_log_monitor/kernel_log_server.h	/^  DisplayPowerModeChanged = 9,$/;"	e	enum:monitor::Event
+DnsmasqDhcp4Lease	common/libs/utils/network.h	/^struct DnsmasqDhcp4Lease {$/;"	s	namespace:cuttlefish
+DoGet	host/frontend/webrtc_operator/client_handler.cpp	/^HttpStatusCode ClientDynHandler::DoGet() {$/;"	f	class:cuttlefish::ClientDynHandler	typeref:typename:HttpStatusCode
+DoGet	host/frontend/webrtc_operator/client_handler.cpp	/^HttpStatusCode ConfigHandler::DoGet() {$/;"	f	class:cuttlefish::ConfigHandler	typeref:typename:HttpStatusCode
+DoGet	host/frontend/webrtc_operator/device_list_handler.cpp	/^HttpStatusCode DeviceListHandler::DoGet() {$/;"	f	class:cuttlefish::DeviceListHandler	typeref:typename:HttpStatusCode
+DoIoctl	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^bool DoIoctl(int fd, int request, const uint32_t value) {$/;"	f	namespace:__anon40cdc2c70111	typeref:typename:bool
+DoPost	host/frontend/webrtc_operator/client_handler.cpp	/^HttpStatusCode ClientDynHandler::DoPost() {$/;"	f	class:cuttlefish::ClientDynHandler	typeref:typename:HttpStatusCode
+DoPost	host/frontend/webrtc_operator/client_handler.cpp	/^HttpStatusCode ConfigHandler::DoPost() {$/;"	f	class:cuttlefish::ConfigHandler	typeref:typename:HttpStatusCode
+DoPost	host/frontend/webrtc_operator/device_list_handler.cpp	/^HttpStatusCode DeviceListHandler::DoPost() {$/;"	f	class:cuttlefish::DeviceListHandler	typeref:typename:HttpStatusCode
+DoPostInner	host/frontend/webrtc_operator/client_handler.cpp	/^HttpStatusCode ConnectHandler::DoPostInner($/;"	f	class:cuttlefish::ConnectHandler	typeref:typename:HttpStatusCode
+DoPostInner	host/frontend/webrtc_operator/client_handler.cpp	/^HttpStatusCode ForwardHandler::DoPostInner($/;"	f	class:cuttlefish::ForwardHandler	typeref:typename:HttpStatusCode
+DoPostInner	host/frontend/webrtc_operator/client_handler.cpp	/^HttpStatusCode PollHandler::DoPostInner($/;"	f	class:cuttlefish::PollHandler	typeref:typename:HttpStatusCode
+DoVerify	host/commands/secure_env/soft_gatekeeper.h	/^    bool DoVerify(const password_handle_t* expected_handle, const SizedBuffer& password) {$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:bool
+DoesCompositeMatchCurrentDiskConfig	host/commands/assemble_cvd/disk_flags.cc	/^bool DoesCompositeMatchCurrentDiskConfig($/;"	f	namespace:cuttlefish	typeref:typename:bool
+DomKeyCodeToLinux	host/frontend/webrtc/lib/keyboard.cpp	/^uint16_t DomKeyCodeToLinux(const std::string& dom_KEY_code) {$/;"	f	typeref:typename:uint16_t
+DownloadToFile	host/commands/fetcher/curl_wrapper.cc	/^  CurlResponse<std::string> DownloadToFile($/;"	f	class:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper	typeref:typename:CurlResponse<std::string>	file:
+DownloadToFile	host/commands/fetcher/curl_wrapper.cc	/^  CurlResponse<std::string> DownloadToFile($/;"	f	class:cuttlefish::__anondfffca8d0111::CurlWrapperImpl	typeref:typename:CurlResponse<std::string>	file:
+DownloadToJson	host/commands/fetcher/curl_wrapper.cc	/^  CurlResponse<Json::Value> DownloadToJson($/;"	f	class:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper	typeref:typename:CurlResponse<Json::Value>	file:
+DownloadToJson	host/commands/fetcher/curl_wrapper.cc	/^  CurlResponse<Json::Value> DownloadToJson($/;"	f	class:cuttlefish::__anondfffca8d0111::CurlWrapperImpl	typeref:typename:CurlResponse<Json::Value>	file:
+DownloadToString	host/commands/fetcher/curl_wrapper.cc	/^  CurlResponse<std::string> DownloadToString($/;"	f	class:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper	typeref:typename:CurlResponse<std::string>	file:
+DownloadToString	host/commands/fetcher/curl_wrapper.cc	/^  CurlResponse<std::string> DownloadToString($/;"	f	class:cuttlefish::__anondfffca8d0111::CurlWrapperImpl	typeref:typename:CurlResponse<std::string>	file:
+DropItemsIfAtCapacity	common/libs/concurrency/thread_safe_queue.h	/^  bool DropItemsIfAtCapacity() {$/;"	f	class:cuttlefish::ThreadSafeQueue	typeref:typename:bool
+Dump	common/libs/net/netlink_request_test.cpp	/^void Dump(MatchResultListener* result_listener, const char* title,$/;"	f	namespace:cuttlefish::__anon1ff2f3d90111	typeref:typename:void
+Dup	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Dup(int unmanaged_fd) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+DupFdFlag	host/commands/secure_env/secure_env.cpp	/^SharedFD DupFdFlag(gflags::int32 fd) {$/;"	f	namespace:cuttlefish::__anon0a6d9b510111	typeref:typename:SharedFD
+Duration	host/commands/metrics/proto/common.proto	/^message Duration {$/;"	m
+DynHandler	host/libs/websocket/websocket_handler.cpp	/^DynHandler::DynHandler(struct lws* wsi) : wsi_(wsi), out_buffer_(LWS_PRE, 0) {}$/;"	f	class:cuttlefish::DynHandler
+DynHandler	host/libs/websocket/websocket_handler.h	/^class DynHandler {$/;"	c	namespace:cuttlefish
+DynHandlerFactory	host/libs/websocket/websocket_handler.h	/^using DynHandlerFactory =$/;"	t	namespace:cuttlefish
+DynHttpCallback	host/libs/websocket/websocket_server.cpp	/^int WebSocketServer::DynHttpCallback(struct lws* wsi,$/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:int
+DynServerCallback	host/libs/websocket/websocket_server.cpp	/^int WebSocketServer::DynServerCallback(struct lws* wsi,$/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:int
+DynamicFlag	host/commands/start/flag_forwarder.cc	/^  DynamicFlag(const std::string& subprocess, const std::string& name,$/;"	f	class:DynamicFlag	file:
+DynamicFlag	host/commands/start/flag_forwarder.cc	/^class DynamicFlag : public SubprocessFlag {$/;"	c	file:
+EFId	host/commands/modem_simulator/sim_service.h	/^    enum EFId: int32_t {$/;"	g	struct:cuttlefish::SimService::SimFileSystem	typeref:typename:int32_t
+EF_AD	host/commands/modem_simulator/sim_service.h	/^      EF_AD = 0x6FAD,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_ADN	host/commands/modem_simulator/sim_service.h	/^      EF_ADN = 0x6F3A,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CFF_CPHS	host/commands/modem_simulator/sim_service.h	/^      EF_CFF_CPHS = 0x6F13,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CFIS	host/commands/modem_simulator/sim_service.h	/^      EF_CFIS = 0x6FCB,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CSIM_CDMAHOME	host/commands/modem_simulator/sim_service.h	/^      EF_CSIM_CDMAHOME = 0x6F28,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CSIM_EPRL	host/commands/modem_simulator/sim_service.h	/^      EF_CSIM_EPRL = 0x6F5A,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CSIM_IMSIM	host/commands/modem_simulator/sim_service.h	/^      EF_CSIM_IMSIM = 0x6F22,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CSIM_LI	host/commands/modem_simulator/sim_service.h	/^      EF_CSIM_LI = 0x6F3A,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CSIM_MDN	host/commands/modem_simulator/sim_service.h	/^      EF_CSIM_MDN = 0x6F44,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CSIM_MIPUPP	host/commands/modem_simulator/sim_service.h	/^      EF_CSIM_MIPUPP = 0x6F4D,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CSIM_SPN	host/commands/modem_simulator/sim_service.h	/^      EF_CSIM_SPN =0x6F41,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CSP_CPHS	host/commands/modem_simulator/sim_service.h	/^      EF_CSP_CPHS = 0x6F15,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_CST	host/commands/modem_simulator/sim_service.h	/^      EF_CST = 0x6F32,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_DOMAIN	host/commands/modem_simulator/sim_service.h	/^      EF_DOMAIN = 0x6F03,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_EHPLMN	host/commands/modem_simulator/sim_service.h	/^      EF_EHPLMN = 0x6FD9,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_EXT1	host/commands/modem_simulator/sim_service.h	/^      EF_EXT1 = 0x6F4A,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_EXT2	host/commands/modem_simulator/sim_service.h	/^      EF_EXT2 = 0x6F4B,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_EXT3	host/commands/modem_simulator/sim_service.h	/^      EF_EXT3 = 0x6F4C,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_EXT5	host/commands/modem_simulator/sim_service.h	/^      EF_EXT5 = 0x6F4E,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_EXT6	host/commands/modem_simulator/sim_service.h	/^      EF_EXT6 = 0x6FC8,   \/\/ Ext record for EF[MBDN]$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_FDN	host/commands/modem_simulator/sim_service.h	/^      EF_FDN = 0x6F3B,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_FPLMN	host/commands/modem_simulator/sim_service.h	/^      EF_FPLMN = 0x6F7B,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_GID1	host/commands/modem_simulator/sim_service.h	/^      EF_GID1 = 0x6F3E,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_GID2	host/commands/modem_simulator/sim_service.h	/^      EF_GID2 = 0x6F3F,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_HPLMN_W_ACT	host/commands/modem_simulator/sim_service.h	/^      EF_HPLMN_W_ACT = 0x6F62,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_HPPLMN	host/commands/modem_simulator/sim_service.h	/^      EF_HPPLMN = 0x6F31,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_ICCID	host/commands/modem_simulator/sim_service.h	/^      EF_ICCID = 0x2FE2,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_IMG	host/commands/modem_simulator/sim_service.h	/^      EF_IMG = 0x4F20,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_IMPI	host/commands/modem_simulator/sim_service.h	/^      EF_IMPI = 0x6F02,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_IMPU	host/commands/modem_simulator/sim_service.h	/^      EF_IMPU = 0x6F04,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_INFO_CPHS	host/commands/modem_simulator/sim_service.h	/^      EF_INFO_CPHS = 0x6F16,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_IST	host/commands/modem_simulator/sim_service.h	/^      EF_IST = 0x6F07,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_LI	host/commands/modem_simulator/sim_service.h	/^      EF_LI = 0x6F05,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_LRPLMNSI	host/commands/modem_simulator/sim_service.h	/^      EF_LRPLMNSI = 0x6FDC,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_MAILBOX_CPHS	host/commands/modem_simulator/sim_service.h	/^      EF_MAILBOX_CPHS = 0x6F17,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_MBDN	host/commands/modem_simulator/sim_service.h	/^      EF_MBDN = 0x6FC7,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_MBI	host/commands/modem_simulator/sim_service.h	/^      EF_MBI = 0x6FC9,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_MSISDN	host/commands/modem_simulator/sim_service.h	/^      EF_MSISDN = 0x6F40,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_MWIS	host/commands/modem_simulator/sim_service.h	/^      EF_MWIS = 0x6FCA,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_OPL	host/commands/modem_simulator/sim_service.h	/^      EF_OPL = 0x6FC6,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_OPLMN_W_ACT	host/commands/modem_simulator/sim_service.h	/^      EF_OPLMN_W_ACT = 0x6F61,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_PBR	host/commands/modem_simulator/sim_service.h	/^      EF_PBR = 0x4F30,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_PCSCF	host/commands/modem_simulator/sim_service.h	/^      EF_PCSCF = 0x6F09,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_PL	host/commands/modem_simulator/sim_service.h	/^      EF_PL = 0x2F05,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_PLMN_W_ACT	host/commands/modem_simulator/sim_service.h	/^      EF_PLMN_W_ACT = 0x6F60,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_PNN	host/commands/modem_simulator/sim_service.h	/^      EF_PNN = 0x6FC5,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_PSI	host/commands/modem_simulator/sim_service.h	/^      EF_PSI = 0x6FE5,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_RUIM_SPN	host/commands/modem_simulator/sim_service.h	/^      EF_RUIM_SPN =0x6F41,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_SDN	host/commands/modem_simulator/sim_service.h	/^      EF_SDN = 0x6F49,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_SMS	host/commands/modem_simulator/sim_service.h	/^      EF_SMS = 0x6F3C,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_SPDI	host/commands/modem_simulator/sim_service.h	/^      EF_SPDI = 0x6FCD,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_SPN	host/commands/modem_simulator/sim_service.h	/^      EF_SPN = 0x6F46,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_SPN_CPHS	host/commands/modem_simulator/sim_service.h	/^      EF_SPN_CPHS = 0x6F14,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_SPN_SHORT_CPHS	host/commands/modem_simulator/sim_service.h	/^      EF_SPN_SHORT_CPHS = 0x6F18,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_SST	host/commands/modem_simulator/sim_service.h	/^      EF_SST = 0x6F38,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EF_TYPE_CYCLIC	guest/hals/ril/reference-ril/reference-ril.c	/^#define EF_TYPE_CYCLIC /;"	d	file:
+EF_TYPE_LINEAR_FIXED	guest/hals/ril/reference-ril/reference-ril.c	/^#define EF_TYPE_LINEAR_FIXED /;"	d	file:
+EF_TYPE_TRANSPARENT	guest/hals/ril/reference-ril/reference-ril.c	/^#define EF_TYPE_TRANSPARENT /;"	d	file:
+EF_VOICE_MAIL_INDICATOR_CPHS	host/commands/modem_simulator/sim_service.h	/^      EF_VOICE_MAIL_INDICATOR_CPHS = 0x6F11,$/;"	e	enum:cuttlefish::SimService::SimFileSystem::EFId
+EGLAPI	host/libs/graphics_detector/include/EGL/eglplatform.h	/^#define EGLAPI /;"	d
+EGLAPIENTRY	host/libs/graphics_detector/include/EGL/eglplatform.h	/^#define EGLAPIENTRY /;"	d
+EGLAPIENTRYP	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef struct wl_buffer *(EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC) (EGLDisplay dp/;"	t	typeref:struct:wl_buffer * ()(EGLDisplay dpy,EGLImageKHR image)EGLAPI struct wl_buffer * EGLAPIENTRY eglCreateWaylandBufferFromImageWL (EGLDisplay dpy,EGLImageKHR image)
+EGLAPIENTRYP	host/libs/graphics_detector/include/EGL/eglplatform.h	/^#define EGLAPIENTRYP /;"	d
+EGLAttrib	host/libs/graphics_detector/include/EGL/egl.h	/^typedef intptr_t EGLAttrib;$/;"	t	typeref:typename:intptr_t
+EGLAttribKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef intptr_t EGLAttribKHR;$/;"	t	typeref:typename:intptr_t
+EGLBoolean	host/libs/graphics_detector/include/EGL/egl.h	/^typedef unsigned int EGLBoolean;$/;"	t	typeref:typename:unsigned int
+EGLClientBuffer	host/libs/graphics_detector/include/EGL/egl.h	/^typedef void *EGLClientBuffer;$/;"	t	typeref:typename:void *
+EGLClientPixmapHI	host/libs/graphics_detector/include/EGL/eglext.h	/^struct EGLClientPixmapHI {$/;"	s
+EGLConfig	host/libs/graphics_detector/include/EGL/egl.h	/^typedef void *EGLConfig;$/;"	t	typeref:typename:void *
+EGLContext	host/libs/graphics_detector/include/EGL/egl.h	/^typedef void *EGLContext;$/;"	t	typeref:typename:void *
+EGLDEBUGPROCKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void (EGLAPIENTRY  *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageTyp/;"	t	typeref:typename:void (EGLAPIENTRY *)(EGLenum error,const char * command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char * message)
+EGLDeviceEXT	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLDeviceEXT;$/;"	t	typeref:typename:void *
+EGLDisplay	host/libs/graphics_detector/include/EGL/egl.h	/^typedef void *EGLDisplay;$/;"	t	typeref:typename:void *
+EGLGetBlobFuncANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void/;"	t	typeref:typename:EGLsizeiANDROID (*)(const void * key,EGLsizeiANDROID keySize,void * value,EGLsizeiANDROID valueSize)
+EGLImage	host/libs/graphics_detector/include/EGL/egl.h	/^typedef void *EGLImage;$/;"	t	typeref:typename:void *
+EGLImageKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLImageKHR;$/;"	t	typeref:typename:void *
+EGLLabelKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLLabelKHR;$/;"	t	typeref:typename:void *
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef Display *EGLNativeDisplayType;$/;"	t	typeref:typename:Display *
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef HDC     EGLNativeDisplayType;$/;"	t	typeref:typename:HDC
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef int   EGLNativeDisplayType;$/;"	t	typeref:typename:int
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef int EGLNativeDisplayType;$/;"	t	typeref:typename:int
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef intptr_t EGLNativeDisplayType;$/;"	t	typeref:typename:intptr_t
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef struct gbm_device  *EGLNativeDisplayType;$/;"	t	typeref:struct:gbm_device *
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef struct wl_display     *EGLNativeDisplayType;$/;"	t	typeref:struct:wl_display *
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef void              *EGLNativeDisplayType;$/;"	t	typeref:typename:void *
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef void             *EGLNativeDisplayType;$/;"	t	typeref:typename:void *
+EGLNativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef void*                           EGLNativeDisplayType;$/;"	t	typeref:typename:void *
+EGLNativeFileDescriptorKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef int EGLNativeFileDescriptorKHR;$/;"	t	typeref:typename:int
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef HBITMAP EGLNativePixmapType;$/;"	t	typeref:typename:HBITMAP
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef Pixmap   EGLNativePixmapType;$/;"	t	typeref:typename:Pixmap
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef int EGLNativePixmapType;$/;"	t	typeref:typename:int
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef intptr_t EGLNativePixmapType;$/;"	t	typeref:typename:intptr_t
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef khronos_uintptr_t  EGLNativePixmapType;$/;"	t	typeref:typename:khronos_uintptr_t
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef khronos_uintptr_t EGLNativePixmapType;$/;"	t	typeref:typename:khronos_uintptr_t
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef struct egl_native_pixmap_t*     EGLNativePixmapType;$/;"	t	typeref:struct:egl_native_pixmap_t *
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef struct gbm_bo      *EGLNativePixmapType;$/;"	t	typeref:struct:gbm_bo *
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef struct wl_egl_pixmap  *EGLNativePixmapType;$/;"	t	typeref:struct:wl_egl_pixmap *
+EGLNativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef void *EGLNativePixmapType;$/;"	t	typeref:typename:void *
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef HWND    EGLNativeWindowType;$/;"	t	typeref:typename:HWND
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef Window   EGLNativeWindowType;$/;"	t	typeref:typename:Window
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef int EGLNativeWindowType;$/;"	t	typeref:typename:int
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef intptr_t EGLNativeWindowType;$/;"	t	typeref:typename:intptr_t
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef khronos_uintptr_t  EGLNativeWindowType;$/;"	t	typeref:typename:khronos_uintptr_t
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef khronos_uintptr_t EGLNativeWindowType;$/;"	t	typeref:typename:khronos_uintptr_t
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef struct ANativeWindow*           EGLNativeWindowType;$/;"	t	typeref:struct:ANativeWindow *
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef struct wl_egl_window  *EGLNativeWindowType;$/;"	t	typeref:struct:wl_egl_window *
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef void               *EGLNativeWindowType;$/;"	t	typeref:typename:void *
+EGLNativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef void *EGLNativeWindowType;$/;"	t	typeref:typename:void *
+EGLObjectKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLObjectKHR;$/;"	t	typeref:typename:void *
+EGLOutputLayerEXT	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLOutputLayerEXT;$/;"	t	typeref:typename:void *
+EGLOutputPortEXT	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLOutputPortEXT;$/;"	t	typeref:typename:void *
+EGLSetBlobFuncANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *val/;"	t	typeref:typename:void (*)(const void * key,EGLsizeiANDROID keySize,const void * value,EGLsizeiANDROID valueSize)
+EGLStreamKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLStreamKHR;$/;"	t	typeref:typename:void *
+EGLSurface	host/libs/graphics_detector/include/EGL/egl.h	/^typedef void *EGLSurface;$/;"	t	typeref:typename:void *
+EGLSync	host/libs/graphics_detector/include/EGL/egl.h	/^typedef void *EGLSync;$/;"	t	typeref:typename:void *
+EGLSyncKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLSyncKHR;$/;"	t	typeref:typename:void *
+EGLSyncNV	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void *EGLSyncNV;$/;"	t	typeref:typename:void *
+EGLTime	host/libs/graphics_detector/include/EGL/egl.h	/^typedef khronos_utime_nanoseconds_t EGLTime;$/;"	t	typeref:typename:khronos_utime_nanoseconds_t
+EGLTimeKHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef khronos_utime_nanoseconds_t EGLTimeKHR;$/;"	t	typeref:typename:khronos_utime_nanoseconds_t
+EGLTimeNV	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef khronos_utime_nanoseconds_t EGLTimeNV;$/;"	t	typeref:typename:khronos_utime_nanoseconds_t
+EGL_ALPHA_FORMAT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_ALPHA_FORMAT /;"	d
+EGL_ALPHA_FORMAT_NONPRE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_ALPHA_FORMAT_NONPRE /;"	d
+EGL_ALPHA_FORMAT_PRE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_ALPHA_FORMAT_PRE /;"	d
+EGL_ALPHA_MASK_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_ALPHA_MASK_SIZE /;"	d
+EGL_ALPHA_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_ALPHA_SIZE /;"	d
+EGL_ALREADY_SIGNALED_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ALREADY_SIGNALED_NV /;"	d
+EGL_ANDROID_GLES_layers	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_GLES_layers /;"	d
+EGL_ANDROID_blob_cache	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_blob_cache /;"	d
+EGL_ANDROID_create_native_client_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_create_native_client_buffer /;"	d
+EGL_ANDROID_framebuffer_target	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_framebuffer_target /;"	d
+EGL_ANDROID_front_buffer_auto_refresh	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_front_buffer_auto_refresh /;"	d
+EGL_ANDROID_get_frame_timestamps	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_get_frame_timestamps /;"	d
+EGL_ANDROID_get_native_client_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_get_native_client_buffer /;"	d
+EGL_ANDROID_image_native_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_image_native_buffer /;"	d
+EGL_ANDROID_native_fence_sync	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_native_fence_sync /;"	d
+EGL_ANDROID_presentation_time	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_presentation_time /;"	d
+EGL_ANDROID_recordable	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANDROID_recordable /;"	d
+EGL_ANGLE_d3d_share_handle_client_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANGLE_d3d_share_handle_client_buffer /;"	d
+EGL_ANGLE_device_d3d	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANGLE_device_d3d /;"	d
+EGL_ANGLE_query_surface_pointer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANGLE_query_surface_pointer /;"	d
+EGL_ANGLE_surface_d3d_texture_2d_share_handle	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANGLE_surface_d3d_texture_2d_share_handle /;"	d
+EGL_ANGLE_window_fixed_size	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ANGLE_window_fixed_size /;"	d
+EGL_ARM_image_format	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ARM_image_format /;"	d
+EGL_ARM_implicit_external_sync	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ARM_implicit_external_sync /;"	d
+EGL_ARM_pixmap_multisample_discard	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ARM_pixmap_multisample_discard /;"	d
+EGL_AUTO_STEREO_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_AUTO_STEREO_NV /;"	d
+EGL_BACK_BUFFER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BACK_BUFFER /;"	d
+EGL_BAD_ACCESS	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_ACCESS /;"	d
+EGL_BAD_ALLOC	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_ALLOC /;"	d
+EGL_BAD_ATTRIBUTE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_ATTRIBUTE /;"	d
+EGL_BAD_CONFIG	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_CONFIG /;"	d
+EGL_BAD_CONTEXT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_CONTEXT /;"	d
+EGL_BAD_CURRENT_SURFACE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_CURRENT_SURFACE /;"	d
+EGL_BAD_DEVICE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BAD_DEVICE_EXT /;"	d
+EGL_BAD_DISPLAY	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_DISPLAY /;"	d
+EGL_BAD_MATCH	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_MATCH /;"	d
+EGL_BAD_NATIVE_PIXMAP	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_NATIVE_PIXMAP /;"	d
+EGL_BAD_NATIVE_WINDOW	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_NATIVE_WINDOW /;"	d
+EGL_BAD_OUTPUT_LAYER_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BAD_OUTPUT_LAYER_EXT /;"	d
+EGL_BAD_OUTPUT_PORT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BAD_OUTPUT_PORT_EXT /;"	d
+EGL_BAD_PARAMETER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_PARAMETER /;"	d
+EGL_BAD_STATE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BAD_STATE_KHR /;"	d
+EGL_BAD_STREAM_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BAD_STREAM_KHR /;"	d
+EGL_BAD_SURFACE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BAD_SURFACE /;"	d
+EGL_BIND_TO_TEXTURE_RGB	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BIND_TO_TEXTURE_RGB /;"	d
+EGL_BIND_TO_TEXTURE_RGBA	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BIND_TO_TEXTURE_RGBA /;"	d
+EGL_BITMAP_ORIGIN_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_ORIGIN_KHR /;"	d
+EGL_BITMAP_PITCH_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_PITCH_KHR /;"	d
+EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR /;"	d
+EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR /;"	d
+EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR /;"	d
+EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR /;"	d
+EGL_BITMAP_PIXEL_RED_OFFSET_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR /;"	d
+EGL_BITMAP_PIXEL_SIZE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_PIXEL_SIZE_KHR /;"	d
+EGL_BITMAP_POINTER_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BITMAP_POINTER_KHR /;"	d
+EGL_BLUE_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BLUE_SIZE /;"	d
+EGL_BOTTOM_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BOTTOM_NV /;"	d
+EGL_BUFFER_AGE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BUFFER_AGE_EXT /;"	d
+EGL_BUFFER_AGE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_BUFFER_AGE_KHR /;"	d
+EGL_BUFFER_DESTROYED	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BUFFER_DESTROYED /;"	d
+EGL_BUFFER_PRESERVED	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BUFFER_PRESERVED /;"	d
+EGL_BUFFER_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_BUFFER_SIZE /;"	d
+EGL_CAST	host/libs/graphics_detector/include/EGL/eglplatform.h	/^#define EGL_CAST(/;"	d
+EGL_CLIENT_APIS	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CLIENT_APIS /;"	d
+EGL_CLIENT_PIXMAP_POINTER_HI	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CLIENT_PIXMAP_POINTER_HI /;"	d
+EGL_CL_EVENT_HANDLE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CL_EVENT_HANDLE /;"	d
+EGL_CL_EVENT_HANDLE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CL_EVENT_HANDLE_KHR /;"	d
+EGL_COLORSPACE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_COLORSPACE /;"	d
+EGL_COLORSPACE_LINEAR	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_COLORSPACE_LINEAR /;"	d
+EGL_COLORSPACE_sRGB	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_COLORSPACE_sRGB /;"	d
+EGL_COLOR_ARGB_HI	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_ARGB_HI /;"	d
+EGL_COLOR_BUFFER_TYPE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_COLOR_BUFFER_TYPE /;"	d
+EGL_COLOR_COMPONENT_TYPE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_COMPONENT_TYPE_EXT /;"	d
+EGL_COLOR_COMPONENT_TYPE_FIXED_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_COMPONENT_TYPE_FIXED_EXT /;"	d
+EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT /;"	d
+EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM /;"	d
+EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM /;"	d
+EGL_COLOR_FORMAT_HI	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_FORMAT_HI /;"	d
+EGL_COLOR_RGBA_HI	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_RGBA_HI /;"	d
+EGL_COLOR_RGB_HI	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COLOR_RGB_HI /;"	d
+EGL_COMPOSITE_DEADLINE_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COMPOSITE_DEADLINE_ANDROID /;"	d
+EGL_COMPOSITE_INTERVAL_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COMPOSITE_INTERVAL_ANDROID /;"	d
+EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID /;"	d
+EGL_COMPOSITION_LATCH_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COMPOSITION_LATCH_TIME_ANDROID /;"	d
+EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT /;"	d
+EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT /;"	d
+EGL_CONDITION_SATISFIED	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONDITION_SATISFIED /;"	d
+EGL_CONDITION_SATISFIED_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONDITION_SATISFIED_KHR /;"	d
+EGL_CONDITION_SATISFIED_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONDITION_SATISFIED_NV /;"	d
+EGL_CONFIG_CAVEAT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONFIG_CAVEAT /;"	d
+EGL_CONFIG_ID	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONFIG_ID /;"	d
+EGL_CONFORMANT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONFORMANT /;"	d
+EGL_CONFORMANT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONFORMANT_KHR /;"	d
+EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR /;"	d
+EGL_CONSUMER_AUTO_ORIENTATION_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONSUMER_AUTO_ORIENTATION_NV /;"	d
+EGL_CONSUMER_FRAME_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONSUMER_FRAME_KHR /;"	d
+EGL_CONSUMER_LATENCY_USEC_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONSUMER_LATENCY_USEC_KHR /;"	d
+EGL_CONSUMER_MAX_FRAME_HINT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONSUMER_MAX_FRAME_HINT_NV /;"	d
+EGL_CONSUMER_METADATA_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONSUMER_METADATA_NV /;"	d
+EGL_CONTEXT_CLIENT_TYPE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_CLIENT_TYPE /;"	d
+EGL_CONTEXT_CLIENT_VERSION	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_CLIENT_VERSION /;"	d
+EGL_CONTEXT_FLAGS_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_FLAGS_KHR /;"	d
+EGL_CONTEXT_LOST	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_LOST /;"	d
+EGL_CONTEXT_MAJOR_VERSION	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_MAJOR_VERSION /;"	d
+EGL_CONTEXT_MAJOR_VERSION_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_MAJOR_VERSION_KHR /;"	d
+EGL_CONTEXT_MINOR_VERSION	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_MINOR_VERSION /;"	d
+EGL_CONTEXT_MINOR_VERSION_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_MINOR_VERSION_KHR /;"	d
+EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT /;"	d
+EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR /;"	d
+EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT /;"	d
+EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR /;"	d
+EGL_CONTEXT_OPENGL_DEBUG	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_OPENGL_DEBUG /;"	d
+EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR /;"	d
+EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE /;"	d
+EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR /;"	d
+EGL_CONTEXT_OPENGL_NO_ERROR_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR /;"	d
+EGL_CONTEXT_OPENGL_PROFILE_MASK	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_OPENGL_PROFILE_MASK /;"	d
+EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR /;"	d
+EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY /;"	d
+EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT /;"	d
+EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR /;"	d
+EGL_CONTEXT_OPENGL_ROBUST_ACCESS	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS /;"	d
+EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR /;"	d
+EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT /;"	d
+EGL_CONTEXT_PRIORITY_HIGH_IMG	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_PRIORITY_HIGH_IMG /;"	d
+EGL_CONTEXT_PRIORITY_LEVEL_IMG	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_PRIORITY_LEVEL_IMG /;"	d
+EGL_CONTEXT_PRIORITY_LOW_IMG	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_PRIORITY_LOW_IMG /;"	d
+EGL_CONTEXT_PRIORITY_MEDIUM_IMG	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG /;"	d
+EGL_CONTEXT_PRIORITY_REALTIME_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_PRIORITY_REALTIME_NV /;"	d
+EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR /;"	d
+EGL_CONTEXT_RELEASE_BEHAVIOR_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR /;"	d
+EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR /;"	d
+EGL_CORE_NATIVE_ENGINE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_CORE_NATIVE_ENGINE /;"	d
+EGL_COVERAGE_BUFFERS_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COVERAGE_BUFFERS_NV /;"	d
+EGL_COVERAGE_SAMPLES_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COVERAGE_SAMPLES_NV /;"	d
+EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV /;"	d
+EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV /;"	d
+EGL_COVERAGE_SAMPLE_RESOLVE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_COVERAGE_SAMPLE_RESOLVE_NV /;"	d
+EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT /;"	d
+EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT /;"	d
+EGL_CUDA_DEVICE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CUDA_DEVICE_NV /;"	d
+EGL_CUDA_EVENT_HANDLE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_CUDA_EVENT_HANDLE_NV /;"	d
+EGL_D3D11_DEVICE_ANGLE	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_D3D11_DEVICE_ANGLE /;"	d
+EGL_D3D9_DEVICE_ANGLE	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_D3D9_DEVICE_ANGLE /;"	d
+EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE /;"	d
+EGL_DEBUG_CALLBACK_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEBUG_CALLBACK_KHR /;"	d
+EGL_DEBUG_MSG_CRITICAL_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEBUG_MSG_CRITICAL_KHR /;"	d
+EGL_DEBUG_MSG_ERROR_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEBUG_MSG_ERROR_KHR /;"	d
+EGL_DEBUG_MSG_INFO_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEBUG_MSG_INFO_KHR /;"	d
+EGL_DEBUG_MSG_WARN_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEBUG_MSG_WARN_KHR /;"	d
+EGL_DEFAULT_DISPLAY	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_DEFAULT_DISPLAY /;"	d
+EGL_DEPTH_ENCODING_NONE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEPTH_ENCODING_NONE_NV /;"	d
+EGL_DEPTH_ENCODING_NONLINEAR_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEPTH_ENCODING_NONLINEAR_NV /;"	d
+EGL_DEPTH_ENCODING_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEPTH_ENCODING_NV /;"	d
+EGL_DEPTH_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_DEPTH_SIZE /;"	d
+EGL_DEQUEUE_READY_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEQUEUE_READY_TIME_ANDROID /;"	d
+EGL_DEVICE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DEVICE_EXT /;"	d
+EGL_DISCARD_SAMPLES_ARM	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DISCARD_SAMPLES_ARM /;"	d
+EGL_DISPLAY_PRESENT_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DISPLAY_PRESENT_TIME_ANDROID /;"	d
+EGL_DISPLAY_SCALING	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_DISPLAY_SCALING /;"	d
+EGL_DMA_BUF_PLANE0_FD_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE0_FD_EXT /;"	d
+EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT /;"	d
+EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT /;"	d
+EGL_DMA_BUF_PLANE0_OFFSET_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE0_OFFSET_EXT /;"	d
+EGL_DMA_BUF_PLANE0_PITCH_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE0_PITCH_EXT /;"	d
+EGL_DMA_BUF_PLANE1_FD_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE1_FD_EXT /;"	d
+EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT /;"	d
+EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT /;"	d
+EGL_DMA_BUF_PLANE1_OFFSET_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE1_OFFSET_EXT /;"	d
+EGL_DMA_BUF_PLANE1_PITCH_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE1_PITCH_EXT /;"	d
+EGL_DMA_BUF_PLANE2_FD_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE2_FD_EXT /;"	d
+EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT /;"	d
+EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT /;"	d
+EGL_DMA_BUF_PLANE2_OFFSET_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE2_OFFSET_EXT /;"	d
+EGL_DMA_BUF_PLANE2_PITCH_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE2_PITCH_EXT /;"	d
+EGL_DMA_BUF_PLANE3_FD_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE3_FD_EXT /;"	d
+EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT /;"	d
+EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT /;"	d
+EGL_DMA_BUF_PLANE3_OFFSET_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE3_OFFSET_EXT /;"	d
+EGL_DMA_BUF_PLANE3_PITCH_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DMA_BUF_PLANE3_PITCH_EXT /;"	d
+EGL_DONT_CARE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_DONT_CARE /;"	d
+EGL_DRAW	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_DRAW /;"	d
+EGL_DRM_BUFFER_FORMAT_ARGB32_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA /;"	d
+EGL_DRM_BUFFER_FORMAT_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_BUFFER_FORMAT_MESA /;"	d
+EGL_DRM_BUFFER_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_BUFFER_MESA /;"	d
+EGL_DRM_BUFFER_STRIDE_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_BUFFER_STRIDE_MESA /;"	d
+EGL_DRM_BUFFER_USE_CURSOR_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_BUFFER_USE_CURSOR_MESA /;"	d
+EGL_DRM_BUFFER_USE_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_BUFFER_USE_MESA /;"	d
+EGL_DRM_BUFFER_USE_SCANOUT_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_BUFFER_USE_SCANOUT_MESA /;"	d
+EGL_DRM_BUFFER_USE_SHARE_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_BUFFER_USE_SHARE_MESA /;"	d
+EGL_DRM_CONNECTOR_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_CONNECTOR_EXT /;"	d
+EGL_DRM_CRTC_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_CRTC_EXT /;"	d
+EGL_DRM_DEVICE_FILE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_DEVICE_FILE_EXT /;"	d
+EGL_DRM_MASTER_FD_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_MASTER_FD_EXT /;"	d
+EGL_DRM_PLANE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_DRM_PLANE_EXT /;"	d
+EGL_EGLEXT_VERSION	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EGLEXT_VERSION /;"	d
+EGL_EGL_PROTOTYPES	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_EGL_PROTOTYPES /;"	d
+EGL_EXTENSIONS	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_EXTENSIONS /;"	d
+EGL_EXTERNAL_REF_ID_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXTERNAL_REF_ID_EXT /;"	d
+EGL_EXT_bind_to_front	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_bind_to_front /;"	d
+EGL_EXT_buffer_age	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_buffer_age /;"	d
+EGL_EXT_client_extensions	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_client_extensions /;"	d
+EGL_EXT_client_sync	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_client_sync /;"	d
+EGL_EXT_compositor	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_compositor /;"	d
+EGL_EXT_create_context_robustness	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_create_context_robustness /;"	d
+EGL_EXT_device_base	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_device_base /;"	d
+EGL_EXT_device_drm	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_device_drm /;"	d
+EGL_EXT_device_enumeration	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_device_enumeration /;"	d
+EGL_EXT_device_openwf	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_device_openwf /;"	d
+EGL_EXT_device_query	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_device_query /;"	d
+EGL_EXT_gl_colorspace_bt2020_linear	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_gl_colorspace_bt2020_linear /;"	d
+EGL_EXT_gl_colorspace_bt2020_pq	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_gl_colorspace_bt2020_pq /;"	d
+EGL_EXT_gl_colorspace_display_p3	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_gl_colorspace_display_p3 /;"	d
+EGL_EXT_gl_colorspace_display_p3_linear	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_gl_colorspace_display_p3_linear /;"	d
+EGL_EXT_gl_colorspace_display_p3_passthrough	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_gl_colorspace_display_p3_passthrough /;"	d
+EGL_EXT_gl_colorspace_scrgb	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_gl_colorspace_scrgb /;"	d
+EGL_EXT_gl_colorspace_scrgb_linear	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_gl_colorspace_scrgb_linear /;"	d
+EGL_EXT_image_dma_buf_import	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_image_dma_buf_import /;"	d
+EGL_EXT_image_dma_buf_import_modifiers	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_image_dma_buf_import_modifiers /;"	d
+EGL_EXT_image_gl_colorspace	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_image_gl_colorspace /;"	d
+EGL_EXT_image_implicit_sync_control	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_image_implicit_sync_control /;"	d
+EGL_EXT_multiview_window	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_multiview_window /;"	d
+EGL_EXT_output_base	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_output_base /;"	d
+EGL_EXT_output_drm	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_output_drm /;"	d
+EGL_EXT_output_openwf	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_output_openwf /;"	d
+EGL_EXT_pixel_format_float	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_pixel_format_float /;"	d
+EGL_EXT_platform_base	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_platform_base /;"	d
+EGL_EXT_platform_device	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_platform_device /;"	d
+EGL_EXT_platform_wayland	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_platform_wayland /;"	d
+EGL_EXT_platform_x11	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_platform_x11 /;"	d
+EGL_EXT_protected_content	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_protected_content /;"	d
+EGL_EXT_protected_surface	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_protected_surface /;"	d
+EGL_EXT_stream_consumer_egloutput	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_stream_consumer_egloutput /;"	d
+EGL_EXT_surface_CTA861_3_metadata	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_surface_CTA861_3_metadata /;"	d
+EGL_EXT_surface_SMPTE2086_metadata	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_surface_SMPTE2086_metadata /;"	d
+EGL_EXT_swap_buffers_with_damage	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_swap_buffers_with_damage /;"	d
+EGL_EXT_sync_reuse	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_sync_reuse /;"	d
+EGL_EXT_yuv_surface	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_EXT_yuv_surface /;"	d
+EGL_FALSE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_FALSE /;"	d
+EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID /;"	d
+EGL_FIRST_COMPOSITION_START_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FIRST_COMPOSITION_START_TIME_ANDROID /;"	d
+EGL_FIXED_SIZE_ANGLE	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FIXED_SIZE_ANGLE /;"	d
+EGL_FOREVER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_FOREVER /;"	d
+EGL_FOREVER_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FOREVER_KHR /;"	d
+EGL_FOREVER_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FOREVER_NV /;"	d
+EGL_FORMAT_RGBA_8888_EXACT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FORMAT_RGBA_8888_EXACT_KHR /;"	d
+EGL_FORMAT_RGBA_8888_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FORMAT_RGBA_8888_KHR /;"	d
+EGL_FORMAT_RGB_565_EXACT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FORMAT_RGB_565_EXACT_KHR /;"	d
+EGL_FORMAT_RGB_565_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FORMAT_RGB_565_KHR /;"	d
+EGL_FRAMEBUFFER_TARGET_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FRAMEBUFFER_TARGET_ANDROID /;"	d
+EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID /;"	d
+EGL_FRONT_BUFFER_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_FRONT_BUFFER_EXT /;"	d
+EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV /;"	d
+EGL_GL_COLORSPACE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_COLORSPACE /;"	d
+EGL_GL_COLORSPACE_BT2020_LINEAR_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT /;"	d
+EGL_GL_COLORSPACE_BT2020_PQ_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_BT2020_PQ_EXT /;"	d
+EGL_GL_COLORSPACE_DEFAULT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_DEFAULT_EXT /;"	d
+EGL_GL_COLORSPACE_DISPLAY_P3_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_DISPLAY_P3_EXT /;"	d
+EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT /;"	d
+EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT /;"	d
+EGL_GL_COLORSPACE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_KHR /;"	d
+EGL_GL_COLORSPACE_LINEAR	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_COLORSPACE_LINEAR /;"	d
+EGL_GL_COLORSPACE_LINEAR_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_LINEAR_KHR /;"	d
+EGL_GL_COLORSPACE_SCRGB_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_SCRGB_EXT /;"	d
+EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT /;"	d
+EGL_GL_COLORSPACE_SRGB	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_COLORSPACE_SRGB /;"	d
+EGL_GL_COLORSPACE_SRGB_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_COLORSPACE_SRGB_KHR /;"	d
+EGL_GL_RENDERBUFFER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_RENDERBUFFER /;"	d
+EGL_GL_RENDERBUFFER_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_RENDERBUFFER_KHR /;"	d
+EGL_GL_TEXTURE_2D	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_2D /;"	d
+EGL_GL_TEXTURE_2D_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_2D_KHR /;"	d
+EGL_GL_TEXTURE_3D	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_3D /;"	d
+EGL_GL_TEXTURE_3D_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_3D_KHR /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z /;"	d
+EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR /;"	d
+EGL_GL_TEXTURE_LEVEL	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_LEVEL /;"	d
+EGL_GL_TEXTURE_LEVEL_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_LEVEL_KHR /;"	d
+EGL_GL_TEXTURE_ZOFFSET	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GL_TEXTURE_ZOFFSET /;"	d
+EGL_GL_TEXTURE_ZOFFSET_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_GL_TEXTURE_ZOFFSET_KHR /;"	d
+EGL_GREEN_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_GREEN_SIZE /;"	d
+EGL_HEIGHT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_HEIGHT /;"	d
+EGL_HI_clientpixmap	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_HI_clientpixmap /;"	d
+EGL_HI_colorformats	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_HI_colorformats /;"	d
+EGL_HORIZONTAL_RESOLUTION	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_HORIZONTAL_RESOLUTION /;"	d
+EGL_IMAGE_PRESERVED	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_IMAGE_PRESERVED /;"	d
+EGL_IMAGE_PRESERVED_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_IMAGE_PRESERVED_KHR /;"	d
+EGL_IMG_context_priority	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_IMG_context_priority /;"	d
+EGL_IMG_image_plane_attribs	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_IMG_image_plane_attribs /;"	d
+EGL_IMPORT_EXPLICIT_SYNC_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_IMPORT_EXPLICIT_SYNC_EXT /;"	d
+EGL_IMPORT_IMPLICIT_SYNC_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_IMPORT_IMPLICIT_SYNC_EXT /;"	d
+EGL_IMPORT_SYNC_TYPE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_IMPORT_SYNC_TYPE_EXT /;"	d
+EGL_ITU_REC2020_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ITU_REC2020_EXT /;"	d
+EGL_ITU_REC601_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ITU_REC601_EXT /;"	d
+EGL_ITU_REC709_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_ITU_REC709_EXT /;"	d
+EGL_KHR_cl_event	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_cl_event /;"	d
+EGL_KHR_cl_event2	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_cl_event2 /;"	d
+EGL_KHR_client_get_all_proc_addresses	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_client_get_all_proc_addresses /;"	d
+EGL_KHR_config_attribs	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_config_attribs /;"	d
+EGL_KHR_context_flush_control	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_context_flush_control /;"	d
+EGL_KHR_create_context	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_create_context /;"	d
+EGL_KHR_create_context_no_error	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_create_context_no_error /;"	d
+EGL_KHR_debug	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_debug /;"	d
+EGL_KHR_display_reference	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_display_reference /;"	d
+EGL_KHR_fence_sync	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_fence_sync /;"	d
+EGL_KHR_get_all_proc_addresses	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_get_all_proc_addresses /;"	d
+EGL_KHR_gl_colorspace	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_gl_colorspace /;"	d
+EGL_KHR_gl_renderbuffer_image	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_gl_renderbuffer_image /;"	d
+EGL_KHR_gl_texture_2D_image	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_gl_texture_2D_image /;"	d
+EGL_KHR_gl_texture_3D_image	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_gl_texture_3D_image /;"	d
+EGL_KHR_gl_texture_cubemap_image	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_gl_texture_cubemap_image /;"	d
+EGL_KHR_image	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_image /;"	d
+EGL_KHR_image_base	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_image_base /;"	d
+EGL_KHR_image_pixmap	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_image_pixmap /;"	d
+EGL_KHR_lock_surface	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_lock_surface /;"	d
+EGL_KHR_lock_surface2	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_lock_surface2 /;"	d
+EGL_KHR_lock_surface3	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_lock_surface3 /;"	d
+EGL_KHR_mutable_render_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_mutable_render_buffer /;"	d
+EGL_KHR_no_config_context	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_no_config_context /;"	d
+EGL_KHR_partial_update	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_partial_update /;"	d
+EGL_KHR_platform_android	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_platform_android /;"	d
+EGL_KHR_platform_gbm	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_platform_gbm /;"	d
+EGL_KHR_platform_wayland	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_platform_wayland /;"	d
+EGL_KHR_platform_x11	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_platform_x11 /;"	d
+EGL_KHR_reusable_sync	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_reusable_sync /;"	d
+EGL_KHR_stream	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_stream /;"	d
+EGL_KHR_stream_attrib	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_stream_attrib /;"	d
+EGL_KHR_stream_consumer_gltexture	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_stream_consumer_gltexture /;"	d
+EGL_KHR_stream_cross_process_fd	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_stream_cross_process_fd /;"	d
+EGL_KHR_stream_fifo	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_stream_fifo /;"	d
+EGL_KHR_stream_producer_aldatalocator	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_stream_producer_aldatalocator /;"	d
+EGL_KHR_stream_producer_eglsurface	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_stream_producer_eglsurface /;"	d
+EGL_KHR_surfaceless_context	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_surfaceless_context /;"	d
+EGL_KHR_swap_buffers_with_damage	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_swap_buffers_with_damage /;"	d
+EGL_KHR_vg_parent_image	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_vg_parent_image /;"	d
+EGL_KHR_wait_sync	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_KHR_wait_sync /;"	d
+EGL_LARGEST_PBUFFER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_LARGEST_PBUFFER /;"	d
+EGL_LAST_COMPOSITION_START_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LAST_COMPOSITION_START_TIME_ANDROID /;"	d
+EGL_LEFT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LEFT_NV /;"	d
+EGL_LEVEL	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_LEVEL /;"	d
+EGL_LINUX_DMA_BUF_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LINUX_DMA_BUF_EXT /;"	d
+EGL_LINUX_DRM_FOURCC_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LINUX_DRM_FOURCC_EXT /;"	d
+EGL_LOCK_SURFACE_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LOCK_SURFACE_BIT_KHR /;"	d
+EGL_LOCK_USAGE_HINT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LOCK_USAGE_HINT_KHR /;"	d
+EGL_LOSE_CONTEXT_ON_RESET	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_LOSE_CONTEXT_ON_RESET /;"	d
+EGL_LOSE_CONTEXT_ON_RESET_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LOSE_CONTEXT_ON_RESET_EXT /;"	d
+EGL_LOSE_CONTEXT_ON_RESET_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LOSE_CONTEXT_ON_RESET_KHR /;"	d
+EGL_LOWER_LEFT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_LOWER_LEFT_KHR /;"	d
+EGL_LUMINANCE_BUFFER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_LUMINANCE_BUFFER /;"	d
+EGL_LUMINANCE_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_LUMINANCE_SIZE /;"	d
+EGL_MAP_PRESERVE_PIXELS_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MAP_PRESERVE_PIXELS_KHR /;"	d
+EGL_MATCH_FORMAT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MATCH_FORMAT_KHR /;"	d
+EGL_MATCH_NATIVE_PIXMAP	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MATCH_NATIVE_PIXMAP /;"	d
+EGL_MAX_PBUFFER_HEIGHT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MAX_PBUFFER_HEIGHT /;"	d
+EGL_MAX_PBUFFER_PIXELS	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MAX_PBUFFER_PIXELS /;"	d
+EGL_MAX_PBUFFER_WIDTH	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MAX_PBUFFER_WIDTH /;"	d
+EGL_MAX_STREAM_METADATA_BLOCKS_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MAX_STREAM_METADATA_BLOCKS_NV /;"	d
+EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV /;"	d
+EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV /;"	d
+EGL_MAX_SWAP_INTERVAL	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MAX_SWAP_INTERVAL /;"	d
+EGL_MESA_drm_image	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MESA_drm_image /;"	d
+EGL_MESA_image_dma_buf_export	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MESA_image_dma_buf_export /;"	d
+EGL_MESA_platform_gbm	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MESA_platform_gbm /;"	d
+EGL_MESA_platform_surfaceless	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MESA_platform_surfaceless /;"	d
+EGL_MESA_query_driver	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MESA_query_driver /;"	d
+EGL_METADATA0_SIZE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA0_SIZE_NV /;"	d
+EGL_METADATA0_TYPE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA0_TYPE_NV /;"	d
+EGL_METADATA1_SIZE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA1_SIZE_NV /;"	d
+EGL_METADATA1_TYPE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA1_TYPE_NV /;"	d
+EGL_METADATA2_SIZE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA2_SIZE_NV /;"	d
+EGL_METADATA2_TYPE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA2_TYPE_NV /;"	d
+EGL_METADATA3_SIZE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA3_SIZE_NV /;"	d
+EGL_METADATA3_TYPE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA3_TYPE_NV /;"	d
+EGL_METADATA_SCALING_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_METADATA_SCALING_EXT /;"	d
+EGL_MIN_SWAP_INTERVAL	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MIN_SWAP_INTERVAL /;"	d
+EGL_MIPMAP_LEVEL	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MIPMAP_LEVEL /;"	d
+EGL_MIPMAP_TEXTURE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MIPMAP_TEXTURE /;"	d
+EGL_MULTISAMPLE_RESOLVE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MULTISAMPLE_RESOLVE /;"	d
+EGL_MULTISAMPLE_RESOLVE_BOX	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MULTISAMPLE_RESOLVE_BOX /;"	d
+EGL_MULTISAMPLE_RESOLVE_BOX_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT /;"	d
+EGL_MULTISAMPLE_RESOLVE_DEFAULT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_MULTISAMPLE_RESOLVE_DEFAULT /;"	d
+EGL_MULTIVIEW_VIEW_COUNT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MULTIVIEW_VIEW_COUNT_EXT /;"	d
+EGL_MUTABLE_RENDER_BUFFER_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_MUTABLE_RENDER_BUFFER_BIT_KHR /;"	d
+EGL_NATIVE_BUFFER_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_BUFFER_ANDROID /;"	d
+EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG /;"	d
+EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG /;"	d
+EGL_NATIVE_BUFFER_TIZEN	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_BUFFER_TIZEN /;"	d
+EGL_NATIVE_BUFFER_USAGE_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_BUFFER_USAGE_ANDROID /;"	d
+EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID /;"	d
+EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID /;"	d
+EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID /;"	d
+EGL_NATIVE_PIXMAP_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_PIXMAP_KHR /;"	d
+EGL_NATIVE_RENDERABLE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NATIVE_RENDERABLE /;"	d
+EGL_NATIVE_SURFACE_TIZEN	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NATIVE_SURFACE_TIZEN /;"	d
+EGL_NATIVE_VISUAL_ID	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NATIVE_VISUAL_ID /;"	d
+EGL_NATIVE_VISUAL_TYPE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NATIVE_VISUAL_TYPE /;"	d
+EGL_NOK_swap_region	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NOK_swap_region /;"	d
+EGL_NOK_swap_region2	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NOK_swap_region2 /;"	d
+EGL_NOK_texture_from_pixmap	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NOK_texture_from_pixmap /;"	d
+EGL_NONE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NONE /;"	d
+EGL_NON_CONFORMANT_CONFIG	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NON_CONFORMANT_CONFIG /;"	d
+EGL_NOT_INITIALIZED	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NOT_INITIALIZED /;"	d
+EGL_NO_CONFIG_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_CONFIG_KHR /;"	d
+EGL_NO_CONTEXT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NO_CONTEXT /;"	d
+EGL_NO_DEVICE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_DEVICE_EXT /;"	d
+EGL_NO_DISPLAY	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NO_DISPLAY /;"	d
+EGL_NO_FILE_DESCRIPTOR_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_FILE_DESCRIPTOR_KHR /;"	d
+EGL_NO_IMAGE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NO_IMAGE /;"	d
+EGL_NO_IMAGE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_IMAGE_KHR /;"	d
+EGL_NO_NATIVE_FENCE_FD_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_NATIVE_FENCE_FD_ANDROID /;"	d
+EGL_NO_OUTPUT_LAYER_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_OUTPUT_LAYER_EXT /;"	d
+EGL_NO_OUTPUT_PORT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_OUTPUT_PORT_EXT /;"	d
+EGL_NO_RESET_NOTIFICATION	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NO_RESET_NOTIFICATION /;"	d
+EGL_NO_RESET_NOTIFICATION_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_RESET_NOTIFICATION_EXT /;"	d
+EGL_NO_RESET_NOTIFICATION_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_RESET_NOTIFICATION_KHR /;"	d
+EGL_NO_STREAM_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_STREAM_KHR /;"	d
+EGL_NO_SURFACE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NO_SURFACE /;"	d
+EGL_NO_SYNC	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NO_SYNC /;"	d
+EGL_NO_SYNC_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_SYNC_KHR /;"	d
+EGL_NO_SYNC_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NO_SYNC_NV /;"	d
+EGL_NO_TEXTURE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_NO_TEXTURE /;"	d
+EGL_NV_3dvision_surface	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_3dvision_surface /;"	d
+EGL_NV_context_priority_realtime	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_context_priority_realtime /;"	d
+EGL_NV_coverage_sample	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_coverage_sample /;"	d
+EGL_NV_coverage_sample_resolve	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_coverage_sample_resolve /;"	d
+EGL_NV_cuda_event	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_cuda_event /;"	d
+EGL_NV_depth_nonlinear	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_depth_nonlinear /;"	d
+EGL_NV_device_cuda	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_device_cuda /;"	d
+EGL_NV_native_query	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_native_query /;"	d
+EGL_NV_post_convert_rounding	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_post_convert_rounding /;"	d
+EGL_NV_post_sub_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_post_sub_buffer /;"	d
+EGL_NV_quadruple_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_quadruple_buffer /;"	d
+EGL_NV_robustness_video_memory_purge	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_robustness_video_memory_purge /;"	d
+EGL_NV_stream_consumer_gltexture_yuv	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_consumer_gltexture_yuv /;"	d
+EGL_NV_stream_cross_display	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_cross_display /;"	d
+EGL_NV_stream_cross_object	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_cross_object /;"	d
+EGL_NV_stream_cross_partition	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_cross_partition /;"	d
+EGL_NV_stream_cross_process	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_cross_process /;"	d
+EGL_NV_stream_cross_system	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_cross_system /;"	d
+EGL_NV_stream_dma	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_dma /;"	d
+EGL_NV_stream_fifo_next	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_fifo_next /;"	d
+EGL_NV_stream_fifo_synchronous	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_fifo_synchronous /;"	d
+EGL_NV_stream_flush	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_flush /;"	d
+EGL_NV_stream_frame_limits	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_frame_limits /;"	d
+EGL_NV_stream_metadata	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_metadata /;"	d
+EGL_NV_stream_origin	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_origin /;"	d
+EGL_NV_stream_remote	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_remote /;"	d
+EGL_NV_stream_reset	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_reset /;"	d
+EGL_NV_stream_socket	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_socket /;"	d
+EGL_NV_stream_socket_inet	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_socket_inet /;"	d
+EGL_NV_stream_socket_unix	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_socket_unix /;"	d
+EGL_NV_stream_sync	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_stream_sync /;"	d
+EGL_NV_sync	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_sync /;"	d
+EGL_NV_system_time	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_system_time /;"	d
+EGL_NV_triple_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_NV_triple_buffer /;"	d
+EGL_OBJECT_CONTEXT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OBJECT_CONTEXT_KHR /;"	d
+EGL_OBJECT_DISPLAY_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OBJECT_DISPLAY_KHR /;"	d
+EGL_OBJECT_IMAGE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OBJECT_IMAGE_KHR /;"	d
+EGL_OBJECT_STREAM_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OBJECT_STREAM_KHR /;"	d
+EGL_OBJECT_SURFACE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OBJECT_SURFACE_KHR /;"	d
+EGL_OBJECT_SYNC_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OBJECT_SYNC_KHR /;"	d
+EGL_OBJECT_THREAD_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OBJECT_THREAD_KHR /;"	d
+EGL_OPENGL_API	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENGL_API /;"	d
+EGL_OPENGL_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENGL_BIT /;"	d
+EGL_OPENGL_ES2_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENGL_ES2_BIT /;"	d
+EGL_OPENGL_ES3_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENGL_ES3_BIT /;"	d
+EGL_OPENGL_ES3_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OPENGL_ES3_BIT_KHR /;"	d
+EGL_OPENGL_ES_API	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENGL_ES_API /;"	d
+EGL_OPENGL_ES_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENGL_ES_BIT /;"	d
+EGL_OPENVG_API	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENVG_API /;"	d
+EGL_OPENVG_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENVG_BIT /;"	d
+EGL_OPENVG_IMAGE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_OPENVG_IMAGE /;"	d
+EGL_OPENWF_DEVICE_ID_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OPENWF_DEVICE_ID_EXT /;"	d
+EGL_OPENWF_PIPELINE_ID_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OPENWF_PIPELINE_ID_EXT /;"	d
+EGL_OPENWF_PORT_ID_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OPENWF_PORT_ID_EXT /;"	d
+EGL_OPTIMAL_FORMAT_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_OPTIMAL_FORMAT_BIT_KHR /;"	d
+EGL_PBUFFER_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_PBUFFER_BIT /;"	d
+EGL_PENDING_FRAME_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PENDING_FRAME_NV /;"	d
+EGL_PENDING_METADATA_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PENDING_METADATA_NV /;"	d
+EGL_PIXEL_ASPECT_RATIO	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_PIXEL_ASPECT_RATIO /;"	d
+EGL_PIXMAP_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_PIXMAP_BIT /;"	d
+EGL_PLATFORM_ANDROID_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_ANDROID_KHR /;"	d
+EGL_PLATFORM_DEVICE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_DEVICE_EXT /;"	d
+EGL_PLATFORM_GBM_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_GBM_KHR /;"	d
+EGL_PLATFORM_GBM_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_GBM_MESA /;"	d
+EGL_PLATFORM_SURFACELESS_MESA	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_SURFACELESS_MESA /;"	d
+EGL_PLATFORM_WAYLAND_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_WAYLAND_EXT /;"	d
+EGL_PLATFORM_WAYLAND_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_WAYLAND_KHR /;"	d
+EGL_PLATFORM_X11_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_X11_EXT /;"	d
+EGL_PLATFORM_X11_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_X11_KHR /;"	d
+EGL_PLATFORM_X11_SCREEN_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_X11_SCREEN_EXT /;"	d
+EGL_PLATFORM_X11_SCREEN_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PLATFORM_X11_SCREEN_KHR /;"	d
+EGL_POST_SUB_BUFFER_SUPPORTED_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_POST_SUB_BUFFER_SUPPORTED_NV /;"	d
+EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT /;"	d
+EGL_PRODUCER_AUTO_ORIENTATION_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PRODUCER_AUTO_ORIENTATION_NV /;"	d
+EGL_PRODUCER_FRAME_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PRODUCER_FRAME_KHR /;"	d
+EGL_PRODUCER_MAX_FRAME_HINT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PRODUCER_MAX_FRAME_HINT_NV /;"	d
+EGL_PRODUCER_METADATA_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PRODUCER_METADATA_NV /;"	d
+EGL_PROTECTED_CONTENT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_PROTECTED_CONTENT_EXT /;"	d
+EGL_QUADRUPLE_BUFFER_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_QUADRUPLE_BUFFER_NV /;"	d
+EGL_READ	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_READ /;"	d
+EGL_READS_DONE_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_READS_DONE_TIME_ANDROID /;"	d
+EGL_READ_SURFACE_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_READ_SURFACE_BIT_KHR /;"	d
+EGL_RECORDABLE_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_RECORDABLE_ANDROID /;"	d
+EGL_RED_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_RED_SIZE /;"	d
+EGL_RENDERABLE_TYPE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_RENDERABLE_TYPE /;"	d
+EGL_RENDERING_COMPLETE_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_RENDERING_COMPLETE_TIME_ANDROID /;"	d
+EGL_RENDER_BUFFER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_RENDER_BUFFER /;"	d
+EGL_REQUESTED_PRESENT_TIME_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_REQUESTED_PRESENT_TIME_ANDROID /;"	d
+EGL_RGB_BUFFER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_RGB_BUFFER /;"	d
+EGL_RIGHT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_RIGHT_NV /;"	d
+EGL_SAMPLES	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SAMPLES /;"	d
+EGL_SAMPLE_BUFFERS	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SAMPLE_BUFFERS /;"	d
+EGL_SAMPLE_RANGE_HINT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SAMPLE_RANGE_HINT_EXT /;"	d
+EGL_SIGNALED	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SIGNALED /;"	d
+EGL_SIGNALED_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SIGNALED_KHR /;"	d
+EGL_SIGNALED_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SIGNALED_NV /;"	d
+EGL_SINGLE_BUFFER	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SINGLE_BUFFER /;"	d
+EGL_SLOW_CONFIG	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SLOW_CONFIG /;"	d
+EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT /;"	d
+EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT /;"	d
+EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT /;"	d
+EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT /;"	d
+EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT /;"	d
+EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT /;"	d
+EGL_SMPTE2086_MAX_LUMINANCE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_MAX_LUMINANCE_EXT /;"	d
+EGL_SMPTE2086_MIN_LUMINANCE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_MIN_LUMINANCE_EXT /;"	d
+EGL_SMPTE2086_WHITE_POINT_X_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_WHITE_POINT_X_EXT /;"	d
+EGL_SMPTE2086_WHITE_POINT_Y_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SMPTE2086_WHITE_POINT_Y_EXT /;"	d
+EGL_SOCKET_HANDLE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SOCKET_HANDLE_NV /;"	d
+EGL_SOCKET_TYPE_INET_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SOCKET_TYPE_INET_NV /;"	d
+EGL_SOCKET_TYPE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SOCKET_TYPE_NV /;"	d
+EGL_SOCKET_TYPE_UNIX_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SOCKET_TYPE_UNIX_NV /;"	d
+EGL_STENCIL_SIZE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_STENCIL_SIZE /;"	d
+EGL_STREAM_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_BIT_KHR /;"	d
+EGL_STREAM_CONSUMER_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_CONSUMER_NV /;"	d
+EGL_STREAM_CROSS_DISPLAY_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_CROSS_DISPLAY_NV /;"	d
+EGL_STREAM_CROSS_OBJECT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_CROSS_OBJECT_NV /;"	d
+EGL_STREAM_CROSS_PARTITION_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_CROSS_PARTITION_NV /;"	d
+EGL_STREAM_CROSS_PROCESS_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_CROSS_PROCESS_NV /;"	d
+EGL_STREAM_CROSS_SYSTEM_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_CROSS_SYSTEM_NV /;"	d
+EGL_STREAM_DMA_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_DMA_NV /;"	d
+EGL_STREAM_DMA_SERVER_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_DMA_SERVER_NV /;"	d
+EGL_STREAM_ENDPOINT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_ENDPOINT_NV /;"	d
+EGL_STREAM_FIFO_LENGTH_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_FIFO_LENGTH_KHR /;"	d
+EGL_STREAM_FIFO_SYNCHRONOUS_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_FIFO_SYNCHRONOUS_NV /;"	d
+EGL_STREAM_FRAME_MAJOR_AXIS_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_FRAME_MAJOR_AXIS_NV /;"	d
+EGL_STREAM_FRAME_ORIGIN_X_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_FRAME_ORIGIN_X_NV /;"	d
+EGL_STREAM_FRAME_ORIGIN_Y_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_FRAME_ORIGIN_Y_NV /;"	d
+EGL_STREAM_LOCAL_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_LOCAL_NV /;"	d
+EGL_STREAM_PRODUCER_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_PRODUCER_NV /;"	d
+EGL_STREAM_PROTOCOL_FD_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_PROTOCOL_FD_NV /;"	d
+EGL_STREAM_PROTOCOL_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_PROTOCOL_NV /;"	d
+EGL_STREAM_PROTOCOL_SOCKET_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_PROTOCOL_SOCKET_NV /;"	d
+EGL_STREAM_STATE_CONNECTING_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_STATE_CONNECTING_KHR /;"	d
+EGL_STREAM_STATE_CREATED_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_STATE_CREATED_KHR /;"	d
+EGL_STREAM_STATE_DISCONNECTED_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_STATE_DISCONNECTED_KHR /;"	d
+EGL_STREAM_STATE_EMPTY_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_STATE_EMPTY_KHR /;"	d
+EGL_STREAM_STATE_INITIALIZING_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_STATE_INITIALIZING_NV /;"	d
+EGL_STREAM_STATE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_STATE_KHR /;"	d
+EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR /;"	d
+EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR /;"	d
+EGL_STREAM_TIME_CONSUMER_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_TIME_CONSUMER_KHR /;"	d
+EGL_STREAM_TIME_NOW_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_TIME_NOW_KHR /;"	d
+EGL_STREAM_TIME_PENDING_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_TIME_PENDING_NV /;"	d
+EGL_STREAM_TIME_PRODUCER_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_TIME_PRODUCER_KHR /;"	d
+EGL_STREAM_TYPE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_STREAM_TYPE_NV /;"	d
+EGL_SUCCESS	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SUCCESS /;"	d
+EGL_SUPPORT_RESET_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SUPPORT_RESET_NV /;"	d
+EGL_SUPPORT_REUSE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SUPPORT_REUSE_NV /;"	d
+EGL_SURFACE_TYPE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SURFACE_TYPE /;"	d
+EGL_SWAP_BEHAVIOR	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SWAP_BEHAVIOR /;"	d
+EGL_SWAP_BEHAVIOR_PRESERVED_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT /;"	d
+EGL_SWAP_INTERVAL_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SWAP_INTERVAL_EXT /;"	d
+EGL_SYNC_CLIENT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_CLIENT_EXT /;"	d
+EGL_SYNC_CLIENT_SIGNAL_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_CLIENT_SIGNAL_EXT /;"	d
+EGL_SYNC_CL_EVENT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SYNC_CL_EVENT /;"	d
+EGL_SYNC_CL_EVENT_COMPLETE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SYNC_CL_EVENT_COMPLETE /;"	d
+EGL_SYNC_CL_EVENT_COMPLETE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_CL_EVENT_COMPLETE_KHR /;"	d
+EGL_SYNC_CL_EVENT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_CL_EVENT_KHR /;"	d
+EGL_SYNC_CONDITION	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SYNC_CONDITION /;"	d
+EGL_SYNC_CONDITION_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_CONDITION_KHR /;"	d
+EGL_SYNC_CONDITION_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_CONDITION_NV /;"	d
+EGL_SYNC_CUDA_EVENT_COMPLETE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV /;"	d
+EGL_SYNC_CUDA_EVENT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_CUDA_EVENT_NV /;"	d
+EGL_SYNC_FENCE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SYNC_FENCE /;"	d
+EGL_SYNC_FENCE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_FENCE_KHR /;"	d
+EGL_SYNC_FENCE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_FENCE_NV /;"	d
+EGL_SYNC_FLUSH_COMMANDS_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SYNC_FLUSH_COMMANDS_BIT /;"	d
+EGL_SYNC_FLUSH_COMMANDS_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR /;"	d
+EGL_SYNC_FLUSH_COMMANDS_BIT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV /;"	d
+EGL_SYNC_NATIVE_FENCE_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_NATIVE_FENCE_ANDROID /;"	d
+EGL_SYNC_NATIVE_FENCE_FD_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID /;"	d
+EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID /;"	d
+EGL_SYNC_NEW_FRAME_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_NEW_FRAME_NV /;"	d
+EGL_SYNC_PRIOR_COMMANDS_COMPLETE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE /;"	d
+EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR /;"	d
+EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV /;"	d
+EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM /;"	d
+EGL_SYNC_REUSABLE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_REUSABLE_KHR /;"	d
+EGL_SYNC_STATUS	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SYNC_STATUS /;"	d
+EGL_SYNC_STATUS_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_STATUS_KHR /;"	d
+EGL_SYNC_STATUS_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_STATUS_NV /;"	d
+EGL_SYNC_TYPE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_SYNC_TYPE /;"	d
+EGL_SYNC_TYPE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_TYPE_KHR /;"	d
+EGL_SYNC_TYPE_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_SYNC_TYPE_NV /;"	d
+EGL_TEXTURE_2D	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TEXTURE_2D /;"	d
+EGL_TEXTURE_EXTERNAL_WL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TEXTURE_EXTERNAL_WL /;"	d
+EGL_TEXTURE_FORMAT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TEXTURE_FORMAT /;"	d
+EGL_TEXTURE_RGB	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TEXTURE_RGB /;"	d
+EGL_TEXTURE_RGBA	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TEXTURE_RGBA /;"	d
+EGL_TEXTURE_TARGET	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TEXTURE_TARGET /;"	d
+EGL_TEXTURE_Y_UV_WL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TEXTURE_Y_UV_WL /;"	d
+EGL_TEXTURE_Y_U_V_WL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TEXTURE_Y_U_V_WL /;"	d
+EGL_TEXTURE_Y_XUXV_WL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TEXTURE_Y_XUXV_WL /;"	d
+EGL_TIMEOUT_EXPIRED	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TIMEOUT_EXPIRED /;"	d
+EGL_TIMEOUT_EXPIRED_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TIMEOUT_EXPIRED_KHR /;"	d
+EGL_TIMEOUT_EXPIRED_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TIMEOUT_EXPIRED_NV /;"	d
+EGL_TIMESTAMPS_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TIMESTAMPS_ANDROID /;"	d
+EGL_TIMESTAMP_INVALID_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TIMESTAMP_INVALID_ANDROID /;"	d
+EGL_TIMESTAMP_PENDING_ANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TIMESTAMP_PENDING_ANDROID /;"	d
+EGL_TIZEN_image_native_buffer	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TIZEN_image_native_buffer /;"	d
+EGL_TIZEN_image_native_surface	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TIZEN_image_native_surface /;"	d
+EGL_TOP_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TOP_NV /;"	d
+EGL_TRACK_REFERENCES_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TRACK_REFERENCES_KHR /;"	d
+EGL_TRANSPARENT_BLUE_VALUE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TRANSPARENT_BLUE_VALUE /;"	d
+EGL_TRANSPARENT_GREEN_VALUE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TRANSPARENT_GREEN_VALUE /;"	d
+EGL_TRANSPARENT_RED_VALUE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TRANSPARENT_RED_VALUE /;"	d
+EGL_TRANSPARENT_RGB	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TRANSPARENT_RGB /;"	d
+EGL_TRANSPARENT_TYPE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TRANSPARENT_TYPE /;"	d
+EGL_TRIPLE_BUFFER_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_TRIPLE_BUFFER_NV /;"	d
+EGL_TRUE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_TRUE /;"	d
+EGL_UNKNOWN	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_UNKNOWN /;"	d
+EGL_UNSIGNALED	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_UNSIGNALED /;"	d
+EGL_UNSIGNALED_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_UNSIGNALED_KHR /;"	d
+EGL_UNSIGNALED_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_UNSIGNALED_NV /;"	d
+EGL_UPPER_LEFT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_UPPER_LEFT_KHR /;"	d
+EGL_VENDOR	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VENDOR /;"	d
+EGL_VERSION	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VERSION /;"	d
+EGL_VERSION_1_0	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VERSION_1_0 /;"	d
+EGL_VERSION_1_1	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VERSION_1_1 /;"	d
+EGL_VERSION_1_2	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VERSION_1_2 /;"	d
+EGL_VERSION_1_3	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VERSION_1_3 /;"	d
+EGL_VERSION_1_4	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VERSION_1_4 /;"	d
+EGL_VERSION_1_5	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VERSION_1_5 /;"	d
+EGL_VERTICAL_RESOLUTION	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VERTICAL_RESOLUTION /;"	d
+EGL_VG_ALPHA_FORMAT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VG_ALPHA_FORMAT /;"	d
+EGL_VG_ALPHA_FORMAT_NONPRE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VG_ALPHA_FORMAT_NONPRE /;"	d
+EGL_VG_ALPHA_FORMAT_PRE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VG_ALPHA_FORMAT_PRE /;"	d
+EGL_VG_ALPHA_FORMAT_PRE_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VG_ALPHA_FORMAT_PRE_BIT /;"	d
+EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR /;"	d
+EGL_VG_COLORSPACE	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VG_COLORSPACE /;"	d
+EGL_VG_COLORSPACE_LINEAR	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VG_COLORSPACE_LINEAR /;"	d
+EGL_VG_COLORSPACE_LINEAR_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VG_COLORSPACE_LINEAR_BIT /;"	d
+EGL_VG_COLORSPACE_LINEAR_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR /;"	d
+EGL_VG_COLORSPACE_sRGB	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_VG_COLORSPACE_sRGB /;"	d
+EGL_VG_PARENT_IMAGE_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_VG_PARENT_IMAGE_KHR /;"	d
+EGL_WAYLAND_BUFFER_WL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_WAYLAND_BUFFER_WL /;"	d
+EGL_WAYLAND_PLANE_WL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_WAYLAND_PLANE_WL /;"	d
+EGL_WAYLAND_Y_INVERTED_WL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_WAYLAND_Y_INVERTED_WL /;"	d
+EGL_WIDTH	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_WIDTH /;"	d
+EGL_WINDOW_BIT	host/libs/graphics_detector/include/EGL/egl.h	/^#define EGL_WINDOW_BIT /;"	d
+EGL_WL_bind_wayland_display	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_WL_bind_wayland_display /;"	d
+EGL_WL_create_wayland_buffer_from_image	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_WL_create_wayland_buffer_from_image /;"	d
+EGL_WRITE_SURFACE_BIT_KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_WRITE_SURFACE_BIT_KHR /;"	d
+EGL_X_AXIS_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_X_AXIS_NV /;"	d
+EGL_YUV_BUFFER_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_BUFFER_EXT /;"	d
+EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT /;"	d
+EGL_YUV_CHROMA_SITING_0_5_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_CHROMA_SITING_0_5_EXT /;"	d
+EGL_YUV_CHROMA_SITING_0_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_CHROMA_SITING_0_EXT /;"	d
+EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT /;"	d
+EGL_YUV_COLOR_SPACE_HINT_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_COLOR_SPACE_HINT_EXT /;"	d
+EGL_YUV_CSC_STANDARD_2020_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_CSC_STANDARD_2020_EXT /;"	d
+EGL_YUV_CSC_STANDARD_601_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_CSC_STANDARD_601_EXT /;"	d
+EGL_YUV_CSC_STANDARD_709_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_CSC_STANDARD_709_EXT /;"	d
+EGL_YUV_CSC_STANDARD_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_CSC_STANDARD_EXT /;"	d
+EGL_YUV_DEPTH_RANGE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_DEPTH_RANGE_EXT /;"	d
+EGL_YUV_DEPTH_RANGE_FULL_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_DEPTH_RANGE_FULL_EXT /;"	d
+EGL_YUV_DEPTH_RANGE_LIMITED_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT /;"	d
+EGL_YUV_FULL_RANGE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_FULL_RANGE_EXT /;"	d
+EGL_YUV_NARROW_RANGE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_NARROW_RANGE_EXT /;"	d
+EGL_YUV_NUMBER_OF_PLANES_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_NUMBER_OF_PLANES_EXT /;"	d
+EGL_YUV_ORDER_AYUV_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_ORDER_AYUV_EXT /;"	d
+EGL_YUV_ORDER_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_ORDER_EXT /;"	d
+EGL_YUV_ORDER_UYVY_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_ORDER_UYVY_EXT /;"	d
+EGL_YUV_ORDER_VYUY_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_ORDER_VYUY_EXT /;"	d
+EGL_YUV_ORDER_YUV_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_ORDER_YUV_EXT /;"	d
+EGL_YUV_ORDER_YUYV_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_ORDER_YUYV_EXT /;"	d
+EGL_YUV_ORDER_YVU_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_ORDER_YVU_EXT /;"	d
+EGL_YUV_ORDER_YVYU_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_ORDER_YVYU_EXT /;"	d
+EGL_YUV_PLANE0_TEXTURE_UNIT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_PLANE0_TEXTURE_UNIT_NV /;"	d
+EGL_YUV_PLANE1_TEXTURE_UNIT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_PLANE1_TEXTURE_UNIT_NV /;"	d
+EGL_YUV_PLANE2_TEXTURE_UNIT_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_PLANE2_TEXTURE_UNIT_NV /;"	d
+EGL_YUV_PLANE_BPP_0_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_PLANE_BPP_0_EXT /;"	d
+EGL_YUV_PLANE_BPP_10_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_PLANE_BPP_10_EXT /;"	d
+EGL_YUV_PLANE_BPP_8_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_PLANE_BPP_8_EXT /;"	d
+EGL_YUV_PLANE_BPP_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_PLANE_BPP_EXT /;"	d
+EGL_YUV_SUBSAMPLE_4_2_0_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_SUBSAMPLE_4_2_0_EXT /;"	d
+EGL_YUV_SUBSAMPLE_4_2_2_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_SUBSAMPLE_4_2_2_EXT /;"	d
+EGL_YUV_SUBSAMPLE_4_4_4_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_SUBSAMPLE_4_4_4_EXT /;"	d
+EGL_YUV_SUBSAMPLE_EXT	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_YUV_SUBSAMPLE_EXT /;"	d
+EGL_Y_AXIS_NV	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_Y_AXIS_NV /;"	d
+EGL_Y_INVERTED_NOK	host/libs/graphics_detector/include/EGL/eglext.h	/^#define EGL_Y_INVERTED_NOK /;"	d
+EGLenum	host/libs/graphics_detector/include/EGL/egl.h	/^typedef unsigned int EGLenum;$/;"	t	typeref:typename:unsigned int
+EGLint	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef khronos_int32_t EGLint;$/;"	t	typeref:typename:khronos_int32_t
+EGLnsecsANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef khronos_stime_nanoseconds_t EGLnsecsANDROID;$/;"	t	typeref:typename:khronos_stime_nanoseconds_t
+EGLsizeiANDROID	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef khronos_ssize_t EGLsizeiANDROID;$/;"	t	typeref:typename:khronos_ssize_t
+EGLuint64KHR	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef khronos_uint64_t EGLuint64KHR;$/;"	t	typeref:typename:khronos_uint64_t
+EGLuint64NV	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef khronos_utime_nanoseconds_t EGLuint64NV;$/;"	t	typeref:typename:khronos_utime_nanoseconds_t
+EMULATOR_RADIO_INTERFACE	guest/hals/ril/reference-ril/reference-ril.c	/^#define EMULATOR_RADIO_INTERFACE /;"	d	file:
+ENABLE	host/commands/modem_simulator/sim_service.h	/^      ENABLE,$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockStatus
+ENABLE	host/commands/modem_simulator/sup_service.h	/^      ENABLE        = 1,$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::CallForwardInfoStatus
+END	tests/ril/runtests.sh	/^  cat <<END$/;"	h
+END	tests/wifi/runtests.sh	/^  cat <<END$/;"	h
+END_OF_MSG_MARK	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^constexpr char END_OF_MSG_MARK[] = "\\n\\n\\n\\n";$/;"	v	typeref:typename:char[]
+EOF	tools/create_base_image_arm.sh	/^	cat > ${tmpfile} << "EOF"$/;"	h
+EOF	tools/create_base_image_gce.sh	/^sudo tee \/mnt\/image\/etc\/sysctl.d\/80-nsjail.conf >\/dev\/null <<EOF$/;"	h
+EOF	tools/create_base_image_hostlib.sh	/^  cat <<EOF$/;"	h
+EOF	tools/network-setup.sh	/^	cat >>$USER_HOME\/.ssh\/config << EOF$/;"	h
+EOF	tools/network-setup.sh	/^cat > \/etc\/systemd\/system\/iptables-rockpi.service << EOF$/;"	h
+EOF	tools/network-setup.sh	/^cat > \/usr\/local\/sbin\/iptables-rockpi.sh << EOF$/;"	h
+EOF	tools/network-setup.sh	/^cat >\/etc\/dnsmasq.d\/${ROCKNET}.conf << EOF$/;"	h
+EOF	tools/network-setup.sh	/^cat >\/etc\/network\/interfaces.d\/${ROCKNET}.conf <<EOF$/;"	h
+EOF	tools/network-setup.sh	/^cat >\/etc\/udev\/rules.d\/82-${ROCKNET}.rules <<EOF$/;"	h
+EPDG	guest/hals/ril/reference-libril/ril.h	/^    EPDG = 1, \/* Key type to be used for ePDG *\/$/;"	e	enum:__anon0bfbaecf2b03
+ERASURE	host/commands/modem_simulator/sup_service.h	/^      ERASURE       = 4,$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::CallForwardInfoStatus
+ETHERNET_NETWORK_CONNECTED_MESSAGE	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    private static final String ETHERNET_NETWORK_CONNECTED_MESSAGE =$/;"	f	class:ConnectivityChecker	file:
+EUTRAN	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN = 0x03,      \/\/ Evolved Universal Terrestrial Radio Access Network$/;"	e	enum:__anon0bfbaecfa503
+EUTRAN_BAND_1	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_1 = 1,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_10	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_10 = 10,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_11	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_11 = 11,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_12	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_12 = 12,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_13	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_13 = 13,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_14	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_14 = 14,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_17	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_17 = 17,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_18	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_18 = 18,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_19	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_19 = 19,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_2	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_2 = 2,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_20	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_20 = 20,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_21	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_21 = 21,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_22	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_22 = 22,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_23	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_23 = 23,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_24	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_24 = 24,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_25	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_25 = 25,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_26	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_26 = 26,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_27	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_27 = 27,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_28	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_28 = 28,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_3	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_3 = 3,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_30	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_30 = 30,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_31	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_31 = 31,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_33	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_33 = 33,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_34	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_34 = 34,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_35	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_35 = 35,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_36	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_36 = 36,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_37	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_37 = 37,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_38	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_38 = 38,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_39	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_39 = 39,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_4	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_4 = 4,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_40	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_40 = 40,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_41	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_41 = 41,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_42	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_42 = 42,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_43	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_43 = 43,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_44	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_44 = 44,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_45	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_45 = 45,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_46	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_46 = 46,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_47	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_47 = 47,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_48	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_48 = 48,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_5	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_5 = 5,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_6	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_6 = 6,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_65	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_65 = 65,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_66	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_66 = 66,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_68	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_68 = 68,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_7	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_7 = 7,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_70	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_70 = 70,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_8	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_8 = 8,$/;"	e	enum:__anon0bfbaecfa903
+EUTRAN_BAND_9	guest/hals/ril/reference-libril/ril.h	/^    EUTRAN_BAND_9 = 9,$/;"	e	enum:__anon0bfbaecfa903
+EVDO	guest/hals/ril/reference-ril/reference-ril.c	/^#define EVDO /;"	d	file:
+EVDO_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_EVDO_SignalStrength     EVDO_SignalStrength;$/;"	m	struct:__anon0bfbaecf5108	typeref:typename:RIL_EVDO_SignalStrength
+EVDO_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_EVDO_SignalStrength     EVDO_SignalStrength;$/;"	m	struct:__anon0bfbaecf5208	typeref:typename:RIL_EVDO_SignalStrength
+EVDO_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_EVDO_SignalStrength     EVDO_SignalStrength;$/;"	m	struct:__anon0bfbaecf5308	typeref:typename:RIL_EVDO_SignalStrength
+EVDO_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_EVDO_SignalStrength EVDO_SignalStrength;$/;"	m	struct:__anon0bfbaecf4f08	typeref:typename:RIL_EVDO_SignalStrength
+EVDO_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_EVDO_SignalStrength EVDO_SignalStrength;$/;"	m	struct:__anon0bfbaecf5008	typeref:typename:RIL_EVDO_SignalStrength
+EXCLUDES	common/libs/concurrency/thread_annotations.h	/^#define EXCLUDES(/;"	d
+EXCLUDE_BUILD_RAMDUMP_UPLOADER_DEBUG_TOOL	shared/BoardConfig.mk	/^EXCLUDE_BUILD_RAMDUMP_UPLOADER_DEBUG_TOOL := true$/;"	m
+EXTERNAL	host/commands/metrics/proto/common.proto	/^  EXTERNAL = 1;$/;"	e	enum:UserType
+EXTERNAL_VSOC_LIBNL_INCLUDE	guest/libs/wpa_supplicant_8_lib/Android.mk	/^EXTERNAL_VSOC_LIBNL_INCLUDE := external\/gce\/libnl\/include$/;"	m
+EXTERNAL_VSOC_LIBNL_INCLUDE	guest/libs/wpa_supplicant_8_lib/Android.mk	/^EXTERNAL_VSOC_LIBNL_INCLUDE :=$/;"	m
+EarlyBootEnded	guest/hals/keymaster/remote/remote_keymaster.cpp	/^EarlyBootEndedResponse RemoteKeymaster::EarlyBootEnded() {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:EarlyBootEndedResponse
+EarlyBootEnded	guest/hals/keymint/remote/remote_keymaster.cpp	/^EarlyBootEndedResponse RemoteKeymaster::EarlyBootEnded() {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:EarlyBootEndedResponse
+EbtablesBroute	host/libs/allocd/alloc_utils.cpp	/^bool EbtablesBroute(const std::string& name, bool use_ipv4, bool add,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+EbtablesFilter	host/libs/allocd/alloc_utils.cpp	/^bool EbtablesFilter(const std::string& name, bool use_ipv4, bool add,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+EmitEvent	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^bool VirtualDeviceBase::EmitEvent(uint16_t type,$/;"	f	class:VirtualDeviceBase	typeref:typename:bool
+EnableBuiltInAEC	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::EnableBuiltInAEC(bool enable) { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+EnableBuiltInAGC	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::EnableBuiltInAGC(bool enable) { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+EnableBuiltInNS	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::EnableBuiltInNS(bool enable) { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+EnableCredentials	common/libs/utils/unix_sockets.cpp	/^Result<void> UnixMessageSocket::EnableCredentials(bool enable) {$/;"	f	class:cuttlefish::UnixMessageSocket	typeref:typename:Result<void>
+Enabled	host/commands/assemble_cvd/disk_flags.cc	/^  bool Enabled() const override { return !config_.protected_vm(); }$/;"	f	class:cuttlefish::InitializeAccessKregistryImage	typeref:typename:bool	file:
+Enabled	host/commands/assemble_cvd/disk_flags.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::InitializeMetadataImage	typeref:typename:bool	file:
+Enabled	host/commands/assemble_cvd/disk_flags.cc	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::BootImageRepacker	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/boot_state_machine.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/boot_state_machine.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::__anone7ed366f0111::ProcessLeader	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return config_.console(); }$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return config_.enable_host_bluetooth(); }$/;"	f	class:cuttlefish::BluetoothConnector	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return config_.enable_host_bluetooth(); }$/;"	f	class:cuttlefish::RootCanal	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return config_.enable_host_bluetooth(); }$/;"	f	class:cuttlefish::SecureEnvironment	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::ConfigServer	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::KernelLogMonitor	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::LogcatReceiver	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::TombstoneReceiver	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::VmmCommands	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::MetricsService	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::OpenWrt	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::VehicleHalServer	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch.cc	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::WmediumdServer	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch_modem.cpp	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch_streamer.cpp	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/launch_streamer.cpp	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/main.cc	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::__anonadab6e0c0111::CuttlefishEnvironment	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/server_loop.cpp	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/validate.cpp	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateTapDevices	typeref:typename:bool	file:
+Enabled	host/commands/run_cvd/validate.cpp	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateHostConfigurationFeature	typeref:typename:bool	file:
+Enabled	host/libs/config/adb/launch.cpp	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbConnector	typeref:typename:bool	file:
+Enabled	host/libs/config/adb/launch.cpp	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:bool	file:
+Enabled	host/libs/config/data_image.cpp	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::InitializeDataImageImpl	typeref:typename:bool	file:
+Enabled	host/libs/config/data_image.cpp	/^  bool Enabled() const override { return true; }$/;"	f	class:cuttlefish::InitializeMiscImageImpl	typeref:typename:bool	file:
+Enabled	host/libs/config/data_image.cpp	/^  bool Enabled() const override {$/;"	f	class:cuttlefish::InitializeEspImageImpl	typeref:typename:bool	file:
+EncodeBase64	common/libs/utils/base64.cpp	/^bool EncodeBase64(const void *data, size_t size, std::string *out) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+EncoderLoop	host/frontend/webrtc/lib/local_recorder.cpp	/^void LocalRecorder::Display::EncoderLoop() {$/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:void
+EncryptedSerializable	host/commands/secure_env/encrypted_serializable.cpp	/^EncryptedSerializable::EncryptedSerializable($/;"	f	class:cuttlefish::EncryptedSerializable
+EncryptedSerializable	host/commands/secure_env/encrypted_serializable.h	/^class EncryptedSerializable : public keymaster::Serializable {$/;"	c	namespace:cuttlefish
+End	host/libs/image_aggregator/image_aggregator.cc	/^  GptEnd End(const GptBeginning& head) const {$/;"	f	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:GptEnd	file:
+EnqueueMessage	host/libs/websocket/websocket_handler.cpp	/^void WebSocketHandler::EnqueueMessage(const uint8_t* data, size_t len,$/;"	f	class:cuttlefish::WebSocketHandler	typeref:typename:void
+EnqueueMessage	host/libs/websocket/websocket_handler.h	/^  void EnqueueMessage(const char* data, size_t len, bool binary = false) {$/;"	f	class:cuttlefish::WebSocketHandler	typeref:typename:void
+EnqueueWrite	host/commands/console_forwarder/main.cpp	/^  void EnqueueWrite(std::shared_ptr<std::vector<char>> buf_ptr, SharedFD fd) {$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:void	file:
+EnsureDirectoryExists	host/commands/assemble_cvd/clean.cc	/^bool EnsureDirectoryExists(const std::string& directory_path) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+Enum2Base	common/libs/confui/utils.h	/^constexpr typename std::underlying_type_t<T> Enum2Base(T t) {$/;"	f	namespace:cuttlefish	typeref:typename:std::underlying_type_t<T>
+Error	host/libs/confui/cbor.h	/^  enum class Error : uint32_t {$/;"	g	class:cuttlefish::confui::Cbor	typeref:typename:uint32_t
+ErrorCodeV41	guest/hals/keymaster/remote/remote_keymaster4_device.h	/^using ErrorCodeV41 = ::android::hardware::keymaster::V4_1::ErrorCode;$/;"	t	namespace:keymaster::V4_1	typeref:typename:::android::hardware::keymaster::V4_1::ErrorCode
+ErrorFD	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::ErrorFD(int error) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+ErrorType	host/commands/metrics/proto/cf_metrics_event.proto	/^  enum ErrorType {$/;"	g	message:cuttlefish.MetricsEvent
+EspImageTag	host/libs/config/data_image.cpp	/^struct EspImageTag {};$/;"	s	namespace:cuttlefish	file:
+EstablishAndMaintainConnection	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^[[noreturn]] void cuttlefish::EstablishAndMaintainConnection(std::string address) {$/;"	f	class:cuttlefish	typeref:typename:void
+EstablishConnection	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^void EstablishConnection(const std::string& address) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:void
+EstablishHalConnection	host/libs/confui/host_server.cc	/^SharedFD HostServer::EstablishHalConnection() {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:SharedFD
+Esys	host/commands/secure_env/test_tpm.cpp	/^ESYS_CONTEXT* TestTpm::Esys() { return esys_; }$/;"	f	class:cuttlefish::TestTpm	typeref:typename:ESYS_CONTEXT *
+Esys	host/commands/secure_env/tpm_resource_manager.cpp	/^ESYS_CONTEXT* TpmResourceManager::Esys() {$/;"	f	class:cuttlefish::TpmResourceManager	typeref:typename:ESYS_CONTEXT *
+EsysDeleter	host/commands/secure_env/tpm_hmac.h	/^struct EsysDeleter {$/;"	s	namespace:cuttlefish
+EthernetBridge	host/libs/allocd/resource.h	/^  EthernetBridge,$/;"	e	enum:cuttlefish::ResourceType
+EthernetIface	host/libs/allocd/resource.h	/^  EthernetIface(const std::string& name, uid_t uid, uint16_t iface_id,$/;"	f	class:cuttlefish::EthernetIface
+EthernetIface	host/libs/allocd/resource.h	/^  EthernetIface,$/;"	e	enum:cuttlefish::ResourceType
+EthernetIface	host/libs/allocd/resource.h	/^class EthernetIface : public StaticResource {$/;"	c	namespace:cuttlefish
+EthernetNetworkConfig	host/libs/allocd/alloc_utils.h	/^struct EthernetNetworkConfig {$/;"	s	namespace:cuttlefish
+EthernetNetworkConnected	host/commands/kernel_log_monitor/kernel_log_server.h	/^  EthernetNetworkConnected = 7,$/;"	e	enum:monitor::Event
+EvaluateAction	host/libs/config/data_image.cpp	/^  Result<void> EvaluateAction(DataImageAction action) {$/;"	f	class:cuttlefish::InitializeDataImageImpl	typeref:typename:Result<void>	file:
+Event	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Event(int initval, int flags) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+Event	host/commands/kernel_log_monitor/kernel_log_server.h	/^enum Event : int32_t {$/;"	g	namespace:monitor	typeref:typename:int32_t
+Event	host/commands/modem_simulator/thread_looper.h	/^  struct Event {$/;"	s	class:cuttlefish::ThreadLooper
+EventCallback	host/commands/kernel_log_monitor/kernel_log_server.h	/^using EventCallback = std::function<SubscriptionAction(Json::Value)>;$/;"	t	namespace:monitor
+EventFormat	host/commands/kernel_log_monitor/kernel_log_server.cc	/^enum EventFormat {$/;"	g	namespace:__anonfa7764770111	file:
+EventLoop	guest/commands/vsoc_input_service/vsoc_input_service.cpp	/^void EventLoop(std::shared_ptr<VirtualDeviceBase> device,$/;"	f	namespace:__anon7d4eee310111	typeref:typename:void
+EventReporter	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    public EventReporter() {$/;"	m	class:EventReporter
+EventReporter	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^public class EventReporter extends JobBase {$/;"	c
+EventType	host/commands/metrics/proto/cf_metrics_event.proto	/^  enum EventType {$/;"	g	message:cuttlefish.MetricsEvent
+EventfdRead	common/libs/fs/shared_fd.cpp	/^int FileInstance::EventfdRead(eventfd_t* value) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+EventfdWrite	common/libs/fs/shared_fd.cpp	/^int FileInstance::EventfdWrite(eventfd_t value) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+Executable	common/libs/utils/subprocess.h	/^  const std::string& Executable() const { return command_[0]; }$/;"	f	class:cuttlefish::Command	typeref:typename:const std::string &
+ExitOnFail	tools/create_base_image.go	/^    ExitOnFail$/;"	c	package:main
+ExitWithParent	common/libs/utils/subprocess.h	/^  bool ExitWithParent() const { return exit_with_parent_; }$/;"	f	class:cuttlefish::SubprocessOptions	typeref:typename:bool
+ExitWithParent	common/libs/utils/subprocess.h	/^  void ExitWithParent(bool exit_with_parent) {$/;"	f	class:cuttlefish::SubprocessOptions	typeref:typename:void
+ExpandedStorageSize	host/libs/image_aggregator/image_aggregator.cc	/^std::uint64_t ExpandedStorageSize(const std::string& file_path) {$/;"	f	namespace:cuttlefish::__anon02806fd80111	typeref:typename:std::uint64_t
+ExportKey	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::ExportKey(const ExportKeyRequest& request, ExportKeyResponse* response) {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ExportKey	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::ExportKey(const ExportKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ExtractAll	common/libs/utils/archive.cpp	/^bool Archive::ExtractAll(const std::string& target_directory) {$/;"	f	class:cuttlefish::Archive	typeref:typename:bool
+ExtractFiles	common/libs/utils/archive.cpp	/^bool Archive::ExtractFiles(const std::vector<std::string>& to_extract,$/;"	f	class:cuttlefish::Archive	typeref:typename:bool
+ExtractImages	host/commands/fetcher/install_zip.cc	/^std::vector<std::string> ExtractImages(const std::string& archive_file,$/;"	f	typeref:typename:std::vector<std::string>
+ExtractKernelParamsFromFetcherConfig	host/commands/assemble_cvd/assemble_cvd.cc	/^static void ExtractKernelParamsFromFetcherConfig($/;"	f	namespace:cuttlefish::__anon1e335d460111	typeref:typename:void	file:
+ExtractToMemory	common/libs/utils/archive.cpp	/^std::string Archive::ExtractToMemory(const std::string& path) {$/;"	f	class:cuttlefish::Archive	typeref:typename:std::string
+ExtractValue	host/commands/assemble_cvd/boot_image_utils.cc	/^std::string ExtractValue(const std::string& dictionary, const std::string& key) {$/;"	f	namespace:cuttlefish::__anonbfa95aa40111	typeref:typename:std::string
+FAX	host/commands/modem_simulator/sim_service.h	/^      FAX = 1 << 2,     \/\/ facsimile services$/;"	e	enum:cuttlefish::SimService::FacilityLock::Class
+FD	host/commands/modem_simulator/sim_service.h	/^      FD = 10,  \/\/ SIM fixed FDN dialing lock, PIN2 is required as a password$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+FLOAT	host/libs/confui/cbor.h	/^    FLOAT = 7,$/;"	e	enum:cuttlefish::confui::Cbor::Type
+FSCK_ERROR_CORRECTED	host/libs/config/data_image.cpp	/^const int FSCK_ERROR_CORRECTED = 1;$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const int
+FSCK_ERROR_CORRECTED_REQUIRES_REBOOT	host/libs/config/data_image.cpp	/^const int FSCK_ERROR_CORRECTED_REQUIRES_REBOOT = 2;$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const int
+FULL	common/libs/utils/tee_logging.h	/^  FULL,$/;"	e	enum:cuttlefish::MetadataLevel
+FULL_MATCH	host/commands/modem_simulator/modem_service.h	/^  enum MatchMode {FULL_MATCH = 0, PARTIAL_MATCH = 1};$/;"	e	enum:cuttlefish::CommandHandler::MatchMode
+FacilityLock	host/commands/modem_simulator/sim_service.h	/^    FacilityLock(LockStatus status) : lock_status(status) {}$/;"	f	struct:cuttlefish::SimService::FacilityLock
+FacilityLock	host/commands/modem_simulator/sim_service.h	/^  struct FacilityLock {$/;"	s	class:cuttlefish::SimService
+Failure	host/libs/allocd/request.h	/^  Failure       \/\/ Request failed$/;"	e	enum:cuttlefish::RequestStatus
+FailureRecordMap	host/commands/secure_env/soft_gatekeeper.h	/^    typedef std::unordered_map<uint32_t, failure_record_t> FailureRecordMap;$/;"	t	class:gatekeeper::SoftGateKeeper	typeref:typename:std::unordered_map<uint32_t,failure_record_t>
+FallBackStop	host/commands/stop/main.cc	/^int FallBackStop(const std::set<std::string>& paths) {$/;"	f	namespace:cuttlefish::__anon65a808010111	typeref:typename:int
+FallbackPaths	host/commands/stop/main.cc	/^std::set<std::string> FallbackPaths() {$/;"	f	namespace:cuttlefish::__anon65a808010111	typeref:typename:std::set<std::string>
+FastHashMap	host/commands/secure_env/soft_gatekeeper.h	/^    typedef std::unordered_map<uint64_t, fast_hash_t> FastHashMap;$/;"	t	class:gatekeeper::SoftGateKeeper	typeref:typename:std::unordered_map<uint64_t,fast_hash_t>
+Fcntl	common/libs/fs/shared_fd.cpp	/^int FileInstance::Fcntl(int command, int value) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+Feature	host/libs/config/feature.h	/^class Feature : public virtual FeatureSuperclass<Feature> {$/;"	c	namespace:cuttlefish
+FeatureSuperclass	host/libs/config/feature.h	/^class FeatureSuperclass {$/;"	c	namespace:cuttlefish
+FetchCvdMain	host/commands/fetcher/fetch_cvd.cc	/^int FetchCvdMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+FetcherConfig	host/libs/config/fetcher_config.cpp	/^FetcherConfig::FetcherConfig() : dictionary_(new Json::Value()) {$/;"	f	class:cuttlefish::FetcherConfig
+FetcherConfig	host/libs/config/fetcher_config.h	/^class FetcherConfig {$/;"	c	namespace:cuttlefish
+Fifo	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Fifo(const std::string& path, mode_t mode) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+FileCrc	host/libs/config/host_tools_version.cpp	/^static uint32_t FileCrc(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:uint32_t	file:
+FileDescriptors	common/libs/utils/unix_sockets.cpp	/^Result<std::vector<SharedFD>> UnixSocketMessage::FileDescriptors() {$/;"	f	class:cuttlefish::UnixSocketMessage	typeref:typename:Result<std::vector<SharedFD>>
+FileExists	common/libs/utils/files.cpp	/^bool FileExists(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+FileHasContent	common/libs/utils/files.cpp	/^bool FileHasContent(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+FileInstance	common/libs/fs/shared_fd.cpp	/^FileInstance::FileInstance(int fd, int in_errno)$/;"	f	class:cuttlefish::FileInstance
+FileInstance	common/libs/fs/shared_fd.h	/^class FileInstance {$/;"	c	namespace:cuttlefish
+FileModificationTime	common/libs/utils/files.cpp	/^std::chrono::system_clock::time_point FileModificationTime(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:std::chrono::system_clock::time_point
+FileSize	common/libs/utils/files.cpp	/^off_t FileSize(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:off_t
+FileSizes	common/libs/utils/files.h	/^struct FileSizes {$/;"	s	namespace:cuttlefish
+FileSource	host/libs/config/fetcher_config.h	/^enum FileSource {$/;"	g	namespace:cuttlefish
+FinalizeTcti	host/commands/secure_env/device_tpm.cpp	/^static void FinalizeTcti(TSS2_TCTI_CONTEXT* tcti_context) {$/;"	f	namespace:cuttlefish	typeref:typename:void	file:
+FindAndroidInfoConfig	host/libs/config/config_flag.cpp	/^  std::optional<std::string> FindAndroidInfoConfig() const {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:std::optional<std::string>	file:
+FindAttribute	host/commands/modem_simulator/sim_service.cpp	/^XMLElement* SimService::SimFileSystem::FindAttribute(XMLElement *parent,$/;"	f	class:cuttlefish::SimService::SimFileSystem	typeref:typename:XMLElement *
+FindConfigFromStdin	host/commands/run_cvd/main.cc	/^const CuttlefishConfig* FindConfigFromStdin() {$/;"	f	namespace:cuttlefish::__anonadab6e0c0111	typeref:typename:const CuttlefishConfig *
+FindCvdFileWithSuffix	host/libs/config/fetcher_config.cpp	/^std::string FetcherConfig::FindCvdFileWithSuffix(const std::string& suffix) const {$/;"	f	class:cuttlefish::FetcherConfig	typeref:typename:std::string
+FindFetcherConfig	host/commands/assemble_cvd/assemble_cvd.cc	/^FetcherConfig FindFetcherConfig(const std::vector<std::string>& files) {$/;"	f	namespace:cuttlefish::__anon1e335d460111	typeref:typename:FetcherConfig
+FindImports	host/commands/assemble_cvd/super_image_mixer.cc	/^void FindImports(Archive* archive, const std::string& build_prop_file) {$/;"	f	namespace:cuttlefish::__anonae6530d30111	typeref:typename:void
+FindSession	host/libs/allocd/resource_manager.cpp	/^std::optional<std::shared_ptr<Session>> ResourceManager::FindSession($/;"	f	class:cuttlefish::ResourceManager	typeref:typename:std::optional<std::shared_ptr<Session>>
+FinishOperation	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::FinishOperation(const FinishOperationRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+FinishOperation	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::FinishOperation(const FinishOperationRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+FixTimeZone	host/commands/modem_simulator/misc_service.cpp	/^void MiscService::FixTimeZone(std::string& line) {$/;"	f	class:cuttlefish::MiscService	typeref:typename:void
+FixedCredentialSource	host/commands/fetcher/credential_source.cc	/^FixedCredentialSource::FixedCredentialSource(const std::string& credential) {$/;"	f	class:cuttlefish::FixedCredentialSource
+FixedCredentialSource	host/commands/fetcher/credential_source.h	/^class FixedCredentialSource : public CredentialSource {$/;"	c	namespace:cuttlefish
+FixedDataImagePath	host/libs/config/data_image.cpp	/^class FixedDataImagePath : public DataImagePath {$/;"	c	namespace:cuttlefish	file:
+FixedDataImagePathComponent	host/libs/config/data_image.cpp	/^fruit::Component<DataImagePath> FixedDataImagePathComponent($/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<DataImagePath>
+FixedMiscImagePath	host/libs/config/data_image.cpp	/^class FixedMiscImagePath : public MiscImagePath {$/;"	c	namespace:cuttlefish	file:
+FixedMiscImagePathComponent	host/libs/config/data_image.cpp	/^fruit::Component<MiscImagePath> FixedMiscImagePathComponent($/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<MiscImagePath>
+Flag	common/libs/utils/flag_parser.h	/^class Flag {$/;"	c	namespace:cuttlefish
+FlagAlias	common/libs/utils/flag_parser.h	/^struct FlagAlias {$/;"	s	namespace:cuttlefish
+FlagAliasMode	common/libs/utils/flag_parser.h	/^enum class FlagAliasMode {$/;"	g	namespace:cuttlefish
+FlagFeature	host/libs/config/feature.h	/^class FlagFeature : public FeatureSuperclass<FlagFeature> {$/;"	c	namespace:cuttlefish
+FlagForwarder	host/commands/start/flag_forwarder.cc	/^FlagForwarder::FlagForwarder(std::set<std::string> subprocesses)$/;"	f	class:FlagForwarder
+FlagForwarder	host/commands/start/flag_forwarder.h	/^class FlagForwarder {$/;"	c
+FlagMatch	common/libs/utils/flag_parser.h	/^struct FlagMatch {$/;"	s	namespace:cuttlefish
+FlagProcessResult	common/libs/utils/flag_parser.h	/^  enum class FlagProcessResult {$/;"	g	class:cuttlefish::Flag
+Flags	host/libs/config/custom_actions.cpp	/^  std::vector<Flag> Flags() const {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:std::vector<Flag>	file:
+FlagsComponent	host/commands/assemble_cvd/assemble_cvd.cc	/^fruit::Component<> FlagsComponent() {$/;"	f	namespace:cuttlefish::__anon1e335d460111	typeref:typename:fruit::Component<>
+FlagsForSubprocess	host/commands/start/flag_forwarder.cc	/^std::vector<gflags::CommandLineFlagInfo> FlagsForSubprocess(std::string helpxml_output) {$/;"	f	namespace:__anon4552bec90111	typeref:typename:std::vector<gflags::CommandLineFlagInfo>
+ForCurrentInstance	host/libs/config/cuttlefish_config.cpp	/^int ForCurrentInstance(int base) { return base + GetInstance() - 1; }$/;"	f	namespace:cuttlefish	typeref:typename:int
+ForCurrentInstance	host/libs/config/cuttlefish_config.cpp	/^std::string ForCurrentInstance(const char* prefix) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+ForDefaultInstance	host/libs/config/cuttlefish_config.cpp	/^CuttlefishConfig::InstanceSpecific CuttlefishConfig::ForDefaultInstance()$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:CuttlefishConfig::InstanceSpecific
+ForInstance	host/commands/modem_simulator/nvram_config.cpp	/^NvramConfig::InstanceSpecific NvramConfig::ForInstance(int num) const {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:NvramConfig::InstanceSpecific
+ForInstance	host/libs/config/cuttlefish_config.cpp	/^CuttlefishConfig::InstanceSpecific CuttlefishConfig::ForInstance($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:CuttlefishConfig::InstanceSpecific
+ForInstance	host/libs/config/cuttlefish_config.cpp	/^CuttlefishConfig::MutableInstanceSpecific CuttlefishConfig::ForInstance($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:CuttlefishConfig::MutableInstanceSpecific
+ForceFsckImage	host/libs/config/data_image.cpp	/^bool ForceFsckImage(const CuttlefishConfig& config,$/;"	f	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:bool
+ForegroundLauncherPipe	host/commands/run_cvd/boot_state_machine.cc	/^  SharedFD ForegroundLauncherPipe() { return foreground_launcher_pipe_; }$/;"	f	class:cuttlefish::__anone7ed366f0111::ProcessLeader	typeref:typename:SharedFD	file:
+ForgetConnection	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionContextImpl::ForgetConnection(void* raw) {$/;"	f	class:WsConnectionContextImpl	typeref:typename:void
+ForwardCommand	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::ForwardCommand(AndroidKeymasterCommand command, const Serializable& req,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ForwardCommand	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::ForwardCommand(AndroidKeymasterCommand command,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ForwardHandler	host/frontend/webrtc_operator/client_handler.cpp	/^ForwardHandler::ForwardHandler(struct lws* wsi,$/;"	f	class:cuttlefish::ForwardHandler
+ForwardHandler	host/frontend/webrtc_operator/client_handler.h	/^class ForwardHandler : public ClientDynHandler {$/;"	c	namespace:cuttlefish
+FragileTpmStorage	host/commands/secure_env/fragile_tpm_storage.cpp	/^FragileTpmStorage::FragileTpmStorage($/;"	f	class:cuttlefish::FragileTpmStorage
+FragileTpmStorage	host/commands/secure_env/fragile_tpm_storage.h	/^class FragileTpmStorage : public GatekeeperStorage {$/;"	c	namespace:cuttlefish
+FrameCallback	host/libs/wayland/wayland_surfaces.h	/^  using FrameCallback =$/;"	t	class:wayland::Surfaces
+FrameMultiplexer	host/libs/screen_connector/screen_connector.h	/^  using FrameMultiplexer = ScreenConnectorInputMultiplexer<ProcessedFrameType>;$/;"	t	class:cuttlefish::ScreenConnector	typeref:typename:ScreenConnectorInputMultiplexer<ProcessedFrameType>
+FromContext	host/commands/secure_env/in_process_tpm.cpp	/^  static Impl* FromContext(TSS2_TCTI_CONTEXT* context) {$/;"	f	class:cuttlefish::InProcessTpm::Impl	typeref:typename:Impl *	file:
+FromCredentials	common/libs/utils/unix_sockets.cpp	/^ControlMessage ControlMessage::FromCredentials(const ucred& credentials) {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:ControlMessage
+FromFileDescriptors	common/libs/utils/unix_sockets.cpp	/^Result<ControlMessage> ControlMessage::FromFileDescriptors($/;"	f	class:cuttlefish::ControlMessage	typeref:typename:Result<ControlMessage>
+FromPool	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^std::vector<uint8_t> FromPool(int size) {$/;"	f	namespace:cuttlefish::__anonfb30483e0111	typeref:typename:std::vector<uint8_t>
+FromRaw	common/libs/utils/unix_sockets.cpp	/^ControlMessage ControlMessage::FromRaw(const cmsghdr* cmsg) {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:ControlMessage
+FromString	host/commands/start/flag_forwarder.cc	/^T FromString(const std::string& str) {$/;"	f	namespace:__anon4552bec90111	typeref:typename:T
+FsmInput	host/libs/confui/server_common.h	/^enum class FsmInput : std::uint32_t {$/;"	g	namespace:cuttlefish::confui	typeref:typename:std::uint32_t
+Full	host/libs/screen_connector/screen_connector_queue.h	/^  bool Full() const {$/;"	f	class:cuttlefish::ScreenConnectorQueue	typeref:typename:bool
+FullOTA_GetBlockDifferences	shared/releasetools.py	/^def FullOTA_GetBlockDifferences(info):$/;"	f
+GENERATED	host/libs/config/fetcher_config.h	/^  GENERATED,$/;"	e	enum:cuttlefish::FileSource
+GERAN	guest/hals/ril/reference-libril/ril.h	/^    GERAN = 0x01,       \/\/ GSM EDGE Radio Access Network$/;"	e	enum:__anon0bfbaecfa503
+GERAN_BAND_450	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_450 = 3,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_480	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_480 = 4,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_710	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_710 = 5,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_750	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_750 = 6,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_850	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_850 = 8,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_DCS1800	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_DCS1800 = 12,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_E900	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_E900 = 10,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_ER900	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_ER900 = 14,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_P900	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_P900 = 9,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_PCS1900	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_PCS1900 = 13,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_R900	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_R900 = 11,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_T380	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_T380 = 1,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_T410	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_T410 = 2,$/;"	e	enum:__anon0bfbaecfa703
+GERAN_BAND_T810	guest/hals/ril/reference-libril/ril.h	/^    GERAN_BAND_T810 = 7,$/;"	e	enum:__anon0bfbaecfa703
+GET_CHANNEL_STATUS	host/commands/modem_simulator/stk_service.h	/^    GET_CHANNEL_STATUS  = 0x44$/;"	e	enum:cuttlefish::StkService::CommandType
+GET_INKEY	host/commands/modem_simulator/stk_service.h	/^    GET_INKEY           = 0x22,$/;"	e	enum:cuttlefish::StkService::CommandType
+GET_INPUT	host/commands/modem_simulator/stk_service.h	/^    GET_INPUT           = 0x23,$/;"	e	enum:cuttlefish::StkService::CommandType
+GID	shared/config/cgroups.json	/^      "GID": "system"$/;"	s	object:Cgroups.0
+GNSS_SERIAL_BUFFER_SIZE	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^constexpr uint32_t GNSS_SERIAL_BUFFER_SIZE = 4096;$/;"	v	typeref:typename:uint32_t
+GOOGLE	host/commands/metrics/proto/common.proto	/^  GOOGLE = 0;$/;"	e	enum:UserType
+GPT_NUM_PARTITIONS	host/libs/image_aggregator/image_aggregator.cc	/^constexpr int GPT_NUM_PARTITIONS = 128;$/;"	v	namespace:cuttlefish::__anon02806fd80111	typeref:typename:int
+GRPCPP_GRPCPP_H	host/commands/gnss_grpc_proxy/grpcpp.h	/^#define GRPCPP_GRPCPP_H$/;"	d
+GSM	guest/hals/ril/reference-ril/reference-ril.c	/^#define GSM /;"	d	file:
+GUARDED_BY	common/libs/concurrency/thread_annotations.h	/^#define GUARDED_BY(/;"	d
+GUEST_GCE_NETWORK_NETWORK_INTERFACE_H_	common/libs/net/network_interface.h	/^#define GUEST_GCE_NETWORK_NETWORK_INTERFACE_H_$/;"	d
+GW_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_GW_SignalStrength       GW_SignalStrength;$/;"	m	struct:__anon0bfbaecf5108	typeref:typename:RIL_GW_SignalStrength
+GW_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_GW_SignalStrength       GW_SignalStrength;$/;"	m	struct:__anon0bfbaecf5208	typeref:typename:RIL_GW_SignalStrength
+GW_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_GW_SignalStrength       GW_SignalStrength;$/;"	m	struct:__anon0bfbaecf5308	typeref:typename:RIL_GW_SignalStrength
+GW_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_GW_SignalStrength   GW_SignalStrength;$/;"	m	struct:__anon0bfbaecf4f08	typeref:typename:RIL_GW_SignalStrength
+GW_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_GW_SignalStrength   GW_SignalStrength;$/;"	m	struct:__anon0bfbaecf5008	typeref:typename:RIL_GW_SignalStrength
+Gatekeeper	host/libs/config/cuttlefish_config.h	/^  Gatekeeper,$/;"	e	enum:cuttlefish::SecureHal
+GatekeeperChannel	common/libs/security/gatekeeper_channel.cpp	/^GatekeeperChannel::GatekeeperChannel(SharedFD input, SharedFD output)$/;"	f	class:cuttlefish::GatekeeperChannel
+GatekeeperChannel	common/libs/security/gatekeeper_channel.h	/^class GatekeeperChannel {$/;"	c	namespace:cuttlefish
+GatekeeperCommandDestroyer	common/libs/security/gatekeeper_channel.h	/^class GatekeeperCommandDestroyer {$/;"	c	namespace:cuttlefish
+GatekeeperRawMessage	common/libs/security/gatekeeper_channel.h	/^struct GatekeeperRawMessage {$/;"	s	namespace:gatekeeper
+GatekeeperResponder	host/commands/secure_env/gatekeeper_responder.cpp	/^GatekeeperResponder::GatekeeperResponder($/;"	f	class:cuttlefish::GatekeeperResponder
+GatekeeperResponder	host/commands/secure_env/gatekeeper_responder.h	/^class GatekeeperResponder {$/;"	c	namespace:cuttlefish
+GatekeeperStorage	host/commands/secure_env/gatekeeper_storage.h	/^class GatekeeperStorage {$/;"	c	namespace:cuttlefish
+GatewayConfig	host/libs/allocd/alloc_utils.h	/^struct GatewayConfig {$/;"	s	namespace:cuttlefish
+GceBroadcastReceiver	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceBroadcastReceiver.java	/^public class GceBroadcastReceiver extends BroadcastReceiver {$/;"	c
+GceFuture	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    public GceFuture(String name) {$/;"	m	class:GceFuture
+GceFuture	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^public class GceFuture<T> extends AbstractFuture<T> {$/;"	c
+GceMetadataCredentialSource	host/commands/fetcher/credential_source.cc	/^GceMetadataCredentialSource::GceMetadataCredentialSource(CurlWrapper& curl)$/;"	f	class:cuttlefish::GceMetadataCredentialSource
+GceMetadataCredentialSource	host/commands/fetcher/credential_source.h	/^class GceMetadataCredentialSource : public CredentialSource {$/;"	c	namespace:cuttlefish
+GceService	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public GceService() {}$/;"	m	class:GceService
+GceService	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^public class GceService extends Service {$/;"	c
+GceWifiManager	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    public GceWifiManager(Context context, EventReporter eventReporter, JobExecutor executor) {$/;"	m	class:GceWifiManager
+GceWifiManager	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^public class GceWifiManager extends JobBase {$/;"	c
+GenerateAndroidBuildActions	build/cvd-host-package.go	/^func (c *cvdHostPackage) GenerateAndroidBuildActions(ctx android.ModuleContext) {$/;"	f	struct:cuttlefish.cvdHostPackage
+GenerateAttestation	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster::CertificateChain GenerateAttestation($/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster::CertificateChain
+GenerateAttestation	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster::CertificateChain TpmKeymasterContext::GenerateAttestation($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster::CertificateChain
+GenerateBcc	host/commands/secure_env/tpm_remote_provisioning_context.cpp	/^TpmRemoteProvisioningContext::GenerateBcc(bool testMode) const {$/;"	f	class:cuttlefish::TpmRemoteProvisioningContext	typeref:typename:std::pair<std::vector<uint8_t>,cppbor::Array>
+GenerateCsr	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GenerateCsr(const GenerateCsrRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GenerateHmacSha256	host/commands/secure_env/tpm_remote_provisioning_context.cpp	/^TpmRemoteProvisioningContext::GenerateHmacSha256($/;"	f	class:cuttlefish::TpmRemoteProvisioningContext	typeref:typename:std::optional<cppcose::HmacSha256>
+GenerateKey	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GenerateKey(const GenerateKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GenerateKey	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GenerateKey(const GenerateKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GenerateKeyFrame	host/frontend/webrtc/lib/video_track_source_impl.h	/^  void GenerateKeyFrame() override {}$/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:void
+GeneratePersistentBootconfig	host/commands/assemble_cvd/disk_flags.cc	/^static void GeneratePersistentBootconfig($/;"	f	namespace:cuttlefish	typeref:typename:void	file:
+GenerateProcessedFrameCallback	host/frontend/webrtc/display_handler.h	/^  using GenerateProcessedFrameCallback = ScreenConnector::GenerateProcessedFrameCallback;$/;"	t	class:cuttlefish::DisplayHandler	typeref:typename:ScreenConnector::GenerateProcessedFrameCallback
+GenerateProcessedFrameCallback	host/libs/screen_connector/screen_connector.h	/^  using GenerateProcessedFrameCallback = std::function<void($/;"	t	class:cuttlefish::ScreenConnector
+GenerateProcessedFrameCallbackImpl	host/libs/screen_connector/screen_connector_common.h	/^using GenerateProcessedFrameCallbackImpl =$/;"	t	namespace:cuttlefish
+GenerateRandom	host/commands/secure_env/tpm_random_source.cpp	/^keymaster_error_t TpmRandomSource::GenerateRandom($/;"	f	class:cuttlefish::TpmRandomSource	typeref:typename:keymaster_error_t
+GenerateRandomHandle	host/commands/secure_env/fragile_tpm_storage.cpp	/^TPM2_HANDLE FragileTpmStorage::GenerateRandomHandle() {$/;"	f	class:cuttlefish::FragileTpmStorage	typeref:typename:TPM2_HANDLE
+GenerateRenderer	host/libs/confui/host_renderer.cc	/^std::unique_ptr<ConfUiRenderer> ConfUiRenderer::GenerateRenderer($/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::unique_ptr<ConfUiRenderer>
+GenerateRkpKey	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GenerateRkpKey(const GenerateRkpKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GenerateSelfSignedCertificate	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster::CertificateChain GenerateSelfSignedCertificate($/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster::CertificateChain
+GenerateSelfSignedCertificate	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster::CertificateChain TpmKeymasterContext::GenerateSelfSignedCertificate($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster::CertificateChain
+GenerateTimestampToken	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GenerateTimestampToken($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GenerateTimestampToken	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^keymaster_error_t TpmKeymasterEnforcement::GenerateTimestampToken($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:keymaster_error_t
+GenerateUniqueId	host/commands/secure_env/tpm_attestation_record.cpp	/^keymaster::Buffer TpmAttestationRecordContext::GenerateUniqueId($/;"	f	class:cuttlefish::TpmAttestationRecordContext	typeref:typename:keymaster::Buffer
+Get	common/libs/device_config/guest_device_config.cpp	/^std::unique_ptr<DeviceConfigHelper> DeviceConfigHelper::Get() {$/;"	f	class:cuttlefish::DeviceConfigHelper	typeref:typename:std::unique_ptr<DeviceConfigHelper>
+Get	common/libs/device_config/host_device_config.cpp	/^std::unique_ptr<DeviceConfigHelper> DeviceConfigHelper::Get() {$/;"	f	class:cuttlefish::DeviceConfigHelper	typeref:typename:std::unique_ptr<DeviceConfigHelper>
+Get	host/commands/modem_simulator/nvram_config.cpp	/^\/* static *\/ const NvramConfig* NvramConfig::Get() {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:const NvramConfig *
+Get	host/frontend/webrtc_operator/client_handler.cpp	/^std::shared_ptr<PollConnectionHandler> PollConnectionStore::Get($/;"	f	class:cuttlefish::PollConnectionStore	typeref:typename:std::shared_ptr<PollConnectionHandler>
+Get	host/libs/config/cuttlefish_config.cpp	/^\/*static*\/ const CuttlefishConfig* CuttlefishConfig::Get() {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:const CuttlefishConfig *
+Get	host/libs/confui/host_mode_ctrl.h	/^  static HostModeCtrl& Get() {$/;"	f	class:cuttlefish::HostModeCtrl	typeref:typename:HostModeCtrl &
+Get	host/libs/confui/host_server.cc	/^HostServer& HostServer::Get($/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:HostServer &
+Get	host/libs/confui/host_utils.cc	/^std::optional<std::thread::id> ThreadTracer::Get(const std::string& name) {$/;"	f	class:cuttlefish::confui::thread::ThreadTracer	typeref:typename:std::optional<std::thread::id>
+Get	host/libs/confui/host_utils.cc	/^std::string ThreadTracer::Get(const std::thread::id tid) {$/;"	f	class:cuttlefish::confui::thread::ThreadTracer	typeref:typename:std::string
+Get	host/libs/screen_connector/screen_connector.h	/^  static std::unique_ptr<ScreenConnector<ProcessedFrameType>> Get($/;"	f	class:cuttlefish::ScreenConnector	typeref:typename:std::unique_ptr<ScreenConnector<ProcessedFrameType>>
+GetAbs	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^const std::vector<const uint32_t>& VirtualDeviceBase::GetAbs() const {$/;"	f	class:VirtualDeviceBase	typeref:typename:const std::vector<const uint32_t> &
+GetAbs	guest/commands/vsoc_input_service/virtual_touchscreen.cpp	/^const std::vector<const uint32_t>& VirtualTouchScreen::GetAbs() const {$/;"	f	class:cuttlefish_input_service::VirtualTouchScreen	typeref:typename:const std::vector<const uint32_t> &
+GetActiveInterfaces	host/libs/allocd/resource_manager.h	/^  const std::set<std::string>& GetActiveInterfaces() {$/;"	f	class:cuttlefish::Session	typeref:typename:const std::set<std::string> &
+GetAttestationChain	host/commands/secure_env/tpm_attestation_record.cpp	/^TpmAttestationRecordContext::GetAttestationChain(keymaster_algorithm_t algorithm,$/;"	f	class:cuttlefish::TpmAttestationRecordContext	typeref:typename:keymaster::CertificateChain
+GetAttestationKey	host/commands/secure_env/tpm_attestation_record.cpp	/^TpmAttestationRecordContext::GetAttestationKey(keymaster_algorithm_t algorithm,$/;"	f	class:cuttlefish::TpmAttestationRecordContext	typeref:typename:keymaster::KeymasterKeyBlob
+GetAudioSource	host/frontend/webrtc/lib/streamer.cpp	/^std::shared_ptr<AudioSource> Streamer::GetAudioSource() {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:std::shared_ptr<AudioSource>
+GetAuthTokenKey	host/commands/secure_env/soft_gatekeeper.h	/^    virtual bool GetAuthTokenKey(const uint8_t** auth_token_key, uint32_t* length) const {$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:bool
+GetAuthTokenKey	host/commands/secure_env/tpm_gatekeeper.cpp	/^bool TpmGatekeeper::GetAuthTokenKey($/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:bool
+GetBootPatchlevel	host/commands/secure_env/proxy_keymaster_context.h	/^  std::optional<uint32_t> GetBootPatchlevel() const override {$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:std::optional<uint32_t>
+GetBootPatchlevel	host/commands/secure_env/tpm_keymaster_context.cpp	/^std::optional<uint32_t> TpmKeymasterContext::GetBootPatchlevel() const {$/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::optional<uint32_t>
+GetBoundary	host/libs/confui/host_renderer.h	/^  Boundary GetBoundary(LayoutElement&& e) const {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:Boundary
+GetBridgeName	host/libs/allocd/resource.h	/^  std::string GetBridgeName() { return bridge_name_; }$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:std::string
+GetCameraStream	host/frontend/webrtc/lib/client_handler.cpp	/^ClientVideoTrackInterface* ClientHandler::GetCameraStream() {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:ClientVideoTrackInterface *
+GetCandidateProcessGroups	host/commands/stop/main.cc	/^std::set<pid_t> GetCandidateProcessGroups(const std::set<std::string>& paths) {$/;"	f	namespace:cuttlefish::__anon65a808010111	typeref:typename:std::set<pid_t>
+GetCommonIccEFPath	host/commands/modem_simulator/sim_service.cpp	/^std::string SimService::SimFileSystem::GetCommonIccEFPath(EFId efid) {$/;"	f	class:cuttlefish::SimService::SimFileSystem	typeref:typename:std::string
+GetConfigFilePath	host/commands/assemble_cvd/flags.cc	/^std::string GetConfigFilePath(const CuttlefishConfig& config) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+GetConnection	host/frontend/webrtc/lib/ws_connection.cpp	/^std::shared_ptr<WsConnectionImpl> WsConnectionContextImpl::GetConnection($/;"	f	class:WsConnectionContextImpl	typeref:typename:std::shared_ptr<WsConnectionImpl>
+GetControlSocketPath	host/commands/health/health.cpp	/^std::string GetControlSocketPath(const cuttlefish::CuttlefishConfig& config) {$/;"	f	typeref:typename:std::string
+GetControlSocketPath	host/libs/vm_manager/crosvm_manager.cpp	/^std::string GetControlSocketPath($/;"	f	namespace:cuttlefish::vm_manager::__anon9162129c0111	typeref:typename:std::string
+GetCurrentSelectItem	host/commands/modem_simulator/stk_service.cpp	/^XMLElement* StkService::GetCurrentSelectItem() {$/;"	f	class:cuttlefish::StkService	typeref:typename:XMLElement *
+GetCurrentSessionId	host/libs/confui/host_server.h	/^  std::string GetCurrentSessionId() {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:std::string
+GetCurrentState	host/libs/confui/host_server.h	/^  std::string GetCurrentState() {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:std::string
+GetCurrentTimeStamp	host/commands/modem_simulator/pdu_parser.cpp	/^std::string PDUParser::GetCurrentTimeStamp() {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:std::string
+GetCuttlefishEnvPath	host/commands/assemble_cvd/flags.cc	/^std::string GetCuttlefishEnvPath() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+GetDataIn	host/libs/websocket/websocket_handler.h	/^  const std::string& GetDataIn() const { return in_buffer_; }$/;"	f	class:cuttlefish::DynHandler	typeref:typename:const std::string &
+GetDefaultVsockCid	host/libs/config/cuttlefish_config.cpp	/^int GetDefaultVsockCid() {$/;"	f	namespace:cuttlefish	typeref:typename:int
+GetDevice	host/frontend/webrtc_operator/device_registry.cpp	/^std::shared_ptr<DeviceHandler> DeviceRegistry::GetDevice($/;"	f	class:cuttlefish::DeviceRegistry	typeref:typename:std::shared_ptr<DeviceHandler>
+GetDeviceConfig	common/libs/device_config/device_config.h	/^  const DeviceConfig& GetDeviceConfig() const { return device_config_; }$/;"	f	class:cuttlefish::DeviceConfigHelper	typeref:typename:const DeviceConfig &
+GetDeviceConfig	common/libs/device_config/device_config_shared.cpp	/^DeviceConfig GetDeviceConfig() {$/;"	f	namespace:cuttlefish	typeref:typename:DeviceConfig
+GetEncoderSelector	host/frontend/webrtc/lib/vp8only_encoder_factory.cpp	/^VP8OnlyEncoderFactory::GetEncoderSelector() const {$/;"	f	class:cuttlefish::webrtc_streaming::VP8OnlyEncoderFactory	typeref:typename:std::unique_ptr<webrtc::VideoEncoderFactory::EncoderSelectorInterface>
+GetEntry	host/commands/secure_env/insecure_fallback_storage.cpp	/^Json::Value* InsecureFallbackStorage::GetEntry(const Json::Value& key) {$/;"	f	class:cuttlefish::InsecureFallbackStorage	typeref:typename:Json::Value *
+GetEntry	host/commands/secure_env/insecure_fallback_storage.cpp	/^const Json::Value* InsecureFallbackStorage::GetEntry($/;"	f	class:cuttlefish::InsecureFallbackStorage	typeref:typename:const Json::Value *
+GetErrno	common/libs/fs/shared_fd.h	/^  int GetErrno() const { return errno_; }$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+GetErrorCode	host/libs/confui/cbor.h	/^  Error GetErrorCode() const { return buffer_status_; }$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:Error
+GetEventBuffer	host/frontend/webrtc/connection_observer.cpp	/^std::unique_ptr<InputEventBuffer> GetEventBuffer() {$/;"	f	namespace:cuttlefish	typeref:typename:std::unique_ptr<InputEventBuffer>
+GetEventTypes	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^const std::vector<const uint32_t>& VirtualDeviceBase::GetEventTypes() const {$/;"	f	class:VirtualDeviceBase	typeref:typename:const std::vector<const uint32_t> &
+GetEventTypes	guest/commands/vsoc_input_service/virtual_keyboard.cpp	/^const std::vector<const uint32_t>& VirtualKeyboard::GetEventTypes() const {$/;"	f	class:cuttlefish_input_service::VirtualKeyboard	typeref:typename:const std::vector<const uint32_t> &
+GetEventTypes	guest/commands/vsoc_input_service/virtual_power_button.cpp	/^const std::vector<const uint32_t>& VirtualPowerButton::GetEventTypes() const {$/;"	f	class:cuttlefish_input_service::VirtualPowerButton	typeref:typename:const std::vector<const uint32_t> &
+GetEventTypes	guest/commands/vsoc_input_service/virtual_touchscreen.cpp	/^const std::vector<const uint32_t>& VirtualTouchScreen::GetEventTypes() const {$/;"	f	class:cuttlefish_input_service::VirtualTouchScreen	typeref:typename:const std::vector<const uint32_t> &
+GetExtraData	common/libs/confui/protocol_types.h	/^  std::vector<std::uint8_t> GetExtraData() const { return extra_data_; }$/;"	f	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::vector<std::uint8_t>
+GetFailureRecord	host/commands/secure_env/soft_gatekeeper.h	/^    virtual bool GetFailureRecord(uint32_t uid, secure_id_t user_id, failure_record_t* record,$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:bool
+GetFailureRecord	host/commands/secure_env/tpm_gatekeeper.cpp	/^bool TpmGatekeeper::GetFailureRecord($/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:bool
+GetFailureRecordImpl	host/commands/secure_env/tpm_gatekeeper.cpp	/^static bool GetFailureRecordImpl($/;"	f	namespace:cuttlefish	typeref:typename:bool	file:
+GetFsType	host/libs/config/data_image.cpp	/^std::string GetFsType(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+GetGlobalConfigFileLink	host/libs/config/cuttlefish_config.cpp	/^std::string GetGlobalConfigFileLink() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+GetGlobalID	host/libs/allocd/resource.h	/^  uint32_t GetGlobalID() { return global_id_; }$/;"	f	class:cuttlefish::StaticResource	typeref:typename:uint32_t
+GetGracePeriod	host/libs/confui/session.cc	/^static const std::chrono::milliseconds GetGracePeriod() {$/;"	f	namespace:cuttlefish::confui	typeref:typename:const std::chrono::milliseconds	file:
+GetGraphicsAvailability	host/libs/graphics_detector/graphics_detector.cpp	/^GraphicsAvailability GetGraphicsAvailability() {$/;"	f	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:GraphicsAvailability
+GetGraphicsAvailabilityWithSubprocessCheck	host/libs/graphics_detector/graphics_detector.cpp	/^GraphicsAvailability GetGraphicsAvailabilityWithSubprocessCheck() {$/;"	f	namespace:cuttlefish	typeref:typename:GraphicsAvailability
+GetHandle	host/commands/secure_env/fragile_tpm_storage.cpp	/^TPM2_HANDLE FragileTpmStorage::GetHandle(const Json::Value& key) const {$/;"	f	class:cuttlefish::FragileTpmStorage	typeref:typename:TPM2_HANDLE
+GetHasIpv4	host/libs/allocd/resource.h	/^  bool GetHasIpv4() { return has_ipv4_; }$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:bool
+GetHasIpv6	host/libs/allocd/resource.h	/^  bool GetHasIpv6() { return has_ipv6_; }$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:bool
+GetHiddenTags	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster::AuthorizationSet GetHiddenTags($/;"	f	namespace:cuttlefish::__anone862986b0111	typeref:typename:keymaster::AuthorizationSet
+GetHmacSharingParameters	guest/hals/keymaster/remote/remote_keymaster.cpp	/^GetHmacSharingParametersResponse RemoteKeymaster::GetHmacSharingParameters() {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:GetHmacSharingParametersResponse
+GetHmacSharingParameters	guest/hals/keymint/remote/remote_keymaster.cpp	/^GetHmacSharingParametersResponse RemoteKeymaster::GetHmacSharingParameters() {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:GetHmacSharingParametersResponse
+GetHmacSharingParameters	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^keymaster_error_t TpmKeymasterEnforcement::GetHmacSharingParameters($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:keymaster_error_t
+GetHostId	host/commands/modem_simulator/modem_service.cpp	/^std::string ModemService::GetHostId() {$/;"	f	class:cuttlefish::ModemService	typeref:typename:std::string
+GetIccProfile	host/commands/modem_simulator/sim_service.cpp	/^XMLElement* SimService::GetIccProfile() {$/;"	f	class:cuttlefish::SimService	typeref:typename:XMLElement *
+GetId	host/libs/confui/host_utils.cc	/^std::optional<std::thread::id> GetId(const std::string& name) {$/;"	f	namespace:cuttlefish::confui::thread	typeref:typename:std::optional<std::thread::id>
+GetId	host/libs/confui/session.h	/^  std::string GetId() { return session_id_; }$/;"	f	class:cuttlefish::confui::Session	typeref:typename:std::string
+GetIfaceId	host/libs/allocd/resource.h	/^  uint16_t GetIfaceId() { return iface_id_; }$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:uint16_t
+GetIfaceId	host/libs/allocd/resource.h	/^  uint16_t GetIfaceId() { return iface_id_; }$/;"	f	class:cuttlefish::MobileIface	typeref:typename:uint16_t
+GetInstance	host/libs/config/cuttlefish_config.cpp	/^int GetInstance() {$/;"	f	namespace:cuttlefish	typeref:typename:int
+GetIpAddr	host/libs/allocd/resource.h	/^  std::string GetIpAddr() { return ipaddr_; }$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:std::string
+GetIpAddr	host/libs/allocd/resource.h	/^  std::string GetIpAddr() { return ipaddr_; }$/;"	f	class:cuttlefish::MobileIface	typeref:typename:std::string
+GetKernelConfigAndSetDefaults	host/commands/assemble_cvd/flags.cc	/^bool GetKernelConfigAndSetDefaults(KernelConfig* kernel_config) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+GetKeyCharacteristics	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GetKeyCharacteristics(const GetKeyCharacteristicsRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GetKeyCharacteristics	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GetKeyCharacteristics($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GetKeyFactory	host/commands/secure_env/proxy_keymaster_context.h	/^  const keymaster::KeyFactory* GetKeyFactory($/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:const keymaster::KeyFactory *
+GetKeyFactory	host/commands/secure_env/tpm_keymaster_context.cpp	/^const KeyFactory* TpmKeymasterContext::GetKeyFactory($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:const KeyFactory *
+GetKeys	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^const std::vector<const uint32_t>& VirtualDeviceBase::GetKeys() const {$/;"	f	class:VirtualDeviceBase	typeref:typename:const std::vector<const uint32_t> &
+GetKeys	guest/commands/vsoc_input_service/virtual_keyboard.cpp	/^const std::vector<const uint32_t>& VirtualKeyboard::GetKeys() const {$/;"	f	class:cuttlefish_input_service::VirtualKeyboard	typeref:typename:const std::vector<const uint32_t> &
+GetKeys	guest/commands/vsoc_input_service/virtual_power_button.cpp	/^const std::vector<const uint32_t>& VirtualPowerButton::GetKeys() const {$/;"	f	class:cuttlefish_input_service::VirtualPowerButton	typeref:typename:const std::vector<const uint32_t> &
+GetKeys	guest/commands/vsoc_input_service/virtual_touchscreen.cpp	/^const std::vector<const uint32_t>& VirtualTouchScreen::GetKeys() const {$/;"	f	class:cuttlefish_input_service::VirtualTouchScreen	typeref:typename:const std::vector<const uint32_t> &
+GetKmVersion	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster::KmVersion GetKmVersion() const override {$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster::KmVersion
+GetKmVersion	host/commands/secure_env/tpm_keymaster_context.h	/^  keymaster::KmVersion GetKmVersion() const override {$/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster::KmVersion
+GetLegacyConfigFilePath	host/commands/assemble_cvd/assemble_cvd.cc	/^std::string GetLegacyConfigFilePath(const CuttlefishConfig& config) {$/;"	f	namespace:cuttlefish::__anon1e335d460111	typeref:typename:std::string
+GetLinuxVersion	host/libs/vm_manager/host_configuration.cpp	/^std::pair<int,int> GetLinuxVersion() {$/;"	f	namespace:cuttlefish::vm_manager::__anon1edaaabd0111	typeref:typename:std::pair<int,int>
+GetLocale	common/libs/confui/protocol_types.h	/^  std::string GetLocale() const { return locale_; }$/;"	f	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::string
+GetLocation	common/libs/confui/protocol_types.h	/^  std::pair<int, int> GetLocation() { return {x_, y_}; }$/;"	f	class:cuttlefish::confui::ConfUiUserTouchMessage	typeref:typename:std::pair<int,int>
+GetMessage	common/libs/confui/protocol_types.h	/^  auto GetMessage() const { return message_; }$/;"	f	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:auto
+GetMessage	host/libs/confui/cbor.h	/^  std::vector<std::uint8_t>&& GetMessage() {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:std::vector<std::uint8_t> &&
+GetMillisecondsSinceBoot	host/commands/secure_env/soft_gatekeeper.h	/^    virtual uint64_t GetMillisecondsSinceBoot() const {$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:uint64_t
+GetMillisecondsSinceBoot	host/commands/secure_env/tpm_gatekeeper.cpp	/^uint64_t TpmGatekeeper::GetMillisecondsSinceBoot() const {$/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:uint64_t
+GetMode	host/libs/confui/host_mode_ctrl.h	/^  auto GetMode() {$/;"	f	class:cuttlefish::HostModeCtrl	typeref:typename:auto
+GetMode	host/libs/screen_connector/screen_connector_ctrl.h	/^  auto GetMode() {$/;"	f	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:auto
+GetMonitorPath	host/libs/vm_manager/qemu_manager.cpp	/^std::string GetMonitorPath(const CuttlefishConfig& config) {$/;"	f	namespace:cuttlefish::vm_manager::__anonb2b4da3a0111	typeref:typename:std::string
+GetMoreAudioData	host/frontend/webrtc/lib/audio_device.cpp	/^int CfAudioDeviceModule::GetMoreAudioData(void* data, int bytes_per_sample,$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int
+GetMoreAudioData	host/frontend/webrtc/lib/streamer.cpp	/^  int GetMoreAudioData(void* data, int bytes_per_sample,$/;"	f	class:cuttlefish::webrtc_streaming::__anonab9390d10111::AudioDeviceModuleWrapper	typeref:typename:int	file:
+GetName	host/libs/allocd/resource.h	/^  std::string GetName() { return name_; }$/;"	f	class:cuttlefish::StaticResource	typeref:typename:std::string
+GetName	host/libs/confui/host_utils.cc	/^std::string GetName(const std::thread::id tid) {$/;"	f	namespace:cuttlefish::confui::thread	typeref:typename:std::string
+GetNextHexInt	host/commands/modem_simulator/command_parser.cpp	/^int CommandParser::GetNextHexInt() {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:int
+GetNextInt	host/commands/modem_simulator/command_parser.cpp	/^int CommandParser::GetNextInt() {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:int
+GetNextStr	host/commands/modem_simulator/command_parser.cpp	/^std::string_view CommandParser::GetNextStr() {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:std::string_view
+GetNextStr	host/commands/modem_simulator/command_parser.cpp	/^std::string_view CommandParser::GetNextStr(char flag) {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:std::string_view
+GetNextStrDeciToHex	host/commands/modem_simulator/command_parser.cpp	/^std::string CommandParser::GetNextStrDeciToHex() {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:std::string
+GetOperationFactory	host/commands/secure_env/proxy_keymaster_context.h	/^  const keymaster::OperationFactory* GetOperationFactory($/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:const keymaster::OperationFactory *
+GetOperationFactory	host/commands/secure_env/tpm_keymaster_context.cpp	/^const OperationFactory* TpmKeymasterContext::GetOperationFactory($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:const OperationFactory *
+GetPartitionGUID	host/libs/image_aggregator/image_aggregator.cc	/^  static const char* GetPartitionGUID(MultipleImagePartition source) {$/;"	f	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:const char *	file:
+GetPasswordKey	host/commands/secure_env/soft_gatekeeper.h	/^    virtual void GetPasswordKey(const uint8_t** password_key, uint32_t* length) {$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:void
+GetPasswordKey	host/commands/secure_env/tpm_gatekeeper.cpp	/^void TpmGatekeeper::GetPasswordKey($/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:void
+GetPath	host/libs/websocket/websocket_server.cpp	/^std::string GetPath(struct lws* wsi) {$/;"	f	namespace:cuttlefish::__anon8185be2f0111	typeref:typename:std::string
+GetPhoneNumber	host/commands/modem_simulator/sim_service.cpp	/^std::string SimService::GetPhoneNumber() {$/;"	f	class:cuttlefish::SimService	typeref:typename:std::string
+GetPhoneNumberFromAddress	host/commands/modem_simulator/pdu_parser.cpp	/^std::string PDUParser::GetPhoneNumberFromAddress() {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:std::string
+GetPlayoutUnderrunCount	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::GetPlayoutUnderrunCount() const { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+GetPromptText	common/libs/confui/protocol_types.h	/^  std::string GetPromptText() const { return prompt_text_; }$/;"	f	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::string
+GetProperties	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^const std::vector<const uint32_t>& VirtualDeviceBase::GetProperties() const {$/;"	f	class:VirtualDeviceBase	typeref:typename:const std::vector<const uint32_t> &
+GetProperties	guest/commands/vsoc_input_service/virtual_touchscreen.cpp	/^const std::vector<const uint32_t>& VirtualTouchScreen::GetProperties() const {$/;"	f	class:cuttlefish_input_service::VirtualTouchScreen	typeref:typename:const std::vector<const uint32_t> &
+GetQemuVersion	host/libs/vm_manager/qemu_manager.cpp	/^std::pair<int,int> GetQemuVersion(const std::string& qemu_binary)$/;"	f	namespace:cuttlefish::vm_manager::__anonb2b4da3a0111	typeref:typename:std::pair<int,int>
+GetRandom	host/commands/secure_env/soft_gatekeeper.h	/^    virtual void GetRandom(void* random, uint32_t requested_length) const {$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:void
+GetRandom	host/commands/secure_env/tpm_gatekeeper.cpp	/^void TpmGatekeeper::GetRandom(void* random, uint32_t requested_size) const {$/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:void
+GetRawFromServer	common/libs/device_config/guest_device_config.cpp	/^bool GetRawFromServer(DeviceConfig* data) {$/;"	f	namespace:cuttlefish::__anon4ec25d870111	typeref:typename:bool
+GetRemoteProvisioningContext	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster::RemoteProvisioningContext* GetRemoteProvisioningContext()$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster::RemoteProvisioningContext *
+GetRemoteProvisioningContext	host/commands/secure_env/tpm_keymaster_context.cpp	/^TpmKeymasterContext::GetRemoteProvisioningContext() const {$/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster::RemoteProvisioningContext *
+GetResolutionFromSettings	host/frontend/webrtc/lib/camera_streamer.cpp	/^CameraStreamer::Resolution CameraStreamer::GetResolutionFromSettings($/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:CameraStreamer::Resolution
+GetResourceType	host/libs/allocd/resource.h	/^  ResourceType GetResourceType() { return ty_; }$/;"	f	class:cuttlefish::StaticResource	typeref:typename:ResourceType
+GetResponse	common/libs/confui/protocol_types.h	/^  auto GetResponse() const { return response_; }$/;"	f	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:auto
+GetResponse	common/libs/confui/protocol_types.h	/^  auto GetResponse() const { return response_; }$/;"	f	class:cuttlefish::confui::ConfUiUserSelectionMessage	typeref:typename:auto
+GetResponse	common/libs/confui/protocol_types.h	/^  auto GetResponse() const { return response_; }$/;"	f	class:cuttlefish::confui::ConfUiUserTouchMessage	typeref:typename:auto
+GetRootElement	host/commands/modem_simulator/sim_service.cpp	/^XMLElement* SimService::SimFileSystem::GetRootElement() {$/;"	f	class:cuttlefish::SimService::SimFileSystem	typeref:typename:XMLElement *
+GetScreenConnectorCallback	host/frontend/webrtc/display_handler.cpp	/^DisplayHandler::GenerateProcessedFrameCallback DisplayHandler::GetScreenConnectorCallback() {$/;"	f	class:cuttlefish::DisplayHandler	typeref:typename:DisplayHandler::GenerateProcessedFrameCallback
+GetSecurityLevel	host/commands/secure_env/tpm_attestation_record.cpp	/^keymaster_security_level_t TpmAttestationRecordContext::GetSecurityLevel() const {$/;"	f	class:cuttlefish::TpmAttestationRecordContext	typeref:typename:keymaster_security_level_t
+GetSessionID	host/libs/allocd/resource_manager.h	/^  uint32_t GetSessionID() { return session_id_; }$/;"	f	class:cuttlefish::Session	typeref:typename:uint32_t
+GetSessionId	common/libs/confui/protocol_types.h	/^  std::string GetSessionId() const { return session_id_; }$/;"	f	class:cuttlefish::confui::ConfUiMessage	typeref:typename:std::string
+GetSessionId	guest/hals/confirmationui/guest_session.h	/^    std::string GetSessionId() const { return session_name_; }$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::string
+GetShortName	common/libs/utils/subprocess.h	/^  std::string GetShortName() const {$/;"	f	class:cuttlefish::Command	typeref:typename:std::string
+GetSign	common/libs/confui/protocol_types.h	/^  auto GetSign() const { return sign_; }$/;"	f	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:auto
+GetSignalStrength	host/commands/modem_simulator/network_service.cpp	/^std::string NetworkService::GetSignalStrength() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:std::string
+GetSimOperator	host/commands/modem_simulator/sim_service.cpp	/^std::string SimService::GetSimOperator() {$/;"	f	class:cuttlefish::SimService	typeref:typename:std::string
+GetSimStatus	host/commands/modem_simulator/sim_service.cpp	/^SimService::SimStatus SimService::GetSimStatus() const {$/;"	f	class:cuttlefish::SimService	typeref:typename:SimService::SimStatus
+GetSockName	common/libs/fs/shared_fd.cpp	/^int FileInstance::GetSockName(struct sockaddr* addr, socklen_t* addrlen) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+GetSockOpt	common/libs/fs/shared_fd.cpp	/^int FileInstance::GetSockOpt(int level, int optname, void* optval,$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+GetState	host/libs/confui/session.h	/^  MainLoopState GetState() { return state_; }$/;"	f	class:cuttlefish::confui::Session	typeref:typename:MainLoopState
+GetStats	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^bool VideoTrackSourceImpl::GetStats(Stats *stats) {$/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:bool
+GetStatusMessage	common/libs/confui/protocol_types.h	/^  std::string GetStatusMessage() const { return status_message_; }$/;"	f	class:cuttlefish::confui::ConfUiAckMessage	typeref:typename:std::string
+GetSuplementaryGroups	common/libs/utils/users.cpp	/^std::vector<gid_t> GetSuplementaryGroups() {$/;"	f	namespace:cuttlefish::__anonced26a190111	typeref:typename:std::vector<gid_t>
+GetSupportedAlgorithms	host/commands/secure_env/proxy_keymaster_context.h	/^  const keymaster_algorithm_t* GetSupportedAlgorithms($/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:const keymaster_algorithm_t *
+GetSupportedAlgorithms	host/commands/secure_env/tpm_keymaster_context.cpp	/^const keymaster_algorithm_t* TpmKeymasterContext::GetSupportedAlgorithms($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:const keymaster_algorithm_t *
+GetSupportedFormats	host/frontend/webrtc/lib/vp8only_encoder_factory.cpp	/^std::vector<webrtc::SdpVideoFormat> VP8OnlyEncoderFactory::GetSupportedFormats()$/;"	f	class:cuttlefish::webrtc_streaming::VP8OnlyEncoderFactory	typeref:typename:std::vector<webrtc::SdpVideoFormat>
+GetSystemVersion	host/commands/secure_env/proxy_keymaster_context.h	/^  void GetSystemVersion(uint32_t* os_version,$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:void
+GetSystemVersion	host/commands/secure_env/tpm_keymaster_context.cpp	/^void TpmKeymasterContext::GetSystemVersion($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:void
+GetThreadTracer	host/libs/confui/host_utils.cc	/^ThreadTracer& GetThreadTracer() {$/;"	f	namespace:cuttlefish::confui::thread	typeref:typename:ThreadTracer &
+GetTouchClientByLabel	host/frontend/webrtc/connection_observer.h	/^  SharedFD GetTouchClientByLabel(const std::string& label) {$/;"	f	struct:cuttlefish::InputSockets	typeref:typename:SharedFD
+GetType	common/libs/confui/protocol_types.h	/^  ConfUiCmd GetType() const override { return ConfUiCmd::kCliAck; }$/;"	f	class:cuttlefish::confui::ConfUiAckMessage	typeref:typename:ConfUiCmd
+GetType	common/libs/confui/protocol_types.h	/^  ConfUiCmd GetType() const override { return ConfUiCmd::kCliRespond; }$/;"	f	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:ConfUiCmd
+GetType	common/libs/confui/protocol_types.h	/^  ConfUiCmd GetType() const override { return ConfUiCmd::kStart; }$/;"	f	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:ConfUiCmd
+GetType	common/libs/confui/protocol_types.h	/^  ConfUiCmd GetType() const override { return ConfUiCmd::kUserInputEvent; }$/;"	f	class:cuttlefish::confui::ConfUiUserSelectionMessage	typeref:typename:ConfUiCmd
+GetType	common/libs/confui/protocol_types.h	/^  ConfUiCmd GetType() const override { return ConfUiCmd::kUserTouchEvent; }$/;"	f	class:cuttlefish::confui::ConfUiUserTouchMessage	typeref:typename:ConfUiCmd
+GetType	common/libs/confui/protocol_types.h	/^  ConfUiCmd GetType() const override { return cmd; }$/;"	f	class:cuttlefish::confui::ConfUiGenericMessage	typeref:typename:ConfUiCmd
+GetUID	host/libs/allocd/resource_manager.h	/^  uid_t GetUID() { return uid_; }$/;"	f	class:cuttlefish::Session	typeref:typename:uid_t
+GetUiOpts	common/libs/confui/protocol_types.h	/^  std::vector<teeui::UIOption> GetUiOpts() const { return ui_opts_; }$/;"	f	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::vector<teeui::UIOption>
+GetUid	host/libs/allocd/resource.h	/^  uid_t GetUid() { return uid_; }$/;"	f	class:cuttlefish::StaticResource	typeref:typename:uid_t
+GetUseEbtablesLegacy	host/libs/allocd/resource.h	/^  bool GetUseEbtablesLegacy() { return use_ebtables_legacy_; }$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:bool
+GetUserData	host/libs/wayland/wayland_utils.h	/^T* GetUserData(wl_resource* resource) {$/;"	f	namespace:wayland	typeref:typename:T *
+GetUserIDFromSock	host/libs/allocd/resource_manager.cpp	/^uid_t GetUserIDFromSock(SharedFD client_socket) {$/;"	f	namespace:cuttlefish	typeref:typename:uid_t
+GetUserImages	shared/releasetools.py	/^def GetUserImages(input_tmp, input_zip):$/;"	f
+GetUserName	host/libs/allocd/alloc_utils.cpp	/^std::optional<std::string> GetUserName(uid_t uid) {$/;"	f	namespace:cuttlefish	typeref:typename:std::optional<std::string>
+GetUsimEFPath	host/commands/modem_simulator/sim_service.cpp	/^std::string SimService::SimFileSystem::GetUsimEFPath(EFId efid) {$/;"	f	class:cuttlefish::SimService::SimFileSystem	typeref:typename:std::string
+GetVendorPatchlevel	host/commands/secure_env/proxy_keymaster_context.h	/^  std::optional<uint32_t> GetVendorPatchlevel() const override {$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:std::optional<uint32_t>
+GetVendorPatchlevel	host/commands/secure_env/tpm_keymaster_context.cpp	/^std::optional<uint32_t> TpmKeymasterContext::GetVendorPatchlevel() const {$/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::optional<uint32_t>
+GetVerifiedBootParams	host/commands/secure_env/tpm_attestation_record.cpp	/^const VerifiedBootParams* TpmAttestationRecordContext::GetVerifiedBootParams($/;"	f	class:cuttlefish::TpmAttestationRecordContext	typeref:typename:const VerifiedBootParams *
+GetVersion	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GetVersion(const GetVersionRequest& request, GetVersionResponse* response)/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GetVersion	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::GetVersion(const GetVersionRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+GetVmManager	host/libs/vm_manager/vm_manager.cpp	/^std::unique_ptr<VmManager> GetVmManager(const std::string& name, Arch arch) {$/;"	f	namespace:cuttlefish::vm_manager	typeref:typename:std::unique_ptr<VmManager>
+GetVoiceRegistrationState	host/commands/modem_simulator/network_service.cpp	/^NetworkService::RegistrationState NetworkService::GetVoiceRegistrationState() const {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:NetworkService::RegistrationState
+GetVsockServerPort	host/libs/config/cuttlefish_config.cpp	/^int GetVsockServerPort($/;"	f	namespace:cuttlefish	typeref:typename:int
+Getter	common/libs/utils/flag_parser.cpp	/^Flag Flag::Getter(std::function<std::string()> fn) && {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag
+Getter	common/libs/utils/flag_parser.cpp	/^Flag& Flag::Getter(std::function<std::string()> fn) & {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag &
+GflagsCompatFlag	common/libs/utils/flag_parser.cpp	/^Flag GflagsCompatFlag(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+GflagsCompatFlag	common/libs/utils/flag_parser.cpp	/^Flag GflagsCompatFlag(const std::string& name, bool& value) {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+GflagsCompatFlag	common/libs/utils/flag_parser.cpp	/^Flag GflagsCompatFlag(const std::string& name, int32_t& value) {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+GflagsCompatFlag	common/libs/utils/flag_parser.cpp	/^Flag GflagsCompatFlag(const std::string& name, std::string& value) {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+GflagsCompatNumericFlagGeneric	common/libs/utils/flag_parser.cpp	/^static Flag GflagsCompatNumericFlagGeneric(const std::string& name, T& value) {$/;"	f	namespace:cuttlefish	typeref:typename:Flag	file:
+GflagsComponent	host/commands/assemble_cvd/flag_feature.cpp	/^fruit::Component<fruit::Required<ConfigFlag>, ParseGflags> GflagsComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<ConfigFlag>,ParseGflags>
+GfxstreamEnabledTest	tests/graphics/src/com/android/cuttlefish/tests/GfxstreamEnabledTest.java	/^public class GfxstreamEnabledTest extends BaseHostJUnit4Test {$/;"	c
+GnssGrpcProxy	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto	/^service GnssGrpcProxy {$/;"	s	package:gnss_grpc_proxy
+GnssGrpcProxyBinary	host/libs/config/known_paths.cpp	/^std::string GnssGrpcProxyBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+GnssGrpcProxyServer	host/commands/run_cvd/launch.cc	/^class GnssGrpcProxyServer : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+GnssGrpcProxyServiceImpl	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    GnssGrpcProxyServiceImpl(cuttlefish::SharedFD gnss_in,$/;"	f	class:GnssGrpcProxyServiceImpl	file:
+GnssGrpcProxyServiceImpl	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^class GnssGrpcProxyServiceImpl final : public GnssGrpcProxy::Service {$/;"	c	file:
+GptBeginning	host/libs/image_aggregator/image_aggregator.cc	/^struct __attribute__((packed)) GptBeginning {$/;"	s	namespace:cuttlefish::__anon02806fd80111	file:
+GptEnd	host/libs/image_aggregator/image_aggregator.cc	/^struct __attribute__((packed)) GptEnd {$/;"	s	namespace:cuttlefish::__anon02806fd80111	file:
+GptHeader	host/libs/image_aggregator/image_aggregator.cc	/^struct __attribute__((packed)) GptHeader {$/;"	s	namespace:cuttlefish::__anon02806fd80111	file:
+GptPartitionEntry	host/libs/image_aggregator/image_aggregator.cc	/^struct __attribute__((packed)) GptPartitionEntry {$/;"	s	namespace:cuttlefish::__anon02806fd80111	file:
+GraphicsAvailability	host/libs/graphics_detector/graphics_detector.h	/^struct GraphicsAvailability {$/;"	s	namespace:cuttlefish
+GroupIdFromName	common/libs/utils/users.cpp	/^gid_t GroupIdFromName(const std::string& group_name) {$/;"	f	namespace:cuttlefish::__anonced26a190111	typeref:typename:gid_t
+GuessSeverity	common/libs/utils/tee_logging.cpp	/^static LogSeverity GuessSeverity($/;"	f	namespace:cuttlefish	typeref:typename:LogSeverity	file:
+GuestSession	guest/hals/confirmationui/guest_session.h	/^    GuestSession(const std::uint32_t session_id, ListenerState& listener_state,$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession
+GuestSession	guest/hals/confirmationui/guest_session.h	/^class GuestSession {$/;"	c	namespace:android::hardware::confirmationui::V1_0::implementation
+HANDLE_MESSAGE	host/commands/secure_env/keymaster_responder.cpp	/^#define HANDLE_MESSAGE(/;"	d	file:
+HANDLE_MESSAGE_W_RETURN	host/commands/secure_env/keymaster_responder.cpp	/^#define HANDLE_MESSAGE_W_RETURN(/;"	d	file:
+HANDLE_MESSAGE_W_RETURN_NO_ARG	host/commands/secure_env/keymaster_responder.cpp	/^#define HANDLE_MESSAGE_W_RETURN_NO_ARG(/;"	d	file:
+HANDOVER_CANCELED	guest/hals/ril/reference-libril/ril.h	/^    HANDOVER_CANCELED = 3$/;"	e	enum:__anon0bfbaecf8e03
+HANDOVER_COMPLETED	guest/hals/ril/reference-libril/ril.h	/^    HANDOVER_COMPLETED = 1,$/;"	e	enum:__anon0bfbaecf8e03
+HANDOVER_FAILED	guest/hals/ril/reference-libril/ril.h	/^    HANDOVER_FAILED = 2,$/;"	e	enum:__anon0bfbaecf8e03
+HANDOVER_STARTED	guest/hals/ril/reference-libril/ril.h	/^    HANDOVER_STARTED = 0,$/;"	e	enum:__anon0bfbaecf8e03
+HANDSHAKE_RETRY_COUNT	guest/hals/ril/reference-ril/atchannel.c	/^#define HANDSHAKE_RETRY_COUNT /;"	d	file:
+HANDSHAKE_TIMEOUT_MSEC	guest/hals/ril/reference-ril/atchannel.c	/^#define HANDSHAKE_TIMEOUT_MSEC /;"	d	file:
+HCI_ACLDATA_PKT	guest/commands/bt_vhci_forwarder/main.cpp	/^#define HCI_ACLDATA_PKT /;"	d	file:
+HCI_EVENT_PKT	guest/commands/bt_vhci_forwarder/main.cpp	/^#define HCI_EVENT_PKT /;"	d	file:
+HCI_ISODATA_PKT	guest/commands/bt_vhci_forwarder/main.cpp	/^#define HCI_ISODATA_PKT /;"	d	file:
+HCI_MAX_ACL_SIZE	guest/commands/bt_vhci_forwarder/main.cpp	/^#define HCI_MAX_ACL_SIZE /;"	d	file:
+HCI_MAX_ACL_SIZE	host/commands/bt_connector/main.cpp	/^#define HCI_MAX_ACL_SIZE /;"	d	file:
+HCI_MAX_FRAME_SIZE	guest/commands/bt_vhci_forwarder/main.cpp	/^#define HCI_MAX_FRAME_SIZE /;"	d	file:
+HCI_MAX_FRAME_SIZE	host/commands/bt_connector/main.cpp	/^#define HCI_MAX_FRAME_SIZE /;"	d	file:
+HCI_SCODATA_PKT	guest/commands/bt_vhci_forwarder/main.cpp	/^#define HCI_SCODATA_PKT /;"	d	file:
+HCI_VENDOR_PKT	guest/commands/bt_vhci_forwarder/main.cpp	/^#define HCI_VENDOR_PKT /;"	d	file:
+HIDL_FETCH_IBluetoothHci	guest/hals/bt/remote/remote_bluetooth.cpp	/^IBluetoothHci* HIDL_FETCH_IBluetoothHci(const char* \/* name *\/) {$/;"	f	namespace:android::hardware::bluetooth::V1_1::remote	typeref:typename:IBluetoothHci *
+HIDL_FETCH_ICameraProvider	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^extern "C" ICameraProvider* HIDL_FETCH_ICameraProvider(const char* name) {$/;"	f	namespace:android::hardware::camera::provider::V2_7::implementation	typeref:typename:ICameraProvider *
+HIDL_FETCH_IHealth	guest/hals/health/health.cpp	/^extern "C" IHealth* HIDL_FETCH_IHealth(const char* instance) {$/;"	f	typeref:typename:IHealth *
+HMacImplementation	host/libs/confui/sign.cc	/^class HMacImplementation {$/;"	c	namespace:cuttlefish::confui	file:
+HMacer	host/libs/confui/sign.cc	/^  using HMacer = HMacImplementation;$/;"	t	function:cuttlefish::confui::sign	typeref:typename:HMacImplementation	file:
+HOST_CROSS_2ND_ARCH	vsoc_arm64/BoardConfig.mk	/^HOST_CROSS_2ND_ARCH :=$/;"	m
+HOST_CROSS_2ND_ARCH	vsoc_arm64_only/BoardConfig.mk	/^HOST_CROSS_2ND_ARCH :=$/;"	m
+HOST_CROSS_2ND_ARCH	vsoc_arm_only/BoardConfig.mk	/^HOST_CROSS_2ND_ARCH :=$/;"	m
+HOST_CROSS_ARCH	vsoc_arm64/BoardConfig.mk	/^HOST_CROSS_ARCH := arm64$/;"	m
+HOST_CROSS_ARCH	vsoc_arm64_only/BoardConfig.mk	/^HOST_CROSS_ARCH := arm64$/;"	m
+HOST_CROSS_ARCH	vsoc_arm_only/BoardConfig.mk	/^HOST_CROSS_ARCH := arm64$/;"	m
+HOST_CROSS_OS	vsoc_arm64/BoardConfig.mk	/^HOST_CROSS_OS := linux_bionic$/;"	m
+HOST_CROSS_OS	vsoc_arm64_only/BoardConfig.mk	/^HOST_CROSS_OS := linux_bionic$/;"	m
+HOST_CROSS_OS	vsoc_arm_only/BoardConfig.mk	/^HOST_CROSS_OS := linux_bionic$/;"	m
+HOST_TOOLS	host/commands/fetcher/fetch_cvd.cc	/^const std::string HOST_TOOLS = "cvd-host_package.tar.gz";$/;"	v	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:const std::string
+HalCmdFetcherLoop	host/libs/confui/host_server.cc	/^void HostServer::HalCmdFetcherLoop() {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:void
+HalHostVsockPort	host/libs/confui/host_server.cc	/^static int HalHostVsockPort() {$/;"	f	namespace:cuttlefish::confui	typeref:typename:int	file:
+HandleAcceptCall	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleAcceptCall(const Client& client) {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleActivateDataCall	host/commands/modem_simulator/data_service.cpp	/^void DataService::HandleActivateDataCall(const Client& client,$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+HandleBroadcastConfig	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleBroadcastConfig(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleCLIP	host/commands/modem_simulator/sup_service.cpp	/^void SupService::HandleCLIP(const Client& client) {$/;"	f	class:cuttlefish::SupService	typeref:typename:void
+HandleCLIR	host/commands/modem_simulator/sup_service.cpp	/^void SupService::HandleCLIR(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SupService	typeref:typename:void
+HandleCSIM_IO	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleCSIM_IO(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleCallForward	host/commands/modem_simulator/sup_service.cpp	/^void SupService::HandleCallForward(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SupService	typeref:typename:void
+HandleCallWaiting	host/commands/modem_simulator/sup_service.cpp	/^void SupService::HandleCallWaiting(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SupService	typeref:typename:void
+HandleCancelUssd	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleCancelUssd(const Client& client,$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleCdmaRoamingPreference	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleCdmaRoamingPreference(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleCdmaSubscriptionSource	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleCdmaSubscriptionSource(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleChangeOrEnterPIN	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleChangeOrEnterPIN(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleChangePassword	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleChangePassword(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleClientMessage	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::HandleClientMessage(const Json::Value& server_message) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+HandleCloseLogicalChannel	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleCloseLogicalChannel(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleCommand	host/commands/modem_simulator/modem_service.cpp	/^void CommandHandler::HandleCommand(const Client& client,$/;"	f	class:cuttlefish::CommandHandler	typeref:typename:void
+HandleCommandDefaultSupported	host/commands/modem_simulator/modem_service.cpp	/^void ModemService::HandleCommandDefaultSupported(const Client& client) {$/;"	f	class:cuttlefish::ModemService	typeref:typename:void
+HandleConfigMessage	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::HandleConfigMessage(const Json::Value& server_message) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+HandleConnection	common/frontend/socket_vsock_proxy/main.cpp	/^void HandleConnection(cuttlefish::SharedFD vsock,$/;"	f	namespace:__anon913036200111	typeref:typename:void
+HandleCurrentCalls	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleCurrentCalls(const Client& client) {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleDataNetworkRegistration	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleDataNetworkRegistration(const Client& client,$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleDeleteSmsOnSim	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleDeleteSmsOnSim(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleDial	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleDial(const Client& client, const std::string& command) {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleEmergencyMode	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleEmergencyMode(const Client& client,$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleEnterDataState	host/commands/modem_simulator/data_service.cpp	/^void DataService::HandleEnterDataState(const Client& client,$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+HandleFacilityLock	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleFacilityLock(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleForward	host/frontend/webrtc_operator/device_handler.cpp	/^void DeviceHandler::HandleForward(const Json::Value& message) {$/;"	f	class:cuttlefish::DeviceHandler	typeref:typename:void
+HandleGetIMEI	host/commands/modem_simulator/misc_service.cpp	/^void MiscService::HandleGetIMEI(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::MiscService	typeref:typename:void
+HandleGetIMSI	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleGetIMSI(const Client& client) {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleGetIccId	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleGetIccId(const Client& client) {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleGetPreferredNetworkType	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleGetPreferredNetworkType(const Client& client) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleGetSmscAddress	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleGetSmscAddress(const Client& client) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleHangup	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleHangup(const Client& client,$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleInSession	host/libs/confui/session.cc	/^bool Session::HandleInSession(SharedFD hal_cli, const FsmInput fsm_input,$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+HandleIncomingMessage	host/commands/kernel_log_monitor/kernel_log_server.cc	/^bool KernelLogServer::HandleIncomingMessage() {$/;"	f	class:monitor::KernelLogServer	typeref:typename:bool
+HandleInit	host/libs/confui/session.cc	/^bool Session::HandleInit(SharedFD hal_cli, const FsmInput fsm_input,$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+HandleMessage	host/frontend/webrtc/lib/camera_streamer.cpp	/^void CameraStreamer::HandleMessage(const Json::Value& message) {$/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:void
+HandleMessage	host/frontend/webrtc/lib/camera_streamer.cpp	/^void CameraStreamer::HandleMessage(const std::vector<char>& message) {$/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:void
+HandleMessage	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::HandleMessage(const Json::Value &message) {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+HandleModemCommand	host/commands/modem_simulator/modem_service.cpp	/^bool ModemService::HandleModemCommand(const Client& client,$/;"	f	class:cuttlefish::ModemService	typeref:typename:bool
+HandleMute	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleMute(const Client& client, const std::string& command) {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleOpenLogicalChannel	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleOpenLogicalChannel(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandlePDPContext	host/commands/modem_simulator/data_service.cpp	/^void DataService::HandlePDPContext(const Client& client,$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+HandleQueryAvailableNetwork	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleQueryAvailableNetwork(const Client& client) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleQueryDataCallList	host/commands/modem_simulator/data_service.cpp	/^void DataService::HandleQueryDataCallList(const Client& client) {$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+HandleQueryNetworkSelectionMode	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleQueryNetworkSelectionMode(const Client& client) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleQueryPDPContextList	host/commands/modem_simulator/data_service.cpp	/^void DataService::HandleQueryPDPContextList(const Client& client) {$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+HandleQueryRemainTimes	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleQueryRemainTimes(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleQuerySupportedTechs	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleQuerySupportedTechs(const Client& client) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleRadioPower	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleRadioPower(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleRadioPowerReq	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleRadioPowerReq(const Client& client) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleReadDynamicParam	host/commands/modem_simulator/data_service.cpp	/^void DataService::HandleReadDynamicParam(const Client& client,$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+HandleReceiveRemoteCTEC	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleReceiveRemoteCTEC(const Client& client,$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleReceiveRemoteSMS	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleReceiveRemoteSMS(const Client& \/*client*\/, std::string& command) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleReceiveRemoteSignal	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleReceiveRemoteSignal(const Client& client,$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleReceiveRemoteVoiceDataReg	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleReceiveRemoteVoiceDataReg(const Client& client,$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleReceiveSMS	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleReceiveSMS(PDUParser sms_pdu) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleRegistrationRequest	host/frontend/webrtc_operator/device_handler.cpp	/^void DeviceHandler::HandleRegistrationRequest(const Json::Value& message) {$/;"	f	class:cuttlefish::DeviceHandler	typeref:typename:void
+HandleRejectCall	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleRejectCall(const Client& client) {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleReloadConfigCommand	host/commands/wmediumd_control/main.cpp	/^bool HandleReloadConfigCommand(cuttlefish::WmediumdController& client,$/;"	f	typeref:typename:bool
+HandleRemoteCall	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleRemoteCall(const Client& client,$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleReportStkServiceIsRunning	host/commands/modem_simulator/stk_service.cpp	/^void StkService::HandleReportStkServiceIsRunning(const Client& client) {$/;"	f	class:cuttlefish::StkService	typeref:typename:void
+HandleRequestOperator	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleRequestOperator(const Client& client) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleSIMStatusReq	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleSIMStatusReq(const Client& client) {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleSIM_IO	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleSIM_IO(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleSMSAcknowledge	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleSMSAcknowledge(const Client& client, std::string& \/*command*\/) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleSMSStatuReport	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleSMSStatuReport(PDUParser sms_pdu, int message_reference) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleSendDtmf	host/commands/modem_simulator/call_service.cpp	/^void CallService::HandleSendDtmf(const Client& client,$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+HandleSendEnvelope	host/commands/modem_simulator/stk_service.cpp	/^void StkService::HandleSendEnvelope(const Client& client , std::string& command) {$/;"	f	class:cuttlefish::StkService	typeref:typename:void
+HandleSendSMS	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleSendSMS(const Client& client, std::string& \/*command*\/) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleSendSMSPDU	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleSendSMSPDU(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleSendTerminalResponseToSim	host/commands/modem_simulator/stk_service.cpp	/^void StkService::HandleSendTerminalResponseToSim(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::StkService	typeref:typename:void
+HandleSetNetworkSelectionMode	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleSetNetworkSelectionMode(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleSetPreferredNetworkType	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleSetPreferredNetworkType(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleSetSmscAddress	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleSetSmscAddress(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleSetSnrCommand	host/commands/wmediumd_control/main.cpp	/^bool HandleSetSnrCommand(cuttlefish::WmediumdController& client,$/;"	f	typeref:typename:bool
+HandleSignalStrength	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleSignalStrength(const Client& client) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleSimAuthentication	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleSimAuthentication(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleSuppServiceNotifications	host/commands/modem_simulator/sup_service.cpp	/^void SupService::HandleSuppServiceNotifications(const Client& client, std::string& \/*command*\//;"	f	class:cuttlefish::SupService	typeref:typename:void
+HandleSurfaceFrame	host/libs/wayland/wayland_surfaces.cpp	/^void Surfaces::HandleSurfaceFrame(std::uint32_t display_number,$/;"	f	class:wayland::Surfaces	typeref:typename:void
+HandleTransmitLogicalChannel	host/commands/modem_simulator/sim_service.cpp	/^void SimService::HandleTransmitLogicalChannel(const Client& client,$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+HandleUSSD	host/commands/modem_simulator/sup_service.cpp	/^void SupService::HandleUSSD(const Client& client, std::string& \/*command*\/) {$/;"	f	class:cuttlefish::SupService	typeref:typename:void
+HandleVoiceNetworkRegistration	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::HandleVoiceNetworkRegistration(const Client& client,$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+HandleWaitStop	host/libs/confui/session.cc	/^bool Session::HandleWaitStop(SharedFD hal_cli, const FsmInput fsm_input) {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+HandleWriteSMSPduToSim	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleWriteSMSPduToSim(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+HandleWriteSMSToSim	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::HandleWriteSMSToSim(const Client& client, std::string& command) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+Hardware Configuration	host/frontend/webrtc_operator/assets/client.html	/^        <h3>Hardware Configuration<\/h3>$/;"	j
+HardwareAuthToken	host/libs/confui/cbor.h	/^  using HardwareAuthToken =$/;"	t	class:cuttlefish::confui::Cbor	typeref:typename:android::hardware::keymaster::V4_0::HardwareAuthToken
+HasAlias	common/libs/utils/flag_parser.cpp	/^bool Flag::HasAlias(const FlagAlias& test) const {$/;"	f	class:cuttlefish::Flag	typeref:typename:bool
+HasConfig	host/libs/config/config_flag.cpp	/^  bool HasConfig(const std::string& name) const {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigReader	typeref:typename:bool	file:
+HasCredentials	common/libs/utils/unix_sockets.cpp	/^bool UnixSocketMessage::HasCredentials() {$/;"	f	class:cuttlefish::UnixSocketMessage	typeref:typename:bool
+HasFileDescriptors	common/libs/utils/unix_sockets.cpp	/^bool UnixSocketMessage::HasFileDescriptors() {$/;"	f	class:cuttlefish::UnixSocketMessage	typeref:typename:bool
+HasKey	host/commands/secure_env/fragile_tpm_storage.cpp	/^bool FragileTpmStorage::HasKey(const Json::Value& key) const {$/;"	f	class:cuttlefish::FragileTpmStorage	typeref:typename:bool
+HasKey	host/commands/secure_env/insecure_fallback_storage.cpp	/^bool InsecureFallbackStorage::HasKey(const Json::Value& key) const {$/;"	f	class:cuttlefish::InsecureFallbackStorage	typeref:typename:bool
+Headers	host/commands/fetcher/build_api.cc	/^std::vector<std::string> BuildApi::Headers() {$/;"	f	class:cuttlefish::BuildApi	typeref:typename:std::vector<std::string>
+HealthImpl	guest/hals/health/health.cpp	/^  HealthImpl(std::unique_ptr<healthd_config>&& config)$/;"	f	class:android::hardware::health::V2_1::implementation::HealthImpl	file:
+HealthImpl	guest/hals/health/health.cpp	/^class HealthImpl : public Health {$/;"	c	namespace:android::hardware::health::V2_1::implementation	file:
+Height	host/libs/confui/host_renderer.h	/^  int Height() const { return h_; }$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:int
+Help	common/libs/utils/flag_parser.cpp	/^Flag Flag::Help(const std::string& help) && {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag
+Help	common/libs/utils/flag_parser.cpp	/^Flag& Flag::Help(const std::string& help) & {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag &
+HelpFlag	common/libs/utils/flag_parser.cpp	/^Flag HelpFlag(const std::vector<Flag>& flags, const std::string& text) {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+Hex2ToByte	host/commands/modem_simulator/pdu_parser.cpp	/^int PDUParser::Hex2ToByte(const std::string& hex) {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:int
+HexCharToInt	host/commands/modem_simulator/pdu_parser.cpp	/^int PDUParser::HexCharToInt(char c) {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:int
+HmacSerializable	host/commands/secure_env/hmac_serializable.cpp	/^HmacSerializable::HmacSerializable($/;"	f	class:cuttlefish::HmacSerializable
+HmacSerializable	host/commands/secure_env/hmac_serializable.h	/^class HmacSerializable : public keymaster::Serializable {$/;"	c	namespace:cuttlefish
+HoldingBuffer	host/frontend/webrtc/audio_handler.h	/^  struct HoldingBuffer {$/;"	s	class:cuttlefish::AudioHandler
+HostArch	common/libs/utils/environment.cpp	/^Arch HostArch() {$/;"	f	namespace:cuttlefish	typeref:typename:Arch
+HostArchStr	common/libs/utils/environment.cpp	/^std::string HostArchStr() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+HostBinaryPath	host/libs/config/cuttlefish_config.cpp	/^std::string HostBinaryPath(const std::string& binary_name) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+HostError	common/libs/confui/protocol_types.h	/^struct HostError {$/;"	s	namespace:cuttlefish::confui
+HostMessageFetcherLoop	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^void TrustyConfirmationUI::HostMessageFetcherLoop() {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:void
+HostModeCtrl	host/libs/confui/host_mode_ctrl.h	/^  HostModeCtrl() : atomic_mode_(ModeType::kAndroidMode) {}$/;"	f	class:cuttlefish::HostModeCtrl
+HostModeCtrl	host/libs/confui/host_mode_ctrl.h	/^class HostModeCtrl {$/;"	c	namespace:cuttlefish
+HostServer	host/libs/confui/host_server.cc	/^HostServer::HostServer($/;"	f	class:cuttlefish::confui::HostServer
+HostServer	host/libs/confui/host_server.h	/^class HostServer : public HostVirtualInput {$/;"	c	namespace:cuttlefish::confui
+HostSupportsQemuCli	host/libs/config/cuttlefish_config.cpp	/^bool HostSupportsQemuCli() {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+HostToolsCrc	host/libs/config/host_tools_version.cpp	/^std::map<std::string, uint32_t> HostToolsCrc() {$/;"	f	namespace:cuttlefish	typeref:typename:std::map<std::string,uint32_t>
+HostToolsUpdated	host/commands/start/main.cc	/^bool HostToolsUpdated() {$/;"	f	namespace:__anon8e1e78490111	typeref:typename:bool
+HostVirtualInput	host/libs/confui/host_virtual_input.h	/^class HostVirtualInput {$/;"	c	namespace:cuttlefish::confui
+HttpClientError	host/commands/fetcher/curl_wrapper.h	/^  bool HttpClientError() { return http_code >= 400 && http_code <= 499; }$/;"	f	struct:cuttlefish::CurlResponse	typeref:typename:bool
+HttpInfo	host/commands/fetcher/curl_wrapper.h	/^  bool HttpInfo() { return http_code >= 100 && http_code <= 199; }$/;"	f	struct:cuttlefish::CurlResponse	typeref:typename:bool
+HttpRedirect	host/commands/fetcher/curl_wrapper.h	/^  bool HttpRedirect() { return http_code >= 300 && http_code <= 399; }$/;"	f	struct:cuttlefish::CurlResponse	typeref:typename:bool
+HttpServerError	host/commands/fetcher/curl_wrapper.h	/^  bool HttpServerError() { return http_code >= 500 && http_code <= 599; }$/;"	f	struct:cuttlefish::CurlResponse	typeref:typename:bool
+HttpStatusCode	host/libs/websocket/websocket_handler.h	/^enum class HttpStatusCode : int {$/;"	g	namespace:cuttlefish	typeref:typename:int
+HttpSuccess	host/commands/fetcher/curl_wrapper.h	/^  bool HttpSuccess() { return http_code >= 200 && http_code <= 299; }$/;"	f	struct:cuttlefish::CurlResponse	typeref:typename:bool
+HvcNum	host/libs/vm_manager/crosvm_builder.cpp	/^int CrosvmBuilder::HvcNum() { return hvc_num_; }$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:int
+ID	host/libs/allocd/request.h	/^  ID,                \/\/ Allocate and return a new Session ID$/;"	e	enum:cuttlefish::RequestType
+INIT_BOOTCHART	shared/BoardConfig.mk	/^INIT_BOOTCHART := true$/;"	m
+INJECT	host/commands/assemble_cvd/disk_flags.cc	/^  INJECT(BootImageRepacker(const CuttlefishConfig& config)) : config_(config) {}$/;"	f	class:cuttlefish::BootImageRepacker	file:
+INJECT	host/commands/assemble_cvd/disk_flags.cc	/^  INJECT(InitializeAccessKregistryImage($/;"	f	class:cuttlefish::InitializeAccessKregistryImage	file:
+INJECT	host/commands/assemble_cvd/disk_flags.cc	/^  INJECT(InitializeMetadataImage()) {}$/;"	f	class:cuttlefish::InitializeMetadataImage	file:
+INJECT	host/commands/assemble_cvd/flag_feature.cpp	/^  INJECT(ParseGflagsImpl(ConfigFlag& config)) : config_(config) {}$/;"	f	class:cuttlefish::ParseGflagsImpl	file:
+INJECT	host/commands/run_cvd/boot_state_machine.cc	/^  INJECT(CvdBootStateMachine(ProcessLeader& process_leader,$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	file:
+INJECT	host/commands/run_cvd/boot_state_machine.cc	/^  INJECT(ProcessLeader(const CuttlefishConfig& config)) : config_(config) {}$/;"	f	class:cuttlefish::__anone7ed366f0111::ProcessLeader	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT($/;"	f	class:cuttlefish::GnssGrpcProxyServer	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(BluetoothConnector(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::BluetoothConnector	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(ConfigServer(const CuttlefishConfig::InstanceSpecific& instance))$/;"	f	class:cuttlefish::ConfigServer	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(ConsoleForwarder(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::ConsoleForwarder	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(KernelLogMonitor(const CuttlefishConfig::InstanceSpecific& instance))$/;"	f	class:cuttlefish::KernelLogMonitor	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(LogcatReceiver(const CuttlefishConfig::InstanceSpecific& instance))$/;"	f	class:cuttlefish::LogcatReceiver	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(MetricsService(const CuttlefishConfig& config)) : config_(config) {}$/;"	f	class:cuttlefish::MetricsService	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(OpenWrt(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::OpenWrt	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(RootCanal(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::RootCanal	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(SecureEnvironment(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::SecureEnvironment	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(TombstoneReceiver(const CuttlefishConfig::InstanceSpecific& instance))$/;"	f	class:cuttlefish::TombstoneReceiver	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(VehicleHalServer(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::VehicleHalServer	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(VmmCommands(const CuttlefishConfig& config, VmManager& vmm))$/;"	f	class:cuttlefish::VmmCommands	file:
+INJECT	host/commands/run_cvd/launch.cc	/^  INJECT(WmediumdServer(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::WmediumdServer	file:
+INJECT	host/commands/run_cvd/launch_modem.cpp	/^  INJECT(ModemSimulator(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::ModemSimulator	file:
+INJECT	host/commands/run_cvd/launch_streamer.cpp	/^  INJECT(StreamerSockets(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::__anon6b0274e10111::StreamerSockets	file:
+INJECT	host/commands/run_cvd/launch_streamer.cpp	/^  INJECT(WebRtcServer(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::__anon6b0274e10111::WebRtcServer	file:
+INJECT	host/commands/run_cvd/main.cc	/^  INJECT($/;"	f	class:cuttlefish::__anonadab6e0c0111::CuttlefishEnvironment	file:
+INJECT	host/commands/run_cvd/server_loop.cpp	/^  INJECT(ServerLoopImpl(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	file:
+INJECT	host/commands/run_cvd/validate.cpp	/^  INJECT(ValidateHostConfigurationFeature()) {}$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateHostConfigurationFeature	file:
+INJECT	host/commands/run_cvd/validate.cpp	/^  INJECT(ValidateTapDevices(const CuttlefishConfig::InstanceSpecific& instance))$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateTapDevices	file:
+INJECT	host/libs/config/adb/config.cpp	/^  INJECT(AdbConfigFragmentImpl(AdbConfig& config)) : config_(config) {}$/;"	f	class:cuttlefish::__anone963d72d0111::AdbConfigFragmentImpl	file:
+INJECT	host/libs/config/adb/data.cpp	/^  INJECT(AdbConfigImpl()) {}$/;"	f	class:cuttlefish::AdbConfigImpl	file:
+INJECT	host/libs/config/adb/flags.cpp	/^  INJECT(AdbConfigFlagImpl(AdbConfig& config, ConfigFlag& config_flag))$/;"	f	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	file:
+INJECT	host/libs/config/adb/launch.cpp	/^  INJECT(AdbConnector(const AdbHelper& helper)) : helper_(helper) {}$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbConnector	file:
+INJECT	host/libs/config/adb/launch.cpp	/^  INJECT(AdbHelper(const CuttlefishConfig::InstanceSpecific& instance,$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbHelper	file:
+INJECT	host/libs/config/adb/launch.cpp	/^  INJECT(SocketVsockProxy(const AdbHelper& helper,$/;"	f	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	file:
+INJECT	host/libs/config/adb/test.cpp	/^  INJECT(TestData(AdbConfig& config, AdbConfigFragment& fragment))$/;"	f	struct:cuttlefish::TestData	file:
+INJECT	host/libs/config/config_flag.cpp	/^  INJECT(ConfigFlagImpl(ConfigReader& cr, SystemImageDirFlag& s))$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	file:
+INJECT	host/libs/config/config_flag.cpp	/^  INJECT(ConfigFlagPlaceholderImpl()) {}$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagPlaceholderImpl	file:
+INJECT	host/libs/config/config_flag.cpp	/^  INJECT(SystemImageDirFlagImpl()) {$/;"	f	class:cuttlefish::__anon2e549bd00111::SystemImageDirFlagImpl	file:
+INJECT	host/libs/config/custom_actions.cpp	/^  INJECT(CustomActionConfigImpl(ConfigFlag& config)) : config_(config) {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	file:
+INJECT	host/libs/config/data_image.cpp	/^  INJECT(FixedDataImagePath(ANNOTATED(DataImageTag, std::string) path))$/;"	f	class:cuttlefish::FixedDataImagePath	file:
+INJECT	host/libs/config/data_image.cpp	/^  INJECT(FixedMiscImagePath(ANNOTATED(MiscImageTag, std::string) path))$/;"	f	class:cuttlefish::FixedMiscImagePath	file:
+INJECT	host/libs/config/data_image.cpp	/^  INJECT(InitializeDataImageImpl(const CuttlefishConfig& config,$/;"	f	class:cuttlefish::InitializeDataImageImpl	file:
+INJECT	host/libs/config/data_image.cpp	/^  INJECT(InitializeEspImageImpl(ANNOTATED(EspImageTag, std::string) esp_image,$/;"	f	class:cuttlefish::InitializeEspImageImpl	file:
+INJECT	host/libs/config/data_image.cpp	/^  INJECT(InitializeMiscImageImpl(MiscImagePath& misc_path))$/;"	f	class:cuttlefish::InitializeMiscImageImpl	file:
+INOTIFY_MAX_EVENT_SIZE	guest/monitoring/tombstone_transmit/tombstone_transmit.cpp	/^#define INOTIFY_MAX_EVENT_SIZE /;"	d	file:
+INTENT_ACTION_BLUETOOTH_CHANGED	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public static final String INTENT_ACTION_BLUETOOTH_CHANGED = "com.android.google.gce.gceserv/;"	f	class:GceService
+INTENT_ACTION_CONFIGURE	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public static final String INTENT_ACTION_CONFIGURE = "com.android.google.gce.gceservice.CONF/;"	f	class:GceService
+INTENT_ACTION_NETWORK_CHANGED	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public static final String INTENT_ACTION_NETWORK_CHANGED = "com.android.google.gce.gceservic/;"	f	class:GceService
+INTERNAL_extra_source	tools/create_base_image.go	/^var INTERNAL_extra_source string$/;"	v	package:main	typeref:typename:string
+INTERROGATE	host/commands/modem_simulator/sup_service.h	/^      INTERROGATE   = 2,$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::CallForwardInfoStatus
+INVALID_HEX_CHAR	guest/hals/ril/reference-libril/ril_service.cpp	/^#define INVALID_HEX_CHAR /;"	d	file:
+IOCTL_VM_SOCKETS_GET_LOCAL_CID	common/libs/fs/vm_sockets.h	/^#define IOCTL_VM_SOCKETS_GET_LOCAL_CID /;"	d
+IOError	host/libs/audio_connector/buffers.h	/^  IOError,$/;"	e	enum:cuttlefish::Status
+IR	host/commands/modem_simulator/sim_service.h	/^      IR = 5,  \/\/ Barr all call, when roaming outside Home Country$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+ISIM_ABSENT	guest/hals/ril/reference-ril/reference-ril.c	/^    ISIM_ABSENT = 12,$/;"	e	enum:__anon70d7df6f0303	file:
+ISIM_NETWORK_PERSONALIZATION	guest/hals/ril/reference-ril/reference-ril.c	/^    ISIM_NETWORK_PERSONALIZATION = 17,$/;"	e	enum:__anon70d7df6f0303	file:
+ISIM_NOT_READY	guest/hals/ril/reference-ril/reference-ril.c	/^    ISIM_NOT_READY = 13,$/;"	e	enum:__anon70d7df6f0303	file:
+ISIM_PIN	guest/hals/ril/reference-ril/reference-ril.c	/^    ISIM_PIN = 15,$/;"	e	enum:__anon70d7df6f0303	file:
+ISIM_PUK	guest/hals/ril/reference-ril/reference-ril.c	/^    ISIM_PUK = 16,$/;"	e	enum:__anon70d7df6f0303	file:
+ISIM_READY	guest/hals/ril/reference-ril/reference-ril.c	/^    ISIM_READY = 14,$/;"	e	enum:__anon70d7df6f0303	file:
+IS_MULTIMODE	guest/hals/ril/reference-ril/reference-ril.c	/^#define IS_MULTIMODE(/;"	d	file:
+ITERATION_PERIOD_MS	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^    private static final int ITERATION_PERIOD_MS = 10 * 1000;$/;"	f	class:JobExecutor	file:
+IfaceConfig	host/commands/assemble_cvd/alloc.h	/^struct IfaceConfig {$/;"	s	namespace:cuttlefish
+IfaceData	host/commands/assemble_cvd/alloc.h	/^struct IfaceData {$/;"	s	namespace:cuttlefish
+IfaceTyToStr	host/libs/allocd/utils.cpp	/^std::string IfaceTyToStr(IfaceType iface) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+IfaceTyToStrMap	host/libs/allocd/utils.cpp	/^const std::map<IfaceType, std::string> IfaceTyToStrMap = {$/;"	v	namespace:cuttlefish	typeref:typename:const std::map<IfaceType,std::string>
+IfaceType	host/libs/allocd/request.h	/^enum class IfaceType : uint16_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint16_t
+IgnoreOnFail	tools/create_base_image.go	/^    IgnoreOnFail OnFail = iota$/;"	c	package:main	typeref:type:OnFail
+ImagePartition	host/libs/image_aggregator/image_aggregator.h	/^struct ImagePartition {$/;"	s	namespace:cuttlefish
+ImagePartitionType	host/libs/image_aggregator/image_aggregator.h	/^enum ImagePartitionType {$/;"	g	namespace:cuttlefish
+Impl	host/commands/secure_env/in_process_tpm.cpp	/^  Impl() {$/;"	f	class:cuttlefish::InProcessTpm::Impl	file:
+Impl	host/commands/secure_env/in_process_tpm.cpp	/^class InProcessTpm::Impl {$/;"	c	class:cuttlefish::InProcessTpm	file:
+Impl	host/frontend/webrtc/lib/local_recorder.cpp	/^class LocalRecorder::Impl {$/;"	c	class:cuttlefish::webrtc_streaming::LocalRecorder	file:
+Impl	host/frontend/webrtc/lib/streamer.cpp	/^class Streamer::Impl : public WsConnectionObserver {$/;"	c	class:cuttlefish::webrtc_streaming::Streamer	file:
+Impls	host/libs/config/inject.h	/^    static fruit::Component<Deps> Impls() {$/;"	f	struct:cuttlefish::Multibindings::Bases	typeref:typename:fruit::Component<Deps>
+Impls	host/libs/config/inject.h	/^    static fruit::Component<Deps> Impls() {$/;"	f	struct:cuttlefish::Multibindings::OneBase	typeref:typename:fruit::Component<Deps>
+ImportKey	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::ImportKey(const ImportKeyRequest& request, ImportKeyResponse* response) {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ImportKey	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::ImportKey(const ImportKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ImportWrappedKey	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::ImportWrappedKey(const ImportWrappedKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ImportWrappedKey	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::ImportWrappedKey(const ImportWrappedKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+ImsCdmaSms	guest/hals/ril/reference-libril/ril_service.cpp	/^struct ImsCdmaSms {$/;"	s	file:
+InGroup	common/libs/utils/subprocess.h	/^  bool InGroup() const { return in_group_; }$/;"	f	class:cuttlefish::SubprocessOptions	typeref:typename:bool
+InGroup	common/libs/utils/subprocess.h	/^  void InGroup(bool in_group) {$/;"	f	class:cuttlefish::SubprocessOptions	typeref:typename:void
+InGroup	common/libs/utils/users.cpp	/^bool InGroup(const std::string& group) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+InProcessTpm	host/commands/secure_env/in_process_tpm.cpp	/^InProcessTpm::InProcessTpm() : impl_(new Impl()) {}$/;"	f	class:cuttlefish::InProcessTpm
+InProcessTpm	host/commands/secure_env/in_process_tpm.h	/^class InProcessTpm : public Tpm {$/;"	c	namespace:cuttlefish
+IncrementalOTA_GetBlockDifferences	shared/releasetools.py	/^def IncrementalOTA_GetBlockDifferences(info):$/;"	f
+Index	common/libs/net/network_interface.h	/^  size_t Index() const {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:size_t
+InfoCommand	host/libs/audio_connector/commands.h	/^  InfoCommand(AudioCommandType type, uint32_t start_id, size_t count, R* reply)$/;"	f	class:cuttlefish::InfoCommand
+InfoCommand	host/libs/audio_connector/commands.h	/^class InfoCommand : public AudioCommand {$/;"	c	namespace:cuttlefish
+Init	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::Init() { return 0; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+Init	host/libs/confui/cbor.cc	/^void Cbor::Init() {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:void
+InitBootloaderEnvPartition	host/commands/assemble_cvd/boot_config.cc	/^bool InitBootloaderEnvPartition(const CuttlefishConfig& config,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+InitDefaultNvramConfig	host/commands/modem_simulator/nvram_config.cpp	/^void NvramConfig::InitDefaultNvramConfig() {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:void
+InitFilesystemAndCreateConfig	host/commands/assemble_cvd/assemble_cvd.cc	/^const CuttlefishConfig* InitFilesystemAndCreateConfig($/;"	f	namespace:cuttlefish::__anon1e335d460111	typeref:typename:const CuttlefishConfig *
+InitMicrophone	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::InitMicrophone() { return 0; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+InitNvramConfigService	host/commands/modem_simulator/nvram_config.cpp	/^void NvramConfig::InitNvramConfigService(size_t num_instances, int sim_type) {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:void
+InitPlayout	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::InitPlayout() { return 0; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+InitRamFsTag	host/libs/config/data_image.cpp	/^struct InitRamFsTag {};$/;"	s	namespace:cuttlefish	file:
+InitRecording	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::InitRecording() { return 0; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+InitSpeaker	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::InitSpeaker() { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+Initialize	guest/hals/keymaster/remote/remote_keymaster.cpp	/^bool RemoteKeymaster::Initialize() {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:bool
+Initialize	guest/hals/keymint/remote/remote_keymaster.cpp	/^bool RemoteKeymaster::Initialize() {$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:bool
+Initialize	host/commands/modem_simulator/modem_simulator.cpp	/^void ModemSimulator::Initialize($/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:void
+InitializeAccessKregistryImage	host/commands/assemble_cvd/disk_flags.cc	/^class InitializeAccessKregistryImage : public Feature {$/;"	c	namespace:cuttlefish	file:
+InitializeCommandHandlers	host/commands/modem_simulator/call_service.cpp	/^std::vector<CommandHandler> CallService::InitializeCommandHandlers() {$/;"	f	class:cuttlefish::CallService	typeref:typename:std::vector<CommandHandler>
+InitializeCommandHandlers	host/commands/modem_simulator/data_service.cpp	/^std::vector<CommandHandler> DataService::InitializeCommandHandlers() {$/;"	f	class:cuttlefish::DataService	typeref:typename:std::vector<CommandHandler>
+InitializeCommandHandlers	host/commands/modem_simulator/misc_service.cpp	/^std::vector<CommandHandler> MiscService::InitializeCommandHandlers() {$/;"	f	class:cuttlefish::MiscService	typeref:typename:std::vector<CommandHandler>
+InitializeCommandHandlers	host/commands/modem_simulator/network_service.cpp	/^std::vector<CommandHandler> NetworkService::InitializeCommandHandlers() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:std::vector<CommandHandler>
+InitializeCommandHandlers	host/commands/modem_simulator/sim_service.cpp	/^std::vector<CommandHandler> SimService::InitializeCommandHandlers() {$/;"	f	class:cuttlefish::SimService	typeref:typename:std::vector<CommandHandler>
+InitializeCommandHandlers	host/commands/modem_simulator/sms_service.cpp	/^std::vector<CommandHandler> SmsService::InitializeCommandHandlers() {$/;"	f	class:cuttlefish::SmsService	typeref:typename:std::vector<CommandHandler>
+InitializeCommandHandlers	host/commands/modem_simulator/stk_service.cpp	/^std::vector<CommandHandler> StkService::InitializeCommandHandlers() {$/;"	f	class:cuttlefish::StkService	typeref:typename:std::vector<CommandHandler>
+InitializeCommandHandlers	host/commands/modem_simulator/sup_service.cpp	/^std::vector<CommandHandler> SupService::InitializeCommandHandlers() {$/;"	f	class:cuttlefish::SupService	typeref:typename:std::vector<CommandHandler>
+InitializeCuttlefishConfiguration	host/commands/assemble_cvd/flags.cc	/^CuttlefishConfig InitializeCuttlefishConfiguration($/;"	f	namespace:cuttlefish	typeref:typename:CuttlefishConfig
+InitializeDataImage	host/libs/config/data_image.h	/^class InitializeDataImage : public Feature {};$/;"	c	namespace:cuttlefish
+InitializeDataImageComponent	host/libs/config/data_image.cpp	/^InitializeDataImageComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<const CuttlefishConfig,DataImagePath>,InitializeDataImage>
+InitializeDataImageImpl	host/libs/config/data_image.cpp	/^class InitializeDataImageImpl : public InitializeDataImage {$/;"	c	namespace:cuttlefish	file:
+InitializeEspImage	host/libs/config/data_image.h	/^class InitializeEspImage : public Feature {};$/;"	c	namespace:cuttlefish
+InitializeEspImageComponent	host/libs/config/data_image.cpp	/^fruit::Component<InitializeEspImage> InitializeEspImageComponent($/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<InitializeEspImage>
+InitializeEspImageImpl	host/libs/config/data_image.cpp	/^class InitializeEspImageImpl : public InitializeEspImage {$/;"	c	namespace:cuttlefish	file:
+InitializeFacilityLock	host/commands/modem_simulator/sim_service.cpp	/^void SimService::InitializeFacilityLock() {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+InitializeLwsObjects	host/libs/websocket/websocket_server.cpp	/^void WebSocketServer::InitializeLwsObjects() {$/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:void
+InitializeMetadataImage	host/commands/assemble_cvd/disk_flags.cc	/^class InitializeMetadataImage : public Feature {$/;"	c	namespace:cuttlefish	file:
+InitializeMiscImage	host/libs/config/data_image.h	/^class InitializeMiscImage : public Feature {};$/;"	c	namespace:cuttlefish
+InitializeMiscImageComponent	host/libs/config/data_image.cpp	/^InitializeMiscImageComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<MiscImagePath>,InitializeMiscImage>
+InitializeMiscImageImpl	host/libs/config/data_image.cpp	/^class InitializeMiscImageImpl : public InitializeMiscImage {$/;"	c	namespace:cuttlefish	file:
+InitializeNetworkConfiguration	common/libs/device_config/host_device_config.cpp	/^bool InitializeNetworkConfiguration(const CuttlefishConfig& cuttlefish_config,$/;"	f	namespace:cuttlefish::__anonf277137d0111	typeref:typename:bool
+InitializeNetworkOperator	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::InitializeNetworkOperator() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+InitializeScreenConfiguration	common/libs/device_config/host_device_config.cpp	/^void InitializeScreenConfiguration(const CuttlefishConfig& cuttlefish_config,$/;"	f	namespace:cuttlefish::__anonf277137d0111	typeref:typename:void
+InitializeServiceState	host/commands/modem_simulator/call_service.cpp	/^void CallService::InitializeServiceState() {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+InitializeServiceState	host/commands/modem_simulator/data_service.cpp	/^void DataService::InitializeServiceState() {$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+InitializeServiceState	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::InitializeServiceState() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+InitializeServiceState	host/commands/modem_simulator/sim_service.cpp	/^void SimService::InitializeServiceState() {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+InitializeServiceState	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::InitializeServiceState() {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+InitializeServiceState	host/commands/modem_simulator/sup_service.cpp	/^void SupService::InitializeServiceState() {$/;"	f	class:cuttlefish::SupService	typeref:typename:void
+InitializeSimFileSystemAndSimState	host/commands/modem_simulator/sim_service.cpp	/^void SimService::InitializeSimFileSystemAndSimState() {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+InitializeSimOperator	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::InitializeSimOperator() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+Initialized	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::Initialized() const { return true; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+InjectHingeAngle	guest/commands/sensor_injection/main.cpp	/^void InjectHingeAngle(int angle) {$/;"	f	typeref:typename:void
+InjectOrientation	guest/commands/sensor_injection/main.cpp	/^void InjectOrientation(bool portrait) {$/;"	f	typeref:typename:void
+InputChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^InputChannelHandler::InputChannelHandler($/;"	f	class:cuttlefish::webrtc_streaming::InputChannelHandler
+InputChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^class InputChannelHandler : public webrtc::DataChannelObserver {$/;"	c	namespace:cuttlefish::webrtc_streaming	file:
+InputEvent	guest/commands/vsoc_input_service/vsoc_input_service.h	/^struct InputEvent {$/;"	s	namespace:cuttlefish::input_events
+InputEventBuffer	host/frontend/webrtc/connection_observer.cpp	/^struct InputEventBuffer {$/;"	s	namespace:cuttlefish	file:
+InputEventBufferImpl	host/frontend/webrtc/connection_observer.cpp	/^  InputEventBufferImpl() {$/;"	f	struct:cuttlefish::InputEventBufferImpl	file:
+InputEventBufferImpl	host/frontend/webrtc/connection_observer.cpp	/^struct InputEventBufferImpl : public InputEventBuffer {$/;"	s	namespace:cuttlefish	file:
+InputSockets	host/frontend/webrtc/connection_observer.h	/^struct InputSockets {$/;"	s	namespace:cuttlefish
+InsecureFallbackStorage	host/commands/secure_env/insecure_fallback_storage.cpp	/^InsecureFallbackStorage::InsecureFallbackStorage($/;"	f	class:cuttlefish::InsecureFallbackStorage
+InsecureFallbackStorage	host/commands/secure_env/insecure_fallback_storage.h	/^class InsecureFallbackStorage : public GatekeeperStorage {$/;"	c	namespace:cuttlefish
+Insert	host/commands/modem_simulator/thread_looper.cpp	/^void ThreadLooper::Insert(const Event &event) {$/;"	f	class:cuttlefish::ThreadLooper	typeref:typename:void
+Insert	host/libs/allocd/resource_manager.h	/^  void Insert($/;"	f	class:cuttlefish::Session	typeref:typename:void
+InstallAlwaysNeededDependencyTag	build/cvd-host-package.go	/^	android.InstallAlwaysNeededDependencyTag \/\/ to force installation of both "deps" and manually/;"	M	struct:cuttlefish.dependencyTag	typeref:typename:android.InstallAlwaysNeededDependencyTag
+InstanceFromEnvironment	host/libs/config/cuttlefish_config.cpp	/^int InstanceFromEnvironment() {$/;"	f	namespace:cuttlefish::__anon2cec80f10111	typeref:typename:int
+InstanceSpecific	host/commands/modem_simulator/nvram_config.h	/^    InstanceSpecific(const NvramConfig* config, const std::string& id)$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific
+InstanceSpecific	host/commands/modem_simulator/nvram_config.h	/^  class InstanceSpecific {$/;"	c	class:cuttlefish::NvramConfig
+InstanceSpecific	host/libs/config/cuttlefish_config.h	/^    InstanceSpecific(const CuttlefishConfig* config, const std::string& id)$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific
+InstanceSpecific	host/libs/config/cuttlefish_config.h	/^  class InstanceSpecific {$/;"	c	class:cuttlefish::CuttlefishConfig
+Instances	host/libs/config/cuttlefish_config.cpp	/^std::vector<CuttlefishConfig::InstanceSpecific> CuttlefishConfig::Instances()$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::vector<CuttlefishConfig::InstanceSpecific>
+InstantiateDynHandler	host/libs/websocket/websocket_server.cpp	/^std::unique_ptr<DynHandler> WebSocketServer::InstantiateDynHandler($/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:std::unique_ptr<DynHandler>
+InstantiateHandler	host/libs/websocket/websocket_server.cpp	/^std::shared_ptr<WebSocketHandler> WebSocketServer::InstantiateHandler($/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:std::shared_ptr<WebSocketHandler>
+IntToHexString	host/commands/modem_simulator/pdu_parser.cpp	/^std::string PDUParser::IntToHexString(int value) {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:std::string
+IntToHexStringTimeZoneDiff	host/commands/modem_simulator/pdu_parser.cpp	/^std::string PDUParser::IntToHexStringTimeZoneDiff(int tzdiff_hour) {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:std::string
+Interactive	guest/hals/confirmationui/guest_session.h	/^        Interactive = 3,$/;"	e	enum:android::hardware::confirmationui::V1_0::implementation::GuestSession::ListenerState
+InterfaceState	guest/hals/ril/reference-ril/reference-ril.c	/^enum InterfaceState {$/;"	g	file:
+InternalDeps	host/commands/run_cvd/launch.cc	/^  using InternalDeps = fruit::Required<const CuttlefishConfig, VmManager,$/;"	t	function:cuttlefish::launchComponent	typeref:typename:fruit::Required<const CuttlefishConfig,VmManager,const CuttlefishConfig::InstanceSpecific,KernelLogPipeProvider>	file:
+IntersectPortRanges	host/frontend/webrtc/lib/port_range_socket_factory.cpp	/^std::pair<uint16_t, uint16_t> IntersectPortRanges($/;"	f	namespace:cuttlefish::webrtc_streaming::__anonff3d797e0111	typeref:typename:std::pair<uint16_t,uint16_t>
+Invalid	host/libs/allocd/request.h	/^  Invalid = 0,       \/\/ Invalid Request$/;"	e	enum:cuttlefish::RequestType
+Invalid	host/libs/allocd/request.h	/^  Invalid = 0,  \/\/ Invalid status$/;"	e	enum:cuttlefish::RequestStatus
+Invalid	host/libs/allocd/request.h	/^  Invalid = 0,  \/\/ an invalid interface$/;"	e	enum:cuttlefish::IfaceType
+Invalid	host/libs/allocd/resource.h	/^  Invalid = 0,$/;"	e	enum:cuttlefish::ResourceType
+InvalidFlagGuard	common/libs/utils/flag_parser.cpp	/^Flag InvalidFlagGuard() {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+IoStatusMsg	host/libs/audio_connector/shm_layout.h	/^struct IoStatusMsg {$/;"	s	namespace:cuttlefish
+IoTransferMsg	host/libs/audio_connector/shm_layout.h	/^struct IoTransferMsg {$/;"	s	namespace:cuttlefish
+Ioctl	common/libs/fs/shared_fd.cpp	/^int FileInstance::Ioctl(int request, void* val) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+IptableConfig	host/libs/allocd/alloc_utils.cpp	/^bool IptableConfig(const std::string& network, bool add) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+IsATTY	common/libs/fs/shared_fd.cpp	/^bool FileInstance::IsATTY() {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:bool
+IsAndroidMode	host/libs/confui/host_mode_ctrl.h	/^  auto IsAndroidMode() { return (atomic_mode_ == ModeType::kAndroidMode); }$/;"	f	class:cuttlefish::HostModeCtrl	typeref:typename:auto
+IsCallbackSet	host/libs/screen_connector/screen_connector.h	/^  bool IsCallbackSet() const override {$/;"	f	class:cuttlefish::ScreenConnector	typeref:typename:bool
+IsCancel	host/libs/confui/session.h	/^  bool IsCancel(const int x, const int y) {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+IsCapture	host/frontend/webrtc/audio_handler.cpp	/^bool IsCapture(uint32_t stream_id) {$/;"	f	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:bool
+IsConfUiActive	host/libs/confui/host_server.cc	/^bool HostServer::IsConfUiActive() {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:bool
+IsConfUiActive	host/libs/confui/session.cc	/^bool Session::IsConfUiActive() const {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+IsConfirm	host/libs/confui/session.h	/^  bool IsConfirm(const int x, const int y) {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+IsConfirmatioUiMode	host/libs/confui/host_mode_ctrl.h	/^  auto IsConfirmatioUiMode() {$/;"	f	class:cuttlefish::HostModeCtrl	typeref:typename:auto
+IsConnected	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::IsConnected() const { return fd_->IsOpen(); }$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+IsConnectionReady	host/frontend/webrtc/lib/camera_streamer.cpp	/^bool CameraStreamer::IsConnectionReady() {$/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:bool
+IsCredentials	common/libs/utils/unix_sockets.cpp	/^bool ControlMessage::IsCredentials() const {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:bool
+IsDirectoryEmpty	common/libs/utils/files.cpp	/^bool IsDirectoryEmpty(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+IsEmpty	common/libs/concurrency/multiplexer.h	/^  bool IsEmpty(const int idx) { return queues_[idx]->IsEmpty(); }$/;"	f	class:cuttlefish::Multiplexer	typeref:typename:bool
+IsEmpty	common/libs/concurrency/thread_safe_queue.h	/^  bool IsEmpty() {$/;"	f	class:cuttlefish::ThreadSafeQueue	typeref:typename:bool
+IsEmpty	host/libs/confui/host_renderer.h	/^  bool IsEmpty() const { return teeui_frame_.empty(); }$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:bool
+IsEmpty	host/libs/screen_connector/screen_connector_queue.h	/^  bool IsEmpty() const {$/;"	f	class:cuttlefish::ScreenConnectorQueue	typeref:typename:bool
+IsFDNEnabled	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::IsFDNEnabled() {$/;"	f	class:cuttlefish::SimService	typeref:typename:bool
+IsFileDescriptors	common/libs/utils/unix_sockets.cpp	/^bool ControlMessage::IsFileDescriptors() const {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:bool
+IsFinalResponseError	host/commands/modem_simulator/unittest/service_test.cpp	/^  inline bool IsFinalResponseError(std::string response) {$/;"	f	class:ModemServiceTest	typeref:typename:bool	file:
+IsFinalResponseSuccess	host/commands/modem_simulator/unittest/service_test.cpp	/^  inline bool IsFinalResponseSuccess(std::string response) {$/;"	f	class:ModemServiceTest	typeref:typename:bool	file:
+IsFixedDialNumber	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::IsFixedDialNumber(std::string_view number) {$/;"	f	class:cuttlefish::SimService	typeref:typename:bool
+IsFrameReady	host/libs/confui/host_renderer.h	/^  bool IsFrameReady() const { return raw_frame_ && !raw_frame_->IsEmpty(); }$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:bool
+IsFull	common/libs/concurrency/thread_safe_queue.h	/^  bool IsFull() {$/;"	f	class:cuttlefish::ThreadSafeQueue	typeref:typename:bool
+IsHardwareBacked	host/commands/secure_env/soft_gatekeeper.h	/^    virtual bool IsHardwareBacked() const { return false; }$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:bool
+IsHardwareBacked	host/commands/secure_env/tpm_gatekeeper.cpp	/^bool TpmGatekeeper::IsHardwareBacked() const {$/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:bool
+IsHasNetwork	host/commands/modem_simulator/network_service.cpp	/^bool NetworkService::IsHasNetwork() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:bool
+IsHostCompatible	common/libs/utils/environment.cpp	/^bool IsHostCompatible(Arch arch) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+IsInCancel	host/libs/confui/host_renderer.h	/^  bool IsInCancel(const std::uint32_t x, const std::uint32_t y) {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:bool
+IsInConfirm	host/libs/confui/host_renderer.h	/^  bool IsInConfirm(const std::uint32_t x, const std::uint32_t y) {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:bool
+IsInside	host/libs/confui/host_renderer.h	/^  bool IsInside(const std::uint32_t x, const std::uint32_t y) const {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:bool
+IsInteger	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^bool IsInteger(const std::string& str) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:bool
+IsIntermediateResponse	host/commands/modem_simulator/unittest/service_test.cpp	/^  inline bool IsIntermediateResponse(std::string response) {$/;"	f	class:ModemServiceTest	typeref:typename:bool	file:
+IsInverted	host/libs/confui/session.cc	/^bool Session::IsInverted() const {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+IsLikelySoftwareRenderer	host/libs/graphics_detector/graphics_detector.cpp	/^bool IsLikelySoftwareRenderer(const std::string& renderer) {$/;"	f	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:bool
+IsMagnified	host/libs/confui/session.cc	/^bool Session::IsMagnified() const {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+IsMalformedUtf8	host/libs/confui/cbor.h	/^  bool IsMalformedUtf8() const {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:bool
+IsMessageTooLong	host/libs/confui/cbor.h	/^  bool IsMessageTooLong() const { return buffer_status_ == Error::OUT_OF_DATA; }$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:bool
+IsNeededStatuReport	host/commands/modem_simulator/pdu_parser.cpp	/^bool PDUParser::IsNeededStatuReport() {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:bool
+IsOk	host/libs/confui/cbor.h	/^  bool IsOk() const { return buffer_status_ == Error::OK; }$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:bool
+IsOnlyDigits	common/libs/confui/utils.h	/^inline bool IsOnlyDigits(const std::string& src) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool
+IsOpen	common/libs/fs/shared_fd.h	/^  bool IsOpen() const { return fd_ != -1; }$/;"	f	class:cuttlefish::FileInstance	typeref:typename:bool
+IsOperational	common/libs/net/network_interface.h	/^  bool IsOperational() const {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:bool
+IsRadioOn	host/commands/modem_simulator/modem_simulator.cpp	/^bool ModemSimulator::IsRadioOn() const {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:bool
+IsReadyForUserInput	host/libs/confui/session.cc	/^bool Session::IsReadyForUserInput() const {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+IsRegular	common/libs/fs/shared_fd.h	/^  bool IsRegular() const { return is_regular_file_; }$/;"	f	class:cuttlefish::FileInstance	typeref:typename:bool
+IsRegularFile	common/libs/fs/shared_fd.cpp	/^bool IsRegularFile(const int fd) {$/;"	f	namespace:cuttlefish::__anond70c3a4f0111	typeref:typename:bool
+IsRunningInContainer	common/libs/utils/environment.cpp	/^bool IsRunningInContainer() {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+IsRunningInDocker	common/libs/utils/environment.cpp	/^static bool IsRunningInDocker() {$/;"	f	namespace:cuttlefish	typeref:typename:bool	file:
+IsSet	common/libs/fs/shared_fd.cpp	/^bool FileInstance::IsSet(fd_set* in) const {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:bool
+IsSet	common/libs/fs/shared_select.h	/^  bool IsSet(const SharedFD& in) const {$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:bool
+IsSetUpSuccessful	host/libs/confui/host_renderer.h	/^  bool IsSetUpSuccessful() const { return is_setup_well_; }$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:bool
+IsStdinValid	host/commands/run_cvd/main.cc	/^bool IsStdinValid() {$/;"	f	namespace:cuttlefish::__anonadab6e0c0111	typeref:typename:bool
+IsSuccess	common/libs/confui/protocol_types.h	/^  bool IsSuccess() const { return is_success_; }$/;"	f	class:cuttlefish::confui::ConfUiAckMessage	typeref:typename:bool
+IsSupported	host/libs/vm_manager/crosvm_manager.cpp	/^bool CrosvmManager::IsSupported() {$/;"	f	class:cuttlefish::vm_manager::CrosvmManager	typeref:typename:bool
+IsSupported	host/libs/vm_manager/qemu_manager.cpp	/^bool QemuManager::IsSupported() {$/;"	f	class:cuttlefish::vm_manager::QemuManager	typeref:typename:bool
+IsUsbConnected	recovery/recovery_ui.cpp	/^    bool IsUsbConnected() override {$/;"	f	class:CuttlefishRecoveryUI	typeref:typename:bool	file:
+IsUserAbort	host/libs/confui/host_server.cc	/^static bool IsUserAbort(ConfUiMessage& msg) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool	file:
+IsUserInput	host/libs/confui/session.h	/^  bool IsUserInput(const FsmInput fsm_input) {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+IsValidPDU	host/commands/modem_simulator/pdu_parser.cpp	/^bool PDUParser::IsValidPDU() {$/;"	f	class:cuttlefish::PDUParser	typeref:typename:bool
+IsWaitingSmsPdu	host/commands/modem_simulator/modem_simulator.cpp	/^bool ModemSimulator::IsWaitingSmsPdu() {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:bool
+IsWaitingSmsPdu	host/commands/modem_simulator/sms_service.h	/^  bool IsWaitingSmsPdu() { return is_waiting_sms_pdu_; }$/;"	f	class:cuttlefish::SmsService	typeref:typename:bool
+IsWaitingSmsToSim	host/commands/modem_simulator/sms_service.h	/^  bool IsWaitingSmsToSim() { return is_waiting_sms_to_sim_; }$/;"	f	class:cuttlefish::SmsService	typeref:typename:bool
+JACKS	host/frontend/webrtc/audio_handler.cpp	/^const virtio_snd_jack_info JACKS[] = {};$/;"	v	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:const virtio_snd_jack_info[]
+JackInfoCommand	host/libs/audio_connector/commands.cpp	/^JackInfoCommand::JackInfoCommand(uint32_t start_id, size_t count,$/;"	f	class:cuttlefish::JackInfoCommand
+JackInfoCommand	host/libs/audio_connector/commands.h	/^class JackInfoCommand : public InfoCommand<virtio_snd_jack_info> {$/;"	c	namespace:cuttlefish
+JacksInfo	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::JacksInfo(JackInfoCommand& cmd) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+JobBase	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobBase.java	/^    JobBase(String tag) {$/;"	m	class:JobBase
+JobBase	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobBase.java	/^public abstract class JobBase {$/;"	c
+JobExecutor	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^    public JobExecutor() {$/;"	m	class:JobExecutor
+JobExecutor	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^public class JobExecutor {$/;"	c
+JoinArrays	host/frontend/webrtc_operator/assets/js/adb.js	/^function JoinArrays(arr1, arr2) {$/;"	f
+Json	host/libs/config/cuttlefish_config.h	/^namespace Json {$/;"	n
+Json	host/libs/config/fetcher_config.h	/^namespace Json {$/;"	n
+JsonHandleCreateInterfaceRequest	host/libs/allocd/resource_manager.cpp	/^Json::Value ResourceManager::JsonHandleCreateInterfaceRequest($/;"	f	class:cuttlefish::ResourceManager	typeref:typename:Json::Value
+JsonHandleDestroyInterfaceRequest	host/libs/allocd/resource_manager.cpp	/^Json::Value ResourceManager::JsonHandleDestroyInterfaceRequest($/;"	f	class:cuttlefish::ResourceManager	typeref:typename:Json::Value
+JsonHandleIdRequest	host/libs/allocd/resource_manager.cpp	/^Json::Value ResourceManager::JsonHandleIdRequest() {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:Json::Value
+JsonHandleShutdownRequest	host/libs/allocd/resource_manager.cpp	/^Json::Value ResourceManager::JsonHandleShutdownRequest(SharedFD client_socket) {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:Json::Value
+JsonHandleStopSessionRequest	host/libs/allocd/resource_manager.cpp	/^Json::Value ResourceManager::JsonHandleStopSessionRequest($/;"	f	class:cuttlefish::ResourceManager	typeref:typename:Json::Value
+JsonRequestReader	host/libs/allocd/request.h	/^class JsonRequestReader {$/;"	c	namespace:cuttlefish
+JsonSerializable	host/commands/secure_env/json_serializable.cpp	/^JsonSerializable::JsonSerializable(Json::Value& json) : json_(json) {}$/;"	f	class:cuttlefish::JsonSerializable
+JsonSerializable	host/commands/secure_env/json_serializable.cpp	/^class JsonSerializable : public keymaster::Serializable {$/;"	c	namespace:cuttlefish	file:
+JsonServer	host/libs/allocd/resource_manager.cpp	/^void ResourceManager::JsonServer() {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:void
+JsonToCvdFile	host/libs/config/fetcher_config.cpp	/^CvdFile JsonToCvdFile(const std::string& file_path, const Json::Value& json) {$/;"	f	namespace:cuttlefish::__anonf7286d770211	typeref:typename:CvdFile
+KEEPALIVE_ACTIVE	guest/hals/ril/reference-libril/ril.h	/^    KEEPALIVE_ACTIVE,                       \/* Keepalive session is active *\/$/;"	e	enum:__anon0bfbaecfc603
+KEEPALIVE_INACTIVE	guest/hals/ril/reference-libril/ril.h	/^    KEEPALIVE_INACTIVE,                     \/* Keepalive session is inactive *\/$/;"	e	enum:__anon0bfbaecfc603
+KEEPALIVE_PENDING	guest/hals/ril/reference-libril/ril.h	/^    KEEPALIVE_PENDING                       \/* Keepalive session status not available *\/$/;"	e	enum:__anon0bfbaecfc603
+KERNEL_BUILD	host/libs/config/fetcher_config.h	/^  KERNEL_BUILD,$/;"	e	enum:cuttlefish::FileSource
+KHRONOS_APIATTRIBUTES	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#define KHRONOS_APIATTRIBUTES /;"	d
+KHRONOS_APIATTRIBUTES	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#define KHRONOS_APIATTRIBUTES$/;"	d
+KHRONOS_APICALL	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#   define KHRONOS_APICALL /;"	d
+KHRONOS_APICALL	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#   define KHRONOS_APICALL$/;"	d
+KHRONOS_APIENTRY	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#   define KHRONOS_APIENTRY /;"	d
+KHRONOS_APIENTRY	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#   define KHRONOS_APIENTRY$/;"	d
+KHRONOS_BOOLEAN_ENUM_FORCE_SIZE	host/libs/graphics_detector/include/KHR/khrplatform.h	/^    KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM$/;"	e	enum:__anon5c4f198b0103
+KHRONOS_FALSE	host/libs/graphics_detector/include/KHR/khrplatform.h	/^    KHRONOS_FALSE = 0,$/;"	e	enum:__anon5c4f198b0103
+KHRONOS_MAX_ENUM	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#define KHRONOS_MAX_ENUM /;"	d
+KHRONOS_STATIC	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#   define KHRONOS_STATIC /;"	d
+KHRONOS_SUPPORT_FLOAT	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#define KHRONOS_SUPPORT_FLOAT /;"	d
+KHRONOS_SUPPORT_INT64	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#define KHRONOS_SUPPORT_INT64 /;"	d
+KHRONOS_TRUE	host/libs/graphics_detector/include/KHR/khrplatform.h	/^    KHRONOS_TRUE  = 1,$/;"	e	enum:__anon5c4f198b0103
+KLOG_FORMAT	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final String KLOG_FORMAT = "<%d>%s: %s\\n";$/;"	f	class:EventReporter	file:
+KLOG_NOTICE	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final int KLOG_NOTICE = 5;$/;"	f	class:EventReporter	file:
+KLOG_OUTPUT	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final String KLOG_OUTPUT = "\/dev\/kmsg";$/;"	f	class:EventReporter	file:
+KernelCommandLineFromConfig	host/libs/config/kernel_args.cpp	/^std::vector<std::string> KernelCommandLineFromConfig($/;"	f	namespace:cuttlefish	typeref:typename:std::vector<std::string>
+KernelConfig	host/commands/assemble_cvd/flags.h	/^struct KernelConfig {$/;"	s	namespace:cuttlefish
+KernelLoaded	host/commands/kernel_log_monitor/kernel_log_server.h	/^  KernelLoaded = 8,  \/\/ BootStarted actually comes quite late in the boot.$/;"	e	enum:monitor::Event
+KernelLogEventsHandler	host/frontend/webrtc/kernel_log_events_handler.cpp	/^KernelLogEventsHandler::KernelLogEventsHandler($/;"	f	class:cuttlefish::KernelLogEventsHandler
+KernelLogEventsHandler	host/frontend/webrtc/kernel_log_events_handler.h	/^struct KernelLogEventsHandler {$/;"	s	namespace:cuttlefish
+KernelLogMonitor	host/commands/run_cvd/launch.cc	/^class KernelLogMonitor : public CommandSource,$/;"	c	namespace:cuttlefish	file:
+KernelLogMonitorBinary	host/libs/config/known_paths.cpp	/^std::string KernelLogMonitorBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+KernelLogPipe	host/commands/run_cvd/launch.cc	/^  SharedFD KernelLogPipe() override {$/;"	f	class:cuttlefish::KernelLogMonitor	typeref:typename:SharedFD	file:
+KernelLogPipeProvider	host/libs/config/kernel_log_pipe_provider.h	/^class KernelLogPipeProvider : public virtual Feature {$/;"	c	namespace:cuttlefish
+KernelLogServer	host/commands/kernel_log_monitor/kernel_log_server.cc	/^KernelLogServer::KernelLogServer(cuttlefish::SharedFD pipe_fd,$/;"	f	class:monitor::KernelLogServer
+KernelLogServer	host/commands/kernel_log_monitor/kernel_log_server.h	/^class KernelLogServer {$/;"	c	namespace:monitor
+KernelPathTag	host/libs/config/data_image.cpp	/^struct KernelPathTag {};$/;"	s	namespace:cuttlefish	file:
+KeymasterChannel	common/libs/security/keymaster_channel.cpp	/^KeymasterChannel::KeymasterChannel(SharedFD input, SharedFD output)$/;"	f	class:cuttlefish::KeymasterChannel
+KeymasterChannel	common/libs/security/keymaster_channel.h	/^class KeymasterChannel {$/;"	c	namespace:cuttlefish
+KeymasterCommandDestroyer	common/libs/security/keymaster_channel.h	/^class KeymasterCommandDestroyer {$/;"	c	namespace:cuttlefish
+KeymasterResponder	host/commands/secure_env/keymaster_responder.cpp	/^KeymasterResponder::KeymasterResponder($/;"	f	class:cuttlefish::KeymasterResponder
+KeymasterResponder	host/commands/secure_env/keymaster_responder.h	/^class KeymasterResponder {$/;"	c	namespace:cuttlefish
+Keymint	host/libs/config/cuttlefish_config.h	/^  Keymint,$/;"	e	enum:cuttlefish::SecureHal
+KillSubprocess	common/libs/utils/subprocess.cpp	/^StopperResult KillSubprocess(Subprocess* subprocess) {$/;"	f	namespace:cuttlefish	typeref:typename:StopperResult
+KmParamSet	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^    KmParamSet(KmParamSet&& other) noexcept$/;"	f	class:keymaster::V4_1::__anon49de69e60111::KmParamSet	file:
+KmParamSet	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^    KmParamSet(const hidl_vec<KeyParameter>& keyParams) {$/;"	f	class:keymaster::V4_1::__anon49de69e60111::KmParamSet	file:
+KmParamSet	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^class KmParamSet : public keymaster_key_param_set_t {$/;"	c	namespace:keymaster::V4_1::__anon49de69e60111	file:
+LANGUAGE_NOTIFICATION	host/commands/modem_simulator/stk_service.h	/^    LANGUAGE_NOTIFICATION = 0x35,$/;"	e	enum:cuttlefish::StkService::CommandType
+LAST_IMPRECISE_RIL_VERSION	guest/hals/ril/reference-libril/ril.h	/^#define LAST_IMPRECISE_RIL_VERSION /;"	d
+LAUNCH_BROWSER	host/commands/modem_simulator/stk_service.h	/^    LAUNCH_BROWSER      = 0x15,$/;"	e	enum:cuttlefish::StkService::CommandType
+LIB_ARGS_PROPERTY	guest/hals/rild/rild_cuttlefish.c	/^#define LIB_ARGS_PROPERTY /;"	d	file:
+LOCAL_AUDIOCONTROL_HAL_PRODUCT_PACKAGE	shared/auto/device.mk	/^    LOCAL_AUDIOCONTROL_HAL_PRODUCT_PACKAGE := android.hardware.automotive.audiocontrol-service.e/;"	m
+LOCAL_AUDIO_DEVICE_PACKAGE_OVERLAYS	shared/device.mk	/^LOCAL_AUDIO_DEVICE_PACKAGE_OVERLAYS ?=$/;"	m
+LOCAL_AUDIO_PRODUCT_COPY_FILES	shared/auto/device.mk	/^LOCAL_AUDIO_PRODUCT_COPY_FILES ?= \\$/;"	m
+LOCAL_AUDIO_PRODUCT_COPY_FILES	shared/device.mk	/^LOCAL_AUDIO_PRODUCT_COPY_FILES ?= \\$/;"	m
+LOCAL_AUDIO_PRODUCT_PACKAGE	shared/device.mk	/^LOCAL_AUDIO_PRODUCT_PACKAGE ?= \\$/;"	m
+LOCAL_BLUETOOTH_PRODUCT_PACKAGE	shared/device.mk	/^    LOCAL_BLUETOOTH_PRODUCT_PACKAGE := [email protected]$/;"	m
+LOCAL_BLUETOOTH_PRODUCT_PACKAGE	shared/device.mk	/^    LOCAL_BLUETOOTH_PRODUCT_PACKAGE := [email protected]$/;"	m
+LOCAL_BLUETOOTH_PRODUCT_PACKAGE	shared/device.mk	/^    LOCAL_BLUETOOTH_PRODUCT_PACKAGE := [email protected]$/;"	m
+LOCAL_BT_PROPERTIES	shared/device.mk	/^LOCAL_BT_PROPERTIES ?= \\$/;"	m
+LOCAL_CFLAGS	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_CFLAGS := $(L_CFLAGS) \\$/;"	m
+LOCAL_CONFIRMATIONUI_PRODUCT_PACKAGE	shared/device.mk	/^    LOCAL_CONFIRMATIONUI_PRODUCT_PACKAGE := [email protected]/;"	m
+LOCAL_C_INCLUDES	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_C_INCLUDES := \\$/;"	m
+LOCAL_DISABLE_OMX	vsoc_arm64_only/phone/aosp_cf.mk	/^LOCAL_DISABLE_OMX := true$/;"	m
+LOCAL_DISABLE_OMX	vsoc_x86_64_only/phone/aosp_cf.mk	/^LOCAL_DISABLE_OMX := true$/;"	m
+LOCAL_DUMPSTATE_PRODUCT_PACKAGE	shared/device.mk	/^    LOCAL_DUMPSTATE_PRODUCT_PACKAGE := [email protected]$/;"	m
+LOCAL_FILE	host/libs/config/fetcher_config.h	/^  LOCAL_FILE,$/;"	e	enum:cuttlefish::FileSource
+LOCAL_GATEKEEPER_PRODUCT_PACKAGE	shared/device.mk	/^       LOCAL_GATEKEEPER_PRODUCT_PACKAGE := [email protected]$/;"	m
+LOCAL_HEALTH_PRODUCT_PACKAGE	shared/device.mk	/^    LOCAL_HEALTH_PRODUCT_PACKAGE := \\$/;"	m
+LOCAL_KEYMINT_PRODUCT_PACKAGE	shared/device.mk	/^       LOCAL_KEYMINT_PRODUCT_PACKAGE := android.hardware.security.keymint-service.remote$/;"	m
+LOCAL_LICENSE_CONDITIONS	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_LICENSE_CONDITIONS := notice$/;"	m
+LOCAL_LICENSE_KINDS	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0$/;"	m
+LOCAL_MODULE	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_MODULE := lib_driver_cmd_simulated_cf$/;"	m
+LOCAL_PATH	Android.mk	/^LOCAL_PATH:= $(call my-dir)$/;"	m
+LOCAL_PATH	guest/Android.mk	/^LOCAL_PATH:= $(call my-dir)$/;"	m
+LOCAL_PATH	guest/libs/Android.mk	/^LOCAL_PATH:= $(call my-dir)$/;"	m
+LOCAL_PATH	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_PATH := $(call my-dir)$/;"	m
+LOCAL_PREFER_VENDOR_APEX	vsoc_x86_64/phone/aosp_cf.mk	/^LOCAL_PREFER_VENDOR_APEX := true$/;"	m
+LOCAL_SENSOR_PRODUCT_PACKAGE	shared/device.mk	/^       LOCAL_SENSOR_PRODUCT_PACKAGE := [email protected]$/;"	m
+LOCAL_SENSOR_PRODUCT_PACKAGE	shared/device.mk	/^       LOCAL_SENSOR_PRODUCT_PACKAGE := com.android.hardware.sensors$/;"	m
+LOCAL_SHARED_LIBRARIES	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_SHARED_LIBRARIES := libc libcutils$/;"	m
+LOCAL_SRC_FILES	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_SRC_FILES := $(WPA_SRC_FILE)$/;"	m
+LOCAL_VENDOR_MODULE	guest/libs/wpa_supplicant_8_lib/Android.mk	/^LOCAL_VENDOR_MODULE := true$/;"	m
+LOCAL_VHAL_PRODUCT_PACKAGE	shared/auto/device.mk	/^    LOCAL_VHAL_PRODUCT_PACKAGE := [email protected]$/;"	m
+LOCAL_WPA_SUPPLICANT_OVERLAY	shared/device.mk	/^LOCAL_WPA_SUPPLICANT_OVERLAY ?= $(LOCAL_PATH)\/config\/wpa_supplicant_overlay.conf$/;"	m
+LOCK	host/commands/modem_simulator/sim_service.h	/^      LOCK = 1,$/;"	e	enum:cuttlefish::SimService::FacilityLock::Mode
+LOG_NDEBUG	guest/hals/ril/reference-ril/atchannel.c	/^#define LOG_NDEBUG /;"	d	file:
+LOG_TAG	guest/hals/bt/remote/remote_bluetooth.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/bt/remote/service.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/camera/cached_stream_buffer.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/camera/external-service.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/camera/vsock_camera_device_3_4.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/camera/vsock_camera_server.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/camera/vsock_frame_provider.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/gatekeeper/remote/service.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/health/health.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/keymint/remote/remote_keymint_device.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/keymint/remote/remote_secure_clock.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/keymint/remote/remote_shared_secret.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/keymint/remote/service.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/ril/reference-libril/ril.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/ril/reference-libril/ril_config.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/ril/reference-libril/ril_event.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/ril/reference-libril/ril_service.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/ril/reference-libril/sap_service.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/ril/reference-ril/atchannel.c	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/ril/reference-ril/reference-ril.c	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/hals/rild/rild_cuttlefish.c	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java	/^    private static final String LOG_TAG = "GceBluetoothChecker";$/;"	f	class:BluetoothChecker	file:
+LOG_TAG	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    private static final String LOG_TAG = "GceConnChecker";$/;"	f	class:ConnectivityChecker	file:
+LOG_TAG	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final String LOG_TAG = "GceEventReporter";$/;"	f	class:EventReporter	file:
+LOG_TAG	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceBroadcastReceiver.java	/^    private static final String LOG_TAG = "GceBroadcastReceiver";$/;"	f	class:GceBroadcastReceiver	file:
+LOG_TAG	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    private static final String LOG_TAG = "GceFuture";$/;"	f	class:GceFuture	file:
+LOG_TAG	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private static final String LOG_TAG = "GceService";$/;"	f	class:GceService	file:
+LOG_TAG	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private static final String LOG_TAG = "GceWifiManager";$/;"	f	class:GceWifiManager	file:
+LOG_TAG	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^    private static final String LOG_TAG = "GceExecutor";$/;"	f	class:JobExecutor	file:
+LOG_TAG	host/frontend/webrtc/connection_observer.cpp	/^#define LOG_TAG /;"	d	file:
+LOG_TAG	host/frontend/webrtc/lib/client_handler.cpp	/^#define LOG_TAG /;"	d	file:
+LSeek	common/libs/fs/shared_fd.cpp	/^off_t FileInstance::LSeek(off_t offset, int whence) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:off_t
+LTE	guest/hals/ril/reference-ril/reference-ril.c	/^#define LTE /;"	d	file:
+LTE_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_LTE_SignalStrength  LTE_SignalStrength;$/;"	m	struct:__anon0bfbaecf5008	typeref:typename:RIL_LTE_SignalStrength
+LTE_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_LTE_SignalStrength_v8   LTE_SignalStrength;$/;"	m	struct:__anon0bfbaecf5108	typeref:typename:RIL_LTE_SignalStrength_v8
+LTE_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_LTE_SignalStrength_v8   LTE_SignalStrength;$/;"	m	struct:__anon0bfbaecf5208	typeref:typename:RIL_LTE_SignalStrength_v8
+LTE_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_LTE_SignalStrength_v8   LTE_SignalStrength;$/;"	m	struct:__anon0bfbaecf5308	typeref:typename:RIL_LTE_SignalStrength_v8
+LabelConfMsg	host/libs/confui/host_renderer.h	/^  using LabelConfMsg = teeui::LabelBody;$/;"	t	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::LabelBody
+LastModifiedTime	host/commands/fetcher/build_api.h	/^  unsigned long LastModifiedTime() const { return last_modified_time; }$/;"	f	class:cuttlefish::Artifact	typeref:typename:unsigned long
+LastUpdatedInputDisk	host/commands/assemble_cvd/disk_flags.cc	/^static std::chrono::system_clock::time_point LastUpdatedInputDisk($/;"	f	namespace:cuttlefish	typeref:typename:std::chrono::system_clock::time_point	file:
+LatestBuildId	host/commands/fetcher/build_api.cc	/^std::string BuildApi::LatestBuildId(const std::string& branch,$/;"	f	class:cuttlefish::BuildApi	typeref:typename:std::string
+Launch Viewer (WebRTC)	README.md	/^## Launch Viewer (WebRTC)$/;"	s	chapter:Cuttlefish Getting Started
+LaunchAdbComponent	host/libs/config/adb/launch.cpp	/^LaunchAdbComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<KernelLogPipeProvider,const AdbConfig,const CuttlefishConfig::InstanceSpecific>>
+LaunchConnectionMaintainerThread	host/frontend/adb_connector/main.cpp	/^void LaunchConnectionMaintainerThread(const std::string& address) {$/;"	f	namespace:__anona4a84cd70111	typeref:typename:void
+LaunchCustomActionServers	host/commands/run_cvd/launch_streamer.cpp	/^std::vector<Command> LaunchCustomActionServers($/;"	f	namespace:cuttlefish::__anon6b0274e10111	typeref:typename:std::vector<Command>
+LauncherAction	host/commands/run_cvd/runner_defs.h	/^enum class LauncherAction : char {$/;"	g	namespace:cuttlefish	typeref:typename:char
+LauncherResponse	host/commands/run_cvd/runner_defs.h	/^enum class LauncherResponse : char {$/;"	g	namespace:cuttlefish	typeref:typename:char
+LibraryCloser	host/libs/graphics_detector/graphics_detector.cpp	/^struct LibraryCloser {$/;"	s	namespace:cuttlefish::__anon29a199ff0111	file:
+LinkAtCwd	common/libs/fs/shared_fd.cpp	/^int FileInstance::LinkAtCwd(const std::string& path) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+LinkTapToBridge	host/libs/allocd/alloc_utils.cpp	/^bool LinkTapToBridge(const std::string& tap_name,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+LinuxVersionAtLeast	host/libs/vm_manager/host_configuration.cpp	/^bool LinuxVersionAtLeast(std::vector<std::string>* config_commands,$/;"	f	namespace:cuttlefish::vm_manager::__anon1edaaabd0111	typeref:typename:bool
+ListDeviceIds	host/frontend/webrtc_operator/device_registry.cpp	/^std::vector<std::string> DeviceRegistry::ListDeviceIds() const {$/;"	f	class:cuttlefish::DeviceRegistry	typeref:typename:std::vector<std::string>
+Listen	common/libs/fs/shared_fd.cpp	/^int FileInstance::Listen(int backlog) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+ListenerState	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    using ListenerState = GuestSession::ListenerState;$/;"	t	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:GuestSession::ListenerState
+ListenerState	guest/hals/confirmationui/guest_session.h	/^    enum class ListenerState : uint32_t {$/;"	g	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:uint32_t
+LoadFragment	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::LoadFragment(ConfigFragment& fragment) const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+LoadFromFile	host/commands/modem_simulator/nvram_config.cpp	/^bool NvramConfig::LoadFromFile(const char* file) {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:bool
+LoadFromFile	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::LoadFromFile(const char* file) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+LoadFromFile	host/libs/config/fetcher_config.cpp	/^bool FetcherConfig::LoadFromFile(const std::string& file) {$/;"	f	class:cuttlefish::FetcherConfig	typeref:typename:bool
+LoadKey	host/commands/secure_env/encrypted_serializable.cpp	/^static TpmObjectSlot LoadKey($/;"	f	namespace:cuttlefish	typeref:typename:TpmObjectSlot	file:
+LoadNvramConfig	host/commands/modem_simulator/modem_simulator.cpp	/^void ModemSimulator::LoadNvramConfig() {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:void
+LocalRecorder	host/frontend/webrtc/lib/local_recorder.cpp	/^LocalRecorder::LocalRecorder(std::unique_ptr<LocalRecorder::Impl> impl)$/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder
+LocalRecorder	host/frontend/webrtc/lib/local_recorder.h	/^class LocalRecorder {$/;"	c	namespace:cuttlefish::webrtc_streaming
+LockStatus	host/commands/modem_simulator/sim_service.h	/^    enum LockStatus {$/;"	g	struct:cuttlefish::SimService::FacilityLock
+LockType	host/commands/modem_simulator/sim_service.h	/^    enum LockType {$/;"	g	struct:cuttlefish::SimService::FacilityLock
+Log	common/libs/fs/shared_fd.cpp	/^void FileInstance::Log(const char* message) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:void
+Log	common/libs/fs/shared_fd.cpp	/^void FileInstance::Log(const char*) {}$/;"	f	class:cuttlefish::FileInstance	typeref:typename:void
+LogAndReplyError	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::LogAndReplyError(const std::string &error_msg) const {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+LogAndReplyError	host/frontend/webrtc_operator/signal_handler.cpp	/^void SignalHandler::LogAndReplyError(const std::string& error_message) {$/;"	f	class:cuttlefish::SignalHandler	typeref:typename:void
+LogAndSetEnv	host/libs/vm_manager/qemu_manager.cpp	/^void LogAndSetEnv(const char* key, const std::string& value) {$/;"	f	namespace:cuttlefish::vm_manager::__anonb2b4da3a0111	typeref:typename:void
+LogEvent	host/commands/metrics/proto/clientanalytics.proto	/^message LogEvent {$/;"	m
+LogFileSeverity	common/libs/utils/tee_logging.cpp	/^LogSeverity LogFileSeverity() {$/;"	f	namespace:cuttlefish	typeref:typename:LogSeverity
+LogRequest	host/commands/metrics/proto/clientanalytics.proto	/^message LogRequest {$/;"	m
+LogResponse	host/commands/metrics/proto/clientanalytics.proto	/^message LogResponse {$/;"	m
+LogSubprocessExit	host/commands/run_cvd/process_monitor.cc	/^static void LogSubprocessExit(const std::string& name, pid_t pid, int wstatus) {$/;"	f	namespace:cuttlefish	typeref:typename:void	file:
+LogToFiles	common/libs/utils/tee_logging.cpp	/^TeeLogger LogToFiles(const std::vector<std::string>& files) {$/;"	f	namespace:cuttlefish	typeref:typename:TeeLogger
+LogToStderrAndFiles	common/libs/utils/tee_logging.cpp	/^TeeLogger LogToStderrAndFiles(const std::vector<std::string>& files) {$/;"	f	namespace:cuttlefish	typeref:typename:TeeLogger
+LogcatReceiver	host/commands/run_cvd/launch.cc	/^class LogcatReceiver : public CommandSource, public DiagnosticInformation {$/;"	c	namespace:cuttlefish	file:
+LogcatReceiverBinary	host/libs/config/known_paths.cpp	/^std::string LogcatReceiverBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+LogicalChannel	host/commands/modem_simulator/sim_service.h	/^    LogicalChannel(int session_id) :$/;"	f	struct:cuttlefish::SimService::LogicalChannel
+LogicalChannel	host/commands/modem_simulator/sim_service.h	/^  struct LogicalChannel {$/;"	s	class:cuttlefish::SimService
+LookupInfo	tools/tombstone_to_line.py	/^LookupInfo = collections.namedtuple('LookupInfo',$/;"	v
+Loop	host/frontend/webrtc/audio_handler.cpp	/^[[noreturn]] void AudioHandler::Loop() {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+Loop	host/frontend/webrtc/display_handler.cpp	/^[[noreturn]] void DisplayHandler::Loop() {$/;"	f	class:cuttlefish::DisplayHandler	typeref:typename:void
+LwsCallback	host/frontend/webrtc/lib/ws_connection.cpp	/^int LwsCallback(struct lws* wsi, enum lws_callback_reasons reason, void* user,$/;"	f	typeref:typename:int
+MALFORMED	host/libs/confui/cbor.h	/^    MALFORMED = 2,$/;"	e	enum:cuttlefish::confui::Cbor::Error
+MALFORMED_UTF8	host/libs/confui/cbor.h	/^    MALFORMED_UTF8 = 3,$/;"	e	enum:cuttlefish::confui::Cbor::Error
+MAP	host/libs/confui/cbor.h	/^    MAP = 5,$/;"	e	enum:cuttlefish::confui::Cbor::Type
+MATCH_TPM_COMMAND	host/commands/secure_env/tpm_commands.cpp	/^    #define MATCH_TPM_COMMAND(/;"	d	file:
+MAX	host/libs/confui/cbor.h	/^  enum class MessageSize : uint32_t { MAX = 6144u };$/;"	e	enum:cuttlefish::confui::Cbor::MessageSize
+MAX_AT_RESPONSE	guest/hals/ril/reference-ril/atchannel.c	/^#define MAX_AT_RESPONSE /;"	d	file:
+MAX_AT_RESPONSE	guest/hals/ril/reference-ril/reference-ril.c	/^#define MAX_AT_RESPONSE /;"	d	file:
+MAX_BANDS	guest/hals/ril/reference-libril/ril.h	/^#define MAX_BANDS /;"	d
+MAX_BROADCAST_SMS_CONFIG_INFO	guest/hals/ril/reference-libril/ril.h	/^#define MAX_BROADCAST_SMS_CONFIG_INFO /;"	d
+MAX_CHANNELS	guest/hals/ril/reference-libril/ril.h	/^#define MAX_CHANNELS /;"	d
+MAX_CLIENT_ID_LENGTH	guest/hals/ril/reference-libril/ril.h	/^#define MAX_CLIENT_ID_LENGTH /;"	d
+MAX_COMMAND_BYTES	guest/hals/ril/reference-libril/ril.cpp	/^#define MAX_COMMAND_BYTES /;"	d	file:
+MAX_DEBUG_SOCKET_NAME_LENGTH	guest/hals/ril/reference-libril/ril.h	/^#define MAX_DEBUG_SOCKET_NAME_LENGTH /;"	d
+MAX_FD_EVENTS	guest/hals/ril/reference-libril/ril_event.h	/^#define MAX_FD_EVENTS /;"	d
+MAX_HANDLE_ATTEMPTS	host/commands/secure_env/fragile_tpm_storage.cpp	/^static constexpr size_t MAX_HANDLE_ATTEMPTS = 1;$/;"	v	namespace:cuttlefish	typeref:typename:size_t	file:
+MAX_INADDR_LEN	guest/hals/ril/reference-libril/ril.h	/^#define MAX_INADDR_LEN /;"	d
+MAX_LIB_ARGS	guest/hals/rild/rild_cuttlefish.c	/^#define MAX_LIB_ARGS /;"	d	file:
+MAX_LOGICAL_MODEM_NUM	guest/hals/ril/reference-libril/ril.h	/^#define MAX_LOGICAL_MODEM_NUM /;"	d
+MAX_PDP	guest/hals/ril/reference-ril/reference-ril.c	/^#define MAX_PDP /;"	d	file:
+MAX_POLL_DISABLED_WIFI_COUNT	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    private static final int MAX_POLL_DISABLED_WIFI_COUNT = 10;$/;"	f	class:RilE2eTests	file:
+MAX_QEMU_PIPE_NAME_LENGTH	guest/hals/ril/reference-libril/ril.h	/^#define MAX_QEMU_PIPE_NAME_LENGTH /;"	d
+MAX_RADIO_ACCESS_NETWORKS	guest/hals/ril/reference-libril/ril.h	/^#define MAX_RADIO_ACCESS_NETWORKS /;"	d
+MAX_RILDS	guest/hals/ril/reference-libril/ril.h	/^#define MAX_RILDS /;"	d
+MAX_SERVICE_NAME_LENGTH	guest/hals/ril/reference-libril/ril.h	/^#define MAX_SERVICE_NAME_LENGTH /;"	d
+MAX_STIR_RANDOM_BUFFER_SIZE	host/commands/secure_env/tpm_random_source.cpp	/^static int MAX_STIR_RANDOM_BUFFER_SIZE = 128;$/;"	v	namespace:cuttlefish	typeref:typename:int	file:
+MAX_STRING_LENGTH	guest/hals/ril/reference-libril/ril_service.cpp	/^#define MAX_STRING_LENGTH /;"	d	file:
+MAX_UINT_32_CHARS	host/commands/secure_env/soft_gatekeeper.h	/^    static const int MAX_UINT_32_CHARS = 11;$/;"	m	class:gatekeeper::SoftGateKeeper	typeref:typename:const int
+MAX_UUID_LENGTH	guest/hals/ril/reference-libril/ril.h	/^#define MAX_UUID_LENGTH /;"	d
+MDM_CDMA	guest/hals/ril/reference-ril/reference-ril.c	/^#define MDM_CDMA /;"	d	file:
+MDM_EVDO	guest/hals/ril/reference-ril/reference-ril.c	/^#define MDM_EVDO /;"	d	file:
+MDM_GSM	guest/hals/ril/reference-ril/reference-ril.c	/^#define MDM_GSM /;"	d	file:
+MDM_LTE	guest/hals/ril/reference-ril/reference-ril.c	/^#define MDM_LTE /;"	d	file:
+MDM_NR	guest/hals/ril/reference-ril/reference-ril.c	/^#define MDM_NR /;"	d	file:
+MDM_TDSCDMA	guest/hals/ril/reference-ril/reference-ril.c	/^#define MDM_TDSCDMA /;"	d	file:
+MDM_WCDMA	guest/hals/ril/reference-ril/reference-ril.c	/^#define MDM_WCDMA /;"	d	file:
+MEMSET_FREED	guest/hals/ril/reference-libril/ril.cpp	/^#define MEMSET_FREED /;"	d	file:
+MESSAGE_SIZE	host/example_custom_actions/main.cpp	/^#define MESSAGE_SIZE /;"	d	file:
+MF_SIM	host/commands/modem_simulator/sim_service.cpp	/^static const std::string MF_SIM       = "3F00";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+MIN	guest/hals/ril/reference-libril/ril_internal.h	/^#define MIN(/;"	d
+MMap	common/libs/fs/shared_fd.cpp	/^ScopedMMap FileInstance::MMap(void* addr, size_t length, int prot, int flags,$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ScopedMMap
+MOBILE_NETWORK_CONNECTED_MESSAGE	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    private static final String MOBILE_NETWORK_CONNECTED_MESSAGE =$/;"	f	class:ConnectivityChecker	file:
+MULTILINE	guest/hals/ril/reference-ril/atchannel.h	/^    MULTILINE    \/* multiple line intermediate response$/;"	e	enum:__anon512a2c1f0103
+MUTEX_ACQUIRE	guest/hals/ril/reference-libril/ril_event.cpp	/^#define MUTEX_ACQUIRE(/;"	d	file:
+MUTEX_DESTROY	guest/hals/ril/reference-libril/ril_event.cpp	/^#define MUTEX_DESTROY(/;"	d	file:
+MUTEX_INIT	guest/hals/ril/reference-libril/ril_event.cpp	/^#define MUTEX_INIT(/;"	d	file:
+MUTEX_RELEASE	guest/hals/ril/reference-libril/ril_event.cpp	/^#define MUTEX_RELEASE(/;"	d	file:
+M_MODEM_TECH_CDMA	host/commands/modem_simulator/network_service.h	/^    M_MODEM_TECH_CDMA   = 1 << 2,$/;"	e	enum:cuttlefish::NetworkService::ModemTechnology
+M_MODEM_TECH_EVDO	host/commands/modem_simulator/network_service.h	/^    M_MODEM_TECH_EVDO   = 1 << 3,$/;"	e	enum:cuttlefish::NetworkService::ModemTechnology
+M_MODEM_TECH_GSM	host/commands/modem_simulator/network_service.h	/^    M_MODEM_TECH_GSM    = 1 << 0,$/;"	e	enum:cuttlefish::NetworkService::ModemTechnology
+M_MODEM_TECH_LTE	host/commands/modem_simulator/network_service.h	/^    M_MODEM_TECH_LTE    = 1 << 5,$/;"	e	enum:cuttlefish::NetworkService::ModemTechnology
+M_MODEM_TECH_NR	host/commands/modem_simulator/network_service.h	/^    M_MODEM_TECH_NR     = 1 << 6,$/;"	e	enum:cuttlefish::NetworkService::ModemTechnology
+M_MODEM_TECH_TDSCDMA	host/commands/modem_simulator/network_service.h	/^    M_MODEM_TECH_TDSCDMA= 1 << 4,$/;"	e	enum:cuttlefish::NetworkService::ModemTechnology
+M_MODEM_TECH_WCDMA	host/commands/modem_simulator/network_service.h	/^    M_MODEM_TECH_WCDMA  = 1 << 1,$/;"	e	enum:cuttlefish::NetworkService::ModemTechnology
+MainLoop	host/libs/confui/host_server.cc	/^[[noreturn]] void HostServer::MainLoop() {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:void
+MainLoopState	host/libs/confui/server_common.h	/^enum class MainLoopState : std::uint32_t {$/;"	g	namespace:cuttlefish::confui	typeref:typename:std::uint32_t
+MakeAddress	common/libs/fs/shared_fd.cpp	/^static void MakeAddress(const char* name, bool abstract,$/;"	f	namespace:cuttlefish	typeref:typename:void	file:
+MakeCompositeDiskSpec	host/libs/image_aggregator/image_aggregator.cc	/^  CompositeDisk MakeCompositeDiskSpec(const std::string& header_file,$/;"	f	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:CompositeDisk	file:
+MakeConnectMessage	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^std::string MakeConnectMessage(const std::string& address) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:std::string
+MakeDisconnectMessage	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^std::string MakeDisconnectMessage(const std::string& address) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:std::string
+MakeDynamicFlag	host/commands/start/flag_forwarder.cc	/^std::unique_ptr<SubprocessFlag> MakeDynamicFlag($/;"	f	namespace:__anon4552bec90111	typeref:typename:std::unique_ptr<SubprocessFlag>
+MakeFileExecutable	common/libs/utils/files.cpp	/^bool MakeFileExecutable(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+MakeMessage	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^std::string MakeMessage(const std::string& user_message) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:std::string
+MakeName	guest/hals/confirmationui/guest_session.h	/^    std::string MakeName(const std::uint32_t i) const {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::string
+MakeShellUptimeMessage	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^std::string MakeShellUptimeMessage() {$/;"	f	namespace:__anon734383cf0111	typeref:typename:std::string
+MakeSizeHeader	common/libs/confui/packet.h	/^std::vector<int> MakeSizeHeader(Args&&... args) {$/;"	f	namespace:cuttlefish::confui::packet::impl	typeref:typename:std::vector<int>
+MakeTransportMessage	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^std::string MakeTransportMessage(const std::string& address) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:std::string
+MakeVbParams	host/commands/secure_env/tpm_attestation_record.cpp	/^VerifiedBootParams MakeVbParams() {$/;"	f	namespace:cuttlefish::__anon03bde2800111	typeref:typename:VerifiedBootParams
+ManagedGatekeeperMessage	common/libs/security/gatekeeper_channel.h	/^using ManagedGatekeeperMessage =$/;"	t	namespace:cuttlefish	typeref:typename:std::unique_ptr<GatekeeperRawMessage,GatekeeperCommandDestroyer>
+ManagedKeymasterMessage	common/libs/security/keymaster_channel.h	/^using ManagedKeymasterMessage =$/;"	t	namespace:cuttlefish	typeref:typename:std::unique_ptr<keymaster_message,KeymasterCommandDestroyer>
+ManagedLibrary	host/libs/graphics_detector/graphics_detector.cpp	/^using ManagedLibrary = std::unique_ptr<void, LibraryCloser>;$/;"	t	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:std::unique_ptr<void,LibraryCloser>	file:
+MarkAll	common/libs/fs/shared_fd.cpp	/^void MarkAll(const SharedFDSet& input, fd_set* dest, int* max_index) {$/;"	f	namespace:cuttlefish::__anond70c3a4f0111	typeref:typename:void
+MarkReplied	host/libs/audio_connector/commands.h	/^  void MarkReplied(AudioStatus status) { status_ = status; }$/;"	f	class:cuttlefish::AudioCommand	typeref:typename:void
+MarshalFn	host/commands/secure_env/tpm_serialize.cpp	/^int MarshalFn = 0; \/\/ Break code without an explicit specialization.$/;"	v	namespace:cuttlefish	typeref:typename:int
+MasterBootRecord	host/libs/config/mbr.h	/^struct __attribute__((packed)) MasterBootRecord {$/;"	s
+MatchMode	host/commands/modem_simulator/modem_service.h	/^  enum MatchMode {FULL_MATCH = 0, PARTIAL_MATCH = 1};$/;"	g	class:cuttlefish::CommandHandler
+MaxMicrophoneVolume	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::MaxMicrophoneVolume(uint32_t* maxVolume) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+MaxSpeakerVolume	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::MaxSpeakerVolume(uint32_t* maxVolume) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+MaybeWriteNotification	host/commands/run_cvd/boot_state_machine.cc	/^  bool MaybeWriteNotification() {$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:bool	file:
+MbrPartitionEntry	host/libs/config/mbr.h	/^struct __attribute__((packed)) MbrPartitionEntry {$/;"	s
+Md5	host/commands/fetcher/build_api.h	/^  const std::string& Md5() const { return md5; }$/;"	f	class:cuttlefish::Artifact	typeref:typename:const std::string &
+MediaCodecs	shared/config/media_codecs.xml	/^<!DOCTYPE MediaCodecs [$/;"	r
+MediaSettings	shared/config/media_profiles.xml	/^<!DOCTYPE MediaSettings [$/;"	r
+MemfdCreate	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::MemfdCreate(const std::string& name, unsigned int flags) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+Message	common/libs/utils/tcp_socket.h	/^using Message = std::vector<std::uint8_t>;$/;"	t	namespace:cuttlefish	typeref:typename:std::vector<std::uint8_t>
+MessageSize	host/libs/confui/cbor.h	/^  enum class MessageSize : uint32_t { MAX = 6144u };$/;"	g	class:cuttlefish::confui::Cbor	typeref:typename:uint32_t
+MetadataLevel	common/libs/utils/tee_logging.h	/^enum class MetadataLevel {$/;"	g	namespace:cuttlefish
+MethodNotAllowed	host/libs/websocket/websocket_handler.h	/^  MethodNotAllowed = 405,$/;"	e	enum:cuttlefish::HttpStatusCode
+MetricsBinary	host/libs/config/known_paths.cpp	/^std::string MetricsBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+MetricsEvent	host/commands/metrics/proto/cf_metrics_event.proto	/^message MetricsEvent {$/;"	m	package:cuttlefish
+MetricsExitCodes	host/commands/metrics/metrics_defs.h	/^enum MetricsExitCodes : int {$/;"	g	namespace:cuttlefish	typeref:typename:int
+MetricsService	host/commands/run_cvd/launch.cc	/^class MetricsService : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+MicrophoneIsInitialized	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::MicrophoneIsInitialized() const { return true; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+MicrophoneMute	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::MicrophoneMute(bool* enabled) const { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+MicrophoneMuteIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::MicrophoneMuteIsAvailable(bool* available) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+MicrophoneVolume	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::MicrophoneVolume(uint32_t* volume) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+MicrophoneVolumeIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::MicrophoneVolumeIsAvailable(bool* available) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+MinMicrophoneVolume	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::MinMicrophoneVolume(uint32_t* minVolume) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+MinSpeakerVolume	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::MinSpeakerVolume(uint32_t* minVolume) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+MiscImagePath	host/libs/config/data_image.h	/^class MiscImagePath {$/;"	c	namespace:cuttlefish
+MiscImageTag	host/libs/config/data_image.cpp	/^struct MiscImageTag {};$/;"	s	namespace:cuttlefish	file:
+MiscInfo	host/commands/assemble_cvd/misc_info.h	/^using MiscInfo = std::map<std::string, std::string>;$/;"	t	namespace:cuttlefish	typeref:typename:std::map<std::string,std::string>
+MiscService	host/commands/modem_simulator/misc_service.cpp	/^MiscService::MiscService(int32_t service_id, ChannelMonitor* channel_monitor,$/;"	f	class:cuttlefish::MiscService
+MiscService	host/commands/modem_simulator/misc_service.h	/^class MiscService : public ModemService, public std::enable_shared_from_this<MiscService>  {$/;"	c	namespace:cuttlefish
+Mkstemp	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Mkstemp(std::string* path) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+MobileGatewayName	host/libs/allocd/alloc_utils.cpp	/^std::string MobileGatewayName(const std::string& ipaddr, uint16_t id) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+MobileIface	host/libs/allocd/resource.h	/^  MobileIface(const std::string& name, uid_t uid, uint16_t iface_id,$/;"	f	class:cuttlefish::MobileIface
+MobileIface	host/libs/allocd/resource.h	/^  MobileIface,$/;"	e	enum:cuttlefish::ResourceType
+MobileIface	host/libs/allocd/resource.h	/^class MobileIface : public StaticResource {$/;"	c	namespace:cuttlefish
+MobileNetworkConnected	host/commands/kernel_log_monitor/kernel_log_server.h	/^  MobileNetworkConnected = 4,$/;"	e	enum:monitor::Event
+MobileNetworkName	host/libs/allocd/alloc_utils.cpp	/^std::string MobileNetworkName(const std::string& ipaddr,$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+Mode	host/commands/modem_simulator/sim_service.h	/^    enum Mode {$/;"	g	struct:cuttlefish::SimService::FacilityLock
+Mode	shared/config/cgroups.json	/^      "Mode": "0755",$/;"	s	object:Cgroups.0
+ModeEnabled	host/libs/config/adb/launch.cpp	/^  bool ModeEnabled(const AdbMode& mode) const {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:bool	file:
+ModeType	host/libs/confui/host_mode_ctrl.h	/^  enum class ModeType : std::uint8_t { kAndroidMode = 55, kConfUI_Mode = 77 };$/;"	g	class:cuttlefish::HostModeCtrl	typeref:typename:std::uint8_t
+ModeType	host/libs/screen_connector/screen_connector_ctrl.h	/^  enum class ModeType {$/;"	g	class:cuttlefish::ScreenConnectorCtrl
+ModemInfo	guest/hals/ril/reference-ril/reference-ril.c	/^} ModemInfo;$/;"	t	typeref:struct:__anon70d7df6f0108	file:
+ModemService	host/commands/modem_simulator/modem_service.cpp	/^ModemService::ModemService(int32_t service_id,$/;"	f	class:cuttlefish::ModemService
+ModemService	host/commands/modem_simulator/modem_service.h	/^class ModemService {$/;"	c	namespace:cuttlefish
+ModemServiceTest	host/commands/modem_simulator/unittest/service_test.cpp	/^class ModemServiceTest : public ::testing::Test {$/;"	c	file:
+ModemServiceType	host/commands/modem_simulator/modem_service.h	/^enum ModemServiceType : int {$/;"	g	namespace:cuttlefish	typeref:typename:int
+ModemSimulator	host/commands/modem_simulator/modem_simulator.cpp	/^ModemSimulator::ModemSimulator(int32_t modem_id)$/;"	f	class:cuttlefish::ModemSimulator
+ModemSimulator	host/commands/modem_simulator/modem_simulator.h	/^class ModemSimulator {$/;"	c	namespace:cuttlefish
+ModemSimulator	host/commands/run_cvd/launch_modem.cpp	/^class ModemSimulator : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+ModemSimulatorBinary	host/libs/config/known_paths.cpp	/^std::string ModemSimulatorBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+ModemSimulatorExitCodes	host/commands/modem_simulator/channel_monitor.h	/^enum ModemSimulatorExitCodes : int {$/;"	g	namespace:cuttlefish	typeref:typename:int
+ModemTechnology	host/commands/modem_simulator/network_service.h	/^  enum ModemTechnology {$/;"	g	class:cuttlefish::NetworkService
+Modes	host/libs/config/adb/data.cpp	/^  const std::set<AdbMode>& Modes() const override { return modes_; }$/;"	f	class:cuttlefish::AdbConfigImpl	typeref:typename:const std::set<AdbMode> &	file:
+ModuleBase	build/cvd-host-package.go	/^	android.ModuleBase$/;"	M	struct:cuttlefish.cvdHostPackage	typeref:typename:android.ModuleBase
+MonitorEntry	host/commands/run_cvd/process_monitor.h	/^struct MonitorEntry {$/;"	s	namespace:cuttlefish
+MonitorLoop	host/commands/modem_simulator/channel_monitor.cpp	/^void ChannelMonitor::MonitorLoop() {$/;"	f	class:cuttlefish::ChannelMonitor	typeref:typename:void
+MonitorRoutine	host/commands/run_cvd/process_monitor.cc	/^bool ProcessMonitor::MonitorRoutine() {$/;"	f	class:cuttlefish::ProcessMonitor	typeref:typename:bool
+MonitorWifiJob	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^        public MonitorWifiJob() {$/;"	m	class:GceWifiManager.MonitorWifiJob
+MonitorWifiJob	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private class MonitorWifiJob extends JobBase {$/;"	c	class:GceWifiManager
+Multi	host/commands/run_cvd/launch.cc	/^  using Multi = Multibindings<InternalDeps>;$/;"	t	function:cuttlefish::launchComponent	typeref:typename:Multibindings<InternalDeps>	file:
+Multibindings	host/libs/config/inject.h	/^struct Multibindings {$/;"	s	namespace:cuttlefish
+MultipleImagePartition	host/libs/image_aggregator/image_aggregator.h	/^struct MultipleImagePartition {$/;"	s	namespace:cuttlefish
+Multiplexer	common/libs/concurrency/multiplexer.h	/^  Multiplexer() : sem_items_{0} {}$/;"	f	class:cuttlefish::Multiplexer
+Multiplexer	common/libs/concurrency/multiplexer.h	/^class Multiplexer {$/;"	c	namespace:cuttlefish
+Multiplexer	host/libs/confui/host_server.h	/^  using Multiplexer =$/;"	t	class:cuttlefish::confui::HostServer	typeref:typename:Multiplexer<std::unique_ptr<ConfUiMessage>,ThreadSafeQueue<std::unique_ptr<ConfUiMessage>>>
+Multiplexer	host/libs/screen_connector/screen_connector_multiplexer.h	/^  using Multiplexer = Multiplexer<ProcessedFrameType, Queue>;$/;"	t	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:Multiplexer<ProcessedFrameType,Queue>
+MutableInstanceSpecific	host/libs/config/cuttlefish_config.h	/^    MutableInstanceSpecific(CuttlefishConfig* config, const std::string& id)$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific
+MutableInstanceSpecific	host/libs/config/cuttlefish_config.h	/^  class MutableInstanceSpecific {$/;"	c	class:cuttlefish::CuttlefishConfig
+N	host/commands/secure_env/soft_gatekeeper.h	/^    static const uint64_t N = 16384;$/;"	m	class:gatekeeper::SoftGateKeeper	typeref:typename:const uint64_t
+NATT_IPV4	guest/hals/ril/reference-libril/ril.h	/^    NATT_IPV4 = 0,              \/* Keepalive specified by RFC 3948 Sec. 2.3 using IPv4 *\/$/;"	e	enum:__anon0bfbaecfc403
+NATT_IPV6	guest/hals/ril/reference-libril/ril.h	/^    NATT_IPV6 = 1               \/* Keepalive specified by RFC 3948 Sec. 2.3 using IPv6 *\/$/;"	e	enum:__anon0bfbaecfc403
+NEGATIVE	host/libs/confui/cbor.h	/^    NEGATIVE = 1,$/;"	e	enum:cuttlefish::confui::Cbor::Type
+NET_REGISTRATION_DENIED	host/commands/modem_simulator/network_service.h	/^    NET_REGISTRATION_DENIED       = 3,$/;"	e	enum:cuttlefish::NetworkService::RegistrationState
+NET_REGISTRATION_EMERGENCY	host/commands/modem_simulator/network_service.h	/^    NET_REGISTRATION_EMERGENCY    = 8$/;"	e	enum:cuttlefish::NetworkService::RegistrationState
+NET_REGISTRATION_HOME	host/commands/modem_simulator/network_service.h	/^    NET_REGISTRATION_HOME         = 1,$/;"	e	enum:cuttlefish::NetworkService::RegistrationState
+NET_REGISTRATION_ROAMING	host/commands/modem_simulator/network_service.h	/^    NET_REGISTRATION_ROAMING      = 5,$/;"	e	enum:cuttlefish::NetworkService::RegistrationState
+NET_REGISTRATION_SEARCHING	host/commands/modem_simulator/network_service.h	/^    NET_REGISTRATION_SEARCHING    = 2,$/;"	e	enum:cuttlefish::NetworkService::RegistrationState
+NET_REGISTRATION_UNKNOWN	host/commands/modem_simulator/network_service.h	/^    NET_REGISTRATION_UNKNOWN      = 4,$/;"	e	enum:cuttlefish::NetworkService::RegistrationState
+NET_REGISTRATION_UNREGISTERED	host/commands/modem_simulator/network_service.h	/^    NET_REGISTRATION_UNREGISTERED = 0,$/;"	e	enum:cuttlefish::NetworkService::RegistrationState
+NGRAN	guest/hals/ril/reference-libril/ril.h	/^    NGRAN = 0x04,       \/\/ Next-Generation Radio Access Network$/;"	e	enum:__anon0bfbaecfa503
+NGRAN_BAND_1	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_1 = 1,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_12	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_12 = 12,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_2	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_2 = 2,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_20	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_20 = 20,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_25	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_25 = 25,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_257	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_257 = 257,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_258	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_258 = 258,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_260	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_260 = 260,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_261	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_261 = 261,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_28	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_28 = 28,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_3	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_3 = 3,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_34	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_34 = 34,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_38	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_38 = 38,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_39	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_39 = 39,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_40	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_40 = 40,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_41	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_41 = 41,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_5	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_5 = 5,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_50	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_50 = 50,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_51	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_51 = 51,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_66	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_66 = 66,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_7	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_7 = 7,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_70	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_70 = 70,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_71	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_71 = 71,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_74	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_74 = 74,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_75	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_75 = 75,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_76	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_76 = 76,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_77	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_77 = 77,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_78	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_78 = 78,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_79	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_79 = 79,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_8	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_8 = 8,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_80	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_80 = 80,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_81	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_81 = 81,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_82	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_82 = 82,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_83	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_83 = 83,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_84	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_84 = 84,$/;"	e	enum:__anon0bfbaecfaa03
+NGRAN_BAND_86	guest/hals/ril/reference-libril/ril.h	/^    NGRAN_BAND_86 = 86,$/;"	e	enum:__anon0bfbaecfaa03
+NOTIFICATION_CHANNEL_ID	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private static final String NOTIFICATION_CHANNEL_ID = "cuttlefish-service";$/;"	f	class:GceService	file:
+NOTIFICATION_CHANNEL_NAME	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private static final String NOTIFICATION_CHANNEL_NAME = "Cuttlefish Service";$/;"	f	class:GceService	file:
+NOTIFICATION_ID	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private static final int NOTIFICATION_ID = 1;$/;"	f	class:GceService	file:
+NOT_SET	host/libs/audio_connector/shm_layout.h	/^  NOT_SET = static_cast<uint32_t>(-1),$/;"	e	enum:cuttlefish::AudioStatus
+NO_ACTIVE	host/commands/modem_simulator/data_service.h	/^    enum CidState {ACTIVE, NO_ACTIVE};$/;"	e	enum:cuttlefish::DataService::PDPContext::CidState
+NO_MULTISIM_POLICY	guest/hals/ril/reference-libril/ril.h	/^    NO_MULTISIM_POLICY = 0,             \/* configuration applies to each slot independently. *\/$/;"	e	enum:__anon0bfbaecf2803
+NO_RESULT	guest/hals/ril/reference-ril/atchannel.h	/^    NO_RESULT,   \/* no intermediate response expected *\/$/;"	e	enum:__anon512a2c1f0103
+NO_THREAD_SAFETY_ANALYSIS	common/libs/concurrency/thread_annotations.h	/^#define NO_THREAD_SAFETY_ANALYSIS /;"	d
+NR	guest/hals/ril/reference-ril/reference-ril.c	/^#define NR /;"	d	file:
+NR_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_NR_SignalStrength       NR_SignalStrength;$/;"	m	struct:__anon0bfbaecf5308	typeref:typename:RIL_NR_SignalStrength
+NS_PER_S	guest/hals/ril/reference-ril/atchannel.c	/^#define NS_PER_S /;"	d	file:
+NUMBER	host/libs/confui/cbor.h	/^    NUMBER = 0,$/;"	e	enum:cuttlefish::confui::Cbor::Type
+NUMERIC	guest/hals/ril/reference-ril/atchannel.h	/^    NUMERIC,     \/* a single intermediate response starting with a 0-9 *\/$/;"	e	enum:__anon512a2c1f0103
+NUM_CHMAPS	host/frontend/webrtc/audio_handler.cpp	/^constexpr uint32_t NUM_CHMAPS = sizeof(CHMAPS) \/ sizeof(CHMAPS[0]);$/;"	v	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:uint32_t
+NUM_ELEMS	guest/hals/ril/reference-libril/ril.cpp	/^#define NUM_ELEMS(/;"	d	file:
+NUM_ELEMS	guest/hals/ril/reference-ril/atchannel.c	/^#define NUM_ELEMS(/;"	d	file:
+NUM_ELEMS_SOCKET	guest/hals/ril/reference-libril/ril_ex.h	/^#define NUM_ELEMS_SOCKET(/;"	d
+NUM_JACKS	host/frontend/webrtc/audio_handler.cpp	/^constexpr uint32_t NUM_JACKS = sizeof(JACKS) \/ sizeof(JACKS[0]);$/;"	v	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:uint32_t
+NUM_SERVICE_CLASSES	guest/hals/ril/reference-libril/ril.h	/^#define NUM_SERVICE_CLASSES /;"	d
+NUM_STREAMS	host/frontend/webrtc/audio_handler.cpp	/^constexpr uint32_t NUM_STREAMS = sizeof(STREAMS) \/ sizeof(STREAMS[0]);$/;"	v	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:uint32_t
+NUM_TOMBSTONES_IN_TEST	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    private static final int NUM_TOMBSTONES_IN_TEST = 1000;$/;"	f	class:TombstoneTransmitTest	file:
+NUM_TOMBSTONES_PER_LOOP	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    private static final int NUM_TOMBSTONES_PER_LOOP = 500;$/;"	f	class:TombstoneTransmitTest	file:
+Name	common/libs/net/network_interface.h	/^  const std::string& Name() const {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:const std::string &
+Name	host/commands/assemble_cvd/disk_flags.cc	/^  std::string Name() const override { return "BootImageRepacker"; }$/;"	f	class:cuttlefish::BootImageRepacker	typeref:typename:std::string	file:
+Name	host/commands/assemble_cvd/disk_flags.cc	/^  std::string Name() const override { return "InitializeAccessKregistryImage"; }$/;"	f	class:cuttlefish::InitializeAccessKregistryImage	typeref:typename:std::string	file:
+Name	host/commands/assemble_cvd/disk_flags.cc	/^  std::string Name() const override { return "InitializeMetadataImage"; }$/;"	f	class:cuttlefish::InitializeMetadataImage	typeref:typename:std::string	file:
+Name	host/commands/assemble_cvd/flag_feature.cpp	/^  std::string Name() const override { return "ParseGflags"; }$/;"	f	class:cuttlefish::ParseGflagsImpl	typeref:typename:std::string	file:
+Name	host/commands/fetcher/build_api.h	/^  const std::string& Name() const { return name; }$/;"	f	class:cuttlefish::Artifact	typeref:typename:const std::string &
+Name	host/commands/run_cvd/boot_state_machine.cc	/^  std::string Name() const override { return "CvdBootStateMachine"; }$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/boot_state_machine.cc	/^  std::string Name() const override { return "ProcessLeader"; }$/;"	f	class:cuttlefish::__anone7ed366f0111::ProcessLeader	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "BluetoothConnector"; }$/;"	f	class:cuttlefish::BluetoothConnector	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "ConfigServer"; }$/;"	f	class:cuttlefish::ConfigServer	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "ConsoleForwarder"; }$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "GnssGrpcProxyServer"; }$/;"	f	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "KernelLogMonitor"; }$/;"	f	class:cuttlefish::KernelLogMonitor	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "LogcatReceiver"; }$/;"	f	class:cuttlefish::LogcatReceiver	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "MetricsService"; }$/;"	f	class:cuttlefish::MetricsService	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "OpenWrt"; }$/;"	f	class:cuttlefish::OpenWrt	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "RootCanal"; }$/;"	f	class:cuttlefish::RootCanal	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "SecureEnvironment"; }$/;"	f	class:cuttlefish::SecureEnvironment	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "TombstoneReceiver"; }$/;"	f	class:cuttlefish::TombstoneReceiver	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "VehicleHalServer"; }$/;"	f	class:cuttlefish::VehicleHalServer	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "VirtualMachineManager"; }$/;"	f	class:cuttlefish::VmmCommands	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch.cc	/^  std::string Name() const override { return "WmediumdServer"; }$/;"	f	class:cuttlefish::WmediumdServer	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch_modem.cpp	/^  std::string Name() const override { return "ModemSimulator"; }$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch_streamer.cpp	/^  std::string Name() const override { return "StreamerSockets"; }$/;"	f	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/launch_streamer.cpp	/^  std::string Name() const override { return "WebRtcServer"; }$/;"	f	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/main.cc	/^  std::string Name() const override { return "CuttlefishEnvironment"; }$/;"	f	class:cuttlefish::__anonadab6e0c0111::CuttlefishEnvironment	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/server_loop.cpp	/^  std::string Name() const override { return "ServerLoop"; }$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/validate.cpp	/^  std::string Name() const override { return "ValidateHostConfiguration"; }$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateHostConfigurationFeature	typeref:typename:std::string	file:
+Name	host/commands/run_cvd/validate.cpp	/^  std::string Name() const override { return "ValidateTapDevices"; }$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateTapDevices	typeref:typename:std::string	file:
+Name	host/commands/start/flag_forwarder.cc	/^  const std::string& Name() const { return name_; }$/;"	f	class:SubprocessFlag	typeref:typename:const std::string &	file:
+Name	host/libs/config/adb/config.cpp	/^  std::string Name() const override { return "AdbConfigFragmentImpl"; }$/;"	f	class:cuttlefish::__anone963d72d0111::AdbConfigFragmentImpl	typeref:typename:std::string	file:
+Name	host/libs/config/adb/flags.cpp	/^  std::string Name() const override { return "AdbConfigFlagImpl"; }$/;"	f	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:std::string	file:
+Name	host/libs/config/adb/launch.cpp	/^  std::string Name() const override { return "AdbConnector"; }$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbConnector	typeref:typename:std::string	file:
+Name	host/libs/config/adb/launch.cpp	/^  std::string Name() const override { return "SocketVsockProxy"; }$/;"	f	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:std::string	file:
+Name	host/libs/config/config_flag.cpp	/^  std::string Name() const override { return "ConfigFlagImpl"; }$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:std::string	file:
+Name	host/libs/config/config_flag.cpp	/^  std::string Name() const override { return "ConfigFlagPlaceholderImpl"; }$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagPlaceholderImpl	typeref:typename:std::string	file:
+Name	host/libs/config/config_flag.cpp	/^  std::string Name() const override { return "ConfigReader"; }$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigReader	typeref:typename:std::string	file:
+Name	host/libs/config/config_flag.cpp	/^  std::string Name() const override { return "SystemImageDirFlagImpl"; }$/;"	f	class:cuttlefish::__anon2e549bd00111::SystemImageDirFlagImpl	typeref:typename:std::string	file:
+Name	host/libs/config/custom_actions.cpp	/^  std::string Name() const override { return "CustomActionConfig"; }$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:std::string	file:
+Name	host/libs/config/data_image.cpp	/^  std::string Name() const override { return "InitializeDataImageImpl"; }$/;"	f	class:cuttlefish::InitializeDataImageImpl	typeref:typename:std::string	file:
+Name	host/libs/config/data_image.cpp	/^  std::string Name() const override { return "InitializeEspImageImpl"; }$/;"	f	class:cuttlefish::InitializeEspImageImpl	typeref:typename:std::string	file:
+Name	host/libs/config/data_image.cpp	/^  std::string Name() const override { return "InitializeMiscImageImpl"; }$/;"	f	class:cuttlefish::InitializeMiscImageImpl	typeref:typename:std::string	file:
+Name	shared/config/task_profiles.json	/^            "Name": "MemSoftLimit",$/;"	s	object:Profiles.28.Actions.0.Params
+Name	shared/config/task_profiles.json	/^            "Name": "MemSoftLimit",$/;"	s	object:Profiles.29.Actions.0.Params
+Name	shared/config/task_profiles.json	/^            "Name": "MemSwappiness",$/;"	s	object:Profiles.28.Actions.1.Params
+Name	shared/config/task_profiles.json	/^            "Name": "MemSwappiness",$/;"	s	object:Profiles.29.Actions.1.Params
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.0.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.1.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.10.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.11.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.12.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.13.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.14.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.15.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.16.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.17.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.18.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.19.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.2.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.20.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.21.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.22.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.23.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.3.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.30.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.4.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.5.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.6.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.7.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.8.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "JoinCgroup",$/;"	s	object:Profiles.9.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "SetAttribute",$/;"	s	object:Profiles.28.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "SetAttribute",$/;"	s	object:Profiles.28.Actions.1
+Name	shared/config/task_profiles.json	/^          "Name": "SetAttribute",$/;"	s	object:Profiles.29.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "SetAttribute",$/;"	s	object:Profiles.29.Actions.1
+Name	shared/config/task_profiles.json	/^          "Name": "SetClamps",$/;"	s	object:Profiles.26.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "SetClamps",$/;"	s	object:Profiles.27.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "SetTimerSlack",$/;"	s	object:Profiles.24.Actions.0
+Name	shared/config/task_profiles.json	/^          "Name": "SetTimerSlack",$/;"	s	object:Profiles.25.Actions.0
+Name	shared/config/task_profiles.json	/^      "Name": "CPUSET_SP_BACKGROUND",$/;"	s	object:AggregateProfiles.7
+Name	shared/config/task_profiles.json	/^      "Name": "CPUSET_SP_DEFAULT",$/;"	s	object:AggregateProfiles.6
+Name	shared/config/task_profiles.json	/^      "Name": "CPUSET_SP_FOREGROUND",$/;"	s	object:AggregateProfiles.8
+Name	shared/config/task_profiles.json	/^      "Name": "CPUSET_SP_RESTRICTED",$/;"	s	object:AggregateProfiles.11
+Name	shared/config/task_profiles.json	/^      "Name": "CPUSET_SP_SYSTEM",$/;"	s	object:AggregateProfiles.10
+Name	shared/config/task_profiles.json	/^      "Name": "CPUSET_SP_TOP_APP",$/;"	s	object:AggregateProfiles.9
+Name	shared/config/task_profiles.json	/^      "Name": "CameraServiceCapacity",$/;"	s	object:Profiles.19
+Name	shared/config/task_profiles.json	/^      "Name": "HighEnergySaving",$/;"	s	object:Profiles.0
+Name	shared/config/task_profiles.json	/^      "Name": "HighIoPriority",$/;"	s	object:Profiles.22
+Name	shared/config/task_profiles.json	/^      "Name": "HighMemoryUsage",$/;"	s	object:Profiles.29
+Name	shared/config/task_profiles.json	/^      "Name": "HighPerformance",$/;"	s	object:Profiles.3
+Name	shared/config/task_profiles.json	/^      "Name": "LowIoPriority",$/;"	s	object:Profiles.20
+Name	shared/config/task_profiles.json	/^      "Name": "LowMemoryUsage",$/;"	s	object:Profiles.28
+Name	shared/config/task_profiles.json	/^      "Name": "MaxIoPriority",$/;"	s	object:Profiles.23
+Name	shared/config/task_profiles.json	/^      "Name": "MaxPerformance",$/;"	s	object:Profiles.4
+Name	shared/config/task_profiles.json	/^      "Name": "NormalIoPriority",$/;"	s	object:Profiles.21
+Name	shared/config/task_profiles.json	/^      "Name": "NormalPerformance",$/;"	s	object:Profiles.1
+Name	shared/config/task_profiles.json	/^      "Name": "PerfBoost",$/;"	s	object:Profiles.26
+Name	shared/config/task_profiles.json	/^      "Name": "PerfClamp",$/;"	s	object:Profiles.27
+Name	shared/config/task_profiles.json	/^      "Name": "ProcessCapacityHigh",$/;"	s	object:Profiles.15
+Name	shared/config/task_profiles.json	/^      "Name": "ProcessCapacityLow",$/;"	s	object:Profiles.13
+Name	shared/config/task_profiles.json	/^      "Name": "ProcessCapacityMax",$/;"	s	object:Profiles.16
+Name	shared/config/task_profiles.json	/^      "Name": "ProcessCapacityNormal",$/;"	s	object:Profiles.14
+Name	shared/config/task_profiles.json	/^      "Name": "RealtimePerformance",$/;"	s	object:Profiles.5
+Name	shared/config/task_profiles.json	/^      "Name": "SCHED_SP_BACKGROUND",$/;"	s	object:AggregateProfiles.1
+Name	shared/config/task_profiles.json	/^      "Name": "SCHED_SP_DEFAULT",$/;"	s	object:AggregateProfiles.0
+Name	shared/config/task_profiles.json	/^      "Name": "SCHED_SP_FOREGROUND",$/;"	s	object:AggregateProfiles.2
+Name	shared/config/task_profiles.json	/^      "Name": "SCHED_SP_RT_APP",$/;"	s	object:AggregateProfiles.5
+Name	shared/config/task_profiles.json	/^      "Name": "SCHED_SP_SYSTEM",$/;"	s	object:AggregateProfiles.4
+Name	shared/config/task_profiles.json	/^      "Name": "SCHED_SP_TOP_APP",$/;"	s	object:AggregateProfiles.3
+Name	shared/config/task_profiles.json	/^      "Name": "ServiceCapacityLow",$/;"	s	object:Profiles.17
+Name	shared/config/task_profiles.json	/^      "Name": "ServiceCapacityRestricted",$/;"	s	object:Profiles.18
+Name	shared/config/task_profiles.json	/^      "Name": "ServicePerformance",$/;"	s	object:Profiles.2
+Name	shared/config/task_profiles.json	/^      "Name": "SystemMemoryProcess",$/;"	s	object:Profiles.30
+Name	shared/config/task_profiles.json	/^      "Name": "TimerSlackHigh",$/;"	s	object:Profiles.24
+Name	shared/config/task_profiles.json	/^      "Name": "TimerSlackNormal",$/;"	s	object:Profiles.25
+Name	shared/config/task_profiles.json	/^      "Name": "VrKernelCapacity",$/;"	s	object:Profiles.6
+Name	shared/config/task_profiles.json	/^      "Name": "VrProcessCapacityHigh",$/;"	s	object:Profiles.12
+Name	shared/config/task_profiles.json	/^      "Name": "VrProcessCapacityLow",$/;"	s	object:Profiles.10
+Name	shared/config/task_profiles.json	/^      "Name": "VrProcessCapacityNormal",$/;"	s	object:Profiles.11
+Name	shared/config/task_profiles.json	/^      "Name": "VrServiceCapacityHigh",$/;"	s	object:Profiles.9
+Name	shared/config/task_profiles.json	/^      "Name": "VrServiceCapacityLow",$/;"	s	object:Profiles.7
+Name	shared/config/task_profiles.json	/^      "Name": "VrServiceCapacityNormal",$/;"	s	object:Profiles.8
+NativeDisplayType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef EGLNativeDisplayType NativeDisplayType;$/;"	t	typeref:typename:EGLNativeDisplayType
+NativePixmapType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef EGLNativePixmapType  NativePixmapType;$/;"	t	typeref:typename:EGLNativePixmapType
+NativeVsock	host/libs/config/adb/adb.h	/^  NativeVsock,$/;"	e	enum:cuttlefish::AdbMode
+NativeWindowType	host/libs/graphics_detector/include/EGL/eglplatform.h	/^typedef EGLNativeWindowType  NativeWindowType;$/;"	t	typeref:typename:EGLNativeWindowType
+NetConfig	common/libs/device_config/host_device_config.cpp	/^class NetConfig {$/;"	c	namespace:cuttlefish::__anonf277137d0111	file:
+NetlinkClient	common/libs/net/netlink_client.h	/^  NetlinkClient() {}$/;"	f	class:cuttlefish::NetlinkClient
+NetlinkClient	common/libs/net/netlink_client.h	/^class NetlinkClient {$/;"	c	namespace:cuttlefish
+NetlinkClientFactory	common/libs/net/netlink_client.h	/^class NetlinkClientFactory {$/;"	c	namespace:cuttlefish
+NetlinkClientFactoryImpl	common/libs/net/netlink_client.cpp	/^class NetlinkClientFactoryImpl : public NetlinkClientFactory {$/;"	c	namespace:cuttlefish::__anon61381e100111	file:
+NetlinkClientImpl	common/libs/net/netlink_client.cpp	/^class NetlinkClientImpl : public NetlinkClient {$/;"	c	namespace:cuttlefish::__anon61381e100111	file:
+NetlinkRequest	common/libs/net/netlink_request.cpp	/^NetlinkRequest::NetlinkRequest(NetlinkRequest&& other) {$/;"	f	class:cuttlefish::NetlinkRequest
+NetlinkRequest	common/libs/net/netlink_request.cpp	/^NetlinkRequest::NetlinkRequest(int32_t command, int32_t flags) {$/;"	f	class:cuttlefish::NetlinkRequest
+NetlinkRequest	common/libs/net/netlink_request.h	/^class NetlinkRequest {$/;"	c	namespace:cuttlefish
+NetworkInterface	common/libs/net/network_interface.h	/^  explicit NetworkInterface(size_t if_index)$/;"	f	class:cuttlefish::NetworkInterface
+NetworkInterface	common/libs/net/network_interface.h	/^class NetworkInterface {$/;"	c	namespace:cuttlefish
+NetworkInterfaceManager	common/libs/net/network_interface_manager.cpp	/^NetworkInterfaceManager::NetworkInterfaceManager($/;"	f	class:cuttlefish::NetworkInterfaceManager
+NetworkInterfaceManager	common/libs/net/network_interface_manager.h	/^class NetworkInterfaceManager {$/;"	c	namespace:cuttlefish
+NetworkOperator	host/commands/modem_simulator/network_service.h	/^    NetworkOperator() {}$/;"	f	struct:cuttlefish::NetworkService::NetworkOperator
+NetworkOperator	host/commands/modem_simulator/network_service.h	/^    NetworkOperator(const std::string& number,$/;"	f	struct:cuttlefish::NetworkService::NetworkOperator
+NetworkOperator	host/commands/modem_simulator/network_service.h	/^  struct NetworkOperator {$/;"	s	class:cuttlefish::NetworkService
+NetworkRegistrationStatus	host/commands/modem_simulator/network_service.h	/^    NetworkRegistrationStatus() :$/;"	f	struct:cuttlefish::NetworkService::NetworkRegistrationStatus
+NetworkRegistrationStatus	host/commands/modem_simulator/network_service.h	/^  struct NetworkRegistrationStatus {$/;"	s	class:cuttlefish::NetworkService
+NetworkService	host/commands/modem_simulator/network_service.cpp	/^NetworkService::NetworkService(int32_t service_id,$/;"	f	class:cuttlefish::NetworkService
+NetworkService	host/commands/modem_simulator/network_service.h	/^class NetworkService : public ModemService, public std::enable_shared_from_this<NetworkService> /;"	c	namespace:cuttlefish
+NetworkTypeBitmap	guest/hals/ril/reference-ril/reference-ril.c	/^} NetworkTypeBitmap;$/;"	t	typeref:struct:__anon70d7df6f0208	file:
+New	common/libs/net/netlink_client.cpp	/^  std::unique_ptr<NetlinkClient> New(int type) override {$/;"	f	class:cuttlefish::__anon61381e100111::NetlinkClientFactoryImpl	typeref:typename:std::unique_ptr<NetlinkClient>	file:
+New	common/libs/net/network_interface_manager.cpp	/^std::unique_ptr<NetworkInterfaceManager> NetworkInterfaceManager::New($/;"	f	class:cuttlefish::NetworkInterfaceManager	typeref:typename:std::unique_ptr<NetworkInterfaceManager>
+New	host/libs/wmediumd_controller/wmediumd_controller.cpp	/^std::unique_ptr<WmediumdController> WmediumdController::New($/;"	f	class:cuttlefish::WmediumdController	typeref:typename:std::unique_ptr<WmediumdController>
+NewfsMsdos	host/libs/config/data_image.cpp	/^bool NewfsMsdos(const std::string& data_image, int data_image_mb,$/;"	f	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:bool
+NoContent	host/libs/websocket/websocket_handler.h	/^  NoContent = 204,$/;"	e	enum:cuttlefish::HttpStatusCode
+None	guest/hals/confirmationui/guest_session.h	/^        None = 0,$/;"	e	enum:android::hardware::confirmationui::V1_0::implementation::GuestSession::ListenerState
+NotFound	host/libs/websocket/websocket_handler.h	/^  NotFound = 404,$/;"	e	enum:cuttlefish::HttpStatusCode
+NotSupported	host/libs/audio_connector/buffers.h	/^  NotSupported,$/;"	e	enum:cuttlefish::Status
+NvBufferToRecord	host/commands/secure_env/tpm_gatekeeper.cpp	/^static std::optional<gatekeeper::failure_record_t> NvBufferToRecord($/;"	f	namespace:cuttlefish	typeref:typename:std::optional<gatekeeper::failure_record_t>	file:
+NvramConfig	host/commands/modem_simulator/nvram_config.cpp	/^NvramConfig::NvramConfig(size_t num_instances, int sim_type)$/;"	f	class:cuttlefish::NvramConfig
+NvramConfig	host/commands/modem_simulator/nvram_config.h	/^class NvramConfig {$/;"	c	namespace:cuttlefish
+OI	host/commands/modem_simulator/sim_service.h	/^      OI = 2,  \/\/ Barr all outgoing international calls$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+OK	host/libs/confui/cbor.h	/^    OK = 0,$/;"	e	enum:cuttlefish::confui::Cbor::Error
+ONE_VALID_SIM_MUST_BE_PRESENT	guest/hals/ril/reference-libril/ril.h	/^    ONE_VALID_SIM_MUST_BE_PRESENT = 1,  \/* Any SIM card can be used as far as one valid card is$/;"	e	enum:__anon0bfbaecf2803
+ONLY_MESSAGE	common/libs/utils/tee_logging.h	/^  ONLY_MESSAGE,$/;"	e	enum:cuttlefish::MetadataLevel
+OPEN_CHANNEL	host/commands/modem_simulator/stk_service.h	/^    OPEN_CHANNEL        = 0x40,$/;"	e	enum:cuttlefish::StkService::CommandType
+OPER_SELECTION_AUTOMATIC	host/commands/modem_simulator/network_service.h	/^    OPER_SELECTION_AUTOMATIC = 0,$/;"	e	enum:cuttlefish::NetworkService::OperatorSelectionMode
+OPER_SELECTION_DEREGISTRATION	host/commands/modem_simulator/network_service.h	/^    OPER_SELECTION_DEREGISTRATION,$/;"	e	enum:cuttlefish::NetworkService::OperatorSelectionMode
+OPER_SELECTION_MANUAL	host/commands/modem_simulator/network_service.h	/^    OPER_SELECTION_MANUAL,$/;"	e	enum:cuttlefish::NetworkService::OperatorSelectionMode
+OPER_SELECTION_MANUAL_AUTOMATIC	host/commands/modem_simulator/network_service.h	/^    OPER_SELECTION_MANUAL_AUTOMATIC$/;"	e	enum:cuttlefish::NetworkService::OperatorSelectionMode
+OPER_SELECTION_SET_FORMAT	host/commands/modem_simulator/network_service.h	/^    OPER_SELECTION_SET_FORMAT,$/;"	e	enum:cuttlefish::NetworkService::OperatorSelectionMode
+OPER_STATE_AVAILABLE	host/commands/modem_simulator/network_service.h	/^      OPER_STATE_AVAILABLE  = 1,$/;"	e	enum:cuttlefish::NetworkService::NetworkOperator::OperatorState
+OPER_STATE_CURRENT	host/commands/modem_simulator/network_service.h	/^      OPER_STATE_CURRENT    = 2,$/;"	e	enum:cuttlefish::NetworkService::NetworkOperator::OperatorState
+OPER_STATE_FORBIDDEN	host/commands/modem_simulator/network_service.h	/^      OPER_STATE_FORBIDDEN  = 3$/;"	e	enum:cuttlefish::NetworkService::NetworkOperator::OperatorState
+OPER_STATE_UNKNOWN	host/commands/modem_simulator/network_service.h	/^      OPER_STATE_UNKNOWN    = 0,$/;"	e	enum:cuttlefish::NetworkService::NetworkOperator::OperatorState
+OTA_TOOLS	host/commands/fetcher/fetch_cvd.cc	/^const std::string OTA_TOOLS = "otatools.zip";$/;"	v	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:const std::string
+OTA_TOOLS_DIR	host/commands/fetcher/fetch_cvd.cc	/^const std::string OTA_TOOLS_DIR = "\/otatools\/";$/;"	v	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:const std::string
+OUT_OF_DATA	host/libs/confui/cbor.h	/^    OUT_OF_DATA = 1,$/;"	e	enum:cuttlefish::confui::Cbor::Error
+OVERRIDE_TARGET_FLATTEN_APEX	vsoc_x86_noapex/aosp_cf_noapex.mk	/^OVERRIDE_TARGET_FLATTEN_APEX := true$/;"	m
+OX	host/commands/modem_simulator/sim_service.h	/^      OX = 3,  \/\/ Barr all outgoing international calls, except to Home Country$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+O_TMPFILE	host/commands/assemble_cvd/assemble_cvd.cc	/^# define O_TMPFILE /;"	d	file:
+ObjectSlot	host/commands/secure_env/tpm_resource_manager.cpp	/^TpmResourceManager::ObjectSlot::ObjectSlot(TpmResourceManager* resource_manager)$/;"	f	class:cuttlefish::TpmResourceManager::ObjectSlot
+ObjectSlot	host/commands/secure_env/tpm_resource_manager.cpp	/^TpmResourceManager::ObjectSlot::ObjectSlot(TpmResourceManager* resource_manager,$/;"	f	class:cuttlefish::TpmResourceManager::ObjectSlot
+ObjectSlot	host/commands/secure_env/tpm_resource_manager.h	/^  class ObjectSlot {$/;"	c	class:cuttlefish::TpmResourceManager
+ObtainConfig	common/libs/device_config/host_device_config.cpp	/^  bool ObtainConfig(const std::string& interface, const std::string& dns) {$/;"	f	class:cuttlefish::__anonf277137d0111::NetConfig	typeref:typename:bool	file:
+OemHookImpl	guest/hals/ril/reference-libril/ril_service.cpp	/^struct OemHookImpl : public IOemHook {$/;"	s	file:
+Ok	host/libs/audio_connector/buffers.h	/^  Ok = 0x8000,$/;"	e	enum:cuttlefish::Status
+Ok	host/libs/websocket/websocket_handler.h	/^  Ok = 200,$/;"	e	enum:cuttlefish::HttpStatusCode
+OnAdbChannelOpen	host/frontend/webrtc/connection_observer.cpp	/^  void OnAdbChannelOpen(std::function<bool(const uint8_t *, size_t)>$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnAdbMessage	host/frontend/webrtc/connection_observer.cpp	/^  void OnAdbMessage(const uint8_t *msg, size_t size) override {$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnBluetoothChannelOpen	host/frontend/webrtc/connection_observer.cpp	/^  void OnBluetoothChannelOpen(std::function<bool(const uint8_t *, size_t)>$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnBluetoothMessage	host/frontend/webrtc/connection_observer.cpp	/^  void OnBluetoothMessage(const uint8_t *msg, size_t size) override {$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnBootEvtReceived	host/commands/run_cvd/boot_state_machine.cc	/^  bool OnBootEvtReceived(SharedFD boot_events_pipe) {$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:bool	file:
+OnCameraData	host/frontend/webrtc/connection_observer.cpp	/^  void OnCameraData(const std::vector<char> &data) override {$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnCaptureBuffer	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::OnCaptureBuffer(RxBuffer buffer) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+OnClose	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::OnClose() {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+OnClose	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionImpl::OnClose() {$/;"	f	class:WsConnectionImpl	typeref:typename:void
+OnClose	host/frontend/webrtc/main.cpp	/^  virtual void OnClose() override {$/;"	f	class:CfOperatorObserver	typeref:typename:void	file:
+OnClosed	host/frontend/webrtc_operator/client_handler.cpp	/^void ClientWSHandler::OnClosed() {$/;"	f	class:cuttlefish::ClientWSHandler	typeref:typename:void
+OnClosed	host/frontend/webrtc_operator/device_handler.cpp	/^void DeviceHandler::OnClosed() {$/;"	f	class:cuttlefish::DeviceHandler	typeref:typename:void
+OnConnected	host/frontend/webrtc/connection_observer.cpp	/^  void OnConnected(std::function<void(const uint8_t *, size_t, bool)>$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnConnected	host/frontend/webrtc_operator/signal_handler.cpp	/^void SignalHandler::OnConnected() {}$/;"	f	class:cuttlefish::SignalHandler	typeref:typename:void
+OnConnectionChange	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnConnectionChange($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnConsumedCb	host/libs/audio_connector/buffers.h	/^using OnConsumedCb = std::function<void(AudioStatus, uint32_t \/*latency*\/,$/;"	t	namespace:cuttlefish
+OnControlChannelOpen	host/frontend/webrtc/connection_observer.cpp	/^  void OnControlChannelOpen(std::function<bool(const Json::Value)>$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnControlMessage	host/frontend/webrtc/connection_observer.cpp	/^  void OnControlMessage(const uint8_t* msg, size_t size) override {$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnCreateSDPFailure	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnCreateSDPFailure(webrtc::RTCError error) {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnCreateSDPSuccess	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnCreateSDPSuccess($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnDataChannel	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnDataChannel($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnDataRegisterStateChanged	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::OnDataRegisterStateChanged() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+OnEncodedImage	host/frontend/webrtc/lib/local_recorder.cpp	/^webrtc::EncodedImageCallback::Result LocalRecorder::Display::OnEncodedImage($/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:webrtc::EncodedImageCallback::Result
+OnError	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::OnError(const std::string& error) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+OnError	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionImpl::OnError(const std::string& error) {$/;"	f	class:WsConnectionImpl	typeref:typename:void
+OnError	host/frontend/webrtc/main.cpp	/^  virtual void OnError() override {$/;"	f	class:CfOperatorObserver	typeref:typename:void	file:
+OnFail	tools/create_base_image.go	/^type OnFail int$/;"	t	package:main	typeref:typename:int
+OnFailure	host/frontend/webrtc/lib/client_handler.cpp	/^  void OnFailure(webrtc::RTCError error) override {$/;"	f	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdCreateSessionDescriptionObserver	typeref:typename:void	file:
+OnFailure	host/frontend/webrtc/lib/client_handler.cpp	/^  void OnFailure(webrtc::RTCError error) override {$/;"	f	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdSetSessionDescriptionObserver	typeref:typename:void	file:
+OnFirstClientConnected	host/commands/modem_simulator/modem_simulator.cpp	/^void ModemSimulator::OnFirstClientConnected() {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:void
+OnFrame	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^void AudioTrackSourceImpl::OnFrame(std::shared_ptr<AudioFrameBuffer> frame,$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:void
+OnFrame	host/frontend/webrtc/lib/audio_track_source_impl.h	/^  void OnFrame(std::shared_ptr<AudioFrameBuffer> frame,$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImplSinkWrapper	typeref:typename:void
+OnFrame	host/frontend/webrtc/lib/camera_streamer.cpp	/^void CameraStreamer::OnFrame(const webrtc::VideoFrame& client_frame) {$/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:void
+OnFrame	host/frontend/webrtc/lib/local_recorder.cpp	/^void LocalRecorder::Display::OnFrame(const webrtc::VideoFrame& frame) {$/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:void
+OnFrame	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^void VideoTrackSourceImpl::OnFrame(std::shared_ptr<VideoFrameBuffer> frame,$/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:void
+OnFrame	host/frontend/webrtc/lib/video_track_source_impl.h	/^  void OnFrame(std::shared_ptr<VideoFrameBuffer> frame,$/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImplSinkWrapper	typeref:typename:void
+OnIceCandidate	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnIceCandidate($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnIceCandidateError	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnIceCandidateError(const std::string &address, int port,$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnIceCandidateError	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnIceCandidateError(const std::string &host_candidate,$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnIceCandidatesRemoved	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnIceCandidatesRemoved($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnIceGatheringChange	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnIceGatheringChange($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnKeyboardEvent	host/frontend/webrtc/connection_observer.cpp	/^  void OnKeyboardEvent(uint16_t code, bool down) override {$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnMessage	host/frontend/webrtc/lib/client_handler.cpp	/^void AdbChannelHandler::OnMessage(const webrtc::DataBuffer &msg) {$/;"	f	class:cuttlefish::webrtc_streaming::AdbChannelHandler	typeref:typename:void
+OnMessage	host/frontend/webrtc/lib/client_handler.cpp	/^void BluetoothChannelHandler::OnMessage(const webrtc::DataBuffer &msg) {$/;"	f	class:cuttlefish::webrtc_streaming::BluetoothChannelHandler	typeref:typename:void
+OnMessage	host/frontend/webrtc/lib/client_handler.cpp	/^void CameraChannelHandler::OnMessage(const webrtc::DataBuffer &msg) {$/;"	f	class:cuttlefish::webrtc_streaming::CameraChannelHandler	typeref:typename:void
+OnMessage	host/frontend/webrtc/lib/client_handler.cpp	/^void ControlChannelHandler::OnMessage(const webrtc::DataBuffer &msg) {$/;"	f	class:cuttlefish::webrtc_streaming::ControlChannelHandler	typeref:typename:void
+OnMessage	host/frontend/webrtc/lib/client_handler.cpp	/^void InputChannelHandler::OnMessage(const webrtc::DataBuffer &msg) {$/;"	f	class:cuttlefish::webrtc_streaming::InputChannelHandler	typeref:typename:void
+OnMultiTouchEvent	host/frontend/webrtc/connection_observer.cpp	/^  void OnMultiTouchEvent(const std::string &display_label, Json::Value id,$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnNextFrame	host/libs/screen_connector/screen_connector.h	/^  ProcessedFrameType OnNextFrame() { return sc_frame_multiplexer_.Pop(); }$/;"	f	class:cuttlefish::ScreenConnector	typeref:typename:ProcessedFrameType
+OnOpen	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::OnOpen() {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+OnOpen	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionImpl::OnOpen() {$/;"	f	class:WsConnectionImpl	typeref:typename:void
+OnPlaybackBuffer	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::OnPlaybackBuffer(TxBuffer buffer) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+OnReceive	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::OnReceive(const uint8_t* msg, size_t length,$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+OnReceive	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionImpl::OnReceive(const uint8_t* data, size_t len,$/;"	f	class:WsConnectionImpl	typeref:typename:void
+OnReceive	host/frontend/webrtc_operator/signal_handler.cpp	/^void SignalHandler::OnReceive(const uint8_t* msg, size_t len, bool binary) {$/;"	f	class:cuttlefish::SignalHandler	typeref:typename:void
+OnReceive	host/frontend/webrtc_operator/signal_handler.cpp	/^void SignalHandler::OnReceive(const uint8_t* msg, size_t len, bool binary,$/;"	f	class:cuttlefish::SignalHandler	typeref:typename:void
+OnReceive	host/libs/websocket/websocket_handler.h	/^  virtual void OnReceive(const uint8_t* msg, size_t len, bool binary,$/;"	f	class:cuttlefish::WebSocketHandler	typeref:typename:void
+OnRegistered	host/frontend/webrtc/main.cpp	/^  virtual void OnRegistered() override {$/;"	f	class:CfOperatorObserver	typeref:typename:void	file:
+OnRemoveTrack	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnRemoveTrack($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnRenegotiationNeeded	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnRenegotiationNeeded() {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnRequestAck	guest/hals/ril/reference-libril/ril.h	/^    void (*OnRequestAck) (RIL_Token t);$/;"	m	struct:RIL_Env	typeref:typename:void (*)(RIL_Token t)
+OnRequestComplete	guest/hals/ril/reference-libril/ril.h	/^    void (*OnRequestComplete)(RIL_Token t, RIL_Errno e,$/;"	m	struct:RIL_Env	typeref:typename:void (*)(RIL_Token t,RIL_Errno e,void * response,size_t responselen)
+OnSetRemoteDescriptionComplete	host/frontend/webrtc/lib/client_handler.cpp	/^  void OnSetRemoteDescriptionComplete(webrtc::RTCError error) override {$/;"	f	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdOnSetRemoteDescription	typeref:typename:void	file:
+OnSetSDPFailure	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnSetSDPFailure(webrtc::RTCError error) {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnSignalStrengthChanged	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::OnSignalStrengthChanged() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+OnSignalingChange	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnSignalingChange($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnSimStatusChanged	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::OnSimStatusChanged(SimService::SimStatus sim_status) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+OnSimStatusChanged	host/commands/modem_simulator/sim_service.cpp	/^void SimService::OnSimStatusChanged() {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+OnSocketReadyCb	host/commands/run_cvd/process_monitor.h	/^using OnSocketReadyCb = std::function<bool(MonitorEntry*, int)>;$/;"	t	namespace:cuttlefish
+OnStandardizedIceConnectionChange	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnStandardizedIceConnectionChange($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnStateChange	host/frontend/webrtc/lib/client_handler.cpp	/^void AdbChannelHandler::OnStateChange() {$/;"	f	class:cuttlefish::webrtc_streaming::AdbChannelHandler	typeref:typename:void
+OnStateChange	host/frontend/webrtc/lib/client_handler.cpp	/^void BluetoothChannelHandler::OnStateChange() {$/;"	f	class:cuttlefish::webrtc_streaming::BluetoothChannelHandler	typeref:typename:void
+OnStateChange	host/frontend/webrtc/lib/client_handler.cpp	/^void CameraChannelHandler::OnStateChange() {$/;"	f	class:cuttlefish::webrtc_streaming::CameraChannelHandler	typeref:typename:void
+OnStateChange	host/frontend/webrtc/lib/client_handler.cpp	/^void ControlChannelHandler::OnStateChange() {$/;"	f	class:cuttlefish::webrtc_streaming::ControlChannelHandler	typeref:typename:void
+OnStateChange	host/frontend/webrtc/lib/client_handler.cpp	/^void InputChannelHandler::OnStateChange() {$/;"	f	class:cuttlefish::webrtc_streaming::InputChannelHandler	typeref:typename:void
+OnSuccess	host/frontend/webrtc/lib/client_handler.cpp	/^  void OnSuccess() override {$/;"	f	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdSetSessionDescriptionObserver	typeref:typename:void	file:
+OnSuccess	host/frontend/webrtc/lib/client_handler.cpp	/^  void OnSuccess(webrtc::SessionDescriptionInterface *desc) override {$/;"	f	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdCreateSessionDescriptionObserver	typeref:typename:void	file:
+OnSwitchEvent	host/frontend/webrtc/connection_observer.cpp	/^  void OnSwitchEvent(uint16_t code, bool state) override {$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnTouchEvent	host/frontend/webrtc/connection_observer.cpp	/^  void OnTouchEvent(const std::string &display_label, int x, int y,$/;"	f	class:cuttlefish::ConnectionObserverImpl	typeref:typename:void	file:
+OnTrack	host/frontend/webrtc/lib/client_handler.cpp	/^void ClientHandler::OnTrack($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:void
+OnUnsolicitedCommandForTR	host/commands/modem_simulator/stk_service.cpp	/^void StkService::OnUnsolicitedCommandForTR(std::string& command) {$/;"	f	class:cuttlefish::StkService	typeref:typename:void
+OnUnsolicitedResponse	guest/hals/ril/reference-libril/ril.h	/^    void (*OnUnsolicitedResponse)(int unsolResponse, const void *data, size_t datalen);$/;"	m	struct:RIL_Env	typeref:typename:void (*)(int unsolResponse,const void * data,size_t datalen)
+OnUnsolicitedResponse	guest/hals/ril/reference-libril/ril.h	/^    void (*OnUnsolicitedResponse)(int unsolResponse, const void *data, size_t datalen, RIL_SOCKE/;"	m	struct:RIL_Env	typeref:typename:void (*)(int unsolResponse,const void * data,size_t datalen,RIL_SOCKET_ID socket_id)
+OnVoiceRegisterStateChanged	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::OnVoiceRegisterStateChanged() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+OnWritable	host/libs/websocket/websocket_handler.cpp	/^bool WebSocketHandler::OnWritable() {$/;"	f	class:cuttlefish::WebSocketHandler	typeref:typename:bool
+OnWritable	host/libs/websocket/websocket_handler.cpp	/^int DynHandler::OnWritable() {$/;"	f	class:cuttlefish::DynHandler	typeref:typename:int
+OnWriteable	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionImpl::OnWriteable() {$/;"	f	class:WsConnectionImpl	typeref:typename:void
+OneBase	host/libs/config/inject.h	/^  struct OneBase {$/;"	s	struct:cuttlefish::Multibindings
+OneBaseOneImpl	host/libs/config/inject.h	/^  static fruit::Component<Deps> OneBaseOneImpl() {$/;"	f	struct:cuttlefish::Multibindings	typeref:typename:fruit::Component<Deps>
+OneshotHmac	host/commands/secure_env/tpm_hmac.cpp	/^static UniqueEsysPtr<TPM2B_DIGEST> OneshotHmac($/;"	f	namespace:cuttlefish	typeref:typename:UniqueEsysPtr<TPM2B_DIGEST>	file:
+Open	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Open(const std::string& path, int flags, mode_t mode) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+Open	common/libs/net/network_interface_manager.cpp	/^std::unique_ptr<NetworkInterface> NetworkInterfaceManager::Open($/;"	f	class:cuttlefish::NetworkInterfaceManager	typeref:typename:std::unique_ptr<NetworkInterface>
+OpenNetlink	common/libs/net/netlink_client.cpp	/^bool NetlinkClientImpl::OpenNetlink(int type) {$/;"	f	class:cuttlefish::__anon61381e100111::NetlinkClientImpl	typeref:typename:bool
+OpenPTY	host/commands/console_forwarder/main.cpp	/^  SharedFD OpenPTY() {$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:SharedFD	file:
+OpenSocketConnection	common/frontend/socket_vsock_proxy/main.cpp	/^cuttlefish::SharedFD OpenSocketConnection() {$/;"	f	namespace:__anon913036200111	typeref:typename:cuttlefish::SharedFD
+OpenTapInterface	common/libs/utils/network.cpp	/^SharedFD OpenTapInterface(const std::string& interface_name) {$/;"	f	namespace:cuttlefish	typeref:typename:SharedFD
+OpenWrt	host/commands/run_cvd/launch.cc	/^class OpenWrt : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+OperatorObserver	host/frontend/webrtc/lib/streamer.h	/^class OperatorObserver {$/;"	c	namespace:cuttlefish::webrtc_streaming
+OperatorSelectionMode	host/commands/modem_simulator/network_service.h	/^  enum OperatorSelectionMode {$/;"	g	class:cuttlefish::NetworkService
+OperatorServerConfig	host/frontend/webrtc/lib/streamer.cpp	/^struct OperatorServerConfig {$/;"	s	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	file:
+OperatorState	host/commands/modem_simulator/network_service.h	/^    enum OperatorState {$/;"	g	struct:cuttlefish::NetworkService::NetworkOperator
+OsType	host/commands/metrics/proto/cf_metrics_event.proto	/^  enum OsType {$/;"	g	message:cuttlefish.MetricsEvent
+PARTIAL	guest/hals/ril/reference-libril/ril.h	/^    PARTIAL = 0x01,   \/\/ The result contains a part of the scan results$/;"	e	enum:__anon0bfbaecfb203
+PARTIAL_MATCH	host/commands/modem_simulator/modem_service.h	/^  enum MatchMode {FULL_MATCH = 0, PARTIAL_MATCH = 1};$/;"	e	enum:cuttlefish::CommandHandler::MatchMode
+PARTITION_SIZE_SHIFT	common/libs/utils/size_utils.h	/^constexpr int PARTITION_SIZE_SHIFT = 12;$/;"	v	namespace:cuttlefish	typeref:typename:int
+PDPContext	host/commands/modem_simulator/data_service.h	/^  struct PDPContext {$/;"	s	class:cuttlefish::DataService
+PDPInfo	guest/hals/ril/reference-ril/reference-ril.c	/^struct PDPInfo {$/;"	s	file:
+PDPState	guest/hals/ril/reference-ril/reference-ril.c	/^enum PDPState {$/;"	g	file:
+PDP_BUSY	guest/hals/ril/reference-ril/reference-ril.c	/^    PDP_BUSY,$/;"	e	enum:PDPState	file:
+PDP_FAIL_ACTIVATION_REJECT_GGSN	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_ACTIVATION_REJECT_GGSN = 0x1E,   \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_ACTIVATION_REJECT_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_ACTIVATION_REJECT_UNSPECIFIED = 0x1F,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_APN_TYPE_CONFLICT	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_APN_TYPE_CONFLICT = 0x70,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_AUTH_FAILURE_ON_EMERGENCY_CALL	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_AUTH_FAILURE_ON_EMERGENCY_CALL = 0x7A,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_COMPANION_IFACE_IN_USE	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_COMPANION_IFACE_IN_USE = 0x76,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_CONDITIONAL_IE_ERROR	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_CONDITIONAL_IE_ERROR = 0x64,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_DATA_REGISTRATION_FAIL	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_DATA_REGISTRATION_FAIL = -2,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_EMERGENCY_IFACE_ONLY	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_EMERGENCY_IFACE_ONLY = 0x74,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_EMM_ACCESS_BARRED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_EMM_ACCESS_BARRED = 0x73,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_EMM_ACCESS_BARRED_INFINITE_RETRY	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_EMM_ACCESS_BARRED_INFINITE_RETRY = 0x79,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_ERROR_UNSPECIFIED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_ERROR_UNSPECIFIED = 0xffff, \/* retry silently. Will be deprecated soon as$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_ESM_INFO_NOT_RECEIVED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_ESM_INFO_NOT_RECEIVED = 0x35,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_FEATURE_NOT_SUPP	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_FEATURE_NOT_SUPP = 0x28,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_FILTER_SEMANTIC_ERROR	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_FILTER_SEMANTIC_ERROR = 0x2C,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_FILTER_SYTAX_ERROR	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_FILTER_SYTAX_ERROR = 0x2D,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_IFACE_AND_POL_FAMILY_MISMATCH	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_IFACE_AND_POL_FAMILY_MISMATCH = 0x78,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_IFACE_MISMATCH	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_IFACE_MISMATCH = 0x75,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_INSUFFICIENT_RESOURCES	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_INSUFFICIENT_RESOURCES = 0x1A,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN = 0x72,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_INVALID_MANDATORY_INFO	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_INVALID_MANDATORY_INFO = 0x60,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_INVALID_PCSCF_ADDR	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_INVALID_PCSCF_ADDR = 0x71,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_INVALID_TRANSACTION_ID	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_INVALID_TRANSACTION_ID = 0x51,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_IP_ADDRESS_MISMATCH	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_IP_ADDRESS_MISMATCH = 0x77,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_LLC_SNDCP	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_LLC_SNDCP = 0x19,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_MATCH_ALL_RULE_NOT_ALLOWED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_MATCH_ALL_RULE_NOT_ALLOWED = 0x8CD,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_MAX_ACTIVE_PDP_CONTEXT_REACHED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_MAX_ACTIVE_PDP_CONTEXT_REACHED = 0x41,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_MESSAGE_INCORRECT_SEMANTIC	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_MESSAGE_INCORRECT_SEMANTIC = 0x5F,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_MESSAGE_TYPE_UNSUPPORTED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_MESSAGE_TYPE_UNSUPPORTED = 0x61,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_MISSING_UNKNOWN_APN	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_MISSING_UNKNOWN_APN = 0x1B,      \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE = 0x65,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_MSG_TYPE_NONCOMPATIBLE_STATE	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_MSG_TYPE_NONCOMPATIBLE_STATE = 0x62,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED = 0x37,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_NAS_SIGNALLING	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_NAS_SIGNALLING = 0x0E,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_NETWORK_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_NETWORK_FAILURE = 0x26,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_NONE	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_NONE = 0, \/* No error, connection ok *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_NSAPI_IN_USE	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_NSAPI_IN_USE = 0x23,         \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_1	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_1 = 0x1001,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_10	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_10 = 0x100A,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_11	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_11 = 0x100B,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_12	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_12 = 0x100C,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_13	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_13 = 0x100D,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_14	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_14 = 0x100E,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_15	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_15 = 0x100F,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_2	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_2 = 0x1002,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_3	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_3 = 0x1003,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_4	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_4 = 0x1004,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_5	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_5 = 0x1005,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_6	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_6 = 0x1006,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_7	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_7 = 0x1007,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_8	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_8 = 0x1008,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OEM_DCFAILCAUSE_9	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OEM_DCFAILCAUSE_9 = 0x1009,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_ONLY_IPV4_ALLOWED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_ONLY_IPV4_ALLOWED = 0x32, \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_ONLY_IPV6_ALLOWED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_ONLY_IPV6_ALLOWED = 0x33, \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_ONLY_SINGLE_BEARER_ALLOWED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_ONLY_SINGLE_BEARER_ALLOWED = 0x34,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_OPERATOR_BARRED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_OPERATOR_BARRED = 0x08, \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_PDN_CONN_DOES_NOT_EXIST	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_PDN_CONN_DOES_NOT_EXIST = 0x36,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_PDP_WITHOUT_ACTIVE_TFT	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_PDP_WITHOUT_ACTIVE_TFT = 0x2E,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_PREF_RADIO_TECH_CHANGED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_PREF_RADIO_TECH_CHANGED = -4, \/* preferred technology has changed, should retry$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_PROTOCOL_ERRORS	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_PROTOCOL_ERRORS = 0x6F, \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_QOS_NOT_ACCEPTED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_QOS_NOT_ACCEPTED = 0x25,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_RADIO_POWER_OFF	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_RADIO_POWER_OFF = -5,      \/* data call was disconnected because radio was resetti/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_REGULAR_DEACTIVATION	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_REGULAR_DEACTIVATION = 0x24, \/* possibly restart radio,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_SERVICE_OPTION_NOT_SUBSCRIBED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_SERVICE_OPTION_NOT_SUBSCRIBED = 0x21, \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_SERVICE_OPTION_NOT_SUPPORTED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_SERVICE_OPTION_NOT_SUPPORTED = 0x20,  \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_SERVICE_OPTION_OUT_OF_ORDER	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_SERVICE_OPTION_OUT_OF_ORDER = 0x22,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_SIGNAL_LOST	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_SIGNAL_LOST = -3,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_SLICE_REJECTED	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_SLICE_REJECTED = 0x8CC,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_TETHERED_CALL_ACTIVE	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_TETHERED_CALL_ACTIVE = -6, \/* data call was disconnected by modem because tethered$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_TFT_SEMANTIC_ERROR	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_TFT_SEMANTIC_ERROR = 0x29,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_TFT_SYTAX_ERROR	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_TFT_SYTAX_ERROR = 0x2A,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_UMTS_REACTIVATION_REQ	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_UMTS_REACTIVATION_REQ = 0x27,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_UNKNOWN_INFO_ELEMENT	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_UNKNOWN_INFO_ELEMENT = 0x63,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_UNKNOWN_PDP_ADDRESS_TYPE	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_UNKNOWN_PDP_ADDRESS_TYPE = 0x1C, \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_UNKNOWN_PDP_CONTEXT	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_UNKNOWN_PDP_CONTEXT = 0x2B,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_UNSUPPORTED_APN_IN_CURRENT_PLMN	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_UNSUPPORTED_APN_IN_CURRENT_PLMN = 0x42,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_USER_AUTHENTICATION	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_USER_AUTHENTICATION = 0x1D,      \/* no retry *\/$/;"	e	enum:__anon0bfbaecf2f03
+PDP_FAIL_VOICE_REGISTRATION_FAIL	guest/hals/ril/reference-libril/ril.h	/^    PDP_FAIL_VOICE_REGISTRATION_FAIL = -1,$/;"	e	enum:__anon0bfbaecf2f03
+PDP_IDLE	guest/hals/ril/reference-ril/reference-ril.c	/^    PDP_IDLE,$/;"	e	enum:PDPState	file:
+PDUParser	host/commands/modem_simulator/pdu_parser.cpp	/^PDUParser::PDUParser(std::string &pdu) {$/;"	f	class:cuttlefish::PDUParser
+PDUParser	host/commands/modem_simulator/pdu_parser.h	/^class PDUParser {$/;"	c	namespace:cuttlefish
+PFNEGLBINDAPIPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDAPIPROC) (EGLenum api);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLenum api)
+PFNEGLBINDTEXIMAGEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDTEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EG/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint buffer)
+PFNEGLBINDWAYLANDDISPLAYWL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define PFNEGLBINDWAYLANDDISPLAYWL /;"	d
+PFNEGLBINDWAYLANDDISPLAYWLPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_disp/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,struct wl_display * display)
+PFNEGLCHOOSECONFIGPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCHOOSECONFIGPROC) (EGLDisplay dpy, const EGLint *attrib_l/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,const EGLint * attrib_list,EGLConfig * configs,EGLint config_size,EGLint * num_config)
+PFNEGLCLIENTSIGNALSYNCEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCLIENTSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, c/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSync sync,const EGLAttrib * attrib_list)
+PFNEGLCLIENTWAITSYNCKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLi/;"	t	typeref:typename:EGLint (EGLAPIENTRYP)(EGLDisplay dpy,EGLSyncKHR sync,EGLint flags,EGLTimeKHR timeout)
+PFNEGLCLIENTWAITSYNCNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeN/;"	t	typeref:typename:EGLint (EGLAPIENTRYP)(EGLSyncNV sync,EGLint flags,EGLTimeNV timeout)
+PFNEGLCLIENTWAITSYNCPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint fla/;"	t	typeref:typename:EGLint (EGLAPIENTRYP)(EGLDisplay dpy,EGLSync sync,EGLint flags,EGLTime timeout)
+PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC) (EGLint external_win_id);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint external_win_id)
+PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC) (EGLint external_r/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint external_ref_id,const EGLint * context_attributes,EGLint num_entries)
+PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC) (const EGLint *external_/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(const EGLint * external_ref_ids,EGLint num_entries)
+PFNEGLCOMPOSITORSETSIZEEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETSIZEEXTPROC) (EGLint external_win_id, EGLint/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint external_win_id,EGLint width,EGLint height)
+PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC) (EGLint external_wi/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint external_win_id,const EGLint * window_attributes,EGLint num_entries)
+PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC) (EGLint external_ref_id, /;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint external_ref_id,const EGLint * external_win_ids,EGLint num_entries)
+PFNEGLCOMPOSITORSWAPPOLICYEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSWAPPOLICYEXTPROC) (EGLint external_win_id, EGL/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint external_win_id,EGLint policy)
+PFNEGLCOPYBUFFERSPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOPYBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface, EGL/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLNativePixmapType target)
+PFNEGLCREATECONTEXTPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLContext (EGLAPIENTRYP PFNEGLCREATECONTEXTPROC) (EGLDisplay dpy, EGLConfig config, EGL/;"	t	typeref:typename:EGLContext (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,EGLContext share_context,const EGLint * attrib_list)
+PFNEGLCREATEDRMIMAGEMESAPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *a/;"	t	typeref:typename:EGLImageKHR (EGLAPIENTRYP)(EGLDisplay dpy,const EGLint * attrib_list)
+PFNEGLCREATEFENCESYNCNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition,/;"	t	typeref:typename:EGLSyncNV (EGLAPIENTRYP)(EGLDisplay dpy,EGLenum condition,const EGLint * attrib_list)
+PFNEGLCREATEIMAGEKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGL/;"	t	typeref:typename:EGLImageKHR (EGLAPIENTRYP)(EGLDisplay dpy,EGLContext ctx,EGLenum target,EGLClientBuffer buffer,const EGLint * attrib_list)
+PFNEGLCREATEIMAGEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLImage (EGLAPIENTRYP PFNEGLCREATEIMAGEPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum t/;"	t	typeref:typename:EGLImage (EGLAPIENTRYP)(EGLDisplay dpy,EGLContext ctx,EGLenum target,EGLClientBuffer buffer,const EGLAttrib * attrib_list)
+PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC) (const EGLint */;"	t	typeref:typename:EGLClientBuffer (EGLAPIENTRYP)(const EGLint * attrib_list)
+PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC) (EGLDisplay dpy, EGLen/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLenum buftype,EGLClientBuffer buffer,EGLConfig config,const EGLint * attrib_list)
+PFNEGLCREATEPBUFFERSURFACEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERSURFACEPROC) (EGLDisplay dpy, EGLConfig conf/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,const EGLint * attrib_list)
+PFNEGLCREATEPIXMAPSURFACEHIPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig con/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,struct EGLClientPixmapHI * pixmap)
+PFNEGLCREATEPIXMAPSURFACEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig confi/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,EGLNativePixmapType pixmap,const EGLint * attrib_list)
+PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLC/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,void * native_pixmap,const EGLint * attrib_list)
+PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConf/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,void * native_pixmap,const EGLAttrib * attrib_list)
+PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLC/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,void * native_window,const EGLint * attrib_list)
+PFNEGLCREATEPLATFORMWINDOWSURFACEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConf/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,void * native_window,const EGLAttrib * attrib_list)
+PFNEGLCREATESTREAMATTRIBKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMATTRIBKHRPROC) (EGLDisplay dpy, const EGLAt/;"	t	typeref:typename:EGLStreamKHR (EGLAPIENTRYP)(EGLDisplay dpy,const EGLAttrib * attrib_list)
+PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy,/;"	t	typeref:typename:EGLStreamKHR (EGLAPIENTRYP)(EGLDisplay dpy,EGLNativeFileDescriptorKHR file_descriptor)
+PFNEGLCREATESTREAMKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *att/;"	t	typeref:typename:EGLStreamKHR (EGLAPIENTRYP)(EGLDisplay dpy,const EGLint * attrib_list)
+PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLC/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,EGLStreamKHR stream,const EGLint * attrib_list)
+PFNEGLCREATESTREAMSYNCNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR str/;"	t	typeref:typename:EGLSyncKHR (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLenum type,const EGLint * attrib_list)
+PFNEGLCREATESYNC64KHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const/;"	t	typeref:typename:EGLSyncKHR (EGLAPIENTRYP)(EGLDisplay dpy,EGLenum type,const EGLAttribKHR * attrib_list)
+PFNEGLCREATESYNCKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const E/;"	t	typeref:typename:EGLSyncKHR (EGLAPIENTRYP)(EGLDisplay dpy,EGLenum type,const EGLint * attrib_list)
+PFNEGLCREATESYNCPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLSync (EGLAPIENTRYP PFNEGLCREATESYNCPROC) (EGLDisplay dpy, EGLenum type, const EGLAttr/;"	t	typeref:typename:EGLSync (EGLAPIENTRYP)(EGLDisplay dpy,EGLenum type,const EGLAttrib * attrib_list)
+PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL /;"	d
+PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef struct wl_buffer *(EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC) (EGLDisplay dp/;"	t	typeref:struct:wl_buffer * (EGLAPIENTRYP)(EGLDisplay dpy,EGLImageKHR image)
+PFNEGLCREATEWINDOWSURFACEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig confi/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,EGLNativeWindowType win,const EGLint * attrib_list)
+PFNEGLDEBUGMESSAGECONTROLKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLint (EGLAPIENTRYP PFNEGLDEBUGMESSAGECONTROLKHRPROC) (EGLDEBUGPROCKHR callback, const /;"	t	typeref:typename:EGLint (EGLAPIENTRYP)(EGLDEBUGPROCKHR callback,const EGLAttrib * attrib_list)
+PFNEGLDESTROYCONTEXTPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLContext ctx)
+PFNEGLDESTROYIMAGEKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLImageKHR image)
+PFNEGLDESTROYIMAGEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEPROC) (EGLDisplay dpy, EGLImage image);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLImage image)
+PFNEGLDESTROYSTREAMKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR strea/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream)
+PFNEGLDESTROYSURFACEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface)
+PFNEGLDESTROYSYNCKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSyncKHR sync)
+PFNEGLDESTROYSYNCNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLSyncNV sync)
+PFNEGLDESTROYSYNCPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCPROC) (EGLDisplay dpy, EGLSync sync);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSync sync)
+PFNEGLDUPNATIVEFENCEFDANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync/;"	t	typeref:typename:EGLint (EGLAPIENTRYP)(EGLDisplay dpy,EGLSyncKHR sync)
+PFNEGLEXPORTDMABUFIMAGEMESAPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR i/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLImageKHR image,int * fds,EGLint * strides,EGLint * offsets)
+PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImage/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLImageKHR image,int * fourcc,int * num_planes,EGLuint64KHR * modifiers)
+PFNEGLEXPORTDRMIMAGEMESAPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR imag/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLImageKHR image,EGLint * name,EGLint * handle,EGLint * stride)
+PFNEGLFENCENVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLSyncNV sync)
+PFNEGLGETCOMPOSITORTIMINGANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGANDROIDPROC) (EGLDisplay dpy, EGLSurfa/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint numTimestamps,const EGLint * names,EGLnsecsANDROID * values)
+PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC) (EGLDisplay dpy,/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint name)
+PFNEGLGETCONFIGATTRIBPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGATTRIBPROC) (EGLDisplay dpy, EGLConfig config, E/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig config,EGLint attribute,EGLint * value)
+PFNEGLGETCONFIGSPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGSPROC) (EGLDisplay dpy, EGLConfig *configs, EGLi/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLConfig * configs,EGLint config_size,EGLint * num_config)
+PFNEGLGETCURRENTCONTEXTPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLContext (EGLAPIENTRYP PFNEGLGETCURRENTCONTEXTPROC) (void);$/;"	t	typeref:typename:EGLContext (EGLAPIENTRYP)(void)
+PFNEGLGETCURRENTDISPLAYPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETCURRENTDISPLAYPROC) (void);$/;"	t	typeref:typename:EGLDisplay (EGLAPIENTRYP)(void)
+PFNEGLGETCURRENTSURFACEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLSurface (EGLAPIENTRYP PFNEGLGETCURRENTSURFACEPROC) (EGLint readdraw);$/;"	t	typeref:typename:EGLSurface (EGLAPIENTRYP)(EGLint readdraw)
+PFNEGLGETDISPLAYDRIVERCONFIGPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERCONFIGPROC) (EGLDisplay dpy);$/;"	t	typeref:typename:char * (EGLAPIENTRYP)(EGLDisplay dpy)
+PFNEGLGETDISPLAYDRIVERNAMEPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef const char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERNAMEPROC) (EGLDisplay dpy);$/;"	t	typeref:typename:const char * (EGLAPIENTRYP)(EGLDisplay dpy)
+PFNEGLGETDISPLAYPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDISPLAYPROC) (EGLNativeDisplayType display_id);$/;"	t	typeref:typename:EGLDisplay (EGLAPIENTRYP)(EGLNativeDisplayType display_id)
+PFNEGLGETERRORPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLint (EGLAPIENTRYP PFNEGLGETERRORPROC) (void);$/;"	t	typeref:typename:EGLint (EGLAPIENTRYP)(void)
+PFNEGLGETFRAMETIMESTAMPSANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSANDROIDPROC) (EGLDisplay dpy, EGLSurfac/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLuint64KHR frameId,EGLint numTimestamps,const EGLint * timestamps,EGLnsecsANDROID * values)
+PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC) (EGLDisplay dpy, E/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint timestamp)
+PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC) (const struct AHar/;"	t	typeref:typename:EGLClientBuffer (EGLAPIENTRYP)(const struct AHardwareBuffer * buffer)
+PFNEGLGETNEXTFRAMEIDANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETNEXTFRAMEIDANDROIDPROC) (EGLDisplay dpy, EGLSurface su/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLuint64KHR * frameId)
+PFNEGLGETOUTPUTLAYERSEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib /;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,const EGLAttrib * attrib_list,EGLOutputLayerEXT * layers,EGLint max_layers,EGLint * num_layers)
+PFNEGLGETOUTPUTPORTSEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib */;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,const EGLAttrib * attrib_list,EGLOutputPortEXT * ports,EGLint max_ports,EGLint * num_ports)
+PFNEGLGETPLATFORMDISPLAYEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *nativ/;"	t	typeref:typename:EGLDisplay (EGLAPIENTRYP)(EGLenum platform,void * native_display,const EGLint * attrib_list)
+PFNEGLGETPLATFORMDISPLAYPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void *native_d/;"	t	typeref:typename:EGLDisplay (EGLAPIENTRYP)(EGLenum platform,void * native_display,const EGLAttrib * attrib_list)
+PFNEGLGETPROCADDRESSPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef __eglMustCastToProperFunctionPointerType (EGLAPIENTRYP PFNEGLGETPROCADDRESSPROC) (const /;"	t	typeref:typename:__eglMustCastToProperFunctionPointerType (EGLAPIENTRYP)(const char * procname)
+PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDispl/;"	t	typeref:typename:EGLNativeFileDescriptorKHR (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream)
+PFNEGLGETSYNCATTRIBKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, E/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSyncKHR sync,EGLint attribute,EGLint * value)
+PFNEGLGETSYNCATTRIBNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, E/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLSyncNV sync,EGLint attribute,EGLint * value)
+PFNEGLGETSYNCATTRIBPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBPROC) (EGLDisplay dpy, EGLSync sync, EGLint /;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSync sync,EGLint attribute,EGLAttrib * value)
+PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void);$/;"	t	typeref:typename:EGLuint64NV (EGLAPIENTRYP)(void)
+PFNEGLGETSYSTEMTIMENVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void);$/;"	t	typeref:typename:EGLuint64NV (EGLAPIENTRYP)(void)
+PFNEGLINITIALIZEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLINITIALIZEPROC) (EGLDisplay dpy, EGLint *major, EGLint *m/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLint * major,EGLint * minor)
+PFNEGLLABELOBJECTKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLint (EGLAPIENTRYP PFNEGLLABELOBJECTKHRPROC) (EGLDisplay display, EGLenum objectType, /;"	t	typeref:typename:EGLint (EGLAPIENTRYP)(EGLDisplay display,EGLenum objectType,EGLObjectKHR object,EGLLabelKHR label)
+PFNEGLLOCKSURFACEKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, /;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,const EGLint * attrib_list)
+PFNEGLMAKECURRENTPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLMAKECURRENTPROC) (EGLDisplay dpy, EGLSurface draw, EGLSur/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface draw,EGLSurface read,EGLContext ctx)
+PFNEGLOUTPUTLAYERATTRIBEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayer/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLOutputLayerEXT layer,EGLint attribute,EGLAttrib value)
+PFNEGLOUTPUTPORTATTRIBEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEX/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLOutputPortEXT port,EGLint attribute,EGLAttrib value)
+PFNEGLPOSTSUBBUFFERNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface,/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint x,EGLint y,EGLint width,EGLint height)
+PFNEGLPRESENTATIONTIMEANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLPRESENTATIONTIMEANDROIDPROC) (EGLDisplay dpy, EGLSurface /;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLnsecsANDROID time)
+PFNEGLQUERYAPIPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLenum (EGLAPIENTRYP PFNEGLQUERYAPIPROC) (void);$/;"	t	typeref:typename:EGLenum (EGLAPIENTRYP)(void)
+PFNEGLQUERYCONTEXTPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx, EGLint/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLContext ctx,EGLint attribute,EGLint * value)
+PFNEGLQUERYDEBUGKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEBUGKHRPROC) (EGLint attribute, EGLAttrib *value);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint attribute,EGLAttrib * value)
+PFNEGLQUERYDEVICEATTRIBEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint at/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDeviceEXT device,EGLint attribute,EGLAttrib * value)
+PFNEGLQUERYDEVICESEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *d/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint max_devices,EGLDeviceEXT * devices,EGLint * num_devices)
+PFNEGLQUERYDEVICESTRINGEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint n/;"	t	typeref:typename:const char * (EGLAPIENTRYP)(EGLDeviceEXT device,EGLint name)
+PFNEGLQUERYDISPLAYATTRIBEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attrib/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLint attribute,EGLAttrib * value)
+PFNEGLQUERYDISPLAYATTRIBKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBKHRPROC) (EGLDisplay dpy, EGLint name, /;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLint name,EGLAttrib * value)
+PFNEGLQUERYDISPLAYATTRIBNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBNVPROC) (EGLDisplay dpy, EGLint attribu/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLint attribute,EGLAttrib * value)
+PFNEGLQUERYDMABUFFORMATSEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint max_fo/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLint max_formats,EGLint * formats,EGLint * num_formats)
+PFNEGLQUERYDMABUFMODIFIERSEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint form/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLint format,EGLint max_modifiers,EGLuint64KHR * modifiers,EGLBoolean * external_only,EGLint * num_modifiers)
+PFNEGLQUERYNATIVEDISPLAYNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDispl/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLNativeDisplayType * display_id)
+PFNEGLQUERYNATIVEPIXMAPNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surf,EGLNativePixmapType * pixmap)
+PFNEGLQUERYNATIVEWINDOWNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surf,EGLNativeWindowType * window)
+PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutput/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLOutputLayerEXT layer,EGLint attribute,EGLAttrib * value)
+PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutpu/;"	t	typeref:typename:const char * (EGLAPIENTRYP)(EGLDisplay dpy,EGLOutputLayerEXT layer,EGLint name)
+PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputP/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLOutputPortEXT port,EGLint attribute,EGLAttrib * value)
+PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutput/;"	t	typeref:typename:const char * (EGLAPIENTRYP)(EGLDisplay dpy,EGLOutputPortEXT port,EGLint name)
+PFNEGLQUERYSTREAMATTRIBKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR s/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLenum attribute,EGLAttrib * value)
+PFNEGLQUERYSTREAMKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream,/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLenum attribute,EGLint * value)
+PFNEGLQUERYSTREAMMETADATANVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR /;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLenum name,EGLint n,EGLint offset,EGLint size,void * data)
+PFNEGLQUERYSTREAMTIMEKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR str/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLenum attribute,EGLTimeKHR * value)
+PFNEGLQUERYSTREAMU64KHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stre/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLenum attribute,EGLuint64KHR * value)
+PFNEGLQUERYSTRINGPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGPROC) (EGLDisplay dpy, EGLint name);$/;"	t	typeref:typename:const char * (EGLAPIENTRYP)(EGLDisplay dpy,EGLint name)
+PFNEGLQUERYSURFACE64KHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surfac/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint attribute,EGLAttribKHR * value)
+PFNEGLQUERYSURFACEPOINTERANGLEPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint attribute,void ** value)
+PFNEGLQUERYSURFACEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface, EG/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint attribute,EGLint * value)
+PFNEGLQUERYWAYLANDBUFFERWL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define PFNEGLQUERYWAYLANDBUFFERWL /;"	d
+PFNEGLQUERYWAYLANDBUFFERWLPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWLPROC) (EGLDisplay dpy, struct wl_reso/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,struct wl_resource * buffer,EGLint attribute,EGLint * value)
+PFNEGLRELEASETEXIMAGEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface,/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint buffer)
+PFNEGLRELEASETHREADPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETHREADPROC) (void);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(void)
+PFNEGLRESETSTREAMNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLRESETSTREAMNVPROC) (EGLDisplay dpy, EGLStreamKHR stream);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream)
+PFNEGLSETBLOBCACHEFUNCSANDROIDPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncAN/;"	t	typeref:typename:void (EGLAPIENTRYP)(EGLDisplay dpy,EGLSetBlobFuncANDROID set,EGLGetBlobFuncANDROID get)
+PFNEGLSETDAMAGEREGIONKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surfa/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint * rects,EGLint n_rects)
+PFNEGLSETSTREAMATTRIBKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR str/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLenum attribute,EGLAttrib value)
+PFNEGLSETSTREAMMETADATANVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR st/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLint n,EGLint offset,EGLint size,const void * data)
+PFNEGLSIGNALSYNCKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLe/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSyncKHR sync,EGLenum mode)
+PFNEGLSIGNALSYNCNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLSyncNV sync,EGLenum mode)
+PFNEGLSTREAMATTRIBKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLenum attribute,EGLint value)
+PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC) (EGLDisplay dpy, EGLS/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,const EGLAttrib * attrib_list)
+PFNEGLSTREAMCONSUMERACQUIREKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamK/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream)
+PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC) (EGLDisplay/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,const EGLAttrib * attrib_list)
+PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, /;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream)
+PFNEGLSTREAMCONSUMEROUTPUTEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKH/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,EGLOutputLayerEXT layer)
+PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC) (EGLDisplay dpy, EGLS/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream,const EGLAttrib * attrib_list)
+PFNEGLSTREAMCONSUMERRELEASEKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamK/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream)
+PFNEGLSTREAMFLUSHNVPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMFLUSHNVPROC) (EGLDisplay dpy, EGLStreamKHR stream);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLStreamKHR stream)
+PFNEGLSURFACEATTRIBPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSURFACEATTRIBPROC) (EGLDisplay dpy, EGLSurface surface, E/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint attribute,EGLint value)
+PFNEGLSWAPBUFFERSPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface)
+PFNEGLSWAPBUFFERSREGION2NOKPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface su/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint numRects,const EGLint * rects)
+PFNEGLSWAPBUFFERSREGIONNOKPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface sur/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,EGLint numRects,const EGLint * rects)
+PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,const EGLint * rects,EGLint n_rects)
+PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface,const EGLint * rects,EGLint n_rects)
+PFNEGLSWAPINTERVALPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPINTERVALPROC) (EGLDisplay dpy, EGLint interval);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLint interval)
+PFNEGLTERMINATEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLTERMINATEPROC) (EGLDisplay dpy);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy)
+PFNEGLUNBINDWAYLANDDISPLAYWL	host/libs/graphics_detector/include/EGL/eglext.h	/^#define PFNEGLUNBINDWAYLANDDISPLAYWL /;"	d
+PFNEGLUNBINDWAYLANDDISPLAYWLPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_di/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,struct wl_display * display)
+PFNEGLUNLOCKSURFACEKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSurface surface)
+PFNEGLUNSIGNALSYNCEXTPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSync sync,const EGLAttrib * attrib_list)
+PFNEGLWAITCLIENTPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITCLIENTPROC) (void);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(void)
+PFNEGLWAITGLPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITGLPROC) (void);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(void)
+PFNEGLWAITNATIVEPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITNATIVEPROC) (EGLint engine);$/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLint engine)
+PFNEGLWAITSYNCKHRPROC	host/libs/graphics_detector/include/EGL/eglext.h	/^typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint fla/;"	t	typeref:typename:EGLint (EGLAPIENTRYP)(EGLDisplay dpy,EGLSyncKHR sync,EGLint flags)
+PFNEGLWAITSYNCPROC	host/libs/graphics_detector/include/EGL/egl.h	/^typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags/;"	t	typeref:typename:EGLBoolean (EGLAPIENTRYP)(EGLDisplay dpy,EGLSync sync,EGLint flags)
+PHONE_PROCESS	guest/hals/ril/reference-libril/ril.cpp	/^#define PHONE_PROCESS /;"	d	file:
+PLAY_TONE	host/commands/modem_simulator/stk_service.h	/^    PLAY_TONE           = 0x20,$/;"	e	enum:cuttlefish::StkService::CommandType
+PPP_TTY_PATH_ETH0	guest/hals/ril/reference-ril/reference-ril.c	/^#define PPP_TTY_PATH_ETH0 /;"	d	file:
+PREFERRED_NETWORK	guest/hals/ril/reference-ril/reference-ril.c	/^#define PREFERRED_NETWORK(/;"	d	file:
+PREF_NET_TYPE_CDMA_EVDO_AUTO	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_CDMA_EVDO_AUTO           = 4, \/* CDMA and EvDo (auto mode, according to PRL) /;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_CDMA_ONLY	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_CDMA_ONLY                = 5, \/* CDMA only *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_EVDO_ONLY	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_EVDO_ONLY                = 6, \/* EvDo only *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_GSM_ONLY	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_GSM_ONLY                 = 1, \/* GSM only *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_GSM_WCDMA	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_GSM_WCDMA                = 0, \/* GSM\/WCDMA (WCDMA preferred) *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_GSM_WCDMA_AUTO	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_GSM_WCDMA_AUTO           = 3, \/* GSM\/WCDMA (auto mode, according to PRL) *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_GSM_WCDMA_CDMA_EVDO_AUTO	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_GSM_WCDMA_CDMA_EVDO_AUTO = 7, \/* GSM\/WCDMA, CDMA, and EvDo (auto mode, accor/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_LTE_CDMA_EVDO	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_LTE_CDMA_EVDO            = 8, \/* LTE, CDMA and EvDo *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_LTE_CMDA_EVDO_GSM_WCDMA	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_LTE_CMDA_EVDO_GSM_WCDMA  = 10, \/* LTE, CDMA, EvDo, GSM\/WCDMA *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_LTE_GSM_WCDMA	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_LTE_GSM_WCDMA            = 9, \/* LTE, GSM\/WCDMA *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_LTE_ONLY	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_LTE_ONLY                 = 11, \/* LTE only *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_LTE_WCDMA	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_LTE_WCDMA                = 12,  \/* LTE\/WCDMA *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_GSM	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_GSM             = 16, \/* TD-SCDMA and GSM *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_GSM_LTE	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_GSM_LTE         = 17, \/* TD-SCDMA,GSM and LTE *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA       = 18, \/* TD-SCDMA, GSM\/WCDMA *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA_CDMA_EVDO_AUTO	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA_CDMA_EVDO_AUTO  = 21, \/* TD-SCDMA, GSM\/WCDMA, CDMA and Ev/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA_LTE	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA_LTE   = 20, \/* TD-SCDMA, GSM\/WCDMA and LTE *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_LTE	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_LTE             = 15, \/* TD-SCDMA and LTE *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA   = 22  \/* TD-SCDMA, LTE, CDMA, EvDo GSM\/WC/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_ONLY	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_ONLY            = 13, \/* TD-SCDMA only *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_WCDMA	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_WCDMA           = 14, \/* TD-SCDMA and WCDMA *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_TD_SCDMA_WCDMA_LTE	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_TD_SCDMA_WCDMA_LTE       = 19, \/* TD-SCDMA, WCDMA and LTE *\/$/;"	e	enum:__anon0bfbaecf0b03
+PREF_NET_TYPE_WCDMA	guest/hals/ril/reference-libril/ril.h	/^    PREF_NET_TYPE_WCDMA                    = 2, \/* WCDMA  *\/$/;"	e	enum:__anon0bfbaecf0b03
+PRINTBUF_SIZE	guest/hals/ril/reference-libril/ril.cpp	/^#define PRINTBUF_SIZE /;"	d	file:
+PRODUCT_BRAND	shared/auto/device.mk	/^PRODUCT_BRAND := generic$/;"	m
+PRODUCT_BUILD_RECOVERY_IMAGE	shared/device.mk	/^PRODUCT_BUILD_RECOVERY_IMAGE := true$/;"	m
+PRODUCT_DEVICE	vsoc_arm64/auto/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_arm64$/;"	m
+PRODUCT_DEVICE	vsoc_arm64/phone/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_arm64$/;"	m
+PRODUCT_DEVICE	vsoc_arm64_only/phone/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_arm64_only$/;"	m
+PRODUCT_DEVICE	vsoc_arm_only/phone/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_arm_only$/;"	m
+PRODUCT_DEVICE	vsoc_x86/auto/device.mk	/^PRODUCT_DEVICE := vsoc_x86$/;"	m
+PRODUCT_DEVICE	vsoc_x86/go_512_phone/device.mk	/^PRODUCT_DEVICE := vsoc_x86$/;"	m
+PRODUCT_DEVICE	vsoc_x86/go_phone/device.mk	/^PRODUCT_DEVICE := vsoc_x86$/;"	m
+PRODUCT_DEVICE	vsoc_x86/pasan/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_x86$/;"	m
+PRODUCT_DEVICE	vsoc_x86/phone/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_x86$/;"	m
+PRODUCT_DEVICE	vsoc_x86/tv/device.mk	/^PRODUCT_DEVICE := vsoc_x86$/;"	m
+PRODUCT_DEVICE	vsoc_x86_64/auto/device.mk	/^PRODUCT_DEVICE := vsoc_x86_64$/;"	m
+PRODUCT_DEVICE	vsoc_x86_64/pc/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_x86_64$/;"	m
+PRODUCT_DEVICE	vsoc_x86_64/phone/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_x86_64$/;"	m
+PRODUCT_DEVICE	vsoc_x86_64/tv/device.mk	/^PRODUCT_DEVICE := vsoc_x86_64$/;"	m
+PRODUCT_DEVICE	vsoc_x86_64_only/phone/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_x86_64_only$/;"	m
+PRODUCT_DEVICE	vsoc_x86_noapex/aosp_cf_noapex.mk	/^PRODUCT_DEVICE := vsoc_x86_noapex$/;"	m
+PRODUCT_DEVICE	vsoc_x86_only/phone/aosp_cf.mk	/^PRODUCT_DEVICE := vsoc_x86_only$/;"	m
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS	vsoc_arm64/phone/aosp_cf.mk	/^PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed$/;"	m
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS	vsoc_arm64_only/phone/aosp_cf.mk	/^PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed$/;"	m
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS	vsoc_arm_only/phone/aosp_cf.mk	/^PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed$/;"	m
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS	vsoc_x86/pasan/aosp_cf.mk	/^PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed$/;"	m
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS	vsoc_x86/phone/aosp_cf.mk	/^PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed$/;"	m
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS	vsoc_x86_64/phone/aosp_cf.mk	/^PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed$/;"	m
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS	vsoc_x86_64_only/phone/aosp_cf.mk	/^PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed$/;"	m
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS	vsoc_x86_only/phone/aosp_cf.mk	/^PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed$/;"	m
+PRODUCT_ENFORCE_RRO_TARGETS	shared/auto/device.mk	/^PRODUCT_ENFORCE_RRO_TARGETS := framework-res$/;"	m
+PRODUCT_ENFORCE_RRO_TARGETS	shared/phone/device.mk	/^PRODUCT_ENFORCE_RRO_TARGETS := framework-res$/;"	m
+PRODUCT_EXTRA_VNDK_VERSIONS	shared/device.mk	/^PRODUCT_EXTRA_VNDK_VERSIONS := 28 29 30$/;"	m
+PRODUCT_FS_COMPRESSION	shared/device.mk	/^PRODUCT_FS_COMPRESSION := 1$/;"	m
+PRODUCT_MAKEFILES	AndroidProducts.mk	/^PRODUCT_MAKEFILES := \\$/;"	m
+PRODUCT_MANUFACTURER	vsoc_arm64/auto/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_arm64/phone/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_arm64_only/phone/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_arm_only/phone/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86/auto/device.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86/go_512_phone/device.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86/go_phone/device.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86/pasan/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86/phone/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86/tv/device.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86_64/auto/device.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86_64/pc/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86_64/phone/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86_64/tv/device.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86_64_only/phone/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86_noapex/aosp_cf_noapex.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MANUFACTURER	vsoc_x86_only/phone/aosp_cf.mk	/^PRODUCT_MANUFACTURER := Google$/;"	m
+PRODUCT_MODEL	vsoc_arm64/auto/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish arm64 auto$/;"	m
+PRODUCT_MODEL	vsoc_arm64/phone/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish arm64 phone$/;"	m
+PRODUCT_MODEL	vsoc_arm64_only/phone/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish arm64 phone 64-bit only$/;"	m
+PRODUCT_MODEL	vsoc_arm_only/phone/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish arm phone 32-bit only$/;"	m
+PRODUCT_MODEL	vsoc_x86/auto/device.mk	/^PRODUCT_MODEL := Cuttlefish x86 auto$/;"	m
+PRODUCT_MODEL	vsoc_x86/go_512_phone/device.mk	/^PRODUCT_MODEL := Cuttlefish x86 Go 512 phone$/;"	m
+PRODUCT_MODEL	vsoc_x86/go_phone/device.mk	/^PRODUCT_MODEL := Cuttlefish x86 Go phone$/;"	m
+PRODUCT_MODEL	vsoc_x86/pasan/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish x86 phone$/;"	m
+PRODUCT_MODEL	vsoc_x86/phone/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish x86 phone$/;"	m
+PRODUCT_MODEL	vsoc_x86/tv/device.mk	/^PRODUCT_MODEL := Cuttlefish x86 tv$/;"	m
+PRODUCT_MODEL	vsoc_x86_64/auto/device.mk	/^PRODUCT_MODEL := Cuttlefish x86_64 auto$/;"	m
+PRODUCT_MODEL	vsoc_x86_64/pc/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish x86_64 pc$/;"	m
+PRODUCT_MODEL	vsoc_x86_64/phone/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish x86_64 phone$/;"	m
+PRODUCT_MODEL	vsoc_x86_64/phone/aosp_cf_foldable.mk	/^PRODUCT_MODEL := Cuttlefish x86_64 foldable$/;"	m
+PRODUCT_MODEL	vsoc_x86_64/tv/device.mk	/^PRODUCT_MODEL := Cuttlefish x86_64 tv$/;"	m
+PRODUCT_MODEL	vsoc_x86_64_only/phone/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish x86_64 phone 64-bit only$/;"	m
+PRODUCT_MODEL	vsoc_x86_noapex/aosp_cf_noapex.mk	/^PRODUCT_MODEL := Cuttlefish x86 phone without APEX support$/;"	m
+PRODUCT_MODEL	vsoc_x86_only/phone/aosp_cf.mk	/^PRODUCT_MODEL := Cuttlefish x86 phone 32-bit kernel$/;"	m
+PRODUCT_NAME	vsoc_arm64/auto/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_arm64_auto$/;"	m
+PRODUCT_NAME	vsoc_arm64/phone/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_arm64_phone$/;"	m
+PRODUCT_NAME	vsoc_arm64/phone/aosp_cf_hwasan.mk	/^PRODUCT_NAME := aosp_cf_arm64_phone_hwasan$/;"	m
+PRODUCT_NAME	vsoc_arm64_only/phone/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_arm64_only_phone$/;"	m
+PRODUCT_NAME	vsoc_arm64_only/phone/aosp_cf_hwasan.mk	/^PRODUCT_NAME := aosp_cf_arm64_only_phone_hwasan$/;"	m
+PRODUCT_NAME	vsoc_arm_only/phone/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_arm_only_phone$/;"	m
+PRODUCT_NAME	vsoc_x86/auto/device.mk	/^PRODUCT_NAME := aosp_cf_x86_auto$/;"	m
+PRODUCT_NAME	vsoc_x86/go_512_phone/device.mk	/^PRODUCT_NAME := aosp_cf_x86_go_512_phone$/;"	m
+PRODUCT_NAME	vsoc_x86/go_phone/device.mk	/^PRODUCT_NAME := aosp_cf_x86_go_phone$/;"	m
+PRODUCT_NAME	vsoc_x86/pasan/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_x86_pasan$/;"	m
+PRODUCT_NAME	vsoc_x86/phone/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_x86_phone$/;"	m
+PRODUCT_NAME	vsoc_x86/tv/device.mk	/^PRODUCT_NAME := aosp_cf_x86_tv$/;"	m
+PRODUCT_NAME	vsoc_x86_64/auto/device.mk	/^PRODUCT_NAME := aosp_cf_x86_64_auto$/;"	m
+PRODUCT_NAME	vsoc_x86_64/pc/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_x86_64_pc$/;"	m
+PRODUCT_NAME	vsoc_x86_64/phone/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_x86_64_phone$/;"	m
+PRODUCT_NAME	vsoc_x86_64/phone/aosp_cf_foldable.mk	/^PRODUCT_NAME := aosp_cf_x86_64_foldable$/;"	m
+PRODUCT_NAME	vsoc_x86_64/tv/device.mk	/^PRODUCT_NAME := aosp_cf_x86_64_tv$/;"	m
+PRODUCT_NAME	vsoc_x86_64_only/phone/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_x86_64_only_phone$/;"	m
+PRODUCT_NAME	vsoc_x86_noapex/aosp_cf_noapex.mk	/^PRODUCT_NAME := aosp_cf_x86_phone_noapex$/;"	m
+PRODUCT_NAME	vsoc_x86_only/phone/aosp_cf.mk	/^PRODUCT_NAME := aosp_cf_x86_only_phone$/;"	m
+PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS	vsoc_arm_only/phone/aosp_cf.mk	/^PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false$/;"	m
+PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS	vsoc_x86_only/phone/aosp_cf.mk	/^PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false$/;"	m
+PRODUCT_PACKAGE_OVERLAYS	vsoc_x86/go_512_phone/device.mk	/^PRODUCT_PACKAGE_OVERLAYS := device\/google\/cuttlefish\/vsoc_x86\/phone\/overlay$/;"	m
+PRODUCT_PACKAGE_OVERLAYS	vsoc_x86/go_phone/device.mk	/^PRODUCT_PACKAGE_OVERLAYS := device\/google\/cuttlefish\/vsoc_x86\/phone\/overlay$/;"	m
+PRODUCT_REQUIRES_INSECURE_EXECMEM_FOR_SWIFTSHADER	shared/device.mk	/^PRODUCT_REQUIRES_INSECURE_EXECMEM_FOR_SWIFTSHADER := true$/;"	m
+PRODUCT_SET_DEBUGFS_RESTRICTIONS	shared/device.mk	/^PRODUCT_SET_DEBUGFS_RESTRICTIONS := true$/;"	m
+PRODUCT_SHIPPING_API_LEVEL	shared/device.mk	/^PRODUCT_SHIPPING_API_LEVEL := 33$/;"	m
+PRODUCT_USE_DYNAMIC_PARTITIONS	shared/device.mk	/^PRODUCT_USE_DYNAMIC_PARTITIONS := true$/;"	m
+PROPERTY_RIL_IMPL	guest/hals/ril/reference-libril/ril.cpp	/^#define PROPERTY_RIL_IMPL /;"	d	file:
+PROVIDE_LOCAL_INFORMATION	host/commands/modem_simulator/stk_service.h	/^    PROVIDE_LOCAL_INFORMATION = 0x26,$/;"	e	enum:cuttlefish::StkService::CommandType
+PT_GUARDED_BY	common/libs/concurrency/thread_annotations.h	/^#define PT_GUARDED_BY(/;"	d
+PackagingBase	build/cvd-host-package.go	/^	android.PackagingBase$/;"	M	struct:cuttlefish.cvdHostPackage	typeref:typename:android.PackagingBase
+PackagingItemAlwaysDepTag	build/cvd-host-package.go	/^	android.PackagingItemAlwaysDepTag  \/\/ to force packaging of both "deps" and manually added de/;"	M	struct:cuttlefish.dependencyTag	typeref:typename:android.PackagingItemAlwaysDepTag
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.0.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.1.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.10.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.11.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.12.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.13.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.14.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.15.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.16.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.17.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.18.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.19.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.2.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.20.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.21.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.22.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.23.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.24.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.25.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.26.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.27.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.28.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.28.Actions.1
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.29.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.29.Actions.1
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.3.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.30.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.4.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.5.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.6.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.7.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.8.Actions.0
+Params	shared/config/task_profiles.json	/^          "Params":$/;"	o	object:Profiles.9.Actions.0
+ParentKey	host/commands/secure_env/primary_key_builder.cpp	/^void PrimaryKeyBuilder::ParentKey() {$/;"	f	class:cuttlefish::PrimaryKeyBuilder	typeref:typename:void
+ParentKeyCreator	host/commands/secure_env/primary_key_builder.cpp	/^ParentKeyCreator(const std::string& unique) {$/;"	f	namespace:cuttlefish	typeref:typename:std::function<TpmObjectSlot (TpmResourceManager &)>
+ParentToChildMessage	host/commands/run_cvd/process_monitor.cc	/^struct ParentToChildMessage {$/;"	s	namespace:cuttlefish	file:
+Parse	common/libs/utils/flag_parser.cpp	/^bool Flag::Parse(std::vector<std::string>& arguments) const {$/;"	f	class:cuttlefish::Flag	typeref:typename:bool
+Parse	common/libs/utils/flag_parser.cpp	/^bool Flag::Parse(std::vector<std::string>&& arguments) const {$/;"	f	class:cuttlefish::Flag	typeref:typename:bool
+ParseAddress	common/libs/utils/network.cpp	/^bool ParseAddress(const std::string& address, const std::string& separator,$/;"	f	namespace:cuttlefish::__anoncaae79910111	typeref:typename:bool
+ParseAddressList	host/frontend/adb_connector/main.cpp	/^std::vector<std::string> ParseAddressList(std::string ports) {$/;"	f	namespace:__anona4a84cd70111	typeref:typename:std::vector<std::string>
+ParseDisplayConfig	host/commands/assemble_cvd/flags.cc	/^std::optional<CuttlefishConfig::DisplayConfig> ParseDisplayConfig($/;"	f	namespace:cuttlefish::__anon145bfaab0111	typeref:typename:std::optional<CuttlefishConfig::DisplayConfig>
+ParseDnsmasqLeases	common/libs/utils/network.cpp	/^std::vector<DnsmasqDhcp4Lease> ParseDnsmasqLeases(SharedFD lease_file) {$/;"	f	namespace:cuttlefish	typeref:typename:std::vector<DnsmasqDhcp4Lease>
+ParseFlags	common/libs/utils/flag_parser.cpp	/^bool ParseFlags(const std::vector<Flag>& flags,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+ParseGflags	host/commands/assemble_cvd/flag_feature.h	/^class ParseGflags : public FlagFeature {};$/;"	c	namespace:cuttlefish
+ParseGflagsImpl	host/commands/assemble_cvd/flag_feature.cpp	/^class ParseGflagsImpl : public ParseGflags {$/;"	c	namespace:cuttlefish	file:
+ParseHttpHeaders	host/frontend/webrtc/main.cpp	/^static std::vector<std::pair<std::string, std::string>> ParseHttpHeaders($/;"	f	typeref:typename:std::vector<std::pair<std::string,std::string>>	file:
+ParseInteger	common/libs/utils/flag_parser.cpp	/^std::optional<T> ParseInteger(const std::string& value) {$/;"	f	namespace:cuttlefish	typeref:typename:std::optional<T>
+ParseInterfaceAttributes	common/libs/device_config/host_device_config.cpp	/^  bool ParseInterfaceAttributes(const std::string& interface) {$/;"	f	class:cuttlefish::__anonf277137d0111::NetConfig	typeref:typename:bool	file:
+ParseInterfaceAttributes	common/libs/device_config/host_device_config.cpp	/^  bool ParseInterfaceAttributes(struct ifaddrs* ifa) {$/;"	f	class:cuttlefish::__anonf277137d0111::NetConfig	typeref:typename:bool	file:
+ParseIpAddress	common/libs/utils/network.cpp	/^bool ParseIpAddress(const std::string& address, std::uint8_t ip[4]) {$/;"	f	namespace:cuttlefish::__anoncaae79910111	typeref:typename:bool
+ParseKeyBlob	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster_error_t ParseKeyBlob($/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster_error_t
+ParseKeyBlob	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster_error_t TpmKeymasterContext::ParseKeyBlob($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster_error_t
+ParseMacAddress	common/libs/utils/network.cpp	/^bool ParseMacAddress(const std::string& address, std::uint8_t mac[6]) {$/;"	f	namespace:cuttlefish::__anoncaae79910111	typeref:typename:bool
+ParseMessage	host/frontend/webrtc/lib/streamer.cpp	/^bool ParseMessage(const uint8_t* data, size_t length, Json::Value* msg_out) {$/;"	f	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:bool
+ParseMiscInfo	host/commands/assemble_cvd/misc_info.cc	/^MiscInfo ParseMiscInfo(const std::string& misc_info_contents) {$/;"	f	namespace:cuttlefish	typeref:typename:MiscInfo
+ParsePortRange	host/commands/assemble_cvd/flags.cc	/^std::pair<uint16_t, uint16_t> ParsePortRange(const std::string& flag) {$/;"	f	namespace:cuttlefish::__anon145bfaab0111	typeref:typename:std::pair<uint16_t,uint16_t>
+ParseRawData	common/libs/confui/packet.cpp	/^static std::optional<ParsedPacket> ParseRawData($/;"	f	namespace:cuttlefish::confui::packet	typeref:typename:std::optional<ParsedPacket>	file:
+ParseTimeZone	host/commands/modem_simulator/misc_service.cpp	/^void MiscService::ParseTimeZone() {$/;"	f	class:cuttlefish::MiscService	typeref:typename:void
+ParsedPacket	common/libs/confui/packet_types.h	/^struct ParsedPacket {$/;"	s	namespace:cuttlefish::confui::packet
+PartitionInfo	host/libs/image_aggregator/image_aggregator.cc	/^struct PartitionInfo {$/;"	s	namespace:cuttlefish::__anon02806fd80111	file:
+Path	host/libs/config/config_flag.cpp	/^  const std::string& Path() override { return path_; }$/;"	f	class:cuttlefish::__anon2e549bd00111::SystemImageDirFlagImpl	typeref:typename:const std::string &	file:
+Path	host/libs/config/data_image.cpp	/^  const std::string& Path() const override { return path_; }$/;"	f	class:cuttlefish::FixedDataImagePath	typeref:typename:const std::string &	file:
+Path	host/libs/config/data_image.cpp	/^  const std::string& Path() const override { return path_; }$/;"	f	class:cuttlefish::FixedMiscImagePath	typeref:typename:const std::string &	file:
+Path	shared/config/cgroups.json	/^      "Path": "\/dev\/cpuset",$/;"	s	object:Cgroups.0
+Path	shared/config/task_profiles.json	/^            "Path": ""$/;"	s	object:Profiles.1.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": ""$/;"	s	object:Profiles.14.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": ""$/;"	s	object:Profiles.21.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": ""$/;"	s	object:Profiles.22.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": ""$/;"	s	object:Profiles.23.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": ""$/;"	s	object:Profiles.6.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "application"$/;"	s	object:Profiles.11.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "application\/background"$/;"	s	object:Profiles.10.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "application\/performance"$/;"	s	object:Profiles.12.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "background"$/;"	s	object:Profiles.0.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "background"$/;"	s	object:Profiles.13.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "background"$/;"	s	object:Profiles.20.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "camera-daemon"$/;"	s	object:Profiles.19.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "foreground"$/;"	s	object:Profiles.15.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "foreground"$/;"	s	object:Profiles.3.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "restricted"$/;"	s	object:Profiles.18.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "rt"$/;"	s	object:Profiles.5.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "system"$/;"	s	object:Profiles.30.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "system"$/;"	s	object:Profiles.8.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "system-background"$/;"	s	object:Profiles.17.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "system-background"$/;"	s	object:Profiles.2.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "system\/background"$/;"	s	object:Profiles.7.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "system\/performance"$/;"	s	object:Profiles.9.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "top-app"$/;"	s	object:Profiles.16.Actions.0.Params
+Path	shared/config/task_profiles.json	/^            "Path": "top-app"$/;"	s	object:Profiles.4.Actions.0.Params
+PathsForInstance	host/commands/stop/main.cc	/^std::set<std::string> PathsForInstance(const CuttlefishConfig& config,$/;"	f	namespace:cuttlefish::__anon65a808010111	typeref:typename:std::set<std::string>
+Payload	common/libs/confui/packet_types.h	/^using Payload = std::tuple<PayloadHeader, BufferType>;$/;"	t	namespace:cuttlefish::confui::packet	typeref:typename:std::tuple<PayloadHeader,BufferType>
+PayloadHeader	common/libs/confui/packet_types.h	/^struct PayloadHeader {$/;"	s	namespace:cuttlefish::confui::packet
+Pending	host/libs/allocd/request.h	/^  Pending,      \/\/ Request which has not been attempted$/;"	e	enum:cuttlefish::RequestStatus
+PerInstanceInternalPath	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::PerInstanceInternalPath($/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+PerInstancePath	host/commands/modem_simulator/cf_device_config.cpp	/^std::string DeviceConfig::PerInstancePath(const char* file_name) {$/;"	f	class:cuttlefish::modem::DeviceConfig	typeref:typename:std::string
+PerInstancePath	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::PerInstancePath($/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+PhysicalChannelConfigV1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^using PhysicalChannelConfigV1_4 =$/;"	t	typeref:typename:android::hardware::radio::V1_4::PhysicalChannelConfig	file:
+PinStatus	host/commands/modem_simulator/sim_service.h	/^  struct PinStatus {$/;"	s	class:cuttlefish::SimService
+Pipe	common/libs/fs/shared_fd.cpp	/^bool SharedFD::Pipe(SharedFD* fd0, SharedFD* fd1) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:bool
+Playing	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::Playing() const { return playing_; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+PlayoutDelay	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::PlayoutDelay(uint16_t* delayMS) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+PlayoutDeviceName	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::PlayoutDeviceName($/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+PlayoutDevices	host/frontend/webrtc/lib/audio_device.cpp	/^int16_t CfAudioDeviceModule::PlayoutDevices() { return 1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int16_t
+PlayoutIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::PlayoutIsAvailable(bool* available) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+PlayoutIsInitialized	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::PlayoutIsInitialized() const { return true; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+Poll	host/frontend/webrtc_operator/client_handler.cpp	/^HttpStatusCode ClientDynHandler::Poll($/;"	f	class:cuttlefish::ClientDynHandler	typeref:typename:HttpStatusCode
+PollConnectionHandler	host/frontend/webrtc_operator/client_handler.cpp	/^class PollConnectionHandler : public ClientHandler {$/;"	c	namespace:cuttlefish	file:
+PollConnectionStore	host/frontend/webrtc_operator/client_handler.h	/^class PollConnectionStore {$/;"	c	namespace:cuttlefish
+PollHandler	host/frontend/webrtc_operator/client_handler.cpp	/^PollHandler::PollHandler(struct lws* wsi, PollConnectionStore* poll_store)$/;"	f	class:cuttlefish::PollHandler
+PollHandler	host/frontend/webrtc_operator/client_handler.h	/^class PollHandler : public ClientDynHandler {$/;"	c	namespace:cuttlefish
+PollMessages	host/frontend/webrtc_operator/client_handler.cpp	/^  std::vector<Json::Value> PollMessages() {$/;"	f	class:cuttlefish::PollConnectionHandler	typeref:typename:std::vector<Json::Value>	file:
+PollingConnector	host/frontend/webrtc_operator/assets/js/server_connector.js	/^class PollingConnector extends Connector {$/;"	c
+Pop	common/libs/concurrency/multiplexer.h	/^  T Pop() {$/;"	f	class:cuttlefish::Multiplexer	typeref:typename:T
+Pop	common/libs/concurrency/multiplexer.h	/^  T Pop(QueueSelector selector) {$/;"	f	class:cuttlefish::Multiplexer	typeref:typename:T
+Pop	common/libs/concurrency/thread_safe_queue.h	/^  T Pop() {$/;"	f	class:cuttlefish::ThreadSafeQueue	typeref:typename:T
+Pop	host/libs/screen_connector/screen_connector_multiplexer.h	/^  ProcessedFrameType Pop() {$/;"	f	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:ProcessedFrameType
+Pop	host/libs/screen_connector/screen_connector_queue.h	/^  T Pop() {$/;"	f	class:cuttlefish::ScreenConnectorQueue	typeref:typename:T
+PopAll	common/libs/concurrency/thread_safe_queue.h	/^  QueueImpl PopAll() {$/;"	f	class:cuttlefish::ThreadSafeQueue	typeref:typename:QueueImpl
+PopList	common/libs/net/netlink_request.cpp	/^void NetlinkRequest::PopList() {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void
+PopulateEglAvailability	host/libs/graphics_detector/graphics_detector.cpp	/^void PopulateEglAvailability(GraphicsAvailability* availability) {$/;"	f	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:void
+PopulateGlAvailability	host/libs/graphics_detector/graphics_detector.cpp	/^void PopulateGlAvailability(GraphicsAvailability* availability) {$/;"	f	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:void
+PopulateGles1Availability	host/libs/graphics_detector/graphics_detector.cpp	/^void PopulateGles1Availability(GraphicsAvailability* availability) {$/;"	f	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:void
+PopulateGles2Availability	host/libs/graphics_detector/graphics_detector.cpp	/^void PopulateGles2Availability(GraphicsAvailability* availability) {$/;"	f	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:void
+PopulateVulkanAvailability	host/libs/graphics_detector/graphics_detector.cpp	/^void PopulateVulkanAvailability(GraphicsAvailability* availability) {$/;"	f	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:void
+PortRangeSocketFactory	host/frontend/webrtc/lib/port_range_socket_factory.cpp	/^PortRangeSocketFactory::PortRangeSocketFactory($/;"	f	class:cuttlefish::webrtc_streaming::PortRangeSocketFactory
+PortRangeSocketFactory	host/frontend/webrtc/lib/port_range_socket_factory.h	/^class PortRangeSocketFactory : public rtc::BasicPacketSocketFactory {$/;"	c	namespace:cuttlefish::webrtc_streaming
+Post	host/commands/modem_simulator/thread_looper.cpp	/^ThreadLooper::Serial ThreadLooper::Post(Callback cb) {$/;"	f	class:cuttlefish::ThreadLooper	typeref:typename:ThreadLooper::Serial
+PostWithDelay	host/commands/modem_simulator/thread_looper.cpp	/^ThreadLooper::Serial ThreadLooper::PostWithDelay($/;"	f	class:cuttlefish::ThreadLooper	typeref:typename:ThreadLooper::Serial
+PowerwashCvdMain	host/commands/powerwash_cvd/powerwash_cvd.cc	/^int PowerwashCvdMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish::__anon7281a6ce0111	typeref:typename:int
+PowerwashFiles	host/commands/run_cvd/server_loop.cpp	/^  bool PowerwashFiles() {$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:bool	file:
+PowerwashTest	tests/powerwash/src/com/android/cuttlefish/tests/PowerwashTest.java	/^public class PowerwashTest extends BaseHostJUnit4Test {$/;"	c
+PrefixLength	common/libs/net/network_interface.h	/^  int PrefixLength() const {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:int
+PrepareStream	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::PrepareStream(StreamControlCommand& cmd) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+PrimaryKeyBuilder	host/commands/secure_env/primary_key_builder.cpp	/^PrimaryKeyBuilder::PrimaryKeyBuilder() : public_area_({}) {$/;"	f	class:cuttlefish::PrimaryKeyBuilder
+PrimaryKeyBuilder	host/commands/secure_env/primary_key_builder.h	/^class PrimaryKeyBuilder {$/;"	c	namespace:cuttlefish
+PrintAll	host/commands/run_cvd/reporting.cpp	/^void DiagnosticInformation::PrintAll($/;"	f	class:cuttlefish::DiagnosticInformation	typeref:typename:void
+Process	common/libs/utils/flag_parser.cpp	/^Flag::FlagProcessResult Flag::Process($/;"	f	class:cuttlefish::Flag	typeref:typename:Flag::FlagProcessResult
+Process	host/commands/assemble_cvd/flag_feature.cpp	/^  bool Process(std::vector<std::string>& args) override {$/;"	f	class:cuttlefish::ParseGflagsImpl	typeref:typename:bool	file:
+Process	host/libs/config/adb/flags.cpp	/^  bool Process(std::vector<std::string>& args) override {$/;"	f	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:bool	file:
+Process	host/libs/config/config_flag.cpp	/^  bool Process(std::vector<std::string>& args) override {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:bool	file:
+Process	host/libs/config/config_flag.cpp	/^  bool Process(std::vector<std::string>& args) override {$/;"	f	class:cuttlefish::__anon2e549bd00111::SystemImageDirFlagImpl	typeref:typename:bool	file:
+Process	host/libs/config/config_flag.cpp	/^  bool Process(std::vector<std::string>&) override { return true; }$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagPlaceholderImpl	typeref:typename:bool	file:
+Process	host/libs/config/config_flag.cpp	/^  bool Process(std::vector<std::string>&) override {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigReader	typeref:typename:bool	file:
+Process	host/libs/config/custom_actions.cpp	/^  bool Process(std::vector<std::string>& args) override {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:bool	file:
+ProcessEvents	guest/commands/vsoc_input_service/vsoc_input_service.cpp	/^bool VSoCInputService::ProcessEvents() {$/;"	f	class:VSoCInputService	typeref:typename:bool
+ProcessFlags	host/libs/config/feature.cpp	/^bool FlagFeature::ProcessFlags(const std::vector<FlagFeature*>& features,$/;"	f	class:cuttlefish::FlagFeature	typeref:typename:bool
+ProcessLeader	host/commands/run_cvd/boot_state_machine.cc	/^class ProcessLeader : public Feature {$/;"	c	namespace:cuttlefish::__anone7ed366f0111	file:
+ProcessMessage	host/commands/secure_env/gatekeeper_responder.cpp	/^bool GatekeeperResponder::ProcessMessage() {$/;"	f	class:cuttlefish::GatekeeperResponder	typeref:typename:bool
+ProcessMessage	host/commands/secure_env/keymaster_responder.cpp	/^bool KeymasterResponder::ProcessMessage() {$/;"	f	class:cuttlefish::KeymasterResponder	typeref:typename:bool
+ProcessMonitor	host/commands/run_cvd/process_monitor.cc	/^ProcessMonitor::ProcessMonitor(bool restart_subprocesses)$/;"	f	class:cuttlefish::ProcessMonitor
+ProcessMonitor	host/commands/run_cvd/process_monitor.h	/^class ProcessMonitor {$/;"	c	namespace:cuttlefish
+ProcessSubscriptions	host/commands/kernel_log_monitor/kernel_log_server.cc	/^void ProcessSubscriptions($/;"	f	namespace:__anonfa7764770111	typeref:typename:void
+ProductName	host/commands/fetcher/build_api.cc	/^std::string BuildApi::ProductName(const DeviceBuild& build) {$/;"	f	class:cuttlefish::BuildApi	typeref:typename:std::string
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "LowIoPriority", "TimerSlackHigh" ]$/;"	a	object:AggregateProfiles.1
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "HighEnergySaving", "ProcessCapacityLow", "LowIoPriority", "TimerSlackHigh" /;"	a	object:AggregateProfiles.7
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "HighIoPriority", "TimerSlackNormal" ]$/;"	a	object:AggregateProfiles.2
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "HighPerformance", "ProcessCapacityHigh", "HighIoPriority", "TimerSlackNorma/;"	a	object:AggregateProfiles.8
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "MaxIoPriority", "TimerSlackNormal" ]$/;"	a	object:AggregateProfiles.3
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "MaxPerformance", "ProcessCapacityMax", "MaxIoPriority", "TimerSlackNormal" /;"	a	object:AggregateProfiles.9
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "RealtimePerformance", "MaxIoPriority", "TimerSlackNormal" ]$/;"	a	object:AggregateProfiles.5
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "ServiceCapacityLow", "TimerSlackNormal" ]$/;"	a	object:AggregateProfiles.10
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "ServiceCapacityRestricted", "TimerSlackNormal" ]$/;"	a	object:AggregateProfiles.11
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "ServicePerformance", "LowIoPriority", "TimerSlackNormal" ]$/;"	a	object:AggregateProfiles.4
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "TimerSlackNormal" ]$/;"	a	object:AggregateProfiles.0
+Profiles	shared/config/task_profiles.json	/^      "Profiles": [ "TimerSlackNormal" ]$/;"	a	object:AggregateProfiles.6
+Profiles	shared/config/task_profiles.json	/^  "Profiles": [$/;"	a
+PromptUserConfirmation	guest/hals/confirmationui/guest_session.cpp	/^GuestSession::ResultTriple GuestSession::PromptUserConfirmation() {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:GuestSession::ResultTriple
+ProtectiveMbr	host/libs/image_aggregator/image_aggregator.cc	/^MasterBootRecord ProtectiveMbr(std::uint64_t size) {$/;"	f	namespace:cuttlefish::__anon02806fd80111	typeref:typename:MasterBootRecord
+ProxyKeymasterContext	host/commands/secure_env/proxy_keymaster_context.h	/^  ProxyKeymasterContext(KeymasterContext& wrapped) : wrapped_(wrapped) {}$/;"	f	class:cuttlefish::ProxyKeymasterContext
+ProxyKeymasterContext	host/commands/secure_env/proxy_keymaster_context.h	/^class ProxyKeymasterContext : public keymaster::KeymasterContext {$/;"	c	namespace:cuttlefish
+PublicDeps	host/commands/run_cvd/launch.cc	/^using PublicDeps = fruit::Required<const CuttlefishConfig, VmManager,$/;"	t	namespace:cuttlefish	typeref:typename:fruit::Required<const CuttlefishConfig,VmManager,const CuttlefishConfig::InstanceSpecific>	file:
+Push	common/libs/concurrency/multiplexer.h	/^  void Push(const int idx, T&& t) {$/;"	f	class:cuttlefish::Multiplexer	typeref:typename:void
+Push	common/libs/concurrency/thread_safe_queue.h	/^  bool Push(U&& u) {$/;"	f	class:cuttlefish::ThreadSafeQueue	typeref:typename:bool
+Push	guest/hals/confirmationui/guest_session.h	/^    void Push(std::unique_ptr<ConfUiMessage>&& msg) { incoming_msg_queue_.Push(std::move(msg)); /;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:void
+Push	host/libs/screen_connector/screen_connector_queue.h	/^  void Push(T&& item) {$/;"	f	class:cuttlefish::ScreenConnectorQueue	typeref:typename:void
+PushList	common/libs/net/netlink_request.cpp	/^void NetlinkRequest::PushList(uint16_t type) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void
+PushToAndroidQueue	host/libs/screen_connector/screen_connector_multiplexer.h	/^  void PushToAndroidQueue(ProcessedFrameType&& t) {$/;"	f	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:void
+PushToConfUiQueue	host/libs/screen_connector/screen_connector_multiplexer.h	/^  void PushToConfUiQueue(ProcessedFrameType&& t) {$/;"	f	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:void
+QCOW2_MAGIC	host/libs/image_aggregator/image_aggregator.cc	/^static const std::string QCOW2_MAGIC = "QFI\\xfb";$/;"	v	namespace:cuttlefish::__anon02806fd80111	typeref:typename:const std::string	file:
+QCowHeader	host/libs/image_aggregator/image_aggregator.cc	/^struct __attribute__((packed)) QCowHeader {$/;"	s	namespace:cuttlefish::__anon02806fd80111	file:
+QUERY	host/commands/modem_simulator/sim_service.h	/^      QUERY = 2,$/;"	e	enum:cuttlefish::SimService::FacilityLock::Mode
+QemuManager	host/libs/vm_manager/qemu_manager.cpp	/^QemuManager::QemuManager(Arch arch) : arch_(arch) {}$/;"	f	class:cuttlefish::vm_manager::QemuManager
+QemuManager	host/libs/vm_manager/qemu_manager.h	/^class QemuManager : public VmManager {$/;"	c	namespace:cuttlefish::vm_manager
+QueryVideoEncoder	host/frontend/webrtc/lib/vp8only_encoder_factory.cpp	/^webrtc::VideoEncoderFactory::CodecInfo VP8OnlyEncoderFactory::QueryVideoEncoder($/;"	f	class:cuttlefish::webrtc_streaming::VP8OnlyEncoderFactory	typeref:typename:webrtc::VideoEncoderFactory::CodecInfo
+Queue	guest/hals/confirmationui/guest_session.h	/^    using Queue = cuttlefish::ThreadSafeQueue<std::unique_ptr<ConfUiMessage>>;$/;"	t	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:cuttlefish::ThreadSafeQueue<std::unique_ptr<ConfUiMessage>>
+Queue	host/libs/screen_connector/screen_connector_multiplexer.h	/^  using Queue = ScreenConnectorQueue<ProcessedFrameType>;$/;"	t	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:ScreenConnectorQueue<ProcessedFrameType>
+QueueFullHandler	common/libs/concurrency/thread_safe_queue.h	/^  using QueueFullHandler = std::function<void(QueueImpl*)>;$/;"	t	class:cuttlefish::ThreadSafeQueue
+QueueFullHandler	guest/hals/confirmationui/guest_session.h	/^    void QueueFullHandler(QueueImpl* queue_impl) {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:void
+QueueImpl	common/libs/concurrency/thread_safe_queue.h	/^  using QueueImpl = std::deque<T>;$/;"	t	class:cuttlefish::ThreadSafeQueue	typeref:typename:std::deque<T>
+QueueImpl	guest/hals/confirmationui/guest_session.h	/^    using QueueImpl = Queue::QueueImpl;$/;"	t	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:Queue::QueueImpl
+QueuePtr	common/libs/concurrency/multiplexer.h	/^  using QueuePtr = std::unique_ptr<Queue>;$/;"	t	class:cuttlefish::Multiplexer	typeref:typename:std::unique_ptr<Queue>
+QueueSelector	common/libs/concurrency/multiplexer.h	/^  using QueueSelector = std::function<int(void)>;$/;"	t	class:cuttlefish::Multiplexer
+RADIO_ACCESS_NET_CDMA2000	guest/hals/ril/reference-libril/ril.h	/^    RADIO_ACCESS_NET_CDMA2000 = 4, \/* CDMA 2000 network *\/$/;"	e	enum:__anon0bfbaecf5503
+RADIO_ACCESS_NET_EUTRAN	guest/hals/ril/reference-libril/ril.h	/^    RADIO_ACCESS_NET_EUTRAN = 3, \/* Evolved Universal Terrestrial Radio Access Network *\/$/;"	e	enum:__anon0bfbaecf5503
+RADIO_ACCESS_NET_GERAN	guest/hals/ril/reference-libril/ril.h	/^    RADIO_ACCESS_NET_GERAN = 1, \/* GSM EDGE Radio Access Network *\/$/;"	e	enum:__anon0bfbaecf5503
+RADIO_ACCESS_NET_IWLAN	guest/hals/ril/reference-libril/ril.h	/^    RADIO_ACCESS_NET_IWLAN = 5, \/* Interworking Wireless LAN *\/$/;"	e	enum:__anon0bfbaecf5503
+RADIO_ACCESS_NET_NGRAN	guest/hals/ril/reference-libril/ril.h	/^    RADIO_ACCESS_NET_NGRAN = 6, \/* Next-Generation Radio Access Network *\/$/;"	e	enum:__anon0bfbaecf5503
+RADIO_ACCESS_NET_UTRAN	guest/hals/ril/reference-libril/ril.h	/^    RADIO_ACCESS_NET_UTRAN = 2, \/* Universal Terrestrial Radio Access Network *\/$/;"	e	enum:__anon0bfbaecf5503
+RADIO_ACCESS_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RADIO_ACCESS_UNKNOWN = 0, \/* Unknown access network *\/$/;"	e	enum:__anon0bfbaecf5503
+RADIO_STATE_OFF	guest/hals/ril/reference-libril/ril.h	/^    RADIO_STATE_OFF = 0,                   \/* Radio explictly powered off (eg CFUN=0) *\/$/;"	e	enum:__anon0bfbaecf0403
+RADIO_STATE_OFF	host/commands/modem_simulator/network_service.h	/^    RADIO_STATE_OFF,$/;"	e	enum:cuttlefish::NetworkService::RadioState
+RADIO_STATE_ON	guest/hals/ril/reference-libril/ril.h	/^    RADIO_STATE_ON = 10                    \/* Radio is on *\/$/;"	e	enum:__anon0bfbaecf0403
+RADIO_STATE_ON	host/commands/modem_simulator/network_service.h	/^    RADIO_STATE_ON,$/;"	e	enum:cuttlefish::NetworkService::RadioState
+RADIO_STATE_UNAVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    RADIO_STATE_UNAVAILABLE = 1,           \/* Radio unavailable (eg, resetting or not booted) */;"	e	enum:__anon0bfbaecf0403
+RADIO_TECH_1xRTT	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_1xRTT =  6,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_3GPP	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_3GPP = 1, \/* 3GPP Technologies - GSM, WCDMA *\/$/;"	e	enum:__anon0bfbaecf1703
+RADIO_TECH_3GPP2	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_3GPP2 = 2 \/* 3GPP2 Technologies - CDMA *\/$/;"	e	enum:__anon0bfbaecf1703
+RADIO_TECH_EDGE	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_EDGE = 2,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_EHRPD	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_EHRPD = 13,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_EVDO_0	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_EVDO_0 = 7,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_EVDO_A	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_EVDO_A = 8,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_EVDO_B	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_EVDO_B = 12,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_GPRS	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_GPRS = 1,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_GSM	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_GSM = 16, \/\/ Only supports voice$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_HSDPA	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_HSDPA = 9,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_HSPA	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_HSPA = 11,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_HSPAP	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_HSPAP = 15, \/\/ HSPA+$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_HSUPA	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_HSUPA = 10,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_IS95A	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_IS95A = 4,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_IS95B	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_IS95B = 5,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_IWLAN	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_IWLAN = 18,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_LTE	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_LTE = 14,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_LTE_CA	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_LTE_CA = 19,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_NR	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_NR = 20$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_TD_SCDMA	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_TD_SCDMA = 17,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_UMTS	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_UMTS = 3,$/;"	e	enum:__anon0bfbaecf0503
+RADIO_TECH_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RADIO_TECH_UNKNOWN = 0,$/;"	e	enum:__anon0bfbaecf0503
+RAF_1xRTT	guest/hals/ril/reference-libril/ril.h	/^    RAF_1xRTT = (1 << RADIO_TECH_1xRTT),$/;"	e	enum:__anon0bfbaecf0603
+RAF_EDGE	guest/hals/ril/reference-libril/ril.h	/^    RAF_EDGE = (1 << RADIO_TECH_EDGE),$/;"	e	enum:__anon0bfbaecf0603
+RAF_EHRPD	guest/hals/ril/reference-libril/ril.h	/^    RAF_EHRPD = (1 << RADIO_TECH_EHRPD),$/;"	e	enum:__anon0bfbaecf0603
+RAF_EVDO_0	guest/hals/ril/reference-libril/ril.h	/^    RAF_EVDO_0 = (1 << RADIO_TECH_EVDO_0),$/;"	e	enum:__anon0bfbaecf0603
+RAF_EVDO_A	guest/hals/ril/reference-libril/ril.h	/^    RAF_EVDO_A = (1 << RADIO_TECH_EVDO_A),$/;"	e	enum:__anon0bfbaecf0603
+RAF_EVDO_B	guest/hals/ril/reference-libril/ril.h	/^    RAF_EVDO_B = (1 << RADIO_TECH_EVDO_B),$/;"	e	enum:__anon0bfbaecf0603
+RAF_GPRS	guest/hals/ril/reference-libril/ril.h	/^    RAF_GPRS = (1 << RADIO_TECH_GPRS),$/;"	e	enum:__anon0bfbaecf0603
+RAF_GSM	guest/hals/ril/reference-libril/ril.h	/^    RAF_GSM = (1 << RADIO_TECH_GSM),$/;"	e	enum:__anon0bfbaecf0603
+RAF_HSDPA	guest/hals/ril/reference-libril/ril.h	/^    RAF_HSDPA = (1 << RADIO_TECH_HSDPA),$/;"	e	enum:__anon0bfbaecf0603
+RAF_HSPA	guest/hals/ril/reference-libril/ril.h	/^    RAF_HSPA = (1 << RADIO_TECH_HSPA),$/;"	e	enum:__anon0bfbaecf0603
+RAF_HSPAP	guest/hals/ril/reference-libril/ril.h	/^    RAF_HSPAP = (1 << RADIO_TECH_HSPAP),$/;"	e	enum:__anon0bfbaecf0603
+RAF_HSUPA	guest/hals/ril/reference-libril/ril.h	/^    RAF_HSUPA = (1 << RADIO_TECH_HSUPA),$/;"	e	enum:__anon0bfbaecf0603
+RAF_IS95A	guest/hals/ril/reference-libril/ril.h	/^    RAF_IS95A = (1 << RADIO_TECH_IS95A),$/;"	e	enum:__anon0bfbaecf0603
+RAF_IS95B	guest/hals/ril/reference-libril/ril.h	/^    RAF_IS95B = (1 << RADIO_TECH_IS95B),$/;"	e	enum:__anon0bfbaecf0603
+RAF_LTE	guest/hals/ril/reference-libril/ril.h	/^    RAF_LTE = (1 << RADIO_TECH_LTE),$/;"	e	enum:__anon0bfbaecf0603
+RAF_LTE_CA	guest/hals/ril/reference-libril/ril.h	/^    RAF_LTE_CA = (1 << RADIO_TECH_LTE_CA),$/;"	e	enum:__anon0bfbaecf0603
+RAF_NR	guest/hals/ril/reference-libril/ril.h	/^    RAF_NR = (1 << RADIO_TECH_NR)$/;"	e	enum:__anon0bfbaecf0603
+RAF_TD_SCDMA	guest/hals/ril/reference-libril/ril.h	/^    RAF_TD_SCDMA = (1 << RADIO_TECH_TD_SCDMA),$/;"	e	enum:__anon0bfbaecf0603
+RAF_UMTS	guest/hals/ril/reference-libril/ril.h	/^    RAF_UMTS = (1 << RADIO_TECH_UMTS),$/;"	e	enum:__anon0bfbaecf0603
+RAF_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RAF_UNKNOWN =  (1 <<  RADIO_TECH_UNKNOWN),$/;"	e	enum:__anon0bfbaecf0603
+RC_PHASE_APPLY	guest/hals/ril/reference-libril/ril.h	/^    RC_PHASE_APPLY      = 2,  \/\/ APPLY is sent after all LM's receive START and returned$/;"	e	enum:__anon0bfbaecf0803
+RC_PHASE_CONFIGURED	guest/hals/ril/reference-libril/ril.h	/^    RC_PHASE_CONFIGURED = 0,  \/\/ LM is configured is initial value and value after FINISH comp/;"	e	enum:__anon0bfbaecf0803
+RC_PHASE_FINISH	guest/hals/ril/reference-libril/ril.h	/^    RC_PHASE_FINISH     = 4   \/\/ FINISH is sent after all commands have completed. If an error$/;"	e	enum:__anon0bfbaecf0803
+RC_PHASE_START	guest/hals/ril/reference-libril/ril.h	/^    RC_PHASE_START      = 1,  \/\/ START is sent before Apply and indicates that an APPLY will b/;"	e	enum:__anon0bfbaecf0803
+RC_PHASE_UNSOL_RSP	guest/hals/ril/reference-libril/ril.h	/^    RC_PHASE_UNSOL_RSP  = 3,  \/\/ UNSOL_RSP is sent with RIL_UNSOL_RADIO_CAPABILITY$/;"	e	enum:__anon0bfbaecf0803
+RC_STATUS_FAIL	guest/hals/ril/reference-libril/ril.h	/^    RC_STATUS_FAIL       = 2, \/\/ Tell modem the action transaction of set radio$/;"	e	enum:__anon0bfbaecf0903
+RC_STATUS_NONE	guest/hals/ril/reference-libril/ril.h	/^    RC_STATUS_NONE       = 0, \/\/ This parameter has no meaning with RC_PHASE_START,$/;"	e	enum:__anon0bfbaecf0903
+RC_STATUS_SUCCESS	guest/hals/ril/reference-libril/ril.h	/^    RC_STATUS_SUCCESS    = 1, \/\/ Tell modem the action transaction of set radio$/;"	e	enum:__anon0bfbaecf0903
+READ_ONLY	host/libs/image_aggregator/cdisk_spec.proto	/^  READ_ONLY = 0;$/;"	e	enum:ReadWriteCapability
+READ_WRITE	host/libs/image_aggregator/cdisk_spec.proto	/^  READ_WRITE = 1;$/;"	e	enum:ReadWriteCapability
+RECEIVE_DATA	host/commands/modem_simulator/stk_service.h	/^    RECEIVE_DATA        = 0x42,$/;"	e	enum:cuttlefish::StkService::CommandType
+REFRESH	host/commands/modem_simulator/stk_service.h	/^    REFRESH             = 0x01,$/;"	e	enum:cuttlefish::StkService::CommandType
+REFRESH_URL	host/commands/fetcher/credential_source.cc	/^std::string REFRESH_URL = "http:\/\/metadata.google.internal\/computeMetadata\/"$/;"	v	namespace:cuttlefish::__anone81850a20111	typeref:typename:std::string
+REFRESH_WINDOW	host/commands/fetcher/credential_source.cc	/^std::chrono::steady_clock::duration REFRESH_WINDOW =$/;"	v	namespace:cuttlefish::__anone81850a20111	typeref:typename:std::chrono::steady_clock::duration
+REGISTRATION	host/commands/modem_simulator/sup_service.h	/^      REGISTRATION  = 3,$/;"	e	enum:cuttlefish::SupService::CallForwardInfo::CallForwardInfoStatus
+REGISTRATION_UNSOL_DISABLED	host/commands/modem_simulator/network_service.h	/^      REGISTRATION_UNSOL_DISABLED     = 0,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::RegistrationUnsolMode
+REGISTRATION_UNSOL_ENABLED	host/commands/modem_simulator/network_service.h	/^      REGISTRATION_UNSOL_ENABLED      = 1,$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::RegistrationUnsolMode
+REGISTRATION_UNSOL_ENABLED_FULL	host/commands/modem_simulator/network_service.h	/^      REGISTRATION_UNSOL_ENABLED_FULL = 2$/;"	e	enum:cuttlefish::NetworkService::NetworkRegistrationStatus::RegistrationUnsolMode
+REG_DATA_STATE_LEN	guest/hals/ril/reference-ril/reference-ril.c	/^#define REG_DATA_STATE_LEN /;"	d	file:
+REG_STATE_LEN	guest/hals/ril/reference-ril/reference-ril.c	/^#define REG_STATE_LEN /;"	d	file:
+RELEASE	common/libs/concurrency/thread_annotations.h	/^#define RELEASE(/;"	d
+RELEASE_SHARED	common/libs/concurrency/thread_annotations.h	/^#define RELEASE_SHARED(/;"	d
+REMOTE	host/commands/modem_simulator/channel_monitor.h	/^  enum ClientType { RIL, REMOTE };$/;"	e	enum:cuttlefish::Client::ClientType
+REMOTE_KEYMASTER_H_	guest/hals/keymaster/remote/remote_keymaster.h	/^#define REMOTE_KEYMASTER_H_$/;"	d
+REMOTE_KEYMASTER_H_	guest/hals/keymint/remote/remote_keymaster.h	/^#define REMOTE_KEYMASTER_H_$/;"	d
+REPOLL_CALLS_COUNT_MAX	guest/hals/ril/reference-ril/reference-ril.c	/^#define REPOLL_CALLS_COUNT_MAX /;"	d	file:
+REQUIRES	common/libs/concurrency/thread_annotations.h	/^#define REQUIRES(/;"	d
+REQUIRES_SHARED	common/libs/concurrency/thread_annotations.h	/^#define REQUIRES_SHARED(/;"	d
+RESPONSE_DATA_FILE_DES_FLAG	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_FILE_DES_FLAG /;"	d	file:
+RESPONSE_DATA_FILE_DES_LEN_FLAG	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_FILE_DES_LEN_FLAG /;"	d	file:
+RESPONSE_DATA_FILE_RECORD_LEN_1	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_FILE_RECORD_LEN_1 /;"	d	file:
+RESPONSE_DATA_FILE_RECORD_LEN_2	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_FILE_RECORD_LEN_2 /;"	d	file:
+RESPONSE_DATA_FILE_SIZE_1	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_FILE_SIZE_1 /;"	d	file:
+RESPONSE_DATA_FILE_SIZE_2	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_FILE_SIZE_2 /;"	d	file:
+RESPONSE_DATA_FILE_TYPE	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_FILE_TYPE /;"	d	file:
+RESPONSE_DATA_RECORD_LENGTH	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_RECORD_LENGTH /;"	d	file:
+RESPONSE_DATA_STRUCTURE	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_DATA_STRUCTURE /;"	d	file:
+RESPONSE_EF_SIZE	guest/hals/ril/reference-ril/reference-ril.c	/^#define RESPONSE_EF_SIZE /;"	d	file:
+RESPONSE_SOLICITED	guest/hals/ril/reference-libril/ril_internal.h	/^#define RESPONSE_SOLICITED /;"	d
+RESPONSE_SOLICITED_ACK	guest/hals/ril/reference-libril/ril_internal.h	/^#define RESPONSE_SOLICITED_ACK /;"	d
+RESPONSE_SOLICITED_ACK_EXP	guest/hals/ril/reference-libril/ril_internal.h	/^#define RESPONSE_SOLICITED_ACK_EXP /;"	d
+RESPONSE_UNSOLICITED	guest/hals/ril/reference-libril/ril_internal.h	/^#define RESPONSE_UNSOLICITED /;"	d
+RESPONSE_UNSOLICITED_ACK_EXP	guest/hals/ril/reference-libril/ril_internal.h	/^#define RESPONSE_UNSOLICITED_ACK_EXP /;"	d
+RETURN_CAPABILITY	common/libs/concurrency/thread_annotations.h	/^#define RETURN_CAPABILITY(/;"	d
+RIL	host/commands/modem_simulator/channel_monitor.h	/^  enum ClientType { RIL, REMOTE };$/;"	e	enum:cuttlefish::Client::ClientType
+RIL1_SERVICE_NAME	guest/hals/ril/reference-libril/ril_internal.h	/^#define RIL1_SERVICE_NAME /;"	d
+RIL2_SERVICE_NAME	guest/hals/ril/reference-libril/ril_internal.h	/^#define RIL2_SERVICE_NAME /;"	d
+RIL3_SERVICE_NAME	guest/hals/ril/reference-libril/ril_internal.h	/^#define RIL3_SERVICE_NAME /;"	d
+RIL4_SERVICE_NAME	guest/hals/ril/reference-libril/ril_internal.h	/^#define RIL4_SERVICE_NAME /;"	d
+RILC_LOG	guest/hals/ril/reference-libril/ril_internal.h	/^#define RILC_LOG /;"	d
+RILConfig	common/libs/device_config/device_config.proto	/^  message RILConfig {$/;"	m	message:cuttlefish.DeviceConfig
+RIL_APN_TYPE_ALL	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_ALL          = 0xFFFFFFFF    \/\/ All APN types$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_CBS	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_CBS          = 0x80,         \/\/ APN type for CBS$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_DEFAULT	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_DEFAULT      = 0x1,          \/\/ APN type for default data traffic$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_DUN	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_DUN          = 0x8,          \/\/ APN type for DUN traffic$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_EMERGENCY	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_EMERGENCY    = 0x200,        \/\/ APN type for Emergency PDN. This is not an IA/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_FOTA	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_FOTA         = 0x20,         \/\/ APN type for FOTA$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_HIPRI	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_HIPRI        = 0x10,         \/\/ APN type for HiPri traffic$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_IA	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_IA           = 0x100,        \/\/ APN type for IA Initial Attach APN$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_IMS	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_IMS          = 0x40,         \/\/ APN type for IMS$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_MCX	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_MCX          = 0x400,        \/\/ APN type for Mission Critical Service$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_MMS	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_MMS          = 0x2,          \/\/ APN type for MMS traffic$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_SUPL	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_SUPL         = 0x4,          \/\/ APN type for SUPL assisted GPS$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_UNKNOWN      = 0x0,          \/\/ Unknown$/;"	e	enum:__anon0bfbaecfa003
+RIL_APN_TYPE_XCAP	guest/hals/ril/reference-libril/ril.h	/^    RIL_APN_TYPE_XCAP         = 0x800,        \/\/ APN type for XCAP$/;"	e	enum:__anon0bfbaecfa003
+RIL_APPSTATE_DETECTED	guest/hals/ril/reference-libril/ril.h	/^    RIL_APPSTATE_DETECTED              = 1,$/;"	e	enum:__anon0bfbaecf3403
+RIL_APPSTATE_PIN	guest/hals/ril/reference-libril/ril.h	/^    RIL_APPSTATE_PIN                   = 2, \/* If PIN1 or UPin is required *\/$/;"	e	enum:__anon0bfbaecf3403
+RIL_APPSTATE_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_APPSTATE_PUK                   = 3, \/* If PUK1 or Puk for UPin is required *\/$/;"	e	enum:__anon0bfbaecf3403
+RIL_APPSTATE_READY	guest/hals/ril/reference-libril/ril.h	/^    RIL_APPSTATE_READY                 = 5$/;"	e	enum:__anon0bfbaecf3403
+RIL_APPSTATE_SUBSCRIPTION_PERSO	guest/hals/ril/reference-libril/ril.h	/^    RIL_APPSTATE_SUBSCRIPTION_PERSO    = 4, \/* perso_substate should be look at$/;"	e	enum:__anon0bfbaecf3403
+RIL_APPSTATE_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RIL_APPSTATE_UNKNOWN               = 0,$/;"	e	enum:__anon0bfbaecf3403
+RIL_APPTYPE_CSIM	guest/hals/ril/reference-libril/ril.h	/^  RIL_APPTYPE_CSIM    = 4,$/;"	e	enum:__anon0bfbaecf3603
+RIL_APPTYPE_ISIM	guest/hals/ril/reference-libril/ril.h	/^  RIL_APPTYPE_ISIM    = 5$/;"	e	enum:__anon0bfbaecf3603
+RIL_APPTYPE_RUIM	guest/hals/ril/reference-libril/ril.h	/^  RIL_APPTYPE_RUIM    = 3,$/;"	e	enum:__anon0bfbaecf3603
+RIL_APPTYPE_SIM	guest/hals/ril/reference-libril/ril.h	/^  RIL_APPTYPE_SIM     = 1,$/;"	e	enum:__anon0bfbaecf3603
+RIL_APPTYPE_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^  RIL_APPTYPE_UNKNOWN = 0,$/;"	e	enum:__anon0bfbaecf3603
+RIL_APPTYPE_USIM	guest/hals/ril/reference-libril/ril.h	/^  RIL_APPTYPE_USIM    = 2,$/;"	e	enum:__anon0bfbaecf3603
+RIL_ActivityStatsInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_ActivityStatsInfo;$/;"	t	typeref:struct:__anon0bfbaecf9f08
+RIL_ApnTypes	guest/hals/ril/reference-libril/ril.h	/^} RIL_ApnTypes;$/;"	t	typeref:enum:__anon0bfbaecfa003
+RIL_AppState	guest/hals/ril/reference-libril/ril.h	/^} RIL_AppState;$/;"	t	typeref:enum:__anon0bfbaecf3403
+RIL_AppStatus	guest/hals/ril/reference-libril/ril.h	/^} RIL_AppStatus;$/;"	t	typeref:struct:__anon0bfbaecf3808
+RIL_AppStatusV1_5	guest/hals/ril/reference-libril/ril.h	/^} RIL_AppStatusV1_5;$/;"	t	typeref:struct:__anon0bfbaecf3e08
+RIL_AppType	guest/hals/ril/reference-libril/ril.h	/^} RIL_AppType;$/;"	t	typeref:enum:__anon0bfbaecf3603
+RIL_CALL_ACTIVE	guest/hals/ril/reference-libril/ril.h	/^    RIL_CALL_ACTIVE = 0,$/;"	e	enum:__anon0bfbaecf0303
+RIL_CALL_ALERTING	guest/hals/ril/reference-libril/ril.h	/^    RIL_CALL_ALERTING = 3,   \/* MO call only *\/$/;"	e	enum:__anon0bfbaecf0303
+RIL_CALL_DIALING	guest/hals/ril/reference-libril/ril.h	/^    RIL_CALL_DIALING = 2,    \/* MO call only *\/$/;"	e	enum:__anon0bfbaecf0303
+RIL_CALL_HOLDING	guest/hals/ril/reference-libril/ril.h	/^    RIL_CALL_HOLDING = 1,$/;"	e	enum:__anon0bfbaecf0303
+RIL_CALL_INCOMING	guest/hals/ril/reference-libril/ril.h	/^    RIL_CALL_INCOMING = 4,   \/* MT call only *\/$/;"	e	enum:__anon0bfbaecf0303
+RIL_CALL_WAITING	guest/hals/ril/reference-libril/ril.h	/^    RIL_CALL_WAITING = 5     \/* MT call only *\/$/;"	e	enum:__anon0bfbaecf0303
+RIL_CARDSTATE_ABSENT	guest/hals/ril/reference-libril/ril.h	/^    RIL_CARDSTATE_ABSENT     = 0,$/;"	e	enum:__anon0bfbaecf3203
+RIL_CARDSTATE_ERROR	guest/hals/ril/reference-libril/ril.h	/^    RIL_CARDSTATE_ERROR      = 2,$/;"	e	enum:__anon0bfbaecf3203
+RIL_CARDSTATE_PRESENT	guest/hals/ril/reference-libril/ril.h	/^    RIL_CARDSTATE_PRESENT    = 1,$/;"	e	enum:__anon0bfbaecf3203
+RIL_CARDSTATE_RESTRICTED	guest/hals/ril/reference-libril/ril.h	/^    RIL_CARDSTATE_RESTRICTED = 3  \/* card is present but not usable due to carrier restrictions/;"	e	enum:__anon0bfbaecf3203
+RIL_CARD_MAX_APPS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_CARD_MAX_APPS /;"	d
+RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_CONNECTED_NUMBER_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_CONNECTED_NUMBER_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_CallWaiting_v5	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_CallWaiting_v5;$/;"	t	typeref:struct:__anon0bfbaecf4208
+RIL_CDMA_CallWaiting_v6	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_CallWaiting_v6;$/;"	t	typeref:struct:__anon0bfbaecf4308
+RIL_CDMA_DISPLAY_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_DISPLAY_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_DisplayInfoRecord	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_DisplayInfoRecord;$/;"	t	typeref:struct:__anon0bfbaecf8208
+RIL_CDMA_EXTENDED_DISPLAY_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_EXTENDED_DISPLAY_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_InfoRecName	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_InfoRecName;$/;"	t	typeref:enum:__anon0bfbaecf8103
+RIL_CDMA_InformationRecord	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_InformationRecord;$/;"	t	typeref:struct:__anon0bfbaecf8908
+RIL_CDMA_InformationRecords	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_InformationRecords;$/;"	t	typeref:struct:__anon0bfbaecf8b08
+RIL_CDMA_LINE_CONTROL_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_LINE_CONTROL_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_LineControlInfoRecord	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_LineControlInfoRecord;$/;"	t	typeref:struct:__anon0bfbaecf8608
+RIL_CDMA_MAX_NUMBER_OF_INFO_RECS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_CDMA_MAX_NUMBER_OF_INFO_RECS /;"	d
+RIL_CDMA_NumberInfoRecord	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_NumberInfoRecord;$/;"	t	typeref:struct:__anon0bfbaecf8308
+RIL_CDMA_OTA_ProvisionStatus	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_OTA_ProvisionStatus;$/;"	t	typeref:enum:__anon0bfbaecf4503
+RIL_CDMA_REDIRECTING_NUMBER_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_REDIRECTING_NUMBER_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_RedirectingNumberInfoRecord	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_RedirectingNumberInfoRecord;$/;"	t	typeref:struct:__anon0bfbaecf8508
+RIL_CDMA_RedirectingReason	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_RedirectingReason;$/;"	t	typeref:enum:__anon0bfbaecf8403
+RIL_CDMA_SIGNAL_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_SIGNAL_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_SignalInfoRecord	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_SignalInfoRecord;$/;"	t	typeref:struct:__anon0bfbaecf1008
+RIL_CDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_SignalStrength;$/;"	t	typeref:struct:__anon0bfbaecf4908
+RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_T53_AudioControlInfoRecord	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_T53_AudioControlInfoRecord;$/;"	t	typeref:struct:__anon0bfbaecf8808
+RIL_CDMA_T53_CLIRInfoRecord	guest/hals/ril/reference-libril/ril.h	/^} RIL_CDMA_T53_CLIRInfoRecord;$/;"	t	typeref:struct:__anon0bfbaecf8708
+RIL_CDMA_T53_CLIR_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_T53_CLIR_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CDMA_T53_RELEASE_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_T53_RELEASE_INFO_REC,$/;"	e	enum:__anon0bfbaecf8103
+RIL_CELL_INFO_TYPE_CDMA	guest/hals/ril/reference-libril/ril.h	/^  RIL_CELL_INFO_TYPE_CDMA   = 2,$/;"	e	enum:__anon0bfbaecf6b03
+RIL_CELL_INFO_TYPE_GSM	guest/hals/ril/reference-libril/ril.h	/^  RIL_CELL_INFO_TYPE_GSM    = 1,$/;"	e	enum:__anon0bfbaecf6b03
+RIL_CELL_INFO_TYPE_LTE	guest/hals/ril/reference-libril/ril.h	/^  RIL_CELL_INFO_TYPE_LTE    = 3,$/;"	e	enum:__anon0bfbaecf6b03
+RIL_CELL_INFO_TYPE_NONE	guest/hals/ril/reference-libril/ril.h	/^  RIL_CELL_INFO_TYPE_NONE   = 0, \/* indicates no cell information *\/$/;"	e	enum:__anon0bfbaecf6b03
+RIL_CELL_INFO_TYPE_NR	guest/hals/ril/reference-libril/ril.h	/^  RIL_CELL_INFO_TYPE_NR        = 6$/;"	e	enum:__anon0bfbaecf6b03
+RIL_CELL_INFO_TYPE_TD_SCDMA	guest/hals/ril/reference-libril/ril.h	/^  RIL_CELL_INFO_TYPE_TD_SCDMA  = 5,$/;"	e	enum:__anon0bfbaecf6b03
+RIL_CELL_INFO_TYPE_WCDMA	guest/hals/ril/reference-libril/ril.h	/^  RIL_CELL_INFO_TYPE_WCDMA  = 4,$/;"	e	enum:__anon0bfbaecf6b03
+RIL_Call	guest/hals/ril/reference-libril/ril.h	/^} RIL_Call;$/;"	t	typeref:struct:__anon0bfbaecf1108
+RIL_CallForwardInfo	guest/hals/ril/reference-libril/ril.h	/^}RIL_CallForwardInfo;$/;"	t	typeref:struct:__anon0bfbaecf2108
+RIL_CallState	guest/hals/ril/reference-libril/ril.h	/^} RIL_CallState;$/;"	t	typeref:enum:__anon0bfbaecf0303
+RIL_Cancel	guest/hals/ril/reference-libril/ril.h	/^typedef void (*RIL_Cancel)(RIL_Token t);$/;"	t	typeref:typename:void (*)(RIL_Token t)
+RIL_CardState	guest/hals/ril/reference-libril/ril.h	/^} RIL_CardState;$/;"	t	typeref:enum:__anon0bfbaecf3203
+RIL_CardStatus_v1_2	guest/hals/ril/reference-libril/ril.h	/^} RIL_CardStatus_v1_2;$/;"	t	typeref:struct:__anon0bfbaecf3b08
+RIL_CardStatus_v1_4	guest/hals/ril/reference-libril/ril.h	/^} RIL_CardStatus_v1_4;$/;"	t	typeref:struct:__anon0bfbaecf3c08
+RIL_CardStatus_v1_5	guest/hals/ril/reference-libril/ril.h	/^} RIL_CardStatus_v1_5;  \/\/ 1.5$/;"	t	typeref:struct:__anon0bfbaecf3f08
+RIL_CardStatus_v5	guest/hals/ril/reference-libril/ril.h	/^} RIL_CardStatus_v5;$/;"	t	typeref:struct:__anon0bfbaecf3908
+RIL_CardStatus_v6	guest/hals/ril/reference-libril/ril.h	/^} RIL_CardStatus_v6;$/;"	t	typeref:struct:__anon0bfbaecf3a08
+RIL_Carrier	guest/hals/ril/reference-libril/ril.h	/^} RIL_Carrier;$/;"	t	typeref:struct:__anon0bfbaecf2608
+RIL_CarrierInfoForImsiEncryption	guest/hals/ril/reference-libril/ril.h	/^} RIL_CarrierInfoForImsiEncryption;$/;"	t	typeref:struct:__anon0bfbaecf2a08
+RIL_CarrierInfoForImsiEncryption_v16	guest/hals/ril/reference-libril/ril.h	/^} RIL_CarrierInfoForImsiEncryption_v16;$/;"	t	typeref:struct:__anon0bfbaecf2c08
+RIL_CarrierMatchType	guest/hals/ril/reference-libril/ril.h	/^} RIL_CarrierMatchType;$/;"	t	typeref:enum:__anon0bfbaecf2503
+RIL_CarrierRestrictions	guest/hals/ril/reference-libril/ril.h	/^} RIL_CarrierRestrictions;$/;"	t	typeref:struct:__anon0bfbaecf2708
+RIL_CarrierRestrictionsWithPriority	guest/hals/ril/reference-libril/ril.h	/^} RIL_CarrierRestrictionsWithPriority;$/;"	t	typeref:struct:__anon0bfbaecf2908
+RIL_CdmaSubscriptionSource	guest/hals/ril/reference-libril/ril.h	/^} RIL_CdmaSubscriptionSource;$/;"	t	typeref:enum:__anon0bfbaecf0c03
+RIL_CellConnectionStatus	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellConnectionStatus;$/;"	t	typeref:enum:__anon0bfbaecf6d03
+RIL_CellIdentityCdma	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityCdma;$/;"	t	typeref:struct:__anon0bfbaecf5c08
+RIL_CellIdentityCdma_v1_2	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityCdma_v1_2;$/;"	t	typeref:struct:__anon0bfbaecf7c08
+RIL_CellIdentityGsm	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityGsm;$/;"	t	typeref:struct:__anon0bfbaecf5808
+RIL_CellIdentityGsm_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityGsm_v12;$/;"	t	typeref:struct:__anon0bfbaecf5908
+RIL_CellIdentityGsm_v1_2	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityGsm_v1_2;$/;"	t	typeref:struct:__anon0bfbaecf7808
+RIL_CellIdentityLte	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityLte;$/;"	t	typeref:struct:__anon0bfbaecf5d08
+RIL_CellIdentityLte_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityLte_v12;$/;"	t	typeref:struct:__anon0bfbaecf5e08
+RIL_CellIdentityLte_v1_2	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityLte_v1_2;$/;"	t	typeref:struct:__anon0bfbaecf7a08
+RIL_CellIdentityNr	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityNr;$/;"	t	typeref:struct:__anon0bfbaecf6108
+RIL_CellIdentityOperatorNames	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityOperatorNames;$/;"	t	typeref:struct:__anon0bfbaecf6008
+RIL_CellIdentityTdscdma	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityTdscdma;$/;"	t	typeref:struct:__anon0bfbaecf5f08
+RIL_CellIdentityTdscdma_v1_2	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityTdscdma_v1_2;$/;"	t	typeref:struct:__anon0bfbaecf7b08
+RIL_CellIdentityWcdma	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityWcdma;$/;"	t	typeref:struct:__anon0bfbaecf5a08
+RIL_CellIdentityWcdma_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityWcdma_v12;$/;"	t	typeref:struct:__anon0bfbaecf5b08
+RIL_CellIdentityWcdma_v1_2	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentityWcdma_v1_2;$/;"	t	typeref:struct:__anon0bfbaecf7908
+RIL_CellIdentity_v16	guest/hals/ril/reference-libril/ril.h	/^}RIL_CellIdentity_v16;$/;"	t	typeref:struct:__anon0bfbaecf7408
+RIL_CellIdentity_v1_2	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentity_v1_2;$/;"	t	typeref:struct:__anon0bfbaecf7d08
+RIL_CellIdentity_v20	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellIdentity_v20;$/;"	t	typeref:struct:__anon0bfbaecf7608
+RIL_CellInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfo;$/;"	t	typeref:struct:__anon0bfbaecf6e08
+RIL_CellInfoCdma	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoCdma;$/;"	t	typeref:struct:__anon0bfbaecf6608
+RIL_CellInfoGsm	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoGsm;$/;"	t	typeref:struct:__anon0bfbaecf6208
+RIL_CellInfoGsm_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoGsm_v12;$/;"	t	typeref:struct:__anon0bfbaecf6308
+RIL_CellInfoLte	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoLte;$/;"	t	typeref:struct:__anon0bfbaecf6708
+RIL_CellInfoLte_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoLte_v12;$/;"	t	typeref:struct:__anon0bfbaecf6808
+RIL_CellInfoNr	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoNr;$/;"	t	typeref:struct:__anon0bfbaecf6a08
+RIL_CellInfoTdscdma	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoTdscdma;$/;"	t	typeref:struct:__anon0bfbaecf6908
+RIL_CellInfoType	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoType;$/;"	t	typeref:enum:__anon0bfbaecf6b03
+RIL_CellInfoWcdma	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoWcdma;$/;"	t	typeref:struct:__anon0bfbaecf6408
+RIL_CellInfoWcdma_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfoWcdma_v12;$/;"	t	typeref:struct:__anon0bfbaecf6508
+RIL_CellInfo_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfo_v12;$/;"	t	typeref:struct:__anon0bfbaecf7008
+RIL_CellInfo_v16	guest/hals/ril/reference-libril/ril.h	/^} RIL_CellInfo_v16;$/;"	t	typeref:struct:__anon0bfbaecf7208
+RIL_CfData	guest/hals/ril/reference-libril/ril.h	/^} RIL_CfData;$/;"	t	typeref:struct:__anon0bfbaecf9808
+RIL_DATA_PROFILE_CBS	guest/hals/ril/reference-libril/ril.h	/^    RIL_DATA_PROFILE_CBS        = 4,$/;"	e	enum:__anon0bfbaecf3003
+RIL_DATA_PROFILE_DEFAULT	guest/hals/ril/reference-libril/ril.h	/^    RIL_DATA_PROFILE_DEFAULT    = 0,$/;"	e	enum:__anon0bfbaecf3003
+RIL_DATA_PROFILE_FOTA	guest/hals/ril/reference-libril/ril.h	/^    RIL_DATA_PROFILE_FOTA       = 3,$/;"	e	enum:__anon0bfbaecf3003
+RIL_DATA_PROFILE_IMS	guest/hals/ril/reference-libril/ril.h	/^    RIL_DATA_PROFILE_IMS        = 2,$/;"	e	enum:__anon0bfbaecf3003
+RIL_DATA_PROFILE_INVALID	guest/hals/ril/reference-libril/ril.h	/^    RIL_DATA_PROFILE_INVALID    = 0xFFFFFFFF$/;"	e	enum:__anon0bfbaecf3003
+RIL_DATA_PROFILE_OEM_BASE	guest/hals/ril/reference-libril/ril.h	/^    RIL_DATA_PROFILE_OEM_BASE   = 1000,    \/* Start of OEM-specific profiles *\/$/;"	e	enum:__anon0bfbaecf3003
+RIL_DATA_PROFILE_TETHERED	guest/hals/ril/reference-libril/ril.h	/^    RIL_DATA_PROFILE_TETHERED   = 1,$/;"	e	enum:__anon0bfbaecf3003
+RIL_DC_POWER_STATE_HIGH	guest/hals/ril/reference-libril/ril.h	/^    RIL_DC_POWER_STATE_HIGH     = 3,        \/\/ High power state$/;"	e	enum:__anon0bfbaecf9b03
+RIL_DC_POWER_STATE_LOW	guest/hals/ril/reference-libril/ril.h	/^    RIL_DC_POWER_STATE_LOW      = 1,        \/\/ Low power state$/;"	e	enum:__anon0bfbaecf9b03
+RIL_DC_POWER_STATE_MEDIUM	guest/hals/ril/reference-libril/ril.h	/^    RIL_DC_POWER_STATE_MEDIUM   = 2,        \/\/ Medium power state$/;"	e	enum:__anon0bfbaecf9b03
+RIL_DC_POWER_STATE_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RIL_DC_POWER_STATE_UNKNOWN  = INT32_MAX \/\/ Unknown state$/;"	e	enum:__anon0bfbaecf9b03
+RIL_DST_CHARGING_STATE	guest/hals/ril/reference-libril/ril.h	/^    RIL_DST_CHARGING_STATE,         \/\/ Device charging state (provided by BatteryManager)$/;"	e	enum:__anon0bfbaecfa103
+RIL_DST_LOW_DATA_EXPECTED	guest/hals/ril/reference-libril/ril.h	/^    RIL_DST_LOW_DATA_EXPECTED       \/\/ Low data expected mode. True indicates low data traffic$/;"	e	enum:__anon0bfbaecfa103
+RIL_DST_POWER_SAVE_MODE	guest/hals/ril/reference-libril/ril.h	/^    RIL_DST_POWER_SAVE_MODE,        \/\/ Device power save mode (provided by PowerManager)$/;"	e	enum:__anon0bfbaecfa103
+RIL_DataCallFailCause	guest/hals/ril/reference-libril/ril.h	/^} RIL_DataCallFailCause;$/;"	t	typeref:enum:__anon0bfbaecf2f03
+RIL_DataProfile	guest/hals/ril/reference-libril/ril.h	/^} RIL_DataProfile;$/;"	t	typeref:enum:__anon0bfbaecf3003
+RIL_DataProfileInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_DataProfileInfo;$/;"	t	typeref:struct:__anon0bfbaecf9d08
+RIL_DataProfileInfo_v15	guest/hals/ril/reference-libril/ril.h	/^} RIL_DataProfileInfo_v15;$/;"	t	typeref:struct:__anon0bfbaecf9e08
+RIL_DataRegistrationStateResponse	guest/hals/ril/reference-libril/ril.h	/^}RIL_DataRegistrationStateResponse;$/;"	t	typeref:struct:__anon0bfbaecf8008
+RIL_DataRequestReason	guest/hals/ril/reference-libril/ril.h	/^} RIL_DataRequestReason;$/;"	t	typeref:enum:__anon0bfbaecfbe03
+RIL_Data_Call_Response_v11	guest/hals/ril/reference-libril/ril.h	/^} RIL_Data_Call_Response_v11;$/;"	t	typeref:struct:__anon0bfbaecf1508
+RIL_Data_Call_Response_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_Data_Call_Response_v12;$/;"	t	typeref:struct:__anon0bfbaecf1608
+RIL_Data_Call_Response_v4	guest/hals/ril/reference-libril/ril.h	/^} RIL_Data_Call_Response_v4;$/;"	t	typeref:struct:__anon0bfbaecf1208
+RIL_Data_Call_Response_v6	guest/hals/ril/reference-libril/ril.h	/^} RIL_Data_Call_Response_v6;$/;"	t	typeref:struct:__anon0bfbaecf1308
+RIL_Data_Call_Response_v9	guest/hals/ril/reference-libril/ril.h	/^} RIL_Data_Call_Response_v9;$/;"	t	typeref:struct:__anon0bfbaecf1408
+RIL_DcPowerStates	guest/hals/ril/reference-libril/ril.h	/^} RIL_DcPowerStates;$/;"	t	typeref:enum:__anon0bfbaecf9b03
+RIL_DcRtInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_DcRtInfo;$/;"	t	typeref:struct:__anon0bfbaecf9c08
+RIL_DeviceStateType	guest/hals/ril/reference-libril/ril.h	/^} RIL_DeviceStateType;$/;"	t	typeref:enum:__anon0bfbaecfa103
+RIL_Dial	guest/hals/ril/reference-libril/ril.h	/^} RIL_Dial;$/;"	t	typeref:struct:__anon0bfbaecf1c08
+RIL_ERRNO_INVALID_RESPONSE	guest/hals/ril/reference-libril/ril.cpp	/^#define RIL_ERRNO_INVALID_RESPONSE /;"	d	file:
+RIL_ERRNO_NO_MEMORY	guest/hals/ril/reference-libril/ril.cpp	/^#define RIL_ERRNO_NO_MEMORY /;"	d	file:
+RIL_EVDO_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^} RIL_EVDO_SignalStrength;$/;"	t	typeref:struct:__anon0bfbaecf4a08
+RIL_EX_H_INCLUDED	guest/hals/ril/reference-libril/ril_ex.h	/^#define RIL_EX_H_INCLUDED$/;"	d
+RIL_E_ABORTED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_ABORTED = 65,                         \/* Operation aborted *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_CANCELLED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_CANCELLED = 7,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_DEVICE_IN_USE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_DEVICE_IN_USE = 64,                   \/* Operation cannot be performed because the de/;"	e	enum:__anon0bfbaecf0203
+RIL_E_DIAL_MODIFIED_TO_DIAL	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_DIAL_MODIFIED_TO_DIAL = 20,           \/* DIAL request modified to DIAL with different$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_DIAL_MODIFIED_TO_SS	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_DIAL_MODIFIED_TO_SS = 19,             \/* DIAL request modified to SS *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_DIAL_MODIFIED_TO_USSD	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_DIAL_MODIFIED_TO_USSD = 18,           \/* DIAL request modified to USSD *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_EMPTY_RECORD	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_EMPTY_RECORD = 55,                    \/* The request record is empty *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_ENCODING_ERR	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_ENCODING_ERR = 57,                    \/* Message not encoded properly *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_FDN_CHECK_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_FDN_CHECK_FAILURE = 14,               \/* command failed because recipient is not on F/;"	e	enum:__anon0bfbaecf0203
+RIL_E_GENERIC_FAILURE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_GENERIC_FAILURE = 2,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_ILLEGAL_SIM_OR_ME	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_ILLEGAL_SIM_OR_ME = 15,               \/* network selection failed due to$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INTERNAL_ERR	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INTERNAL_ERR = 38,                    \/* Modem hit unexpected error scenario while ha/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INVALID_ARGUMENTS	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INVALID_ARGUMENTS = 44,               \/* Received invalid arguments in request *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INVALID_CALL_ID	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INVALID_CALL_ID = 47,                 \/* Received invalid call id in request *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INVALID_MODEM_STATE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INVALID_MODEM_STATE = 46,             \/* Can not process the request in current Modem/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INVALID_RESPONSE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INVALID_RESPONSE = 66,                \/* Invalid response sent by vendor code *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INVALID_SIM_STATE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INVALID_SIM_STATE = 45,               \/* Can not process the request in current SIM s/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INVALID_SMSC_ADDRESS	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INVALID_SMSC_ADDRESS = 58,            \/* SMSC address specified is invalid *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INVALID_SMS_FORMAT	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INVALID_SMS_FORMAT = 56,              \/* Invalid sms format *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_INVALID_STATE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_INVALID_STATE = 41,                   \/* Unexpected request for the current state *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_LCE_NOT_SUPPORTED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_LCE_NOT_SUPPORTED = 36,               \/* LCE service not supported(36 in RILConstants/;"	e	enum:__anon0bfbaecf0203
+RIL_E_MISSING_RESOURCE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_MISSING_RESOURCE = 16,                \/* no logical channel available *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_MODEM_ERR	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_MODEM_ERR = 40,                       \/* Vendor RIL got unexpected or incorrect respo/;"	e	enum:__anon0bfbaecf0203
+RIL_E_MODE_NOT_SUPPORTED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_MODE_NOT_SUPPORTED = 13,              \/* HW does not support preferred network type */;"	e	enum:__anon0bfbaecf0203
+RIL_E_NETWORK_ERR	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NETWORK_ERR = 49,                     \/* Received error from network *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_NETWORK_NOT_READY	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NETWORK_NOT_READY = 60,               \/* Network is not ready to perform the request /;"	e	enum:__anon0bfbaecf0203
+RIL_E_NETWORK_REJECT	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NETWORK_REJECT = 53,                  \/* Request is rejected by network *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_NOT_PROVISIONED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NOT_PROVISIONED = 61,                 \/* Device doesnot have this value provisioned */;"	e	enum:__anon0bfbaecf0203
+RIL_E_NO_MEMORY	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NO_MEMORY = 37,                       \/* Not sufficient memory to process the request/;"	e	enum:__anon0bfbaecf0203
+RIL_E_NO_NETWORK_FOUND	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NO_NETWORK_FOUND = 63,                \/* Network cannot be found *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_NO_RESOURCES	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NO_RESOURCES = 42,                    \/* Not sufficient resource to process the reque/;"	e	enum:__anon0bfbaecf0203
+RIL_E_NO_SMS_TO_ACK	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NO_SMS_TO_ACK = 48,                   \/* ACK received when there is no SMS to ack *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_NO_SUBSCRIPTION	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NO_SUBSCRIPTION = 62,                 \/* Device doesnot have subscription *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_NO_SUCH_ELEMENT	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NO_SUCH_ELEMENT = 17,                  \/* application not found on SIM *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_NO_SUCH_ENTRY	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_NO_SUCH_ENTRY = 59,                   \/* No such entry present to perform the request/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_1	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_1 = 501,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_10	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_10 = 510,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_11	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_11 = 511,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_12	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_12 = 512,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_13	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_13 = 513,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_14	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_14 = 514,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_15	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_15 = 515,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_16	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_16 = 516,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_17	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_17 = 517,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_18	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_18 = 518,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_19	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_19 = 519,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_2	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_2 = 502,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_20	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_20 = 520,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_21	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_21 = 521,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_22	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_22 = 522,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_23	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_23 = 523,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_24	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_24 = 524,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_25	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_25 = 525$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_3	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_3 = 503,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_4	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_4 = 504,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_5 = 505,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_6	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_6 = 506,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_7	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_7 = 507,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_8	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_8 = 508,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OEM_ERROR_9	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OEM_ERROR_9 = 509,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OPERATION_NOT_ALLOWED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OPERATION_NOT_ALLOWED = 54,           \/* Not allowed the request now *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW = 9,  \/* data ops are not allowed before device$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_OP_NOT_ALLOWED_DURING_VOICE_CALL	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_OP_NOT_ALLOWED_DURING_VOICE_CALL = 8, \/* data ops are not allowed during voice$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_PASSWORD_INCORRECT	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_PASSWORD_INCORRECT = 3,      \/* for PIN\/PIN2 methods only! *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_RADIO_NOT_AVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_RADIO_NOT_AVAILABLE = 1,     \/* If radio did not start or is resetting *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_REQUEST_NOT_SUPPORTED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_REQUEST_NOT_SUPPORTED = 6,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_REQUEST_RATE_LIMITED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_REQUEST_RATE_LIMITED = 50,            \/* Operation denied due to overly-frequent requ/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SIM_ABSENT	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SIM_ABSENT = 11,                      \/* fail to set the location where CDMA subscrip/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SIM_BUSY	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SIM_BUSY = 51,                        \/* SIM is busy *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SIM_ERR	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SIM_ERR = 43,                         \/* Received error from SIM card *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SIM_FULL	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SIM_FULL = 52,                        \/* The target EF is full *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SIM_PIN2	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SIM_PIN2 = 4,                \/* Operation requires SIM PIN2 to be entered *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SIM_PUK2	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SIM_PUK2 = 5,                \/* Operation requires SIM PIN2 to be entered *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SMS_SEND_FAIL_RETRY	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SMS_SEND_FAIL_RETRY = 10,             \/* fail to send sms and need retry *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SS_MODIFIED_TO_DIAL	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SS_MODIFIED_TO_DIAL = 24,             \/* SS request modified to DIAL *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SS_MODIFIED_TO_SS	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SS_MODIFIED_TO_SS = 27,               \/* SS request modified to different SS request /;"	e	enum:__anon0bfbaecf0203
+RIL_E_SS_MODIFIED_TO_USSD	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SS_MODIFIED_TO_USSD = 25,             \/* SS request modified to USSD *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SUBSCRIPTION_NOT_AVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SUBSCRIPTION_NOT_AVAILABLE = 12,      \/* fail to find CDMA subscription from specifie/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SUBSCRIPTION_NOT_SUPPORTED	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SUBSCRIPTION_NOT_SUPPORTED = 26,      \/* Subscription not supported by RIL *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SUCCESS	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SUCCESS = 0,$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_SYSTEM_ERR	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_SYSTEM_ERR = 39,                      \/* Hit platform or system error *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_USSD_MODIFIED_TO_DIAL	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_USSD_MODIFIED_TO_DIAL = 21,           \/* USSD request modified to DIAL *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_USSD_MODIFIED_TO_SS	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_USSD_MODIFIED_TO_SS = 22,             \/* USSD request modified to SS *\/$/;"	e	enum:__anon0bfbaecf0203
+RIL_E_USSD_MODIFIED_TO_USSD	guest/hals/ril/reference-libril/ril.h	/^    RIL_E_USSD_MODIFIED_TO_USSD = 23,           \/* USSD request modified to different USSD$/;"	e	enum:__anon0bfbaecf0203
+RIL_EmergencyCallRouting	guest/hals/ril/reference-libril/ril.h	/^} RIL_EmergencyCallRouting;$/;"	t	typeref:enum:__anon0bfbaecfb603
+RIL_EmergencyDial	guest/hals/ril/reference-libril/ril.h	/^} RIL_EmergencyDial;$/;"	t	typeref:struct:__anon0bfbaecfb708
+RIL_EmergencyNumberSource	guest/hals/ril/reference-libril/ril.h	/^} RIL_EmergencyNumberSource;$/;"	t	typeref:enum:__anon0bfbaecfb503
+RIL_EmergencyServiceCategory	guest/hals/ril/reference-libril/ril.h	/^} RIL_EmergencyServiceCategory;$/;"	t	typeref:enum:__anon0bfbaecfb403
+RIL_Env	guest/hals/ril/reference-libril/ril.h	/^struct RIL_Env {$/;"	s
+RIL_Errno	guest/hals/ril/reference-libril/ril.h	/^} RIL_Errno;$/;"	t	typeref:enum:__anon0bfbaecf0203
+RIL_EutranBands	guest/hals/ril/reference-libril/ril.h	/^} RIL_EutranBands;$/;"	t	typeref:enum:__anon0bfbaecfa903
+RIL_GSM_BroadcastSmsConfigInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_GSM_BroadcastSmsConfigInfo;$/;"	t	typeref:struct:__anon0bfbaecf4408
+RIL_GSM_SignalStrength_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_GSM_SignalStrength_v12;$/;"	t	typeref:struct:__anon0bfbaecf4708
+RIL_GW_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^} RIL_GW_SignalStrength;$/;"	t	typeref:struct:__anon0bfbaecf4608
+RIL_GeranBands	guest/hals/ril/reference-libril/ril.h	/^} RIL_GeranBands;$/;"	t	typeref:enum:__anon0bfbaecfa703
+RIL_GetVersion	guest/hals/ril/reference-libril/ril.h	/^typedef const char * (*RIL_GetVersion) (void);$/;"	t	typeref:typename:const char * (*)(void)
+RIL_HARDWARE_CONFIG_MODEM	guest/hals/ril/reference-libril/ril.h	/^   RIL_HARDWARE_CONFIG_MODEM = 0,$/;"	e	enum:__anon0bfbaecf8f03
+RIL_HARDWARE_CONFIG_SIM	guest/hals/ril/reference-libril/ril.h	/^   RIL_HARDWARE_CONFIG_SIM = 1,$/;"	e	enum:__anon0bfbaecf8f03
+RIL_HARDWARE_CONFIG_STATE_DISABLED	guest/hals/ril/reference-libril/ril.h	/^   RIL_HARDWARE_CONFIG_STATE_DISABLED = 2,$/;"	e	enum:__anon0bfbaecf9003
+RIL_HARDWARE_CONFIG_STATE_ENABLED	guest/hals/ril/reference-libril/ril.h	/^   RIL_HARDWARE_CONFIG_STATE_ENABLED = 0,$/;"	e	enum:__anon0bfbaecf9003
+RIL_HARDWARE_CONFIG_STATE_STANDBY	guest/hals/ril/reference-libril/ril.h	/^   RIL_HARDWARE_CONFIG_STATE_STANDBY = 1,$/;"	e	enum:__anon0bfbaecf9003
+RIL_HardwareConfig	guest/hals/ril/reference-libril/ril.h	/^} RIL_HardwareConfig;$/;"	t	typeref:struct:__anon0bfbaecf9308
+RIL_HardwareConfig_Modem	guest/hals/ril/reference-libril/ril.h	/^} RIL_HardwareConfig_Modem;$/;"	t	typeref:struct:__anon0bfbaecf9108
+RIL_HardwareConfig_Sim	guest/hals/ril/reference-libril/ril.h	/^} RIL_HardwareConfig_Sim;$/;"	t	typeref:struct:__anon0bfbaecf9208
+RIL_HardwareConfig_State	guest/hals/ril/reference-libril/ril.h	/^} RIL_HardwareConfig_State;$/;"	t	typeref:enum:__anon0bfbaecf9003
+RIL_HardwareConfig_Type	guest/hals/ril/reference-libril/ril.h	/^} RIL_HardwareConfig_Type;$/;"	t	typeref:enum:__anon0bfbaecf8f03
+RIL_IMS_SMS_Message	guest/hals/ril/reference-libril/ril.h	/^} RIL_IMS_SMS_Message;$/;"	t	typeref:struct:__anon0bfbaecf1808
+RIL_Init	guest/hals/ril/reference-ril/reference-ril.c	/^const RIL_RadioFunctions *RIL_Init(const struct RIL_Env *env, int argc, char **argv)$/;"	f	typeref:typename:const RIL_RadioFunctions *
+RIL_InitialAttachApn	guest/hals/ril/reference-libril/ril.h	/^} RIL_InitialAttachApn;$/;"	t	typeref:struct:__anon0bfbaecfc008
+RIL_InitialAttachApn_v15	guest/hals/ril/reference-libril/ril.h	/^} RIL_InitialAttachApn_v15;$/;"	t	typeref:struct:__anon0bfbaecfc108
+RIL_KeepaliveRequest	guest/hals/ril/reference-libril/ril.h	/^} RIL_KeepaliveRequest;$/;"	t	typeref:struct:__anon0bfbaecfc508
+RIL_KeepaliveStatus	guest/hals/ril/reference-libril/ril.h	/^} RIL_KeepaliveStatus;$/;"	t	typeref:struct:__anon0bfbaecfc708
+RIL_KeepaliveStatusCode	guest/hals/ril/reference-libril/ril.h	/^} RIL_KeepaliveStatusCode;$/;"	t	typeref:enum:__anon0bfbaecfc603
+RIL_KeepaliveType	guest/hals/ril/reference-libril/ril.h	/^} RIL_KeepaliveType;$/;"	t	typeref:enum:__anon0bfbaecfc403
+RIL_LTE_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^} RIL_LTE_SignalStrength;$/;"	t	typeref:struct:__anon0bfbaecf4b08
+RIL_LTE_SignalStrength_v8	guest/hals/ril/reference-libril/ril.h	/^} RIL_LTE_SignalStrength_v8;$/;"	t	typeref:struct:__anon0bfbaecf4c08
+RIL_LastCallFailCause	guest/hals/ril/reference-libril/ril.h	/^} RIL_LastCallFailCause;$/;"	t	typeref:enum:__anon0bfbaecf2d03
+RIL_LastCallFailCauseInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_LastCallFailCauseInfo;$/;"	t	typeref:struct:__anon0bfbaecf2e08
+RIL_LceDataInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_LceDataInfo;$/;"	t	typeref:struct:__anon0bfbaecf2408
+RIL_LceStatusInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_LceStatusInfo;$/;"	t	typeref:struct:__anon0bfbaecf2308
+RIL_LinkCapacityReportingCriteria	guest/hals/ril/reference-libril/ril.h	/^} RIL_LinkCapacityReportingCriteria;$/;"	t	typeref:struct:__anon0bfbaecf5708
+RIL_MATCH_ALL	guest/hals/ril/reference-libril/ril.h	/^    RIL_MATCH_ALL = 0,          \/* Apply to all carriers with the same mcc\/mnc *\/$/;"	e	enum:__anon0bfbaecf2503
+RIL_MATCH_GID1	guest/hals/ril/reference-libril/ril.h	/^    RIL_MATCH_GID1 = 3,         \/* Use GID1 and mcc\/mnc to identify the carrier *\/$/;"	e	enum:__anon0bfbaecf2503
+RIL_MATCH_GID2	guest/hals/ril/reference-libril/ril.h	/^    RIL_MATCH_GID2 = 4,         \/* Use GID2 and mcc\/mnc to identify the carrier *\/$/;"	e	enum:__anon0bfbaecf2503
+RIL_MATCH_IMSI_PREFIX	guest/hals/ril/reference-libril/ril.h	/^    RIL_MATCH_IMSI_PREFIX = 2,  \/* Use IMSI prefix and mcc\/mnc to identify the carrier *\/$/;"	e	enum:__anon0bfbaecf2503
+RIL_MATCH_SPN	guest/hals/ril/reference-libril/ril.h	/^    RIL_MATCH_SPN = 1,          \/* Use SPN and mcc\/mnc to identify the carrier *\/$/;"	e	enum:__anon0bfbaecf2503
+RIL_ModemConfig	guest/hals/ril/reference-libril/ril.h	/^} RIL_ModemConfig;$/;"	t	typeref:struct:__anon0bfbaecfbd08
+RIL_ModemInfo	guest/hals/ril/reference-libril/ril.h	/^} RIL_ModemInfo;$/;"	t	typeref:struct:__anon0bfbaecfbb08
+RIL_NOT_REG_AND_EMERGENCY_AVAILABLE_AND_NOT_SEARCHING	guest/hals/ril/reference-libril/ril.h	/^    RIL_NOT_REG_AND_EMERGENCY_AVAILABLE_AND_NOT_SEARCHING = 10,   \/\/ Same as$/;"	e	enum:__anon0bfbaecf3703
+RIL_NOT_REG_AND_EMERGENCY_AVAILABLE_AND_SEARCHING	guest/hals/ril/reference-libril/ril.h	/^    RIL_NOT_REG_AND_EMERGENCY_AVAILABLE_AND_SEARCHING = 12,  \/\/ Same as RIL_NOT_REG_AND_SEARCH/;"	e	enum:__anon0bfbaecf3703
+RIL_NOT_REG_AND_NOT_SEARCHING	guest/hals/ril/reference-libril/ril.h	/^    RIL_NOT_REG_AND_NOT_SEARCHING = 0,           \/\/ Not registered, MT is not currently search/;"	e	enum:__anon0bfbaecf3703
+RIL_NOT_REG_AND_SEARCHING	guest/hals/ril/reference-libril/ril.h	/^    RIL_NOT_REG_AND_SEARCHING = 2,               \/\/ Not registered, but MT is currently search/;"	e	enum:__anon0bfbaecf3703
+RIL_NR_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^} RIL_NR_SignalStrength;$/;"	t	typeref:struct:__anon0bfbaecf4e08
+RIL_NUM_TX_POWER_LEVELS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_NUM_TX_POWER_LEVELS /;"	d
+RIL_NV_ReadItem	guest/hals/ril/reference-libril/ril.h	/^} RIL_NV_ReadItem;$/;"	t	typeref:struct:__anon0bfbaecf8c08
+RIL_NV_WriteItem	guest/hals/ril/reference-libril/ril.h	/^} RIL_NV_WriteItem;$/;"	t	typeref:struct:__anon0bfbaecf8d08
+RIL_NeighboringCell	guest/hals/ril/reference-libril/ril.h	/^} RIL_NeighboringCell;$/;"	t	typeref:struct:__anon0bfbaecf2208
+RIL_NetworkOperator	guest/hals/ril/reference-libril/ril.h	/^} RIL_NetworkOperator;$/;"	t	typeref:struct:__anon0bfbaecfa608
+RIL_NetworkScanRequest	guest/hals/ril/reference-libril/ril.h	/^} RIL_NetworkScanRequest;$/;"	t	typeref:struct:__anon0bfbaecfad08
+RIL_NetworkScanRequest_v1_5	guest/hals/ril/reference-libril/ril.h	/^} RIL_NetworkScanRequest_v1_5;$/;"	t	typeref:struct:__anon0bfbaecfb008
+RIL_NetworkScanResult	guest/hals/ril/reference-libril/ril.h	/^} RIL_NetworkScanResult;$/;"	t	typeref:struct:__anon0bfbaecfb308
+RIL_NgranBands	guest/hals/ril/reference-libril/ril.h	/^} RIL_NgranBands;$/;"	t	typeref:enum:__anon0bfbaecfaa03
+RIL_ONE_SHOT	guest/hals/ril/reference-libril/ril.h	/^    RIL_ONE_SHOT = 0x01, \/\/ Performs the scan only once$/;"	e	enum:__anon0bfbaecfa403
+RIL_OpenChannelParams	guest/hals/ril/reference-libril/ril.h	/^} RIL_OpenChannelParams;$/;"	t	typeref:struct:__anon0bfbaecfa308
+RIL_PCO_Data	guest/hals/ril/reference-libril/ril.h	/^} RIL_PCO_Data;$/;"	t	typeref:struct:__anon0bfbaecfc308
+RIL_PERIODIC	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERIODIC = 0x02  \/\/ Performs the scan periodically until cancelled$/;"	e	enum:__anon0bfbaecfa403
+RIL_PERSOSUBSTATE_IN_PROGRESS	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_IN_PROGRESS               = 1, \/* in between each lock transition *\/$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_IN_PROGRESS_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_IN_PROGRESS_1_5               = 1, \/* in between each lock transition *\/$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_READY	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_READY                     = 2, \/* when either SIM or RUIM Perso is finish/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_READY_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_READY_1_5                     = 2, \/* when either SIM or RUIM Perso is fi/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_CORPORATE	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_CORPORATE            = 16,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_CORPORATE_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_CORPORATE_1_5            = 16,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_CORPORATE_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_CORPORATE_PUK        = 22,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_CORPORATE_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_CORPORATE_PUK_1_5        = 22,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_HRPD	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_HRPD                 = 15,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_HRPD_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_HRPD_1_5                 = 15,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_HRPD_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_HRPD_PUK             = 21,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_HRPD_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_HRPD_PUK_1_5             = 21,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_NETWORK1	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_NETWORK1             = 13,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_NETWORK1_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_NETWORK1_1_5             = 13,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_NETWORK1_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_NETWORK1_PUK         = 19, \/* The corresponding perso lock is blocke/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_NETWORK1_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_NETWORK1_PUK_1_5         = 19, \/* The corresponding perso lock is bl/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_NETWORK2	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_NETWORK2             = 14,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_NETWORK2_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_NETWORK2_1_5             = 14,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_NETWORK2_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_NETWORK2_PUK         = 20,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_NETWORK2_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_NETWORK2_PUK_1_5         = 20,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_RUIM	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_RUIM                 = 18,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_RUIM_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_RUIM_1_5                 = 18,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_RUIM_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_RUIM_PUK             = 24$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_RUIM_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_RUIM_PUK_1_5             = 24,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER     = 17,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_1_5     = 17,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK = 23,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK_1_5 = 23,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_CORPORATE	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_CORPORATE             = 5,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_CORPORATE_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_CORPORATE_1_5             = 5,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_CORPORATE_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_CORPORATE_PUK         = 10,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_CORPORATE_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_CORPORATE_PUK_1_5         = 10,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_ICCID	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_ICCID,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_ICCID_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_ICCID_PUK,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_IMPI	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_IMPI,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_IMPI_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_IMPI_PUK,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_NETWORK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NETWORK               = 3,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_NETWORK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NETWORK_1_5               = 3,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_NETWORK_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NETWORK_PUK           = 8, \/* The corresponding perso lock is blocked/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_NETWORK_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NETWORK_PUK_1_5           = 8, \/* The corresponding perso lock is blo/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_NETWORK_SUBSET	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NETWORK_SUBSET        = 4,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_NETWORK_SUBSET_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NETWORK_SUBSET_1_5        = 4,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK    = 9,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK_1_5    = 9,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_NS_SP	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NS_SP,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_NS_SP_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_NS_SP_PUK,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_SERVICE_PROVIDER	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SERVICE_PROVIDER      = 6,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_SERVICE_PROVIDER_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SERVICE_PROVIDER_1_5      = 6,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK  = 11,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK_1_5  = 11,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_SIM	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SIM                   = 7,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_SIM_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SIM_1_5                   = 7,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_SIM_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SIM_PUK               = 12,$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_SIM_SIM_PUK_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SIM_PUK_1_5               = 12,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_SPN	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SPN,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_SPN_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SPN_PUK,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_SP_EHPLMN	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SP_EHPLMN,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_SIM_SP_EHPLMN_PUK	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_SIM_SP_EHPLMN_PUK,$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PERSOSUBSTATE_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_UNKNOWN                   = 0, \/* initial state *\/$/;"	e	enum:__anon0bfbaecf3303
+RIL_PERSOSUBSTATE_UNKNOWN_1_5	guest/hals/ril/reference-libril/ril.h	/^    RIL_PERSOSUBSTATE_UNKNOWN_1_5                   = 0, \/* initial state *\/$/;"	e	enum:__anon0bfbaecf3d03
+RIL_PINSTATE_DISABLED	guest/hals/ril/reference-libril/ril.h	/^    RIL_PINSTATE_DISABLED             = 3,$/;"	e	enum:__anon0bfbaecf3503
+RIL_PINSTATE_ENABLED_BLOCKED	guest/hals/ril/reference-libril/ril.h	/^    RIL_PINSTATE_ENABLED_BLOCKED      = 4,$/;"	e	enum:__anon0bfbaecf3503
+RIL_PINSTATE_ENABLED_NOT_VERIFIED	guest/hals/ril/reference-libril/ril.h	/^    RIL_PINSTATE_ENABLED_NOT_VERIFIED = 1,$/;"	e	enum:__anon0bfbaecf3503
+RIL_PINSTATE_ENABLED_PERM_BLOCKED	guest/hals/ril/reference-libril/ril.h	/^    RIL_PINSTATE_ENABLED_PERM_BLOCKED = 5$/;"	e	enum:__anon0bfbaecf3503
+RIL_PINSTATE_ENABLED_VERIFIED	guest/hals/ril/reference-libril/ril.h	/^    RIL_PINSTATE_ENABLED_VERIFIED     = 2,$/;"	e	enum:__anon0bfbaecf3503
+RIL_PINSTATE_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RIL_PINSTATE_UNKNOWN              = 0,$/;"	e	enum:__anon0bfbaecf3503
+RIL_PersoSubstate	guest/hals/ril/reference-libril/ril.h	/^} RIL_PersoSubstate;$/;"	t	typeref:enum:__anon0bfbaecf3303
+RIL_PersoSubstateV1_5	guest/hals/ril/reference-libril/ril.h	/^} RIL_PersoSubstateV1_5;$/;"	t	typeref:enum:__anon0bfbaecf3d03
+RIL_PhoneCapability	guest/hals/ril/reference-libril/ril.h	/^} RIL_PhoneCapability;$/;"	t	typeref:struct:__anon0bfbaecfbc08
+RIL_PinState	guest/hals/ril/reference-libril/ril.h	/^} RIL_PinState;$/;"	t	typeref:enum:__anon0bfbaecf3503
+RIL_PreferredNetworkType	guest/hals/ril/reference-libril/ril.h	/^} RIL_PreferredNetworkType;$/;"	t	typeref:enum:__anon0bfbaecf0b03
+RIL_PublicKeyType	guest/hals/ril/reference-libril/ril.h	/^} RIL_PublicKeyType;$/;"	t	typeref:enum:__anon0bfbaecf2b03
+RIL_RADIO_ACCESS_SPECIFIER_MAX_SIZE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_RADIO_ACCESS_SPECIFIER_MAX_SIZE /;"	d
+RIL_RADIO_CAPABILITY_VERSION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_RADIO_CAPABILITY_VERSION /;"	d
+RIL_REDIRECTING_REASON_CALLED_DTE_OUT_OF_ORDER	guest/hals/ril/reference-libril/ril.h	/^  RIL_REDIRECTING_REASON_CALLED_DTE_OUT_OF_ORDER = 9,$/;"	e	enum:__anon0bfbaecf8403
+RIL_REDIRECTING_REASON_CALL_FORWARDING_BUSY	guest/hals/ril/reference-libril/ril.h	/^  RIL_REDIRECTING_REASON_CALL_FORWARDING_BUSY = 1,$/;"	e	enum:__anon0bfbaecf8403
+RIL_REDIRECTING_REASON_CALL_FORWARDING_BY_THE_CALLED_DTE	guest/hals/ril/reference-libril/ril.h	/^  RIL_REDIRECTING_REASON_CALL_FORWARDING_BY_THE_CALLED_DTE = 10,$/;"	e	enum:__anon0bfbaecf8403
+RIL_REDIRECTING_REASON_CALL_FORWARDING_NO_REPLY	guest/hals/ril/reference-libril/ril.h	/^  RIL_REDIRECTING_REASON_CALL_FORWARDING_NO_REPLY = 2,$/;"	e	enum:__anon0bfbaecf8403
+RIL_REDIRECTING_REASON_CALL_FORWARDING_UNCONDITIONAL	guest/hals/ril/reference-libril/ril.h	/^  RIL_REDIRECTING_REASON_CALL_FORWARDING_UNCONDITIONAL = 15,$/;"	e	enum:__anon0bfbaecf8403
+RIL_REDIRECTING_REASON_RESERVED	guest/hals/ril/reference-libril/ril.h	/^  RIL_REDIRECTING_REASON_RESERVED$/;"	e	enum:__anon0bfbaecf8403
+RIL_REDIRECTING_REASON_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^  RIL_REDIRECTING_REASON_UNKNOWN = 0,$/;"	e	enum:__anon0bfbaecf8403
+RIL_REG_DENIED	guest/hals/ril/reference-libril/ril.h	/^    RIL_REG_DENIED = 3,                          \/\/ Registration denied$/;"	e	enum:__anon0bfbaecf3703
+RIL_REG_DENIED_AND_EMERGENCY_AVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    RIL_REG_DENIED_AND_EMERGENCY_AVAILABLE = 13, \/\/ Same as REG_DENIED but indicates that$/;"	e	enum:__anon0bfbaecf3703
+RIL_REG_HOME	guest/hals/ril/reference-libril/ril.h	/^    RIL_REG_HOME = 1,                            \/\/ Registered, home network$/;"	e	enum:__anon0bfbaecf3703
+RIL_REG_ROAMING	guest/hals/ril/reference-libril/ril.h	/^    RIL_REG_ROAMING = 5,                         \/\/ Registered, roaming$/;"	e	enum:__anon0bfbaecf3703
+RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU /;"	d
+RIL_REQUEST_ALLOCATE_PDU_SESSION_ID	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ALLOCATE_PDU_SESSION_ID /;"	d
+RIL_REQUEST_ALLOW_DATA	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ALLOW_DATA /;"	d
+RIL_REQUEST_ANSWER	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ANSWER /;"	d
+RIL_REQUEST_ARE_UICC_APPLICATIONS_ENABLED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ARE_UICC_APPLICATIONS_ENABLED /;"	d
+RIL_REQUEST_BASEBAND_VERSION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_BASEBAND_VERSION /;"	d
+RIL_REQUEST_CANCEL_HANDOVER	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CANCEL_HANDOVER /;"	d
+RIL_REQUEST_CANCEL_USSD	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CANCEL_USSD /;"	d
+RIL_REQUEST_CDMA_BURST_DTMF	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_BURST_DTMF /;"	d
+RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM /;"	d
+RIL_REQUEST_CDMA_FLASH	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_FLASH /;"	d
+RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG /;"	d
+RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE /;"	d
+RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE /;"	d
+RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE /;"	d
+RIL_REQUEST_CDMA_SEND_SMS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SEND_SMS /;"	d
+RIL_REQUEST_CDMA_SEND_SMS_EXPECT_MORE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SEND_SMS_EXPECT_MORE /;"	d
+RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG /;"	d
+RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE /;"	d
+RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE /;"	d
+RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE /;"	d
+RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE /;"	d
+RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION /;"	d
+RIL_REQUEST_CDMA_SUBSCRIPTION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_SUBSCRIPTION /;"	d
+RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY /;"	d
+RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM /;"	d
+RIL_REQUEST_CHANGE_BARRING_PASSWORD	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CHANGE_BARRING_PASSWORD /;"	d
+RIL_REQUEST_CHANGE_SIM_PIN	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CHANGE_SIM_PIN /;"	d
+RIL_REQUEST_CHANGE_SIM_PIN2	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CHANGE_SIM_PIN2 /;"	d
+RIL_REQUEST_CONFERENCE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CONFERENCE /;"	d
+RIL_REQUEST_CONFIG_GET_HAL_DEVICE_CAPABILITIES	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CONFIG_GET_HAL_DEVICE_CAPABILITIES /;"	d
+RIL_REQUEST_CONFIG_GET_MODEM_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CONFIG_GET_MODEM_CONFIG /;"	d
+RIL_REQUEST_CONFIG_GET_PHONE_CAPABILITY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CONFIG_GET_PHONE_CAPABILITY /;"	d
+RIL_REQUEST_CONFIG_GET_SLOT_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CONFIG_GET_SLOT_STATUS /;"	d
+RIL_REQUEST_CONFIG_SET_MODEM_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CONFIG_SET_MODEM_CONFIG /;"	d
+RIL_REQUEST_CONFIG_SET_PREFER_DATA_MODEM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CONFIG_SET_PREFER_DATA_MODEM /;"	d
+RIL_REQUEST_CONFIG_SET_SLOT_MAPPING	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_CONFIG_SET_SLOT_MAPPING /;"	d
+RIL_REQUEST_DATA_CALL_LIST	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DATA_CALL_LIST /;"	d
+RIL_REQUEST_DATA_REGISTRATION_STATE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DATA_REGISTRATION_STATE /;"	d
+RIL_REQUEST_DEACTIVATE_DATA_CALL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DEACTIVATE_DATA_CALL /;"	d
+RIL_REQUEST_DELETE_SMS_ON_SIM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DELETE_SMS_ON_SIM /;"	d
+RIL_REQUEST_DEVICE_IDENTITY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DEVICE_IDENTITY /;"	d
+RIL_REQUEST_DIAL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DIAL /;"	d
+RIL_REQUEST_DTMF	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DTMF /;"	d
+RIL_REQUEST_DTMF_START	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DTMF_START /;"	d
+RIL_REQUEST_DTMF_STOP	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_DTMF_STOP /;"	d
+RIL_REQUEST_EMERGENCY_DIAL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_EMERGENCY_DIAL /;"	d
+RIL_REQUEST_ENABLE_MODEM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENABLE_MODEM /;"	d
+RIL_REQUEST_ENABLE_NR_DUAL_CONNECTIVITY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENABLE_NR_DUAL_CONNECTIVITY /;"	d
+RIL_REQUEST_ENABLE_UICC_APPLICATIONS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENABLE_UICC_APPLICATIONS /;"	d
+RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION /;"	d
+RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION /;"	d
+RIL_REQUEST_ENTER_SIM_PIN	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENTER_SIM_PIN /;"	d
+RIL_REQUEST_ENTER_SIM_PIN2	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENTER_SIM_PIN2 /;"	d
+RIL_REQUEST_ENTER_SIM_PUK	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENTER_SIM_PUK /;"	d
+RIL_REQUEST_ENTER_SIM_PUK2	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ENTER_SIM_PUK2 /;"	d
+RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE /;"	d
+RIL_REQUEST_EXPLICIT_CALL_TRANSFER	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_EXPLICIT_CALL_TRANSFER /;"	d
+RIL_REQUEST_GET_ACTIVITY_INFO	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_ACTIVITY_INFO /;"	d
+RIL_REQUEST_GET_ALLOWED_NETWORK_TYPES_BITMAP	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_ALLOWED_NETWORK_TYPES_BITMAP /;"	d
+RIL_REQUEST_GET_BARRING_INFO	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_BARRING_INFO /;"	d
+RIL_REQUEST_GET_CARRIER_RESTRICTIONS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_CARRIER_RESTRICTIONS /;"	d
+RIL_REQUEST_GET_CELL_INFO_LIST	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_CELL_INFO_LIST /;"	d
+RIL_REQUEST_GET_CLIR	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_CLIR /;"	d
+RIL_REQUEST_GET_CURRENT_CALLS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_CURRENT_CALLS /;"	d
+RIL_REQUEST_GET_DC_RT_INFO	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_DC_RT_INFO /;"	d
+RIL_REQUEST_GET_HARDWARE_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_HARDWARE_CONFIG /;"	d
+RIL_REQUEST_GET_IMEI	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_IMEI /;"	d
+RIL_REQUEST_GET_IMEISV	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_IMEISV /;"	d
+RIL_REQUEST_GET_IMSI	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_IMSI /;"	d
+RIL_REQUEST_GET_MODEM_STACK_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_MODEM_STACK_STATUS /;"	d
+RIL_REQUEST_GET_MUTE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_MUTE /;"	d
+RIL_REQUEST_GET_NEIGHBORING_CELL_IDS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_NEIGHBORING_CELL_IDS /;"	d
+RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE /;"	d
+RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE_BITMAP	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE_BITMAP /;"	d
+RIL_REQUEST_GET_RADIO_CAPABILITY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_RADIO_CAPABILITY /;"	d
+RIL_REQUEST_GET_SIM_PHONEBOOK_CAPACITY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_SIM_PHONEBOOK_CAPACITY /;"	d
+RIL_REQUEST_GET_SIM_PHONEBOOK_RECORDS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_SIM_PHONEBOOK_RECORDS /;"	d
+RIL_REQUEST_GET_SIM_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_SIM_STATUS /;"	d
+RIL_REQUEST_GET_SLICING_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_SLICING_CONFIG /;"	d
+RIL_REQUEST_GET_SMSC_ADDRESS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_SMSC_ADDRESS /;"	d
+RIL_REQUEST_GET_SYSTEM_SELECTION_CHANNELS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GET_SYSTEM_SELECTION_CHANNELS /;"	d
+RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG /;"	d
+RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG /;"	d
+RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION /;"	d
+RIL_REQUEST_HANGUP	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_HANGUP /;"	d
+RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND /;"	d
+RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND /;"	d
+RIL_REQUEST_IMS_REGISTRATION_STATE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_IMS_REGISTRATION_STATE /;"	d
+RIL_REQUEST_IMS_SEND_SMS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_IMS_SEND_SMS /;"	d
+RIL_REQUEST_ISIM_AUTHENTICATION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_ISIM_AUTHENTICATION /;"	d
+RIL_REQUEST_IS_NR_DUAL_CONNECTIVITY_ENABLED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_IS_NR_DUAL_CONNECTIVITY_ENABLED /;"	d
+RIL_REQUEST_LAST	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_LAST /;"	d
+RIL_REQUEST_LAST_CALL_FAIL_CAUSE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_LAST_CALL_FAIL_CAUSE /;"	d
+RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE /;"	d
+RIL_REQUEST_NV_READ_ITEM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_NV_READ_ITEM /;"	d
+RIL_REQUEST_NV_RESET_CONFIG	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_NV_RESET_CONFIG /;"	d
+RIL_REQUEST_NV_WRITE_CDMA_PRL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_NV_WRITE_CDMA_PRL /;"	d
+RIL_REQUEST_NV_WRITE_ITEM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_NV_WRITE_ITEM /;"	d
+RIL_REQUEST_OEM_HOOK_RAW	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_OEM_HOOK_RAW /;"	d
+RIL_REQUEST_OEM_HOOK_STRINGS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_OEM_HOOK_STRINGS /;"	d
+RIL_REQUEST_OPERATOR	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_OPERATOR /;"	d
+RIL_REQUEST_PULL_LCEDATA	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_PULL_LCEDATA /;"	d
+RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE /;"	d
+RIL_REQUEST_QUERY_AVAILABLE_NETWORKS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_QUERY_AVAILABLE_NETWORKS /;"	d
+RIL_REQUEST_QUERY_CALL_FORWARD_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_QUERY_CALL_FORWARD_STATUS /;"	d
+RIL_REQUEST_QUERY_CALL_WAITING	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_QUERY_CALL_WAITING /;"	d
+RIL_REQUEST_QUERY_CLIP	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_QUERY_CLIP /;"	d
+RIL_REQUEST_QUERY_FACILITY_LOCK	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_QUERY_FACILITY_LOCK /;"	d
+RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE /;"	d
+RIL_REQUEST_QUERY_TTY_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_QUERY_TTY_MODE /;"	d
+RIL_REQUEST_RADIO_CONFIG_BASE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_RADIO_CONFIG_BASE /;"	d
+RIL_REQUEST_RADIO_CONFIG_LAST	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_RADIO_CONFIG_LAST /;"	d
+RIL_REQUEST_RADIO_POWER	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_RADIO_POWER /;"	d
+RIL_REQUEST_RELEASE_PDU_SESSION_ID	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_RELEASE_PDU_SESSION_ID /;"	d
+RIL_REQUEST_REPORT_SMS_MEMORY_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_REPORT_SMS_MEMORY_STATUS /;"	d
+RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING /;"	d
+RIL_REQUEST_RESET_RADIO	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_RESET_RADIO /;"	d
+RIL_REQUEST_SCREEN_STATE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SCREEN_STATE /;"	d
+RIL_REQUEST_SEND_DEVICE_STATE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SEND_DEVICE_STATE /;"	d
+RIL_REQUEST_SEND_SMS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SEND_SMS /;"	d
+RIL_REQUEST_SEND_SMS_EXPECT_MORE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SEND_SMS_EXPECT_MORE /;"	d
+RIL_REQUEST_SEND_USSD	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SEND_USSD /;"	d
+RIL_REQUEST_SEPARATE_CONNECTION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SEPARATE_CONNECTION /;"	d
+RIL_REQUEST_SETUP_DATA_CALL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SETUP_DATA_CALL /;"	d
+RIL_REQUEST_SET_ALLOWED_NETWORK_TYPES_BITMAP	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_ALLOWED_NETWORK_TYPES_BITMAP /;"	d
+RIL_REQUEST_SET_BAND_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_BAND_MODE /;"	d
+RIL_REQUEST_SET_CALL_FORWARD	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_CALL_FORWARD /;"	d
+RIL_REQUEST_SET_CALL_WAITING	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_CALL_WAITING /;"	d
+RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION /;"	d
+RIL_REQUEST_SET_CARRIER_RESTRICTIONS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_CARRIER_RESTRICTIONS /;"	d
+RIL_REQUEST_SET_CLIR	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_CLIR /;"	d
+RIL_REQUEST_SET_DATA_PROFILE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_DATA_PROFILE /;"	d
+RIL_REQUEST_SET_DATA_THROTTLING	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_DATA_THROTTLING /;"	d
+RIL_REQUEST_SET_DC_RT_INFO_RATE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_DC_RT_INFO_RATE /;"	d
+RIL_REQUEST_SET_FACILITY_LOCK	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_FACILITY_LOCK /;"	d
+RIL_REQUEST_SET_INITIAL_ATTACH_APN	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_INITIAL_ATTACH_APN /;"	d
+RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA /;"	d
+RIL_REQUEST_SET_LOCATION_UPDATES	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_LOCATION_UPDATES /;"	d
+RIL_REQUEST_SET_MUTE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_MUTE /;"	d
+RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC /;"	d
+RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL /;"	d
+RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE /;"	d
+RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE_BITMAP	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE_BITMAP /;"	d
+RIL_REQUEST_SET_RADIO_CAPABILITY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_RADIO_CAPABILITY /;"	d
+RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA /;"	d
+RIL_REQUEST_SET_SIM_CARD_POWER	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_SIM_CARD_POWER /;"	d
+RIL_REQUEST_SET_SMSC_ADDRESS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_SMSC_ADDRESS /;"	d
+RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION /;"	d
+RIL_REQUEST_SET_SYSTEM_SELECTION_CHANNELS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_SYSTEM_SELECTION_CHANNELS /;"	d
+RIL_REQUEST_SET_TTY_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_TTY_MODE /;"	d
+RIL_REQUEST_SET_UICC_SUBSCRIPTION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_UICC_SUBSCRIPTION /;"	d
+RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER /;"	d
+RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE /;"	d
+RIL_REQUEST_SHUTDOWN	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SHUTDOWN /;"	d
+RIL_REQUEST_SIGNAL_STRENGTH	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SIGNAL_STRENGTH /;"	d
+RIL_REQUEST_SIM_AUTHENTICATION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SIM_AUTHENTICATION /;"	d
+RIL_REQUEST_SIM_CLOSE_CHANNEL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SIM_CLOSE_CHANNEL /;"	d
+RIL_REQUEST_SIM_IO	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SIM_IO /;"	d
+RIL_REQUEST_SIM_OPEN_CHANNEL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SIM_OPEN_CHANNEL /;"	d
+RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC /;"	d
+RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL /;"	d
+RIL_REQUEST_SMS_ACKNOWLEDGE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SMS_ACKNOWLEDGE /;"	d
+RIL_REQUEST_START_HANDOVER	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_START_HANDOVER /;"	d
+RIL_REQUEST_START_KEEPALIVE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_START_KEEPALIVE /;"	d
+RIL_REQUEST_START_LCE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_START_LCE /;"	d
+RIL_REQUEST_START_NETWORK_SCAN	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_START_NETWORK_SCAN /;"	d
+RIL_REQUEST_STK_GET_PROFILE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STK_GET_PROFILE /;"	d
+RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM /;"	d
+RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND /;"	d
+RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS /;"	d
+RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE /;"	d
+RIL_REQUEST_STK_SET_PROFILE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STK_SET_PROFILE /;"	d
+RIL_REQUEST_STOP_KEEPALIVE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STOP_KEEPALIVE /;"	d
+RIL_REQUEST_STOP_LCE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STOP_LCE /;"	d
+RIL_REQUEST_STOP_NETWORK_SCAN	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_STOP_NETWORK_SCAN /;"	d
+RIL_REQUEST_SWITCH_HOLDING_AND_ACTIVE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SWITCH_HOLDING_AND_ACTIVE /;"	d
+RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE /;"	d
+RIL_REQUEST_UDUB	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_UDUB /;"	d
+RIL_REQUEST_UPDATE_SIM_PHONEBOOK_RECORDS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_UPDATE_SIM_PHONEBOOK_RECORDS /;"	d
+RIL_REQUEST_VOICE_RADIO_TECH	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_VOICE_RADIO_TECH /;"	d
+RIL_REQUEST_VOICE_REGISTRATION_STATE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_VOICE_REGISTRATION_STATE /;"	d
+RIL_REQUEST_WRITE_SMS_TO_SIM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_REQUEST_WRITE_SMS_TO_SIM /;"	d
+RIL_RESPONSE_ACKNOWLEDGEMENT	guest/hals/ril/reference-libril/ril.h	/^#define RIL_RESPONSE_ACKNOWLEDGEMENT /;"	d
+RIL_RESTRICTED_STATE_CS_ALL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_RESTRICTED_STATE_CS_ALL /;"	d
+RIL_RESTRICTED_STATE_CS_EMERGENCY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_RESTRICTED_STATE_CS_EMERGENCY /;"	d
+RIL_RESTRICTED_STATE_CS_NORMAL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_RESTRICTED_STATE_CS_NORMAL /;"	d
+RIL_RESTRICTED_STATE_NONE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_RESTRICTED_STATE_NONE /;"	d
+RIL_RESTRICTED_STATE_PS_ALL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_RESTRICTED_STATE_PS_ALL /;"	d
+RIL_RadioAccessFamily	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioAccessFamily;$/;"	t	typeref:enum:__anon0bfbaecf0603
+RIL_RadioAccessNetworks	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioAccessNetworks;$/;"	t	typeref:enum:__anon0bfbaecfa503
+RIL_RadioAccessNetworks_v1_5	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioAccessNetworks_v1_5;$/;"	t	typeref:enum:__anon0bfbaecf5503
+RIL_RadioAccessSpecifier	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioAccessSpecifier;$/;"	t	typeref:struct:__anon0bfbaecfab08
+RIL_RadioAccessSpecifier_v1_5	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioAccessSpecifier_v1_5;$/;"	t	typeref:struct:__anon0bfbaecfae08
+RIL_RadioBandMode	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioBandMode;$/;"	t	typeref:enum:__anon0bfbaecf0703
+RIL_RadioCapability	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioCapability;$/;"	t	typeref:struct:__anon0bfbaecf0a08
+RIL_RadioFunctions	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioFunctions;$/;"	t	typeref:struct:__anon0bfbaecfbf08
+RIL_RadioState	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioState;$/;"	t	typeref:enum:__anon0bfbaecf0403
+RIL_RadioStateRequest	guest/hals/ril/reference-libril/ril.h	/^typedef RIL_RadioState (*RIL_RadioStateRequest)();$/;"	t	typeref:typename:RIL_RadioState (*)()
+RIL_RadioStateRequest	guest/hals/ril/reference-libril/ril.h	/^typedef RIL_RadioState (*RIL_RadioStateRequest)(RIL_SOCKET_ID socket_id);$/;"	t	typeref:typename:RIL_RadioState (*)(RIL_SOCKET_ID socket_id)
+RIL_RadioTechnology	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioTechnology;$/;"	t	typeref:enum:__anon0bfbaecf0503
+RIL_RadioTechnologyFamily	guest/hals/ril/reference-libril/ril.h	/^} RIL_RadioTechnologyFamily;$/;"	t	typeref:enum:__anon0bfbaecf1703
+RIL_RegState	guest/hals/ril/reference-libril/ril.h	/^} RIL_RegState;$/;"	t	typeref:enum:__anon0bfbaecf3703
+RIL_RequestFunc	guest/hals/ril/reference-libril/ril.h	/^typedef void (*RIL_RequestFunc) (int request, void *data,$/;"	t	typeref:typename:void (*)(int request,void * data,size_t datalen,RIL_Token t)
+RIL_RequestFunc	guest/hals/ril/reference-libril/ril.h	/^typedef void (*RIL_RequestFunc) (int request, void *data,$/;"	t	typeref:typename:void (*)(int request,void * data,size_t datalen,RIL_Token t,RIL_SOCKET_ID socket_id)
+RIL_SAP_SOCKET	guest/hals/ril/reference-libril/ril_ex.h	/^    RIL_SAP_SOCKET$/;"	e	enum:__anon316d80cb0103
+RIL_SERVICE_H	guest/hals/ril/reference-libril/ril_service.h	/^#define RIL_SERVICE_H$/;"	d
+RIL_SERVICE_NAME_BASE	guest/hals/ril/reference-libril/ril_internal.h	/^#define RIL_SERVICE_NAME_BASE /;"	d
+RIL_SHLIB	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^#define RIL_SHLIB$/;"	d	file:
+RIL_SHLIB	guest/hals/ril/reference-libril/RilSapSocket.h	/^#define RIL_SHLIB$/;"	d
+RIL_SIM_APDU	guest/hals/ril/reference-libril/ril.h	/^} RIL_SIM_APDU;$/;"	t	typeref:struct:__anon0bfbaecf1f08
+RIL_SIM_IO_Response	guest/hals/ril/reference-libril/ril.h	/^} RIL_SIM_IO_Response;$/;"	t	typeref:struct:__anon0bfbaecf2008
+RIL_SIM_IO_v5	guest/hals/ril/reference-libril/ril.h	/^} RIL_SIM_IO_v5;$/;"	t	typeref:struct:__anon0bfbaecf1d08
+RIL_SIM_IO_v6	guest/hals/ril/reference-libril/ril.h	/^} RIL_SIM_IO_v6;$/;"	t	typeref:struct:__anon0bfbaecf1e08
+RIL_SMS_Response	guest/hals/ril/reference-libril/ril.h	/^} RIL_SMS_Response;$/;"	t	typeref:struct:__anon0bfbaecf1a08
+RIL_SMS_WriteArgs	guest/hals/ril/reference-libril/ril.h	/^} RIL_SMS_WriteArgs;$/;"	t	typeref:struct:__anon0bfbaecf1b08
+RIL_SOCKET_1	guest/hals/ril/reference-libril/ril.h	/^    RIL_SOCKET_1,$/;"	e	enum:__anon0bfbaecf0103
+RIL_SOCKET_2	guest/hals/ril/reference-libril/ril.h	/^    RIL_SOCKET_2,$/;"	e	enum:__anon0bfbaecf0103
+RIL_SOCKET_3	guest/hals/ril/reference-libril/ril.h	/^    RIL_SOCKET_3,$/;"	e	enum:__anon0bfbaecf0103
+RIL_SOCKET_4	guest/hals/ril/reference-libril/ril.h	/^    RIL_SOCKET_4,$/;"	e	enum:__anon0bfbaecf0103
+RIL_SOCKET_H_INCLUDED	guest/hals/ril/reference-libril/RilSocket.h	/^#define RIL_SOCKET_H_INCLUDED$/;"	d
+RIL_SOCKET_ID	guest/hals/ril/reference-libril/ril.h	/^} RIL_SOCKET_ID;$/;"	t	typeref:enum:__anon0bfbaecf0103
+RIL_SOCKET_NUM	guest/hals/ril/reference-libril/ril.h	/^    RIL_SOCKET_NUM$/;"	e	enum:__anon0bfbaecf0103
+RIL_SOCKET_TYPE	guest/hals/ril/reference-libril/ril_ex.h	/^} RIL_SOCKET_TYPE;$/;"	t	typeref:enum:__anon316d80cb0103
+RIL_ScanStatus	guest/hals/ril/reference-libril/ril.h	/^} RIL_ScanStatus;$/;"	t	typeref:enum:__anon0bfbaecfb203
+RIL_ScanType	guest/hals/ril/reference-libril/ril.h	/^} RIL_ScanType;$/;"	t	typeref:enum:__anon0bfbaecfa403
+RIL_SignalStrengthReportingCriteria_v1_5	guest/hals/ril/reference-libril/ril.h	/^} RIL_SignalStrengthReportingCriteria_v1_5;$/;"	t	typeref:struct:__anon0bfbaecf5608
+RIL_SignalStrengthWcdma	guest/hals/ril/reference-libril/ril.h	/^} RIL_SignalStrengthWcdma;$/;"	t	typeref:struct:__anon0bfbaecf4808
+RIL_SignalStrength_v10	guest/hals/ril/reference-libril/ril.h	/^} RIL_SignalStrength_v10;$/;"	t	typeref:struct:__anon0bfbaecf5208
+RIL_SignalStrength_v12	guest/hals/ril/reference-libril/ril.h	/^} RIL_SignalStrength_v12;$/;"	t	typeref:struct:__anon0bfbaecf5308
+RIL_SignalStrength_v5	guest/hals/ril/reference-libril/ril.h	/^} RIL_SignalStrength_v5;$/;"	t	typeref:struct:__anon0bfbaecf4f08
+RIL_SignalStrength_v6	guest/hals/ril/reference-libril/ril.h	/^} RIL_SignalStrength_v6;$/;"	t	typeref:struct:__anon0bfbaecf5008
+RIL_SignalStrength_v8	guest/hals/ril/reference-libril/ril.h	/^} RIL_SignalStrength_v8;$/;"	t	typeref:struct:__anon0bfbaecf5108
+RIL_SimAuthentication	guest/hals/ril/reference-libril/ril.h	/^} RIL_SimAuthentication;$/;"	t	typeref:struct:__anon0bfbaecfc208
+RIL_SimLockMultiSimPolicy	guest/hals/ril/reference-libril/ril.h	/^} RIL_SimLockMultiSimPolicy;$/;"	t	typeref:enum:__anon0bfbaecf2803
+RIL_SimRefreshResponse_v7	guest/hals/ril/reference-libril/ril.h	/^} RIL_SimRefreshResponse_v7;$/;"	t	typeref:struct:__anon0bfbaecf4108
+RIL_SimRefreshResult	guest/hals/ril/reference-libril/ril.h	/^} RIL_SimRefreshResult;$/;"	t	typeref:enum:__anon0bfbaecf4003
+RIL_SimSlotStatus	guest/hals/ril/reference-libril/ril.h	/^} RIL_SimSlotStatus;$/;"	t	typeref:struct:__anon0bfbaecfb908
+RIL_SimSlotStatus_V1_2	guest/hals/ril/reference-libril/ril.h	/^} RIL_SimSlotStatus_V1_2;$/;"	t	typeref:struct:__anon0bfbaecfba08
+RIL_SlotState	guest/hals/ril/reference-libril/ril.h	/^} RIL_SlotState;$/;"	t	typeref:enum:__anon0bfbaecfb803
+RIL_SrvccState	guest/hals/ril/reference-libril/ril.h	/^} RIL_SrvccState;$/;"	t	typeref:enum:__anon0bfbaecf8e03
+RIL_SsRequestType	guest/hals/ril/reference-libril/ril.h	/^} RIL_SsRequestType;$/;"	t	typeref:enum:__anon0bfbaecf9603
+RIL_SsServiceType	guest/hals/ril/reference-libril/ril.h	/^} RIL_SsServiceType;$/;"	t	typeref:enum:__anon0bfbaecf9503
+RIL_SsTeleserviceType	guest/hals/ril/reference-libril/ril.h	/^} RIL_SsTeleserviceType;$/;"	t	typeref:enum:__anon0bfbaecf9703
+RIL_StkCcUnsolSsResponse	guest/hals/ril/reference-libril/ril.h	/^} RIL_StkCcUnsolSsResponse;$/;"	t	typeref:struct:__anon0bfbaecf9908
+RIL_SuppSvcNotification	guest/hals/ril/reference-libril/ril.h	/^} RIL_SuppSvcNotification;$/;"	t	typeref:struct:__anon0bfbaecf3108
+RIL_Supports	guest/hals/ril/reference-libril/ril.h	/^typedef int (*RIL_Supports)(int requestCode);$/;"	t	typeref:typename:int (*)(int requestCode)
+RIL_SystemSelectionChannels_v1_5	guest/hals/ril/reference-libril/ril.h	/^} RIL_SystemSelectionChannels_v1_5;$/;"	t	typeref:struct:__anon0bfbaecfb108
+RIL_TD_SCDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^} RIL_TD_SCDMA_SignalStrength;$/;"	t	typeref:struct:__anon0bfbaecf4d08
+RIL_TELEPHONY_SOCKET	guest/hals/ril/reference-libril/ril_ex.h	/^    RIL_TELEPHONY_SOCKET,$/;"	e	enum:__anon316d80cb0103
+RIL_TIMESTAMP_TYPE_ANTENNA	guest/hals/ril/reference-libril/ril.h	/^    RIL_TIMESTAMP_TYPE_ANTENNA = 1,$/;"	e	enum:__anon0bfbaecf6c03
+RIL_TIMESTAMP_TYPE_JAVA_RIL	guest/hals/ril/reference-libril/ril.h	/^    RIL_TIMESTAMP_TYPE_JAVA_RIL = 4,$/;"	e	enum:__anon0bfbaecf6c03
+RIL_TIMESTAMP_TYPE_MODEM	guest/hals/ril/reference-libril/ril.h	/^    RIL_TIMESTAMP_TYPE_MODEM = 2,$/;"	e	enum:__anon0bfbaecf6c03
+RIL_TIMESTAMP_TYPE_OEM_RIL	guest/hals/ril/reference-libril/ril.h	/^    RIL_TIMESTAMP_TYPE_OEM_RIL = 3,$/;"	e	enum:__anon0bfbaecf6c03
+RIL_TIMESTAMP_TYPE_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RIL_TIMESTAMP_TYPE_UNKNOWN = 0,$/;"	e	enum:__anon0bfbaecf6c03
+RIL_TimeStampType	guest/hals/ril/reference-libril/ril.h	/^} RIL_TimeStampType;$/;"	t	typeref:enum:__anon0bfbaecf6c03
+RIL_TimedCallback	guest/hals/ril/reference-libril/ril.h	/^typedef void (*RIL_TimedCallback) (void *param);$/;"	t	typeref:typename:void (*)(void * param)
+RIL_Token	guest/hals/ril/reference-libril/ril.h	/^typedef void * RIL_Token;$/;"	t	typeref:typename:void *
+RIL_UIM_SOCKET_H_INCLUDED	guest/hals/ril/reference-libril/RilSapSocket.h	/^#define RIL_UIM_SOCKET_H_INCLUDED$/;"	d
+RIL_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    RIL_UNKNOWN = 4,                             \/\/ Unknown$/;"	e	enum:__anon0bfbaecf3703
+RIL_UNKNOWN_AND_EMERGENCY_AVAILABLE	guest/hals/ril/reference-libril/ril.h	/^    RIL_UNKNOWN_AND_EMERGENCY_AVAILABLE = 14,    \/\/ Same as UNKNOWN but indicates that$/;"	e	enum:__anon0bfbaecf3703
+RIL_UNSOL_CALL_RING	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CALL_RING /;"	d
+RIL_UNSOL_CARRIER_INFO_IMSI_ENCRYPTION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CARRIER_INFO_IMSI_ENCRYPTION /;"	d
+RIL_UNSOL_CDMA_CALL_WAITING	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CDMA_CALL_WAITING /;"	d
+RIL_UNSOL_CDMA_INFO_REC	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CDMA_INFO_REC /;"	d
+RIL_UNSOL_CDMA_OTA_PROVISION_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CDMA_OTA_PROVISION_STATUS /;"	d
+RIL_UNSOL_CDMA_PRL_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CDMA_PRL_CHANGED /;"	d
+RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL /;"	d
+RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED /;"	d
+RIL_UNSOL_CELL_INFO_LIST	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CELL_INFO_LIST /;"	d
+RIL_UNSOL_CONFIG_ICC_SLOT_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_CONFIG_ICC_SLOT_STATUS /;"	d
+RIL_UNSOL_DATA_CALL_LIST_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_DATA_CALL_LIST_CHANGED /;"	d
+RIL_UNSOL_DC_RT_INFO_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_DC_RT_INFO_CHANGED /;"	d
+RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE /;"	d
+RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE /;"	d
+RIL_UNSOL_HARDWARE_CONFIG_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_HARDWARE_CONFIG_CHANGED /;"	d
+RIL_UNSOL_KEEPALIVE_STATUS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_KEEPALIVE_STATUS /;"	d
+RIL_UNSOL_LCEDATA_RECV	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_LCEDATA_RECV /;"	d
+RIL_UNSOL_MODEM_RESTART	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_MODEM_RESTART /;"	d
+RIL_UNSOL_NETWORK_SCAN_RESULT	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_NETWORK_SCAN_RESULT /;"	d
+RIL_UNSOL_NITZ_TIME_RECEIVED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_NITZ_TIME_RECEIVED /;"	d
+RIL_UNSOL_OEM_HOOK_RAW	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_OEM_HOOK_RAW /;"	d
+RIL_UNSOL_ON_SS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_ON_SS /;"	d
+RIL_UNSOL_ON_USSD	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_ON_USSD /;"	d
+RIL_UNSOL_ON_USSD_REQUEST	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_ON_USSD_REQUEST /;"	d
+RIL_UNSOL_PCO_DATA	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_PCO_DATA /;"	d
+RIL_UNSOL_PHYSICAL_CHANNEL_CONFIGS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_PHYSICAL_CHANNEL_CONFIGS /;"	d
+RIL_UNSOL_RADIO_CAPABILITY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RADIO_CAPABILITY /;"	d
+RIL_UNSOL_RESEND_INCALL_MUTE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESEND_INCALL_MUTE /;"	d
+RIL_UNSOL_RESPONSE	guest/hals/ril/reference-libril/ril.cpp	/^#define RIL_UNSOL_RESPONSE(/;"	d	file:
+RIL_UNSOL_RESPONSE	guest/hals/ril/reference-libril/ril_config.cpp	/^#define RIL_UNSOL_RESPONSE(/;"	d	file:
+RIL_UNSOL_RESPONSE_BASE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_BASE /;"	d
+RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED /;"	d
+RIL_UNSOL_RESPONSE_CDMA_NEW_SMS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_CDMA_NEW_SMS /;"	d
+RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED /;"	d
+RIL_UNSOL_RESPONSE_LAST	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_LAST /;"	d
+RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS /;"	d
+RIL_UNSOL_RESPONSE_NEW_SMS	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_NEW_SMS /;"	d
+RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM /;"	d
+RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT /;"	d
+RIL_UNSOL_RESPONSE_RADIO_CONFIG_BASE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_RADIO_CONFIG_BASE /;"	d
+RIL_UNSOL_RESPONSE_RADIO_CONFIG_LAST	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_RADIO_CONFIG_LAST /;"	d
+RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED /;"	d
+RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED /;"	d
+RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED /;"	d
+RIL_UNSOL_RESTRICTED_STATE_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RESTRICTED_STATE_CHANGED /;"	d
+RIL_UNSOL_RIL_CONNECTED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RIL_CONNECTED /;"	d
+RIL_UNSOL_RINGBACK_TONE	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_RINGBACK_TONE /;"	d
+RIL_UNSOL_SIGNAL_STRENGTH	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_SIGNAL_STRENGTH /;"	d
+RIL_UNSOL_SIM_REFRESH	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_SIM_REFRESH /;"	d
+RIL_UNSOL_SIM_SMS_STORAGE_FULL	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_SIM_SMS_STORAGE_FULL /;"	d
+RIL_UNSOL_SRVCC_STATE_NOTIFY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_SRVCC_STATE_NOTIFY /;"	d
+RIL_UNSOL_STK_CALL_SETUP	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_STK_CALL_SETUP /;"	d
+RIL_UNSOL_STK_CC_ALPHA_NOTIFY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_STK_CC_ALPHA_NOTIFY /;"	d
+RIL_UNSOL_STK_EVENT_NOTIFY	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_STK_EVENT_NOTIFY /;"	d
+RIL_UNSOL_STK_PROACTIVE_COMMAND	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_STK_PROACTIVE_COMMAND /;"	d
+RIL_UNSOL_STK_SESSION_END	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_STK_SESSION_END /;"	d
+RIL_UNSOL_SUPP_SVC_NOTIFICATION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_SUPP_SVC_NOTIFICATION /;"	d
+RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED /;"	d
+RIL_UNSOL_VOICE_RADIO_TECH_CHANGED	guest/hals/ril/reference-libril/ril.h	/^#define RIL_UNSOL_VOICE_RADIO_TECH_CHANGED /;"	d
+RIL_UNUSED_PARM	guest/hals/ril/reference-ril/reference-ril.c	/^#define RIL_UNUSED_PARM(/;"	d	file:
+RIL_UR_DATA_CALL_DORMANCY_CHANGED	guest/hals/ril/reference-libril/ril.h	/^    RIL_UR_DATA_CALL_DORMANCY_CHANGED = 0x04  \/\/ When this bit is set, modem should send the d/;"	e	enum:__anon0bfbaecfa203
+RIL_UR_FULL_NETWORK_STATE	guest/hals/ril/reference-libril/ril.h	/^    RIL_UR_FULL_NETWORK_STATE         = 0x02, \/\/ When this bit is set, modem should always sen/;"	e	enum:__anon0bfbaecfa203
+RIL_UR_SIGNAL_STRENGTH	guest/hals/ril/reference-libril/ril.h	/^    RIL_UR_SIGNAL_STRENGTH            = 0x01, \/\/ When this bit is set, modem should always sen/;"	e	enum:__anon0bfbaecfa203
+RIL_UUS_DCS	guest/hals/ril/reference-libril/ril.h	/^} RIL_UUS_DCS;$/;"	t	typeref:enum:__anon0bfbaecf0e03
+RIL_UUS_DCS_IA5c	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_DCS_IA5c = 4          \/* IA5 characters *\/$/;"	e	enum:__anon0bfbaecf0e03
+RIL_UUS_DCS_OSIHLP	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_DCS_OSIHLP = 1,       \/* OSI higher layer protocol *\/$/;"	e	enum:__anon0bfbaecf0e03
+RIL_UUS_DCS_RMCF	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_DCS_RMCF = 3,         \/* Reserved for system mangement$/;"	e	enum:__anon0bfbaecf0e03
+RIL_UUS_DCS_USP	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_DCS_USP = 0,          \/* User specified protocol *\/$/;"	e	enum:__anon0bfbaecf0e03
+RIL_UUS_DCS_X244	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_DCS_X244 = 2,         \/* X.244 *\/$/;"	e	enum:__anon0bfbaecf0e03
+RIL_UUS_Info	guest/hals/ril/reference-libril/ril.h	/^} RIL_UUS_Info;$/;"	t	typeref:struct:__anon0bfbaecf0f08
+RIL_UUS_TYPE1_IMPLICIT	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_TYPE1_IMPLICIT = 0,$/;"	e	enum:__anon0bfbaecf0d03
+RIL_UUS_TYPE1_NOT_REQUIRED	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_TYPE1_NOT_REQUIRED = 2,$/;"	e	enum:__anon0bfbaecf0d03
+RIL_UUS_TYPE1_REQUIRED	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_TYPE1_REQUIRED = 1,$/;"	e	enum:__anon0bfbaecf0d03
+RIL_UUS_TYPE2_NOT_REQUIRED	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_TYPE2_NOT_REQUIRED = 4,$/;"	e	enum:__anon0bfbaecf0d03
+RIL_UUS_TYPE2_REQUIRED	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_TYPE2_REQUIRED = 3,$/;"	e	enum:__anon0bfbaecf0d03
+RIL_UUS_TYPE3_NOT_REQUIRED	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_TYPE3_NOT_REQUIRED = 6$/;"	e	enum:__anon0bfbaecf0d03
+RIL_UUS_TYPE3_REQUIRED	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_TYPE3_REQUIRED = 5,$/;"	e	enum:__anon0bfbaecf0d03
+RIL_UUS_Type	guest/hals/ril/reference-libril/ril.h	/^} RIL_UUS_Type;$/;"	t	typeref:enum:__anon0bfbaecf0d03
+RIL_UnsolicitedResponseFilter	guest/hals/ril/reference-libril/ril.h	/^} RIL_UnsolicitedResponseFilter;$/;"	t	typeref:enum:__anon0bfbaecfa203
+RIL_UtranBands	guest/hals/ril/reference-libril/ril.h	/^} RIL_UtranBands;$/;"	t	typeref:enum:__anon0bfbaecfa803
+RIL_VERSION	guest/hals/ril/reference-libril/ril.h	/^#define RIL_VERSION /;"	d
+RIL_VERSION_MIN	guest/hals/ril/reference-libril/ril.h	/^#define RIL_VERSION_MIN /;"	d
+RIL_VoiceRegistrationStateResponse	guest/hals/ril/reference-libril/ril.h	/^}RIL_VoiceRegistrationStateResponse;$/;"	t	typeref:struct:__anon0bfbaecf7f08
+RIL_getServiceName	guest/hals/ril/reference-libril/ril.cpp	/^char * RIL_getServiceName() {$/;"	f	namespace:android	typeref:typename:char *
+RIL_onRequestAck	guest/hals/ril/reference-libril/ril.cpp	/^RIL_onRequestAck(RIL_Token t) {$/;"	f	namespace:android	typeref:typename:void
+RIL_onRequestComplete	guest/hals/ril/reference-libril/ril.cpp	/^RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen) {$/;"	f	namespace:android	typeref:typename:void
+RIL_onRequestComplete	guest/hals/ril/reference-ril/reference-ril.c	/^#define RIL_onRequestComplete(/;"	d	file:
+RIL_onUnsolicitedResponse	guest/hals/ril/reference-libril/ril.cpp	/^void RIL_onUnsolicitedResponse(int unsolResponse, const void *data,$/;"	f	namespace:android	typeref:typename:void
+RIL_onUnsolicitedResponse	guest/hals/ril/reference-ril/reference-ril.c	/^#define RIL_onUnsolicitedResponse(/;"	d	file:
+RIL_register	guest/hals/ril/reference-libril/ril.cpp	/^RIL_register (const RIL_RadioFunctions *callbacks) {$/;"	f	namespace:android	typeref:typename:void
+RIL_register_socket	guest/hals/ril/reference-libril/ril.cpp	/^RIL_register_socket (const RIL_RadioFunctions *(*Init)(const struct RIL_Env *, int, char **),$/;"	f	namespace:android	typeref:typename:void
+RIL_requestTimedCallback	guest/hals/ril/reference-libril/ril.cpp	/^RIL_requestTimedCallback (RIL_TimedCallback callback, void *param,$/;"	f	namespace:android	typeref:typename:void
+RIL_requestTimedCallback	guest/hals/ril/reference-ril/reference-ril.c	/^#define RIL_requestTimedCallback(/;"	d	file:
+RIL_setcallbacks	guest/hals/ril/reference-libril/ril.cpp	/^extern "C" void RIL_setcallbacks (const RIL_RadioFunctions *callbacks) {$/;"	f	namespace:android	typeref:typename:void
+RIL_startEventLoop	guest/hals/ril/reference-libril/ril.cpp	/^RIL_startEventLoop(void) {$/;"	f	namespace:android	typeref:typename:void
+ROUTING_MERGENCY	guest/hals/ril/reference-libril/ril.h	/^    ROUTING_MERGENCY   = 1,  \/* Indicates the implementation must handle the call through emerg/;"	e	enum:__anon0bfbaecfb603
+ROUTING_NORMAL	guest/hals/ril/reference-libril/ril.h	/^    ROUTING_NORMAL     = 2,  \/* Indicates the implementation must handle the call through norma/;"	e	enum:__anon0bfbaecfb603
+ROUTING_UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    ROUTING_UNKNOWN    = 0,  \/* Indicates Android does not require how to handle$/;"	e	enum:__anon0bfbaecfb603
+RSCP	guest/hals/ril/reference-libril/ril.h	/^    RSCP = 2,$/;"	e	enum:__anon0bfbaecf5403
+RSRP	guest/hals/ril/reference-libril/ril.h	/^    RSRP = 3,$/;"	e	enum:__anon0bfbaecf5403
+RSRQ	guest/hals/ril/reference-libril/ril.h	/^    RSRQ = 4,$/;"	e	enum:__anon0bfbaecf5403
+RSSI	guest/hals/ril/reference-libril/ril.h	/^    RSSI = 1,$/;"	e	enum:__anon0bfbaecf5403
+RSSNR	guest/hals/ril/reference-libril/ril.h	/^    RSSNR = 5,$/;"	e	enum:__anon0bfbaecf5403
+RUIM_ABSENT	guest/hals/ril/reference-ril/reference-ril.c	/^    RUIM_ABSENT = 6,$/;"	e	enum:__anon70d7df6f0303	file:
+RUIM_NETWORK_PERSONALIZATION	guest/hals/ril/reference-ril/reference-ril.c	/^    RUIM_NETWORK_PERSONALIZATION = 11,$/;"	e	enum:__anon70d7df6f0303	file:
+RUIM_NOT_READY	guest/hals/ril/reference-ril/reference-ril.c	/^    RUIM_NOT_READY = 7,$/;"	e	enum:__anon70d7df6f0303	file:
+RUIM_PIN	guest/hals/ril/reference-ril/reference-ril.c	/^    RUIM_PIN = 9,$/;"	e	enum:__anon70d7df6f0303	file:
+RUIM_PUK	guest/hals/ril/reference-ril/reference-ril.c	/^    RUIM_PUK = 10,$/;"	e	enum:__anon70d7df6f0303	file:
+RUIM_READY	guest/hals/ril/reference-ril/reference-ril.c	/^    RUIM_READY = 8,$/;"	e	enum:__anon70d7df6f0303	file:
+RUN_AT	host/commands/modem_simulator/stk_service.h	/^    RUN_AT              = 0x34,$/;"	e	enum:cuttlefish::StkService::CommandType
+RadioCapabilityPhase	guest/hals/ril/reference-libril/ril.h	/^} RadioCapabilityPhase;$/;"	t	typeref:enum:__anon0bfbaecf0803
+RadioCapabilityStatus	guest/hals/ril/reference-libril/ril.h	/^} RadioCapabilityStatus;$/;"	t	typeref:enum:__anon0bfbaecf0903
+RadioConfigImpl	guest/hals/ril/reference-libril/ril_config.cpp	/^struct RadioConfigImpl : public V1_3::IRadioConfig {$/;"	s	file:
+RadioImpl_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^struct RadioImpl_1_6 : public V1_6::IRadio {$/;"	s	file:
+RadioState	host/commands/modem_simulator/network_service.h	/^  enum RadioState : int32_t {$/;"	g	class:cuttlefish::NetworkService	typeref:typename:int32_t
+RadioTechnologyV1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^using RadioTechnologyV1_4 = android::hardware::radio::V1_4::RadioTechnology;$/;"	t	typeref:typename:android::hardware::radio::V1_4::RadioTechnology	file:
+RandomClientSecret	host/frontend/webrtc_operator/client_handler.cpp	/^std::string RandomClientSecret(size_t len) {$/;"	f	namespace:cuttlefish::__anon9f2993ef0111	typeref:typename:std::string
+RandomSerialNumber	host/libs/config/cuttlefish_config.cpp	/^std::string RandomSerialNumber(const std::string& prefix) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+Raw	common/libs/utils/unix_sockets.cpp	/^cmsghdr* ControlMessage::Raw() {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:cmsghdr *
+Raw	common/libs/utils/unix_sockets.cpp	/^const cmsghdr* ControlMessage::Raw() const {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:const cmsghdr *
+ReExecSelf	host/commands/secure_env/secure_env.cpp	/^[[noreturn]] void ReExecSelf() {$/;"	f	namespace:cuttlefish::__anon0a6d9b510111	typeref:typename:void
+Read	common/libs/fs/shared_fd.cpp	/^ssize_t FileInstance::Read(void* buf, size_t count) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ssize_t
+Read	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::Read(std::vector<char>& data) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+Read	common/libs/utils/vsock_connection.cpp	/^int32_t VsockConnection::Read() {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:int32_t
+Read	common/libs/utils/vsock_connection.cpp	/^std::vector<char> VsockConnection::Read(size_t size) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:std::vector<char>
+Read	host/commands/secure_env/fragile_tpm_storage.cpp	/^std::unique_ptr<TPM2B_MAX_NV_BUFFER> FragileTpmStorage::Read($/;"	f	class:cuttlefish::FragileTpmStorage	typeref:typename:std::unique_ptr<TPM2B_MAX_NV_BUFFER>
+Read	host/commands/secure_env/insecure_fallback_storage.cpp	/^std::unique_ptr<TPM2B_MAX_NV_BUFFER> InsecureFallbackStorage::Read($/;"	f	class:cuttlefish::InsecureFallbackStorage	typeref:typename:std::unique_ptr<TPM2B_MAX_NV_BUFFER>
+ReadAll	common/libs/fs/shared_buf.cc	/^ssize_t ReadAll(SharedFD fd, std::string* buf) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+ReadAllFDData	common/libs/utils/unix_sockets_test.cpp	/^std::string ReadAllFDData(SharedFD fd) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+ReadAsync	common/libs/utils/vsock_connection.cpp	/^std::future<std::vector<char>> VsockConnection::ReadAsync(size_t size) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:std::future<std::vector<char>>
+ReadCommand	host/commands/modem_simulator/channel_monitor.cpp	/^void ChannelMonitor::ReadCommand(Client& client) {$/;"	f	class:cuttlefish::ChannelMonitor	typeref:typename:void
+ReadCommandResponse	host/commands/modem_simulator/unittest/service_test.cpp	/^  void ReadCommandResponse(std::vector<std::string>& response) {$/;"	f	class:ModemServiceTest	typeref:typename:void	file:
+ReadConfig	host/libs/config/config_flag.cpp	/^  std::optional<Json::Value> ReadConfig(const std::string& name) const {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigReader	typeref:typename:std::optional<Json::Value>	file:
+ReadEvent	host/commands/kernel_log_monitor/utils.cc	/^std::optional<ReadEventResult> ReadEvent(cuttlefish::SharedFD fd) {$/;"	f	namespace:monitor	typeref:typename:std::optional<ReadEventResult>
+ReadEventResult	host/commands/kernel_log_monitor/utils.h	/^struct ReadEventResult {$/;"	s	namespace:monitor
+ReadExact	common/libs/fs/shared_buf.cc	/^ssize_t ReadExact(SharedFD fd, char* buf, size_t size) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+ReadExact	common/libs/fs/shared_buf.cc	/^ssize_t ReadExact(SharedFD fd, std::string* buf) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+ReadExact	common/libs/fs/shared_buf.cc	/^ssize_t ReadExact(SharedFD fd, std::vector<char>* buf) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+ReadExactBinary	common/libs/fs/shared_buf.h	/^ssize_t ReadExactBinary(SharedFD fd, T* binary_data) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+ReadFile	common/libs/utils/files.cpp	/^std::string ReadFile(const std::string& file) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+ReadGnssRawMeasurement	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    void ReadGnssRawMeasurement() {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:void	file:
+ReadJsonMessage	common/libs/utils/vsock_connection.cpp	/^Json::Value VsockConnection::ReadJsonMessage() {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:Json::Value
+ReadJsonMessageAsync	common/libs/utils/vsock_connection.cpp	/^std::future<Json::Value> VsockConnection::ReadJsonMessageAsync() {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:std::future<Json::Value>
+ReadKernelConfig	host/commands/assemble_cvd/flags.cc	/^void ReadKernelConfig(KernelConfig* kernel_config) {$/;"	f	namespace:cuttlefish::__anon145bfaab0111	typeref:typename:void
+ReadLoop	host/commands/console_forwarder/main.cpp	/^  [[noreturn]] void ReadLoop() {$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:void	file:
+ReadLoop	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    [[noreturn]] void ReadLoop() {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:void	file:
+ReadLoop	host/frontend/webrtc/adb_handler.cpp	/^void AdbHandler::ReadLoop() {$/;"	f	class:cuttlefish::webrtc_streaming::AdbHandler	typeref:typename:void
+ReadLoop	host/frontend/webrtc/bluetooth_handler.cpp	/^void BluetoothHandler::ReadLoop() {$/;"	f	class:cuttlefish::webrtc_streaming::BluetoothHandler	typeref:typename:void
+ReadLoop	host/frontend/webrtc/kernel_log_events_handler.cpp	/^void KernelLogEventsHandler::ReadLoop() {$/;"	f	class:cuttlefish::KernelLogEventsHandler	typeref:typename:void
+ReadMessage	common/libs/utils/unix_sockets.cpp	/^Result<UnixSocketMessage> UnixMessageSocket::ReadMessage() {$/;"	f	class:cuttlefish::UnixMessageSocket	typeref:typename:Result<UnixSocketMessage>
+ReadMessage	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::ReadMessage(std::vector<char>& data) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+ReadMessage	common/libs/utils/vsock_connection.cpp	/^std::vector<char> VsockConnection::ReadMessage() {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:std::vector<char>
+ReadMessageAsync	common/libs/utils/vsock_connection.cpp	/^std::future<std::vector<char>> VsockConnection::ReadMessageAsync() {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:std::future<std::vector<char>>
+ReadNmeaFromLocalFile	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    void ReadNmeaFromLocalFile() {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:void	file:
+ReadPayload	common/libs/confui/packet.cpp	/^std::optional<ParsedPacket> ReadPayload(SharedFD s) {$/;"	f	namespace:cuttlefish::confui::packet	typeref:typename:std::optional<ParsedPacket>
+ReadProtectedJsonFromFile	host/commands/secure_env/json_serializable.cpp	/^Json::Value ReadProtectedJsonFromFile($/;"	f	namespace:cuttlefish	typeref:typename:Json::Value
+ReadRawData	common/libs/confui/packet.cpp	/^static std::optional<std::vector<std::uint8_t>> ReadRawData(SharedFD s) {$/;"	f	namespace:cuttlefish::confui::packet	typeref:typename:std::optional<std::vector<std::uint8_t>>	file:
+ReadVsockRequest	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  struct ReadVsockRequest {$/;"	s	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession
+ReadWriteCapability	host/libs/image_aggregator/cdisk_spec.proto	/^enum ReadWriteCapability {$/;"	g
+Reason	host/commands/modem_simulator/sup_service.h	/^    enum Reason {$/;"	g	struct:cuttlefish::SupService::CallForwardInfo
+RebootRecoveryTest	tests/recovery/src/com/android/cuttlefish/tests/RebootRecoveryTest.java	/^public class RebootRecoveryTest extends BaseHostJUnit4Test {$/;"	c
+RebuildSuperImage	host/commands/assemble_cvd/super_image_mixer.cc	/^bool RebuildSuperImage(const FetcherConfig& fetcher_config,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+Receive	host/commands/secure_env/in_process_tpm.cpp	/^  static TSS2_RC Receive($/;"	f	class:cuttlefish::InProcessTpm::Impl	typeref:typename:TSS2_RC	file:
+Receive	host/libs/msg_queue/msg_queue.cc	/^ssize_t SysVMessageQueue::Receive(void* data, size_t size, long msgtyp,$/;"	f	class:cuttlefish::SysVMessageQueue	typeref:typename:ssize_t
+ReceiveCapture	host/libs/audio_connector/server.cpp	/^bool AudioClientConnection::ReceiveCapture(AudioServerExecutor& executor) {$/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:bool
+ReceiveCommands	host/libs/audio_connector/server.cpp	/^bool AudioClientConnection::ReceiveCommands(AudioServerExecutor& executor) {$/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:bool
+ReceiveMessage	common/libs/security/gatekeeper_channel.cpp	/^ManagedGatekeeperMessage GatekeeperChannel::ReceiveMessage() {$/;"	f	class:cuttlefish::GatekeeperChannel	typeref:typename:ManagedGatekeeperMessage
+ReceiveMessage	common/libs/security/keymaster_channel.cpp	/^ManagedKeymasterMessage KeymasterChannel::ReceiveMessage() {$/;"	f	class:cuttlefish::KeymasterChannel	typeref:typename:ManagedKeymasterMessage
+ReceiveMsg	host/libs/audio_connector/server.cpp	/^ssize_t AudioClientConnection::ReceiveMsg(SharedFD socket, void* buffer,$/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:ssize_t
+ReceivePlayback	host/libs/audio_connector/server.cpp	/^bool AudioClientConnection::ReceivePlayback(AudioServerExecutor& executor) {$/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:bool
+RecordDisplays	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::RecordDisplays(LocalRecorder& recorder) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:void
+RecordFlags	host/libs/config/fetcher_config.cpp	/^void FetcherConfig::RecordFlags() {$/;"	f	class:cuttlefish::FetcherConfig	typeref:typename:void
+RecordToNvBuffer	host/commands/secure_env/tpm_gatekeeper.cpp	/^static std::unique_ptr<TPM2B_MAX_NV_BUFFER> RecordToNvBuffer($/;"	f	namespace:cuttlefish	typeref:typename:std::unique_ptr<TPM2B_MAX_NV_BUFFER>	file:
+Recording	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::Recording() const { return recording_; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+RecordingDeviceName	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::RecordingDeviceName($/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+RecordingDevices	host/frontend/webrtc/lib/audio_device.cpp	/^int16_t CfAudioDeviceModule::RecordingDevices() { return 1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int16_t
+RecordingIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::RecordingIsAvailable(bool* available) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+RecordingIsInitialized	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::RecordingIsInitialized() const { return true; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+RecursivelyRemoveDirectory	common/libs/utils/files.cpp	/^bool RecursivelyRemoveDirectory(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+Recv	common/frontend/socket_vsock_proxy/main.cpp	/^  ssize_t Recv(char* packet, ssize_t length) {$/;"	f	class:__anon913036200111::SocketReceiver	typeref:typename:ssize_t	file:
+Recv	common/libs/fs/shared_fd.cpp	/^ssize_t FileInstance::Recv(void* buf, size_t len, int flags) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ssize_t
+Recv	common/libs/utils/tcp_socket.cpp	/^Message ClientSocket::Recv(std::size_t length) {$/;"	f	class:cuttlefish::ClientSocket	typeref:typename:Message
+RecvAdbResponse	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^std::string RecvAdbResponse(cuttlefish::SharedFD sock) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:std::string
+RecvAll	common/libs/fs/shared_buf.cc	/^std::string RecvAll(SharedFD sock, const size_t count) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+RecvAll	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^std::string RecvAll(cuttlefish::SharedFD sock, const size_t count) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:std::string
+RecvAny	common/libs/utils/tcp_socket.cpp	/^Message ClientSocket::RecvAny(std::size_t length) {$/;"	f	class:cuttlefish::ClientSocket	typeref:typename:Message
+RecvConfUiMsg	common/libs/confui/protocol.cpp	/^std::unique_ptr<ConfUiMessage> RecvConfUiMsg(SharedFD fd) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::unique_ptr<ConfUiMessage>
+RecvConfUiMsg	common/libs/confui/protocol.cpp	/^std::unique_ptr<ConfUiMessage> RecvConfUiMsg(const std::string& session_id,$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::unique_ptr<ConfUiMessage>
+RecvJsonMsg	host/libs/allocd/utils.cpp	/^std::optional<Json::Value> RecvJsonMsg(SharedFD client_socket) {$/;"	f	namespace:cuttlefish	typeref:typename:std::optional<Json::Value>
+RecvMsg	common/libs/fs/shared_fd.cpp	/^ssize_t FileInstance::RecvMsg(struct msghdr* msg, int flags) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ssize_t
+RecvUptimeResult	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^int RecvUptimeResult(cuttlefish::SharedFD sock) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:int
+RedirectStdIO	common/libs/utils/subprocess.cpp	/^void Command::RedirectStdIO(Subprocess::StdIOChannel channel,$/;"	f	class:cuttlefish::Command	typeref:typename:void
+RedirectStdIO	common/libs/utils/subprocess.cpp	/^void Command::RedirectStdIO(Subprocess::StdIOChannel subprocess_channel,$/;"	f	class:cuttlefish::Command	typeref:typename:void
+RefreshCredential	host/commands/fetcher/credential_source.cc	/^void GceMetadataCredentialSource::RefreshCredential() {$/;"	f	class:cuttlefish::GceMetadataCredentialSource	typeref:typename:void
+RegStateResultV1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^using RegStateResultV1_5 = android::hardware::radio::V1_5::RegStateResult;$/;"	t	typeref:typename:android::hardware::radio::V1_5::RegStateResult	file:
+RegStateResultV1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^using RegStateResultV1_6 = android::hardware::radio::V1_6::RegStateResult;$/;"	t	typeref:typename:android::hardware::radio::V1_6::RegStateResult	file:
+Region	host/libs/wayland/wayland_surface.h	/^  struct Region {$/;"	s	class:wayland::Surface
+Register	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Register(std::weak_ptr<OperatorObserver> observer) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:void
+RegisterAudioCallback	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::RegisterAudioCallback($/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+RegisterAudioObserver	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^void AudioTrackSourceImpl::RegisterAudioObserver(AudioObserver* observer) {$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:void
+RegisterClient	host/frontend/webrtc_operator/device_handler.cpp	/^size_t DeviceHandler::RegisterClient($/;"	f	class:cuttlefish::DeviceHandler	typeref:typename:size_t
+RegisterDevice	host/frontend/webrtc_operator/device_registry.cpp	/^bool DeviceRegistry::RegisterDevice($/;"	f	class:cuttlefish::DeviceRegistry	typeref:typename:bool
+RegisterDynHandlerFactory	host/libs/websocket/websocket_server.cpp	/^void WebSocketServer::RegisterDynHandlerFactory($/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:void
+RegisterHandlerFactory	host/libs/websocket/websocket_server.cpp	/^void WebSocketServer::RegisterHandlerFactory($/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:void
+RegisterModemService	host/commands/modem_simulator/modem_simulator.cpp	/^void ModemSimulator::RegisterModemService() {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:void
+RegisterObserver	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^void AudioTrackSourceImpl::RegisterObserver($/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:void
+RegisterQueue	common/libs/concurrency/multiplexer.h	/^  int RegisterQueue(QueuePtr&& queue) {$/;"	f	class:cuttlefish::Multiplexer	typeref:typename:int
+RegistrationState	host/commands/modem_simulator/network_service.h	/^  enum RegistrationState {$/;"	g	class:cuttlefish::NetworkService
+RegistrationUnsolMode	host/commands/modem_simulator/network_service.h	/^    enum RegistrationUnsolMode {$/;"	g	struct:cuttlefish::NetworkService::NetworkRegistrationStatus
+ReleaseAllResources	host/libs/allocd/resource_manager.h	/^  bool ReleaseAllResources() {$/;"	f	class:cuttlefish::Session	typeref:typename:bool
+ReleaseAllocdResources	host/commands/stop/main.cc	/^void ReleaseAllocdResources(SharedFD allocd_sock, uint32_t session_id) {$/;"	f	namespace:cuttlefish::__anon65a808010111	typeref:typename:void
+ReleaseDhcp4	common/libs/utils/network.cpp	/^bool ReleaseDhcp4(SharedFD tap, const std::uint8_t mac_address[6],$/;"	f	namespace:cuttlefish	typeref:typename:bool
+ReleaseDhcpLeases	common/libs/utils/network.cpp	/^bool ReleaseDhcpLeases(const std::string& lease_path, SharedFD tap_fd,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+ReleaseFence	guest/hals/camera/cached_stream_buffer.cpp	/^ReleaseFence::ReleaseFence(int fence_fd) : handle_(nullptr) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::ReleaseFence
+ReleaseFence	guest/hals/camera/cached_stream_buffer.h	/^class ReleaseFence {$/;"	c	namespace:android::hardware::camera::device::V3_4::implementation
+ReleaseResource	host/libs/allocd/resource.cpp	/^bool EthernetIface::ReleaseResource() {$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:bool
+ReleaseResource	host/libs/allocd/resource.cpp	/^bool MobileIface::ReleaseResource() {$/;"	f	class:cuttlefish::MobileIface	typeref:typename:bool
+ReleaseResource	host/libs/allocd/resource_manager.h	/^  bool ReleaseResource(uint32_t resource_id) {$/;"	f	class:cuttlefish::Session	typeref:typename:bool
+ReleaseStream	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::ReleaseStream(StreamControlCommand& cmd) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+ReloadConfig	host/libs/wmediumd_controller/wmediumd_controller.cpp	/^bool WmediumdController::ReloadConfig(const std::string& configPath) {$/;"	f	class:cuttlefish::WmediumdController	typeref:typename:bool
+ReloadCurrentConfig	host/libs/wmediumd_controller/wmediumd_controller.cpp	/^bool WmediumdController::ReloadCurrentConfig(void) {$/;"	f	class:cuttlefish::WmediumdController	typeref:typename:bool
+RememberConnection	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionContextImpl::RememberConnection($/;"	f	class:WsConnectionContextImpl	typeref:typename:void
+RemoteGateKeeperDevice	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^RemoteGateKeeperDevice::RemoteGateKeeperDevice(cuttlefish::GatekeeperChannel* channel)$/;"	f	class:gatekeeper::RemoteGateKeeperDevice
+RemoteGateKeeperDevice	guest/hals/gatekeeper/remote/remote_gatekeeper.h	/^class RemoteGateKeeperDevice : public ::android::hardware::gatekeeper::V1_0::IGatekeeper {$/;"	c	namespace:gatekeeper
+RemoteKeyMintDevice	guest/hals/keymint/remote/remote_keymint_device.cpp	/^RemoteKeyMintDevice::RemoteKeyMintDevice(::keymaster::RemoteKeymaster& impl,$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice
+RemoteKeyMintDevice	guest/hals/keymint/remote/remote_keymint_device.h	/^class RemoteKeyMintDevice : public BnKeyMintDevice {$/;"	c	namespace:aidl::android::hardware::security::keymint
+RemoteKeyMintOperation	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^RemoteKeyMintOperation::RemoteKeyMintOperation($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintOperation
+RemoteKeyMintOperation	guest/hals/keymint/remote/remote_keymint_operation.h	/^class RemoteKeyMintOperation : public BnKeyMintOperation {$/;"	c	namespace:aidl::android::hardware::security::keymint
+RemoteKeymaster	guest/hals/keymaster/remote/remote_keymaster.cpp	/^RemoteKeymaster::RemoteKeymaster(cuttlefish::KeymasterChannel* channel)$/;"	f	class:keymaster::RemoteKeymaster
+RemoteKeymaster	guest/hals/keymaster/remote/remote_keymaster.h	/^class RemoteKeymaster {$/;"	c	namespace:keymaster
+RemoteKeymaster	guest/hals/keymint/remote/remote_keymaster.cpp	/^RemoteKeymaster::RemoteKeymaster(cuttlefish::KeymasterChannel* channel,$/;"	f	class:keymaster::RemoteKeymaster
+RemoteKeymaster	guest/hals/keymint/remote/remote_keymaster.h	/^class RemoteKeymaster {$/;"	c	namespace:keymaster
+RemoteKeymaster4Device	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^RemoteKeymaster4Device::RemoteKeymaster4Device(RemoteKeymaster* impl) : impl_(impl) {}$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device
+RemoteKeymaster4Device	guest/hals/keymaster/remote/remote_keymaster4_device.h	/^class RemoteKeymaster4Device : public IKeymasterDevice {$/;"	c	namespace:keymaster::V4_1
+RemoteRemotelyProvisionedComponent	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^RemoteRemotelyProvisionedComponent::RemoteRemotelyProvisionedComponent($/;"	f	class:aidl::android::hardware::security::keymint::RemoteRemotelyProvisionedComponent
+RemoteRemotelyProvisionedComponent	guest/hals/keymint/remote/remote_remotely_provisioned_component.h	/^class RemoteRemotelyProvisionedComponent$/;"	c	namespace:aidl::android::hardware::security::keymint
+RemoteSecureClock	guest/hals/keymint/remote/remote_secure_clock.cpp	/^RemoteSecureClock::RemoteSecureClock(keymaster::RemoteKeymaster& impl)$/;"	f	class:aidl::android::hardware::security::secureclock::RemoteSecureClock
+RemoteSecureClock	guest/hals/keymint/remote/remote_secure_clock.h	/^class RemoteSecureClock : public BnSecureClock {$/;"	c	namespace:aidl::android::hardware::security::secureclock
+RemoteSharedSecret	guest/hals/keymint/remote/remote_shared_secret.cpp	/^RemoteSharedSecret::RemoteSharedSecret(::keymaster::RemoteKeymaster& keymint)$/;"	f	class:aidl::android::hardware::security::sharedsecret::RemoteSharedSecret
+RemoteSharedSecret	guest/hals/keymint/remote/remote_shared_secret.h	/^class RemoteSharedSecret : public BnSharedSecret {$/;"	c	namespace:aidl::android::hardware::security::sharedsecret
+RemoveEncodedSink	host/frontend/webrtc/lib/video_track_source_impl.h	/^  void RemoveEncodedSink($/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:void
+RemoveFile	common/libs/utils/files.cpp	/^bool RemoveFile(const std::string& file) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+RemoveInterface	host/libs/allocd/resource_manager.cpp	/^bool ResourceManager::RemoveInterface(const std::string& iface, IfaceType ty) {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:bool
+RemoveSink	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^void AudioTrackSourceImpl::RemoveSink(webrtc::AudioTrackSinkInterface* sink) {$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:void
+RenameFile	common/libs/utils/files.cpp	/^bool RenameFile(const std::string& old_name, const std::string& new_name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+RenameNetwork	guest/commands/setup_wifi/main.cpp	/^int RenameNetwork(const std::string& name, const std::string& new_name) {$/;"	f	typeref:typename:int
+RenderConfirmationUi	host/libs/screen_connector/screen_connector.h	/^  bool RenderConfirmationUi(std::uint32_t display_number,$/;"	f	class:cuttlefish::ScreenConnector	typeref:typename:bool
+RenderDialog	host/libs/confui/session.cc	/^bool Session::RenderDialog() {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+RenderRawFrame	host/libs/confui/host_renderer.cc	/^std::shared_ptr<TeeUiFrameWrapper> ConfUiRenderer::RenderRawFrame() {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::shared_ptr<TeeUiFrameWrapper>
+RepackBootImage	host/commands/assemble_cvd/boot_image_utils.cc	/^bool RepackBootImage(const std::string& new_kernel_path,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+RepackVendorBootImage	host/commands/assemble_cvd/boot_image_utils.cc	/^bool RepackVendorBootImage(const std::string& new_ramdisk,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+RepackVendorBootImageWithEmptyRamdisk	host/commands/assemble_cvd/boot_image_utils.cc	/^bool RepackVendorBootImageWithEmptyRamdisk($/;"	f	namespace:cuttlefish	typeref:typename:bool
+RepackVendorRamdisk	host/commands/assemble_cvd/boot_image_utils.cc	/^void RepackVendorRamdisk(const std::string& kernel_modules_ramdisk_path,$/;"	f	namespace:cuttlefish::__anonbfa95aa40111	typeref:typename:void
+RepaintRawFrame	host/libs/confui/host_renderer.cc	/^std::unique_ptr<TeeUiFrameWrapper> ConfUiRenderer::RepaintRawFrame($/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::unique_ptr<TeeUiFrameWrapper>
+Reply	host/frontend/webrtc_operator/client_handler.cpp	/^void ClientDynHandler::Reply(const Json::Value& json) {$/;"	f	class:cuttlefish::ClientDynHandler	typeref:typename:void
+Reply	host/frontend/webrtc_operator/signal_handler.cpp	/^void SignalHandler::Reply(const Json::Value& json) {$/;"	f	class:cuttlefish::SignalHandler	typeref:typename:void
+Reply	host/libs/audio_connector/commands.cpp	/^void ChmapInfoCommand::Reply(AudioStatus status,$/;"	f	class:cuttlefish::ChmapInfoCommand	typeref:typename:void
+Reply	host/libs/audio_connector/commands.cpp	/^void JackInfoCommand::Reply(AudioStatus status,$/;"	f	class:cuttlefish::JackInfoCommand	typeref:typename:void
+Reply	host/libs/audio_connector/commands.cpp	/^void StreamControlCommand::Reply(AudioStatus status) {$/;"	f	class:cuttlefish::StreamControlCommand	typeref:typename:void
+Reply	host/libs/audio_connector/commands.cpp	/^void StreamInfoCommand::Reply(AudioStatus status,$/;"	f	class:cuttlefish::StreamInfoCommand	typeref:typename:void
+ReplyError	host/frontend/webrtc_operator/client_handler.cpp	/^void ClientDynHandler::ReplyError(const std::string& message) {$/;"	f	class:cuttlefish::ClientDynHandler	typeref:typename:void
+ReportErrorToHal	host/libs/confui/session.cc	/^bool Session::ReportErrorToHal(SharedFD hal_cli, const std::string& msg) {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:bool
+ReqStatusToStrMap	host/libs/allocd/utils.cpp	/^const std::map<RequestStatus, std::string> ReqStatusToStrMap = {$/;"	v	namespace:cuttlefish	typeref:typename:const std::map<RequestStatus,std::string>
+ReqTyToStr	host/libs/allocd/utils.cpp	/^std::string ReqTyToStr(RequestType req_ty) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+RequestData	common/libs/net/netlink_request.cpp	/^void* NetlinkRequest::RequestData() const {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void *
+RequestHeader	host/libs/allocd/request.h	/^struct RequestHeader {$/;"	s	namespace:cuttlefish
+RequestInfo	guest/hals/ril/reference-libril/ril_internal.h	/^typedef struct RequestInfo {$/;"	s	namespace:android
+RequestInfo	guest/hals/ril/reference-libril/ril_internal.h	/^} RequestInfo;$/;"	t	namespace:android	typeref:struct:android::RequestInfo
+RequestLength	common/libs/net/netlink_request.cpp	/^size_t NetlinkRequest::RequestLength() const {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:size_t
+RequestStatus	host/libs/allocd/request.h	/^enum class RequestStatus : uint16_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint16_t
+RequestTimedCallback	guest/hals/ril/reference-libril/ril.h	/^    void (*RequestTimedCallback) (RIL_TimedCallback callback,$/;"	m	struct:RIL_Env	typeref:typename:void (*)(RIL_TimedCallback callback,void * param,const struct timeval * relativeTime)
+RequestTyToStrMap	host/libs/allocd/utils.cpp	/^const std::map<RequestType, const char*> RequestTyToStrMap = {$/;"	v	namespace:cuttlefish	typeref:typename:const std::map<RequestType,const char * >
+RequestType	host/libs/allocd/request.h	/^enum class RequestType : uint16_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint16_t
+Reserve	common/libs/net/netlink_request.h	/^  template <typename T> T* Reserve() {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:T *
+ReserveRaw	common/libs/net/netlink_request.cpp	/^void* NetlinkRequest::ReserveRaw(size_t length) {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:void *
+ReserveSlot	host/commands/secure_env/tpm_resource_manager.cpp	/^TpmObjectSlot TpmResourceManager::ReserveSlot() {$/;"	f	class:cuttlefish::TpmResourceManager	typeref:typename:TpmObjectSlot
+Reset	host/commands/modem_simulator/network_service.h	/^    void Reset() {$/;"	f	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:void
+Reset	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::HoldingBuffer::Reset(size_t size) {$/;"	f	class:cuttlefish::AudioHandler::HoldingBuffer	typeref:typename:void
+ResizeImage	host/libs/config/data_image.cpp	/^bool ResizeImage(const CuttlefishConfig& config, const std::string& data_image,$/;"	f	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:bool
+Resolution	host/frontend/webrtc/lib/camera_streamer.h	/^  using Resolution = struct {$/;"	t	class:cuttlefish::webrtc_streaming::CameraStreamer
+ResolveInstanceFiles	host/commands/assemble_cvd/disk_flags.cc	/^bool ResolveInstanceFiles() {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+ResourceManager	host/libs/allocd/resource_manager.h	/^struct ResourceManager {$/;"	s	namespace:cuttlefish
+ResourceType	host/libs/allocd/resource.h	/^enum class ResourceType {$/;"	g	namespace:cuttlefish
+RestartCvdMain	host/commands/restart_cvd/restart_cvd.cc	/^int RestartCvdMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish::__anon63a091d80111	typeref:typename:int
+RestartRunCvd	host/commands/run_cvd/server_loop.cpp	/^  void RestartRunCvd(int notification_fd) {$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:void	file:
+ResultTriple	guest/hals/confirmationui/guest_session.h	/^    using ResultTriple =$/;"	t	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::tuple<ResponseCode,teeui::MsgVector<uint8_t>,teeui::MsgVector<uint8_t>>
+RetryImpl	host/commands/fetcher/curl_wrapper.cc	/^  CurlResponse<T> RetryImpl(std::function<CurlResponse<T>()> attempt_fn) {$/;"	f	class:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper	typeref:typename:CurlResponse<T>	file:
+Revision	host/commands/fetcher/build_api.h	/^  const std::string& Revision() const { return revision; }$/;"	f	class:cuttlefish::Artifact	typeref:typename:const std::string &
+RilE2eTests	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^public class RilE2eTests {$/;"	c
+RilSapSocket	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^RilSapSocket::RilSapSocket(const char *socketName,$/;"	f	class:RilSapSocket
+RilSapSocket	guest/hals/ril/reference-libril/RilSapSocket.h	/^class RilSapSocket : public RilSocket {$/;"	c
+RilSapSocketList	guest/hals/ril/reference-libril/RilSapSocket.h	/^        typedef struct RilSapSocketList {$/;"	s	class:RilSapSocket
+RilSapSocketList	guest/hals/ril/reference-libril/RilSapSocket.h	/^        } RilSapSocketList;$/;"	t	class:RilSapSocket	typeref:struct:RilSapSocket::RilSapSocketList
+RilSocket	guest/hals/ril/reference-libril/RilSocket.h	/^        RilSocket(const char* socketName, RIL_SOCKET_ID socketId) {$/;"	f	class:RilSocket
+RilSocket	guest/hals/ril/reference-libril/RilSocket.h	/^class RilSocket {$/;"	c
+Ril_queue	guest/hals/ril/reference-libril/rilSocketQueue.h	/^Ril_queue<T>::Ril_queue(void) {$/;"	f	class:Ril_queue
+Ril_queue	guest/hals/ril/reference-libril/rilSocketQueue.h	/^class Ril_queue {$/;"	c
+RootCanal	host/commands/run_cvd/launch.cc	/^class RootCanal : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+RootCanalBinary	host/libs/config/known_paths.cpp	/^std::string RootCanalBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+RoundUpToBlockSize	host/commands/secure_env/encrypted_serializable.cpp	/^static uint32_t RoundUpToBlockSize(uint32_t num) {$/;"	f	namespace:cuttlefish	typeref:typename:uint32_t	file:
+Run	host/commands/run_cvd/server_loop.cpp	/^  void Run(ProcessMonitor& process_monitor) override {$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:void	file:
+RunConnector	host/libs/config/adb/data.cpp	/^  bool RunConnector() const override { return run_connector_; }$/;"	f	class:cuttlefish::AdbConfigImpl	typeref:typename:bool	file:
+RunCvdMain	host/commands/run_cvd/main.cc	/^int RunCvdMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+RunExternalCommand	host/libs/allocd/alloc_utils.cpp	/^int RunExternalCommand(const std::string& command) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+RunServer	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^void RunServer() {$/;"	f	typeref:typename:void
+RunSession	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^void TrustyConfirmationUI::RunSession(sp<IConfirmationResultCallback> resultCB,$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:void
+RunSetup	host/libs/config/feature.cpp	/^\/* static *\/ bool Feature::RunSetup(const std::vector<Feature*>& features) {$/;"	f	class:cuttlefish::Feature	typeref:typename:bool
+RunThread	host/libs/confui/host_utils.h	/^  std::thread RunThread(const std::string& name, F&& f, Args&&... args) {$/;"	f	class:cuttlefish::confui::thread::ThreadTracer	typeref:typename:std::thread
+RunThread	host/libs/confui/host_utils.h	/^std::thread RunThread(const std::string& name, F&& f, Args&&... args) {$/;"	f	namespace:cuttlefish::confui::thread	typeref:typename:std::thread
+RunWithManagedStdio	common/libs/utils/subprocess.cpp	/^int RunWithManagedStdio(Command&& cmd_tmp, const std::string* stdin_str,$/;"	f	namespace:cuttlefish	typeref:typename:int
+RunnerExitCodes	host/commands/run_cvd/runner_defs.h	/^enum RunnerExitCodes : int {$/;"	g	namespace:cuttlefish	typeref:typename:int
+RxBuffer	host/libs/audio_connector/buffers.h	/^  RxBuffer(const virtio_snd_pcm_xfer& header, volatile uint8_t* buffer,$/;"	f	class:cuttlefish::RxBuffer
+RxBuffer	host/libs/audio_connector/buffers.h	/^class RxBuffer : public ShmBuffer {$/;"	c	namespace:cuttlefish
+RxBufferAt	host/libs/audio_connector/server.cpp	/^volatile uint8_t* AudioClientConnection::RxBufferAt(size_t offset,$/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:volatile uint8_t *
+SANITIZE_TARGET	vsoc_arm64/phone/aosp_cf_hwasan.mk	/^  SANITIZE_TARGET := $(strip $(SANITIZE_TARGET) hwaddress)$/;"	m
+SANITIZE_TARGET	vsoc_arm64_only/phone/aosp_cf_hwasan.mk	/^  SANITIZE_TARGET := $(strip $(SANITIZE_TARGET) hwaddress)$/;"	m
+SAP_SERVICE_H	guest/hals/ril/reference-libril/sap_service.h	/^#define SAP_SERVICE_H$/;"	d
+SC	host/commands/modem_simulator/sim_service.h	/^      SC = 9,  \/\/ PIN enable\/disable$/;"	e	enum:cuttlefish::SimService::FacilityLock::LockType
+SCOPED_CAPABILITY	common/libs/concurrency/thread_annotations.h	/^#define SCOPED_CAPABILITY /;"	d
+SECTOR_SIZE	host/libs/config/mbr.h	/^constexpr int SECTOR_SIZE = 1 << SECTOR_SIZE_SHIFT;$/;"	v	typeref:typename:int
+SECTOR_SIZE_SHIFT	host/libs/config/mbr.h	/^constexpr int SECTOR_SIZE_SHIFT = 9;$/;"	v	typeref:typename:int
+SELECT_ITEM	host/commands/modem_simulator/stk_service.h	/^    SELECT_ITEM         = 0x24,$/;"	e	enum:cuttlefish::StkService::CommandType
+SEND_DATA	host/commands/modem_simulator/stk_service.h	/^    SEND_DATA           = 0x43,$/;"	e	enum:cuttlefish::StkService::CommandType
+SEND_DTMF	host/commands/modem_simulator/stk_service.h	/^    SEND_DTMF           = 0x14,$/;"	e	enum:cuttlefish::StkService::CommandType
+SEND_SMS	host/commands/modem_simulator/stk_service.h	/^    SEND_SMS            = 0x13,$/;"	e	enum:cuttlefish::StkService::CommandType
+SEND_SS	host/commands/modem_simulator/stk_service.h	/^    SEND_SS             = 0x11,$/;"	e	enum:cuttlefish::StkService::CommandType
+SEND_USSD	host/commands/modem_simulator/stk_service.h	/^    SEND_USSD           = 0x12,$/;"	e	enum:cuttlefish::StkService::CommandType
+SESSION_ANY	common/libs/confui/protocol.h	/^constexpr auto SESSION_ANY = "";$/;"	v	namespace:cuttlefish::confui	typeref:typename:auto
+SET_U16	host/frontend/webrtc_operator/utils.cpp	/^void SET_U16(void *_dst, uint16_t x) {$/;"	f	typeref:typename:void
+SET_U32	host/frontend/webrtc_operator/utils.cpp	/^void SET_U32(void *_dst, uint32_t x) {$/;"	f	typeref:typename:void
+SET_UP_CALL	host/commands/modem_simulator/stk_service.h	/^    SET_UP_CALL         = 0x10,$/;"	e	enum:cuttlefish::StkService::CommandType
+SET_UP_EVENT_LIST	host/commands/modem_simulator/stk_service.h	/^    SET_UP_EVENT_LIST   = 0x05,$/;"	e	enum:cuttlefish::StkService::CommandType
+SET_UP_IDLE_MODE_TEXT	host/commands/modem_simulator/stk_service.h	/^    SET_UP_IDLE_MODE_TEXT = 0x28,$/;"	e	enum:cuttlefish::StkService::CommandType
+SET_UP_MENU	host/commands/modem_simulator/stk_service.h	/^    SET_UP_MENU         = 0x25,$/;"	e	enum:cuttlefish::StkService::CommandType
+SIGNATURE_LENGTH_BYTES	host/commands/secure_env/soft_gatekeeper.h	/^    static const uint32_t SIGNATURE_LENGTH_BYTES = 32;$/;"	m	class:gatekeeper::SoftGateKeeper	typeref:typename:const uint32_t
+SIM_ABSENT	guest/hals/ril/reference-ril/reference-ril.c	/^    SIM_ABSENT = 0,$/;"	e	enum:__anon70d7df6f0303	file:
+SIM_AUTH_RESPONSE_SUCCESS	guest/hals/ril/reference-ril/reference-ril.c	/^#define SIM_AUTH_RESPONSE_SUCCESS /;"	d	file:
+SIM_AUTH_RESPONSE_SYNC_FAILURE	guest/hals/ril/reference-ril/reference-ril.c	/^#define SIM_AUTH_RESPONSE_SYNC_FAILURE /;"	d	file:
+SIM_COUNT	guest/hals/ril/reference-libril/ril.h	/^#define SIM_COUNT /;"	d
+SIM_FILE_UPDATE	guest/hals/ril/reference-libril/ril.h	/^    SIM_FILE_UPDATE = 0,$/;"	e	enum:__anon0bfbaecf4003
+SIM_INIT	guest/hals/ril/reference-libril/ril.h	/^    SIM_INIT = 1,$/;"	e	enum:__anon0bfbaecf4003
+SIM_NETWORK_PERSONALIZATION	guest/hals/ril/reference-ril/reference-ril.c	/^    SIM_NETWORK_PERSONALIZATION = 5,$/;"	e	enum:__anon70d7df6f0303	file:
+SIM_NOT_READY	guest/hals/ril/reference-ril/reference-ril.c	/^    SIM_NOT_READY = 1,$/;"	e	enum:__anon70d7df6f0303	file:
+SIM_PIN	guest/hals/ril/reference-ril/reference-ril.c	/^    SIM_PIN = 3,$/;"	e	enum:__anon70d7df6f0303	file:
+SIM_PUK	guest/hals/ril/reference-ril/reference-ril.c	/^    SIM_PUK = 4,$/;"	e	enum:__anon70d7df6f0303	file:
+SIM_READY	guest/hals/ril/reference-ril/reference-ril.c	/^    SIM_READY = 2,$/;"	e	enum:__anon70d7df6f0303	file:
+SIM_RESET	guest/hals/ril/reference-libril/ril.h	/^    SIM_RESET = 2$/;"	e	enum:__anon0bfbaecf4003
+SIM_STATUS_ABSENT	host/commands/modem_simulator/sim_service.h	/^    SIM_STATUS_ABSENT = 0,$/;"	e	enum:cuttlefish::SimService::SimStatus
+SIM_STATUS_NOT_READY	host/commands/modem_simulator/sim_service.h	/^    SIM_STATUS_NOT_READY,$/;"	e	enum:cuttlefish::SimService::SimStatus
+SIM_STATUS_PIN	host/commands/modem_simulator/sim_service.h	/^    SIM_STATUS_PIN,$/;"	e	enum:cuttlefish::SimService::SimStatus
+SIM_STATUS_PUK	host/commands/modem_simulator/sim_service.h	/^    SIM_STATUS_PUK,$/;"	e	enum:cuttlefish::SimService::SimStatus
+SIM_STATUS_READY	host/commands/modem_simulator/sim_service.h	/^    SIM_STATUS_READY,$/;"	e	enum:cuttlefish::SimService::SimStatus
+SIM_Status	guest/hals/ril/reference-ril/reference-ril.c	/^} SIM_Status;$/;"	t	typeref:enum:__anon70d7df6f0303	file:
+SINGLELINE	guest/hals/ril/reference-ril/atchannel.h	/^    SINGLELINE,  \/* a single intermediate response starting with a prefix *\/$/;"	e	enum:__anon512a2c1f0103
+SIZE_OF_VIRTIO_NET_HDR_V1	common/libs/utils/network.cpp	/^static constexpr int SIZE_OF_VIRTIO_NET_HDR_V1 = 12;$/;"	v	namespace:cuttlefish::__anoncaae79910111	typeref:typename:int	file:
+SLOT_STATE_ACTIVE	guest/hals/ril/reference-libril/ril.h	/^    SLOT_STATE_ACTIVE    = 0x01,$/;"	e	enum:__anon0bfbaecfb803
+SLOT_STATE_INACTIVE	guest/hals/ril/reference-libril/ril.h	/^    SLOT_STATE_INACTIVE  = 0x00,$/;"	e	enum:__anon0bfbaecfb803
+SMS	host/commands/modem_simulator/sim_service.h	/^      SMS = 1 << 3,     \/\/ short message services$/;"	e	enum:cuttlefish::SimService::FacilityLock::Class
+SOCKET	host/commands/secure_env/in_process_tpm.cpp	/^typedef int SOCKET;$/;"	t	typeref:typename:int	file:
+SOURCE_DEFAULT	guest/hals/ril/reference-libril/ril.h	/^    SOURCE_DEFAULT             = 1 << 3,   \/* Indicates the number is available as default.$/;"	e	enum:__anon0bfbaecfb503
+SOURCE_MODEM_CONFIG	guest/hals/ril/reference-libril/ril.h	/^    SOURCE_MODEM_CONFIG        = 1 << 2,   \/* Indicates the number is from the modem config. *\/$/;"	e	enum:__anon0bfbaecfb503
+SOURCE_NETWORK_SIGNALING	guest/hals/ril/reference-libril/ril.h	/^    SOURCE_NETWORK_SIGNALING   = 1 << 0,   \/* Indicates the number is from the network signal. /;"	e	enum:__anon0bfbaecfb503
+SOURCE_SIM	guest/hals/ril/reference-libril/ril.h	/^    SOURCE_SIM                 = 1 << 1,   \/* Indicates the number is from the sim card. *\/$/;"	e	enum:__anon0bfbaecfb503
+SO_VM_SOCKETS_BUFFER_MAX_SIZE	common/libs/fs/vm_sockets.h	/^#define SO_VM_SOCKETS_BUFFER_MAX_SIZE /;"	d
+SO_VM_SOCKETS_BUFFER_MIN_SIZE	common/libs/fs/vm_sockets.h	/^#define SO_VM_SOCKETS_BUFFER_MIN_SIZE /;"	d
+SO_VM_SOCKETS_BUFFER_SIZE	common/libs/fs/vm_sockets.h	/^#define SO_VM_SOCKETS_BUFFER_SIZE /;"	d
+SO_VM_SOCKETS_CONNECT_TIMEOUT	common/libs/fs/vm_sockets.h	/^#define SO_VM_SOCKETS_CONNECT_TIMEOUT /;"	d
+SO_VM_SOCKETS_NONBLOCK_TXRX	common/libs/fs/vm_sockets.h	/^#define SO_VM_SOCKETS_NONBLOCK_TXRX /;"	d
+SO_VM_SOCKETS_PEER_HOST_VM_ID	common/libs/fs/vm_sockets.h	/^#define SO_VM_SOCKETS_PEER_HOST_VM_ID /;"	d
+SO_VM_SOCKETS_TRUSTED	common/libs/fs/vm_sockets.h	/^#define SO_VM_SOCKETS_TRUSTED /;"	d
+SSH_FLAGS	tools/create_base_image.go	/^var SSH_FLAGS string$/;"	v	package:main	typeref:typename:string
+SSOURCE	guest/hals/ril/reference-ril/reference-ril.c	/^#define SSOURCE(/;"	d	file:
+SSRSRP	guest/hals/ril/reference-libril/ril.h	/^    SSRSRP = 6,$/;"	e	enum:__anon0bfbaecf5403
+SSRSRQ	guest/hals/ril/reference-libril/ril.h	/^    SSRSRQ = 7,$/;"	e	enum:__anon0bfbaecf5403
+SSSINR	guest/hals/ril/reference-libril/ril.h	/^    SSSINR = 8,$/;"	e	enum:__anon0bfbaecf5403
+SS_ACTIVATION	guest/hals/ril/reference-libril/ril.h	/^  SS_ACTIVATION,$/;"	e	enum:__anon0bfbaecf9603
+SS_ALL_BARRING	guest/hals/ril/reference-libril/ril.h	/^  SS_ALL_BARRING,$/;"	e	enum:__anon0bfbaecf9503
+SS_ALL_DATA_TELESERVICES	guest/hals/ril/reference-libril/ril.h	/^  SS_ALL_DATA_TELESERVICES,$/;"	e	enum:__anon0bfbaecf9703
+SS_ALL_TELESERVICES_EXCEPT_SMS	guest/hals/ril/reference-libril/ril.h	/^  SS_ALL_TELESERVICES_EXCEPT_SMS$/;"	e	enum:__anon0bfbaecf9703
+SS_ALL_TELESEVICES	guest/hals/ril/reference-libril/ril.h	/^  SS_ALL_TELESEVICES,$/;"	e	enum:__anon0bfbaecf9703
+SS_ALL_TELE_AND_BEARER_SERVICES	guest/hals/ril/reference-libril/ril.h	/^  SS_ALL_TELE_AND_BEARER_SERVICES,$/;"	e	enum:__anon0bfbaecf9703
+SS_BAIC	guest/hals/ril/reference-libril/ril.h	/^  SS_BAIC,$/;"	e	enum:__anon0bfbaecf9503
+SS_BAIC_ROAMING	guest/hals/ril/reference-libril/ril.h	/^  SS_BAIC_ROAMING,$/;"	e	enum:__anon0bfbaecf9503
+SS_BAOC	guest/hals/ril/reference-libril/ril.h	/^  SS_BAOC,$/;"	e	enum:__anon0bfbaecf9503
+SS_BAOIC	guest/hals/ril/reference-libril/ril.h	/^  SS_BAOIC,$/;"	e	enum:__anon0bfbaecf9503
+SS_BAOIC_EXC_HOME	guest/hals/ril/reference-libril/ril.h	/^  SS_BAOIC_EXC_HOME,$/;"	e	enum:__anon0bfbaecf9503
+SS_CFU	guest/hals/ril/reference-libril/ril.h	/^  SS_CFU,$/;"	e	enum:__anon0bfbaecf9503
+SS_CF_ALL	guest/hals/ril/reference-libril/ril.h	/^  SS_CF_ALL,$/;"	e	enum:__anon0bfbaecf9503
+SS_CF_ALL_CONDITIONAL	guest/hals/ril/reference-libril/ril.h	/^  SS_CF_ALL_CONDITIONAL,$/;"	e	enum:__anon0bfbaecf9503
+SS_CF_BUSY	guest/hals/ril/reference-libril/ril.h	/^  SS_CF_BUSY,$/;"	e	enum:__anon0bfbaecf9503
+SS_CF_NOT_REACHABLE	guest/hals/ril/reference-libril/ril.h	/^  SS_CF_NOT_REACHABLE,$/;"	e	enum:__anon0bfbaecf9503
+SS_CF_NO_REPLY	guest/hals/ril/reference-libril/ril.h	/^  SS_CF_NO_REPLY,$/;"	e	enum:__anon0bfbaecf9503
+SS_CLIP	guest/hals/ril/reference-libril/ril.h	/^  SS_CLIP,$/;"	e	enum:__anon0bfbaecf9503
+SS_CLIR	guest/hals/ril/reference-libril/ril.h	/^  SS_CLIR,$/;"	e	enum:__anon0bfbaecf9503
+SS_COLP	guest/hals/ril/reference-libril/ril.h	/^  SS_COLP,$/;"	e	enum:__anon0bfbaecf9503
+SS_COLR	guest/hals/ril/reference-libril/ril.h	/^  SS_COLR,$/;"	e	enum:__anon0bfbaecf9503
+SS_DEACTIVATION	guest/hals/ril/reference-libril/ril.h	/^  SS_DEACTIVATION,$/;"	e	enum:__anon0bfbaecf9603
+SS_ERASURE	guest/hals/ril/reference-libril/ril.h	/^  SS_ERASURE$/;"	e	enum:__anon0bfbaecf9603
+SS_INCOMING_BARRING	guest/hals/ril/reference-libril/ril.h	/^  SS_INCOMING_BARRING$/;"	e	enum:__anon0bfbaecf9503
+SS_INFO_MAX	guest/hals/ril/reference-libril/ril.h	/^#define SS_INFO_MAX /;"	d
+SS_INTERROGATION	guest/hals/ril/reference-libril/ril.h	/^  SS_INTERROGATION,$/;"	e	enum:__anon0bfbaecf9603
+SS_OUTGOING_BARRING	guest/hals/ril/reference-libril/ril.h	/^  SS_OUTGOING_BARRING,$/;"	e	enum:__anon0bfbaecf9503
+SS_REGISTRATION	guest/hals/ril/reference-libril/ril.h	/^  SS_REGISTRATION,$/;"	e	enum:__anon0bfbaecf9603
+SS_SMS_SERVICES	guest/hals/ril/reference-libril/ril.h	/^  SS_SMS_SERVICES,$/;"	e	enum:__anon0bfbaecf9703
+SS_TELEPHONY	guest/hals/ril/reference-libril/ril.h	/^  SS_TELEPHONY,$/;"	e	enum:__anon0bfbaecf9703
+SS_WAIT	guest/hals/ril/reference-libril/ril.h	/^  SS_WAIT,$/;"	e	enum:__anon0bfbaecf9503
+STAGEFRIGHT_AVCENC_CFLAGS	shared/BoardConfig.mk	/^STAGEFRIGHT_AVCENC_CFLAGS := -DANDROID_GCE$/;"	m
+STK_CLOSE_CHANNEL	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_CLOSE_CHANNEL = 0x41,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_GET_CHANNEL_STATUS	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_GET_CHANNEL_STATUS = 0x44,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_OPEN_CHANNEL	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_OPEN_CHANNEL  = 0x40,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_PLAY_TONE	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_PLAY_TONE     = 0x20,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_RECEIVE_DATA	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_RECEIVE_DATA  = 0x42,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_REFRESH	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_REFRESH       = 0x01,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_RUN_AT	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_RUN_AT        = 0x34,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_SEND_DATA	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_SEND_DATA     = 0x43,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_SEND_DTMF	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_SEND_DTMF     = 0x14,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_SEND_SMS	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_SEND_SMS      = 0x13,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_SEND_SS	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_SEND_SS       = 0x11,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_SEND_USSD	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_SEND_USSD     = 0x12,$/;"	e	enum:__anon70d7df6f0503	file:
+STK_UNSOL_EVENT_NOTIFY	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_UNSOL_EVENT_NOTIFY,$/;"	e	enum:__anon70d7df6f0403	file:
+STK_UNSOL_EVENT_UNKNOWN	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_UNSOL_EVENT_UNKNOWN,$/;"	e	enum:__anon70d7df6f0403	file:
+STK_UNSOL_PROACTIVE_CMD	guest/hals/ril/reference-ril/reference-ril.c	/^    STK_UNSOL_PROACTIVE_CMD,$/;"	e	enum:__anon70d7df6f0403	file:
+STREAMS	host/frontend/webrtc/audio_handler.cpp	/^const virtio_snd_pcm_info STREAMS[] = {{$/;"	v	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:const virtio_snd_pcm_info[]
+STRIPPED_RD	host/commands/assemble_cvd/boot_image_utils.cc	/^const char STRIPPED_RD[] = "stripped_ramdisk";$/;"	v	typeref:typename:const char[]
+SYSTEM_BUILD	host/libs/config/fetcher_config.h	/^  SYSTEM_BUILD,$/;"	e	enum:cuttlefish::FileSource
+SampleRate	host/frontend/webrtc/audio_handler.cpp	/^int SampleRate(uint8_t virtio_rate) {$/;"	f	namespace:cuttlefish::__anon2a3d92f70111	typeref:typename:int
+SapImpl	guest/hals/ril/reference-libril/sap_service.cpp	/^struct SapImpl : public android::hardware::radio::V1_1::ISap {$/;"	s	file:
+SapSocketRequest	guest/hals/ril/reference-libril/RilSapSocket.h	/^    typedef struct SapSocketRequest {$/;"	s	class:RilSapSocket
+SapSocketRequest	guest/hals/ril/reference-libril/RilSapSocket.h	/^    } SapSocketRequest;$/;"	t	class:RilSapSocket	typeref:struct:RilSapSocket::SapSocketRequest
+SaveConfig	host/commands/assemble_cvd/assemble_cvd.cc	/^bool SaveConfig(const CuttlefishConfig& tmp_config_obj) {$/;"	f	namespace:cuttlefish::__anon1e335d460111	typeref:typename:bool
+SaveFacilityLockToIccProfile	host/commands/modem_simulator/sim_service.cpp	/^void SimService::SaveFacilityLockToIccProfile() {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+SaveFile	host/commands/host_bugreport/main.cc	/^void SaveFile(ZipWriter& writer, const std::string& zip_path,$/;"	f	namespace:cuttlefish::__anond3364bd20111	typeref:typename:void
+SaveFragment	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::SaveFragment(const ConfigFragment& fragment) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+SaveModemState	host/commands/modem_simulator/modem_simulator.cpp	/^void ModemSimulator::SaveModemState() {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:void
+SavePinStateToIccProfile	host/commands/modem_simulator/sim_service.cpp	/^void SimService::SavePinStateToIccProfile() {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+SaveToFile	host/commands/modem_simulator/nvram_config.cpp	/^bool NvramConfig::SaveToFile(const std::string& file) const {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:bool
+SaveToFile	host/commands/modem_simulator/nvram_config.cpp	/^void NvramConfig::SaveToFile() {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:void
+SaveToFile	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::SaveToFile(const std::string& file) const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+SaveToFile	host/libs/config/fetcher_config.cpp	/^bool FetcherConfig::SaveToFile(const std::string& file) const {$/;"	f	class:cuttlefish::FetcherConfig	typeref:typename:bool
+ScheduleToTerminate	host/libs/confui/session.cc	/^void Session::ScheduleToTerminate() {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:void
+ScopedMMap	common/libs/fs/shared_fd.cpp	/^ScopedMMap::ScopedMMap() : ptr_(MAP_FAILED), len_(0) {}$/;"	f	class:cuttlefish::ScopedMMap
+ScopedMMap	common/libs/fs/shared_fd.cpp	/^ScopedMMap::ScopedMMap(ScopedMMap&& other)$/;"	f	class:cuttlefish::ScopedMMap
+ScopedMMap	common/libs/fs/shared_fd.cpp	/^ScopedMMap::ScopedMMap(void* ptr, size_t len) : ptr_(ptr), len_(len) {}$/;"	f	class:cuttlefish::ScopedMMap
+ScopedMMap	common/libs/fs/shared_fd.h	/^class ScopedMMap {$/;"	c	namespace:cuttlefish
+ScreenChanged	host/commands/kernel_log_monitor/kernel_log_server.h	/^  ScreenChanged = 6,$/;"	e	enum:monitor::Event
+ScreenConnector	host/frontend/webrtc/display_handler.h	/^  using ScreenConnector = cuttlefish::ScreenConnector<WebRtcScProcessedFrame>;$/;"	t	class:cuttlefish::DisplayHandler	typeref:typename:cuttlefish::ScreenConnector<WebRtcScProcessedFrame>
+ScreenConnector	host/libs/screen_connector/screen_connector.h	/^  ScreenConnector(std::unique_ptr<WaylandScreenConnector>&& impl,$/;"	f	class:cuttlefish::ScreenConnector
+ScreenConnector	host/libs/screen_connector/screen_connector.h	/^class ScreenConnector : public ScreenConnectorInfo,$/;"	c	namespace:cuttlefish
+ScreenConnectorCtrl	host/libs/screen_connector/screen_connector_ctrl.h	/^  ScreenConnectorCtrl() : atomic_mode_(ModeType::kAndroidMode) {}$/;"	f	class:cuttlefish::ScreenConnectorCtrl
+ScreenConnectorCtrl	host/libs/screen_connector/screen_connector_ctrl.h	/^class ScreenConnectorCtrl {$/;"	c	namespace:cuttlefish
+ScreenConnectorFrameInfo	host/libs/screen_connector/screen_connector_common.h	/^struct ScreenConnectorFrameInfo {$/;"	s	namespace:cuttlefish
+ScreenConnectorFrameRenderer	host/libs/screen_connector/screen_connector_common.h	/^struct ScreenConnectorFrameRenderer {$/;"	s	namespace:cuttlefish
+ScreenConnectorInfo	host/libs/screen_connector/screen_connector_common.h	/^struct ScreenConnectorInfo {$/;"	s	namespace:cuttlefish
+ScreenConnectorInputMultiplexer	host/libs/screen_connector/screen_connector_multiplexer.h	/^  ScreenConnectorInputMultiplexer(HostModeCtrl& host_mode_ctrl)$/;"	f	class:cuttlefish::ScreenConnectorInputMultiplexer
+ScreenConnectorInputMultiplexer	host/libs/screen_connector/screen_connector_multiplexer.h	/^class ScreenConnectorInputMultiplexer {$/;"	c	namespace:cuttlefish
+ScreenConnectorQueue	host/libs/screen_connector/screen_connector_queue.h	/^  ScreenConnectorQueue(const int q_max_size = 2)$/;"	f	class:cuttlefish::ScreenConnectorQueue
+ScreenConnectorQueue	host/libs/screen_connector/screen_connector_queue.h	/^class ScreenConnectorQueue {$/;"	c	namespace:cuttlefish
+ScreenCount	host/libs/screen_connector/screen_connector_common.h	/^  static std::uint32_t ScreenCount() {$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:std::uint32_t
+ScreenHeight	host/libs/screen_connector/screen_connector_common.h	/^  static std::uint32_t ScreenHeight(std::uint32_t display_number) {$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:std::uint32_t
+ScreenSizeInBytes	host/libs/confui/host_renderer.h	/^  static std::uint32_t ScreenSizeInBytes(const int w, const int h) {$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:std::uint32_t
+ScreenSizeInBytes	host/libs/screen_connector/screen_connector_common.h	/^  static std::uint32_t ScreenSizeInBytes(const std::uint32_t display_number) {$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:std::uint32_t
+ScreenStrideBytes	host/libs/confui/host_renderer.h	/^  std::uint32_t ScreenStrideBytes() const {$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:std::uint32_t
+ScreenStrideBytes	host/libs/screen_connector/screen_connector_common.h	/^  static std::uint32_t ScreenStrideBytes(const std::uint32_t display_number) {$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:std::uint32_t
+ScreenWidth	host/libs/screen_connector/screen_connector_common.h	/^  static std::uint32_t ScreenWidth(std::uint32_t display_number) {$/;"	f	struct:cuttlefish::ScreenConnectorInfo	typeref:typename:std::uint32_t
+SecureEnvComponent	host/commands/secure_env/secure_env.cpp	/^fruit::Component<Tpm> SecureEnvComponent() {$/;"	f	namespace:cuttlefish::__anon0a6d9b510111	typeref:typename:fruit::Component<Tpm>
+SecureEnvMain	host/commands/secure_env/secure_env.cpp	/^int SecureEnvMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+SecureEnvironment	host/commands/run_cvd/launch.cc	/^class SecureEnvironment : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+SecureHal	host/libs/config/cuttlefish_config.h	/^enum class SecureHal {$/;"	g	namespace:cuttlefish
+Security	host/frontend/webrtc/lib/ws_connection.h	/^  enum class Security {$/;"	g	class:WsConnection
+SecurityLevel	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^keymaster_security_level_t TpmKeymasterEnforcement::SecurityLevel() const {$/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:keymaster_security_level_t
+SegmentedHmac	host/commands/secure_env/tpm_hmac.cpp	/^static UniqueEsysPtr<TPM2B_DIGEST> SegmentedHmac($/;"	f	namespace:cuttlefish	typeref:typename:UniqueEsysPtr<TPM2B_DIGEST>	file:
+Select	common/libs/fs/shared_fd.cpp	/^int Select(SharedFDSet* read_set, SharedFDSet* write_set,$/;"	f	namespace:cuttlefish	typeref:typename:int
+SemPost	common/libs/concurrency/semaphore.h	/^  void SemPost() {$/;"	f	class:cuttlefish::Semaphore	typeref:typename:void
+SemPost	host/libs/screen_connector/screen_connector_ctrl.h	/^  void SemPost() { sem_.SemPost(); }$/;"	f	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:void
+SemWait	common/libs/concurrency/multiplexer.h	/^  void SemWait() { sem_items_.SemWait(); }$/;"	f	class:cuttlefish::Multiplexer	typeref:typename:void
+SemWait	common/libs/concurrency/semaphore.h	/^  void SemWait() {$/;"	f	class:cuttlefish::Semaphore	typeref:typename:void
+SemWait	host/libs/screen_connector/screen_connector_ctrl.h	/^  void SemWait() { sem_.SemWait(); }$/;"	f	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:void
+Semaphore	common/libs/concurrency/semaphore.h	/^  Semaphore(const unsigned int init_val = 0, const unsigned int cap = 30000)$/;"	f	class:cuttlefish::Semaphore
+Semaphore	common/libs/concurrency/semaphore.h	/^class Semaphore {$/;"	c	namespace:cuttlefish
+Send	common/libs/fs/shared_fd.cpp	/^ssize_t FileInstance::Send(const void* buf, size_t len, int flags) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ssize_t
+Send	common/libs/net/netlink_client.cpp	/^bool NetlinkClientImpl::Send(const NetlinkRequest& message) {$/;"	f	class:cuttlefish::__anon61381e100111::NetlinkClientImpl	typeref:typename:bool
+Send	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^gatekeeper_error_t RemoteGateKeeperDevice::Send(uint32_t command, const GateKeeperMessage& reque/;"	f	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:gatekeeper_error_t
+Send	guest/hals/gatekeeper/remote/remote_gatekeeper.h	/^    gatekeeper_error_t Send(const EnrollRequest& request, EnrollResponse *response) {$/;"	f	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:gatekeeper_error_t
+Send	guest/hals/gatekeeper/remote/remote_gatekeeper.h	/^    gatekeeper_error_t Send(const VerifyRequest& request, VerifyResponse *response) {$/;"	f	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:gatekeeper_error_t
+Send	host/frontend/webrtc/lib/client_handler.cpp	/^void ControlChannelHandler::Send(const Json::Value& message) {$/;"	f	class:cuttlefish::webrtc_streaming::ControlChannelHandler	typeref:typename:void
+Send	host/frontend/webrtc/lib/client_handler.cpp	/^void ControlChannelHandler::Send(const uint8_t *msg, size_t size, bool binary) {$/;"	f	class:cuttlefish::webrtc_streaming::ControlChannelHandler	typeref:typename:void
+Send	host/frontend/webrtc/lib/ws_connection.cpp	/^bool WsConnectionImpl::Send(const uint8_t* data, size_t len, bool binary) {$/;"	f	class:WsConnectionImpl	typeref:typename:bool
+Send	host/libs/msg_queue/msg_queue.cc	/^int SysVMessageQueue::Send(void* data, size_t size, bool block) {$/;"	f	class:cuttlefish::SysVMessageQueue	typeref:typename:int
+SendAbortCmd	common/libs/confui/protocol.cpp	/^bool SendAbortCmd(SharedFD fd, const std::string& session_id) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool
+SendAck	common/libs/confui/protocol.cpp	/^bool SendAck(SharedFD fd, const std::string& session_id, const bool is_success,$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool
+SendAll	common/frontend/socket_vsock_proxy/main.cpp	/^  ssize_t SendAll(const char* packet, ssize_t length) {$/;"	f	class:__anon913036200111::SocketSender	typeref:typename:ssize_t	file:
+SendAll	common/libs/fs/shared_buf.cc	/^bool SendAll(SharedFD sock, const std::string& msg) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+SendAll	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^bool SendAll(cuttlefish::SharedFD sock, const std::string& msg) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:bool
+SendCallStatusToRemote	host/commands/modem_simulator/call_service.cpp	/^void CallService::SendCallStatusToRemote(CallStatus& call,$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+SendClientDisconnectMessage	host/frontend/webrtc_operator/device_handler.cpp	/^void DeviceHandler::SendClientDisconnectMessage(size_t client_id) {$/;"	f	class:cuttlefish::DeviceHandler	typeref:typename:void
+SendClientMessage	host/frontend/webrtc_operator/device_handler.cpp	/^void DeviceHandler::SendClientMessage(size_t client_id,$/;"	f	class:cuttlefish::DeviceHandler	typeref:typename:void
+SendCommand	host/commands/modem_simulator/unittest/service_test.cpp	/^  void SendCommand(std::string command, std::string prefix = "") {$/;"	f	class:ModemServiceTest	typeref:typename:void	file:
+SendCommandResponse	host/commands/modem_simulator/channel_monitor.cpp	/^void Client::SendCommandResponse($/;"	f	class:cuttlefish::Client	typeref:typename:void
+SendCommandResponse	host/commands/modem_simulator/channel_monitor.cpp	/^void Client::SendCommandResponse(std::string response) const {$/;"	f	class:cuttlefish::Client	typeref:typename:void
+SendCommandToRemote	host/commands/modem_simulator/modem_service.cpp	/^void ModemService::SendCommandToRemote(cuttlefish::SharedFD remote_client, std::string response)/;"	f	class:cuttlefish::ModemService	typeref:typename:void
+SendDeviceConfig	common/libs/device_config/device_config.cpp	/^bool DeviceConfigHelper::SendDeviceConfig(SharedFD fd) {$/;"	f	class:cuttlefish::DeviceConfigHelper	typeref:typename:bool
+SendDeviceMessage	host/frontend/webrtc_operator/client_handler.cpp	/^  void SendDeviceMessage(const Json::Value& message) override {$/;"	f	class:cuttlefish::PollConnectionHandler	typeref:typename:void	file:
+SendDeviceMessage	host/frontend/webrtc_operator/client_handler.cpp	/^void ClientWSHandler::SendDeviceMessage(const Json::Value& device_message) {$/;"	f	class:cuttlefish::ClientWSHandler	typeref:typename:void
+SendEvent	host/libs/audio_connector/server.cpp	/^bool AudioClientConnection::SendEvent(\/*TODO*\/) { return false; }$/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:bool
+SendExitCode	host/commands/run_cvd/boot_state_machine.cc	/^  void SendExitCode(RunnerExitCodes exit_code, SharedFD fd) {$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:void	file:
+SendFileDescriptors	common/libs/fs/shared_fd.h	/^  ssize_t SendFileDescriptors(const void* buf, size_t len, Args&&... sent_fds) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ssize_t
+SendJson	host/frontend/webrtc/lib/streamer.cpp	/^void SendJson(WsConnection* ws_conn, const Json::Value& data) {$/;"	f	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:void
+SendJsonMsg	host/libs/allocd/utils.cpp	/^bool SendJsonMsg(SharedFD client_socket, const Json::Value& resp) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+SendLastFrame	host/frontend/webrtc/display_handler.cpp	/^void DisplayHandler::SendLastFrame() {$/;"	f	class:cuttlefish::DisplayHandler	typeref:typename:void
+SendMessage	common/libs/security/gatekeeper_channel.cpp	/^bool GatekeeperChannel::SendMessage($/;"	f	class:cuttlefish::GatekeeperChannel	typeref:typename:bool
+SendMessage	common/libs/security/keymaster_channel.cpp	/^bool KeymasterChannel::SendMessage($/;"	f	class:cuttlefish::KeymasterChannel	typeref:typename:bool
+SendMessage	host/frontend/webrtc/lib/camera_controller.h	/^  virtual void SendMessage(const Json::Value& msg) {$/;"	f	class:cuttlefish::CameraController	typeref:typename:void
+SendMessage	host/libs/wmediumd_controller/wmediumd_controller.cpp	/^bool WmediumdController::SendMessage(const WmediumdMessage& message) {$/;"	f	class:cuttlefish::WmediumdController	typeref:typename:bool
+SendMessageToClient	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::SendMessageToClient(int client_id,$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+SendMsg	common/libs/fs/shared_fd.cpp	/^ssize_t FileInstance::SendMsg(const struct msghdr* msg, int flags) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ssize_t
+SendNmea	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    Status SendNmea(ServerContext* context, const SendNmeaRequest* request,$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:Status	file:
+SendNmea	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto	/^  rpc SendNmea (SendNmeaRequest) returns (SendNmeaReply) {}$/;"	r	service:gnss_grpc_proxy.GnssGrpcProxy	typeref:typename:SendNmeaReply
+SendNmeaReply	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto	/^message SendNmeaReply {$/;"	m	package:gnss_grpc_proxy
+SendNmeaRequest	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto	/^message SendNmeaRequest {$/;"	m	package:gnss_grpc_proxy
+SendNoSignal	common/libs/utils/tcp_socket.cpp	/^ssize_t ClientSocket::SendNoSignal(const Message& message) {$/;"	f	class:cuttlefish::ClientSocket	typeref:typename:ssize_t
+SendNoSignal	common/libs/utils/tcp_socket.cpp	/^ssize_t ClientSocket::SendNoSignal(const uint8_t* data, std::size_t size) {$/;"	f	class:cuttlefish::ClientSocket	typeref:typename:ssize_t
+SendNoSignal	common/libs/utils/tcp_socket.h	/^  ssize_t SendNoSignal(const std::uint8_t (&data)[N]) {$/;"	f	class:cuttlefish::ClientSocket	typeref:typename:ssize_t
+SendOver	common/libs/confui/protocol_types.cpp	/^bool ConfUiAckMessage::SendOver(SharedFD fd) {$/;"	f	class:cuttlefish::confui::ConfUiAckMessage	typeref:typename:bool
+SendOver	common/libs/confui/protocol_types.cpp	/^bool ConfUiCliResponseMessage::SendOver(SharedFD fd) {$/;"	f	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:bool
+SendOver	common/libs/confui/protocol_types.cpp	/^bool ConfUiStartMessage::SendOver(SharedFD fd) {$/;"	f	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:bool
+SendOver	common/libs/confui/protocol_types.cpp	/^bool ConfUiUserSelectionMessage::SendOver(SharedFD fd) {$/;"	f	class:cuttlefish::confui::ConfUiUserSelectionMessage	typeref:typename:bool
+SendOver	common/libs/confui/protocol_types.cpp	/^bool ConfUiUserTouchMessage::SendOver(SharedFD fd) {$/;"	f	class:cuttlefish::confui::ConfUiUserTouchMessage	typeref:typename:bool
+SendOver	common/libs/confui/protocol_types.h	/^  bool SendOver(SharedFD fd) override {$/;"	f	class:cuttlefish::confui::ConfUiGenericMessage	typeref:typename:bool
+SendRemoteCommand	host/commands/modem_simulator/channel_monitor.cpp	/^void ChannelMonitor::SendRemoteCommand(cuttlefish::SharedFD client, std::string& response) {$/;"	f	class:cuttlefish::ChannelMonitor	typeref:typename:void
+SendRequest	common/libs/security/gatekeeper_channel.cpp	/^bool GatekeeperChannel::SendRequest($/;"	f	class:cuttlefish::GatekeeperChannel	typeref:typename:bool
+SendRequest	common/libs/security/keymaster_channel.cpp	/^bool KeymasterChannel::SendRequest($/;"	f	class:cuttlefish::KeymasterChannel	typeref:typename:bool
+SendResponse	common/libs/confui/protocol.cpp	/^bool SendResponse(SharedFD fd, const std::string& session_id,$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool
+SendResponse	common/libs/security/gatekeeper_channel.cpp	/^bool GatekeeperChannel::SendResponse($/;"	f	class:cuttlefish::GatekeeperChannel	typeref:typename:bool
+SendResponse	common/libs/security/keymaster_channel.cpp	/^bool KeymasterChannel::SendResponse($/;"	f	class:cuttlefish::KeymasterChannel	typeref:typename:bool
+SendServerConfig	host/frontend/webrtc_operator/signal_handler.cpp	/^void SignalHandler::SendServerConfig() {$/;"	f	class:cuttlefish::SignalHandler	typeref:typename:void
+SendSmsToRemote	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::SendSmsToRemote(std::string remote_port, PDUParser& sms_pdu) {$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+SendStartCmd	common/libs/confui/protocol.cpp	/^bool SendStartCmd(SharedFD fd, const std::string& session_id,$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool
+SendStatus	host/libs/audio_connector/buffers.cpp	/^void ShmBuffer::SendStatus(AudioStatus status, uint32_t latency_bytes,$/;"	f	class:cuttlefish::ShmBuffer	typeref:typename:void
+SendStatusCallback	host/libs/audio_connector/server.cpp	/^std::function<void(AudioStatus, uint32_t, uint32_t)> SendStatusCallback($/;"	f	namespace:cuttlefish::__anon8078843e0111	typeref:typename:std::function<void (AudioStatus,uint32_t,uint32_t)>
+SendStopCmd	common/libs/confui/protocol.cpp	/^bool SendStopCmd(SharedFD fd, const std::string& session_id) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool
+SendUnsolicitedCommand	host/commands/modem_simulator/channel_monitor.cpp	/^void ChannelMonitor::SendUnsolicitedCommand(std::string& response) {$/;"	f	class:cuttlefish::ChannelMonitor	typeref:typename:void
+SendUnsolicitedCommand	host/commands/modem_simulator/modem_service.cpp	/^void ModemService::SendUnsolicitedCommand(std::string unsol_command) {$/;"	f	class:cuttlefish::ModemService	typeref:typename:void
+SendUserSelection	common/libs/confui/protocol.cpp	/^bool SendUserSelection(SharedFD fd, const std::string& session_id,$/;"	f	namespace:cuttlefish::confui	typeref:typename:bool
+SendUserSelection	host/libs/confui/host_server.cc	/^void HostServer::SendUserSelection(std::unique_ptr<ConfUiMessage>& input) {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:void
+Send_	common/libs/confui/protocol_types.h	/^  static bool Send_(SharedFD fd, const ConfUiCmd cmd,$/;"	f	class:cuttlefish::confui::ConfUiMessage	typeref:typename:bool
+SeqNo	common/libs/net/netlink_request.cpp	/^uint32_t NetlinkRequest::SeqNo() const {$/;"	f	class:cuttlefish::NetlinkRequest	typeref:typename:uint32_t
+Serial	host/commands/modem_simulator/thread_looper.h	/^  typedef int32_t Serial;$/;"	t	class:cuttlefish::ThreadLooper	typeref:typename:int32_t
+SerializableToKeyBlob	host/commands/secure_env/tpm_key_blob_maker.cpp	/^static KeymasterKeyBlob SerializableToKeyBlob($/;"	f	namespace:cuttlefish	typeref:typename:KeymasterKeyBlob	file:
+Serialize	host/commands/secure_env/composite_serialization.cpp	/^uint8_t* CompositeSerializable::Serialize($/;"	f	class:cuttlefish::CompositeSerializable	typeref:typename:uint8_t *
+Serialize	host/commands/secure_env/encrypted_serializable.cpp	/^uint8_t* EncryptedSerializable::Serialize($/;"	f	class:cuttlefish::EncryptedSerializable	typeref:typename:uint8_t *
+Serialize	host/commands/secure_env/hmac_serializable.cpp	/^uint8_t* HmacSerializable::Serialize(uint8_t* buf, const uint8_t* end) const {$/;"	f	class:cuttlefish::HmacSerializable	typeref:typename:uint8_t *
+Serialize	host/commands/secure_env/json_serializable.cpp	/^uint8_t* JsonSerializable::Serialize(uint8_t* buf, const uint8_t* end) const {$/;"	f	class:cuttlefish::JsonSerializable	typeref:typename:uint8_t *
+Serialize	host/commands/secure_env/tpm_serialize.cpp	/^uint8_t* TpmSerializable<T>::Serialize(uint8_t* buf, const uint8_t* end) const {$/;"	f	class:cuttlefish::TpmSerializable	typeref:typename:uint8_t *
+Serialize	host/libs/config/adb/config.cpp	/^  Json::Value Serialize() const override {$/;"	f	class:cuttlefish::__anone963d72d0111::AdbConfigFragmentImpl	typeref:typename:Json::Value	file:
+Serialize	host/libs/config/custom_actions.cpp	/^  Json::Value Serialize() const override {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:Json::Value	file:
+Serialize	host/libs/wmediumd_controller/wmediumd_api_protocol.cpp	/^std::string WmediumdMessage::Serialize(void) const {$/;"	f	class:cuttlefish::WmediumdMessage	typeref:typename:std::string
+SerializeBody	host/libs/wmediumd_controller/wmediumd_api_protocol.cpp	/^void WmediumdMessageReloadConfig::SerializeBody(std::string& buf) const {$/;"	f	class:cuttlefish::WmediumdMessageReloadConfig	typeref:typename:void
+SerializeBody	host/libs/wmediumd_controller/wmediumd_api_protocol.cpp	/^void WmediumdMessageSetControl::SerializeBody(std::string& buf) const {$/;"	f	class:cuttlefish::WmediumdMessageSetControl	typeref:typename:void
+SerializeBody	host/libs/wmediumd_controller/wmediumd_api_protocol.cpp	/^void WmediumdMessageSetSnr::SerializeBody(std::string& buf) const {$/;"	f	class:cuttlefish::WmediumdMessageSetSnr	typeref:typename:void
+SerializeBody	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  virtual void SerializeBody(std::string&) const {};$/;"	f	class:cuttlefish::WmediumdMessage	typeref:typename:void
+SerializeTpmKeyPrivate	host/commands/secure_env/tpm_serialize.h	/^using SerializeTpmKeyPrivate = TpmSerializable<TPM2B_PRIVATE>;$/;"	t	namespace:cuttlefish	typeref:typename:TpmSerializable<TPM2B_PRIVATE>
+SerializeTpmKeyPublic	host/commands/secure_env/tpm_serialize.h	/^using SerializeTpmKeyPublic = TpmSerializable<TPM2B_PUBLIC>;$/;"	t	namespace:cuttlefish	typeref:typename:TpmSerializable<TPM2B_PUBLIC>
+SerializedSend	guest/hals/confirmationui/guest_session.h	/^    bool SerializedSend(F&& f, cuttlefish::SharedFD fd, Args&&... args) {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:bool
+SerializedSize	host/commands/secure_env/composite_serialization.cpp	/^size_t CompositeSerializable::SerializedSize() const {$/;"	f	class:cuttlefish::CompositeSerializable	typeref:typename:size_t
+SerializedSize	host/commands/secure_env/encrypted_serializable.cpp	/^size_t EncryptedSerializable::SerializedSize() const {$/;"	f	class:cuttlefish::EncryptedSerializable	typeref:typename:size_t
+SerializedSize	host/commands/secure_env/hmac_serializable.cpp	/^size_t HmacSerializable::SerializedSize() const {$/;"	f	class:cuttlefish::HmacSerializable	typeref:typename:size_t
+SerializedSize	host/commands/secure_env/json_serializable.cpp	/^size_t JsonSerializable::SerializedSize() const {$/;"	f	class:cuttlefish::JsonSerializable	typeref:typename:size_t
+SerializedSize	host/commands/secure_env/tpm_serialize.cpp	/^size_t TpmSerializable<T>::SerializedSize() const {$/;"	f	class:cuttlefish::TpmSerializable	typeref:typename:size_t
+Serve	host/libs/websocket/websocket_server.cpp	/^void WebSocketServer::Serve() {$/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:void
+ServerCallback	host/libs/websocket/websocket_server.cpp	/^int WebSocketServer::ServerCallback(struct lws* wsi,$/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:int
+ServerConfig	host/frontend/webrtc_operator/server_config.cpp	/^ServerConfig::ServerConfig(const std::vector<std::string>& stuns)$/;"	f	class:cuttlefish::ServerConfig
+ServerConfig	host/frontend/webrtc_operator/server_config.h	/^class ServerConfig {$/;"	c	namespace:cuttlefish
+ServerFdsFromCmdline	host/commands/modem_simulator/main.cpp	/^std::vector<cuttlefish::SharedFD> ServerFdsFromCmdline() {$/;"	f	typeref:typename:std::vector<cuttlefish::SharedFD>
+ServerLoop	host/commands/run_cvd/server_loop.h	/^class ServerLoop {$/;"	c	namespace:cuttlefish
+ServerLoop	host/libs/wayland/wayland_server.cpp	/^void WaylandServer::ServerLoop(int fd) {$/;"	f	class:wayland::WaylandServer	typeref:typename:void
+ServerLoopImpl	host/commands/run_cvd/server_loop.cpp	/^class ServerLoopImpl : public ServerLoop, public Feature {$/;"	c	namespace:cuttlefish::__anon527e8bd40111	file:
+ServerShutdown	common/libs/utils/vsock_connection.cpp	/^void VsockServerConnection::ServerShutdown() {$/;"	f	class:cuttlefish::VsockServerConnection	typeref:typename:void
+ServerSocket	common/libs/utils/tcp_socket.cpp	/^ServerSocket::ServerSocket(int port)$/;"	f	class:cuttlefish::ServerSocket
+ServerSocket	common/libs/utils/tcp_socket.h	/^class ServerSocket {$/;"	c	namespace:cuttlefish
+Session	host/libs/allocd/resource_manager.h	/^  explicit Session(uint32_t session_id, uid_t uid)$/;"	f	class:cuttlefish::Session
+Session	host/libs/allocd/resource_manager.h	/^class Session {$/;"	c	namespace:cuttlefish
+Session	host/libs/confui/session.cc	/^Session::Session(const std::string& session_name,$/;"	f	class:cuttlefish::confui::Session
+Session	host/libs/confui/session.h	/^class Session {$/;"	c	namespace:cuttlefish::confui
+Set	common/libs/fs/shared_fd.cpp	/^void FileInstance::Set(fd_set* dest, int* max_index) const {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:void
+Set	common/libs/fs/shared_select.h	/^  void Set(const SharedFD& in) {$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:void
+Set	common/libs/utils/shared_fd_flag.cpp	/^static bool Set(const FlagMatch& match, SharedFD& out) {$/;"	f	namespace:cuttlefish	typeref:typename:bool	file:
+Set	host/libs/confui/host_utils.cc	/^void Set(const std::string& name, const std::thread::id tid) {$/;"	f	namespace:cuttlefish::confui::thread	typeref:typename:void
+Set	host/libs/confui/host_utils.cc	/^void ThreadTracer::Set(const std::string& name, const std::thread::id tid) {$/;"	f	class:cuttlefish::confui::thread::ThreadTracer	typeref:typename:void
+SetAddress	common/libs/net/network_interface.h	/^  NetworkInterface& SetAddress(const std::string& address) {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:NetworkInterface &
+SetBinary	host/libs/vm_manager/crosvm_builder.cpp	/^void CrosvmBuilder::SetBinary(const std::string& binary) {$/;"	f	class:cuttlefish::CrosvmBuilder	typeref:typename:void
+SetBootPatchlevel	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster_error_t SetBootPatchlevel(uint32_t boot_patchlevel) override {$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster_error_t
+SetBootPatchlevel	host/commands/secure_env/tpm_key_blob_maker.cpp	/^keymaster_error_t TpmKeyBlobMaker::SetBootPatchlevel(uint32_t boot_patchlevel) {$/;"	f	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:keymaster_error_t
+SetBootPatchlevel	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster_error_t TpmKeymasterContext::SetBootPatchlevel($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster_error_t
+SetBroadcastAddress	common/libs/net/network_interface.h	/^  NetworkInterface& SetBroadcastAddress(const std::string& address) {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:NetworkInterface &
+SetCallActive	host/commands/modem_simulator/call_service.h	/^    bool SetCallActive() {$/;"	f	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+SetCallBackground	host/commands/modem_simulator/call_service.h	/^    bool SetCallBackground() {$/;"	f	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+SetCallback	host/libs/screen_connector/screen_connector.h	/^  void SetCallback(GenerateProcessedFrameCallback&& frame_callback) {$/;"	f	class:cuttlefish::ScreenConnector	typeref:typename:void
+SetCameraHandler	host/frontend/webrtc/connection_observer.cpp	/^void CfConnectionObserverFactory::SetCameraHandler($/;"	f	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:void
+SetClientId	host/frontend/webrtc_operator/client_handler.cpp	/^  void SetClientId(size_t client_id) { client_id_ = client_id; }$/;"	f	class:cuttlefish::PollConnectionHandler	typeref:typename:void	file:
+SetControl	host/libs/wmediumd_controller/wmediumd_controller.cpp	/^bool WmediumdController::SetControl(const uint32_t flags) {$/;"	f	class:cuttlefish::WmediumdController	typeref:typename:bool
+SetDefaultFlagsForCrosvm	host/commands/assemble_cvd/flags.cc	/^void SetDefaultFlagsForCrosvm() {$/;"	f	namespace:cuttlefish	typeref:typename:void
+SetDefaultFlagsForQemu	host/commands/assemble_cvd/flags.cc	/^void SetDefaultFlagsForQemu(Arch target_arch) {$/;"	f	namespace:cuttlefish	typeref:typename:void
+SetDeviceContext	host/libs/confui/host_renderer.cc	/^void ConfUiRenderer::SetDeviceContext(const unsigned long long w,$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:void
+SetDeviceHandler	host/frontend/webrtc_operator/client_handler.cpp	/^  void SetDeviceHandler(std::weak_ptr<DeviceHandler> device_handler) {$/;"	f	class:cuttlefish::PollConnectionHandler	typeref:typename:void	file:
+SetDisconnectCallback	common/libs/utils/vsock_connection.cpp	/^void VsockConnection::SetDisconnectCallback(std::function<void()> callback) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:void
+SetDisplayHandler	host/frontend/webrtc/connection_observer.cpp	/^void CfConnectionObserverFactory::SetDisplayHandler($/;"	f	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:void
+SetEnvironment	common/libs/utils/subprocess.h	/^  void SetEnvironment(const std::vector<std::string>& env) {$/;"	f	class:cuttlefish::Command	typeref:typename:void
+SetExecutable	common/libs/utils/subprocess.h	/^  void SetExecutable(const std::string& executable) {$/;"	f	class:cuttlefish::Command	typeref:typename:void
+SetFrameCallback	host/libs/screen_connector/wayland_screen_connector.cpp	/^void WaylandScreenConnector::SetFrameCallback($/;"	f	class:cuttlefish::WaylandScreenConnector	typeref:typename:void
+SetFrameCallback	host/libs/wayland/wayland_server.cpp	/^void WaylandServer::SetFrameCallback(Surfaces::FrameCallback callback) {$/;"	f	class:wayland::WaylandServer	typeref:typename:void
+SetFrameCallback	host/libs/wayland/wayland_surfaces.cpp	/^void Surfaces::SetFrameCallback(FrameCallback callback) {$/;"	f	class:wayland::Surfaces	typeref:typename:void
+SetHardwareSpec	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::SetHardwareSpec(std::string key, std::string value) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:void
+SetHardwareSpec	host/frontend/webrtc/lib/streamer.h	/^  void SetHardwareSpec(std::string key, V value) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:void
+SetHasIpv4	host/libs/allocd/resource.h	/^  void SetHasIpv4(bool ipv4) { has_ipv4_ = ipv4; }$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:void
+SetHasIpv6	host/libs/allocd/resource.h	/^  void SetHasIpv6(bool ipv6) { has_ipv6_ = ipv6; }$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:void
+SetMessageSender	host/frontend/webrtc/lib/camera_controller.h	/^  virtual void SetMessageSender($/;"	f	class:cuttlefish::CameraController	typeref:typename:void
+SetMicrophoneMute	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetMicrophoneMute(bool enable) { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetMicrophoneVolume	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetMicrophoneVolume(uint32_t volume) { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetMode	host/libs/confui/host_mode_ctrl.h	/^  void SetMode(const ModeType mode) {$/;"	f	class:cuttlefish::HostModeCtrl	typeref:typename:void
+SetMode	host/libs/screen_connector/screen_connector_ctrl.h	/^  void SetMode(const ModeType mode) {$/;"	f	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:void
+SetModes	host/libs/config/adb/data.cpp	/^  bool SetModes(const std::set<AdbMode>& modes) override {$/;"	f	class:cuttlefish::AdbConfigImpl	typeref:typename:bool	file:
+SetModes	host/libs/config/adb/data.cpp	/^  bool SetModes(std::set<AdbMode>&& modes) override {$/;"	f	class:cuttlefish::AdbConfigImpl	typeref:typename:bool	file:
+SetName	common/libs/net/network_interface.h	/^  NetworkInterface& SetName(const std::string& new_name) {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:NetworkInterface &
+SetOperational	common/libs/net/network_interface.h	/^  NetworkInterface& SetOperational(bool is_operational) {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:NetworkInterface &
+SetPath	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::SetPath(const std::string& key,$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+SetPeerConnection	host/frontend/webrtc/lib/client_handler.cpp	/^bool ClientHandler::SetPeerConnection($/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:bool
+SetPlayoutDevice	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetPlayoutDevice(WindowsDeviceType device) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetPlayoutDevice	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetPlayoutDevice(uint16_t index) { return 0; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetPrefixLength	common/libs/net/network_interface.h	/^  NetworkInterface& SetPrefixLength(int len) {$/;"	f	class:cuttlefish::NetworkInterface	typeref:typename:NetworkInterface &
+SetRecordingDevice	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetRecordingDevice(WindowsDeviceType device) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetRecordingDevice	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetRecordingDevice(uint16_t index) { return 0; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetRegion	host/libs/wayland/wayland_surface.cpp	/^void Surface::SetRegion(const Region& region) {$/;"	f	class:wayland::Surface	typeref:typename:void
+SetRemoteClient	host/commands/modem_simulator/channel_monitor.cpp	/^void ChannelMonitor::SetRemoteClient(cuttlefish::SharedFD client, bool is_accepted) {$/;"	f	class:cuttlefish::ChannelMonitor	typeref:typename:void
+SetRemoteClient	host/commands/modem_simulator/modem_simulator.h	/^  void SetRemoteClient(cuttlefish::SharedFD client, bool is_accepted) {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:void
+SetRunConnector	host/libs/config/adb/data.cpp	/^  bool SetRunConnector(bool run) override {$/;"	f	class:cuttlefish::AdbConfigImpl	typeref:typename:bool	file:
+SetSessionId	common/libs/confui/protocol_types.h	/^  void SetSessionId(const std::string session_id) { session_id_ = session_id; }$/;"	f	class:cuttlefish::confui::ConfUiMessage	typeref:typename:void
+SetSignalStrengthValue	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::SetSignalStrengthValue(int& value,$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+SetSnr	host/libs/wmediumd_controller/wmediumd_controller.cpp	/^bool WmediumdController::SetSnr(const std::string& node1,$/;"	f	class:cuttlefish::WmediumdController	typeref:typename:bool
+SetSockOpt	common/libs/fs/shared_fd.cpp	/^int FileInstance::SetSockOpt(int level, int optname, const void* optval,$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+SetSocketLocation	host/libs/allocd/resource_manager.cpp	/^void ResourceManager::SetSocketLocation(const std::string& sock_name) {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:void
+SetSpeakerMute	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetSpeakerMute(bool enable) { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetSpeakerVolume	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetSpeakerVolume(uint32_t volume) { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetStereoPlayout	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetStereoPlayout(bool enable) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetStereoRecording	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SetStereoRecording(bool enable) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SetStopper	common/libs/utils/subprocess.h	/^  void SetStopper(SubprocessStopper stopper) { subprocess_stopper_ = stopper; }$/;"	f	class:cuttlefish::Command	typeref:typename:void
+SetStreamParameters	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::SetStreamParameters(StreamSetParamsCommand& cmd) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+SetSuperPartitionComponents	host/commands/assemble_cvd/misc_info.cc	/^bool SetSuperPartitionComponents(const std::vector<std::string>& components,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+SetSystemVersion	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster_error_t SetSystemVersion(uint32_t os_version,$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster_error_t
+SetSystemVersion	host/commands/secure_env/tpm_key_blob_maker.cpp	/^keymaster_error_t TpmKeyBlobMaker::SetSystemVersion($/;"	f	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:keymaster_error_t
+SetSystemVersion	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster_error_t TpmKeymasterContext::SetSystemVersion($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster_error_t
+SetTerminalRaw	common/libs/fs/shared_fd.cpp	/^int FileInstance::SetTerminalRaw() {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+SetTerminalRaw	guest/hals/bt/remote/remote_bluetooth.cpp	/^int SetTerminalRaw(int fd) {$/;"	f	namespace:__anonb7fa39a50111	typeref:typename:int
+SetText	host/libs/confui/host_renderer.h	/^  auto SetText(const std::string& text) {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:auto
+SetTimeZone	host/commands/modem_simulator/misc_service.cpp	/^void MiscService::SetTimeZone(std::string timezone) {$/;"	f	class:cuttlefish::MiscService	typeref:typename:void
+SetTimeZone	host/commands/modem_simulator/modem_simulator.cpp	/^void ModemSimulator::SetTimeZone(std::string timezone) {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:void
+SetUp	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^bool VirtualDeviceBase::SetUp() {$/;"	f	class:VirtualDeviceBase	typeref:typename:bool
+SetUpDevices	guest/commands/vsoc_input_service/vsoc_input_service.cpp	/^bool VSoCInputService::SetUpDevices() {$/;"	f	class:VSoCInputService	typeref:typename:bool
+SetUpTestSuite	host/commands/modem_simulator/unittest/service_test.cpp	/^  static void SetUpTestSuite() {$/;"	f	class:ModemServiceTest	typeref:typename:void	file:
+SetUseEbtablesLegacy	host/libs/allocd/resource.h	/^  void SetUseEbtablesLegacy(bool use_legacy) {$/;"	f	class:cuttlefish::EthernetIface	typeref:typename:void
+SetUseEbtablesLegacy	host/libs/allocd/resource_manager.cpp	/^void ResourceManager::SetUseEbtablesLegacy(bool use_legacy) {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:void
+SetUseIpv4Bridge	host/libs/allocd/resource_manager.h	/^  void SetUseIpv4Bridge(bool ipv4) { use_ipv4_bridge_ = ipv4; }$/;"	f	struct:cuttlefish::ResourceManager	typeref:typename:void
+SetUseIpv6Bridge	host/libs/allocd/resource_manager.h	/^  void SetUseIpv6Bridge(bool ipv6) { use_ipv6_bridge_ = ipv6; }$/;"	f	struct:cuttlefish::ResourceManager	typeref:typename:void
+SetVendorPatchlevel	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster_error_t SetVendorPatchlevel(uint32_t vendor_patchlevel) override {$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster_error_t
+SetVendorPatchlevel	host/commands/secure_env/tpm_key_blob_maker.cpp	/^keymaster_error_t TpmKeyBlobMaker::SetVendorPatchlevel(uint32_t patchlevel) {$/;"	f	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:keymaster_error_t
+SetVendorPatchlevel	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster_error_t TpmKeymasterContext::SetVendorPatchlevel($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster_error_t
+SetVideoTrack	host/frontend/webrtc/lib/client_handler.cpp	/^  void SetVideoTrack(webrtc::VideoTrackInterface *track) {$/;"	f	class:cuttlefish::webrtc_streaming::ClientVideoTrackImpl	typeref:typename:void	file:
+SetVirtioGpuScanoutId	host/libs/wayland/wayland_surface.cpp	/^void Surface::SetVirtioGpuScanoutId(uint32_t scanout_id) {$/;"	f	class:wayland::Surface	typeref:typename:void
+SetVolume	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^void AudioTrackSourceImpl::SetVolume(double volume) {$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:void
+Setter	common/libs/utils/flag_parser.cpp	/^Flag Flag::Setter(std::function<bool(const FlagMatch&)> fn) && {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag
+Setter	common/libs/utils/flag_parser.cpp	/^Flag& Flag::Setter(std::function<bool(const FlagMatch&)> fn) & {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag &
+Settings	guest/hals/camera/vsock_camera_device_3_4.h	/^  using Settings = struct {$/;"	t	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice
+Setup	host/commands/assemble_cvd/disk_flags.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::BootImageRepacker	typeref:typename:bool	file:
+Setup	host/commands/assemble_cvd/disk_flags.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::InitializeMetadataImage	typeref:typename:bool	file:
+Setup	host/commands/assemble_cvd/disk_flags.cc	/^  bool Setup() {$/;"	f	class:cuttlefish::InitializeAccessKregistryImage	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/boot_state_machine.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/boot_state_machine.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::__anone7ed366f0111::ProcessLeader	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override { return true; }$/;"	f	class:cuttlefish::MetricsService	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override { return true; }$/;"	f	class:cuttlefish::OpenWrt	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override { return true; }$/;"	f	class:cuttlefish::RootCanal	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override { return true; }$/;"	f	class:cuttlefish::VehicleHalServer	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override { return true; }$/;"	f	class:cuttlefish::VmmCommands	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::BluetoothConnector	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::ConfigServer	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::KernelLogMonitor	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::LogcatReceiver	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::SecureEnvironment	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::TombstoneReceiver	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::WmediumdServer	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch_modem.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::ModemSimulator	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch_streamer.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/launch_streamer.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/main.cc	/^  bool Setup() override {$/;"	f	class:cuttlefish::__anonadab6e0c0111::CuttlefishEnvironment	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/server_loop.cpp	/^  bool Setup() {$/;"	f	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/validate.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateHostConfigurationFeature	typeref:typename:bool	file:
+Setup	host/commands/run_cvd/validate.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::__anon8d12954e0111::ValidateTapDevices	typeref:typename:bool	file:
+Setup	host/libs/config/adb/launch.cpp	/^  bool Setup() override { return true; }$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbConnector	typeref:typename:bool	file:
+Setup	host/libs/config/adb/launch.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:bool	file:
+Setup	host/libs/config/data_image.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::InitializeDataImageImpl	typeref:typename:bool	file:
+Setup	host/libs/config/data_image.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::InitializeEspImageImpl	typeref:typename:bool	file:
+Setup	host/libs/config/data_image.cpp	/^  bool Setup() override {$/;"	f	class:cuttlefish::InitializeMiscImageImpl	typeref:typename:bool	file:
+SetupAdbSocket	host/frontend/webrtc/adb_handler.cpp	/^SharedFD SetupAdbSocket(const std::string &adb_host_and_port) {$/;"	f	namespace:cuttlefish::webrtc_streaming::__anonbb773a0c0111	typeref:typename:SharedFD
+SetupBridgeGateway	host/libs/allocd/alloc_utils.cpp	/^bool SetupBridgeGateway(const std::string& bridge_name,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+SetupCameraForClient	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Impl::SetupCameraForClient(int client_id) {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:void
+SetupDependency	host/commands/modem_simulator/call_service.cpp	/^void CallService::SetupDependency(SimService* sim, NetworkService* net) {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+SetupDependency	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::SetupDependency(MiscService* misc, SimService* sim,$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+SetupDependency	host/commands/modem_simulator/sim_service.cpp	/^void SimService::SetupDependency(NetworkService* net) {$/;"	f	class:cuttlefish::SimService	typeref:typename:void
+SetupDependency	host/commands/modem_simulator/sms_service.cpp	/^void SmsService::SetupDependency(SimService* sim) { sim_service_ = sim; }$/;"	f	class:cuttlefish::SmsService	typeref:typename:void
+SetupDependency	host/commands/modem_simulator/stk_service.cpp	/^void StkService::SetupDependency(SimService* sim) { sim_service_ = sim; }$/;"	f	class:cuttlefish::StkService	typeref:typename:void
+SetupDone	guest/hals/confirmationui/guest_session.h	/^        SetupDone = 2,$/;"	e	enum:android::hardware::confirmationui::V1_0::implementation::GuestSession::ListenerState
+SeverityTarget	common/libs/utils/tee_logging.h	/^struct SeverityTarget {$/;"	s	namespace:cuttlefish
+SeverityTargetsForFiles	common/libs/utils/tee_logging.cpp	/^static std::vector<SeverityTarget> SeverityTargetsForFiles($/;"	f	namespace:cuttlefish	typeref:typename:std::vector<SeverityTarget>	file:
+SharedFD	common/libs/fs/shared_fd.h	/^  SharedFD(const std::shared_ptr<FileInstance>& in) : value_(in) {}$/;"	f	class:cuttlefish::SharedFD
+SharedFD	common/libs/fs/shared_fd.h	/^class SharedFD {$/;"	c	namespace:cuttlefish
+SharedFD	common/libs/fs/shared_fd.h	/^inline SharedFD::SharedFD() : value_(FileInstance::ClosedInstance()) {}$/;"	f	class:cuttlefish::SharedFD
+SharedFDFlag	common/libs/utils/shared_fd_flag.cpp	/^Flag SharedFDFlag(SharedFD& out) {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+SharedFDFlag	common/libs/utils/shared_fd_flag.cpp	/^Flag SharedFDFlag(const std::string& name, SharedFD& out) {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+SharedFDIstream	common/libs/fs/shared_fd_stream.cpp	/^SharedFDIstream::SharedFDIstream(SharedFD shared_fd)$/;"	f	class:cuttlefish::SharedFDIstream
+SharedFDIstream	common/libs/fs/shared_fd_stream.h	/^class SharedFDIstream : public std::istream {$/;"	c	namespace:cuttlefish
+SharedFDOstream	common/libs/fs/shared_fd_stream.cpp	/^SharedFDOstream::SharedFDOstream(SharedFD shared_fd)$/;"	f	class:cuttlefish::SharedFDOstream
+SharedFDOstream	common/libs/fs/shared_fd_stream.h	/^class SharedFDOstream : public std::ostream {$/;"	c	namespace:cuttlefish
+SharedFDSet	common/libs/fs/shared_select.h	/^class SharedFDSet {$/;"	c	namespace:cuttlefish
+SharedFDStreambuf	common/libs/fs/shared_fd_stream.cpp	/^SharedFDStreambuf::SharedFDStreambuf(SharedFD shared_fd)$/;"	f	class:cuttlefish::SharedFDStreambuf
+SharedFDStreambuf	common/libs/fs/shared_fd_stream.h	/^class SharedFDStreambuf : public std::streambuf {$/;"	c	namespace:cuttlefish
+ShmBuffer	host/libs/audio_connector/buffers.cpp	/^ShmBuffer::ShmBuffer(ShmBuffer&& other)$/;"	f	class:cuttlefish::ShmBuffer
+ShmBuffer	host/libs/audio_connector/buffers.h	/^  ShmBuffer(const virtio_snd_pcm_xfer& header, uint32_t len,$/;"	f	class:cuttlefish::ShmBuffer
+ShmBuffer	host/libs/audio_connector/buffers.h	/^class ShmBuffer {$/;"	c	namespace:cuttlefish
+ShouldCreateCompositeDisk	host/commands/assemble_cvd/disk_flags.cc	/^bool ShouldCreateCompositeDisk(const std::string& composite_disk_path,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+ShouldCreateOsCompositeDisk	host/commands/assemble_cvd/disk_flags.cc	/^bool ShouldCreateOsCompositeDisk(const CuttlefishConfig& config) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+ShouldEnableAcceleratedRendering	host/libs/graphics_detector/graphics_detector.cpp	/^bool ShouldEnableAcceleratedRendering($/;"	f	namespace:cuttlefish	typeref:typename:bool
+ShowNewDeviceList	host/frontend/webrtc_operator/assets/js/index.js	/^  #ShowNewDeviceList(device_ids) {$/;"	m	class:DeviceListApp
+Shutdown	common/libs/fs/shared_fd.cpp	/^int FileInstance::Shutdown(int how) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+Shutdown	host/libs/allocd/request.h	/^  Shutdown,          \/\/ request allocd to shutdown and clean up all resources$/;"	e	enum:cuttlefish::RequestType
+ShutdownIface	host/libs/allocd/alloc_utils.cpp	/^bool ShutdownIface(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+SignalHandler	host/frontend/webrtc_operator/signal_handler.cpp	/^SignalHandler::SignalHandler(struct lws* wsi, DeviceRegistry* registry,$/;"	f	class:cuttlefish::SignalHandler
+SignalHandler	host/frontend/webrtc_operator/signal_handler.h	/^class SignalHandler : public WebSocketHandler {$/;"	c	namespace:cuttlefish
+SignalMeasurementType	guest/hals/ril/reference-libril/ril.h	/^} SignalMeasurementType;$/;"	t	typeref:enum:__anon0bfbaecf5403
+SignalStrength	host/commands/modem_simulator/network_service.h	/^    SignalStrength():$/;"	f	struct:cuttlefish::NetworkService::SignalStrength
+SignalStrength	host/commands/modem_simulator/network_service.h	/^  struct SignalStrength {$/;"	s	class:cuttlefish::NetworkService
+SigningKey	host/commands/secure_env/primary_key_builder.cpp	/^void PrimaryKeyBuilder::SigningKey() {$/;"	f	class:cuttlefish::PrimaryKeyBuilder	typeref:typename:void
+SigningKeyCreator	host/commands/secure_env/primary_key_builder.cpp	/^SigningKeyCreator(const std::string& unique) {$/;"	f	namespace:cuttlefish	typeref:typename:std::function<TpmObjectSlot (TpmResourceManager &)>
+SimFileSystem	host/commands/modem_simulator/sim_service.h	/^  struct SimFileSystem {$/;"	s	class:cuttlefish::SimService
+SimService	host/commands/modem_simulator/sim_service.cpp	/^SimService::SimService(int32_t service_id, ChannelMonitor* channel_monitor,$/;"	f	class:cuttlefish::SimService
+SimService	host/commands/modem_simulator/sim_service.h	/^class SimService : public ModemService, public std::enable_shared_from_this<SimService> {$/;"	c	namespace:cuttlefish
+SimStatus	host/commands/modem_simulator/sim_service.h	/^  enum SimStatus {$/;"	g	class:cuttlefish::SimService
+SimulatePendingCallsAnswered	host/commands/modem_simulator/call_service.cpp	/^void CallService::SimulatePendingCallsAnswered() {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+Size	host/commands/fetcher/build_api.h	/^  size_t Size() const { return size; }$/;"	f	class:cuttlefish::Artifact	typeref:typename:size_t
+Size	host/libs/confui/host_renderer.h	/^  auto Size() const { return teeui_frame_.size(); }$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:auto
+Size	host/libs/screen_connector/screen_connector_queue.h	/^  auto Size() const {$/;"	f	class:cuttlefish::ScreenConnectorQueue	typeref:typename:auto
+SkipComma	host/commands/modem_simulator/command_parser.h	/^inline void CommandParser::SkipComma() {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:void
+SkipPrefix	host/commands/modem_simulator/command_parser.h	/^inline void CommandParser::SkipPrefix() {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:void
+SkipPrefixAT	host/commands/modem_simulator/command_parser.h	/^inline void CommandParser::SkipPrefixAT() {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:void
+SkipWhiteSpace	host/commands/modem_simulator/command_parser.h	/^inline void CommandParser::SkipWhiteSpace() {$/;"	f	class:cuttlefish::CommandParser	typeref:typename:void
+Slack	shared/config/task_profiles.json	/^            "Slack": "40000000"$/;"	s	object:Profiles.24.Actions.0.Params
+Slack	shared/config/task_profiles.json	/^            "Slack": "50000"$/;"	s	object:Profiles.25.Actions.0.Params
+SleepForever	common/frontend/socket_vsock_proxy/main.cpp	/^[[noreturn]] static void SleepForever() {$/;"	f	namespace:__anon913036200111	typeref:typename:void	file:
+SleepForever	host/frontend/adb_connector/main.cpp	/^[[noreturn]] void SleepForever() {$/;"	f	namespace:__anona4a84cd70111	typeref:typename:void
+SmsMessage	host/commands/modem_simulator/sms_service.h	/^  struct SmsMessage {$/;"	s	class:cuttlefish::SmsService
+SmsService	host/commands/modem_simulator/sms_service.cpp	/^SmsService::SmsService(int32_t service_id, ChannelMonitor* channel_monitor,$/;"	f	class:cuttlefish::SmsService
+SmsService	host/commands/modem_simulator/sms_service.h	/^class SmsService : public ModemService , public std::enable_shared_from_this<SmsService> {$/;"	c	namespace:cuttlefish
+SmsServiceCenterAddress	host/commands/modem_simulator/sms_service.h	/^  struct SmsServiceCenterAddress {$/;"	s	class:cuttlefish::SmsService
+SmsStatus	host/commands/modem_simulator/sms_service.h	/^    enum SmsStatus { kUnread = 0, kRead = 1, kUnsent = 2, kSent = 3 };$/;"	g	struct:cuttlefish::SmsService::SmsMessage
+Socket	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::Socket(int domain, int socket_type, int protocol) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+SocketExists	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^bool RilSapSocket::SocketExists(const char *socketName) {$/;"	f	class:RilSapSocket	typeref:typename:bool
+SocketListenParam	guest/hals/ril/reference-libril/ril_ex.h	/^typedef struct SocketListenParam {$/;"	s
+SocketListenParam	guest/hals/ril/reference-libril/ril_ex.h	/^} SocketListenParam;$/;"	t	typeref:struct:SocketListenParam
+SocketLocalClient	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::SocketLocalClient(const std::string& name, bool abstract,$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+SocketLocalClient	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::SocketLocalClient(int port, int type) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+SocketLocalServer	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::SocketLocalServer(const std::string& name, bool abstract,$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+SocketLocalServer	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::SocketLocalServer(int port, int type) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+SocketPair	common/libs/fs/shared_fd.cpp	/^bool SharedFD::SocketPair(int domain, int type, int protocol,$/;"	f	class:cuttlefish::SharedFD	typeref:typename:bool
+SocketReceiver	common/frontend/socket_vsock_proxy/main.cpp	/^  explicit SocketReceiver(cuttlefish::SharedFD socket) : socket_{socket} {}$/;"	f	class:__anon913036200111::SocketReceiver	file:
+SocketReceiver	common/frontend/socket_vsock_proxy/main.cpp	/^class SocketReceiver {$/;"	c	namespace:__anon913036200111	file:
+SocketSender	common/frontend/socket_vsock_proxy/main.cpp	/^  explicit SocketSender(cuttlefish::SharedFD socket) : socket_{socket} {}$/;"	f	class:__anon913036200111::SocketSender	file:
+SocketSender	common/frontend/socket_vsock_proxy/main.cpp	/^class SocketSender {$/;"	c	namespace:__anon913036200111	file:
+SocketToVsock	common/frontend/socket_vsock_proxy/main.cpp	/^void SocketToVsock(SocketReceiver socket_receiver,$/;"	f	namespace:__anon913036200111	typeref:typename:void
+SocketVsockProxy	host/libs/config/adb/launch.cpp	/^class SocketVsockProxy : public CommandSource {$/;"	c	namespace:cuttlefish::__anon7ea6a0320111	file:
+SocketVsockProxyBinary	host/libs/config/known_paths.cpp	/^std::string SocketVsockProxyBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+SocketWakeType	guest/hals/ril/reference-libril/ril_ex.h	/^enum SocketWakeType {DONT_WAKE, WAKE_PARTIAL};$/;"	g
+SoftGateKeeper	host/commands/secure_env/soft_gatekeeper.h	/^    SoftGateKeeper() {$/;"	f	class:gatekeeper::SoftGateKeeper
+SoftGateKeeper	host/commands/secure_env/soft_gatekeeper.h	/^class SoftGateKeeper : public GateKeeper {$/;"	c	namespace:gatekeeper
+SourceEnumToString	host/libs/config/fetcher_config.cpp	/^std::string SourceEnumToString(const FileSource& source) {$/;"	f	namespace:cuttlefish::__anonf7286d770111	typeref:typename:std::string
+SourceStringToEnum	host/libs/config/fetcher_config.cpp	/^FileSource SourceStringToEnum(std::string source) {$/;"	f	namespace:cuttlefish::__anonf7286d770111	typeref:typename:FileSource
+SparseFileSizes	common/libs/utils/files.cpp	/^FileSizes SparseFileSizes(const std::string& path) {$/;"	f	namespace:cuttlefish	typeref:typename:FileSizes
+SpeakerIsInitialized	host/frontend/webrtc/lib/audio_device.cpp	/^bool CfAudioDeviceModule::SpeakerIsInitialized() const { return false; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+SpeakerMute	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SpeakerMute(bool* enabled) const { return -1; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SpeakerMuteIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SpeakerMuteIsAvailable(bool* available) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SpeakerVolume	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SpeakerVolume(uint32_t* volume) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SpeakerVolumeIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::SpeakerVolumeIsAvailable(bool* available) {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+SplitByLines	common/libs/utils/tee_logging.cpp	/^static void SplitByLines(const char* msg, const F& log_function, Args&&... args) {$/;"	f	namespace:cuttlefish	typeref:typename:void	file:
+SplitEnforcedProperties	host/commands/secure_env/tpm_key_blob_maker.cpp	/^static keymaster_error_t SplitEnforcedProperties($/;"	f	namespace:cuttlefish	typeref:typename:keymaster_error_t	file:
+SplitString	host/frontend/webrtc_operator/utils.cpp	/^std::vector<std::string> SplitString($/;"	f	typeref:typename:std::vector<std::string>
+SplitString	host/frontend/webrtc_operator/utils.cpp	/^std::vector<std::string> SplitString(const std::string &s, char c) {$/;"	f	typeref:typename:std::vector<std::string>
+Start	common/libs/utils/subprocess.cpp	/^Subprocess Command::Start(SubprocessOptions options) const {$/;"	f	class:cuttlefish::Command	typeref:typename:Subprocess
+Start	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::Start() {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+Start	host/frontend/webrtc/lib/ws_connection.cpp	/^void WsConnectionContextImpl::Start() {$/;"	f	class:WsConnectionContextImpl	typeref:typename:void
+Start	host/libs/confui/host_server.cc	/^void HostServer::Start() {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:void
+StartAndMonitorProcesses	host/commands/run_cvd/process_monitor.cc	/^bool ProcessMonitor::StartAndMonitorProcesses() {$/;"	f	class:cuttlefish::ProcessMonitor	typeref:typename:bool
+StartAssembler	host/commands/start/main.cc	/^cuttlefish::Subprocess StartAssembler(cuttlefish::SharedFD assembler_stdin,$/;"	f	namespace:__anon8e1e78490111	typeref:typename:cuttlefish::Subprocess
+StartCommands	host/libs/vm_manager/crosvm_manager.cpp	/^std::vector<Command> CrosvmManager::StartCommands($/;"	f	class:cuttlefish::vm_manager::CrosvmManager	typeref:typename:std::vector<Command>
+StartCommands	host/libs/vm_manager/qemu_manager.cpp	/^std::vector<Command> QemuManager::StartCommands($/;"	f	class:cuttlefish::vm_manager::QemuManager	typeref:typename:std::vector<Command>
+StartDnsmasq	host/libs/allocd/alloc_utils.cpp	/^bool StartDnsmasq(const std::string& bridge_name, const std::string& gateway,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+StartKernelEventMonitor	host/commands/secure_env/secure_env.cpp	/^std::thread StartKernelEventMonitor(SharedFD kernel_events_fd) {$/;"	f	namespace:cuttlefish::__anon0a6d9b510111	typeref:typename:std::thread
+StartPlayout	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::StartPlayout() {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+StartReadGnssRawMeasurementFileThread	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    void StartReadGnssRawMeasurementFileThread() {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:void	file:
+StartReadLoop	host/frontend/webrtc/lib/camera_streamer.cpp	/^void CameraStreamer::StartReadLoop() {$/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:void
+StartReadNmeaFileThread	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    void StartReadNmeaFileThread() {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:void	file:
+StartRecording	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::StartRecording() {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+StartRunner	host/commands/start/main.cc	/^cuttlefish::Subprocess StartRunner(cuttlefish::SharedFD runner_stdin,$/;"	f	namespace:__anon8e1e78490111	typeref:typename:cuttlefish::Subprocess
+StartServer	host/commands/console_forwarder/main.cpp	/^  [[noreturn]] void StartServer() {$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:void	file:
+StartServer	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    void StartServer() {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:void	file:
+StartStream	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::StartStream(StreamControlCommand& cmd) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+Started	common/libs/utils/subprocess.h	/^  bool Started() const { return started_; }$/;"	f	class:cuttlefish::Subprocess	typeref:typename:bool
+Starting	guest/hals/confirmationui/guest_session.h	/^        Starting = 1,$/;"	e	enum:android::hardware::confirmationui::V1_0::implementation::GuestSession::ListenerState
+StartsWith	host/frontend/webrtc_operator/utils.cpp	/^bool StartsWith(const std::string &s, const std::string &prefix) {$/;"	f	typeref:typename:bool
+State	host/frontend/webrtc/lib/client_handler.h	/^  enum class State {$/;"	g	class:cuttlefish::webrtc_streaming::ClientHandler
+State	host/libs/wayland/wayland_surface.h	/^  struct State {$/;"	s	class:wayland::Surface
+StaticResource	host/libs/allocd/resource.h	/^  StaticResource(const std::string& name, uid_t uid, ResourceType ty,$/;"	f	class:cuttlefish::StaticResource
+StaticResource	host/libs/allocd/resource.h	/^class StaticResource {$/;"	c	namespace:cuttlefish
+Status	host/libs/audio_connector/buffers.h	/^enum class Status : uint32_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint32_t
+Status	host/libs/config/feature.h	/^  enum class Status { UNVISITED, VISITING, VISITED };$/;"	g	function:cuttlefish::FeatureSuperclass::TopologicalVisit
+StatusIsTerminal	host/commands/fetcher/build_api.cc	/^bool StatusIsTerminal(const std::string& status) {$/;"	f	namespace:cuttlefish::__anon948178400111	typeref:typename:bool
+StatusToStr	host/libs/allocd/utils.cpp	/^std::string StatusToStr(RequestStatus st) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+StdIOChannel	common/libs/utils/subprocess.h	/^  enum class StdIOChannel {$/;"	g	class:cuttlefish::Subprocess
+StderrOutputGenerator	common/libs/utils/tee_logging.cpp	/^static std::string StderrOutputGenerator(const struct tm& now, int pid, uint64_t tid,$/;"	f	namespace:cuttlefish	typeref:typename:std::string	file:
+StereoPlayout	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::StereoPlayout(bool* enabled) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+StereoPlayoutIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::StereoPlayoutIsAvailable(bool* available) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+StereoRecording	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::StereoRecording(bool* enabled) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+StereoRecordingIsAvailable	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::StereoRecordingIsAvailable(bool* available) const {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+StkCmdType	guest/hals/ril/reference-ril/reference-ril.c	/^} StkCmdType;$/;"	t	typeref:enum:__anon70d7df6f0503	file:
+StkService	host/commands/modem_simulator/stk_service.cpp	/^StkService::StkService(int32_t service_id, ChannelMonitor* channel_monitor,$/;"	f	class:cuttlefish::StkService
+StkService	host/commands/modem_simulator/stk_service.h	/^class StkService : public ModemService, public std::enable_shared_from_this<StkService> {$/;"	c	namespace:cuttlefish
+StkUnsolEvent	guest/hals/ril/reference-ril/reference-ril.c	/^} StkUnsolEvent;$/;"	t	typeref:enum:__anon70d7df6f0403	file:
+Stop	common/libs/utils/subprocess.h	/^  StopperResult Stop() { return stopper_(this); }$/;"	f	class:cuttlefish::Subprocess	typeref:typename:StopperResult
+Stop	host/commands/modem_simulator/thread_looper.cpp	/^void ThreadLooper::Stop() {$/;"	f	class:cuttlefish::ThreadLooper	typeref:typename:void
+Stop	host/frontend/webrtc/lib/local_recorder.cpp	/^void LocalRecorder::Display::Stop() {$/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:void
+Stop	host/frontend/webrtc/lib/local_recorder.cpp	/^void LocalRecorder::Stop() {$/;"	f	class:cuttlefish::webrtc_streaming::LocalRecorder	typeref:typename:void
+Stop	host/libs/vm_manager/qemu_manager.cpp	/^bool Stop() {$/;"	f	namespace:cuttlefish::vm_manager::__anonb2b4da3a0111	typeref:typename:bool
+StopCvdMain	host/commands/stop/main.cc	/^int StopCvdMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish::__anon65a808010111	typeref:typename:int
+StopDnsmasq	host/libs/allocd/alloc_utils.cpp	/^bool StopDnsmasq(const std::string& name) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+StopInstance	host/commands/stop/main.cc	/^int StopInstance(const CuttlefishConfig& config,$/;"	f	namespace:cuttlefish::__anon65a808010111	typeref:typename:int
+StopModemSimulator	host/commands/run_cvd/launch_modem.cpp	/^static bool StopModemSimulator(int id) {$/;"	f	namespace:cuttlefish	typeref:typename:bool	file:
+StopMonitoredProcesses	host/commands/run_cvd/process_monitor.cc	/^bool ProcessMonitor::StopMonitoredProcesses() {$/;"	f	class:cuttlefish::ProcessMonitor	typeref:typename:bool
+StopPlayout	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::StopPlayout() {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+StopRecording	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::StopRecording() {$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+StopSession	host/libs/allocd/request.h	/^  StopSession,       \/\/ Request all resources within a session be released$/;"	e	enum:cuttlefish::RequestType
+StopStream	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::StopStream(StreamControlCommand& cmd) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+StopperResult	common/libs/utils/subprocess.h	/^enum class StopperResult {$/;"	g	namespace:cuttlefish
+Storage	guest/hals/health/storage/Storage.h	/^class Storage : public BnStorage {$/;"	c	namespace:aidl::android::hardware::health::storage
+StrError	common/libs/fs/shared_fd.cpp	/^std::string FileInstance::StrError() const {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:std::string
+StrForInstance	host/commands/assemble_cvd/alloc.cc	/^static std::string StrForInstance(const std::string& prefix, int num) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string	file:
+StrForInstance	host/commands/assemble_cvd/flags.cc	/^std::string StrForInstance(const std::string& prefix, int num) {$/;"	f	namespace:cuttlefish::__anon145bfaab0111	typeref:typename:std::string
+StrToIfaceTy	host/libs/allocd/utils.cpp	/^IfaceType StrToIfaceTy(const std::string& iface) {$/;"	f	namespace:cuttlefish	typeref:typename:IfaceType
+StrToIfaceTyMap	host/libs/allocd/utils.cpp	/^const std::map<std::string, IfaceType> StrToIfaceTyMap = {$/;"	v	namespace:cuttlefish	typeref:typename:const std::map<std::string,IfaceType>
+StrToReqStatusMap	host/libs/allocd/utils.cpp	/^const std::map<std::string, RequestStatus> StrToReqStatusMap = {$/;"	v	namespace:cuttlefish	typeref:typename:const std::map<std::string,RequestStatus>
+StrToReqTy	host/libs/allocd/utils.cpp	/^RequestType StrToReqTy(const std::string& req) {$/;"	f	namespace:cuttlefish	typeref:typename:RequestType
+StrToRequestTyMap	host/libs/allocd/utils.cpp	/^const std::map<std::string, RequestType> StrToRequestTyMap = {$/;"	v	namespace:cuttlefish	typeref:typename:const std::map<std::string,RequestType>
+StrToStatus	host/libs/allocd/utils.cpp	/^RequestStatus StrToStatus(const std::string& st) {$/;"	f	namespace:cuttlefish	typeref:typename:RequestStatus
+StreamBufferCache	guest/hals/camera/stream_buffer_cache.h	/^class StreamBufferCache {$/;"	c	namespace:android::hardware::camera::device::V3_4::implementation
+StreamControlCommand	host/libs/audio_connector/commands.cpp	/^StreamControlCommand::StreamControlCommand(AudioCommandType type,$/;"	f	class:cuttlefish::StreamControlCommand
+StreamControlCommand	host/libs/audio_connector/commands.h	/^struct StreamControlCommand : public AudioCommand {$/;"	s	namespace:cuttlefish
+StreamDesc	host/frontend/webrtc/audio_handler.h	/^  struct StreamDesc {$/;"	s	class:cuttlefish::AudioHandler
+StreamInfoCommand	host/libs/audio_connector/commands.cpp	/^StreamInfoCommand::StreamInfoCommand(uint32_t start_id, size_t count,$/;"	f	class:cuttlefish::StreamInfoCommand
+StreamInfoCommand	host/libs/audio_connector/commands.h	/^class StreamInfoCommand : public InfoCommand<virtio_snd_pcm_info> {$/;"	c	namespace:cuttlefish
+StreamSetParamsCommand	host/libs/audio_connector/commands.cpp	/^StreamSetParamsCommand::StreamSetParamsCommand($/;"	f	class:cuttlefish::StreamSetParamsCommand
+StreamSetParamsCommand	host/libs/audio_connector/commands.h	/^struct StreamSetParamsCommand : public StreamControlCommand {$/;"	s	namespace:cuttlefish
+Streamer	host/frontend/webrtc/lib/streamer.cpp	/^Streamer::Streamer(std::unique_ptr<Streamer::Impl> impl)$/;"	f	class:cuttlefish::webrtc_streaming::Streamer
+Streamer	host/frontend/webrtc/lib/streamer.h	/^class Streamer {$/;"	c	namespace:cuttlefish::webrtc_streaming
+StreamerConfig	host/frontend/webrtc/lib/streamer.h	/^struct StreamerConfig {$/;"	s	namespace:cuttlefish::webrtc_streaming
+StreamerSockets	host/commands/run_cvd/launch_streamer.cpp	/^class StreamerSockets : public virtual Feature {$/;"	c	namespace:cuttlefish::__anon6b0274e10111	file:
+StreamsInfo	host/frontend/webrtc/audio_handler.cpp	/^void AudioHandler::StreamsInfo(StreamInfoCommand& cmd) {$/;"	f	class:cuttlefish::AudioHandler	typeref:typename:void
+StrideU	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^int CvdVideoFrameBuffer::StrideU() const {$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:int
+StrideU	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  int StrideU() const override { return frame_buffer_->StrideU(); }$/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:int	file:
+StrideV	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^int CvdVideoFrameBuffer::StrideV() const {$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:int
+StrideV	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  int StrideV() const override { return frame_buffer_->StrideV(); }$/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:int	file:
+StrideY	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^int CvdVideoFrameBuffer::StrideY() const { return AlignStride(width_); }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:int
+StrideY	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  int StrideY() const override { return frame_buffer_->StrideY(); }$/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:int	file:
+StringFromEnv	common/libs/utils/environment.cpp	/^std::string StringFromEnv(const std::string& varname,$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+StringPrintf	host/frontend/webrtc_operator/utils.cpp	/^std::string StringPrintf(const char *format, ...) {$/;"	f	typeref:typename:std::string
+StringToAdbMode	host/libs/config/adb/strings.cpp	/^AdbMode StringToAdbMode(const std::string& mode_cased) {$/;"	f	namespace:cuttlefish	typeref:typename:AdbMode
+StringToSecureHal	host/libs/config/cuttlefish_config.cpp	/^static SecureHal StringToSecureHal(std::string mode) {$/;"	f	namespace:cuttlefish	typeref:typename:SecureHal	file:
+StripColorCodes	common/libs/utils/tee_logging.cpp	/^static std::string StripColorCodes(const std::string& str) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string	file:
+Subprocess	common/libs/utils/subprocess.cpp	/^Subprocess::Subprocess(Subprocess&& subprocess)$/;"	f	class:cuttlefish::Subprocess
+Subprocess	common/libs/utils/subprocess.h	/^  Subprocess(pid_t pid, SubprocessStopper stopper = KillSubprocess)$/;"	f	class:cuttlefish::Subprocess
+Subprocess	common/libs/utils/subprocess.h	/^class Subprocess {$/;"	c	namespace:cuttlefish
+Subprocess	host/commands/start/flag_forwarder.cc	/^  const std::string& Subprocess() const { return subprocess_; }$/;"	f	class:SubprocessFlag	typeref:typename:const std::string &	file:
+SubprocessFlag	host/commands/start/flag_forwarder.cc	/^  SubprocessFlag(const std::string& subprocess, const std::string& name)$/;"	f	class:SubprocessFlag	file:
+SubprocessFlag	host/commands/start/flag_forwarder.cc	/^class SubprocessFlag {$/;"	c	file:
+SubprocessOptions	common/libs/utils/subprocess.h	/^  SubprocessOptions() : verbose_(true), exit_with_parent_(true) {}$/;"	f	class:cuttlefish::SubprocessOptions
+SubprocessOptions	common/libs/utils/subprocess.h	/^class SubprocessOptions {$/;"	c	namespace:cuttlefish
+SubprocessStopper	common/libs/utils/subprocess.h	/^using SubprocessStopper = std::function<StopperResult(Subprocess*)>;$/;"	t	namespace:cuttlefish
+SubscribeToEvents	host/commands/kernel_log_monitor/kernel_log_server.cc	/^void KernelLogServer::SubscribeToEvents(monitor::EventCallback callback) {$/;"	f	class:monitor::KernelLogServer	typeref:typename:void
+SubscribersFromCmdline	host/commands/kernel_log_monitor/main.cc	/^std::vector<cuttlefish::SharedFD> SubscribersFromCmdline() {$/;"	f	typeref:typename:std::vector<cuttlefish::SharedFD>
+SubscriptionAction	host/commands/kernel_log_monitor/kernel_log_server.h	/^enum class SubscriptionAction {$/;"	g	namespace:monitor
+Success	host/libs/allocd/request.h	/^  Success,      \/\/ Request was satisfied$/;"	e	enum:cuttlefish::RequestStatus
+SupService	host/commands/modem_simulator/sup_service.cpp	/^SupService::SupService(int32_t service_id, ChannelMonitor* channel_monitor,$/;"	f	class:cuttlefish::SupService
+SupService	host/commands/modem_simulator/sup_service.h	/^class SupService : public ModemService, public std::enable_shared_from_this<SupService> {$/;"	c	namespace:cuttlefish
+SuperImageNeedsRebuilding	host/commands/assemble_cvd/super_image_mixer.cc	/^bool SuperImageNeedsRebuilding(const FetcherConfig& fetcher_config,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+SuperPartitionComponents	host/commands/assemble_cvd/misc_info.cc	/^std::vector<std::string> SuperPartitionComponents(const MiscInfo& info) {$/;"	f	namespace:cuttlefish	typeref:typename:std::vector<std::string>
+SupportedAlgorithms	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedAlgorithms(const SupportedAlgorithmsRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedAlgorithms	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedAlgorithms($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedBlockModes	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedBlockModes(const SupportedBlockModesRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedBlockModes	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedBlockModes($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedDigests	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedDigests(const SupportedDigestsRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedDigests	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedDigests(const SupportedDigestsRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedExportFormats	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedExportFormats(const SupportedExportFormatsRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedExportFormats	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedExportFormats($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedImportFormats	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedImportFormats(const SupportedImportFormatsRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedImportFormats	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedImportFormats($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedPaddingModes	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedPaddingModes(const SupportedPaddingModesRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportedPaddingModes	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::SupportedPaddingModes($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+SupportsEncodedOutput	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^bool VideoTrackSourceImpl::SupportsEncodedOutput() const { return false; }$/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:bool
+Surface	host/libs/wayland/wayland_surface.cpp	/^Surface::Surface(Surfaces& surfaces) : surfaces_(surfaces) {}$/;"	f	class:wayland::Surface
+Surface	host/libs/wayland/wayland_surface.h	/^class Surface {$/;"	c	namespace:wayland
+Surfaces	host/libs/wayland/wayland_surfaces.h	/^class Surfaces {$/;"	c	namespace:wayland
+SysVMessageQueue	host/libs/msg_queue/msg_queue.cc	/^SysVMessageQueue::SysVMessageQueue(int id) { msgid = id; }$/;"	f	class:cuttlefish::SysVMessageQueue
+SysVMessageQueue	host/libs/msg_queue/msg_queue.h	/^class SysVMessageQueue {$/;"	c	namespace:cuttlefish
+SystemImageDirFlag	host/libs/config/config_flag.h	/^class SystemImageDirFlag : public FlagFeature {$/;"	c	namespace:cuttlefish
+SystemImageDirFlagImpl	host/libs/config/config_flag.cpp	/^class SystemImageDirFlagImpl : public SystemImageDirFlag {$/;"	c	namespace:cuttlefish::__anon2e549bd00111	file:
+TAG	host/libs/confui/cbor.h	/^    TAG = 6,$/;"	e	enum:cuttlefish::confui::Cbor::Type
+TAG	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    private static final String TAG = "RilE2eTests";$/;"	f	class:RilE2eTests	file:
+TAG	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    private static final String TAG = "WifiE2eTests";$/;"	f	class:WifiE2eTests	file:
+TARGET_2ND_ARCH	vsoc_arm64/BoardConfig.mk	/^TARGET_2ND_ARCH := arm$/;"	m
+TARGET_2ND_ARCH	vsoc_x86_64/BoardConfig.mk	/^TARGET_2ND_ARCH := x86$/;"	m
+TARGET_2ND_ARCH_VARIANT	vsoc_arm64/BoardConfig.mk	/^TARGET_2ND_ARCH_VARIANT := armv8-a$/;"	m
+TARGET_2ND_ARCH_VARIANT	vsoc_x86_64/BoardConfig.mk	/^TARGET_2ND_ARCH_VARIANT := silvermont$/;"	m
+TARGET_2ND_CPU_ABI	vsoc_arm64/BoardConfig.mk	/^TARGET_2ND_CPU_ABI := armeabi-v7a$/;"	m
+TARGET_2ND_CPU_ABI	vsoc_x86_64/BoardConfig.mk	/^TARGET_2ND_CPU_ABI := x86$/;"	m
+TARGET_2ND_CPU_ABI2	vsoc_arm64/BoardConfig.mk	/^TARGET_2ND_CPU_ABI2 := armeabi$/;"	m
+TARGET_2ND_CPU_VARIANT	vsoc_arm64/BoardConfig.mk	/^TARGET_2ND_CPU_VARIANT := cortex-a53$/;"	m
+TARGET_2ND_CPU_VARIANT	vsoc_x86_64/BoardConfig.mk	/^TARGET_2ND_CPU_VARIANT := silvermont$/;"	m
+TARGET_ARCH	vsoc_arm64/BoardConfig.mk	/^TARGET_ARCH := arm64$/;"	m
+TARGET_ARCH	vsoc_arm64_only/BoardConfig.mk	/^TARGET_ARCH := arm64$/;"	m
+TARGET_ARCH	vsoc_arm_only/BoardConfig.mk	/^TARGET_ARCH := arm$/;"	m
+TARGET_ARCH	vsoc_x86/BoardConfig.mk	/^TARGET_ARCH := x86$/;"	m
+TARGET_ARCH	vsoc_x86_64/BoardConfig.mk	/^TARGET_ARCH := x86_64$/;"	m
+TARGET_ARCH	vsoc_x86_64_only/BoardConfig.mk	/^TARGET_ARCH := x86_64$/;"	m
+TARGET_ARCH	vsoc_x86_only/BoardConfig.mk	/^TARGET_ARCH := x86$/;"	m
+TARGET_ARCH_VARIANT	vsoc_arm64/BoardConfig.mk	/^TARGET_ARCH_VARIANT := armv8-a$/;"	m
+TARGET_ARCH_VARIANT	vsoc_arm64_only/BoardConfig.mk	/^TARGET_ARCH_VARIANT := armv8-a$/;"	m
+TARGET_ARCH_VARIANT	vsoc_arm_only/BoardConfig.mk	/^TARGET_ARCH_VARIANT := armv7-a-neon$/;"	m
+TARGET_ARCH_VARIANT	vsoc_x86/BoardConfig.mk	/^TARGET_ARCH_VARIANT := x86$/;"	m
+TARGET_ARCH_VARIANT	vsoc_x86_64/BoardConfig.mk	/^TARGET_ARCH_VARIANT := silvermont$/;"	m
+TARGET_ARCH_VARIANT	vsoc_x86_64_only/BoardConfig.mk	/^TARGET_ARCH_VARIANT := silvermont$/;"	m
+TARGET_ARCH_VARIANT	vsoc_x86_only/BoardConfig.mk	/^TARGET_ARCH_VARIANT := x86$/;"	m
+TARGET_AVB_PRODUCT_HASHTREE_ALGORITHM	shared/BoardConfig.mk	/^TARGET_AVB_PRODUCT_HASHTREE_ALGORITHM ?= sha256$/;"	m
+TARGET_AVB_SYSTEM_EXT_HASHTREE_ALGORITHM	shared/BoardConfig.mk	/^TARGET_AVB_SYSTEM_EXT_HASHTREE_ALGORITHM ?= blake2b-256$/;"	m
+TARGET_AVB_SYSTEM_HASHTREE_ALGORITHM	shared/BoardConfig.mk	/^TARGET_AVB_SYSTEM_HASHTREE_ALGORITHM ?= sha256$/;"	m
+TARGET_AVB_SYSTEM_OTHER_HASHTREE_ALGORITHM	shared/BoardConfig.mk	/^TARGET_AVB_SYSTEM_OTHER_HASHTREE_ALGORITHM ?= sha256$/;"	m
+TARGET_BOARD_INFO_FILE	shared/auto/device.mk	/^TARGET_BOARD_INFO_FILE ?= device\/google\/cuttlefish\/shared\/auto\/android-info.txt$/;"	m
+TARGET_BOARD_INFO_FILE	shared/phone/device_vendor.mk	/^TARGET_BOARD_INFO_FILE ?= device\/google\/cuttlefish\/shared\/phone\/android-info.txt$/;"	m
+TARGET_BOARD_INFO_FILE	shared/tv/device.mk	/^TARGET_BOARD_INFO_FILE ?= device\/google\/cuttlefish\/shared\/tv\/android-info.txt$/;"	m
+TARGET_BOARD_INFO_FILE	vsoc_x86_64/phone/aosp_cf_foldable.mk	/^TARGET_BOARD_INFO_FILE := device\/google\/cuttlefish\/shared\/foldable\/android-info.txt$/;"	m
+TARGET_BOARD_PLATFORM	vsoc_arm64/BoardConfig.mk	/^TARGET_BOARD_PLATFORM := vsoc_arm64$/;"	m
+TARGET_BOARD_PLATFORM	vsoc_arm64_only/BoardConfig.mk	/^TARGET_BOARD_PLATFORM := vsoc_arm64$/;"	m
+TARGET_BOARD_PLATFORM	vsoc_arm_only/BoardConfig.mk	/^TARGET_BOARD_PLATFORM := vsoc_arm$/;"	m
+TARGET_BOARD_PLATFORM	vsoc_x86/BoardConfig.mk	/^TARGET_BOARD_PLATFORM := vsoc_x86$/;"	m
+TARGET_BOARD_PLATFORM	vsoc_x86_64/BoardConfig.mk	/^TARGET_BOARD_PLATFORM := vsoc_x86_64$/;"	m
+TARGET_BOARD_PLATFORM	vsoc_x86_64_only/BoardConfig.mk	/^TARGET_BOARD_PLATFORM := vsoc_x86_64$/;"	m
+TARGET_BOARD_PLATFORM	vsoc_x86_only/BoardConfig.mk	/^TARGET_BOARD_PLATFORM := vsoc_x86$/;"	m
+TARGET_BOOTLOADER_BOARD_NAME	shared/BoardConfig.mk	/^TARGET_BOOTLOADER_BOARD_NAME := cutf$/;"	m
+TARGET_COPY_OUT_ODM	shared/BoardConfig.mk	/^TARGET_COPY_OUT_ODM := odm$/;"	m
+TARGET_COPY_OUT_ODM_DLKM	shared/BoardConfig.mk	/^TARGET_COPY_OUT_ODM_DLKM := odm_dlkm$/;"	m
+TARGET_COPY_OUT_SYSTEM_EXT	shared/BoardConfig.mk	/^TARGET_COPY_OUT_SYSTEM_EXT := system_ext$/;"	m
+TARGET_COPY_OUT_VENDOR_DLKM	shared/BoardConfig.mk	/^TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm$/;"	m
+TARGET_CPU_ABI	vsoc_arm64/BoardConfig.mk	/^TARGET_CPU_ABI := arm64-v8a$/;"	m
+TARGET_CPU_ABI	vsoc_arm64_only/BoardConfig.mk	/^TARGET_CPU_ABI := arm64-v8a$/;"	m
+TARGET_CPU_ABI	vsoc_arm_only/BoardConfig.mk	/^TARGET_CPU_ABI := armeabi-v7a$/;"	m
+TARGET_CPU_ABI	vsoc_x86/BoardConfig.mk	/^TARGET_CPU_ABI := x86$/;"	m
+TARGET_CPU_ABI	vsoc_x86_64/BoardConfig.mk	/^TARGET_CPU_ABI := x86_64$/;"	m
+TARGET_CPU_ABI	vsoc_x86_64_only/BoardConfig.mk	/^TARGET_CPU_ABI := x86_64$/;"	m
+TARGET_CPU_ABI	vsoc_x86_only/BoardConfig.mk	/^TARGET_CPU_ABI := x86$/;"	m
+TARGET_CPU_ABI2	vsoc_arm_only/BoardConfig.mk	/^TARGET_CPU_ABI2 := armeabi$/;"	m
+TARGET_CPU_VARIANT	vsoc_arm64/BoardConfig.mk	/^TARGET_CPU_VARIANT := cortex-a53$/;"	m
+TARGET_CPU_VARIANT	vsoc_arm64_only/BoardConfig.mk	/^TARGET_CPU_VARIANT := cortex-a53$/;"	m
+TARGET_CPU_VARIANT	vsoc_arm_only/BoardConfig.mk	/^TARGET_CPU_VARIANT := cortex-a15$/;"	m
+TARGET_ENABLE_HOST_BLUETOOTH_EMULATION	shared/device.mk	/^TARGET_ENABLE_HOST_BLUETOOTH_EMULATION ?= true$/;"	m
+TARGET_FLATTEN_APEX	vsoc_x86_noapex/BoardConfig.mk	/^TARGET_FLATTEN_APEX := true$/;"	m
+TARGET_KERNEL_USE	vsoc_arm64/kernel.mk	/^TARGET_KERNEL_USE ?= 5.10$/;"	m
+TARGET_KERNEL_USE	vsoc_arm_only/kernel.mk	/^TARGET_KERNEL_USE ?= mainline$/;"	m
+TARGET_KERNEL_USE	vsoc_x86_64/kernel.mk	/^TARGET_KERNEL_USE ?= 5.10$/;"	m
+TARGET_KERNEL_USE	vsoc_x86_only/kernel.mk	/^TARGET_KERNEL_USE ?= 5.10$/;"	m
+TARGET_NATIVE_BRIDGE_2ND_ABI	vsoc_x86_64/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_2ND_ABI := armeabi-v7a armeabi$/;"	m
+TARGET_NATIVE_BRIDGE_2ND_ARCH	vsoc_x86_64/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_2ND_ARCH := arm$/;"	m
+TARGET_NATIVE_BRIDGE_2ND_ARCH_VARIANT	vsoc_x86_64/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_2ND_ARCH_VARIANT := armv7-a-neon$/;"	m
+TARGET_NATIVE_BRIDGE_2ND_CPU_VARIANT	vsoc_x86_64/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_2ND_CPU_VARIANT := generic$/;"	m
+TARGET_NATIVE_BRIDGE_ABI	vsoc_x86/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ABI := armeabi-v7a armeabi$/;"	m
+TARGET_NATIVE_BRIDGE_ABI	vsoc_x86_64/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ABI := arm64-v8a$/;"	m
+TARGET_NATIVE_BRIDGE_ABI	vsoc_x86_64_only/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ABI := arm64-v8a$/;"	m
+TARGET_NATIVE_BRIDGE_ARCH	vsoc_x86/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ARCH := arm$/;"	m
+TARGET_NATIVE_BRIDGE_ARCH	vsoc_x86_64/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ARCH := arm64$/;"	m
+TARGET_NATIVE_BRIDGE_ARCH	vsoc_x86_64_only/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ARCH := arm64$/;"	m
+TARGET_NATIVE_BRIDGE_ARCH_VARIANT	vsoc_x86/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ARCH_VARIANT := armv7-a-neon$/;"	m
+TARGET_NATIVE_BRIDGE_ARCH_VARIANT	vsoc_x86_64/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ARCH_VARIANT := armv8-a$/;"	m
+TARGET_NATIVE_BRIDGE_ARCH_VARIANT	vsoc_x86_64_only/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_ARCH_VARIANT := armv8-a$/;"	m
+TARGET_NATIVE_BRIDGE_CPU_VARIANT	vsoc_x86/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_CPU_VARIANT := generic$/;"	m
+TARGET_NATIVE_BRIDGE_CPU_VARIANT	vsoc_x86_64/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_CPU_VARIANT := generic$/;"	m
+TARGET_NATIVE_BRIDGE_CPU_VARIANT	vsoc_x86_64_only/BoardConfig.mk	/^TARGET_NATIVE_BRIDGE_CPU_VARIANT := generic$/;"	m
+TARGET_NO_BOOTLOADER	shared/BoardConfig.mk	/^TARGET_NO_BOOTLOADER := $(__TARGET_NO_BOOTLOADER)$/;"	m
+TARGET_NO_BOOTLOADER	vsoc_arm64/bootloader.mk	/^TARGET_NO_BOOTLOADER := false$/;"	m
+TARGET_NO_BOOTLOADER	vsoc_arm_only/bootloader.mk	/^TARGET_NO_BOOTLOADER := false$/;"	m
+TARGET_NO_BOOTLOADER	vsoc_x86_64/bootloader.mk	/^TARGET_NO_BOOTLOADER := false$/;"	m
+TARGET_NO_TELEPHONY	shared/auto/device.mk	/^TARGET_NO_TELEPHONY := true$/;"	m
+TARGET_RECOVERY_FSTAB	shared/BoardConfig.mk	/^TARGET_RECOVERY_FSTAB ?= device\/google\/cuttlefish\/shared\/config\/fstab.f2fs$/;"	m
+TARGET_RECOVERY_PIXEL_FORMAT	shared/BoardConfig.mk	/^TARGET_RECOVERY_PIXEL_FORMAT := ABGR_8888$/;"	m
+TARGET_RECOVERY_UI_LIB	shared/BoardConfig.mk	/^TARGET_RECOVERY_UI_LIB := librecovery_ui_cuttlefish$/;"	m
+TARGET_RELEASETOOLS_EXTENSIONS	shared/BoardConfig.mk	/^TARGET_RELEASETOOLS_EXTENSIONS := device\/google\/cuttlefish\/shared$/;"	m
+TARGET_RO_FILE_SYSTEM_TYPE	shared/device.mk	/^TARGET_RO_FILE_SYSTEM_TYPE ?= ext4$/;"	m
+TARGET_TRANSLATE_2ND_ARCH	vsoc_arm64/BoardConfig.mk	/^TARGET_TRANSLATE_2ND_ARCH := false$/;"	m
+TARGET_USERDATAIMAGE_FILE_SYSTEM_TYPE	shared/device.mk	/^TARGET_USERDATAIMAGE_FILE_SYSTEM_TYPE ?= f2fs$/;"	m
+TARGET_USERDATAIMAGE_PARTITION_SIZE	shared/device.mk	/^TARGET_USERDATAIMAGE_PARTITION_SIZE ?= 6442450944$/;"	m
+TARGET_USERIMAGES_SPARSE_EROFS_DISABLED	shared/BoardConfig.mk	/^TARGET_USERIMAGES_SPARSE_EROFS_DISABLED := true$/;"	m
+TARGET_USERIMAGES_SPARSE_EXT_DISABLED	shared/BoardConfig.mk	/^TARGET_USERIMAGES_SPARSE_EXT_DISABLED := true$/;"	m
+TARGET_USERIMAGES_SPARSE_F2FS_DISABLED	shared/BoardConfig.mk	/^TARGET_USERIMAGES_SPARSE_F2FS_DISABLED := true$/;"	m
+TARGET_USERIMAGES_USE_F2FS	shared/BoardConfig.mk	/^TARGET_USERIMAGES_USE_F2FS := true$/;"	m
+TARGET_USES_CF_RILD	shared/auto/device.mk	/^TARGET_USES_CF_RILD ?= true$/;"	m
+TARGET_USES_CF_RILD	shared/phone/device.mk	/^TARGET_USES_CF_RILD ?= true$/;"	m
+TARGET_USES_CF_RILD	shared/phone/device_vendor.mk	/^TARGET_USES_CF_RILD ?= true$/;"	m
+TARGET_USES_HWC2	shared/BoardConfig.mk	/^TARGET_USES_HWC2 := true$/;"	m
+TARGET_USE_BTLINUX_HAL_IMPL	shared/device.mk	/^TARGET_USE_BTLINUX_HAL_IMPL ?= true$/;"	m
+TARGET_VULKAN_SUPPORT	shared/device.mk	/^TARGET_VULKAN_SUPPORT ?= true$/;"	m
+TD_SCDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_TD_SCDMA_SignalStrength TD_SCDMA_SignalStrength;$/;"	m	struct:__anon0bfbaecf5208	typeref:typename:RIL_TD_SCDMA_SignalStrength
+TD_SCDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_TD_SCDMA_SignalStrength TD_SCDMA_SignalStrength;$/;"	m	struct:__anon0bfbaecf5308	typeref:typename:RIL_TD_SCDMA_SignalStrength
+TECH	guest/hals/ril/reference-ril/reference-ril.c	/^#define TECH(/;"	d	file:
+TECH_BIT	guest/hals/ril/reference-ril/reference-ril.c	/^#define TECH_BIT(/;"	d	file:
+TECH_SUPPORTED	guest/hals/ril/reference-ril/reference-ril.c	/^#define TECH_SUPPORTED(/;"	d	file:
+TEST	common/libs/fs/shared_fd_test.cpp	/^TEST(SendFD, Basic) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, AllIntegerTypes) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, BasicIntNode) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, BasicStringNode) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, ComplexList) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, ListSequence) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, NestedList) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, SimpleNetlinkCreateHeader) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, SimpleNetlinkUpdateHeader) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/net/netlink_request_test.cpp	/^TEST(NetlinkClientTest, SingleList) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/security/keymaster_channel_test.cpp	/^TEST(KeymasterChannel, SendAndReceiveRequest) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/security/keymaster_channel_test.cpp	/^TEST(KeymasterChannel, SendAndReceiveResponse) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, BoolFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, BoolFlagXml) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, ConflictingAlias) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, DuplicateAlias) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, FlagRemoval) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, GflagsIncompatibleFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, IntFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, IntFlagXml) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, InvalidFlagGuard) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, InvalidIntFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, InvalidStringFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, RepeatedListFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, RepeatedStringFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, StringFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, StringFlagXml) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, StringIntFlag) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/flag_parser_test.cpp	/^TEST(FlagParser, UnexpectedArgumentGuard) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/unix_sockets_test.cpp	/^TEST(UnixMessageSocket, AutoCredentials) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/unix_sockets_test.cpp	/^TEST(UnixMessageSocket, BadCredentialsBlocked) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/unix_sockets_test.cpp	/^TEST(UnixMessageSocket, SendCredentials) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/unix_sockets_test.cpp	/^TEST(UnixMessageSocket, SendFileDescriptor) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/unix_sockets_test.cpp	/^TEST(UnixMessageSocket, SendPlainMessage) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/unix_sockets_test.cpp	/^TEST(UnixMessageSocket, SendTwoFileDescriptors) {$/;"	f	namespace:cuttlefish
+TEST	common/libs/utils/unix_sockets_test.cpp	/^TEST(UnixSocketMessage, ExtractFileDescriptors) {$/;"	f	namespace:cuttlefish
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, GetNextHexInt) {  \/\/ Hexadecimal string to decimal value$/;"	f
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, GetNextInt) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, GetNextStrDeciToHex) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, GetNextStr_default) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, GetNextStr_withparam) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, SkipComma) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, SkipPrefix) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, SkipPrefixAT) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/command_parser_test.cpp	/^TEST(CommandParserUnitTest, SkipWhiteSpace) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/pdu_parser_test.cpp	/^TEST(PDUParserTest, BCDToString) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/pdu_parser_test.cpp	/^TEST(PDUParserTest, CreatePDU) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/pdu_parser_test.cpp	/^TEST(PDUParserTest, GetPhoneNumberFromAddress) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/pdu_parser_test.cpp	/^TEST(PDUParserTest, IsValidPDU_false) {$/;"	f
+TEST	host/commands/modem_simulator/unittest/pdu_parser_test.cpp	/^TEST(PDUParserTest, IsValidPDU_true) {$/;"	f
+TEST	host/commands/secure_env/encrypted_serializable_test.cpp	/^TEST(TpmEncryptedSerializable, BinaryData) {$/;"	f	namespace:cuttlefish
+TEST	host/libs/config/adb/test.cpp	/^TEST(AdbConfigTest, SerializeDeserialize) {$/;"	f	namespace:cuttlefish
+TEST	host/libs/config/adb/test.cpp	/^TEST(AdbConfigTest, SetFromFlags) {$/;"	f	namespace:cuttlefish
+TEST	tests/hal/hal_implementation_test.cpp	/^TEST(Hal, AidlInterfacesImplemented) {$/;"	f
+TEST	tests/hal/hal_implementation_test.cpp	/^TEST(Hal, AllAidlInterfacesAreInAosp) {$/;"	f
+TEST	tests/hal/hal_implementation_test.cpp	/^TEST(Hal, AllHidlInterfacesAreInAosp) {$/;"	f
+TEST	tests/hal/hal_implementation_test.cpp	/^TEST(Hal, HidlInterfacesImplemented) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, ActivateDataCall) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, ChangeOrEnterPIN) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, CloseLogicalChannel) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, DeleteSmsOnSimFalse) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, DeleteSmsOnSimTure) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, EnterDataState) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, FacilityLock) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, GetBroadcastConfig) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, GetIMEI) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, GetIMSI) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, GetIccCardStatus) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, GetIccId) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, GetSendTerminalResponseToSim) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, GetSmscAddress) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, OpenLogicalChannel) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, QueryDataCallList) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, QueryPDPContextList) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, ReadDynamicParamFalse) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, ReadDynamicParamTrue) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, ReportStkServiceIsRunning) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, SIM_IO) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, SMSAcknowledge) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, SendEnvelope) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, SendSMS) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, SetBroadcastConfig) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, SetPDPContext) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, SetSmscAddress) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, TransmitLogicalChannel) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, WriteSMSToSim) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testCLIP) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testCLIR) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testCallForward) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testCallWaiting) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testCurrentCalls) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testDataNetworkRegistration) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testDataNetworkRegistrationWithLte2) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testExitEmergencyMode) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testGetPreferredNetworkType) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testHangup) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testMute) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testQueryCLIR) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testQueryNetworkSelectionMode) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testQuerySupportedTechs) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testRadioPowerReq) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testRequestOperator) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testSendDtmf) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testSetPreferredNetworkType) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testSetRadioPower) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testSignalStrength) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testUSSD) {$/;"	f
+TEST_F	host/commands/modem_simulator/unittest/service_test.cpp	/^TEST_F(ModemServiceTest, testVoiceNetworkRegistration) {$/;"	f
+TEXT_STRING	host/libs/confui/cbor.h	/^    TEXT_STRING = 3,$/;"	e	enum:cuttlefish::confui::Cbor::Type
+THREAD_ANNOTATION_ATTRIBUTE__	common/libs/concurrency/thread_annotations.h	/^#define THREAD_ANNOTATION_ATTRIBUTE__(/;"	d
+THREAD_POOL_SIZE	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^    private static final int THREAD_POOL_SIZE = 8;$/;"	f	class:JobExecutor	file:
+TIMEVAL_0	guest/hals/ril/reference-ril/reference-ril.c	/^static const struct timeval TIMEVAL_0 = {0,0};$/;"	v	typeref:typename:const struct timeval	file:
+TIMEVAL_CALLSTATEPOLL	guest/hals/ril/reference-ril/reference-ril.c	/^static const struct timeval TIMEVAL_CALLSTATEPOLL = {0,500000};$/;"	v	typeref:typename:const struct timeval	file:
+TIMEVAL_SIMPOLL	guest/hals/ril/reference-ril/reference-ril.c	/^static const struct timeval TIMEVAL_SIMPOLL = {1,0};$/;"	v	typeref:typename:const struct timeval	file:
+TIMEVAL_WAKE_TIMEOUT	guest/hals/ril/reference-libril/ril.cpp	/^static const struct timeval TIMEVAL_WAKE_TIMEOUT = {ANDROID_WAKE_LOCK_SECS,ANDROID_WAKE_LOCK_USE/;"	v	namespace:android	typeref:typename:const struct timeval	file:
+TMP_EXTENSION	host/commands/assemble_cvd/boot_image_utils.cc	/^const char TMP_EXTENSION[] = ".tmp";$/;"	v	typeref:typename:const char[]
+TMP_RD_DIR	host/commands/assemble_cvd/boot_image_utils.cc	/^const char TMP_RD_DIR[] = "stripped_ramdisk_dir";$/;"	v	typeref:typename:const char[]
+TOMBSTONE_BUFFER_SIZE	guest/monitoring/tombstone_transmit/tombstone_transmit.cpp	/^#define TOMBSTONE_BUFFER_SIZE /;"	d	file:
+TOMBSTONE_DIR	guest/monitoring/tombstone_transmit/tombstone_transmit.cpp	/^static const char TOMBSTONE_DIR[] = "\/data\/tombstones\/";$/;"	v	typeref:typename:const char[]	file:
+TOMBSTONE_PATH	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    private static final String TOMBSTONE_PATH = "\/data\/tombstones\/";$/;"	f	class:TombstoneTransmitTest	file:
+TOMBSTONE_PRODUCER	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    private static final String TOMBSTONE_PRODUCER = "tombstone_producer";$/;"	f	class:TombstoneTransmitTest	file:
+TRUSTY_GATEKEEPER_H	guest/hals/gatekeeper/remote/remote_gatekeeper.h	/^#define TRUSTY_GATEKEEPER_H$/;"	d
+TRY_ACQUIRE	common/libs/concurrency/thread_annotations.h	/^#define TRY_ACQUIRE(/;"	d
+TRY_ACQUIRE_SHARED	common/libs/concurrency/thread_annotations.h	/^#define TRY_ACQUIRE_SHARED(/;"	d
+TYPE_EF	guest/hals/ril/reference-ril/reference-ril.c	/^#define TYPE_EF /;"	d	file:
+TYPE_FILE_DES_LEN	guest/hals/ril/reference-ril/reference-ril.c	/^#define TYPE_FILE_DES_LEN /;"	d	file:
+Tag3	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^typedef ::android::hardware::keymaster::V3_0::Tag Tag3;$/;"	t	typeref:typename:::android::hardware::keymaster::V3_0::Tag	file:
+TapInterfacesInUse	common/libs/utils/network.cpp	/^std::set<std::string> TapInterfacesInUse() {$/;"	f	namespace:cuttlefish	typeref:typename:std::set<std::string>
+TargetBuildZipFromArtifacts	host/commands/fetcher/fetch_cvd.cc	/^std::string TargetBuildZipFromArtifacts($/;"	f	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:std::string
+TargetFilesZip	host/commands/assemble_cvd/super_image_mixer.cc	/^std::string TargetFilesZip(const FetcherConfig& fetcher_config,$/;"	f	namespace:cuttlefish::__anonae6530d30111	typeref:typename:std::string
+TcpConnectorEnabled	host/libs/config/adb/launch.cpp	/^  bool TcpConnectorEnabled() const {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:bool	file:
+TcpServer	common/frontend/socket_vsock_proxy/main.cpp	/^[[noreturn]] void TcpServer() {$/;"	f	namespace:__anon913036200111	typeref:typename:void
+TctiContext	host/commands/secure_env/device_tpm.cpp	/^TSS2_TCTI_CONTEXT* DeviceTpm::TctiContext() {$/;"	f	class:cuttlefish::DeviceTpm	typeref:typename:TSS2_TCTI_CONTEXT *
+TctiContext	host/commands/secure_env/in_process_tpm.cpp	/^  TSS2_TCTI_CONTEXT* TctiContext() {$/;"	f	class:cuttlefish::InProcessTpm::Impl	typeref:typename:TSS2_TCTI_CONTEXT *	file:
+TctiContext	host/commands/secure_env/in_process_tpm.cpp	/^TSS2_TCTI_CONTEXT* InProcessTpm::TctiContext() { return impl_->TctiContext(); }$/;"	f	class:cuttlefish::InProcessTpm	typeref:typename:TSS2_TCTI_CONTEXT *
+TearDownTestSuite	host/commands/modem_simulator/unittest/service_test.cpp	/^  static void TearDownTestSuite() {$/;"	f	class:ModemServiceTest	typeref:typename:void	file:
+TeeLogger	common/libs/utils/tee_logging.cpp	/^TeeLogger::TeeLogger(const std::vector<SeverityTarget>& destinations)$/;"	f	class:cuttlefish::TeeLogger
+TeeLogger	common/libs/utils/tee_logging.h	/^class TeeLogger {$/;"	c	namespace:cuttlefish
+TeeUiFrame	host/libs/confui/server_common.h	/^using TeeUiFrame = std::vector<std::uint32_t>;$/;"	t	namespace:cuttlefish::confui	typeref:typename:std::vector<std::uint32_t>
+TeeUiFrameWrapper	host/libs/confui/host_renderer.h	/^  TeeUiFrameWrapper(const int w, const int h, const teeui::Color color)$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper
+TeeUiFrameWrapper	host/libs/confui/host_renderer.h	/^class TeeUiFrameWrapper {$/;"	c	namespace:cuttlefish::confui
+TeeuiRc	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^using TeeuiRc = ::teeui::ResponseCode;$/;"	t	namespace:android::hardware::confirmationui::V1_0::implementation	typeref:typename:::teeui::ResponseCode	file:
+TeeuiRc	guest/hals/confirmationui/guest_session.cpp	/^using TeeuiRc = teeui::ResponseCode;$/;"	t	namespace:android::hardware::confirmationui::V1_0::implementation	typeref:typename:teeui::ResponseCode	file:
+Terminate	host/frontend/webrtc/lib/audio_device.cpp	/^int32_t CfAudioDeviceModule::Terminate() { return 0; }$/;"	f	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:int32_t
+Terminating	guest/hals/confirmationui/guest_session.h	/^        Terminating = 4,$/;"	e	enum:android::hardware::confirmationui::V1_0::implementation::GuestSession::ListenerState
+TestComponent	host/libs/config/adb/test.cpp	/^fruit::Component<TestData> TestComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<TestData>
+TestData	host/libs/config/adb/test.cpp	/^struct TestData {$/;"	s	namespace:cuttlefish	file:
+TestKeyBits	host/libs/confui/sign.cc	/^enum class TestKeyBits : uint8_t {$/;"	g	namespace:cuttlefish::confui	typeref:typename:uint8_t	file:
+TestTpm	host/commands/secure_env/test_tpm.cpp	/^TestTpm::TestTpm() {$/;"	f	class:cuttlefish::TestTpm
+TestTpm	host/commands/secure_env/test_tpm.h	/^class TestTpm {$/;"	c	namespace:cuttlefish
+ThreadJoiner	common/libs/utils/subprocess.cpp	/^  ThreadJoiner(const std::vector<std::thread*> threads) : threads_(threads) {}$/;"	f	class:cuttlefish::ThreadJoiner	file:
+ThreadJoiner	common/libs/utils/subprocess.cpp	/^class ThreadJoiner {$/;"	c	namespace:cuttlefish	file:
+ThreadLoop	host/commands/modem_simulator/thread_looper.cpp	/^void ThreadLooper::ThreadLoop() {$/;"	f	class:cuttlefish::ThreadLooper	typeref:typename:void
+ThreadLoop	host/commands/run_cvd/boot_state_machine.cc	/^  void ThreadLoop(SharedFD boot_events_pipe) {$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:void	file:
+ThreadLooper	host/commands/modem_simulator/thread_looper.cpp	/^ThreadLooper::ThreadLooper()$/;"	f	class:cuttlefish::ThreadLooper
+ThreadLooper	host/commands/modem_simulator/thread_looper.h	/^class ThreadLooper {$/;"	c	namespace:cuttlefish
+ThreadSafeQueue	common/libs/concurrency/thread_safe_queue.h	/^  explicit ThreadSafeQueue(std::size_t max_elements,$/;"	f	class:cuttlefish::ThreadSafeQueue
+ThreadSafeQueue	common/libs/concurrency/thread_safe_queue.h	/^class ThreadSafeQueue {$/;"	c	namespace:cuttlefish
+ThreadTracer	host/libs/confui/host_utils.h	/^class ThreadTracer {$/;"	c	namespace:cuttlefish::confui::thread
+TimePoint	host/libs/confui/session.h	/^  using TimePoint = std::chrono::time_point<Clock>;$/;"	t	class:cuttlefish::confui::Session	typeref:typename:std::chrono::time_point<Clock>
+TimeUpdate	host/commands/modem_simulator/misc_service.cpp	/^void MiscService::TimeUpdate() {$/;"	f	class:cuttlefish::MiscService	typeref:typename:void
+TimeZoneOffset	host/commands/modem_simulator/misc_service.cpp	/^long MiscService::TimeZoneOffset(time_t* utctime)$/;"	f	class:cuttlefish::MiscService	typeref:typename:long
+TimerWaitingRemoteCallResponse	host/commands/modem_simulator/call_service.cpp	/^void CallService::TimerWaitingRemoteCallResponse(CallToken call_token) {$/;"	f	class:cuttlefish::CallService	typeref:typename:void
+Timestamp	host/commands/metrics/proto/common.proto	/^message Timestamp {$/;"	m
+ToCharPointers	common/libs/utils/subprocess.cpp	/^std::vector<const char*> ToCharPointers(const std::vector<std::string>& vect) {$/;"	f	namespace:cuttlefish::__anon39e8abf00111	typeref:typename:std::vector<const char * >
+ToCmd	common/libs/confui/protocol_types.cpp	/^ConfUiCmd ToCmd(const std::string& cmd_str) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:ConfUiCmd
+ToCmd	common/libs/confui/protocol_types.cpp	/^ConfUiCmd ToCmd(std::uint32_t i) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:ConfUiCmd
+ToConfUiMessage	common/libs/confui/protocol.cpp	/^std::unique_ptr<ConfUiMessage> ToConfUiMessage($/;"	f	namespace:cuttlefish::confui::__anon7b80148c0111	typeref:typename:std::unique_ptr<ConfUiMessage>
+ToConfUiMessage	common/libs/confui/protocol.cpp	/^std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kCliAck>($/;"	f	namespace:cuttlefish::confui::__anon7b80148c0211	typeref:typename:std::unique_ptr<ConfUiMessage>
+ToConfUiMessage	common/libs/confui/protocol.cpp	/^std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kCliRespond>($/;"	f	namespace:cuttlefish::confui::__anon7b80148c0211	typeref:typename:std::unique_ptr<ConfUiMessage>
+ToConfUiMessage	common/libs/confui/protocol.cpp	/^std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kStart>($/;"	f	namespace:cuttlefish::confui::__anon7b80148c0211	typeref:typename:std::unique_ptr<ConfUiMessage>
+ToConfUiMessage	common/libs/confui/protocol.cpp	/^std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kUserInputEvent>($/;"	f	namespace:cuttlefish::confui::__anon7b80148c0211	typeref:typename:std::unique_ptr<ConfUiMessage>
+ToConfUiMessage	common/libs/confui/protocol.cpp	/^std::unique_ptr<ConfUiMessage> ToConfUiMessage<ConfUiCmd::kUserTouchEvent>($/;"	f	namespace:cuttlefish::confui::__anon7b80148c0211	typeref:typename:std::unique_ptr<ConfUiMessage>
+ToDebugString	common/libs/confui/protocol_types.cpp	/^std::string ToDebugString(const ConfUiCmd& cmd, const bool is_verbose) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string
+ToFsmInput	host/libs/confui/server_common.cc	/^FsmInput ToFsmInput(const ConfUiMessage& msg) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:FsmInput
+ToJson	host/frontend/webrtc_operator/server_config.cpp	/^Json::Value ServerConfig::ToJson() const {$/;"	f	class:cuttlefish::ServerConfig	typeref:typename:Json::Value
+ToJson	host/libs/config/custom_actions.cpp	/^Json::Value ToJson(const CustomActionConfig& custom_action) {$/;"	f	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:Json::Value
+ToLower	host/libs/graphics_detector/graphics_detector.cpp	/^std::string ToLower(const std::string& v) {$/;"	f	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:std::string
+ToMultipleImagePartition	host/libs/image_aggregator/image_aggregator.cc	/^MultipleImagePartition ToMultipleImagePartition(ImagePartition source) {$/;"	f	namespace:cuttlefish::__anon02806fd80111	typeref:typename:MultipleImagePartition
+ToPayload	common/libs/confui/packet.h	/^Payload ToPayload(const std::string& cmd_str, const std::string& session_id,$/;"	f	namespace:cuttlefish::confui::packet::impl	typeref:typename:Payload
+ToString	common/libs/confui/packet_types.cpp	/^std::string ToString(const ParsedPacket& packet) {$/;"	f	namespace:cuttlefish::confui::packet	typeref:typename:std::string
+ToString	common/libs/confui/protocol.cpp	/^std::string ToString(const ConfUiMessage& msg) { return msg.ToString(); }$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string
+ToString	common/libs/confui/protocol_types.cpp	/^std::string ConfUiAckMessage::ToString() const {$/;"	f	class:cuttlefish::confui::ConfUiAckMessage	typeref:typename:std::string
+ToString	common/libs/confui/protocol_types.cpp	/^std::string ConfUiCliResponseMessage::ToString() const {$/;"	f	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:std::string
+ToString	common/libs/confui/protocol_types.cpp	/^std::string ConfUiStartMessage::ToString() const {$/;"	f	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::string
+ToString	common/libs/confui/protocol_types.cpp	/^std::string ConfUiUserSelectionMessage::ToString() const {$/;"	f	class:cuttlefish::confui::ConfUiUserSelectionMessage	typeref:typename:std::string
+ToString	common/libs/confui/protocol_types.cpp	/^std::string ConfUiUserTouchMessage::ToString() const {$/;"	f	class:cuttlefish::confui::ConfUiUserTouchMessage	typeref:typename:std::string
+ToString	common/libs/confui/protocol_types.cpp	/^std::string ToString(const ConfUiCmd& cmd) { return ToDebugString(cmd, false); }$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string
+ToString	common/libs/confui/protocol_types.cpp	/^std::string ToString(const teeui::UIOption ui_opt) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string
+ToString	common/libs/confui/protocol_types.h	/^  std::string ToString() const override {$/;"	f	class:cuttlefish::confui::ConfUiGenericMessage	typeref:typename:std::string
+ToString	host/libs/confui/server_common.cc	/^std::string ToString(FsmInput input) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string
+ToString	host/libs/confui/server_common.cc	/^std::string ToString(const MainLoopState& state) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::string
+ToUiOption	common/libs/confui/protocol_types.cpp	/^std::optional<teeui::UIOption> ToUiOption(const std::string& src) {$/;"	f	namespace:cuttlefish::confui	typeref:typename:std::optional<teeui::UIOption>
+TombstoneReceiver	host/commands/run_cvd/launch.cc	/^class TombstoneReceiver : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+TombstoneReceiverBinary	host/libs/config/known_paths.cpp	/^std::string TombstoneReceiverBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+TombstoneReceiverMain	host/commands/tombstone_receiver/main.cpp	/^int TombstoneReceiverMain(int argc, char** argv) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+TombstoneTransmitTest	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^public class TombstoneTransmitTest extends BaseHostJUnit4Test {$/;"	c
+TopologicalVisit	host/libs/config/feature.h	/^bool FeatureSuperclass<Subclass>::TopologicalVisit($/;"	f	class:cuttlefish::FeatureSuperclass	typeref:typename:bool
+TouchEvent	host/libs/confui/host_server.cc	/^void HostServer::TouchEvent(const int x, const int y, const bool is_down) {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:void
+Tpm	host/commands/secure_env/tpm.h	/^class Tpm {$/;"	c	namespace:cuttlefish
+TpmAttestationRecordContext	host/commands/secure_env/tpm_attestation_record.cpp	/^TpmAttestationRecordContext::TpmAttestationRecordContext()$/;"	f	class:cuttlefish::TpmAttestationRecordContext
+TpmAttestationRecordContext	host/commands/secure_env/tpm_attestation_record.h	/^class TpmAttestationRecordContext : public keymaster::AttestationContext {$/;"	c	namespace:cuttlefish
+TpmAuth	host/commands/secure_env/tpm_auth.cpp	/^TpmAuth::TpmAuth(ESYS_TR auth): TpmAuth(auth, ESYS_TR_NONE, ESYS_TR_NONE) {}$/;"	f	class:cuttlefish::TpmAuth
+TpmAuth	host/commands/secure_env/tpm_auth.cpp	/^TpmAuth::TpmAuth(ESYS_TR auth1, ESYS_TR auth2)$/;"	f	class:cuttlefish::TpmAuth
+TpmAuth	host/commands/secure_env/tpm_auth.cpp	/^TpmAuth::TpmAuth(ESYS_TR auth1, ESYS_TR auth2, ESYS_TR auth3) {$/;"	f	class:cuttlefish::TpmAuth
+TpmAuth	host/commands/secure_env/tpm_auth.h	/^class TpmAuth {$/;"	c	namespace:cuttlefish
+TpmCommandName	host/commands/secure_env/tpm_commands.cpp	/^std::string TpmCommandName(std::uint32_t command_num) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+TpmDecrypt	host/commands/secure_env/tpm_encrypt_decrypt.cpp	/^bool TpmDecrypt(ESYS_CONTEXT* esys, ESYS_TR key_handle, TpmAuth auth,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+TpmEncrypt	host/commands/secure_env/tpm_encrypt_decrypt.cpp	/^bool TpmEncrypt(ESYS_CONTEXT* esys, ESYS_TR key_handle, TpmAuth auth,$/;"	f	namespace:cuttlefish	typeref:typename:bool
+TpmEncryptDecrypt	host/commands/secure_env/tpm_encrypt_decrypt.cpp	/^static bool TpmEncryptDecrypt(  \/\/$/;"	f	namespace:cuttlefish	typeref:typename:bool	file:
+TpmGatekeeper	host/commands/secure_env/tpm_gatekeeper.cpp	/^TpmGatekeeper::TpmGatekeeper($/;"	f	class:cuttlefish::TpmGatekeeper
+TpmGatekeeper	host/commands/secure_env/tpm_gatekeeper.h	/^class TpmGatekeeper : public gatekeeper::GateKeeper {$/;"	c	namespace:cuttlefish
+TpmHmac	host/commands/secure_env/tpm_hmac.cpp	/^UniqueEsysPtr<TPM2B_DIGEST> TpmHmac($/;"	f	namespace:cuttlefish	typeref:typename:UniqueEsysPtr<TPM2B_DIGEST>
+TpmKeyBlobMaker	host/commands/secure_env/tpm_key_blob_maker.cpp	/^TpmKeyBlobMaker::TpmKeyBlobMaker(TpmResourceManager& resource_manager)$/;"	f	class:cuttlefish::TpmKeyBlobMaker
+TpmKeyBlobMaker	host/commands/secure_env/tpm_key_blob_maker.h	/^class TpmKeyBlobMaker : public keymaster::SoftwareKeyBlobMaker {$/;"	c	namespace:cuttlefish
+TpmKeymasterContext	host/commands/secure_env/tpm_keymaster_context.cpp	/^TpmKeymasterContext::TpmKeymasterContext($/;"	f	class:cuttlefish::TpmKeymasterContext
+TpmKeymasterContext	host/commands/secure_env/tpm_keymaster_context.h	/^class TpmKeymasterContext : public keymaster::KeymasterContext {$/;"	c	namespace:cuttlefish
+TpmKeymasterEnforcement	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^TpmKeymasterEnforcement::TpmKeymasterEnforcement($/;"	f	class:cuttlefish::TpmKeymasterEnforcement
+TpmKeymasterEnforcement	host/commands/secure_env/tpm_keymaster_enforcement.h	/^class TpmKeymasterEnforcement : public keymaster::KeymasterEnforcement {$/;"	c	namespace:cuttlefish
+TpmObjectSlot	host/commands/secure_env/tpm_resource_manager.h	/^using TpmObjectSlot = std::shared_ptr<TpmResourceManager::ObjectSlot>;$/;"	t	namespace:cuttlefish	typeref:typename:std::shared_ptr<TpmResourceManager::ObjectSlot>
+TpmRandomSource	host/commands/secure_env/tpm_random_source.cpp	/^TpmRandomSource::TpmRandomSource(ESYS_CONTEXT* esys) : esys_(esys) {$/;"	f	class:cuttlefish::TpmRandomSource
+TpmRandomSource	host/commands/secure_env/tpm_random_source.h	/^class TpmRandomSource : public keymaster::RandomSource {$/;"	c	namespace:cuttlefish
+TpmRemoteProvisioningContext	host/commands/secure_env/tpm_remote_provisioning_context.cpp	/^TpmRemoteProvisioningContext::TpmRemoteProvisioningContext($/;"	f	class:cuttlefish::TpmRemoteProvisioningContext
+TpmRemoteProvisioningContext	host/commands/secure_env/tpm_remote_provisioning_context.h	/^class TpmRemoteProvisioningContext$/;"	c	namespace:cuttlefish
+TpmResourceManager	host/commands/secure_env/tpm_resource_manager.cpp	/^TpmResourceManager::TpmResourceManager(ESYS_CONTEXT* esys)$/;"	f	class:cuttlefish::TpmResourceManager
+TpmResourceManager	host/commands/secure_env/tpm_resource_manager.h	/^class TpmResourceManager {$/;"	c	namespace:cuttlefish
+TpmSerializable	host/commands/secure_env/tpm_serialize.cpp	/^TpmSerializable<T>::TpmSerializable(T* instance) : instance_(instance) {}$/;"	f	class:cuttlefish::TpmSerializable
+TpmSerializable	host/commands/secure_env/tpm_serialize.cpp	/^template class TpmSerializable<TPM2B_PRIVATE>;$/;"	v	namespace:cuttlefish	typeref:meta:class
+TpmSerializable	host/commands/secure_env/tpm_serialize.cpp	/^template class TpmSerializable<TPM2B_PUBLIC>;$/;"	v	namespace:cuttlefish	typeref:meta:class
+TpmSerializable	host/commands/secure_env/tpm_serialize.h	/^class TpmSerializable : public keymaster::Serializable {$/;"	c	namespace:cuttlefish
+Transition	host/libs/confui/host_server.cc	/^void HostServer::Transition(std::unique_ptr<ConfUiMessage>& input_ptr) {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:void
+Transition	host/libs/confui/session.cc	/^MainLoopState Session::Transition(SharedFD& hal_cli, const FsmInput fsm_input,$/;"	f	class:cuttlefish::confui::Session	typeref:typename:MainLoopState
+Transmit	host/commands/secure_env/in_process_tpm.cpp	/^  static TSS2_RC Transmit($/;"	f	class:cuttlefish::InProcessTpm::Impl	typeref:typename:TSS2_RC	file:
+Truncate	common/libs/fs/shared_fd.cpp	/^ssize_t FileInstance::Truncate(off_t length) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ssize_t
+TrustyConfirmationUI	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^TrustyConfirmationUI::TrustyConfirmationUI()$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI
+TrustyConfirmationUI	guest/hals/confirmationui/TrustyConfirmationUI.h	/^class TrustyConfirmationUI : public IConfirmationUI {$/;"	c	namespace:android::hardware::confirmationui::V1_0::implementation
+Try Cuttlefish	README.md	/^## Try Cuttlefish$/;"	s	chapter:Cuttlefish Getting Started
+TxBuffer	host/libs/audio_connector/buffers.h	/^  TxBuffer(const virtio_snd_pcm_xfer& header, const volatile uint8_t* buffer,$/;"	f	class:cuttlefish::TxBuffer
+TxBuffer	host/libs/audio_connector/buffers.h	/^class TxBuffer : public ShmBuffer {$/;"	c	namespace:cuttlefish
+TxBufferAt	host/libs/audio_connector/server.cpp	/^const volatile uint8_t* AudioClientConnection::TxBufferAt(size_t offset,$/;"	f	class:cuttlefish::AudioClientConnection	typeref:typename:const volatile uint8_t *
+Type	host/libs/confui/cbor.h	/^  enum class Type : uint8_t {$/;"	g	class:cuttlefish::confui::Cbor	typeref:typename:uint8_t
+Type	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  WmediumdMessageType Type() const override {$/;"	f	class:cuttlefish::WmediumdMessageReloadConfig	typeref:typename:WmediumdMessageType
+Type	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  WmediumdMessageType Type() const override {$/;"	f	class:cuttlefish::WmediumdMessageReloadCurrentConfig	typeref:typename:WmediumdMessageType
+Type	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  WmediumdMessageType Type() const override {$/;"	f	class:cuttlefish::WmediumdMessageSetControl	typeref:typename:WmediumdMessageType
+Type	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  WmediumdMessageType Type() const override {$/;"	f	class:cuttlefish::WmediumdMessageSetSnr	typeref:typename:WmediumdMessageType
+UID	shared/config/cgroups.json	/^      "UID": "system",$/;"	s	object:Cgroups.0
+UNKNOWN	guest/hals/ril/reference-libril/ril.h	/^    UNKNOWN = 0x00,     \/\/ Unknown Radio Access Network$/;"	e	enum:__anon0bfbaecfa503
+UNKNOWN	host/commands/modem_simulator/sup_service.h	/^      UNKNOWN                       = 2,$/;"	e	enum:cuttlefish::SupService::ClirStatusInfo::ClirStatus
+UNKNOWN_PURPOSE	host/libs/config/fetcher_config.h	/^  UNKNOWN_PURPOSE = 0,$/;"	e	enum:cuttlefish::FileSource
+UNLOCK	host/commands/modem_simulator/sim_service.h	/^      UNLOCK = 0,$/;"	e	enum:cuttlefish::SimService::FacilityLock::Mode
+UNMANAGED_Dup	common/libs/fs/shared_fd.cpp	/^int FileInstance::UNMANAGED_Dup() {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+UNMANAGED_Dup2	common/libs/fs/shared_fd.cpp	/^int FileInstance::UNMANAGED_Dup2(int newfd) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:int
+UNVISITED	host/libs/config/feature.h	/^  enum class Status { UNVISITED, VISITING, VISITED };$/;"	e	enum:cuttlefish::FeatureSuperclass::TopologicalVisit::Status
+USAGE_MESSAGE	host/commands/fetcher/fetch_cvd.cc	/^std::string USAGE_MESSAGE =$/;"	v	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:std::string
+USAGE_MESSAGE	host/commands/health/health.cpp	/^std::string USAGE_MESSAGE =$/;"	v	typeref:typename:std::string
+USERIMAGE_PARTITIONS	shared/releasetools.py	/^USERIMAGE_PARTITIONS = [$/;"	v
+USE_CAMERA_STUB	shared/BoardConfig.mk	/^USE_CAMERA_STUB := true$/;"	m
+USE_OPENGL_RENDERER	shared/BoardConfig.mk	/^USE_OPENGL_RENDERER := true$/;"	m
+USIM_DATA_OFFSET_2	guest/hals/ril/reference-ril/reference-ril.c	/^#define USIM_DATA_OFFSET_2 /;"	d	file:
+USIM_DATA_OFFSET_3	guest/hals/ril/reference-ril/reference-ril.c	/^#define USIM_DATA_OFFSET_3 /;"	d	file:
+USIM_FILE_DES_TAG	guest/hals/ril/reference-ril/reference-ril.c	/^#define USIM_FILE_DES_TAG /;"	d	file:
+USIM_FILE_SIZE_TAG	guest/hals/ril/reference-ril/reference-ril.c	/^#define USIM_FILE_SIZE_TAG /;"	d	file:
+UTRAN	guest/hals/ril/reference-libril/ril.h	/^    UTRAN = 0x02,       \/\/ Universal Terrestrial Radio Access Network$/;"	e	enum:__anon0bfbaecfa503
+UTRAN_BAND_1	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_1 = 1,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_10	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_10 = 10,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_11	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_11 = 11,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_12	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_12 = 12,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_13	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_13 = 13,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_14	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_14 = 14,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_19	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_19 = 19,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_2	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_2 = 2,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_20	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_20 = 20,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_21	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_21 = 21,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_22	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_22 = 22,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_25	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_25 = 25,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_26	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_26 = 26,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_3	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_3 = 3,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_4	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_4 = 4,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_5	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_5 = 5,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_6	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_6 = 6,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_7	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_7 = 7,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_8	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_8 = 8,$/;"	e	enum:__anon0bfbaecfa803
+UTRAN_BAND_9	guest/hals/ril/reference-libril/ril.h	/^    UTRAN_BAND_9 = 9,$/;"	e	enum:__anon0bfbaecfa803
+UiOptsToString	common/libs/confui/protocol_types.cpp	/^std::string ConfUiStartMessage::UiOptsToString() const {$/;"	f	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::string
+UnRegisterDevice	host/frontend/webrtc_operator/device_registry.cpp	/^void DeviceRegistry::UnRegisterDevice(const std::string& device_id) {$/;"	f	class:cuttlefish::DeviceRegistry	typeref:typename:void
+Unauthorized	host/libs/websocket/websocket_handler.h	/^  Unauthorized = 401,$/;"	e	enum:cuttlefish::HttpStatusCode
+UnexpectedArgumentGuard	common/libs/utils/flag_parser.cpp	/^Flag UnexpectedArgumentGuard() {$/;"	f	namespace:cuttlefish	typeref:typename:Flag
+UniqueData	host/commands/secure_env/primary_key_builder.cpp	/^void PrimaryKeyBuilder::UniqueData(const std::string& data) {$/;"	f	class:cuttlefish::PrimaryKeyBuilder	typeref:typename:void
+UniqueDir	host/commands/fetcher/build_api.cc	/^using UniqueDir = std::unique_ptr<DIR, CloseDir>;$/;"	t	namespace:cuttlefish	typeref:typename:std::unique_ptr<DIR,CloseDir>	file:
+UniqueEsysPtr	host/commands/secure_env/tpm_hmac.h	/^using UniqueEsysPtr = std::unique_ptr<T, EsysDeleter>;$/;"	t	namespace:cuttlefish	typeref:typename:std::unique_ptr<T,EsysDeleter>
+UnixMessageSocket	common/libs/utils/unix_sockets.cpp	/^UnixMessageSocket::UnixMessageSocket(SharedFD socket) : socket_(socket) {$/;"	f	class:cuttlefish::UnixMessageSocket
+UnixMessageSocket	common/libs/utils/unix_sockets.h	/^class UnixMessageSocket {$/;"	c	namespace:cuttlefish
+UnixMessageSocketPair	common/libs/utils/unix_sockets_test.cpp	/^std::pair<UnixMessageSocket, UnixMessageSocket> UnixMessageSocketPair() {$/;"	f	namespace:cuttlefish	typeref:typename:std::pair<UnixMessageSocket,UnixMessageSocket>
+UnixSocketMessage	common/libs/utils/unix_sockets.h	/^struct UnixSocketMessage {$/;"	s	namespace:cuttlefish
+Unknown	host/libs/config/adb/adb.h	/^  Unknown,$/;"	e	enum:cuttlefish::AdbMode
+Unknown	host/libs/config/cuttlefish_config.h	/^  Unknown,$/;"	e	enum:cuttlefish::SecureHal
+UnmarshalFn	host/commands/secure_env/tpm_serialize.cpp	/^int UnmarshalFn = 0; \/\/ Break code without an explicit specialization.$/;"	v	namespace:cuttlefish	typeref:typename:int
+UnpackBootImage	host/commands/assemble_cvd/boot_image_utils.cc	/^bool UnpackBootImage(const std::string& boot_image_path,$/;"	f	namespace:cuttlefish::__anonbfa95aa40111	typeref:typename:bool
+UnpackVendorBootImageIfNotUnpacked	host/commands/assemble_cvd/boot_image_utils.cc	/^bool UnpackVendorBootImageIfNotUnpacked($/;"	f	namespace:cuttlefish::__anonbfa95aa40111	typeref:typename:bool
+Unregister	host/frontend/webrtc/lib/streamer.cpp	/^void Streamer::Unregister() {$/;"	f	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:void
+UnregisterAudioObserver	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^void AudioTrackSourceImpl::UnregisterAudioObserver(AudioObserver* observer) {$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:void
+UnregisterObserver	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^void AudioTrackSourceImpl::UnregisterObserver($/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:void
+UnsetEnvironment	common/libs/utils/subprocess.cpp	/^void UnsetEnvironment(const std::unordered_set<std::string>& unenv) {$/;"	f	namespace:cuttlefish::__anon39e8abf00111	typeref:typename:void
+UnsetFromEnvironment	common/libs/utils/subprocess.h	/^  void UnsetFromEnvironment(const std::vector<std::string>& env) {$/;"	f	class:cuttlefish::Command	typeref:typename:void
+UnsetVideoTrack	host/frontend/webrtc/lib/client_handler.cpp	/^  void UnsetVideoTrack(webrtc::VideoTrackInterface *track) {$/;"	f	class:cuttlefish::webrtc_streaming::ClientVideoTrackImpl	typeref:typename:void	file:
+UnsolResponseInfo	guest/hals/ril/reference-libril/ril.cpp	/^} UnsolResponseInfo;$/;"	t	namespace:android	typeref:struct:android::__anonf9a2982a0108	file:
+Unsubscribe	host/frontend/webrtc/kernel_log_events_handler.cpp	/^void KernelLogEventsHandler::Unsubscribe(int subscriber_id) {$/;"	f	class:cuttlefish::KernelLogEventsHandler	typeref:typename:void
+UnvalidatedAlias	common/libs/utils/flag_parser.cpp	/^Flag Flag::UnvalidatedAlias(const FlagAlias& alias) && {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag
+UnvalidatedAlias	common/libs/utils/flag_parser.cpp	/^Flag& Flag::UnvalidatedAlias(const FlagAlias& alias) & {$/;"	f	class:cuttlefish::Flag	typeref:typename:Flag &
+UnvalidatedCreateKeyBlob	host/commands/secure_env/tpm_key_blob_maker.cpp	/^keymaster_error_t TpmKeyBlobMaker::UnvalidatedCreateKeyBlob($/;"	f	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:keymaster_error_t
+UnwrapKey	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster_error_t UnwrapKey($/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster_error_t
+UnwrapKey	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster_error_t TpmKeymasterContext::UnwrapKey($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster_error_t
+UnwrapKeyBlob	host/commands/secure_env/tpm_key_blob_maker.cpp	/^keymaster_error_t TpmKeyBlobMaker::UnwrapKeyBlob($/;"	f	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:keymaster_error_t
+UpdateColorScheme	host/libs/confui/host_renderer.cc	/^void ConfUiRenderer::UpdateColorScheme(const bool is_inverted) {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:void
+UpdateDeviceList	host/frontend/webrtc_operator/assets/js/index.js	/^  async #UpdateDeviceList() {$/;"	m	class:DeviceListApp
+UpdateFlagDefaults	host/commands/start/flag_forwarder.cc	/^void FlagForwarder::UpdateFlagDefaults() const {$/;"	f	class:FlagForwarder	typeref:typename:void
+UpdateHealthInfo	guest/hals/health/health.cpp	/^void HealthImpl::UpdateHealthInfo(HealthInfo* health_info) {$/;"	f	class:android::hardware::health::V2_1::implementation::HealthImpl	typeref:typename:void
+UpdateLocale	host/libs/confui/host_renderer.cc	/^teeui::Error ConfUiRenderer::UpdateLocale() {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::Error
+UpdateOperation	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::UpdateOperation(const UpdateOperationRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+UpdateOperation	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::UpdateOperation(const UpdateOperationRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+UpdatePixels	host/libs/confui/host_renderer.cc	/^teeui::Error ConfUiRenderer::UpdatePixels(TeeUiFrameWrapper& raw_frame,$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::Error
+UpdateRegisterState	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::UpdateRegisterState(RegistrationState state ) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+UpdateString	host/libs/confui/host_renderer.cc	/^teeui::Error ConfUiRenderer::UpdateString() {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::Error
+UpdateTranslations	host/libs/confui/host_renderer.cc	/^teeui::Error ConfUiRenderer::UpdateTranslations() {$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::Error
+UpgradeIntegerTag	host/commands/secure_env/tpm_keymaster_context.cpp	/^static bool UpgradeIntegerTag($/;"	f	namespace:cuttlefish	typeref:typename:bool	file:
+UpgradeKey	guest/hals/keymaster/remote/remote_keymaster.cpp	/^void RemoteKeymaster::UpgradeKey(const UpgradeKeyRequest& request, UpgradeKeyResponse* response)/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+UpgradeKey	guest/hals/keymint/remote/remote_keymaster.cpp	/^void RemoteKeymaster::UpgradeKey(const UpgradeKeyRequest& request,$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:void
+UpgradeKeyBlob	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster_error_t UpgradeKeyBlob($/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster_error_t
+UpgradeKeyBlob	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster_error_t TpmKeymasterContext::UpgradeKeyBlob($/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster_error_t
+UserAbort	host/libs/confui/session.cc	/^void Session::UserAbort(SharedFD hal_cli) {$/;"	f	class:cuttlefish::confui::Session	typeref:typename:void
+UserAbortEvent	host/libs/confui/host_server.cc	/^void HostServer::UserAbortEvent() {$/;"	f	class:cuttlefish::confui::HostServer	typeref:typename:void
+UserCallbackInfo	guest/hals/ril/reference-libril/ril.cpp	/^typedef struct UserCallbackInfo {$/;"	s	namespace:android	file:
+UserCallbackInfo	guest/hals/ril/reference-libril/ril.cpp	/^} UserCallbackInfo;$/;"	t	namespace:android	typeref:struct:android::UserCallbackInfo	file:
+UserInGroup	host/libs/vm_manager/host_configuration.cpp	/^bool UserInGroup(const std::string& group,$/;"	f	namespace:cuttlefish::vm_manager::__anon1edaaabd0111	typeref:typename:bool
+UserResponse	common/libs/confui/protocol_types.h	/^struct UserResponse {$/;"	s	namespace:cuttlefish::confui
+UserType	host/commands/metrics/proto/common.proto	/^enum UserType {$/;"	g
+V1_0	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^namespace V1_0 {$/;"	n	namespace:android::hardware::confirmationui	file:
+V1_0	guest/hals/confirmationui/TrustyConfirmationUI.h	/^namespace V1_0 {$/;"	n	namespace:android::hardware::confirmationui
+V1_0	guest/hals/confirmationui/guest_session.cpp	/^namespace V1_0 {$/;"	n	namespace:android::hardware::confirmationui	file:
+V1_0	guest/hals/confirmationui/guest_session.h	/^namespace V1_0 {$/;"	n	namespace:android::hardware::confirmationui
+V1_0	guest/hals/confirmationui/include/TrustyConfirmationuiHal.h	/^namespace V1_0 {$/;"	n	namespace:android::hardware::confirmationui
+V1_1	guest/hals/bt/remote/remote_bluetooth.cpp	/^namespace V1_1 {$/;"	n	namespace:android::hardware::bluetooth	file:
+V1_1	guest/hals/bt/remote/remote_bluetooth.h	/^namespace V1_1 {$/;"	n	namespace:android::hardware::bluetooth
+V2_1	guest/hals/health/health.cpp	/^namespace V2_1 {$/;"	n	namespace:android::hardware::health	file:
+V2_7	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera::provider	file:
+V2_7	guest/hals/camera/vsock_camera_provider_2_7.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera::provider
+V2_7	guest/hals/camera/vsock_camera_server.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera::provider	file:
+V2_7	guest/hals/camera/vsock_camera_server.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera::provider
+V3_4	guest/hals/camera/cached_stream_buffer.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device	file:
+V3_4	guest/hals/camera/cached_stream_buffer.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device
+V3_4	guest/hals/camera/stream_buffer_cache.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device	file:
+V3_4	guest/hals/camera/stream_buffer_cache.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device
+V3_4	guest/hals/camera/vsock_camera_device_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device	file:
+V3_4	guest/hals/camera/vsock_camera_device_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device
+V3_4	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device	file:
+V3_4	guest/hals/camera/vsock_camera_device_session_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device
+V3_4	guest/hals/camera/vsock_camera_metadata.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device	file:
+V3_4	guest/hals/camera/vsock_camera_metadata.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device
+V4_1	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^namespace V4_1 {$/;"	n	namespace:keymaster	file:
+V4_1	guest/hals/keymaster/remote/remote_keymaster4_device.h	/^namespace V4_1 {$/;"	n	namespace:keymaster
+VBMETA_MAX_SIZE	host/commands/assemble_cvd/disk_flags.cc	/^#define VBMETA_MAX_SIZE /;"	d	file:
+VDBG	guest/hals/ril/reference-libril/ril_internal.h	/^#define VDBG /;"	d
+VENDOR_SECURITY_PATCH	shared/device.mk	/^VENDOR_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH)$/;"	m
+VIOS_VERSION	host/libs/audio_connector/shm_layout.h	/^const uint32_t VIOS_VERSION = 2;$/;"	v	namespace:cuttlefish	typeref:typename:const uint32_t
+VIRTIO_SND_CHMAP_BC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_BC,        \/* bottom center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_BLC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_BLC,       \/* bottom left center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_BRC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_BRC        \/* bottom right center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FC,        \/* front center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FCH	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FCH,       \/* front center high *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FL	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FL,        \/* front left *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FLC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FLC,       \/* front left center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FLH	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FLH,       \/* front left high *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FLW	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FLW,       \/* front left wide *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FR	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FR,        \/* front right *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FRC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FRC,       \/* front right center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FRH	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FRH,       \/* front right high *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_FRW	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_FRW,       \/* front right wide *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_LFE	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_LFE,       \/* low frequency (LFE) *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_LLFE	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_LLFE,      \/* left LFE *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_MAX_SIZE	host/libs/audio_connector/shm_layout.h	/^constexpr uint8_t VIRTIO_SND_CHMAP_MAX_SIZE = 18;$/;"	v	namespace:cuttlefish	typeref:typename:uint8_t
+VIRTIO_SND_CHMAP_MONO	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_MONO,      \/* mono stream *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_NA	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_NA,        \/* silent *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_NONE	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_NONE = 0,  \/* undefined *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_RC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_RC,        \/* rear center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_RL	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_RL,        \/* rear left *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_RLC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_RLC,       \/* rear left center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_RLFE	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_RLFE,      \/* right LFE *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_RR	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_RR,        \/* rear right *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_RRC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_RRC,       \/* rear right center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_SL	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_SL,        \/* side left *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_SR	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_SR,        \/* side right *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TC,        \/* top center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TFC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TFC,       \/* top front center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TFL	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TFL,       \/* top front left *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TFLC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TFLC,      \/* top front left center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TFR	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TFR,       \/* top front right *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TFRC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TFRC,      \/* top front right center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TRC	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TRC,       \/* top rear center *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TRL	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TRL,       \/* top rear left *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TRR	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TRR,       \/* top rear right *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TSL	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TSL,       \/* top side left *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_CHMAP_TSR	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_CHMAP_TSR,       \/* top side right *\/$/;"	e	enum:cuttlefish::AudioChannelMap
+VIRTIO_SND_D_INPUT	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_D_INPUT$/;"	e	enum:cuttlefish::AudioStreamDirection
+VIRTIO_SND_D_OUTPUT	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_D_OUTPUT = 0,$/;"	e	enum:cuttlefish::AudioStreamDirection
+VIRTIO_SND_JACK_F_REMAP	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_JACK_F_REMAP = 0$/;"	e	enum:cuttlefish::AudioJackFeatures
+VIRTIO_SND_PCM_FMT_A_LAW	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_A_LAW,         \/*  8 \/  8 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_DSD_U16	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_DSD_U16,        \/* 16 \/ 16 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_DSD_U32	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_DSD_U32,        \/* 32 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_DSD_U8	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_DSD_U8,         \/*  8 \/  8 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_FLOAT	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_FLOAT,         \/* 32 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_FLOAT64	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_FLOAT64,       \/* 64 \/ 64 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME \/* 32 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_IMA_ADPCM	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_IMA_ADPCM = 0, \/*  4 \/  4 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_MU_LAW	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_MU_LAW,        \/*  8 \/  8 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_S16	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_S16,           \/* 16 \/ 16 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_S18_3	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_S18_3,         \/* 18 \/ 24 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_S20	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_S20,           \/* 20 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_S20_3	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_S20_3,         \/* 20 \/ 24 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_S24	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_S24,           \/* 24 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_S24_3	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_S24_3,         \/* 24 \/ 24 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_S32	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_S32,           \/* 32 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_S8	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_S8,            \/*  8 \/  8 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_U16	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_U16,           \/* 16 \/ 16 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_U18_3	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_U18_3,         \/* 18 \/ 24 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_U20	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_U20,           \/* 20 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_U20_3	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_U20_3,         \/* 20 \/ 24 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_U24	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_U24,           \/* 24 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_U24_3	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_U24_3,         \/* 24 \/ 24 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_U32	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_U32,           \/* 32 \/ 32 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_FMT_U8	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_FMT_U8,            \/*  8 \/  8 bits *\/$/;"	e	enum:cuttlefish::AudioStreamFormat
+VIRTIO_SND_PCM_RATE_11025	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_11025,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_16000	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_16000,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_176400	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_176400,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_192000	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_192000,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_22050	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_22050,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_32000	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_32000,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_384000	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_384000$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_44100	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_44100,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_48000	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_48000,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_5512	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_5512 = 0,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_64000	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_64000,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_8000	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_8000,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_88200	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_88200,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_PCM_RATE_96000	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_PCM_RATE_96000,$/;"	e	enum:cuttlefish::AudioStreamRate
+VIRTIO_SND_R_CHMAP_INFO	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_CHMAP_INFO = 0x0200,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_R_JACK_INFO	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_JACK_INFO = 1,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_R_JACK_REMAP	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_JACK_REMAP,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_R_PCM_INFO	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_PCM_INFO = 0x0100,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_R_PCM_PREPARE	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_PCM_PREPARE,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_R_PCM_RELEASE	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_PCM_RELEASE,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_R_PCM_SET_PARAMS	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_PCM_SET_PARAMS,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_R_PCM_START	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_PCM_START,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_R_PCM_STOP	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_R_PCM_STOP,$/;"	e	enum:cuttlefish::AudioCommandType
+VIRTIO_SND_S_BAD_MSG	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_S_BAD_MSG,$/;"	e	enum:cuttlefish::AudioStatus
+VIRTIO_SND_S_IO_ERR	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_S_IO_ERR,$/;"	e	enum:cuttlefish::AudioStatus
+VIRTIO_SND_S_NOT_SUPP	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_S_NOT_SUPP,$/;"	e	enum:cuttlefish::AudioStatus
+VIRTIO_SND_S_OK	host/libs/audio_connector/shm_layout.h	/^  VIRTIO_SND_S_OK = 0x8000,$/;"	e	enum:cuttlefish::AudioStatus
+VIRTUAL_DEVICE_BOOT_COMPLETED	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final String VIRTUAL_DEVICE_BOOT_COMPLETED = "VIRTUAL_DEVICE_BOOT_COMPLETED";$/;"	f	class:EventReporter	file:
+VIRTUAL_DEVICE_BOOT_FAILED	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final String VIRTUAL_DEVICE_BOOT_FAILED = "VIRTUAL_DEVICE_BOOT_FAILED";$/;"	f	class:EventReporter	file:
+VIRTUAL_DEVICE_BOOT_PENDING	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final String VIRTUAL_DEVICE_BOOT_PENDING = "VIRTUAL_DEVICE_BOOT_PENDING";$/;"	f	class:EventReporter	file:
+VIRTUAL_DEVICE_BOOT_STARTED	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final String VIRTUAL_DEVICE_BOOT_STARTED = "VIRTUAL_DEVICE_BOOT_STARTED";$/;"	f	class:EventReporter	file:
+VIRTUAL_DEVICE_SCREEN_CHANGED	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private static final String VIRTUAL_DEVICE_SCREEN_CHANGED = "VIRTUAL_DEVICE_SCREEN_CHANGED";$/;"	f	class:EventReporter	file:
+VISITED	host/libs/config/feature.h	/^  enum class Status { UNVISITED, VISITING, VISITED };$/;"	e	enum:cuttlefish::FeatureSuperclass::TopologicalVisit::Status
+VISITING	host/libs/config/feature.h	/^  enum class Status { UNVISITED, VISITING, VISITED };$/;"	e	enum:cuttlefish::FeatureSuperclass::TopologicalVisit::Status
+VMADDR_CID_ANY	common/libs/fs/vm_sockets.h	/^#define VMADDR_CID_ANY /;"	d
+VMADDR_CID_HOST	common/libs/fs/vm_sockets.h	/^#define VMADDR_CID_HOST /;"	d
+VMADDR_CID_HYPERVISOR	common/libs/fs/vm_sockets.h	/^#define VMADDR_CID_HYPERVISOR /;"	d
+VMADDR_CID_RESERVED	common/libs/fs/vm_sockets.h	/^#define VMADDR_CID_RESERVED /;"	d
+VMADDR_PORT_ANY	common/libs/fs/vm_sockets.h	/^#define VMADDR_PORT_ANY /;"	d
+VM_SOCKETS_INVALID_VERSION	common/libs/fs/vm_sockets.h	/^#define VM_SOCKETS_INVALID_VERSION /;"	d
+VM_SOCKETS_VERSION_EPOCH	common/libs/fs/vm_sockets.h	/^#define VM_SOCKETS_VERSION_EPOCH(/;"	d
+VM_SOCKETS_VERSION_MAJOR	common/libs/fs/vm_sockets.h	/^#define VM_SOCKETS_VERSION_MAJOR(/;"	d
+VM_SOCKETS_VERSION_MINOR	common/libs/fs/vm_sockets.h	/^#define VM_SOCKETS_VERSION_MINOR(/;"	d
+VOICE	host/commands/modem_simulator/sim_service.h	/^      VOICE = 1 << 0,   \/\/ telephony$/;"	e	enum:cuttlefish::SimService::FacilityLock::Class
+VP8OnlyEncoderFactory	host/frontend/webrtc/lib/vp8only_encoder_factory.cpp	/^VP8OnlyEncoderFactory::VP8OnlyEncoderFactory($/;"	f	class:cuttlefish::webrtc_streaming::VP8OnlyEncoderFactory
+VP8OnlyEncoderFactory	host/frontend/webrtc/lib/vp8only_encoder_factory.h	/^class VP8OnlyEncoderFactory : public webrtc::VideoEncoderFactory {$/;"	c	namespace:cuttlefish::webrtc_streaming
+VSOC_WPA_SUPPLICANT_DEBUG	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.h	/^#define VSOC_WPA_SUPPLICANT_DEBUG /;"	d
+VSoCInputService	guest/commands/vsoc_input_service/vsoc_input_service.h	/^class VSoCInputService {$/;"	c	namespace:cuttlefish_input_service
+ValidMacAddr	host/commands/wmediumd_control/main.cpp	/^bool ValidMacAddr(const std::string& macAddr) {$/;"	f	typeref:typename:bool
+ValidateAlias	common/libs/utils/flag_parser.cpp	/^void Flag::ValidateAlias(const FlagAlias& alias) {$/;"	f	class:cuttlefish::Flag	typeref:typename:void
+ValidateConfigRequest	host/libs/allocd/resource_manager.cpp	/^bool ResourceManager::ValidateConfigRequest(const Json::Value& config) {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:bool
+ValidateField	host/frontend/webrtc/lib/utils.cpp	/^std::string ValidateField(const Json::Value &obj, const std::string &type,$/;"	f	namespace:cuttlefish::webrtc_streaming::__anon2c505fdf0111	typeref:typename:std::string
+ValidateHostConfiguration	host/libs/vm_manager/host_configuration.cpp	/^bool ValidateHostConfiguration(std::vector<std::string>* config_commands) {$/;"	f	namespace:cuttlefish::vm_manager	typeref:typename:bool
+ValidateHostConfigurationFeature	host/commands/run_cvd/validate.cpp	/^class ValidateHostConfigurationFeature : public Feature {$/;"	c	namespace:cuttlefish::__anon8d12954e0111	file:
+ValidateJsonObject	host/frontend/webrtc/lib/utils.cpp	/^ValidationResult ValidationResult::ValidateJsonObject($/;"	f	class:cuttlefish::webrtc_streaming::ValidationResult	typeref:typename:ValidationResult
+ValidateMetricsConfirmation	host/commands/start/main.cc	/^std::string ValidateMetricsConfirmation(std::string use_metrics) {$/;"	f	namespace:__anon8e1e78490111	typeref:typename:std::string
+ValidateRequest	host/libs/allocd/resource_manager.cpp	/^bool ResourceManager::ValidateRequest(const Json::Value& request) {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:bool
+ValidateRequestList	host/libs/allocd/resource_manager.cpp	/^bool ResourceManager::ValidateRequestList(const Json::Value& config) {$/;"	f	class:cuttlefish::ResourceManager	typeref:typename:bool
+ValidateTapDevices	host/commands/run_cvd/validate.cpp	/^class ValidateTapDevices : public Feature {$/;"	c	namespace:cuttlefish::__anon8d12954e0111	file:
+ValidateTokenSignature	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^bool TpmKeymasterEnforcement::ValidateTokenSignature($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:bool
+ValidationResult	host/frontend/webrtc/lib/utils.h	/^  ValidationResult(const std::string &error) : error_(error) {}$/;"	f	class:cuttlefish::webrtc_streaming::ValidationResult
+ValidationResult	host/frontend/webrtc/lib/utils.h	/^class ValidationResult {$/;"	c	namespace:cuttlefish::webrtc_streaming
+Value	shared/config/task_profiles.json	/^            "Value": "100"$/;"	s	object:Profiles.29.Actions.1.Params
+Value	shared/config/task_profiles.json	/^            "Value": "150"$/;"	s	object:Profiles.28.Actions.1.Params
+Value	shared/config/task_profiles.json	/^            "Value": "16MB"$/;"	s	object:Profiles.28.Actions.0.Params
+Value	shared/config/task_profiles.json	/^            "Value": "512MB"$/;"	s	object:Profiles.29.Actions.0.Params
+VehicleHalGrpcServerBinary	host/libs/config/known_paths.cpp	/^std::string VehicleHalGrpcServerBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+VehicleHalServer	host/commands/run_cvd/launch.cc	/^class VehicleHalServer : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+Verbose	common/libs/utils/subprocess.h	/^  bool Verbose() const { return verbose_; }$/;"	f	class:cuttlefish::SubprocessOptions	typeref:typename:bool
+Verbose	common/libs/utils/subprocess.h	/^  void Verbose(bool verbose) {$/;"	f	class:cuttlefish::SubprocessOptions	typeref:typename:void
+VerificationData	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^  struct VerificationData {$/;"	s	function:cuttlefish::TpmKeymasterEnforcement::VerifyAuthorization	file:
+VerifiedBootParams	host/commands/secure_env/tpm_attestation_record.cpp	/^using VerifiedBootParams = keymaster::AttestationContext::VerifiedBootParams;$/;"	t	namespace:cuttlefish::__anon03bde2800111	typeref:typename:keymaster::AttestationContext::VerifiedBootParams	file:
+VerifyAndCopyDeviceIds	host/commands/secure_env/tpm_attestation_record.cpp	/^keymaster_error_t TpmAttestationRecordContext::VerifyAndCopyDeviceIds($/;"	f	class:cuttlefish::TpmAttestationRecordContext	typeref:typename:keymaster_error_t
+VerifyAuthorization	guest/hals/keymaster/remote/remote_keymaster.cpp	/^VerifyAuthorizationResponse RemoteKeymaster::VerifyAuthorization($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:VerifyAuthorizationResponse
+VerifyAuthorization	guest/hals/keymint/remote/remote_keymaster.cpp	/^VerifyAuthorizationResponse RemoteKeymaster::VerifyAuthorization($/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:VerifyAuthorizationResponse
+VerifyAuthorization	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^VerifyAuthorizationResponse TpmKeymasterEnforcement::VerifyAuthorization($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:VerifyAuthorizationResponse
+VerifyFast	host/commands/secure_env/soft_gatekeeper.h	/^    bool VerifyFast(const fast_hash_t& fast_hash, const SizedBuffer& password) {$/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:bool
+VerifyPIN	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::PinStatus::VerifyPIN(const std::string_view pin) {$/;"	f	class:cuttlefish::SimService::PinStatus	typeref:typename:bool
+VerifyPUK	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::PinStatus::VerifyPUK(const std::string_view puk) {$/;"	f	class:cuttlefish::SimService::PinStatus	typeref:typename:bool
+VersionedAidlPackage	tests/hal/hal_implementation_test.cpp	/^struct VersionedAidlPackage {$/;"	s	file:
+VideoFrameBuffer	host/frontend/webrtc/lib/video_frame_buffer.h	/^class VideoFrameBuffer {$/;"	c	namespace:cuttlefish::webrtc_streaming
+VideoFrameWrapper	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  VideoFrameWrapper($/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	file:
+VideoFrameWrapper	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^class VideoFrameWrapper : public webrtc::I420BufferInterface {$/;"	c	namespace:cuttlefish::webrtc_streaming::__anone9f9f83a0111	file:
+VideoSink	host/frontend/webrtc/lib/video_sink.h	/^class VideoSink {$/;"	c	namespace:cuttlefish::webrtc_streaming
+VideoTrackSourceImpl	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^VideoTrackSourceImpl::VideoTrackSourceImpl(int width, int height)$/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl
+VideoTrackSourceImpl	host/frontend/webrtc/lib/video_track_source_impl.h	/^class VideoTrackSourceImpl : public webrtc::VideoTrackSource {$/;"	c	namespace:cuttlefish::webrtc_streaming
+VideoTrackSourceImplSinkWrapper	host/frontend/webrtc/lib/video_track_source_impl.h	/^  VideoTrackSourceImplSinkWrapper(rtc::scoped_refptr<VideoTrackSourceImpl> obj)$/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImplSinkWrapper
+VideoTrackSourceImplSinkWrapper	host/frontend/webrtc/lib/video_track_source_impl.h	/^class VideoTrackSourceImplSinkWrapper : public VideoSink {$/;"	c	namespace:cuttlefish::webrtc_streaming
+VioSConfig	host/libs/audio_connector/shm_layout.h	/^struct VioSConfig {$/;"	s	namespace:cuttlefish
+VirtioGpuMetadata	host/libs/wayland/wayland_surface.h	/^  struct VirtioGpuMetadata {$/;"	s	class:wayland::Surface
+VirtualDeviceBase	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^VirtualDeviceBase::VirtualDeviceBase(const char* device_name,$/;"	f	class:VirtualDeviceBase
+VirtualDeviceBase	guest/commands/vsoc_input_service/virtual_device_base.h	/^class VirtualDeviceBase {$/;"	c	namespace:cuttlefish_input_service
+VirtualKeyboard	guest/commands/vsoc_input_service/virtual_keyboard.cpp	/^VirtualKeyboard::VirtualKeyboard()$/;"	f	class:cuttlefish_input_service::VirtualKeyboard
+VirtualKeyboard	guest/commands/vsoc_input_service/virtual_keyboard.h	/^class VirtualKeyboard : public VirtualDeviceBase {$/;"	c	namespace:cuttlefish_input_service
+VirtualPowerButton	guest/commands/vsoc_input_service/virtual_power_button.cpp	/^VirtualPowerButton::VirtualPowerButton()$/;"	f	class:cuttlefish_input_service::VirtualPowerButton
+VirtualPowerButton	guest/commands/vsoc_input_service/virtual_power_button.h	/^class VirtualPowerButton : public VirtualDeviceBase {$/;"	c	namespace:cuttlefish_input_service
+VirtualTouchScreen	guest/commands/vsoc_input_service/virtual_touchscreen.cpp	/^VirtualTouchScreen::VirtualTouchScreen(uint32_t width, uint32_t height)$/;"	f	class:cuttlefish_input_service::VirtualTouchScreen
+VirtualTouchScreen	guest/commands/vsoc_input_service/virtual_touchscreen.h	/^class VirtualTouchScreen : public VirtualDeviceBase {$/;"	c	namespace:cuttlefish_input_service
+VmManager	host/libs/vm_manager/vm_manager.h	/^class VmManager {$/;"	c	namespace:cuttlefish::vm_manager
+VmManagerBootconfig	host/libs/config/bootconfig_args.cpp	/^std::vector<std::string> VmManagerBootconfig(const CuttlefishConfig& config) {$/;"	f	namespace:cuttlefish::__anond90bdb570111	typeref:typename:std::vector<std::string>
+VmManagerComponent	host/libs/vm_manager/vm_manager.cpp	/^VmManagerComponent() {$/;"	f	namespace:cuttlefish::vm_manager	typeref:typename:fruit::Component<fruit::Required<const CuttlefishConfig>,VmManager>
+VmManagerKernelCmdline	host/libs/config/kernel_args.cpp	/^std::vector<std::string> VmManagerKernelCmdline(const CuttlefishConfig& config) {$/;"	f	namespace:cuttlefish::__anonfb53392e0111	typeref:typename:std::vector<std::string>
+VmmCommands	host/commands/run_cvd/launch.cc	/^class VmmCommands : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+VmmType	host/commands/metrics/proto/cf_metrics_event.proto	/^  enum VmmType {$/;"	g	message:cuttlefish.MetricsEvent
+VsockCameraDevice	guest/hals/camera/vsock_camera_device_3_4.cpp	/^VsockCameraDevice::VsockCameraDevice($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice
+VsockCameraDevice	guest/hals/camera/vsock_camera_device_3_4.h	/^class VsockCameraDevice : public ICameraDevice {$/;"	c	namespace:android::hardware::camera::device::V3_4::implementation
+VsockCameraDeviceSession	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^VsockCameraDeviceSession::VsockCameraDeviceSession($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession
+VsockCameraDeviceSession	guest/hals/camera/vsock_camera_device_session_3_4.h	/^class VsockCameraDeviceSession : public ICameraDeviceSession {$/;"	c	namespace:android::hardware::camera::device::V3_4::implementation
+VsockCameraMetadata	guest/hals/camera/vsock_camera_metadata.cpp	/^VsockCameraMetadata::VsockCameraMetadata(int32_t width, int32_t height,$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraMetadata
+VsockCameraMetadata	guest/hals/camera/vsock_camera_metadata.h	/^class VsockCameraMetadata : public CameraMetadata {$/;"	c	namespace:android::hardware::camera::device::V3_4::implementation
+VsockCameraProvider	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^VsockCameraProvider::VsockCameraProvider(VsockCameraServer* server) {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider
+VsockCameraProvider	guest/hals/camera/vsock_camera_provider_2_7.h	/^class VsockCameraProvider : public ICameraProvider {$/;"	c	namespace:android::hardware::camera::provider::V2_7::implementation
+VsockCameraRequestMetadata	guest/hals/camera/vsock_camera_metadata.cpp	/^VsockCameraRequestMetadata::VsockCameraRequestMetadata(int32_t fps,$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraRequestMetadata
+VsockCameraRequestMetadata	guest/hals/camera/vsock_camera_metadata.h	/^class VsockCameraRequestMetadata : public CameraMetadata {$/;"	c	namespace:android::hardware::camera::device::V3_4::implementation
+VsockCameraServer	guest/hals/camera/vsock_camera_server.cpp	/^VsockCameraServer::VsockCameraServer() {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer
+VsockCameraServer	guest/hals/camera/vsock_camera_server.h	/^class VsockCameraServer {$/;"	c	namespace:android::hardware::camera::provider::V2_7::implementation
+VsockClient	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::VsockClient(unsigned int cid, unsigned int port, int type) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+VsockClientConnection	common/libs/utils/vsock_connection.h	/^class VsockClientConnection : public VsockConnection {$/;"	c	namespace:cuttlefish
+VsockConnection	common/libs/utils/vsock_connection.h	/^class VsockConnection {$/;"	c	namespace:cuttlefish
+VsockConnectorEnabled	host/libs/config/adb/launch.cpp	/^  bool VsockConnectorEnabled() const {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:bool	file:
+VsockFrameProvider	guest/hals/camera/vsock_frame_provider.h	/^class VsockFrameProvider {$/;"	c	namespace:cuttlefish
+VsockHalfTunnel	host/libs/config/adb/adb.h	/^  VsockHalfTunnel,$/;"	e	enum:cuttlefish::AdbMode
+VsockHalfTunnelEnabled	host/libs/config/adb/launch.cpp	/^  bool VsockHalfTunnelEnabled() const {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:bool	file:
+VsockReadLoop	guest/hals/camera/vsock_frame_provider.cpp	/^void VsockFrameProvider::VsockReadLoop(uint32_t width, uint32_t height) {$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:void
+VsockRequestComparator	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  struct VsockRequestComparator {$/;"	s	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession
+VsockSendYUVFrame	host/frontend/webrtc/lib/camera_streamer.cpp	/^bool CameraStreamer::VsockSendYUVFrame($/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:bool
+VsockServer	common/frontend/socket_vsock_proxy/main.cpp	/^[[noreturn]] void VsockServer() {$/;"	f	namespace:__anon913036200111	typeref:typename:void
+VsockServer	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::VsockServer(int type) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+VsockServer	common/libs/fs/shared_fd.cpp	/^SharedFD SharedFD::VsockServer(unsigned int port, int type, unsigned int cid) {$/;"	f	class:cuttlefish::SharedFD	typeref:typename:SharedFD
+VsockServerConnection	common/libs/utils/vsock_connection.h	/^class VsockServerConnection : public VsockConnection {$/;"	c	namespace:cuttlefish
+VsockServerPort	common/libs/fs/shared_fd.cpp	/^unsigned int FileInstance::VsockServerPort() {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:unsigned int
+VsockToSocket	common/frontend/socket_vsock_proxy/main.cpp	/^void VsockToSocket(SocketSender socket_sender,$/;"	f	namespace:__anon913036200111	typeref:typename:void
+VsockTunnel	host/libs/config/adb/adb.h	/^  VsockTunnel,$/;"	e	enum:cuttlefish::AdbMode
+VsockTunnelEnabled	host/libs/config/adb/launch.cpp	/^  bool VsockTunnelEnabled() const {$/;"	f	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:bool	file:
+WAKE_PARTIAL	guest/hals/ril/reference-libril/ril.cpp	/^enum WakeType {DONT_WAKE, WAKE_PARTIAL};$/;"	e	enum:android::WakeType	file:
+WAKE_PARTIAL	guest/hals/ril/reference-libril/ril_ex.h	/^enum SocketWakeType {DONT_WAKE, WAKE_PARTIAL};$/;"	e	enum:SocketWakeType
+WCDMA	guest/hals/ril/reference-ril/reference-ril.c	/^#define WCDMA /;"	d	file:
+WCDMA_SignalStrength	guest/hals/ril/reference-libril/ril.h	/^    RIL_SignalStrengthWcdma     WCDMA_SignalStrength;$/;"	m	struct:__anon0bfbaecf5308	typeref:typename:RIL_SignalStrengthWcdma
+WIFI_CONNECTED_MESSAGE	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private static final String WIFI_CONNECTED_MESSAGE =$/;"	f	class:GceWifiManager	file:
+WIFI_DRIVER_FW_PATH_AP	shared/BoardConfig.mk	/^WIFI_DRIVER_FW_PATH_AP      := "\/dev\/null"$/;"	m
+WIFI_DRIVER_FW_PATH_PARAM	shared/BoardConfig.mk	/^WIFI_DRIVER_FW_PATH_PARAM   := "\/dev\/null"$/;"	m
+WIFI_DRIVER_FW_PATH_STA	shared/BoardConfig.mk	/^WIFI_DRIVER_FW_PATH_STA     := "\/dev\/null"$/;"	m
+WIFI_HIDL_FEATURE_DUAL_INTERFACE	shared/BoardConfig.mk	/^WIFI_HIDL_FEATURE_DUAL_INTERFACE := true$/;"	m
+WIFI_RECONNECTION_TIMEOUT_S	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private static final int WIFI_RECONNECTION_TIMEOUT_S = 5;$/;"	f	class:GceWifiManager	file:
+WIN32_LEAN_AND_MEAN	host/libs/graphics_detector/include/EGL/eglplatform.h	/^#define WIN32_LEAN_AND_MEAN /;"	d
+WITH_PIN	host/commands/modem_simulator/sim_service.h	/^    enum ChangeMode {WITH_PIN, WITH_PUK};$/;"	e	enum:cuttlefish::SimService::PinStatus::ChangeMode
+WITH_PUK	host/commands/modem_simulator/sim_service.h	/^    enum ChangeMode {WITH_PIN, WITH_PUK};$/;"	e	enum:cuttlefish::SimService::PinStatus::ChangeMode
+WLAN	guest/hals/ril/reference-libril/ril.h	/^    WLAN = 2, \/* Key type to be used for WLAN *\/$/;"	e	enum:__anon0bfbaecf2b03
+WORKAROUND_ERRONEOUS_ANSWER	guest/hals/ril/reference-ril/reference-ril.c	/^#define WORKAROUND_ERRONEOUS_ANSWER /;"	d	file:
+WORKAROUND_FAKE_CGEV	guest/hals/ril/reference-ril/reference-ril.c	/^#define WORKAROUND_FAKE_CGEV /;"	d	file:
+WPA_SRC_FILE	guest/libs/wpa_supplicant_8_lib/Android.mk	/^WPA_SRC_FILE :=$/;"	m
+WPA_SUPPLICANT_VERSION	shared/BoardConfig.mk	/^WPA_SUPPLICANT_VERSION      := VER_0_8_X$/;"	m
+WPA_SUPPL_DIR	guest/libs/wpa_supplicant_8_lib/Android.mk	/^WPA_SUPPL_DIR = external\/wpa_supplicant_8$/;"	m
+WPA_SUPPL_DIR_INCLUDE	guest/libs/wpa_supplicant_8_lib/Android.mk	/^WPA_SUPPL_DIR_INCLUDE = $(WPA_SUPPL_DIR)\/src \\$/;"	m
+Wait	common/libs/utils/subprocess.cpp	/^int Subprocess::Wait() {$/;"	f	class:cuttlefish::Subprocess	typeref:typename:int
+Wait	common/libs/utils/subprocess.cpp	/^pid_t Subprocess::Wait(int* wstatus, int options) {$/;"	f	class:cuttlefish::Subprocess	typeref:typename:pid_t
+WaitAndroidMode	host/libs/confui/host_mode_ctrl.h	/^  void WaitAndroidMode() {$/;"	f	class:cuttlefish::HostModeCtrl	typeref:typename:void
+WaitAndroidMode	host/libs/screen_connector/screen_connector_ctrl.h	/^  void WaitAndroidMode() {$/;"	f	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:void
+WaitEmpty	host/libs/screen_connector/screen_connector_queue.h	/^  void WaitEmpty() {$/;"	f	class:cuttlefish::ScreenConnectorQueue	typeref:typename:void
+WaitForAdbDisconnection	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^void WaitForAdbDisconnection(const std::string& address) {$/;"	f	namespace:__anon734383cf0111	typeref:typename:void
+WaitForAdbdToBeStarted	common/frontend/socket_vsock_proxy/main.cpp	/^void WaitForAdbdToBeStarted(int events_fd) {$/;"	f	namespace:__anon913036200111	typeref:typename:void
+WakeType	guest/hals/ril/reference-libril/ril.cpp	/^enum WakeType {DONT_WAKE, WAKE_PARTIAL};$/;"	g	namespace:android	file:
+WakeupFromSleep	host/commands/modem_simulator/network_service.cpp	/^bool NetworkService::WakeupFromSleep() {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:bool
+WarnOnFail	tools/create_base_image.go	/^    WarnOnFail$/;"	c	package:main
+WaylandScreenConnector	host/libs/screen_connector/wayland_screen_connector.cpp	/^WaylandScreenConnector::WaylandScreenConnector(int frames_fd) {$/;"	f	class:cuttlefish::WaylandScreenConnector
+WaylandScreenConnector	host/libs/screen_connector/wayland_screen_connector.h	/^class WaylandScreenConnector {$/;"	c	namespace:cuttlefish
+WaylandServer	host/libs/wayland/wayland_server.cpp	/^WaylandServer::WaylandServer(int wayland_socket_fd) {$/;"	f	class:wayland::WaylandServer
+WaylandServer	host/libs/wayland/wayland_server.h	/^class WaylandServer {$/;"	c	namespace:wayland
+WaylandServerState	host/libs/wayland/wayland_server.cpp	/^struct WaylandServerState {$/;"	s	namespace:wayland::internal	file:
+WeakFD	common/libs/fs/shared_fd.h	/^  WeakFD(SharedFD shared_fd) : value_(shared_fd.value_) {}$/;"	f	class:cuttlefish::WeakFD
+WeakFD	common/libs/fs/shared_fd.h	/^class WeakFD {$/;"	c	namespace:cuttlefish
+WebRtcBinary	host/libs/config/known_paths.cpp	/^std::string WebRtcBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+WebRtcComponent	host/frontend/webrtc/main.cpp	/^fruit::Component<cuttlefish::CustomActionConfigProvider> WebRtcComponent() {$/;"	f	typeref:typename:fruit::Component<cuttlefish::CustomActionConfigProvider>
+WebRtcScProcessedFrame	host/frontend/webrtc/display_handler.h	/^struct WebRtcScProcessedFrame : public ScreenConnectorFrameInfo {$/;"	s	namespace:cuttlefish
+WebRtcServer	host/commands/run_cvd/launch_streamer.cpp	/^class WebRtcServer : public virtual CommandSource,$/;"	c	namespace:cuttlefish::__anon6b0274e10111	file:
+WebRtcSigServerBinary	host/libs/config/known_paths.cpp	/^std::string WebRtcSigServerBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+WebSocketHandler	host/libs/websocket/websocket_handler.cpp	/^WebSocketHandler::WebSocketHandler(struct lws* wsi) : wsi_(wsi) {}$/;"	f	class:cuttlefish::WebSocketHandler
+WebSocketHandler	host/libs/websocket/websocket_handler.h	/^class WebSocketHandler {$/;"	c	namespace:cuttlefish
+WebSocketHandlerFactory	host/libs/websocket/websocket_handler.h	/^class WebSocketHandlerFactory {$/;"	c	namespace:cuttlefish
+WebSocketServer	host/libs/websocket/websocket_server.cpp	/^WebSocketServer::WebSocketServer(const char* protocol_name,$/;"	f	class:cuttlefish::WebSocketServer
+WebSocketServer	host/libs/websocket/websocket_server.h	/^class WebSocketServer {$/;"	c	namespace:cuttlefish
+WebsocketCallback	host/libs/websocket/websocket_server.cpp	/^int WebSocketServer::WebsocketCallback(struct lws* wsi,$/;"	f	class:cuttlefish::WebSocketServer	typeref:typename:int
+WebsocketConnector	host/frontend/webrtc_operator/assets/js/server_connector.js	/^class WebsocketConnector extends Connector {$/;"	c
+Width	host/libs/confui/host_renderer.h	/^  int Width() const { return w_; }$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:int
+WifiE2eTests	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^public class WifiE2eTests {$/;"	c
+WifiNetworkConnected	host/commands/kernel_log_monitor/kernel_log_server.h	/^  WifiNetworkConnected = 3,$/;"	e	enum:monitor::Event
+WithServerErrorRetry	host/commands/fetcher/curl_wrapper.cc	/^\/* static *\/ std::unique_ptr<CurlWrapper> CurlWrapper::WithServerErrorRetry($/;"	f	class:cuttlefish::CurlWrapper	typeref:typename:std::unique_ptr<CurlWrapper>
+WmediumdBinary	host/libs/config/known_paths.cpp	/^std::string WmediumdBinary() { return HostBinaryPath("wmediumd"); }$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+WmediumdController	host/libs/wmediumd_controller/wmediumd_controller.h	/^  WmediumdController() {}$/;"	f	class:cuttlefish::WmediumdController
+WmediumdController	host/libs/wmediumd_controller/wmediumd_controller.h	/^class WmediumdController {$/;"	c	namespace:cuttlefish
+WmediumdGenConfigBinary	host/libs/config/known_paths.cpp	/^std::string WmediumdGenConfigBinary() {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+WmediumdMessage	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^class WmediumdMessage {$/;"	c	namespace:cuttlefish
+WmediumdMessageReloadConfig	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  WmediumdMessageReloadConfig(const std::string& configPath)$/;"	f	class:cuttlefish::WmediumdMessageReloadConfig
+WmediumdMessageReloadConfig	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^class WmediumdMessageReloadConfig : public WmediumdMessage {$/;"	c	namespace:cuttlefish
+WmediumdMessageReloadCurrentConfig	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^class WmediumdMessageReloadCurrentConfig : public WmediumdMessage {$/;"	c	namespace:cuttlefish
+WmediumdMessageSetControl	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  WmediumdMessageSetControl(uint32_t flags) : flags_(flags) {}$/;"	f	class:cuttlefish::WmediumdMessageSetControl
+WmediumdMessageSetControl	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^class WmediumdMessageSetControl : public WmediumdMessage {$/;"	c	namespace:cuttlefish
+WmediumdMessageSetSnr	host/libs/wmediumd_controller/wmediumd_api_protocol.cpp	/^WmediumdMessageSetSnr::WmediumdMessageSetSnr(const std::string& node1,$/;"	f	class:cuttlefish::WmediumdMessageSetSnr
+WmediumdMessageSetSnr	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^class WmediumdMessageSetSnr : public WmediumdMessage {$/;"	c	namespace:cuttlefish
+WmediumdMessageType	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^enum class WmediumdMessageType : uint32_t {$/;"	g	namespace:cuttlefish	typeref:typename:uint32_t
+WmediumdServer	host/commands/run_cvd/launch.cc	/^class WmediumdServer : public CommandSource {$/;"	c	namespace:cuttlefish	file:
+Write	common/libs/fs/shared_fd.cpp	/^ssize_t FileInstance::Write(const void* buf, size_t count) {$/;"	f	class:cuttlefish::FileInstance	typeref:typename:ssize_t
+Write	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::Write(const char* data, unsigned int size) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+Write	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::Write(const std::vector<char>& data) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+Write	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::Write(int32_t data) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+Write	host/commands/secure_env/fragile_tpm_storage.cpp	/^bool FragileTpmStorage::Write($/;"	f	class:cuttlefish::FragileTpmStorage	typeref:typename:bool
+Write	host/commands/secure_env/insecure_fallback_storage.cpp	/^bool InsecureFallbackStorage::Write($/;"	f	class:cuttlefish::InsecureFallbackStorage	typeref:typename:bool
+WriteAll	common/libs/fs/shared_buf.cc	/^ssize_t WriteAll(SharedFD fd, const char* buf, size_t size) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+WriteAll	common/libs/fs/shared_buf.cc	/^ssize_t WriteAll(SharedFD fd, const std::string& buf) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+WriteAll	common/libs/fs/shared_buf.cc	/^ssize_t WriteAll(SharedFD fd, const std::vector<char>& buf) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+WriteAllBinary	common/libs/fs/shared_buf.h	/^ssize_t WriteAllBinary(SharedFD fd, const T* binary_data) {$/;"	f	namespace:cuttlefish	typeref:typename:ssize_t
+WriteBeginning	host/libs/image_aggregator/image_aggregator.cc	/^bool WriteBeginning(SharedFD out, const GptBeginning& beginning) {$/;"	f	namespace:cuttlefish::__anon02806fd80111	typeref:typename:bool
+WriteBytes	host/libs/confui/cbor.cc	/^bool Cbor::WriteBytes(uint64_t value, uint8_t size) {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:bool
+WriteBytesToBuffer	host/libs/confui/cbor.cc	/^bool Cbor::WriteBytesToBuffer(const std::vector<std::uint8_t>& bytes) {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:bool
+WriteCommonHttpHeaders	host/libs/websocket/websocket_server.cpp	/^bool WriteCommonHttpHeaders(int status, const char* mime_type,$/;"	f	namespace:cuttlefish::__anon8185be2f0111	typeref:typename:bool
+WriteEnd	host/libs/image_aggregator/image_aggregator.cc	/^bool WriteEnd(SharedFD out, const GptEnd& end) {$/;"	f	namespace:cuttlefish::__anon02806fd80111	typeref:typename:bool
+WriteEnvironment	host/commands/assemble_cvd/boot_config.cc	/^size_t WriteEnvironment(const CuttlefishConfig& config,$/;"	f	namespace:cuttlefish::__anon0f90c2e70111	typeref:typename:size_t
+WriteEvent	host/commands/kernel_log_monitor/utils.cc	/^bool WriteEvent(cuttlefish::SharedFD fd, const Json::Value& event_message) {$/;"	f	namespace:monitor	typeref:typename:bool
+WriteFailureRecord	host/commands/secure_env/soft_gatekeeper.h	/^    virtual bool WriteFailureRecord(uint32_t uid, failure_record_t* record, bool \/* secure *\/)/;"	f	class:gatekeeper::SoftGateKeeper	typeref:typename:bool
+WriteFailureRecord	host/commands/secure_env/tpm_gatekeeper.cpp	/^bool TpmGatekeeper::WriteFailureRecord($/;"	f	class:cuttlefish::TpmGatekeeper	typeref:typename:bool
+WriteFailureRecordImpl	host/commands/secure_env/tpm_gatekeeper.cpp	/^static bool WriteFailureRecordImpl($/;"	f	namespace:cuttlefish	typeref:typename:bool	file:
+WriteFiles	host/commands/start/main.cc	/^void WriteFiles(cuttlefish::FetcherConfig fetcher_config, cuttlefish::SharedFD out) {$/;"	f	namespace:__anon8e1e78490111	typeref:typename:void
+WriteGflagsCompatHelpXml	host/commands/assemble_cvd/flag_feature.cpp	/^  bool WriteGflagsCompatHelpXml(std::ostream& out) const override {$/;"	f	class:cuttlefish::ParseGflagsImpl	typeref:typename:bool	file:
+WriteGflagsCompatHelpXml	host/libs/config/adb/flags.cpp	/^  bool WriteGflagsCompatHelpXml(std::ostream& out) const override {$/;"	f	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:bool	file:
+WriteGflagsCompatHelpXml	host/libs/config/config_flag.cpp	/^  bool WriteGflagsCompatHelpXml(std::ostream& out) const override {$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:bool	file:
+WriteGflagsCompatHelpXml	host/libs/config/config_flag.cpp	/^  bool WriteGflagsCompatHelpXml(std::ostream&) const override { return true; }$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigFlagPlaceholderImpl	typeref:typename:bool	file:
+WriteGflagsCompatHelpXml	host/libs/config/config_flag.cpp	/^  bool WriteGflagsCompatHelpXml(std::ostream&) const override { return true; }$/;"	f	class:cuttlefish::__anon2e549bd00111::ConfigReader	typeref:typename:bool	file:
+WriteGflagsCompatHelpXml	host/libs/config/config_flag.cpp	/^  bool WriteGflagsCompatHelpXml(std::ostream&) const override {$/;"	f	class:cuttlefish::__anon2e549bd00111::SystemImageDirFlagImpl	typeref:typename:bool	file:
+WriteGflagsCompatHelpXml	host/libs/config/custom_actions.cpp	/^  bool WriteGflagsCompatHelpXml(std::ostream& out) const override {$/;"	f	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:bool	file:
+WriteGflagsCompatXml	common/libs/utils/flag_parser.cpp	/^bool Flag::WriteGflagsCompatXml(std::ostream& out) const {$/;"	f	class:cuttlefish::Flag	typeref:typename:bool
+WriteGflagsCompatXml	common/libs/utils/flag_parser.cpp	/^bool WriteGflagsCompatXml(const std::vector<Flag>& flags, std::ostream& out) {$/;"	f	namespace:cuttlefish	typeref:typename:bool
+WriteGflagsHelpXml	host/libs/config/feature.cpp	/^bool FlagFeature::WriteGflagsHelpXml(const std::vector<FlagFeature*>& features,$/;"	f	class:cuttlefish::FlagFeature	typeref:typename:bool
+WriteHeader	host/libs/confui/cbor.cc	/^bool Cbor::WriteHeader(const Cbor::Type type, const std::uint64_t value) {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:bool
+WriteLoop	host/commands/console_forwarder/main.cpp	/^  [[noreturn]] void WriteLoop() {$/;"	f	class:cuttlefish::ConsoleForwarder	typeref:typename:void	file:
+WriteMessage	common/libs/utils/unix_sockets.cpp	/^Result<void> UnixMessageSocket::WriteMessage(const UnixSocketMessage& message) {$/;"	f	class:cuttlefish::UnixMessageSocket	typeref:typename:Result<void>
+WriteMessage	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::WriteMessage(const Json::Value& data) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+WriteMessage	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::WriteMessage(const std::string& data) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+WriteMessage	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::WriteMessage(const std::vector<char>& data) {$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+WriteMiscInfo	host/commands/assemble_cvd/misc_info.cc	/^std::string WriteMiscInfo(const MiscInfo& misc_info) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+WritePayload	common/libs/confui/packet.h	/^bool WritePayload(SharedFD d, const std::string& cmd_str,$/;"	f	namespace:cuttlefish::confui::packet	typeref:typename:bool
+WriteProtectedJsonToFile	host/commands/secure_env/json_serializable.cpp	/^bool WriteProtectedJsonToFile($/;"	f	namespace:cuttlefish	typeref:typename:bool
+WriteStrides	common/libs/utils/vsock_connection.cpp	/^bool VsockConnection::WriteStrides(const char* data, unsigned int size,$/;"	f	class:cuttlefish::VsockConnection	typeref:typename:bool
+WriteTextToBuffer	host/libs/confui/cbor.cc	/^bool Cbor::WriteTextToBuffer(const std::string& text) {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:bool
+WriteWsBuffer	host/libs/websocket/websocket_handler.cpp	/^void WebSocketHandler::WriteWsBuffer(WebSocketHandler::WsBuffer& ws_buffer) {$/;"	f	class:cuttlefish::WebSocketHandler	typeref:typename:void
+WsBuffer	host/frontend/webrtc/lib/ws_connection.cpp	/^    WsBuffer(const uint8_t* data, size_t len, bool binary)$/;"	f	struct:WsConnectionImpl::WsBuffer	file:
+WsBuffer	host/frontend/webrtc/lib/ws_connection.cpp	/^  struct WsBuffer {$/;"	s	class:WsConnectionImpl	file:
+WsBuffer	host/libs/websocket/websocket_handler.h	/^    WsBuffer(std::vector<uint8_t> data, bool binary)$/;"	f	struct:cuttlefish::WebSocketHandler::WsBuffer
+WsBuffer	host/libs/websocket/websocket_handler.h	/^  struct WsBuffer {$/;"	s	class:cuttlefish::WebSocketHandler
+WsConnection	host/frontend/webrtc/lib/ws_connection.h	/^class WsConnection {$/;"	c
+WsConnectionContext	host/frontend/webrtc/lib/ws_connection.h	/^class WsConnectionContext {$/;"	c
+WsConnectionContextImpl	host/frontend/webrtc/lib/ws_connection.cpp	/^WsConnectionContextImpl::WsConnectionContextImpl(struct lws_context* lws_ctx)$/;"	f	class:WsConnectionContextImpl
+WsConnectionContextImpl	host/frontend/webrtc/lib/ws_connection.cpp	/^class WsConnectionContextImpl$/;"	c	file:
+WsConnectionImpl	host/frontend/webrtc/lib/ws_connection.cpp	/^WsConnectionImpl::WsConnectionImpl($/;"	f	class:WsConnectionImpl
+WsConnectionImpl	host/frontend/webrtc/lib/ws_connection.cpp	/^class WsConnectionImpl : public WsConnection,$/;"	c	file:
+WsConnectionObserver	host/frontend/webrtc/lib/ws_connection.h	/^class WsConnectionObserver {$/;"	c
+X86	common/libs/utils/environment.h	/^  X86,$/;"	e	enum:cuttlefish::Arch
+X86_64	common/libs/utils/environment.h	/^  X86_64,$/;"	e	enum:cuttlefish::Arch
+XmlEscape	common/libs/utils/flag_parser.cpp	/^static std::string XmlEscape(const std::string& s) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string	file:
+XmlEscape	host/commands/assemble_cvd/flag_feature.cpp	/^static std::string XmlEscape(const std::string& s) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string	file:
+Zero	common/libs/fs/shared_select.h	/^  void Zero() {$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:void
+_UAPI_VM_SOCKETS_H	common/libs/fs/vm_sockets.h	/^#define _UAPI_VM_SOCKETS_H$/;"	d
+__NR_memfd_create	common/libs/fs/shared_fd.cpp	/^#  define __NR_memfd_create /;"	d	file:
+__STDC_LIMIT_MACROS	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^#define __STDC_LIMIT_MACROS$/;"	d	file:
+__TARGET_NO_BOOTLOADER	shared/BoardConfig.mk	/^__TARGET_NO_BOOTLOADER := $(TARGET_NO_BOOTLOADER)$/;"	m
+__anon027348120111	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^namespace {$/;"	n	namespace:wayland	file:
+__anon02806fd80111	host/libs/image_aggregator/image_aggregator.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon0281e17c0111	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon0281e17c0211	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon03bde2800111	host/commands/secure_env/tpm_attestation_record.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon050238300102	host/commands/modem_simulator/call_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300202	host/commands/modem_simulator/call_service.cpp	/^          [this](const Client& client) { this->HandleAcceptCall(client); }),$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300302	host/commands/modem_simulator/call_service.cpp	/^          [this](const Client& client) { this->HandleRejectCall(client); }),$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300402	host/commands/modem_simulator/call_service.cpp	/^          [this](const Client& client) { this->HandleCurrentCalls(client); }),$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300502	host/commands/modem_simulator/call_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300602	host/commands/modem_simulator/call_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300702	host/commands/modem_simulator/call_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300802	host/commands/modem_simulator/call_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300902	host/commands/modem_simulator/call_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300a02	host/commands/modem_simulator/call_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::CallService::InitializeCommandHandlers	file:
+__anon050238300b02	host/commands/modem_simulator/call_service.cpp	/^        makeSafeCallback<CallService>(this, [call_token](CallService* me) {$/;"	f	function:cuttlefish::CallService::HandleDial	file:
+__anon068c5ffd0102	host/commands/modem_simulator/sim_service.cpp	/^          [this](const Client& client) { this->HandleSIMStatusReq(client); }),$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0202	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0302	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0402	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0502	host/commands/modem_simulator/sim_service.cpp	/^          [this](const Client& client) { this->HandleGetIMSI(client); }),$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0602	host/commands/modem_simulator/sim_service.cpp	/^          [this](const Client& client) { this->HandleGetIccId(client); }),$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0702	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0802	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0902	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0a02	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0b02	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0c02	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0d02	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0e02	host/commands/modem_simulator/sim_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon068c5ffd0f02	host/commands/modem_simulator/sim_service.cpp	/^                    [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SimService::InitializeCommandHandlers	file:
+__anon087586ca0111	guest/hals/keymint/remote/remote_keymint_device.cpp	/^namespace {$/;"	n	namespace:aidl::android::hardware::security::keymint	file:
+__anon08fbc66c0102	guest/commands/bt_vhci_forwarder/main.cpp	/^      [](const std::vector<uint8_t>& \/* raw_command *\/) {$/;"	f	function:main	file:
+__anon08fbc66c0202	guest/commands/bt_vhci_forwarder/main.cpp	/^      [vhci_fd](const std::vector<uint8_t>& raw_event) {$/;"	f	function:main	file:
+__anon08fbc66c0302	guest/commands/bt_vhci_forwarder/main.cpp	/^      [vhci_fd](const std::vector<uint8_t>& raw_acl) {$/;"	f	function:main	file:
+__anon08fbc66c0402	guest/commands/bt_vhci_forwarder/main.cpp	/^      [vhci_fd](const std::vector<uint8_t>& raw_sco) {$/;"	f	function:main	file:
+__anon08fbc66c0502	guest/commands/bt_vhci_forwarder/main.cpp	/^      [vhci_fd](const std::vector<uint8_t>& raw_iso) {$/;"	f	function:main	file:
+__anon08fbc66c0602	guest/commands/bt_vhci_forwarder/main.cpp	/^      []() { LOG(INFO) << "HCI socket device disconnected"; });$/;"	f	function:main	file:
+__anon0a6d9b510111	host/commands/secure_env/secure_env.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon0a6d9b510202	host/commands/secure_env/secure_env.cpp	/^  return std::thread([kernel_events_fd]() {$/;"	f	function:cuttlefish::__anon0a6d9b510111::StartKernelEventMonitor	file:
+__anon0a6d9b510302	host/commands/secure_env/secure_env.cpp	/^      []() -> Tpm* {  \/\/ fruit will take ownership$/;"	f	function:cuttlefish::__anon0a6d9b510111::SecureEnvComponent	typeref:typename:Tpm *	file:
+__anon0a6d9b510402	host/commands/secure_env/secure_env.cpp	/^      nullptr, [](ESYS_CONTEXT* esys) { Esys_Finalize(&esys); });$/;"	f	function:cuttlefish::SecureEnvMain	file:
+__anon0a6d9b510502	host/commands/secure_env/secure_env.cpp	/^  threads.emplace_back([keymaster_in, keymaster_out, &keymaster]() {$/;"	f	function:cuttlefish::SecureEnvMain	file:
+__anon0a6d9b510602	host/commands/secure_env/secure_env.cpp	/^  threads.emplace_back([gatekeeper_in, gatekeeper_out, &gatekeeper]() {$/;"	f	function:cuttlefish::SecureEnvMain	file:
+__anon0bfbaecf0103	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0203	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0303	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0403	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0503	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0603	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0703	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0803	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0903	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0a08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf0b03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0c03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0d03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0e03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf0f08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1008	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1408	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1508	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1608	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1703	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf1808	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf190a	guest/hals/ril/reference-libril/ril.h	/^    union {$/;"	u	struct:__anon0bfbaecf1808
+__anon0bfbaecf1a08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1b08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1c08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1d08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1e08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf1f08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2008	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2408	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2503	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf2608	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2708	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2803	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf2908	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2a08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2b03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf2c08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2d03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf2e08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf2f03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3003	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf3203	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3303	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3403	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3503	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3603	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3703	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3808	guest/hals/ril/reference-libril/ril.h	/^{$/;"	s
+__anon0bfbaecf3908	guest/hals/ril/reference-libril/ril.h	/^{$/;"	s
+__anon0bfbaecf3a08	guest/hals/ril/reference-libril/ril.h	/^{$/;"	s
+__anon0bfbaecf3b08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf3c08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf3d03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf3e08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf3f08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4003	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf4108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4408	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4503	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf4608	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4708	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4808	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4908	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4a08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4b08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4c08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4d08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4e08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf4f08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5008	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5403	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf5503	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf5608	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5708	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5808	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5908	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5a08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5b08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5c08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5d08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5e08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf5f08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6008	guest/hals/ril/reference-libril/ril.h	/^typedef struct  {$/;"	s
+__anon0bfbaecf6108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6408	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6508	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6608	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6708	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6808	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6908	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6a08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6b03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf6c03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf6d03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf6e08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf6f0a	guest/hals/ril/reference-libril/ril.h	/^  union {$/;"	u	struct:__anon0bfbaecf6e08
+__anon0bfbaecf7008	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf710a	guest/hals/ril/reference-libril/ril.h	/^  union {$/;"	u	struct:__anon0bfbaecf7008
+__anon0bfbaecf7208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf730a	guest/hals/ril/reference-libril/ril.h	/^  union {$/;"	u	struct:__anon0bfbaecf7208
+__anon0bfbaecf7408	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf750a	guest/hals/ril/reference-libril/ril.h	/^  union {$/;"	u	struct:__anon0bfbaecf7408
+__anon0bfbaecf7608	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf770a	guest/hals/ril/reference-libril/ril.h	/^  union {$/;"	u	struct:__anon0bfbaecf7608
+__anon0bfbaecf7808	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf7908	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf7a08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf7b08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf7c08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf7d08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf7e0a	guest/hals/ril/reference-libril/ril.h	/^    union {$/;"	u	struct:__anon0bfbaecf7d08
+__anon0bfbaecf7f08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8008	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8103	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf8208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8403	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf8508	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8608	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8708	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8808	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8908	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8a0a	guest/hals/ril/reference-libril/ril.h	/^  union {$/;"	u	struct:__anon0bfbaecf8908
+__anon0bfbaecf8b08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8c08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8d08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf8e03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf8f03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf9003	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf9108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf9208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf9308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf940a	guest/hals/ril/reference-libril/ril.h	/^  union {$/;"	u	struct:__anon0bfbaecf9308
+__anon0bfbaecf9503	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf9603	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf9703	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf9808	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf9908	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf9a0a	guest/hals/ril/reference-libril/ril.h	/^  union {$/;"	u	struct:__anon0bfbaecf9908
+__anon0bfbaecf9b03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecf9c08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf9d08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf9e08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecf9f08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfa003	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfa103	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfa203	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfa308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfa403	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfa503	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfa608	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfa703	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfa803	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfa903	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfaa03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfab08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfac0a	guest/hals/ril/reference-libril/ril.h	/^    union {$/;"	u	struct:__anon0bfbaecfab08
+__anon0bfbaecfad08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfae08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfaf0a	guest/hals/ril/reference-libril/ril.h	/^    union {$/;"	u	struct:__anon0bfbaecfae08
+__anon0bfbaecfb008	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfb108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfb203	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfb308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfb403	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfb503	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfb603	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfb708	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfb803	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfb908	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfba08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfbb08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfbc08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfbd08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfbe03	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfbf08	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfc008	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfc108	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfc208	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfc308	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfc403	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfc508	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0bfbaecfc603	guest/hals/ril/reference-libril/ril.h	/^typedef enum {$/;"	g
+__anon0bfbaecfc708	guest/hals/ril/reference-libril/ril.h	/^typedef struct {$/;"	s
+__anon0f90c2e70111	host/commands/assemble_cvd/boot_config.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon1055ca380111	guest/hals/camera/cached_stream_buffer.cpp	/^namespace {$/;"	n	namespace:android::hardware::camera::device::V3_4::implementation	file:
+__anon12e4c76c0111	host/libs/config/custom_actions.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon12e4c76c0202	host/libs/config/custom_actions.cpp	/^        [this]() { return custom_action_config_; });$/;"	f	function:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl::INJECT	file:
+__anon12e4c76c0302	host/libs/config/custom_actions.cpp	/^    custom_action_config_flag_.Setter([this](const FlagMatch& match) {$/;"	f	function:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl::INJECT	file:
+__anon12e4c76c0402	host/libs/config/custom_actions.cpp	/^    custom_actions_flag_.Setter([this](const FlagMatch& match) {$/;"	f	function:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl::INJECT	file:
+__anon145bfaab0111	host/commands/assemble_cvd/flags.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon145bfaab0202	host/commands/assemble_cvd/flags.cc	/^    auto calc_vsock_port = [vsock_guest_cid](const int base_port) {$/;"	f	function:cuttlefish::InitializeCuttlefishConfiguration	file:
+__anon14ee93270111	host/frontend/webrtc/lib/ws_connection.cpp	/^namespace {$/;"	n	file:
+__anon14ee93270202	host/frontend/webrtc/lib/ws_connection.cpp	/^  message_loop_ = std::thread([this]() {$/;"	f	function:WsConnectionContextImpl::Start	file:
+__anon14ee93270302	host/frontend/webrtc/lib/ws_connection.cpp	/^      [wsi, user](std::function<void(std::shared_ptr<WsConnectionImpl>)> cb) {$/;"	f	function:LwsCallback	file:
+__anon14ee93270402	host/frontend/webrtc/lib/ws_connection.cpp	/^          [in](std::shared_ptr<WsConnectionImpl> connection) {$/;"	f	function:LwsCallback	file:
+__anon14ee93270502	host/frontend/webrtc/lib/ws_connection.cpp	/^          [in, len, wsi](std::shared_ptr<WsConnectionImpl> connection) {$/;"	f	function:LwsCallback	file:
+__anon14ee93270602	host/frontend/webrtc/lib/ws_connection.cpp	/^      return with_connection([](std::shared_ptr<WsConnectionImpl> connection) {$/;"	f	function:LwsCallback	file:
+__anon14ee93270702	host/frontend/webrtc/lib/ws_connection.cpp	/^      return with_connection([](std::shared_ptr<WsConnectionImpl> connection) {$/;"	f	function:LwsCallback	file:
+__anon14ee93270802	host/frontend/webrtc/lib/ws_connection.cpp	/^      return with_connection([](std::shared_ptr<WsConnectionImpl> connection) {$/;"	f	function:LwsCallback	file:
+__anon14ee93270902	host/frontend/webrtc/lib/ws_connection.cpp	/^          [in, len](std::shared_ptr<WsConnectionImpl> connection) {$/;"	f	function:LwsCallback	file:
+__anon177786ea0102	common/libs/concurrency/semaphore.h	/^    resoure_cv_.wait(lock, [this]() -> bool { return count_ > 0; });$/;"	f	function:cuttlefish::Semaphore::SemWait	typeref:typename:bool	file:
+__anon177786ea0202	common/libs/concurrency/semaphore.h	/^    room_cv_.wait(lock, [this]() -> bool { return count_ <= capacity_; });$/;"	f	function:cuttlefish::Semaphore::SemPost	typeref:typename:bool	file:
+__anon1a1358000102	common/libs/utils/shared_fd_flag.cpp	/^  return Flag().Setter([&](const FlagMatch& mat) { return Set(mat, out); });$/;"	f	function:cuttlefish::SharedFDFlag	file:
+__anon1a1358000202	common/libs/utils/shared_fd_flag.cpp	/^      [&out](const FlagMatch& mat) { return Set(mat, out); });$/;"	f	function:cuttlefish::SharedFDFlag	file:
+__anon1e335d460111	host/commands/assemble_cvd/assemble_cvd.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon1edaaabd0111	host/libs/vm_manager/host_configuration.cpp	/^namespace {$/;"	n	namespace:cuttlefish::vm_manager	file:
+__anon1ff2f3d90111	common/libs/net/netlink_request_test.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon1ff2f3d90208	common/libs/net/netlink_request_test.cpp	/^  struct {$/;"	s	function:cuttlefish::TEST	file:
+__anon1ff2f3d90308	common/libs/net/netlink_request_test.cpp	/^  struct {$/;"	s	function:cuttlefish::TEST	file:
+__anon1ff2f3d90408	common/libs/net/netlink_request_test.cpp	/^  constexpr struct __attribute__((__packed__)) {$/;"	s	function:cuttlefish::TEST	file:
+__anon1ff2f3d90508	common/libs/net/netlink_request_test.cpp	/^  struct {$/;"	s	function:cuttlefish::TEST	file:
+__anon1ff2f3d90608	common/libs/net/netlink_request_test.cpp	/^  struct {$/;"	s	function:cuttlefish::TEST	file:
+__anon1ff2f3d90708	common/libs/net/netlink_request_test.cpp	/^  struct {$/;"	s	function:cuttlefish::TEST	file:
+__anon1ff2f3d90808	common/libs/net/netlink_request_test.cpp	/^  struct {$/;"	s	function:cuttlefish::TEST	file:
+__anon20b0d9c80102	host/libs/vm_manager/crosvm_builder.cpp	/^  command_.SetStopper([crosvm, control_socket](Subprocess* proc) {$/;"	f	function:cuttlefish::CrosvmBuilder::AddControlSocket	file:
+__anon2184467c0111	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^namespace {$/;"	n	namespace:android::hardware::confirmationui::V1_0::implementation	file:
+__anon2184467c0202	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^    auto fetching_cmd = [this]() { HostMessageFetcherLoop(); };$/;"	f	function:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI::TrustyConfirmationUI	file:
+__anon2184467c0302	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^                         const hidl_string& locale, const hidl_vec<UIOption>& uiOptions) {$/;"	f	function:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI::promptUserConfirmation	file:
+__anon2184467c0402	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^    listener_state_condv_.wait(stateLock, [this] {$/;"	f	function:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI::promptUserConfirmation	file:
+__anon227079aa0102	guest/hals/confirmationui/guest_session.h	/^              20, [this](GuestSession::QueueImpl* impl) { return QueueFullHandler(impl); }) {}$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	file:
+__anon2390a3680102	host/libs/screen_connector/screen_connector_queue.h	/^    auto is_empty = [this](void) { return buffer_.empty(); };$/;"	f	function:cuttlefish::ScreenConnectorQueue::WaitEmpty	file:
+__anon2390a3680202	host/libs/screen_connector/screen_connector_queue.h	/^          [this](void){ return buffer_.empty(); };$/;"	f	function:cuttlefish::ScreenConnectorQueue::Push	file:
+__anon2426deb60111	guest/hals/camera/vsock_frame_provider.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon2426deb60202	guest/hals/camera/vsock_frame_provider.cpp	/^      std::thread([this, width, height] { VsockReadLoop(width, height); });$/;"	f	function:cuttlefish::VsockFrameProvider::start	file:
+__anon2426deb60302	guest/hals/camera/vsock_frame_provider.cpp	/^      lock, timeout, [this, now] { return timestamp_.load() > now; });$/;"	f	function:cuttlefish::VsockFrameProvider::waitYUVFrame	file:
+__anon27bf4bcd0102	common/libs/utils/flag_parser.cpp	/^  auto setter = [&](FlagMatch) {$/;"	f	function:cuttlefish::HelpFlag	file:
+__anon27bf4bcd0202	common/libs/utils/flag_parser.cpp	/^      .Setter([](const FlagMatch& match) {$/;"	f	function:cuttlefish::InvalidFlagGuard	file:
+__anon27bf4bcd0302	common/libs/utils/flag_parser.cpp	/^      .Setter([](const FlagMatch& match) {$/;"	f	function:cuttlefish::UnexpectedArgumentGuard	file:
+__anon27bf4bcd0402	common/libs/utils/flag_parser.cpp	/^      .Getter([&value]() { return value; })$/;"	f	function:cuttlefish::GflagsCompatFlag	file:
+__anon27bf4bcd0502	common/libs/utils/flag_parser.cpp	/^      .Setter([&value](const FlagMatch& match) {$/;"	f	function:cuttlefish::GflagsCompatFlag	file:
+__anon27bf4bcd0602	common/libs/utils/flag_parser.cpp	/^      .Getter([&value]() { return std::to_string(value); })$/;"	f	function:cuttlefish::GflagsCompatNumericFlagGeneric	file:
+__anon27bf4bcd0702	common/libs/utils/flag_parser.cpp	/^      .Setter([&value](const FlagMatch& match) {$/;"	f	function:cuttlefish::GflagsCompatNumericFlagGeneric	file:
+__anon27bf4bcd0802	common/libs/utils/flag_parser.cpp	/^      .Getter([&value]() { return value ? "true" : "false"; })$/;"	f	function:cuttlefish::GflagsCompatFlag	file:
+__anon27bf4bcd0902	common/libs/utils/flag_parser.cpp	/^      .Setter([name, &value](const FlagMatch& match) {$/;"	f	function:cuttlefish::GflagsCompatFlag	file:
+__anon29a199ff0111	host/libs/graphics_detector/graphics_detector.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon29a199ff0202	host/libs/graphics_detector/graphics_detector.cpp	/^  auto EglLoadFunction = [&](const char* name) {$/;"	f	function:cuttlefish::__anon29a199ff0111::PopulateEglAvailability	file:
+__anon29a199ff0302	host/libs/graphics_detector/graphics_detector.cpp	/^  Closer context_closer([&]() { eglDestroyContext(display, context); });$/;"	f	function:cuttlefish::__anon29a199ff0111::PopulateEglAvailability	file:
+__anon29a199ff0402	host/libs/graphics_detector/graphics_detector.cpp	/^  Closer instancecloser([&]() {vkDestroyInstance(instance, nullptr); });$/;"	f	function:cuttlefish::__anon29a199ff0111::PopulateVulkanAvailability	file:
+__anon29a199ff0502	host/libs/graphics_detector/graphics_detector.cpp	/^                 [](unsigned char c) { return std::tolower(c); });$/;"	f	function:cuttlefish::__anon29a199ff0111::ToLower	file:
+__anon29cd72800111	guest/hals/camera/vsock_camera_server.cpp	/^namespace {$/;"	n	namespace:android::hardware::camera::provider::V2_7::implementation	file:
+__anon29cd72800202	guest/hals/camera/vsock_camera_server.cpp	/^  server_thread_ = std::thread([this, port, cid] { serverLoop(port, cid); });$/;"	f	function:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer::start	file:
+__anon2a3d92f70111	host/frontend/webrtc/audio_handler.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon2a3d92f70202	host/frontend/webrtc/audio_handler.cpp	/^  server_thread_ = std::thread([this]() { Loop(); });$/;"	f	function:cuttlefish::AudioHandler::Start	file:
+__anon2a3d92f70302	host/frontend/webrtc/audio_handler.cpp	/^    std::thread playback_thread([this, &audio_client]() {$/;"	f	function:cuttlefish::AudioHandler::Loop	file:
+__anon2a3d92f70402	host/frontend/webrtc/audio_handler.cpp	/^    std::thread capture_thread([this, &audio_client]() {$/;"	f	function:cuttlefish::AudioHandler::Loop	file:
+__anon2afb66ee0102	host/frontend/webrtc/lib/local_recorder.cpp	/^  display->encoder_thread_ = std::thread([](Display* display) {$/;"	f	function:cuttlefish::webrtc_streaming::LocalRecorder::AddDisplay	file:
+__anon2c505fdf0111	host/frontend/webrtc/lib/utils.cpp	/^namespace {$/;"	n	namespace:cuttlefish::webrtc_streaming	file:
+__anon2cec80f10111	host/libs/config/cuttlefish_config.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon2d61e9d10111	host/libs/config/adb/data.cpp	/^namespace {}$/;"	n	namespace:cuttlefish	file:
+__anon2e549bd00111	host/libs/config/config_flag.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon2e549bd00202	host/libs/config/config_flag.cpp	/^    auto getter = [this]() { return config_; };$/;"	f	function:cuttlefish::__anon2e549bd00111::ConfigFlagImpl::INJECT	file:
+__anon2e549bd00302	host/libs/config/config_flag.cpp	/^    auto setter = [this](const FlagMatch& m) { return ChooseConfig(m.value); };$/;"	f	function:cuttlefish::__anon2e549bd00111::ConfigFlagImpl::INJECT	file:
+__anon316d80cb0103	guest/hals/ril/reference-libril/ril_ex.h	/^typedef enum {$/;"	g
+__anon3442b2250111	host/libs/config/cuttlefish_config_instance.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon39e8abf00111	common/libs/utils/subprocess.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon39e8abf00202	common/libs/utils/subprocess.cpp	/^    stdin_thread = std::thread([pipe_write, stdin_str, &io_error]() {$/;"	f	function:cuttlefish::RunWithManagedStdio	file:
+__anon39e8abf00302	common/libs/utils/subprocess.cpp	/^    stdout_thread = std::thread([pipe_read, stdout_str, &io_error]() {$/;"	f	function:cuttlefish::RunWithManagedStdio	file:
+__anon39e8abf00402	common/libs/utils/subprocess.cpp	/^    stderr_thread = std::thread([pipe_read, stderr_str, &io_error]() {$/;"	f	function:cuttlefish::RunWithManagedStdio	file:
+__anon3ad7623b0102	host/frontend/webrtc/kernel_log_events_handler.cpp	/^      read_thread_([this]() { ReadLoop(); }) {}$/;"	f	namespace:cuttlefish	file:
+__anon3daf7c700102	common/libs/confui/utils.h	/^  ([&ss, &delim](auto& arg) { ss << arg << delim; }(args), ...);$/;"	f	function:cuttlefish::confui::ArgsToStringWithDelim	file:
+__anon3daf7c700202	common/libs/confui/utils.h	/^                     [](int c) -> bool { return std::isdigit(c); });$/;"	f	function:cuttlefish::confui::IsOnlyDigits	typeref:typename:bool	file:
+__anon3fa4410d0102	host/commands/run_cvd/process_monitor.cc	/^  std::thread parent_comms_thread([&running, this]() {$/;"	f	function:cuttlefish::ProcessMonitor::MonitorRoutine	file:
+__anon3fa4410d0202	host/commands/run_cvd/process_monitor.cc	/^    auto matches = [pid](const auto& it) { return it.proc->pid() == pid; };$/;"	f	function:cuttlefish::ProcessMonitor::MonitorRoutine	file:
+__anon3fa4410d0302	host/commands/run_cvd/process_monitor.cc	/^  auto stop = [](const auto& it) {$/;"	f	function:cuttlefish::ProcessMonitor::MonitorRoutine	file:
+__anon40cdc2c70111	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^namespace {$/;"	n	file:
+__anon4361040d0102	host/libs/config/feature.cpp	/^  auto add_feature = [&ordered_features](Feature* feature) -> bool {$/;"	f	function:cuttlefish::Feature::RunSetup	typeref:typename:bool	file:
+__anon4361040d0202	host/libs/config/feature.cpp	/^  auto handle = [&flags](FlagFeature* feature) -> bool {$/;"	f	function:cuttlefish::FlagFeature::ProcessFlags	typeref:typename:bool	file:
+__anon4552bec90111	host/commands/start/flag_forwarder.cc	/^namespace {$/;"	n	file:
+__anon459bf0e40111	host/libs/config/adb/flags.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon459bf0e40202	host/libs/config/adb/flags.cpp	/^    mode_flag_.Getter([this]() {$/;"	f	function:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl::INJECT	file:
+__anon459bf0e40302	host/libs/config/adb/flags.cpp	/^    mode_flag_.Setter([this](const FlagMatch& match) {$/;"	f	function:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl::INJECT	file:
+__anon473d11590111	host/libs/wayland/wayland_compositor.cpp	/^namespace {$/;"	n	namespace:wayland	file:
+__anon477f946a0111	host/frontend/webrtc_operator/server.cpp	/^namespace {$/;"	n	file:
+__anon477f946a0202	host/frontend/webrtc_operator/server.cpp	/^      kListDevicesUriPath, [&device_registry](struct lws* wsi) {$/;"	f	function:main	file:
+__anon477f946a0302	host/frontend/webrtc_operator/server.cpp	/^      kInfraConfigPath, [&server_config](struct lws* wsi) {$/;"	f	function:main	file:
+__anon477f946a0402	host/frontend/webrtc_operator/server.cpp	/^      kConnectPath, [&device_registry, &poll_store](struct lws* wsi) {$/;"	f	function:main	file:
+__anon477f946a0502	host/frontend/webrtc_operator/server.cpp	/^      kForwardPath, [&poll_store](struct lws* wsi) {$/;"	f	function:main	file:
+__anon477f946a0602	host/frontend/webrtc_operator/server.cpp	/^      kPollPath, [&poll_store](struct lws* wsi) {$/;"	f	function:main	file:
+__anon483fb9980111	host/commands/cvd/main.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon49de69e60111	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^namespace {$/;"	n	namespace:keymaster::V4_1	file:
+__anon4b86e7460102	host/libs/confui/host_server.cc	/^      [](ThreadSafeQueue<std::unique_ptr<ConfUiMessage>>::QueueImpl*) {$/;"	f	function:cuttlefish::confui::HostServer::HostServer	file:
+__anon4b86e7460202	host/libs/confui/host_server.cc	/^  auto hal_cmd_fetching = [this]() { this->HalCmdFetcherLoop(); };$/;"	f	function:cuttlefish::confui::HostServer::Start	file:
+__anon4b86e7460302	host/libs/confui/host_server.cc	/^  auto main = [this]() { this->MainLoop(); };$/;"	f	function:cuttlefish::confui::HostServer::Start	file:
+__anon4be913be0102	guest/commands/sensor_injection/main.cpp	/^      sensors->getSensorsList_2_1([&](const auto& list) {$/;"	f	function:getSensorHandle	file:
+__anon4e57c5f20102	host/libs/config/feature.h	/^  visit = [&callback, &features_status, &visit](Subclass* feature) -> bool {$/;"	f	function:cuttlefish::FeatureSuperclass::TopologicalVisit	typeref:typename:bool	file:
+__anon4ec25d870111	common/libs/device_config/guest_device_config.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon512a2c1f0103	guest/hals/ril/reference-ril/atchannel.h	/^typedef enum {$/;"	g
+__anon512a2c1f0208	guest/hals/ril/reference-ril/atchannel.h	/^typedef struct {$/;"	s
+__anon512a2c1f0303	guest/hals/ril/reference-ril/atchannel.h	/^typedef enum {$/;"	g
+__anon521370420102	host/commands/fetcher/build_api.h	/^   return std::visit([this](auto&& arg) { return Artifacts(arg); }, build);$/;"	f	function:cuttlefish::BuildApi::Artifacts	file:
+__anon521370420202	host/commands/fetcher/build_api.h	/^    return std::visit([this, &artifact, &path](auto&& arg) {$/;"	f	function:cuttlefish::BuildApi::ArtifactToFile	file:
+__anon527e8bd40111	host/commands/run_cvd/server_loop.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon550da8bf0102	host/frontend/webrtc/connection_observer.cpp	/^      std::thread th([this]() {$/;"	f	function:cuttlefish::ConnectionObserverImpl::OnConnected	file:
+__anon560e372a0102	host/libs/confui/host_mode_ctrl.h	/^    auto check = [this]() -> bool {$/;"	f	function:cuttlefish::HostModeCtrl::WaitAndroidMode	typeref:typename:bool	file:
+__anon5714be600111	guest/hals/keymint/remote/service.cpp	/^namespace {$/;"	n	file:
+__anon587bcda10111	host/commands/assemble_cvd/clean.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon58d626b40102	guest/hals/camera/stream_buffer_cache.cpp	/^      [buffer_id](const std::shared_ptr<CachedStreamBuffer>& buffer) {$/;"	f	function:android::hardware::camera::device::V3_4::implementation::StreamBufferCache::get	file:
+__anon58d626b40202	guest/hals/camera/stream_buffer_cache.cpp	/^      [&buffer_id](const std::shared_ptr<CachedStreamBuffer>& buffer) {$/;"	f	function:android::hardware::camera::device::V3_4::implementation::StreamBufferCache::remove	file:
+__anon58d626b40302	guest/hals/camera/stream_buffer_cache.cpp	/^  auto id_match = [id](const std::shared_ptr<CachedStreamBuffer>& buffer) {$/;"	f	function:android::hardware::camera::device::V3_4::implementation::StreamBufferCache::update	file:
+__anon58d908c60102	host/libs/confui/host_renderer.cc	/^                             teeui::Color color) -> teeui::Error {$/;"	f	function:cuttlefish::confui::ConfUiRenderer::RepaintRawFrame	typeref:typename:teeui::Error	file:
+__anon5c4f198b0103	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef enum {$/;"	g
+__anon5ef0e91e0102	host/commands/modem_simulator/network_service.cpp	/^          [this](const Client& client) { this->HandleRadioPowerReq(client); }),$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0202	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0302	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0402	host/commands/modem_simulator/network_service.cpp	/^          [this](const Client& client) { this->HandleSignalStrength(client); }),$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0502	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0602	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0702	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0802	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0902	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0a02	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0b02	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0c02	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0d02	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0e02	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e0f02	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e1002	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon5ef0e91e1102	host/commands/modem_simulator/network_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::NetworkService::InitializeCommandHandlers	file:
+__anon61381e100111	common/libs/net/netlink_client.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon63a091d80111	host/commands/restart_cvd/restart_cvd.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon64f55d8c0102	common/libs/utils/flag_parser_test.cpp	/^  flag.Setter([&elems](const FlagMatch& match) {$/;"	f	function:cuttlefish::TEST	file:
+__anon65a808010111	host/commands/stop/main.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon6b0274e10111	host/commands/run_cvd/launch_streamer.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon6b0274e10202	host/commands/run_cvd/launch_streamer.cpp	/^    auto stopper = [host_socket = std::move(host_socket_)](Subprocess* proc) {$/;"	f	function:cuttlefish::__anon6b0274e10111::WebRtcServer::Commands	file:
+__anon6dbb5ee00102	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6dbb5ee00202	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6dbb5ee00302	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6dbb5ee00402	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6dbb5ee00502	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6dbb5ee00602	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6dbb5ee00702	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6dbb5ee00802	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6dbb5ee00902	host/commands/modem_simulator/misc_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::MiscService::InitializeCommandHandlers	file:
+__anon6f6aae500102	host/commands/run_cvd/launch_modem.cpp	/^    Command cmd(ModemSimulatorBinary(), [this](Subprocess* proc) {$/;"	f	function:cuttlefish::ModemSimulator::Commands	file:
+__anon70d7df6f0108	guest/hals/ril/reference-ril/reference-ril.c	/^typedef struct {$/;"	s	file:
+__anon70d7df6f0208	guest/hals/ril/reference-ril/reference-ril.c	/^typedef struct {$/;"	s	file:
+__anon70d7df6f0303	guest/hals/ril/reference-ril/reference-ril.c	/^typedef enum {$/;"	g	file:
+__anon70d7df6f0403	guest/hals/ril/reference-ril/reference-ril.c	/^typedef enum {$/;"	g	file:
+__anon70d7df6f0503	guest/hals/ril/reference-ril/reference-ril.c	/^typedef enum {$/;"	g	file:
+__anon710b399e0102	host/libs/screen_connector/screen_connector_multiplexer.h	/^    auto selector = [this, &is_discard_frame]() -> int {$/;"	f	function:cuttlefish::ScreenConnectorInputMultiplexer::Pop	typeref:typename:int	file:
+__anon7281a6ce0111	host/commands/powerwash_cvd/powerwash_cvd.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon72e4bdb10111	common/libs/net/network_interface_manager.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon734383cf0111	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^namespace {$/;"	n	file:
+__anon734383cf0202	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^                                     [](char c) { return std::isdigit(c); });$/;"	f	function:__anon734383cf0111::IsInteger	file:
+__anon79ba8e560111	host/libs/websocket/websocket_handler.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon7b80148c0111	common/libs/confui/protocol.cpp	/^namespace {$/;"	n	namespace:cuttlefish::confui	file:
+__anon7b80148c0211	common/libs/confui/protocol.cpp	/^namespace {$/;"	n	namespace:cuttlefish::confui	file:
+__anon7cf2d7d50102	host/libs/confui/sign_utils.h	/^auto bytes_cast(const T& v) -> const uint8_t (&)[sizeof(T)] {$/;"	f	namespace:cuttlefish::confui::support	file:
+__anon7cf2d7d50202	host/libs/confui/sign_utils.h	/^auto bytes_cast(T& v) -> uint8_t (&)[sizeof(T)] {$/;"	f	namespace:cuttlefish::confui::support	file:
+__anon7d4eee310111	guest/commands/vsoc_input_service/vsoc_input_service.cpp	/^namespace {$/;"	n	file:
+__anon7d4eee310202	guest/commands/vsoc_input_service/vsoc_input_service.cpp	/^  std::thread screen_thread([this, touch_fd]() {$/;"	f	function:VSoCInputService::ProcessEvents	file:
+__anon7d4eee310302	guest/commands/vsoc_input_service/vsoc_input_service.cpp	/^    EventLoop(virtual_touchscreen_, [touch_fd]() {$/;"	f	function:VSoCInputService::ProcessEvents::__anon7d4eee310202	file:
+__anon7d4eee310402	guest/commands/vsoc_input_service/vsoc_input_service.cpp	/^  std::thread keyboard_thread([this, keyboard_fd]() {$/;"	f	function:VSoCInputService::ProcessEvents	file:
+__anon7d4eee310502	guest/commands/vsoc_input_service/vsoc_input_service.cpp	/^    EventLoop(virtual_keyboard_, [keyboard_fd]() {$/;"	f	function:VSoCInputService::ProcessEvents::__anon7d4eee310402	file:
+__anon7d63e7dc0102	common/libs/utils/vsock_connection.cpp	/^                    [this, port, cid]() { return Connect(port, cid); });$/;"	f	function:cuttlefish::VsockConnection::ConnectAsync	file:
+__anon7d63e7dc0202	common/libs/utils/vsock_connection.cpp	/^  return std::async(std::launch::async, [this, size]() { return Read(size); });$/;"	f	function:cuttlefish::VsockConnection::ReadAsync	file:
+__anon7d63e7dc0302	common/libs/utils/vsock_connection.cpp	/^  return std::async(std::launch::async, [this]() { return ReadMessage(); });$/;"	f	function:cuttlefish::VsockConnection::ReadMessageAsync	file:
+__anon7d63e7dc0402	common/libs/utils/vsock_connection.cpp	/^  return std::async(std::launch::async, [this]() { return ReadJsonMessage(); });$/;"	f	function:cuttlefish::VsockConnection::ReadJsonMessageAsync	file:
+__anon7d839c5b0102	host/frontend/webrtc/display_handler.cpp	/^           WebRtcScProcessedFrame& processed_frame) {$/;"	f	function:cuttlefish::DisplayHandler::GetScreenConnectorCallback	file:
+__anon7ea6a0320111	host/libs/config/adb/launch.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon80582ec40102	host/commands/kernel_log_monitor/main.cc	/^      klog.SubscribeToEvents([subscriber_fd](Json::Value message) {$/;"	f	function:main	file:
+__anon807585c50102	guest/hals/confirmationui/guest_session.cpp	/^    auto clean_up_and_get_first = [&]() -> std::unique_ptr<ConfUiMessage> {$/;"	f	function:android::hardware::confirmationui::V1_0::implementation::GuestSession::PromptUserConfirmation	typeref:typename:std::unique_ptr<ConfUiMessage>	file:
+__anon807585c50202	guest/hals/confirmationui/guest_session.cpp	/^    auto wait_input_and_signal = [&]() -> std::unique_ptr<ConfUiMessage> {$/;"	f	function:android::hardware::confirmationui::V1_0::implementation::GuestSession::PromptUserConfirmation	typeref:typename:std::unique_ptr<ConfUiMessage>	file:
+__anon807585c50302	guest/hals/confirmationui/guest_session.cpp	/^    input_ready_cv_.wait(input_ready_lock, [&]() { return input_ready; });$/;"	f	function:android::hardware::confirmationui::V1_0::implementation::GuestSession::PromptUserConfirmation	file:
+__anon807585c50402	guest/hals/confirmationui/guest_session.cpp	/^                                   [this] { return listener_state_ != ListenerState::SetupDone; /;"	f	function:android::hardware::confirmationui::V1_0::implementation::GuestSession::DeliverSecureInputEvent	file:
+__anon8078843e0111	host/libs/audio_connector/server.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon8078843e0202	host/libs/audio_connector/server.cpp	/^                                   uint32_t consumed_length) {$/;"	f	function:cuttlefish::__anon8078843e0111::SendStatusCallback	file:
+__anon8185be2f0111	host/libs/websocket/websocket_server.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon8223c28e0102	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0202	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0302	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0402	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0502	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0602	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0702	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0802	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0902	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon8223c28e0a02	host/commands/modem_simulator/data_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::DataService::InitializeCommandHandlers	file:
+__anon883919040102	host/commands/modem_simulator/channel_monitor.cpp	/^    monitor_thread_ = std::thread([this]() { MonitorLoop(); });$/;"	f	function:cuttlefish::ChannelMonitor::ChannelMonitor	file:
+__anon883919040202	host/commands/modem_simulator/channel_monitor.cpp	/^        [&](std::unique_ptr<Client>& other) { return *other == client; });$/;"	f	function:cuttlefish::ChannelMonitor::ReadCommand	file:
+__anon8c3f0f5d0102	host/commands/modem_simulator/nvram_config.cpp	/^  std::call_once(once_flag, [num_instances, sim_type]() {$/;"	f	function:cuttlefish::NvramConfig::InitNvramConfigService	file:
+__anon8d12954e0111	host/commands/run_cvd/validate.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon8e1e78490111	host/commands/start/main.cc	/^namespace {$/;"	n	file:
+__anon8f5be4990111	host/libs/wayland/wayland_dmabuf.cpp	/^namespace {$/;"	n	namespace:wayland	file:
+__anon913036200111	common/frontend/socket_vsock_proxy/main.cpp	/^namespace {$/;"	n	file:
+__anon9162129c0111	host/libs/vm_manager/crosvm_manager.cpp	/^namespace {$/;"	n	namespace:cuttlefish::vm_manager	file:
+__anon948178400111	host/commands/fetcher/build_api.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon948178400202	host/commands/fetcher/build_api.cc	/^  std::visit([&out](auto&& arg) { out << arg; }, build);$/;"	f	function:cuttlefish::operator <<	file:
+__anon94f9180b0102	common/libs/utils/tee_logging.cpp	/^  auto concat_lines = [&](const char* message, int size) {$/;"	f	function:cuttlefish::StderrOutputGenerator	file:
+__anon9bac88d60102	host/libs/confui/session.cc	/^  auto invalid_input_handler = [&, this]() {$/;"	f	function:cuttlefish::confui::Session::HandleInSession	file:
+__anon9f2993ef0111	host/frontend/webrtc_operator/client_handler.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anon9f2993ef0202	host/frontend/webrtc_operator/client_handler.cpp	/^  std::generate_n(ret.begin(), len, [&]() { return chars[random(e)]; });$/;"	f	function:cuttlefish::__anon9f2993ef0111::RandomClientSecret	file:
+__anona05e27140102	host/commands/secure_env/primary_key_builder.cpp	/^  return [unique](TpmResourceManager& resource_manager) {$/;"	f	function:cuttlefish::SigningKeyCreator	file:
+__anona05e27140202	host/commands/secure_env/primary_key_builder.cpp	/^  return [unique](TpmResourceManager& resource_manager) {$/;"	f	function:cuttlefish::ParentKeyCreator	file:
+__anona2d2fad50102	tests/hal/hal_implementation_test.cpp	/^  auto setInserter = [&](const vintf::ManifestInstance& i) -> bool {$/;"	f	function:allHidlManifestInterfaces	typeref:typename:bool	file:
+__anona2d2fad50202	tests/hal/hal_implementation_test.cpp	/^  auto setInserter = [&](const vintf::ManifestInstance& i) -> bool {$/;"	f	function:allAidlManifestInterfaces	typeref:typename:bool	file:
+__anona4a84cd70111	host/frontend/adb_connector/main.cpp	/^namespace {$/;"	n	file:
+__anona6e38b1b0111	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^namespace {$/;"	n	namespace:android::hardware::camera::provider::V2_7::implementation	file:
+__anona6e38b1b0202	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^             VsockCameraDevice::Settings settings) {$/;"	f	function:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider::setCallback	file:
+__anona6e38b1b0302	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^            [this] { deviceRemoved(kDeviceName); });$/;"	f	function:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider::setCallback::__anona6e38b1b0202	file:
+__anona9f16c970111	host/libs/wayland/wayland_seat.cpp	/^namespace {$/;"	n	namespace:wayland	file:
+__anonab9390d10111	host/frontend/webrtc/lib/streamer.cpp	/^namespace {$/;"	n	namespace:cuttlefish::webrtc_streaming	file:
+__anonab9390d10202	host/frontend/webrtc/lib/streamer.cpp	/^       touch_enabled]() -> std::shared_ptr<VideoSink> {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::AddDisplay	typeref:typename:std::shared_ptr<VideoSink>	file:
+__anonab9390d10302	host/frontend/webrtc/lib/streamer.cpp	/^      RTC_FROM_HERE, [this, &label]() -> std::shared_ptr<AudioSink> {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::AddAudioStream	typeref:typename:std::shared_ptr<AudioSink>	file:
+__anonab9390d10402	host/frontend/webrtc/lib/streamer.cpp	/^  impl_->signal_thread_->PostTask(RTC_FROM_HERE, [this, observer]() {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Register	file:
+__anonab9390d10502	host/frontend/webrtc/lib/streamer.cpp	/^      RTC_FROM_HERE, [this]() { impl_->server_connection_.reset(); });$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Unregister	file:
+__anonab9390d10602	host/frontend/webrtc/lib/streamer.cpp	/^    auto deleter = [](webrtc::VideoTrackSourceInterface* source) {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::RecordDisplays	file:
+__anonab9390d10702	host/frontend/webrtc/lib/streamer.cpp	/^  signal_thread_->PostTask(RTC_FROM_HERE, [this]() {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Impl::OnOpen	file:
+__anonab9390d10802	host/frontend/webrtc/lib/streamer.cpp	/^  signal_thread_->PostTask(RTC_FROM_HERE, [this]() {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Impl::OnClose	file:
+__anonab9390d10902	host/frontend/webrtc/lib/streamer.cpp	/^        RTC_FROM_HERE, [this]() { server_connection_->Connect(); },$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Impl::OnError	file:
+__anonab9390d10a02	host/frontend/webrtc/lib/streamer.cpp	/^    signal_thread_->PostTask(RTC_FROM_HERE, [this]() {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Impl::OnError	file:
+__anonab9390d10b02	host/frontend/webrtc/lib/streamer.cpp	/^  signal_thread_->PostTask(RTC_FROM_HERE, [this, server_message]() {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Impl::OnReceive	file:
+__anonab9390d10c02	host/frontend/webrtc/lib/streamer.cpp	/^      [this, client_id](const Json::Value& msg) {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Impl::CreateClientHandler	file:
+__anonab9390d10d02	host/frontend/webrtc/lib/streamer.cpp	/^      [this, client_id](bool isOpen) {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Impl::CreateClientHandler	file:
+__anonab9390d10e02	host/frontend/webrtc/lib/streamer.cpp	/^  signal_thread_->PostTask(RTC_FROM_HERE, [this, client_id]() {$/;"	f	function:cuttlefish::webrtc_streaming::Streamer::Impl::DestroyClientHandler	file:
+__anonadab6e0c0111	host/commands/run_cvd/main.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonae6530d30111	host/commands/assemble_cvd/super_image_mixer.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonb05ec4f60102	host/commands/console_forwarder/main.cpp	/^    writer_thread_ = std::thread([this]() { WriteLoop(); });$/;"	f	function:cuttlefish::ConsoleForwarder::StartServer	file:
+__anonb1d4e5780102	host/libs/screen_connector/screen_connector_ctrl.h	/^    auto check = [this]() -> bool { return atomic_mode_ == ModeType::kAndroidMode; };$/;"	f	function:cuttlefish::ScreenConnectorCtrl::WaitAndroidMode	typeref:typename:bool	file:
+__anonb2b4da3a0111	host/libs/vm_manager/qemu_manager.cpp	/^namespace {$/;"	n	namespace:cuttlefish::vm_manager	file:
+__anonb2b4da3a0202	host/libs/vm_manager/qemu_manager.cpp	/^  auto stop = [](Subprocess* proc) {$/;"	f	function:cuttlefish::vm_manager::QemuManager::StartCommands	file:
+__anonb2b4da3a0302	host/libs/vm_manager/qemu_manager.cpp	/^  auto add_hvc_sink = [&qemu_cmd, &hvc_num]() {$/;"	f	function:cuttlefish::vm_manager::QemuManager::StartCommands	file:
+__anonb2b4da3a0402	host/libs/vm_manager/qemu_manager.cpp	/^  auto add_serial_sink = [&qemu_cmd, &serial_num]() {$/;"	f	function:cuttlefish::vm_manager::QemuManager::StartCommands	file:
+__anonb2b4da3a0502	host/libs/vm_manager/qemu_manager.cpp	/^                                &serial_num](const std::string& output) {$/;"	f	function:cuttlefish::vm_manager::QemuManager::StartCommands	file:
+__anonb2b4da3a0602	host/libs/vm_manager/qemu_manager.cpp	/^                             &serial_num](const std::string& prefix) {$/;"	f	function:cuttlefish::vm_manager::QemuManager::StartCommands	file:
+__anonb2b4da3a0702	host/libs/vm_manager/qemu_manager.cpp	/^  auto add_hvc_ro = [&qemu_cmd, &hvc_num](const std::string& output) {$/;"	f	function:cuttlefish::vm_manager::QemuManager::StartCommands	file:
+__anonb2b4da3a0802	host/libs/vm_manager/qemu_manager.cpp	/^  auto add_hvc = [&qemu_cmd, &hvc_num](const std::string& prefix) {$/;"	f	function:cuttlefish::vm_manager::QemuManager::StartCommands	file:
+__anonb50860fb0102	host/frontend/webrtc/bluetooth_handler.cpp	/^  std::thread loop([this]() { ReadLoop(); });$/;"	f	function:cuttlefish::webrtc_streaming::BluetoothHandler::BluetoothHandler	file:
+__anonb7895b810102	host/libs/wayland/wayland_server.cpp	/^          [this, wayland_socket_fd]() {$/;"	f	function:wayland::WaylandServer::WaylandServer	file:
+__anonb7895b810202	host/libs/wayland/wayland_server.cpp	/^  server_ready_cv_.wait(lock, [&]{return server_ready_; });$/;"	f	function:wayland::WaylandServer::WaylandServer	file:
+__anonb7fa39a50111	guest/hals/bt/remote/remote_bluetooth.cpp	/^namespace {$/;"	n	file:
+__anonb7fa39a50202	guest/hals/bt/remote/remote_bluetooth.cpp	/^  unlink_cb_ = [this, cb](sp<BluetoothDeathRecipient>& death_recipient) {$/;"	f	function:android::hardware::bluetooth::V1_1::remote::BluetoothHci::initialize_impl	file:
+__anonb7fa39a50302	guest/hals/bt/remote/remote_bluetooth.cpp	/^      [](const std::vector<uint8_t>& \/* raw_command *\/) {$/;"	f	function:android::hardware::bluetooth::V1_1::remote::BluetoothHci::initialize_impl	file:
+__anonb7fa39a50402	guest/hals/bt/remote/remote_bluetooth.cpp	/^      [this](const std::vector<uint8_t>& raw_event) {$/;"	f	function:android::hardware::bluetooth::V1_1::remote::BluetoothHci::initialize_impl	file:
+__anonb7fa39a50502	guest/hals/bt/remote/remote_bluetooth.cpp	/^      [this](const std::vector<uint8_t>& raw_acl) {$/;"	f	function:android::hardware::bluetooth::V1_1::remote::BluetoothHci::initialize_impl	file:
+__anonb7fa39a50602	guest/hals/bt/remote/remote_bluetooth.cpp	/^      [this](const std::vector<uint8_t>& raw_sco) {$/;"	f	function:android::hardware::bluetooth::V1_1::remote::BluetoothHci::initialize_impl	file:
+__anonb7fa39a50702	guest/hals/bt/remote/remote_bluetooth.cpp	/^      [this](const std::vector<uint8_t>& raw_iso) {$/;"	f	function:android::hardware::bluetooth::V1_1::remote::BluetoothHci::initialize_impl	file:
+__anonb7fa39a50802	guest/hals/bt/remote/remote_bluetooth.cpp	/^      []() { LOG(INFO) << "HCI socket device disconnected"; });$/;"	f	function:android::hardware::bluetooth::V1_1::remote::BluetoothHci::initialize_impl	file:
+__anonb7fa39a50902	guest/hals/bt/remote/remote_bluetooth.cpp	/^      fd_, [this](int fd) { h4_.OnDataReady(fd); });$/;"	f	function:android::hardware::bluetooth::V1_1::remote::BluetoothHci::initialize_impl	file:
+__anonbb773a0c0111	host/frontend/webrtc/adb_handler.cpp	/^namespace {$/;"	n	namespace:cuttlefish::webrtc_streaming	file:
+__anonbb773a0c0202	host/frontend/webrtc/adb_handler.cpp	/^    std::thread loop([this]() { ReadLoop(); });$/;"	f	function:cuttlefish::webrtc_streaming::AdbHandler::AdbHandler	file:
+__anonbbac300c0102	host/commands/modem_simulator/sup_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SupService::InitializeCommandHandlers	file:
+__anonbbac300c0202	host/commands/modem_simulator/sup_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SupService::InitializeCommandHandlers	file:
+__anonbbac300c0302	host/commands/modem_simulator/sup_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SupService::InitializeCommandHandlers	file:
+__anonbbac300c0402	host/commands/modem_simulator/sup_service.cpp	/^          "+CLIP?", [this](const Client& client) { this->HandleCLIP(client); }),$/;"	f	function:cuttlefish::SupService::InitializeCommandHandlers	file:
+__anonbbac300c0502	host/commands/modem_simulator/sup_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SupService::InitializeCommandHandlers	file:
+__anonbbac300c0602	host/commands/modem_simulator/sup_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SupService::InitializeCommandHandlers	file:
+__anonbc3851b60108	host/frontend/webrtc/lib/streamer.h	/^  struct {$/;"	s	struct:cuttlefish::webrtc_streaming::StreamerConfig
+__anonbd7a135a0102	common/libs/utils/files.cpp	/^                     struct FTW*) -> int {$/;"	f	function:cuttlefish::RecursivelyRemoveDirectory	typeref:typename:int	file:
+__anonbf7022000102	host/commands/secure_env/fragile_tpm_storage.cpp	/^  auto close_tr = [this](ESYS_TR* handle) {$/;"	f	function:cuttlefish::FragileTpmStorage::Read	file:
+__anonbfa95aa40111	host/commands/assemble_cvd/boot_image_utils.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonbfba73ec0102	host/commands/modem_simulator/thread_looper.cpp	/^  looper_thread_ = std::thread([this]() { ThreadLoop(); });$/;"	f	function:cuttlefish::ThreadLooper::ThreadLooper	file:
+__anonc140734a0111	guest/hals/camera/vsock_camera_metadata.cpp	/^namespace {$/;"	n	namespace:android::hardware::camera::device::V3_4::implementation	file:
+__anonc24c37010102	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^      std::thread([this, timeout_ms] { processRequestLoop(timeout_ms); });$/;"	f	function:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::VsockCameraDeviceSession	file:
+__anonc24c37010202	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^  auto is_empty = [this] { return pending_requests_.empty(); };$/;"	f	function:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::flush	file:
+__anonc24c37010302	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^  auto not_empty = [this] { return !pending_requests_.empty(); };$/;"	f	function:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::getRequestFromQueue	file:
+__anonc6b6781f0111	host/frontend/webrtc_operator/server_config.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonc785b2110102	host/commands/modem_simulator/thread_looper.h	/^  return [f, me] {$/;"	f	function:cuttlefish::makeSafeCallback	file:
+__anonc785b2110202	host/commands/modem_simulator/thread_looper.h	/^                             [f, params...](T *me) { (me->*f)(params...); });$/;"	f	function:cuttlefish::makeSafeCallback	file:
+__anonc785b2110302	host/commands/modem_simulator/thread_looper.h	/^                             [f, params...](T *me) { (me->*f)(params...); });$/;"	f	function:cuttlefish::makeSafeCallback	file:
+__anoncaae79910111	common/libs/utils/network.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonccb356fd0111	host/commands/fetcher/fetch_cvd.cc	/^namespace {$/;"	n	file:
+__anonccb356fd0211	host/commands/fetcher/fetch_cvd.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonccb356fd0302	host/commands/fetcher/fetch_cvd.cc	/^  std::string product = std::visit([](auto&& arg) { return arg.product; }, build);$/;"	f	function:cuttlefish::__anonccb356fd0211::TargetBuildZipFromArtifacts	file:
+__anonccb356fd0402	host/commands/fetcher/fetch_cvd.cc	/^  auto id = std::visit([](auto&& arg) { return arg.id; }, build);$/;"	f	function:cuttlefish::__anonccb356fd0211::TargetBuildZipFromArtifacts	file:
+__anonccb356fd0502	host/commands/fetcher/fetch_cvd.cc	/^    auto id = std::visit([](auto&& arg) { return arg.id; }, build);$/;"	f	function:cuttlefish::__anonccb356fd0211::AddFilesToConfig	file:
+__anonccb356fd0602	host/commands/fetcher/fetch_cvd.cc	/^    auto target = std::visit([](auto&& arg) { return arg.target; }, build);$/;"	f	function:cuttlefish::__anonccb356fd0211::AddFilesToConfig	file:
+__anoncdd3d0380102	host/commands/bt_connector/main.cpp	/^  auto guest_to_host = std::thread([&]() {$/;"	f	function:main	file:
+__anoncdd3d0380202	host/commands/bt_connector/main.cpp	/^  auto host_to_guest = std::thread([&]() {$/;"	f	function:main	file:
+__anonced26a190111	common/libs/utils/users.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anoncf090a650111	common/libs/fs/shared_buf.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anoncfc77f870102	host/commands/modem_simulator/sms_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SmsService::InitializeCommandHandlers	file:
+__anoncfc77f870202	host/commands/modem_simulator/sms_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SmsService::InitializeCommandHandlers	file:
+__anoncfc77f870302	host/commands/modem_simulator/sms_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SmsService::InitializeCommandHandlers	file:
+__anoncfc77f870402	host/commands/modem_simulator/sms_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SmsService::InitializeCommandHandlers	file:
+__anoncfc77f870502	host/commands/modem_simulator/sms_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SmsService::InitializeCommandHandlers	file:
+__anoncfc77f870602	host/commands/modem_simulator/sms_service.cpp	/^          [this](const Client& client) { this->HandleGetSmscAddress(client); }),$/;"	f	function:cuttlefish::SmsService::InitializeCommandHandlers	file:
+__anoncfc77f870702	host/commands/modem_simulator/sms_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SmsService::InitializeCommandHandlers	file:
+__anoncfc77f870802	host/commands/modem_simulator/sms_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::SmsService::InitializeCommandHandlers	file:
+__anoncfc77f870902	host/commands/modem_simulator/sms_service.cpp	/^          makeSafeCallback<SmsService>(this, [&sms_pdu](SmsService* me) {$/;"	f	function:cuttlefish::SmsService::HandleSendSMSPDU	file:
+__anoncfc77f870a02	host/commands/modem_simulator/sms_service.cpp	/^        makeSafeCallback<SmsService>(this, [sms_pdu](SmsService* me) {$/;"	f	function:cuttlefish::SmsService::HandleSendSMSPDU	file:
+__anoncfc77f870b02	host/commands/modem_simulator/sms_service.cpp	/^        makeSafeCallback<SmsService>(this, [sms_pdu, ref](SmsService* me) {$/;"	f	function:cuttlefish::SmsService::HandleSendSMSPDU	file:
+__anond073544d0102	host/frontend/webrtc/main.cpp	/^    touch_accepters.emplace_back([label, &input_sockets]() {$/;"	f	function:main	file:
+__anond073544d0202	host/frontend/webrtc/main.cpp	/^  std::thread keyboard_accepter([&input_sockets]() {$/;"	f	function:main	file:
+__anond073544d0302	host/frontend/webrtc/main.cpp	/^  std::thread switches_accepter([&input_sockets]() {$/;"	f	function:main	file:
+__anond073544d0402	host/frontend/webrtc/main.cpp	/^  std::thread control_thread([control_socket, &local_recorder]() {$/;"	f	function:main	file:
+__anond0fc42ea0111	host/frontend/webrtc/lib/client_handler.cpp	/^namespace {$/;"	n	namespace:cuttlefish::webrtc_streaming	file:
+__anond0fc42ea0202	host/frontend/webrtc/lib/client_handler.cpp	/^    observer_->OnAdbChannelOpen([this](const uint8_t *msg, size_t size) {$/;"	f	function:cuttlefish::webrtc_streaming::AdbChannelHandler::OnMessage	file:
+__anond0fc42ea0302	host/frontend/webrtc/lib/client_handler.cpp	/^  observer_->OnControlChannelOpen([this](const Json::Value& message) {$/;"	f	function:cuttlefish::webrtc_streaming::ControlChannelHandler::ControlChannelHandler	file:
+__anond0fc42ea0402	host/frontend/webrtc/lib/client_handler.cpp	/^    observer_->OnBluetoothChannelOpen([this](const uint8_t *msg, size_t size) {$/;"	f	function:cuttlefish::webrtc_streaming::BluetoothChannelHandler::OnMessage	file:
+__anond0fc42ea0502	host/frontend/webrtc/lib/client_handler.cpp	/^                                      [this](webrtc::RTCError error) {$/;"	f	function:cuttlefish::webrtc_streaming::ClientHandler::AddPendingIceCandidates	file:
+__anond0fc42ea0602	host/frontend/webrtc/lib/client_handler.cpp	/^            CvdOnSetRemoteDescription>([this](webrtc::RTCError error) {$/;"	f	function:cuttlefish::webrtc_streaming::ClientHandler::HandleMessage	file:
+__anond0fc42ea0702	host/frontend/webrtc/lib/client_handler.cpp	/^            [this](webrtc::RTCError error) {$/;"	f	function:cuttlefish::webrtc_streaming::ClientHandler::HandleMessage	file:
+__anond0fc42ea0802	host/frontend/webrtc/lib/client_handler.cpp	/^                                        [this](webrtc::RTCError error) {$/;"	f	function:cuttlefish::webrtc_streaming::ClientHandler::HandleMessage	file:
+__anond0fc42ea0902	host/frontend/webrtc/lib/client_handler.cpp	/^          [this](const uint8_t *msg, size_t size, bool binary) {$/;"	f	function:cuttlefish::webrtc_streaming::ClientHandler::OnConnectionChange	file:
+__anond268d4620111	host/libs/wayland/wayland_shell.cpp	/^namespace {$/;"	n	namespace:wayland	file:
+__anond3364bd20111	host/commands/host_bugreport/main.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anond3364bd20202	host/commands/host_bugreport/main.cc	/^  auto save = [&writer, config](const std::string& path) {$/;"	f	function:cuttlefish::__anond3364bd20111::CvdHostBugreportMain	file:
+__anond3364bd20302	host/commands/host_bugreport/main.cc	/^    auto save = [&writer, instance](const std::string& path) {$/;"	f	function:cuttlefish::__anond3364bd20111::CvdHostBugreportMain	file:
+__anond4ab38d90102	host/frontend/webrtc/lib/camera_streamer.cpp	/^  reader_thread_ = std::thread([this] {$/;"	f	function:cuttlefish::webrtc_streaming::CameraStreamer::StartReadLoop	file:
+__anond70c3a4f0111	common/libs/fs/shared_fd.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anond80b65c40102	host/libs/screen_connector/screen_connector.h	/^               std::uint8_t* frame_bytes) {$/;"	f	function:cuttlefish::ScreenConnector::SetCallback	file:
+__anond90bdb570111	host/libs/config/bootconfig_args.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anondfffca8d0111	host/commands/fetcher/curl_wrapper.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anondfffca8d0202	host/commands/fetcher/curl_wrapper.cc	/^        [&, this]() { return inner_curl_.DownloadToFile(url, path, headers); });$/;"	f	function:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper::DownloadToFile	file:
+__anondfffca8d0302	host/commands/fetcher/curl_wrapper.cc	/^        [&, this]() { return inner_curl_.DownloadToString(url, headers); });$/;"	f	function:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper::DownloadToString	file:
+__anondfffca8d0402	host/commands/fetcher/curl_wrapper.cc	/^        [&, this]() { return inner_curl_.DownloadToJson(url, headers); });$/;"	f	function:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper::DownloadToJson	file:
+__anone2ec5ace0111	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^namespace {$/;"	n	namespace:aidl::android::hardware::security::keymint	file:
+__anone7ed366f0111	host/commands/run_cvd/boot_state_machine.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anone7ed366f0202	host/commands/run_cvd/boot_state_machine.cc	/^        [this, boot_events_pipe]() { ThreadLoop(boot_events_pipe); });$/;"	f	function:cuttlefish::__anone7ed366f0111::CvdBootStateMachine::Setup	file:
+__anone81850a20111	host/commands/fetcher/credential_source.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anone862986b0111	host/commands/secure_env/tpm_keymaster_context.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anone963d72d0111	host/libs/config/adb/config.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anone9f9f83a0111	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^namespace {$/;"	n	namespace:cuttlefish::webrtc_streaming	file:
+__anonebd60ce30111	host/libs/wayland/wayland_subcompositor.cpp	/^namespace {$/;"	n	namespace:wayland	file:
+__anoned36ed9d0111	host/libs/config/data_image.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonedfd971c0102	common/libs/utils/environment.cpp	/^      [](FILE* fp, size_t len) {$/;"	f	function:cuttlefish::HostArchStr	file:
+__anonf13e85620111	host/commands/run_cvd/launch.cc	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonf2157dfa0111	common/libs/net/netlink_request.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonf277137d0111	common/libs/device_config/host_device_config.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonf279fac10102	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^      read_thread_ = std::thread([this]() { ReadLoop(); });$/;"	f	function:GnssGrpcProxyServiceImpl::StartServer	file:
+__anonf279fac10202	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^          std::thread([this]() { ReadNmeaFromLocalFile(); });$/;"	f	function:GnssGrpcProxyServiceImpl::StartReadNmeaFileThread	file:
+__anonf279fac10302	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^          std::thread([this]() { ReadGnssRawMeasurement(); });$/;"	f	function:GnssGrpcProxyServiceImpl::StartReadGnssRawMeasurementFileThread	file:
+__anonf3320da50102	host/libs/vm_manager/vm_manager.cpp	/^      [](const CuttlefishConfig& config) {$/;"	f	function:cuttlefish::vm_manager::VmManagerComponent	file:
+__anonf390c6e60102	host/commands/modem_simulator/stk_service.cpp	/^                     [this](const Client& client) {$/;"	f	function:cuttlefish::StkService::InitializeCommandHandlers	file:
+__anonf390c6e60202	host/commands/modem_simulator/stk_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::StkService::InitializeCommandHandlers	file:
+__anonf390c6e60302	host/commands/modem_simulator/stk_service.cpp	/^                     [this](const Client& client, std::string& cmd) {$/;"	f	function:cuttlefish::StkService::InitializeCommandHandlers	file:
+__anonf7286d770111	host/libs/config/fetcher_config.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonf7286d770211	host/libs/config/fetcher_config.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonf9a2982a0108	guest/hals/ril/reference-libril/ril.cpp	/^typedef struct {$/;"	s	namespace:android	file:
+__anonfa7764770111	host/commands/kernel_log_monitor/kernel_log_server.cc	/^namespace {$/;"	n	file:
+__anonfa7764770208	host/commands/kernel_log_monitor/kernel_log_server.cc	/^constexpr struct {$/;"	s	namespace:__anonfa7764770111	file:
+__anonfa7764770308	host/commands/kernel_log_monitor/kernel_log_server.cc	/^constexpr struct {$/;"	s	namespace:__anonfa7764770111	file:
+__anonfb30483e0111	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonfb53392e0111	host/libs/config/kernel_args.cpp	/^namespace {$/;"	n	namespace:cuttlefish	file:
+__anonfcb88b810102	common/libs/concurrency/multiplexer.h	/^    auto default_selector = [this]() -> int {$/;"	f	function:cuttlefish::Multiplexer::Pop	typeref:typename:int	file:
+__anonff3d797e0111	host/frontend/webrtc/lib/port_range_socket_factory.cpp	/^namespace {$/;"	n	namespace:cuttlefish::webrtc_streaming	file:
+__anonff76b58a0102	guest/hals/bt/remote/remote_bluetooth.h	/^                                    [](const std::vector<uint8_t>&) {},$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	file:
+__anonff76b58a0202	guest/hals/bt/remote/remote_bluetooth.h	/^                                    [](const std::vector<uint8_t>&) {},$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	file:
+__anonff76b58a0302	guest/hals/bt/remote/remote_bluetooth.h	/^                                    [](const std::vector<uint8_t>&) {},$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	file:
+__anonff76b58a0402	guest/hals/bt/remote/remote_bluetooth.h	/^                                    [](const std::vector<uint8_t>&) {},$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	file:
+__anonff76b58a0502	guest/hals/bt/remote/remote_bluetooth.h	/^                                    [](const std::vector<uint8_t>&) {},$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	file:
+__anonff76b58a0602	guest/hals/bt/remote/remote_bluetooth.h	/^                                    [] {}};$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	file:
+__eglMustCastToProperFunctionPointerType	host/libs/graphics_detector/include/EGL/egl.h	/^typedef void (*__eglMustCastToProperFunctionPointerType)(void);$/;"	t	typeref:typename:void (*)(void)
+__egl_h_	host/libs/graphics_detector/include/EGL/egl.h	/^#define __egl_h_ /;"	d
+__eglext_h_	host/libs/graphics_detector/include/EGL/eglext.h	/^#define __eglext_h_ /;"	d
+__eglplatform_h_	host/libs/graphics_detector/include/EGL/eglplatform.h	/^#define __eglplatform_h_$/;"	d
+__get_default_hostdir	tools/upload_to_gce_and_run.py	/^def __get_default_hostdir():$/;"	f
+__khrplatform_h_	host/libs/graphics_detector/include/KHR/khrplatform.h	/^#define __khrplatform_h_$/;"	d
+aad_	host/commands/secure_env/hmac_serializable.h	/^  const Serializable* aad_;$/;"	m	class:cuttlefish::HmacSerializable	typeref:typename:const Serializable *
+abort	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^Return<void> TrustyConfirmationUI::abort() {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:Return<void>
+abort	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<ErrorCode> RemoteKeymaster4Device::abort(uint64_t operationHandle) {$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<ErrorCode>
+abort	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^ScopedAStatus RemoteKeyMintOperation::abort() {$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintOperation	typeref:typename:ScopedAStatus
+acceptCall	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::acceptCall(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+acceptCallResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::acceptCallResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+accessNetwork	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioAccessNetworks_v1_5 accessNetwork;$/;"	m	struct:__anon0bfbaecf5608	typeref:typename:RIL_RadioAccessNetworks_v1_5
+accessNetwork	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioAccessNetworks_v1_5 accessNetwork;$/;"	m	struct:__anon0bfbaecf5708	typeref:typename:RIL_RadioAccessNetworks_v1_5
+access_kregistry_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::access_kregistry_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+ackPDU	guest/hals/ril/reference-libril/ril.h	/^    char *ackPDU;     \/* or NULL if n\/a *\/$/;"	m	struct:__anon0bfbaecf1a08	typeref:typename:char *
+acknowledgeIncomingGsmSmsWithPdu	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::acknowledgeIncomingGsmSmsWithPdu(int32_t serial, bool success,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+acknowledgeIncomingGsmSmsWithPduResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::acknowledgeIncomingGsmSmsWithPduResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+acknowledgeLastIncomingCdmaSms	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::acknowledgeLastIncomingCdmaSms(int32_t serial, const CdmaSmsAck& sms/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+acknowledgeLastIncomingCdmaSmsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::acknowledgeLastIncomingCdmaSmsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+acknowledgeLastIncomingGsmSms	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::acknowledgeLastIncomingGsmSms(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+acknowledgeLastIncomingGsmSmsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::acknowledgeLastIncomingGsmSmsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+acknowledgeRequest	guest/hals/ril/reference-libril/ril_service.cpp	/^void radio_1_6::acknowledgeRequest(int slotId, int serial) {$/;"	f	class:radio_1_6	typeref:typename:void
+aconline	host/commands/health/health.cpp	/^int aconline() {$/;"	f	typeref:typename:int
+acquireAsBlob	guest/hals/camera/cached_stream_buffer.cpp	/^void* CachedStreamBuffer::acquireAsBlob(int32_t size, int timeout_ms) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:void *
+acquireAsYUV	guest/hals/camera/cached_stream_buffer.cpp	/^YCbCrLayout CachedStreamBuffer::acquireAsYUV(int32_t width, int32_t height,$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:YCbCrLayout
+acquireFence	guest/hals/camera/cached_stream_buffer.h	/^  int acquireFence() const { return acquire_fence_; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:int
+acquire_fence_	guest/hals/camera/cached_stream_buffer.h	/^  int acquire_fence_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:int
+act	guest/hals/ril/reference-libril/ril.h	/^  RIL_RadioAccessNetworks act;$/;"	m	struct:__anon0bfbaecfa608	typeref:typename:RIL_RadioAccessNetworks
+act_data	common/libs/net/netlink_request_test.cpp	/^  const uint8_t* act_data = static_cast<const uint8_t*>(arg.RequestData());$/;"	v	namespace:cuttlefish::__anon1ff2f3d90111	typeref:typename:const uint8_t *
+activation_date_valid	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^bool TpmKeymasterEnforcement::activation_date_valid($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:bool
+active	guest/hals/ril/reference-libril/ril.h	/^    int             active;     \/* 0=inactive, 1=active\/physical link down, 2=active\/physical/;"	m	struct:__anon0bfbaecf1208	typeref:typename:int
+active	guest/hals/ril/reference-libril/ril.h	/^    int             active;     \/* 0=inactive, 1=active\/physical link down, 2=active\/physical/;"	m	struct:__anon0bfbaecf1308	typeref:typename:int
+active	guest/hals/ril/reference-libril/ril.h	/^    int             active;     \/* 0=inactive, 1=active\/physical link down, 2=active\/physical/;"	m	struct:__anon0bfbaecf1408	typeref:typename:int
+active	guest/hals/ril/reference-libril/ril.h	/^    int             active;     \/* 0=inactive, 1=active\/physical link down, 2=active\/physical/;"	m	struct:__anon0bfbaecf1508	typeref:typename:int
+active	guest/hals/ril/reference-libril/ril.h	/^    int             active;     \/* 0=inactive, 1=active\/physical link down,$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:int
+active	host/frontend/webrtc/audio_handler.h	/^    bool active = false;$/;"	m	struct:cuttlefish::AudioHandler::StreamDesc	typeref:typename:bool
+active_calls_	host/commands/modem_simulator/call_service.h	/^  std::map<int, CallStatus> active_calls_;$/;"	m	class:cuttlefish::CallService	typeref:typename:std::map<int,CallStatus>
+active_interfaces_	host/libs/allocd/resource_manager.h	/^  std::set<std::string> active_interfaces_;$/;"	m	class:cuttlefish::Session	typeref:typename:std::set<std::string>
+active_interfaces_	host/libs/allocd/resource_manager.h	/^  std::set<std::string> active_interfaces_;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:std::set<std::string>
+active_touch_slots_	host/frontend/webrtc/connection_observer.cpp	/^  std::set<int32_t> active_touch_slots_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:std::set<int32_t>	file:
+actual_interval_ms	guest/hals/ril/reference-libril/ril.h	/^  unsigned int actual_interval_ms; \/* actual LCE reporting interval,$/;"	m	struct:__anon0bfbaecf2308	typeref:typename:unsigned int
+adbChannel	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #adbChannel;$/;"	M	class:DeviceConnection
+adbOnMessage	host/frontend/webrtc_operator/assets/js/adb.js	/^function adbOnMessage(arrayBuffer) {$/;"	f
+adbOpenConnection	host/frontend/webrtc_operator/assets/js/adb.js	/^function adbOpenConnection() {$/;"	f
+adbSendOkay	host/frontend/webrtc_operator/assets/js/adb.js	/^function adbSendOkay(remoteId) {$/;"	f
+adbShell	host/frontend/webrtc_operator/assets/js/adb.js	/^function adbShell(command) {$/;"	f
+adb_channel_	host/frontend/webrtc/lib/client_handler.cpp	/^  rtc::scoped_refptr<webrtc::DataChannelInterface> adb_channel_;$/;"	m	class:cuttlefish::webrtc_streaming::AdbChannelHandler	typeref:typename:rtc::scoped_refptr<webrtc::DataChannelInterface>	file:
+adb_device_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::adb_device_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+adb_handler_	host/frontend/webrtc/connection_observer.cpp	/^  std::shared_ptr<cuttlefish::webrtc_streaming::AdbHandler> adb_handler_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:std::shared_ptr<cuttlefish::webrtc_streaming::AdbHandler>	file:
+adb_handler_	host/frontend/webrtc/lib/client_handler.h	/^  std::unique_ptr<AdbChannelHandler> adb_handler_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::unique_ptr<AdbChannelHandler>
+adb_host_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::adb_host_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+adb_ip_and_port	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::adb_ip_and_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+adb_socket_	host/frontend/webrtc/adb_handler.h	/^  SharedFD adb_socket_;$/;"	m	struct:cuttlefish::webrtc_streaming::AdbHandler	typeref:typename:SharedFD
+adb_ws	host/frontend/webrtc_operator/assets/js/adb.js	/^  adb_ws = {$/;"	c	class:init_adb
+adb_ws	host/frontend/webrtc_operator/assets/js/adb.js	/^let adb_ws;$/;"	v
+addClientAndAppData	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^void addClientAndAppData(const hidl_vec<uint8_t>& clientId, const hidl_vec<uint8_t>& appData,$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:void
+addCommandListener	host/frontend/webrtc_operator/assets/js/controls.js	/^  let addCommandListener =$/;"	f	function:cmdConsole
+addIntermediate	guest/hals/ril/reference-ril/atchannel.c	/^static void addIntermediate(const char *line)$/;"	f	typeref:typename:void	file:
+addKVToManifest	tools/make_manifest.sh	/^addKVToManifest() {$/;"	f
+addLine	host/frontend/webrtc_operator/assets/js/controls.js	/^  let addLine =$/;"	f	function:cmdConsole
+addPathToManifest	tools/make_manifest.sh	/^addPathToManifest() {$/;"	f
+addPayloadAndDispatchRequest	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::addPayloadAndDispatchRequest(MsgHeader *msg, uint16_t reqLen,$/;"	f	class:SapImpl	typeref:typename:Return<void>
+addRequestToList	guest/hals/ril/reference-libril/ril.cpp	/^addRequestToList(int serial, int slotId, int request) {$/;"	f	namespace:android	typeref:typename:RequestInfo *
+addRngEntropy	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<ErrorCode> RemoteKeymaster4Device::addRngEntropy(const hidl_vec<uint8_t>& data) {$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<ErrorCode>
+addRngEntropy	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::addRngEntropy(const vector<uint8_t>& data) {$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+addService	guest/hals/keymint/remote/service.cpp	/^std::shared_ptr<T> addService(Args&&... args) {$/;"	f	namespace:__anon5714be600111	typeref:typename:std::shared_ptr<T>
+addShaToManifest	tools/make_manifest.sh	/^addShaToManifest() {$/;"	f
+addSocketToList	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^void RilSapSocket::addSocketToList(const char *socketName, RIL_SOCKET_ID socketid,$/;"	f	class:RilSapSocket	typeref:typename:void
+addString	host/frontend/webrtc_operator/assets/js/controls.js	/^  let addString =$/;"	f	function:cmdConsole
+addToList	guest/hals/ril/reference-libril/ril_event.cpp	/^static void addToList(struct ril_event * ev, struct ril_event * list)$/;"	f	typeref:typename:void	file:
+add_cvd_file	host/libs/config/fetcher_config.cpp	/^bool FetcherConfig::add_cvd_file(const CvdFile& file, bool override_entry) {$/;"	f	class:cuttlefish::FetcherConfig	typeref:typename:bool
+additional_info_	common/libs/confui/packet_types.h	/^  ConfUiPacketInfo additional_info_;$/;"	m	struct:cuttlefish::confui::packet::ParsedPacket	typeref:typename:ConfUiPacketInfo
+addr	host/frontend/webrtc/lib/streamer.h	/^    std::string addr;$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig::__anonbc3851b60108	typeref:typename:std::string
+addr_	host/frontend/webrtc/lib/ws_connection.cpp	/^  const std::string addr_;$/;"	m	class:WsConnectionImpl	typeref:typename:const std::string	file:
+address	guest/hals/ril/reference-libril/ril.h	/^    char *          address;    \/* An address, e.g., "192.0.1.3" or "2001:db8::1". *\/$/;"	m	struct:__anon0bfbaecf1208	typeref:typename:char *
+address	guest/hals/ril/reference-libril/ril.h	/^    char * address;$/;"	m	struct:__anon0bfbaecf1c08	typeref:typename:char *
+address_	common/libs/net/netlink_client.cpp	/^  sockaddr_nl address_;$/;"	m	class:cuttlefish::__anon61381e100111::NetlinkClientImpl	typeref:typename:sockaddr_nl	file:
+addresses	guest/hals/ril/reference-libril/ril.h	/^    char *          addresses;  \/* A space-delimited list of addresses with optional "\/" prefi/;"	m	struct:__anon0bfbaecf1308	typeref:typename:char *
+addresses	guest/hals/ril/reference-libril/ril.h	/^    char *          addresses;  \/* A space-delimited list of addresses with optional "\/" prefi/;"	m	struct:__anon0bfbaecf1408	typeref:typename:char *
+addresses	guest/hals/ril/reference-libril/ril.h	/^    char *          addresses;  \/* A space-delimited list of addresses with optional "\/" prefi/;"	m	struct:__anon0bfbaecf1508	typeref:typename:char *
+addresses	guest/hals/ril/reference-libril/ril.h	/^    char *          addresses;  \/* A space-delimited list of addresses with optional "\/" prefi/;"	m	struct:__anon0bfbaecf1608	typeref:typename:char *
+addresses	host/commands/modem_simulator/data_service.h	/^    std::string addresses;$/;"	m	struct:cuttlefish::DataService::PDPContext	typeref:typename:std::string
+aid	guest/hals/ril/reference-libril/ril.h	/^    char *               aid;   \/* is AID(application ID) of the card application *\/$/;"	m	struct:__anon0bfbaecf4108	typeref:typename:char *
+aid	guest/hals/ril/reference-libril/ril.h	/^    char *aid;                  \/* AID value, See ETSI 102.221 8.1 and 101.220 4,$/;"	m	struct:__anon0bfbaecfc208	typeref:typename:char *
+aidPtr	guest/hals/ril/reference-libril/ril.h	/^    char * aidPtr; \/* AID value, See ETSI 102.221 and 101.220*\/$/;"	m	struct:__anon0bfbaecfa308	typeref:typename:char *
+aidPtr	guest/hals/ril/reference-libril/ril.h	/^    char *aidPtr;   \/* AID value, See ETSI 102.221 8.1 and 101.220 4, NULL if no value. *\/$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:char *
+aid_ptr	guest/hals/ril/reference-libril/ril.h	/^  char             *aid_ptr;        \/* null terminated string, e.g., from 0xA0, 0x00 -> 0x41,$/;"	m	struct:__anon0bfbaecf3808	typeref:typename:char *
+aidl	guest/hals/health/storage/Storage.cpp	/^namespace aidl::android::hardware::health::storage {$/;"	n	file:
+aidl	guest/hals/health/storage/Storage.h	/^namespace aidl::android::hardware::health::storage {$/;"	n
+aidl	guest/hals/keymint/remote/remote_keymint_device.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	file:
+aidl	guest/hals/keymint/remote/remote_keymint_device.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n
+aidl	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	file:
+aidl	guest/hals/keymint/remote/remote_keymint_operation.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n
+aidl	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	file:
+aidl	guest/hals/keymint/remote/remote_remotely_provisioned_component.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n
+aidl	guest/hals/keymint/remote/remote_secure_clock.cpp	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	file:
+aidl	guest/hals/keymint/remote/remote_secure_clock.h	/^namespace aidl::android::hardware::security::secureclock {$/;"	n
+aidl	guest/hals/keymint/remote/remote_shared_secret.cpp	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	file:
+aidl	guest/hals/keymint/remote/remote_shared_secret.h	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n
+ajaxPostJson	host/frontend/webrtc_operator/assets/js/server_connector.js	/^async function ajaxPostJson(url, data) {$/;"	f
+alertPitch	guest/hals/ril/reference-libril/ril.h	/^  char alertPitch;   \/* as defined 3.7.5.5-2 *\/$/;"	m	struct:__anon0bfbaecf1008	typeref:typename:char
+alfaCombineChannel	host/libs/confui/host_renderer.cc	/^static teeui::Color alfaCombineChannel(std::uint32_t shift, double alfa,$/;"	f	namespace:cuttlefish::confui	typeref:typename:teeui::Color	file:
+aliases_	common/libs/utils/flag_parser.h	/^  std::vector<FlagAlias> aliases_;$/;"	m	class:cuttlefish::Flag	typeref:typename:std::vector<FlagAlias>
+align_size	host/commands/append_squashfs_overlay/src/main.rs	/^fn align_size(size: u64, alignment: u64) -> u64 {$/;"	f
+allAidlManifestInterfaces	tests/hal/hal_implementation_test.cpp	/^static std::set<VersionedAidlPackage> allAidlManifestInterfaces() {$/;"	f	typeref:typename:std::set<VersionedAidlPackage>	file:
+allHidlManifestInterfaces	tests/hal/hal_implementation_test.cpp	/^static std::set<FQName> allHidlManifestInterfaces() {$/;"	f	typeref:typename:std::set<FQName>	file:
+allTreeHidlInterfaces	tests/hal/hal_implementation_test.cpp	/^static std::set<FQName> allTreeHidlInterfaces() {$/;"	f	typeref:typename:std::set<FQName>	file:
+allocatePduSessionId	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::allocatePduSessionId(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+allocatePduSessionIdResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::allocatePduSessionIdResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+allowedCarriersPrioritized	guest/hals/ril/reference-libril/ril.h	/^  int allowedCarriersPrioritized;       \/* allowed list prioritized *\/$/;"	m	struct:__anon0bfbaecf2908	typeref:typename:int
+allowed_carriers	guest/hals/ril/reference-libril/ril.h	/^  RIL_Carrier * allowed_carriers;       \/* allowed carriers *\/$/;"	m	struct:__anon0bfbaecf2708	typeref:typename:RIL_Carrier *
+allowed_carriers	guest/hals/ril/reference-libril/ril.h	/^  RIL_Carrier * allowed_carriers;       \/* allowed carriers *\/$/;"	m	struct:__anon0bfbaecf2908	typeref:typename:RIL_Carrier *
+allowed_config_presets_	host/libs/config/config_flag.cpp	/^  std::set<std::string> allowed_config_presets_;$/;"	m	class:cuttlefish::__anon2e549bd00111::ConfigReader	typeref:typename:std::set<std::string>	file:
+alphaLong	guest/hals/ril/reference-libril/ril.h	/^    char alphaLong[32];   \/* Long alpha Operator Name String or Enhanced Operator Name String.*/;"	m	struct:__anon0bfbaecf6008	typeref:typename:char[32]
+alphaShort	guest/hals/ril/reference-libril/ril.h	/^    char alphaShort[32];  \/* Short alpha Operator Name String or Enhanced Operator Name String /;"	m	struct:__anon0bfbaecf6008	typeref:typename:char[32]
+alpha_buf	guest/hals/ril/reference-libril/ril.h	/^  char alpha_buf[CDMA_ALPHA_INFO_BUFFER_LENGTH];$/;"	m	struct:__anon0bfbaecf8208	typeref:typename:char[]
+alpha_len	guest/hals/ril/reference-libril/ril.h	/^  char alpha_len;$/;"	m	struct:__anon0bfbaecf8208	typeref:typename:char
+als	guest/hals/ril/reference-libril/ril.h	/^    char            als;        \/* ALS line indicator if available$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:char
+and_mode_cv_	host/libs/confui/host_mode_ctrl.h	/^  std::condition_variable and_mode_cv_;$/;"	m	class:cuttlefish::HostModeCtrl	typeref:typename:std::condition_variable
+and_mode_cv_	host/libs/screen_connector/screen_connector_ctrl.h	/^  std::condition_variable and_mode_cv_;$/;"	m	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:std::condition_variable
+android	guest/hals/bt/remote/remote_bluetooth.cpp	/^namespace android {$/;"	n	file:
+android	guest/hals/bt/remote/remote_bluetooth.h	/^namespace android {$/;"	n
+android	guest/hals/camera/cached_stream_buffer.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	file:
+android	guest/hals/camera/cached_stream_buffer.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n
+android	guest/hals/camera/stream_buffer_cache.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	file:
+android	guest/hals/camera/stream_buffer_cache.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n
+android	guest/hals/camera/vsock_camera_device_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	file:
+android	guest/hals/camera/vsock_camera_device_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n
+android	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	file:
+android	guest/hals/camera/vsock_camera_device_session_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n
+android	guest/hals/camera/vsock_camera_metadata.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	file:
+android	guest/hals/camera/vsock_camera_metadata.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n
+android	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	file:
+android	guest/hals/camera/vsock_camera_provider_2_7.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n
+android	guest/hals/camera/vsock_camera_server.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	file:
+android	guest/hals/camera/vsock_camera_server.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n
+android	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^namespace android {$/;"	n	file:
+android	guest/hals/confirmationui/TrustyConfirmationUI.h	/^namespace android {$/;"	n
+android	guest/hals/confirmationui/guest_session.cpp	/^namespace android {$/;"	n	file:
+android	guest/hals/confirmationui/guest_session.h	/^namespace android {$/;"	n
+android	guest/hals/confirmationui/include/TrustyConfirmationuiHal.h	/^namespace android {$/;"	n
+android	guest/hals/health/health.cpp	/^namespace android {$/;"	n	file:
+android	guest/hals/health/storage/Storage.cpp	/^namespace aidl::android::hardware::health::storage {$/;"	n	namespace:aidl	file:
+android	guest/hals/health/storage/Storage.h	/^namespace aidl::android::hardware::health::storage {$/;"	n	namespace:aidl
+android	guest/hals/keymint/remote/remote_keymint_device.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl	file:
+android	guest/hals/keymint/remote/remote_keymint_device.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl
+android	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl	file:
+android	guest/hals/keymint/remote/remote_keymint_operation.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl
+android	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl	file:
+android	guest/hals/keymint/remote/remote_remotely_provisioned_component.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl
+android	guest/hals/keymint/remote/remote_secure_clock.cpp	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	namespace:aidl	file:
+android	guest/hals/keymint/remote/remote_secure_clock.h	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	namespace:aidl
+android	guest/hals/keymint/remote/remote_shared_secret.cpp	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	namespace:aidl	file:
+android	guest/hals/keymint/remote/remote_shared_secret.h	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	namespace:aidl
+android	guest/hals/ril/reference-libril/ril.cpp	/^namespace android {$/;"	n	file:
+android	guest/hals/ril/reference-libril/ril_internal.h	/^namespace android {$/;"	n
+android	guest/monitoring/cuttlefish_service/AndroidManifest.xml	/^    package="com.android.google.gce.gceservice">$/;"	n	uri:http://schemas.android.com/apk/res/android
+android	shared/overlays/SettingsProvider/AndroidManifest.xml	/^    package="com.android.providers.settings.cuttlefish.overlay">$/;"	n	uri:http://schemas.android.com/apk/res/android
+android	shared/overlays/core/AndroidManifest.xml	/^    package="android.cuttlefish.overlay">$/;"	n	uri:http://schemas.android.com/apk/res/android
+android	shared/phone/overlays/core/AndroidManifest.xml	/^    package="android.cuttlefish.phone.overlay">$/;"	n	uri:http://schemas.android.com/apk/res/android
+android	tests/ril/AndroidManifest.xml	/^    android:sharedUserId="android.uid.system">$/;"	n	uri:http://schemas.android.com/apk/res/android
+android	tests/wifi/AndroidManifest.xml	/^    android:sharedUserId="android.uid.system">$/;"	n	uri:http://schemas.android.com/apk/res/android
+android_last_signal_time_	host/commands/modem_simulator/network_service.h	/^  time_t android_last_signal_time_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:time_t
+android_wifi_priv_cmd	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.h	/^typedef struct android_wifi_priv_cmd {$/;"	s
+android_wifi_priv_cmd	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.h	/^} android_wifi_priv_cmd;$/;"	t	typeref:struct:android_wifi_priv_cmd
+ap_kernel_image	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::ap_kernel_image() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+ap_rootfs_image	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::ap_rootfs_image() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+apduReq	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::apduReq(int32_t token, SapApduType type, const hidl_vec<uint8_t>& command)/;"	f	class:SapImpl	typeref:typename:Return<void>
+api_level	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional int32 api_level = 7;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:int32
+apn	guest/hals/ril/reference-libril/ril.h	/^    char *          apn;        \/* ignored *\/$/;"	m	struct:__anon0bfbaecf1208	typeref:typename:char *
+apn	guest/hals/ril/reference-libril/ril.h	/^    char *apn;                  \/* the APN to connect to *\/$/;"	m	struct:__anon0bfbaecfc008	typeref:typename:char *
+apn	guest/hals/ril/reference-libril/ril.h	/^    char *apn;                  \/* the APN to connect to *\/$/;"	m	struct:__anon0bfbaecfc108	typeref:typename:char *
+apn	guest/hals/ril/reference-libril/ril.h	/^    char* apn;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:char *
+apn	guest/hals/ril/reference-libril/ril.h	/^    char* apn;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:char *
+apn	host/commands/modem_simulator/data_service.h	/^    std::string apn;$/;"	m	struct:cuttlefish::DataService::PDPContext	typeref:typename:std::string
+app-controls	host/frontend/webrtc_operator/assets/client.html	/^          <div id='app-controls'>$/;"	I
+app_label_ptr	guest/hals/ril/reference-libril/ril.h	/^  char             *app_label_ptr;  \/* null terminated string *\/$/;"	m	struct:__anon0bfbaecf3808	typeref:typename:char *
+app_state	guest/hals/ril/reference-libril/ril.h	/^  RIL_AppState     app_state;$/;"	m	struct:__anon0bfbaecf3808	typeref:typename:RIL_AppState
+app_type	guest/hals/ril/reference-libril/ril.h	/^  RIL_AppType      app_type;$/;"	m	struct:__anon0bfbaecf3808	typeref:typename:RIL_AppType
+appendPrintBuf	guest/hals/ril/reference-libril/ril_internal.h	/^    #define appendPrintBuf(/;"	d
+applications	guest/hals/ril/reference-libril/ril.h	/^    RIL_AppStatusV1_5 applications[RIL_CARD_MAX_APPS];$/;"	m	struct:__anon0bfbaecf3f08	typeref:typename:RIL_AppStatusV1_5[]
+applications	guest/hals/ril/reference-libril/ril.h	/^  RIL_AppStatus applications[RIL_CARD_MAX_APPS];$/;"	m	struct:__anon0bfbaecf3908	typeref:typename:RIL_AppStatus[]
+applications	guest/hals/ril/reference-libril/ril.h	/^  RIL_AppStatus applications[RIL_CARD_MAX_APPS];$/;"	m	struct:__anon0bfbaecf3a08	typeref:typename:RIL_AppStatus[]
+applySignalPercentage	host/commands/modem_simulator/network_service.cpp	/^void NetworkService::applySignalPercentage(double percentd) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:void
+arch_	host/libs/vm_manager/qemu_manager.h	/^  Arch arch_;$/;"	m	class:cuttlefish::vm_manager::QemuManager	typeref:typename:Arch
+areUiccApplicationsEnabled	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::areUiccApplicationsEnabled(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+areUiccApplicationsEnabled	guest/hals/ril/reference-ril/reference-ril.c	/^bool areUiccApplicationsEnabled = true;$/;"	v	typeref:typename:bool
+areUiccApplicationsEnabledResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::areUiccApplicationsEnabledResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+arfcn	guest/hals/ril/reference-libril/ril.h	/^    int arfcn;  \/* 16-bit GSM Absolute RF channel number, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf7808	typeref:typename:int
+arfcn	guest/hals/ril/reference-libril/ril.h	/^    int arfcn;  \/* 16-bit GSM Absolute RF channel number; this value must be reported *\/$/;"	m	struct:__anon0bfbaecf5908	typeref:typename:int
+array	host/frontend/webrtc_operator/assets/js/adb.js	/^let array = new Uint8Array();$/;"	v
+assembly_dir	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::assembly_dir() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+assets_dir_	host/libs/websocket/websocket_server.h	/^  std::string assets_dir_;$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:std::string
+assigned_ip	common/libs/utils/network.cpp	/^  std::uint8_t assigned_ip[4];$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t[4]	file:
+at_close	guest/hals/ril/reference-ril/atchannel.c	/^void at_close()$/;"	f	typeref:typename:void
+at_get_cme_error	guest/hals/ril/reference-ril/atchannel.c	/^AT_CME_Error at_get_cme_error(const ATResponse *p_response)$/;"	f	typeref:typename:AT_CME_Error
+at_handshake	guest/hals/ril/reference-ril/atchannel.c	/^int at_handshake()$/;"	f	typeref:typename:int
+at_open	guest/hals/ril/reference-ril/atchannel.c	/^int at_open(int fd, ATUnsolHandler h)$/;"	f	typeref:typename:int
+at_response_free	guest/hals/ril/reference-ril/atchannel.c	/^void at_response_free(ATResponse *p_response)$/;"	f	typeref:typename:void
+at_response_new	guest/hals/ril/reference-ril/atchannel.c	/^static ATResponse * at_response_new()$/;"	f	typeref:typename:ATResponse *	file:
+at_send_command	guest/hals/ril/reference-ril/atchannel.c	/^int at_send_command (const char *command, ATResponse **pp_outResponse)$/;"	f	typeref:typename:int
+at_send_command_full	guest/hals/ril/reference-ril/atchannel.c	/^static int at_send_command_full (const char *command, ATCommandType type,$/;"	f	typeref:typename:int	file:
+at_send_command_full_nolock	guest/hals/ril/reference-ril/atchannel.c	/^static int at_send_command_full_nolock (const char *command, ATCommandType type,$/;"	f	typeref:typename:int	file:
+at_send_command_multiline	guest/hals/ril/reference-ril/atchannel.c	/^int at_send_command_multiline (const char *command,$/;"	f	typeref:typename:int
+at_send_command_numeric	guest/hals/ril/reference-ril/atchannel.c	/^int at_send_command_numeric (const char *command,$/;"	f	typeref:typename:int
+at_send_command_singleline	guest/hals/ril/reference-ril/atchannel.c	/^int at_send_command_singleline (const char *command,$/;"	f	typeref:typename:int
+at_send_command_sms	guest/hals/ril/reference-ril/atchannel.c	/^int at_send_command_sms (const char *command,$/;"	f	typeref:typename:int
+at_set_on_reader_closed	guest/hals/ril/reference-ril/atchannel.c	/^void at_set_on_reader_closed(void (*onClose)(void))$/;"	f	typeref:typename:void
+at_set_on_timeout	guest/hals/ril/reference-ril/atchannel.c	/^void at_set_on_timeout(void (*onTimeout)(void))$/;"	f	typeref:typename:void
+at_tok_hasmore	guest/hals/ril/reference-ril/at_tok.c	/^int at_tok_hasmore(char **p_cur)$/;"	f	typeref:typename:int
+at_tok_nextbool	guest/hals/ril/reference-ril/at_tok.c	/^int at_tok_nextbool(char **p_cur, char *p_out)$/;"	f	typeref:typename:int
+at_tok_nexthexint	guest/hals/ril/reference-ril/at_tok.c	/^int at_tok_nexthexint(char **p_cur, int *p_out)$/;"	f	typeref:typename:int
+at_tok_nextint	guest/hals/ril/reference-ril/at_tok.c	/^int at_tok_nextint(char **p_cur, int *p_out)$/;"	f	typeref:typename:int
+at_tok_nextint_base	guest/hals/ril/reference-ril/at_tok.c	/^static int at_tok_nextint_base(char **p_cur, int *p_out, int base, int  uns)$/;"	f	typeref:typename:int	file:
+at_tok_nextstr	guest/hals/ril/reference-ril/at_tok.c	/^int at_tok_nextstr(char **p_cur, char **p_out)$/;"	f	typeref:typename:int
+at_tok_start	guest/hals/ril/reference-ril/at_tok.c	/^int at_tok_start(char **p_cur)$/;"	f	typeref:typename:int
+atomic_mode_	host/libs/confui/host_mode_ctrl.h	/^  std::atomic<ModeType> atomic_mode_;$/;"	m	class:cuttlefish::HostModeCtrl	typeref:typename:std::atomic<ModeType>
+atomic_mode_	host/libs/screen_connector/screen_connector_ctrl.h	/^  std::atomic<ModeType> atomic_mode_;$/;"	m	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:std::atomic<ModeType>
+atr	guest/hals/ril/reference-libril/ril.h	/^    char *atr;$/;"	m	struct:__anon0bfbaecf3b08	typeref:typename:char *
+atr	guest/hals/ril/reference-libril/ril.h	/^    char* atr;$/;"	m	struct:__anon0bfbaecfb908	typeref:typename:char *
+attestKey	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::attestKey(const hidl_vec<uint8_t>& keyToAttest,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+attestation_context_	host/commands/secure_env/tpm_keymaster_context.h	/^  std::unique_ptr<TpmAttestationRecordContext> attestation_context_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::unique_ptr<TpmAttestationRecordContext>
+attr	guest/hals/ril/reference-libril/rilSocketQueue.h	/^    pthread_mutexattr_t attr;$/;"	m	class:Ril_queue	typeref:typename:pthread_mutexattr_t
+attr1_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr1_length = 0x8;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint16_t	file:
+attr1_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr1_length = 0x8;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint16_t	file:
+attr1_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr1_type = kDummy1Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint16_t	file:
+attr1_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr1_type = kDummy1Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint16_t	file:
+attr1_value	common/libs/net/netlink_request_test.cpp	/^    const uint32_t attr1_value = kValue1;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint32_t	file:
+attr1_value	common/libs/net/netlink_request_test.cpp	/^    const uint32_t attr1_value = kValue1;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint32_t	file:
+attr2_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr2_length = 0x8;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint16_t	file:
+attr2_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr2_length = 0x8;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint16_t	file:
+attr2_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr2_type = kDummy2Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint16_t	file:
+attr2_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr2_type = kDummy2Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint16_t	file:
+attr2_value	common/libs/net/netlink_request_test.cpp	/^    const uint32_t attr2_value = kValue2;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint32_t	file:
+attr2_value	common/libs/net/netlink_request_test.cpp	/^    const uint32_t attr2_value = kValue2;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint32_t	file:
+attr_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr_length = 0x10;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90208	typeref:typename:const uint16_t	file:
+attr_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr_length = 0x8;  \/\/ 4 bytes of value + 4 bytes of header.$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90308	typeref:typename:const uint16_t	file:
+attr_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr_length = 0x8;  \/\/ 4 bytes of value + 4 bytes of header.$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90508	typeref:typename:const uint16_t	file:
+attr_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr_length = 0x8;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90608	typeref:typename:const uint16_t	file:
+attr_length_i16	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_length_i16 = 6;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_length_i32	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_length_i32 = 8;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_length_i64	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_length_i64 = 12;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_length_i8	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_length_i8 = 5;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_length_u16	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_length_u16 = 6;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_length_u32	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_length_u32 = 8;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_length_u64	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_length_u64 = 12;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_length_u8	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_length_u8 = 5;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_padding_i16	common/libs/net/netlink_request_test.cpp	/^    uint8_t attr_padding_i16[2] = {0, 0};$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint8_t[2]	file:
+attr_padding_i8	common/libs/net/netlink_request_test.cpp	/^    uint8_t attr_padding_i8[3] = {0, 0, 0};$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint8_t[3]	file:
+attr_padding_u16	common/libs/net/netlink_request_test.cpp	/^    uint8_t attr_padding_u16[2] = {0, 0};$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint8_t[2]	file:
+attr_padding_u8	common/libs/net/netlink_request_test.cpp	/^    uint8_t attr_padding_u8[3] = {0, 0, 0};$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint8_t[3]	file:
+attr_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr_type = kDummyTag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90208	typeref:typename:const uint16_t	file:
+attr_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr_type = kDummyTag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90308	typeref:typename:const uint16_t	file:
+attr_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr_type = kDummyTag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90508	typeref:typename:const uint16_t	file:
+attr_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t attr_type = kDummyTag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90608	typeref:typename:const uint16_t	file:
+attr_type_i16	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_type_i16 = kDummyTag + 2;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_type_i32	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_type_i32 = kDummyTag + 1;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_type_i64	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_type_i64 = kDummyTag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_type_i8	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_type_i8 = kDummyTag + 3;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_type_u16	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_type_u16 = kDummyTag + 6;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_type_u32	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_type_u32 = kDummyTag + 5;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_type_u64	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_type_u64 = kDummyTag + 4;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_type_u8	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_type_u8 = kDummyTag + 7;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_value	common/libs/net/netlink_request_test.cpp	/^    const uint32_t attr_value = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90308	typeref:typename:const uint32_t	file:
+attr_value	common/libs/net/netlink_request_test.cpp	/^    const uint32_t attr_value = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90508	typeref:typename:const uint32_t	file:
+attr_value	common/libs/net/netlink_request_test.cpp	/^    const uint32_t attr_value = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90608	typeref:typename:const uint32_t	file:
+attr_value_i16	common/libs/net/netlink_request_test.cpp	/^    int16_t attr_value_i16 = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:int16_t	file:
+attr_value_i32	common/libs/net/netlink_request_test.cpp	/^    int32_t attr_value_i32 = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:int32_t	file:
+attr_value_i64	common/libs/net/netlink_request_test.cpp	/^    int64_t attr_value_i64 = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:int64_t	file:
+attr_value_i8	common/libs/net/netlink_request_test.cpp	/^    int8_t attr_value_i8 = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:int8_t	file:
+attr_value_u16	common/libs/net/netlink_request_test.cpp	/^    uint16_t attr_value_u16 = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint16_t	file:
+attr_value_u32	common/libs/net/netlink_request_test.cpp	/^    uint32_t attr_value_u32 = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint32_t	file:
+attr_value_u64	common/libs/net/netlink_request_test.cpp	/^    uint64_t attr_value_u64 = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint64_t	file:
+attr_value_u8	common/libs/net/netlink_request_test.cpp	/^    uint8_t attr_value_u8 = kValue;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90408	typeref:typename:uint8_t	file:
+attributes	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t attributes;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptPartitionEntry	typeref:typename:std::uint64_t	file:
+audioCtrl	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_T53_AudioControlInfoRecord  audioCtrl;$/;"	m	union:__anon0bfbaecf8908::__anon0bfbaecf8a0a	typeref:typename:RIL_CDMA_T53_AudioControlInfoRecord
+audio_callback_	host/frontend/webrtc/lib/audio_device.h	/^  webrtc::AudioTransport* audio_callback_ = nullptr;$/;"	m	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:webrtc::AudioTransport *
+audio_device_module_	host/frontend/webrtc/lib/streamer.cpp	/^  std::shared_ptr<AudioDeviceModuleWrapper> audio_device_module_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::shared_ptr<AudioDeviceModuleWrapper>	file:
+audio_observers_	host/frontend/webrtc/lib/audio_track_source_impl.h	/^  std::set<AudioObserver*> audio_observers_;$/;"	m	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:std::set<AudioObserver * >
+audio_server_	host/commands/run_cvd/launch_streamer.cpp	/^  SharedFD audio_server_;$/;"	m	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:SharedFD	file:
+audio_server_	host/frontend/webrtc/audio_handler.h	/^  std::unique_ptr<AudioServer> audio_server_;$/;"	m	class:cuttlefish::AudioHandler	typeref:typename:std::unique_ptr<AudioServer>
+audio_server_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::audio_server_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+audio_sink_	host/frontend/webrtc/audio_handler.h	/^  std::shared_ptr<webrtc_streaming::AudioSink> audio_sink_;$/;"	m	class:cuttlefish::AudioHandler	typeref:typename:std::shared_ptr<webrtc_streaming::AudioSink>
+audio_source_	host/frontend/webrtc/audio_handler.h	/^  std::shared_ptr<webrtc_streaming::AudioSource> audio_source_;$/;"	m	class:cuttlefish::AudioHandler	typeref:typename:std::shared_ptr<webrtc_streaming::AudioSource>
+audio_sources_	host/frontend/webrtc/lib/streamer.cpp	/^      audio_sources_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::map<std::string,rtc::scoped_refptr<AudioTrackSourceImpl>>	file:
+audiocontrol_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::audiocontrol_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+auth1	host/commands/secure_env/tpm_auth.cpp	/^ESYS_TR TpmAuth::auth1() const {$/;"	f	class:cuttlefish::TpmAuth	typeref:typename:ESYS_TR
+auth1_	host/commands/secure_env/tpm_auth.h	/^  ESYS_TR auth1_;$/;"	m	class:cuttlefish::TpmAuth	typeref:typename:ESYS_TR
+auth2	host/commands/secure_env/tpm_auth.cpp	/^ESYS_TR TpmAuth::auth2() const {$/;"	f	class:cuttlefish::TpmAuth	typeref:typename:ESYS_TR
+auth2_	host/commands/secure_env/tpm_auth.h	/^  ESYS_TR auth2_;$/;"	m	class:cuttlefish::TpmAuth	typeref:typename:ESYS_TR
+auth3	host/commands/secure_env/tpm_auth.cpp	/^ESYS_TR TpmAuth::auth3() const {$/;"	f	class:cuttlefish::TpmAuth	typeref:typename:ESYS_TR
+auth3_	host/commands/secure_env/tpm_auth.h	/^  ESYS_TR auth3_;$/;"	m	class:cuttlefish::TpmAuth	typeref:typename:ESYS_TR
+authContext	guest/hals/ril/reference-libril/ril.h	/^    int authContext;            \/* P2 value of authentication command, see P2 parameter in$/;"	m	struct:__anon0bfbaecfc208	typeref:typename:int
+authData	guest/hals/ril/reference-libril/ril.h	/^    char *authData;             \/* the challenge string in Base64 format, see 3GPP$/;"	m	struct:__anon0bfbaecfc208	typeref:typename:char *
+authType	guest/hals/ril/reference-libril/ril.h	/^    int authType;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:int
+authType	guest/hals/ril/reference-libril/ril.h	/^    int authType;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+auth_token_key_t	host/libs/confui/sign_utils.h	/^using auth_token_key_t = std::array<std::uint8_t, 32>;$/;"	t	namespace:cuttlefish::confui::support	typeref:typename:std::array<std::uint8_t,32>
+auth_token_timed_out	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^bool TpmKeymasterEnforcement::auth_token_timed_out($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:bool
+authtype	guest/hals/ril/reference-libril/ril.h	/^    int authtype;               \/* authentication protocol used for this PDP context$/;"	m	struct:__anon0bfbaecfc008	typeref:typename:int
+authtype	guest/hals/ril/reference-libril/ril.h	/^    int authtype;               \/* authentication protocol used for this PDP context$/;"	m	struct:__anon0bfbaecfc108	typeref:typename:int
+awaitConnection	host/frontend/webrtc_operator/assets/js/adb.js	/^function awaitConnection() {$/;"	f
+awaitDataChannel	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^function awaitDataChannel(pc, label, onMessage) {$/;"	f
+backing_file_offset	host/libs/image_aggregator/image_aggregator.cc	/^  Be64 backing_file_offset;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be64	file:
+backing_file_size	host/libs/image_aggregator/image_aggregator.cc	/^  Be32 backing_file_size;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be32	file:
+backoff_ms	host/frontend/webrtc/lib/ws_connection.cpp	/^const uint32_t backoff_ms[] = {1000, 2000, 3000, 4000, 5000};$/;"	v	namespace:__anon14ee93270111	typeref:typename:const uint32_t[]
+backup_lba	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t backup_lba;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint64_t	file:
+bands	guest/hals/ril/reference-libril/ril.h	/^    } bands;$/;"	m	struct:__anon0bfbaecfab08	typeref:union:__anon0bfbaecfab08::__anon0bfbaecfac0a
+bands	guest/hals/ril/reference-libril/ril.h	/^    } bands;$/;"	m	struct:__anon0bfbaecfae08	typeref:union:__anon0bfbaecfae08::__anon0bfbaecfaf0a
+bands_length	guest/hals/ril/reference-libril/ril.h	/^    uint32_t bands_length;                        \/\/ Length of bands$/;"	m	struct:__anon0bfbaecfab08	typeref:typename:uint32_t
+bands_length	guest/hals/ril/reference-libril/ril.h	/^    uint32_t bands_length; \/\/ Length of bands$/;"	m	struct:__anon0bfbaecfae08	typeref:typename:uint32_t
+bandwidth	guest/hals/ril/reference-libril/ril.h	/^    int32_t bandwidth;  \/* Cell bandwidth, in kHz. *\/$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:int32_t
+base	guest/hals/ril/reference-libril/ril.h	/^    RIL_AppStatus base;$/;"	m	struct:__anon0bfbaecf3e08	typeref:typename:RIL_AppStatus
+base	guest/hals/ril/reference-libril/ril.h	/^    RIL_CardStatus_v1_2 base;$/;"	m	struct:__anon0bfbaecf3c08	typeref:typename:RIL_CardStatus_v1_2
+base	guest/hals/ril/reference-libril/ril.h	/^    RIL_CardStatus_v1_4 base;$/;"	m	struct:__anon0bfbaecf3f08	typeref:typename:RIL_CardStatus_v1_4
+base	guest/hals/ril/reference-libril/ril.h	/^    RIL_CardStatus_v6 base;$/;"	m	struct:__anon0bfbaecf3b08	typeref:typename:RIL_CardStatus_v6
+base	guest/hals/ril/reference-libril/ril.h	/^    RIL_SimSlotStatus base;$/;"	m	struct:__anon0bfbaecfba08	typeref:typename:RIL_SimSlotStatus
+base64_decode	guest/hals/ril/reference-ril/base64util.cpp	/^int base64_decode(const char *base64input, unsigned char *bindata) {$/;"	f	typeref:typename:int
+base64_encode	guest/hals/ril/reference-ril/base64util.cpp	/^char *base64_encode(const unsigned char *bindata, char *base64output,$/;"	f	typeref:typename:char *
+basestationId	guest/hals/ril/reference-libril/ril.h	/^    int basestationId;  \/* Base Station Id 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5c08	typeref:typename:int
+basestationId	guest/hals/ril/reference-libril/ril.h	/^    int basestationId;  \/* Base Station Id 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7c08	typeref:typename:int
+bc_address_	common/libs/net/network_interface.h	/^  std::string bc_address_;$/;"	m	class:cuttlefish::NetworkInterface	typeref:typename:std::string
+bcc_	host/commands/secure_env/tpm_remote_provisioning_context.h	/^  cppbor::Array bcc_;$/;"	m	class:cuttlefish::TpmRemoteProvisioningContext	typeref:typename:cppbor::Array
+bearerBitmask	guest/hals/ril/reference-libril/ril.h	/^    int bearerBitmask;          \/* the bearer bitmask. See RIL_RadioAccessFamily for the value /;"	m	struct:__anon0bfbaecfc108	typeref:typename:int
+bearerBitmask	guest/hals/ril/reference-libril/ril.h	/^    int bearerBitmask;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+bearer_proto	guest/hals/ril/reference-libril/ril.h	/^    char *bearer_proto;         \/* One of the PDP_type values in TS 27.007 section 10.1.1.$/;"	m	struct:__anon0bfbaecfc308	typeref:typename:char *
+begin	common/libs/fs/shared_select.h	/^  const_iterator begin() const { return value_.begin(); }$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:const_iterator
+begin	common/libs/fs/shared_select.h	/^  iterator begin() { return value_.begin(); }$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:iterator
+begin	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+begin	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::begin($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+begin	host/libs/confui/sign_utils.h	/^  const uint8_t* begin() const { return data_; }$/;"	f	class:cuttlefish::confui::support::ByteBufferProxy	typeref:typename:const uint8_t *
+begin_chs	host/libs/config/mbr.h	/^  std::uint8_t begin_chs[3];$/;"	m	struct:MbrPartitionEntry	typeref:typename:std::uint8_t[3]
+bin_path	fetcher.mk	/^bin_path := $(notdir $(HOST_OUT_EXECUTABLES))$/;"	m
+binary	host/libs/websocket/websocket_handler.h	/^    bool binary;$/;"	m	struct:cuttlefish::WebSocketHandler::WsBuffer	typeref:typename:bool
+bind_compositor	host/libs/wayland/wayland_compositor.cpp	/^void bind_compositor(wl_client* client,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+bind_linux_dmabuf	host/libs/wayland/wayland_dmabuf.cpp	/^void bind_linux_dmabuf(wl_client* client,$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+bind_seat	host/libs/wayland/wayland_seat.cpp	/^void bind_seat(wl_client* client, void* data, uint32_t version, uint32_t id) {$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+bind_shell	host/libs/wayland/wayland_shell.cpp	/^void bind_shell(wl_client* client, void* data, uint32_t version, uint32_t id) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+bind_subcompositor	host/libs/wayland/wayland_subcompositor.cpp	/^void bind_subcompositor(wl_client* client,$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+bind_virtio_gpu_metadata	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^void bind_virtio_gpu_metadata(wl_client* client, void* data,$/;"	f	namespace:wayland::__anon027348120111	typeref:typename:void
+bitErrorRate	guest/hals/ril/reference-libril/ril.h	/^    int bitErrorRate;    \/* bit error rate (0-7, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:__anon0bfbaecf4608	typeref:typename:int
+bitErrorRate	guest/hals/ril/reference-libril/ril.h	/^    int bitErrorRate;    \/* bit error rate (0-7, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:__anon0bfbaecf4708	typeref:typename:int
+bitErrorRate	guest/hals/ril/reference-libril/ril.h	/^    int bitErrorRate;    \/* bit error rate (0-7, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:__anon0bfbaecf4808	typeref:typename:int
+bitmap	guest/hals/ril/reference-ril/reference-ril.c	/^    int bitmap;$/;"	m	struct:__anon70d7df6f0208	typeref:typename:int	file:
+bits_per_sample	host/frontend/webrtc/audio_handler.cpp	/^  int bits_per_sample() const override { return bits_per_sample_; }$/;"	f	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:int	file:
+bits_per_sample	host/frontend/webrtc/audio_handler.h	/^    int bits_per_sample = -1;$/;"	m	struct:cuttlefish::AudioHandler::StreamDesc	typeref:typename:int
+bits_per_sample_	host/frontend/webrtc/audio_handler.cpp	/^  int bits_per_sample_;$/;"	m	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:int	file:
+blank_data_image_mb	host/libs/config/cuttlefish_config.cpp	/^int CuttlefishConfig::blank_data_image_mb() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:int
+bluetooth	guest/hals/bt/remote/remote_bluetooth.cpp	/^namespace bluetooth {$/;"	n	namespace:android::hardware	file:
+bluetooth	guest/hals/bt/remote/remote_bluetooth.h	/^namespace bluetooth {$/;"	n	namespace:android::hardware
+bluetooth-console-button	host/frontend/webrtc_operator/assets/client.html	/^            <button id='bluetooth-console-button' title='Bluetooth console' class='material-icon/;"	I
+bluetooth-console-close	host/frontend/webrtc_operator/assets/client.html	/^          <button id='bluetooth-console-close' title='Close' class='material-icons modal-close'>/;"	I
+bluetooth-console-cmd-label	host/frontend/webrtc_operator/assets/client.html	/^            <tr><td width='1'><p id='bluetooth-console-cmd-label'>Command:<\/p><\/td><td width='/;"	I
+bluetooth-console-input	host/frontend/webrtc_operator/assets/client.html	/^            <tr><td width='1'><p id='bluetooth-console-cmd-label'>Command:<\/p><\/td><td width='/;"	I
+bluetooth-console-modal	host/frontend/webrtc_operator/assets/client.html	/^      <div id='bluetooth-console-modal' class='modal'>$/;"	I
+bluetooth-console-modal-header	host/frontend/webrtc_operator/assets/client.html	/^        <div id='bluetooth-console-modal-header' class='modal-header'>$/;"	I
+bluetooth-console-view	host/frontend/webrtc_operator/assets/client.html	/^            <tr><td colspan='2'><textarea id='bluetooth-console-view' readonly rows='10' cols='6/;"	I
+bluetoothChannel	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #bluetoothChannel;$/;"	M	class:DeviceConnection
+bluetooth_channel_	host/frontend/webrtc/lib/client_handler.cpp	/^  rtc::scoped_refptr<webrtc::DataChannelInterface> bluetooth_channel_;$/;"	m	class:cuttlefish::webrtc_streaming::BluetoothChannelHandler	typeref:typename:rtc::scoped_refptr<webrtc::DataChannelInterface>	file:
+bluetooth_handler_	host/frontend/webrtc/connection_observer.cpp	/^      bluetooth_handler_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:std::shared_ptr<cuttlefish::webrtc_streaming::BluetoothHandler>	file:
+bluetooth_handler_	host/frontend/webrtc/lib/client_handler.h	/^  std::unique_ptr<BluetoothChannelHandler> bluetooth_handler_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::unique_ptr<BluetoothChannelHandler>
+body	host/frontend/webrtc_operator/assets/index.css	/^body {$/;"	s
+body	host/frontend/webrtc_operator/assets/style.css	/^body {$/;"	s
+bootStateMachineComponent	host/commands/run_cvd/boot_state_machine.cc	/^bootStateMachineComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<const CuttlefishConfig,KernelLogPipeProvider>>
+boot_event_handler_	host/commands/run_cvd/boot_state_machine.cc	/^  std::thread boot_event_handler_;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:std::thread	file:
+boot_filename	common/libs/utils/network.cpp	/^  std::uint8_t boot_filename[128];$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t[128]	file:
+boot_patchlevel_	host/commands/secure_env/tpm_key_blob_maker.h	/^  std::optional<uint32_t> boot_patchlevel_;$/;"	m	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:std::optional<uint32_t>
+boot_patchlevel_	host/commands/secure_env/tpm_keymaster_context.h	/^  std::optional<uint32_t> boot_patchlevel_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::optional<uint32_t>
+boot_signature	host/libs/config/mbr.h	/^  std::uint8_t boot_signature[2];$/;"	m	struct:MasterBootRecord	typeref:typename:std::uint8_t[2]
+boot_slot	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::boot_slot() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+bootconfig_supported	host/commands/assemble_cvd/flags.h	/^  bool bootconfig_supported;$/;"	m	struct:cuttlefish::KernelConfig	typeref:typename:bool
+bootconfig_supported	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::bootconfig_supported() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+bootloader	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::bootloader() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+bootstrap_code	host/libs/config/mbr.h	/^  std::uint8_t bootstrap_code[446];$/;"	m	struct:MasterBootRecord	typeref:typename:std::uint8_t[446]
+bridge_name_	host/libs/allocd/resource.h	/^  std::string bridge_name_;$/;"	m	class:cuttlefish::EthernetIface	typeref:typename:std::string
+broadcast	common/libs/device_config/device_config.proto	/^    string broadcast = 4;$/;"	f	message:cuttlefish.DeviceConfig.RILConfig	typeref:typename:string
+broadcast_config_	host/commands/modem_simulator/sms_service.h	/^  BroadcastConfig broadcast_config_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:BroadcastConfig
+broadcaster_	host/frontend/webrtc/lib/video_track_source_impl.h	/^  rtc::VideoBroadcaster broadcaster_;$/;"	m	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:rtc::VideoBroadcaster
+bsic	guest/hals/ril/reference-libril/ril.h	/^    uint8_t bsic; \/* 6-bit Base Station Identity Code; 0xFF if unknown *\/$/;"	m	struct:__anon0bfbaecf5908	typeref:typename:uint8_t
+bsic	guest/hals/ril/reference-libril/ril.h	/^    uint8_t bsic;\/* 6-bit Base Station Identity Code, 0xFF if unknown *\/$/;"	m	struct:__anon0bfbaecf7808	typeref:typename:uint8_t
+buf	guest/hals/ril/reference-libril/ril.h	/^  char buf[CDMA_NUMBER_INFO_BUFFER_LENGTH];$/;"	m	struct:__anon0bfbaecf8308	typeref:typename:char[]
+buf	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.h	/^  char* buf;$/;"	m	struct:android_wifi_priv_cmd	typeref:typename:char *
+buf_	common/libs/fs/shared_fd_stream.h	/^  SharedFDStreambuf buf_;$/;"	m	class:cuttlefish::SharedFDIstream	typeref:typename:SharedFDStreambuf
+buf_	common/libs/fs/shared_fd_stream.h	/^  SharedFDStreambuf buf_;$/;"	m	class:cuttlefish::SharedFDOstream	typeref:typename:SharedFDStreambuf
+buf_	host/frontend/webrtc/display_handler.h	/^  std::unique_ptr<CvdVideoFrameBuffer> buf_;$/;"	m	struct:cuttlefish::WebRtcScProcessedFrame	typeref:typename:std::unique_ptr<CvdVideoFrameBuffer>
+buffer	host/frontend/webrtc/audio_handler.h	/^    HoldingBuffer buffer;$/;"	m	struct:cuttlefish::AudioHandler::StreamDesc	typeref:typename:HoldingBuffer
+buffer	host/frontend/webrtc/audio_handler.h	/^    std::vector<uint8_t> buffer;$/;"	m	struct:cuttlefish::AudioHandler::HoldingBuffer	typeref:typename:std::vector<uint8_t>
+bufferId	guest/hals/camera/cached_stream_buffer.h	/^  uint64_t bufferId() const { return buffer_id_; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:uint64_t
+buffer_	guest/hals/camera/cached_stream_buffer.h	/^  buffer_handle_t buffer_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:buffer_handle_t
+buffer_	host/frontend/webrtc/audio_handler.cpp	/^  const uint8_t* buffer_;$/;"	m	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:const uint8_t *	file:
+buffer_	host/frontend/webrtc/connection_observer.cpp	/^  std::vector<T> buffer_;$/;"	m	struct:cuttlefish::InputEventBufferImpl	typeref:typename:std::vector<T>	file:
+buffer_	host/frontend/webrtc/lib/ws_connection.cpp	/^    std::vector<uint8_t> buffer_;$/;"	m	struct:WsConnectionImpl::WsBuffer	typeref:typename:std::vector<uint8_t>	file:
+buffer_	host/libs/audio_connector/buffers.h	/^  const volatile uint8_t* const buffer_;$/;"	m	class:cuttlefish::TxBuffer	typeref:typename:const volatile uint8_t * const
+buffer_	host/libs/audio_connector/buffers.h	/^  volatile uint8_t* const buffer_;$/;"	m	class:cuttlefish::RxBuffer	typeref:typename:volatile uint8_t * const
+buffer_	host/libs/screen_connector/screen_connector_queue.h	/^  std::deque<T> buffer_;$/;"	m	class:cuttlefish::ScreenConnectorQueue	typeref:typename:std::deque<T>
+buffer_bytes	host/libs/audio_connector/commands.h	/^  uint32_t buffer_bytes() const { return buffer_bytes_; }$/;"	f	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:uint32_t
+buffer_bytes	host/libs/audio_connector/shm_layout.h	/^  Le32 buffer_bytes;$/;"	m	struct:cuttlefish::virtio_snd_pcm_set_params	typeref:typename:Le32
+buffer_bytes_	host/libs/audio_connector/commands.h	/^  const uint32_t buffer_bytes_;$/;"	m	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:const uint32_t
+buffer_cache_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  StreamBufferCache buffer_cache_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:StreamBufferCache
+buffer_count	guest/hals/camera/vsock_camera_device_session_3_4.h	/^    uint32_t buffer_count;$/;"	m	struct:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::ReadVsockRequest	typeref:typename:uint32_t
+buffer_destroy	host/libs/wayland/wayland_dmabuf.cpp	/^void buffer_destroy(wl_client*, wl_resource* buffer) {$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+buffer_id_	guest/hals/camera/cached_stream_buffer.h	/^  uint64_t buffer_id_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:uint64_t
+buffer_ids	guest/hals/camera/vsock_camera_device_session_3_4.h	/^    std::vector<uint64_t> buffer_ids;$/;"	m	struct:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::ReadVsockRequest	typeref:typename:std::vector<uint64_t>
+buffer_implementation	host/libs/wayland/wayland_dmabuf.cpp	/^const struct wl_buffer_interface buffer_implementation = {$/;"	v	namespace:wayland::__anon8f5be4990111	typeref:typename:const struct wl_buffer_interface
+buffer_len	host/libs/audio_connector/shm_layout.h	/^  uint32_t buffer_len;$/;"	m	struct:cuttlefish::IoTransferMsg	typeref:typename:uint32_t
+buffer_offset	host/libs/audio_connector/shm_layout.h	/^  uint32_t buffer_offset;$/;"	m	struct:cuttlefish::IoStatusMsg	typeref:typename:uint32_t
+buffer_offset	host/libs/audio_connector/shm_layout.h	/^  uint32_t buffer_offset;$/;"	m	struct:cuttlefish::IoTransferMsg	typeref:typename:uint32_t
+buffer_queue_	host/libs/websocket/websocket_handler.h	/^  std::deque<WsBuffer> buffer_queue_;$/;"	m	class:cuttlefish::WebSocketHandler	typeref:typename:std::deque<WsBuffer>
+buffer_status_	host/libs/confui/cbor.h	/^  Error buffer_status_;$/;"	m	class:cuttlefish::confui::Cbor	typeref:typename:Error
+build_id	host/libs/config/fetcher_config.h	/^  std::string build_id;$/;"	m	struct:cuttlefish::CvdFile	typeref:typename:std::string
+build_instance	tools/create_base_image.go	/^var build_instance string$/;"	v	package:main	typeref:typename:string
+build_project	tools/create_base_image.go	/^var build_project string$/;"	v	package:main	typeref:typename:string
+build_slist	host/commands/fetcher/curl_wrapper.cc	/^curl_slist* build_slist(const std::vector<std::string>& strings) {$/;"	f	namespace:cuttlefish::__anondfffca8d0111	typeref:typename:curl_slist *
+build_target	host/libs/config/fetcher_config.h	/^  std::string build_target;$/;"	m	struct:cuttlefish::CvdFile	typeref:typename:std::string
+build_zone	tools/create_base_image.go	/^var build_zone string$/;"	v	package:main	typeref:typename:string
+bus_type_	guest/commands/vsoc_input_service/virtual_device_base.h	/^  const uint16_t bus_type_;$/;"	m	class:cuttlefish_input_service::VirtualDeviceBase	typeref:typename:const uint16_t
+button	host/example_custom_actions/custom_action_config.json	/^		"button":{$/;"	o	object:0
+button	shared/config/config_foldable.json	/^                        "button":{$/;"	o	object:custom_actions.0
+button	shared/config/config_foldable.json	/^                        "button":{$/;"	o	object:custom_actions.1
+buttons	host/example_custom_actions/custom_action_config.json	/^		"buttons":[$/;"	a	object:1
+buttons	host/frontend/webrtc_operator/assets/js/app.js	/^  #buttons = {};$/;"	M	class:DeviceControlApp
+buttons	host/libs/config/custom_actions.h	/^  std::vector<ControlPanelButton> buttons;$/;"	m	struct:cuttlefish::CustomActionConfig	typeref:typename:std::vector<ControlPanelButton>
+cache_	guest/hals/camera/stream_buffer_cache.h	/^  std::vector<std::shared_ptr<CachedStreamBuffer>> cache_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::StreamBufferCache	typeref:typename:std::vector<std::shared_ptr<CachedStreamBuffer>>
+cached_gnss_raw	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::string cached_gnss_raw;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:std::string	file:
+cached_gnss_raw_mutex	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::mutex cached_gnss_raw_mutex;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:std::mutex	file:
+cached_jpeg_	guest/hals/camera/vsock_frame_provider.h	/^  std::vector<char> cached_jpeg_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::vector<char>
+cached_nmea	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::string cached_nmea;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:std::string	file:
+cached_nmea_mutex	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::mutex cached_nmea_mutex;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:std::mutex	file:
+calcNextTimeout	guest/hals/ril/reference-libril/ril_event.cpp	/^static int calcNextTimeout(struct timeval * tv)$/;"	f	typeref:typename:int	file:
+callFromCLCCLine	guest/hals/ril/reference-ril/reference-ril.c	/^static int callFromCLCCLine(char *line, RIL_Call *p_call)$/;"	f	typeref:typename:int	file:
+callRingInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::callRingInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+callStateChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::callStateChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+callStateToString	guest/hals/ril/reference-libril/ril.cpp	/^callStateToString(RIL_CallState s) {$/;"	f	namespace:android	typeref:typename:const char *
+call_forward_infos_	host/commands/modem_simulator/sup_service.h	/^  std::vector<CallForwardInfo> call_forward_infos_;$/;"	m	class:cuttlefish::SupService	typeref:typename:std::vector<CallForwardInfo>
+call_state	host/commands/modem_simulator/call_service.h	/^    CallState call_state;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:CallState
+call_waiting_info_	host/commands/modem_simulator/sup_service.h	/^  CallWaitingInfo call_waiting_info_;$/;"	m	class:cuttlefish::SupService	typeref:typename:CallWaitingInfo
+callback_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  const sp<ICameraDeviceCallback> callback_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:const sp<ICameraDeviceCallback>
+callback_	host/libs/wayland/wayland_surfaces.h	/^  std::optional<FrameCallback> callback_;$/;"	m	class:wayland::Surfaces	typeref:typename:std::optional<FrameCallback>
+callback_from_streamer_	host/libs/screen_connector/screen_connector.h	/^  GenerateProcessedFrameCallback callback_from_streamer_;$/;"	m	class:cuttlefish::ScreenConnector	typeref:typename:GenerateProcessedFrameCallback
+callback_mutex_	host/libs/wayland/wayland_surfaces.h	/^  std::mutex callback_mutex_;$/;"	m	class:wayland::Surfaces	typeref:typename:std::mutex
+callback_t	guest/hals/camera/vsock_camera_server.h	/^  using callback_t =$/;"	t	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer
+callback_thread_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    std::thread callback_thread_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:std::thread
+callbacks_	guest/hals/camera/vsock_camera_provider_2_7.h	/^  sp<ICameraProviderCallback> callbacks_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:sp<ICameraProviderCallback>
+camera	guest/hals/camera/cached_stream_buffer.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware	file:
+camera	guest/hals/camera/cached_stream_buffer.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware
+camera	guest/hals/camera/stream_buffer_cache.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware	file:
+camera	guest/hals/camera/stream_buffer_cache.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware
+camera	guest/hals/camera/vsock_camera_device_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware	file:
+camera	guest/hals/camera/vsock_camera_device_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware
+camera	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware	file:
+camera	guest/hals/camera/vsock_camera_device_session_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware
+camera	guest/hals/camera/vsock_camera_metadata.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware	file:
+camera	guest/hals/camera/vsock_camera_metadata.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware
+camera	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware	file:
+camera	guest/hals/camera/vsock_camera_provider_2_7.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware
+camera	guest/hals/camera/vsock_camera_server.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware	file:
+camera	guest/hals/camera/vsock_camera_server.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware
+camera-control	host/frontend/webrtc_operator/assets/client.html	/^            <div id="camera-control" title="Capture Camera"><\/div>$/;"	I
+cameraDataChannel	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #cameraDataChannel;$/;"	M	class:DeviceConnection
+cameraEnabled	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  get cameraEnabled() {$/;"	G	class:DeviceConnection
+cameraHeight	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  get cameraHeight() {$/;"	G	class:DeviceConnection
+cameraInputQueue	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #cameraInputQueue;$/;"	M	class:DeviceConnection
+cameraSenders	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #cameraSenders = [];$/;"	M	class:DeviceConnection
+cameraWidth	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  get cameraWidth() {$/;"	G	class:DeviceConnection
+camera_channel_	host/frontend/webrtc/lib/client_handler.cpp	/^  rtc::scoped_refptr<webrtc::DataChannelInterface> camera_channel_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraChannelHandler	typeref:typename:rtc::scoped_refptr<webrtc::DataChannelInterface>	file:
+camera_characteristics_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  VsockCameraMetadata camera_characteristics_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:VsockCameraMetadata
+camera_controller_	host/frontend/webrtc/connection_observer.cpp	/^  cuttlefish::CameraController *camera_controller_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:cuttlefish::CameraController *	file:
+camera_controller_	host/frontend/webrtc/connection_observer.h	/^  cuttlefish::CameraController* camera_controller_ = nullptr;$/;"	m	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:cuttlefish::CameraController *
+camera_data_handler_	host/frontend/webrtc/lib/client_handler.h	/^  std::unique_ptr<CameraChannelHandler> camera_data_handler_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::unique_ptr<CameraChannelHandler>
+camera_res_x	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #camera_res_x;$/;"	M	class:DeviceConnection
+camera_res_y	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #camera_res_y;$/;"	M	class:DeviceConnection
+camera_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::camera_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+camera_session_active_	host/frontend/webrtc/lib/camera_streamer.h	/^  std::atomic<bool> camera_session_active_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:std::atomic<bool>
+camera_streamer_	host/frontend/webrtc/lib/streamer.cpp	/^  std::unique_ptr<CameraStreamer> camera_streamer_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::unique_ptr<CameraStreamer>	file:
+camera_track_	host/frontend/webrtc/lib/client_handler.h	/^  std::unique_ptr<ClientVideoTrackImpl> camera_track_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::unique_ptr<ClientVideoTrackImpl>
+can_init_gles2_on_egl_surfaceless	host/libs/graphics_detector/graphics_detector.h	/^  bool can_init_gles2_on_egl_surfaceless = false;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:bool
+can_present_number	host/commands/modem_simulator/call_service.h	/^    bool can_present_number;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+cancel	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    public boolean cancel(boolean canInterrupt) {$/;"	m	class:GceFuture
+cancel	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^        public synchronized void cancel() {$/;"	m	class:GceWifiManager.MonitorWifiJob
+cancelHandover	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::cancelHandover(int32_t serial, int32_t callId) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+cancelHandoverResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cancelHandoverResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+cancelJpegRequest	guest/hals/camera/vsock_frame_provider.cpp	/^void VsockFrameProvider::cancelJpegRequest() { jpeg_pending_ = false; }$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:void
+cancelPendingUssd	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::cancelPendingUssd(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+cancelPendingUssdResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cancelPendingUssdResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+cancelled	guest/hals/ril/reference-libril/ril_internal.h	/^    char cancelled;$/;"	m	struct:android::RequestInfo	typeref:typename:char
+capacity	host/commands/health/health.cpp	/^int capacity() {$/;"	f	typeref:typename:int
+capacity_	common/libs/concurrency/semaphore.h	/^  const unsigned int capacity_;  \/\/ inclusive upper limit$/;"	m	class:cuttlefish::Semaphore	typeref:typename:const unsigned int
+cardState	guest/hals/ril/reference-libril/ril.h	/^    RIL_CardState cardState;$/;"	m	struct:__anon0bfbaecfb908	typeref:typename:RIL_CardState
+card_state	guest/hals/ril/reference-libril/ril.h	/^  RIL_CardState card_state;$/;"	m	struct:__anon0bfbaecf3908	typeref:typename:RIL_CardState
+card_state	guest/hals/ril/reference-libril/ril.h	/^  RIL_CardState card_state;$/;"	m	struct:__anon0bfbaecf3a08	typeref:typename:RIL_CardState
+carrierInfoForImsiEncryption	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::carrierInfoForImsiEncryption(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+carrierKey	guest/hals/ril/reference-libril/ril.h	/^    uint8_t* carrierKey;       \/* Public Key from the Carrier used to encrypt the$/;"	m	struct:__anon0bfbaecf2c08	typeref:typename:uint8_t *
+carrierKey	guest/hals/ril/reference-libril/ril.h	/^  uint8_t * carrierKey;               \/* Public Key from the Carrier used to encrypt the$/;"	m	struct:__anon0bfbaecf2a08	typeref:typename:uint8_t *
+carrierKeyLength	guest/hals/ril/reference-libril/ril.h	/^    int32_t carrierKeyLength;  \/* Length of the Public Key. *\/$/;"	m	struct:__anon0bfbaecf2c08	typeref:typename:int32_t
+carrierKeyLength	guest/hals/ril/reference-libril/ril.h	/^  int32_t carrierKeyLength;            \/* Length of the Public Key. *\/$/;"	m	struct:__anon0bfbaecf2a08	typeref:typename:int32_t
+categories	guest/hals/ril/reference-libril/ril.h	/^    RIL_EmergencyServiceCategory categories; \/* The bitfield of @1.4::EmergencyServiceCategory(/;"	m	struct:__anon0bfbaecfb708	typeref:typename:RIL_EmergencyServiceCategory
+cause	guest/hals/ril/reference-libril/ril.h	/^  char cause;$/;"	m	struct:__anon0bfbaecf8708	typeref:typename:char
+cause_code	guest/hals/ril/reference-libril/ril.h	/^  RIL_LastCallFailCause cause_code;$/;"	m	struct:__anon0bfbaecf2e08	typeref:typename:RIL_LastCallFailCause
+cb	host/commands/modem_simulator/thread_looper.h	/^      Callback cb;$/;"	m	struct:cuttlefish::ThreadLooper::Event	typeref:typename:Callback
+cbor_	host/libs/confui/session.h	/^  std::unique_ptr<Cbor> cbor_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::unique_ptr<Cbor>
+cdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoCdma        cdma;$/;"	m	union:__anon0bfbaecf7008::__anon0bfbaecf710a	typeref:typename:RIL_CellInfoCdma
+cdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoCdma        cdma;$/;"	m	union:__anon0bfbaecf7208::__anon0bfbaecf730a	typeref:typename:RIL_CellInfoCdma
+cdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoCdma    cdma;$/;"	m	union:__anon0bfbaecf6e08::__anon0bfbaecf6f0a	typeref:typename:RIL_CellInfoCdma
+cdmaCallWaitingInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cdmaCallWaitingInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+cdmaInfoRecInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cdmaInfoRecInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+cdmaMessage	guest/hals/ril/reference-libril/ril.h	/^        RIL_CDMA_SMS_Message* cdmaMessage;$/;"	m	union:__anon0bfbaecf1808::__anon0bfbaecf190a	typeref:typename:RIL_CDMA_SMS_Message *
+cdmaNewSmsInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cdmaNewSmsInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+cdmaOtaProvisionStatusInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cdmaOtaProvisionStatusInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+cdmaPrlChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cdmaPrlChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+cdmaRuimSmsStorageFullInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cdmaRuimSmsStorageFullInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+cdmaSms	guest/hals/ril/reference-libril/ril_service.cpp	/^    RIL_CDMA_SMS_Message cdmaSms;$/;"	m	struct:ImsCdmaSms	typeref:typename:RIL_CDMA_SMS_Message	file:
+cdmaSubscriptionSourceChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cdmaSubscriptionSourceChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+cdma_dbm	host/commands/modem_simulator/network_service.h	/^    int cdma_dbm;   \/* Valid values are positive integers.  This value is the actual RSSI value$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+cdma_ecio	host/commands/modem_simulator/network_service.h	/^    int cdma_ecio;  \/* Valid values are positive integers.  This value is the actual Ec\/Io mul/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+cdma_roaming_preference_	host/commands/modem_simulator/sim_service.h	/^  int cdma_roaming_preference_;$/;"	m	class:cuttlefish::SimService	typeref:typename:int
+cdma_subscription_app_index	guest/hals/ril/reference-libril/ril.h	/^  int           cdma_subscription_app_index;     \/* value < RIL_CARD_MAX_APPS, -1 if none *\/$/;"	m	struct:__anon0bfbaecf3908	typeref:typename:int
+cdma_subscription_app_index	guest/hals/ril/reference-libril/ril.h	/^  int           cdma_subscription_app_index;     \/* value < RIL_CARD_MAX_APPS, -1 if none *\/$/;"	m	struct:__anon0bfbaecf3a08	typeref:typename:int
+cdma_subscription_source_	host/commands/modem_simulator/sim_service.h	/^  int cdma_subscription_source_;$/;"	m	class:cuttlefish::SimService	typeref:typename:int
+cellIdentity	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentity_v16 cellIdentity;    \/\/ Current cell information$/;"	m	struct:__anon0bfbaecf8008	typeref:typename:RIL_CellIdentity_v16
+cellIdentity	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentity_v16 cellIdentity;    \/\/ current cell information$/;"	m	struct:__anon0bfbaecf7f08	typeref:typename:RIL_CellIdentity_v16
+cellIdentityCdma	guest/hals/ril/reference-libril/ril.h	/^      RIL_CellIdentityCdma_v1_2 cellIdentityCdma;$/;"	m	union:__anon0bfbaecf7d08::__anon0bfbaecf7e0a	typeref:typename:RIL_CellIdentityCdma_v1_2
+cellIdentityCdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityCdma cellIdentityCdma;$/;"	m	union:__anon0bfbaecf7408::__anon0bfbaecf750a	typeref:typename:RIL_CellIdentityCdma
+cellIdentityCdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityCdma cellIdentityCdma;$/;"	m	union:__anon0bfbaecf7608::__anon0bfbaecf770a	typeref:typename:RIL_CellIdentityCdma
+cellIdentityCdma	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityCdma      cellIdentityCdma;$/;"	m	struct:__anon0bfbaecf6608	typeref:typename:RIL_CellIdentityCdma
+cellIdentityGsm	guest/hals/ril/reference-libril/ril.h	/^      RIL_CellIdentityGsm_v1_2 cellIdentityGsm;$/;"	m	union:__anon0bfbaecf7d08::__anon0bfbaecf7e0a	typeref:typename:RIL_CellIdentityGsm_v1_2
+cellIdentityGsm	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityGsm_v12 cellIdentityGsm;$/;"	m	union:__anon0bfbaecf7408::__anon0bfbaecf750a	typeref:typename:RIL_CellIdentityGsm_v12
+cellIdentityGsm	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityGsm_v12 cellIdentityGsm;$/;"	m	union:__anon0bfbaecf7608::__anon0bfbaecf770a	typeref:typename:RIL_CellIdentityGsm_v12
+cellIdentityGsm	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityGsm   cellIdentityGsm;$/;"	m	struct:__anon0bfbaecf6208	typeref:typename:RIL_CellIdentityGsm
+cellIdentityGsm	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityGsm_v12   cellIdentityGsm;$/;"	m	struct:__anon0bfbaecf6308	typeref:typename:RIL_CellIdentityGsm_v12
+cellIdentityLte	guest/hals/ril/reference-libril/ril.h	/^      RIL_CellIdentityLte_v1_2 cellIdentityLte;$/;"	m	union:__anon0bfbaecf7d08::__anon0bfbaecf7e0a	typeref:typename:RIL_CellIdentityLte_v1_2
+cellIdentityLte	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityLte_v12 cellIdentityLte;$/;"	m	union:__anon0bfbaecf7408::__anon0bfbaecf750a	typeref:typename:RIL_CellIdentityLte_v12
+cellIdentityLte	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityLte_v12 cellIdentityLte;$/;"	m	union:__anon0bfbaecf7608::__anon0bfbaecf770a	typeref:typename:RIL_CellIdentityLte_v12
+cellIdentityLte	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityLte        cellIdentityLte;$/;"	m	struct:__anon0bfbaecf6708	typeref:typename:RIL_CellIdentityLte
+cellIdentityLte	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityLte_v12    cellIdentityLte;$/;"	m	struct:__anon0bfbaecf6808	typeref:typename:RIL_CellIdentityLte_v12
+cellIdentityNr	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityNr cellIdentityNr;$/;"	m	union:__anon0bfbaecf7608::__anon0bfbaecf770a	typeref:typename:RIL_CellIdentityNr
+cellIdentityTdscdma	guest/hals/ril/reference-libril/ril.h	/^      RIL_CellIdentityTdscdma_v1_2 cellIdentityTdscdma;$/;"	m	union:__anon0bfbaecf7d08::__anon0bfbaecf7e0a	typeref:typename:RIL_CellIdentityTdscdma_v1_2
+cellIdentityTdscdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityTdscdma cellIdentityTdscdma;$/;"	m	union:__anon0bfbaecf7408::__anon0bfbaecf750a	typeref:typename:RIL_CellIdentityTdscdma
+cellIdentityTdscdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityTdscdma cellIdentityTdscdma;$/;"	m	union:__anon0bfbaecf7608::__anon0bfbaecf770a	typeref:typename:RIL_CellIdentityTdscdma
+cellIdentityTdscdma	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityTdscdma     cellIdentityTdscdma;$/;"	m	struct:__anon0bfbaecf6908	typeref:typename:RIL_CellIdentityTdscdma
+cellIdentityWcdma	guest/hals/ril/reference-libril/ril.h	/^      RIL_CellIdentityWcdma_v1_2 cellIdentityWcdma;$/;"	m	union:__anon0bfbaecf7d08::__anon0bfbaecf7e0a	typeref:typename:RIL_CellIdentityWcdma_v1_2
+cellIdentityWcdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityWcdma_v12 cellIdentityWcdma;$/;"	m	union:__anon0bfbaecf7408::__anon0bfbaecf750a	typeref:typename:RIL_CellIdentityWcdma_v12
+cellIdentityWcdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityWcdma_v12 cellIdentityWcdma;$/;"	m	union:__anon0bfbaecf7608::__anon0bfbaecf770a	typeref:typename:RIL_CellIdentityWcdma_v12
+cellIdentityWcdma	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityWcdma cellIdentityWcdma;$/;"	m	struct:__anon0bfbaecf6408	typeref:typename:RIL_CellIdentityWcdma
+cellIdentityWcdma	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityWcdma_v12 cellIdentityWcdma;$/;"	m	struct:__anon0bfbaecf6508	typeref:typename:RIL_CellIdentityWcdma_v12
+cellInfoListInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::cellInfoListInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+cellInfoType	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoType cellInfoType;$/;"	m	struct:__anon0bfbaecf7d08	typeref:typename:RIL_CellInfoType
+cellInfoType	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellInfoType          cellInfoType;   \/* cell type for selecting from union CellInfo *\/$/;"	m	struct:__anon0bfbaecf7208	typeref:typename:RIL_CellInfoType
+cellInfoType	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellInfoType  cellInfoType;   \/* cell type for selecting from union CellInfo *\/$/;"	m	struct:__anon0bfbaecf6e08	typeref:typename:RIL_CellInfoType
+cellInfoType	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellInfoType  cellInfoType;   \/* cell type for selecting from union CellInfo *\/$/;"	m	struct:__anon0bfbaecf7008	typeref:typename:RIL_CellInfoType
+cellInfoType	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellInfoType  cellInfoType;   \/* cell type for selecting from union CellInfo *\/$/;"	m	struct:__anon0bfbaecf7408	typeref:typename:RIL_CellInfoType
+cellInfoType	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellInfoType  cellInfoType;   \/* cell type for selecting from union CellInfo *\/$/;"	m	struct:__anon0bfbaecf7608	typeref:typename:RIL_CellInfoType
+cellidentity	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellIdentityNr          cellidentity;$/;"	m	struct:__anon0bfbaecf6a08	typeref:typename:RIL_CellIdentityNr
+certs_dir_	host/libs/websocket/websocket_server.h	/^  std::string certs_dir_;$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:std::string
+cfData	guest/hals/ril/reference-libril/ril.h	/^    RIL_CfData cfData;$/;"	m	union:__anon0bfbaecf9908::__anon0bfbaecf9a0a	typeref:typename:RIL_CfData
+cfInfo	guest/hals/ril/reference-libril/ril.h	/^  RIL_CallForwardInfo cfInfo[NUM_SERVICE_CLASSES]; \/* This is the response data$/;"	m	struct:__anon0bfbaecf9808	typeref:typename:RIL_CallForwardInfo[]
+cfg	guest/hals/ril/reference-libril/ril.h	/^  } cfg;$/;"	m	struct:__anon0bfbaecf9308	typeref:union:__anon0bfbaecf9308::__anon0bfbaecf940a
+challenge	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^    uint64_t challenge;$/;"	m	struct:cuttlefish::TpmKeymasterEnforcement::VerifyAuthorization::VerificationData	typeref:typename:uint64_t	file:
+changeIccPin2ForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::changeIccPin2ForApp(int32_t serial, const hidl_string& oldPin2,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+changeIccPin2ForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::changeIccPin2ForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+changeIccPinForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::changeIccPinForApp(int32_t serial, const hidl_string& oldPin,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+changeIccPinForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::changeIccPinForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+channel_	guest/hals/keymaster/remote/remote_keymaster.h	/^    cuttlefish::KeymasterChannel* channel_;$/;"	m	class:keymaster::RemoteKeymaster	typeref:typename:cuttlefish::KeymasterChannel *
+channel_	guest/hals/keymint/remote/remote_keymaster.h	/^  cuttlefish::KeymasterChannel* channel_;$/;"	m	class:keymaster::RemoteKeymaster	typeref:typename:cuttlefish::KeymasterChannel *
+channel_	host/commands/secure_env/gatekeeper_responder.h	/^  cuttlefish::GatekeeperChannel& channel_;$/;"	m	class:cuttlefish::GatekeeperResponder	typeref:typename:cuttlefish::GatekeeperChannel &
+channel_	host/commands/secure_env/keymaster_responder.h	/^  cuttlefish::KeymasterChannel& channel_;$/;"	m	class:cuttlefish::KeymasterResponder	typeref:typename:cuttlefish::KeymasterChannel &
+channel_monitor_	host/commands/modem_simulator/modem_service.h	/^  ChannelMonitor* channel_monitor_;$/;"	m	class:cuttlefish::ModemService	typeref:typename:ChannelMonitor *
+channel_monitor_	host/commands/modem_simulator/modem_simulator.h	/^  std::unique_ptr<ChannelMonitor> channel_monitor_;$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:std::unique_ptr<ChannelMonitor>
+channel_open_reported_	host/frontend/webrtc/lib/client_handler.cpp	/^  bool channel_open_reported_ = false;$/;"	m	class:cuttlefish::webrtc_streaming::AdbChannelHandler	typeref:typename:bool	file:
+channel_open_reported_	host/frontend/webrtc/lib/client_handler.cpp	/^  bool channel_open_reported_ = false;$/;"	m	class:cuttlefish::webrtc_streaming::BluetoothChannelHandler	typeref:typename:bool	file:
+channels	guest/hals/ril/reference-libril/ril.h	/^    uint32_t channels[MAX_CHANNELS];              \/\/ Frequency channels to scan$/;"	m	struct:__anon0bfbaecfab08	typeref:typename:uint32_t[]
+channels	guest/hals/ril/reference-libril/ril.h	/^    uint32_t channels[MAX_CHANNELS]; \/\/ Frequency channels to scan$/;"	m	struct:__anon0bfbaecfae08	typeref:typename:uint32_t[]
+channels	host/frontend/webrtc/audio_handler.cpp	/^  int channels() const override { return channels_; }$/;"	f	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:int	file:
+channels	host/frontend/webrtc/audio_handler.h	/^    int channels = -1;$/;"	m	struct:cuttlefish::AudioHandler::StreamDesc	typeref:typename:int
+channels	host/libs/audio_connector/commands.h	/^  uint8_t channels() const { return channels_; }$/;"	f	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:uint8_t
+channels	host/libs/audio_connector/shm_layout.h	/^  uint8_t channels;$/;"	m	struct:cuttlefish::virtio_snd_chmap_info	typeref:typename:uint8_t
+channels	host/libs/audio_connector/shm_layout.h	/^  uint8_t channels;$/;"	m	struct:cuttlefish::virtio_snd_pcm_set_params	typeref:typename:uint8_t
+channels_	host/frontend/webrtc/audio_handler.cpp	/^  int channels_;$/;"	m	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:int	file:
+channels_	host/libs/audio_connector/commands.h	/^  const uint8_t channels_;$/;"	m	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:const uint8_t
+channels_length	guest/hals/ril/reference-libril/ril.h	/^    uint32_t channels_length;                     \/\/ Length of channels$/;"	m	struct:__anon0bfbaecfab08	typeref:typename:uint32_t
+channels_length	guest/hals/ril/reference-libril/ril.h	/^    uint32_t channels_length; \/\/ Length of channels$/;"	m	struct:__anon0bfbaecfae08	typeref:typename:uint32_t
+channels_max	host/libs/audio_connector/shm_layout.h	/^  uint8_t channels_max;$/;"	m	struct:cuttlefish::virtio_snd_pcm_info	typeref:typename:uint8_t
+channels_min	host/libs/audio_connector/shm_layout.h	/^  uint8_t channels_min;$/;"	m	struct:cuttlefish::virtio_snd_pcm_info	typeref:typename:uint8_t
+checkAndDequeue	guest/hals/ril/reference-libril/rilSocketQueue.h	/^int Ril_queue<T>::checkAndDequeue(MsgId id, int token) {$/;"	f	class:Ril_queue	typeref:typename:int
+checkAndDequeueRequestInfoIfAck	guest/hals/ril/reference-libril/ril.cpp	/^checkAndDequeueRequestInfoIfAck(struct RequestInfo *pRI, bool isAck) {$/;"	f	namespace:android	typeref:typename:int	file:
+checkPin1AndAdjustSimStatus	host/commands/modem_simulator/sim_service.cpp	/^bool SimService::checkPin1AndAdjustSimStatus(std::string_view pin) {$/;"	f	class:cuttlefish::SimService	typeref:typename:bool
+checkReturnStatus	guest/hals/ril/reference-libril/ril_config.cpp	/^void checkReturnStatus(Return<void>& ret) {$/;"	f	typeref:typename:void
+checkReturnStatus	guest/hals/ril/reference-libril/ril_service.cpp	/^void RadioImpl_1_6::checkReturnStatus(Return<void>& ret) {$/;"	f	class:RadioImpl_1_6	typeref:typename:void
+checkReturnStatus	guest/hals/ril/reference-libril/ril_service.cpp	/^void checkReturnStatus(int32_t slotId, Return<void>& ret, bool isRadioService) {$/;"	f	typeref:typename:void
+checkReturnStatus	guest/hals/ril/reference-libril/sap_service.cpp	/^void SapImpl::checkReturnStatus(Return<void>& ret) {$/;"	f	class:SapImpl	typeref:typename:void
+checkReturnStatus_config	guest/hals/ril/reference-libril/ril_config.cpp	/^void RadioConfigImpl::checkReturnStatus_config(Return<void>& ret) {$/;"	f	class:RadioConfigImpl	typeref:typename:void
+chmaps	host/libs/audio_connector/shm_layout.h	/^  uint32_t chmaps;$/;"	m	struct:cuttlefish::VioSConfig	typeref:typename:uint32_t
+choose_hton	host/libs/confui/sign_utils.h	/^struct choose_hton;$/;"	v	namespace:cuttlefish::confui::support	typeref:typename:const struct
+choose_hton	host/libs/confui/sign_utils.h	/^struct choose_hton<IntType, __ORDER_BIG_ENDIAN__> {$/;"	s	namespace:cuttlefish::confui::support
+choose_hton	host/libs/confui/sign_utils.h	/^struct choose_hton<IntType, __ORDER_LITTLE_ENDIAN__> {$/;"	s	namespace:cuttlefish::confui::support
+ci	guest/hals/ril/reference-libril/ril.h	/^    int ci;     \/* 28-bit Cell Identity described in TS ???, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf5d08	typeref:typename:int
+ci	guest/hals/ril/reference-libril/ril.h	/^    int ci;     \/* 28-bit Cell Identity described in TS ???, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf5e08	typeref:typename:int
+ci	guest/hals/ril/reference-libril/ril.h	/^    int ci;     \/* 28-bit Cell Identity described in TS ???, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int             cid;        \/* Context ID, uniquely identifies this call *\/$/;"	m	struct:__anon0bfbaecf1208	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int             cid;        \/* Context ID, uniquely identifies this call *\/$/;"	m	struct:__anon0bfbaecf1308	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int             cid;        \/* Context ID, uniquely identifies this call *\/$/;"	m	struct:__anon0bfbaecf1408	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int             cid;        \/* Context ID, uniquely identifies this call *\/$/;"	m	struct:__anon0bfbaecf1508	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int             cid;        \/* Context ID, uniquely identifies this call *\/$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;                                 \/* Context ID, uniquely identifies this call *\/$/;"	m	struct:__anon0bfbaecfc508	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;                    \/* Context ID, uniquely identifies this call *\/$/;"	m	struct:__anon0bfbaecfc308	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;    \/* 16-bit GSM Cell Identity described in TS 27.007, 0..65535, INT_MAX if unknow/;"	m	struct:__anon0bfbaecf5808	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;    \/* 16-bit GSM Cell Identity described in TS 27.007, 0..65535, INT_MAX if unknow/;"	m	struct:__anon0bfbaecf5908	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;    \/* 16-bit GSM Cell Identity described in TS 27.007, 0..65535, INT_MAX if unknow/;"	m	struct:__anon0bfbaecf7808	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;    \/* 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, INT_MAX if u/;"	m	struct:__anon0bfbaecf5a08	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;    \/* 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, INT_MAX if u/;"	m	struct:__anon0bfbaecf5b08	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;    \/* 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, INT_MAX if u/;"	m	struct:__anon0bfbaecf5f08	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;    \/* 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, INT_MAX if u/;"	m	struct:__anon0bfbaecf7908	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^    int cid;    \/* 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, INT_MAX if u/;"	m	struct:__anon0bfbaecf7b08	typeref:typename:int
+cid	guest/hals/ril/reference-libril/ril.h	/^   char * cid;         \/* Combination of LAC and Cell Id in 32 bits in GSM.$/;"	m	struct:__anon0bfbaecf2208	typeref:typename:char *
+cid	guest/hals/ril/reference-ril/reference-ril.c	/^    int cid;$/;"	m	struct:PDPInfo	typeref:typename:int	file:
+cid	host/commands/modem_simulator/data_service.h	/^    int cid;$/;"	m	struct:cuttlefish::DataService::PDPContext	typeref:typename:int
+cid_	host/frontend/webrtc/lib/camera_streamer.h	/^  unsigned int cid_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:unsigned int
+cla	guest/hals/ril/reference-libril/ril.h	/^    int cla;$/;"	m	struct:__anon0bfbaecf1f08	typeref:typename:int
+classx	host/commands/modem_simulator/sup_service.h	/^    int classx;               \/\/ a sum of integers each representing a class of information$/;"	m	struct:cuttlefish::SupService::CallWaitingInfo	typeref:typename:int
+clccStateToRILState	guest/hals/ril/reference-ril/reference-ril.c	/^static int clccStateToRILState(int state, RIL_CallState *p_state)$/;"	f	typeref:typename:int	file:
+cleanup	tools/network-setup.sh	/^cleanup() {$/;"	f
+clear	guest/hals/camera/stream_buffer_cache.cpp	/^void StreamBufferCache::clear() {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::StreamBufferCache	typeref:typename:void
+clearPendingCommand	guest/hals/ril/reference-ril/atchannel.c	/^static void clearPendingCommand()$/;"	f	typeref:typename:void	file:
+clearPrintBuf	guest/hals/ril/reference-libril/ril_internal.h	/^    #define clearPrintBuf /;"	d
+clearTombstonesFromCuttlefish	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    public void clearTombstonesFromCuttlefish() throws DeviceNotAvailableException {$/;"	m	class:TombstoneTransmitTest
+client_fd	host/commands/modem_simulator/channel_monitor.h	/^  cuttlefish::SharedFD client_fd;$/;"	m	class:cuttlefish::Client	typeref:typename:cuttlefish::SharedFD
+client_handler_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::weak_ptr<ClientHandler> client_handler_;$/;"	m	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdCreateSessionDescriptionObserver	typeref:typename:std::weak_ptr<ClientHandler>	file:
+client_handler_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::weak_ptr<ClientHandler> client_handler_;$/;"	m	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdSetSessionDescriptionObserver	typeref:typename:std::weak_ptr<ClientHandler>	file:
+client_harware_address	common/libs/utils/network.cpp	/^  std::uint8_t client_harware_address[16];$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t[16]	file:
+client_id	common/libs/utils/network.h	/^  std::string client_id;$/;"	m	struct:cuttlefish::DnsmasqDhcp4Lease	typeref:typename:std::string
+client_id	host/frontend/webrtc_operator/client_handler.cpp	/^  size_t client_id() const { return client_id_; }$/;"	f	class:cuttlefish::PollConnectionHandler	typeref:typename:size_t	file:
+client_id_	host/frontend/webrtc/lib/client_handler.h	/^  int client_id_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:int
+client_id_	host/frontend/webrtc_operator/client_handler.cpp	/^  size_t client_id_ = 0;$/;"	m	class:cuttlefish::PollConnectionHandler	typeref:typename:size_t	file:
+client_id_	host/frontend/webrtc_operator/client_handler.h	/^  size_t client_id_;$/;"	m	class:cuttlefish::ClientWSHandler	typeref:typename:size_t
+client_info	host/commands/metrics/proto/clientanalytics.proto	/^  optional ClientInfo client_info = 1;$/;"	f	message:LogRequest	typeref:typename:ClientInfo
+client_ip	common/libs/utils/network.cpp	/^  std::uint8_t client_ip[4];$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t[4]	file:
+client_socket_	host/commands/run_cvd/launch_streamer.cpp	/^  SharedFD client_socket_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:SharedFD	file:
+client_type	host/commands/metrics/proto/clientanalytics.proto	/^  optional int32 client_type = 1;$/;"	f	message:ClientInfo	typeref:typename:int32
+clients_	host/commands/modem_simulator/channel_monitor.h	/^  std::vector<std::unique_ptr<Client>> clients_;$/;"	m	class:cuttlefish::ChannelMonitor	typeref:typename:std::vector<std::unique_ptr<Client>>
+clients_	host/frontend/webrtc/lib/streamer.cpp	/^  std::map<int, std::shared_ptr<ClientHandler>> clients_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::map<int,std::shared_ptr<ClientHandler>>	file:
+clients_	host/frontend/webrtc_operator/device_handler.h	/^  std::vector<std::weak_ptr<ClientHandler>> clients_;$/;"	m	class:cuttlefish::DeviceHandler	typeref:typename:std::vector<std::weak_ptr<ClientHandler>>
+clir	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_T53_CLIRInfoRecord          clir;$/;"	m	union:__anon0bfbaecf8908::__anon0bfbaecf8a0a	typeref:typename:RIL_CDMA_T53_CLIRInfoRecord
+clir	guest/hals/ril/reference-libril/ril.h	/^    int clir;$/;"	m	struct:__anon0bfbaecf1c08	typeref:typename:int
+clir_status_	host/commands/modem_simulator/sup_service.h	/^  ClirStatusInfo clir_status_;$/;"	m	class:cuttlefish::SupService	typeref:typename:ClirStatusInfo
+close	guest/hals/bt/remote/remote_bluetooth.cpp	/^Return<void> BluetoothHci::close() {$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:Return<void>
+close	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::close() {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+closeLogicalChannel	host/commands/modem_simulator/unittest/service_test.cpp	/^  bool closeLogicalChannel(int channel) {$/;"	f	class:ModemServiceTest	typeref:typename:bool	file:
+closeRequest	guest/hals/ril/reference-libril/ril_internal.h	/^    #define closeRequest /;"	d
+closeResponse	guest/hals/ril/reference-libril/ril_internal.h	/^    #define closeResponse /;"	d
+close_	host/libs/websocket/websocket_handler.h	/^  bool close_ = false;$/;"	m	class:cuttlefish::WebSocketHandler	typeref:typename:bool
+closed	common/libs/utils/tcp_socket.cpp	/^bool ClientSocket::closed() const {$/;"	f	class:cuttlefish::ClientSocket	typeref:typename:bool
+closed_lock_	common/libs/utils/tcp_socket.h	/^  mutable std::mutex closed_lock_;$/;"	m	class:cuttlefish::ClientSocket	typeref:typename:std::mutex
+cluster_bits	host/libs/image_aggregator/image_aggregator.cc	/^  Be32 cluster_bits;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be32	file:
+cmd	common/libs/security/gatekeeper_channel.h	/^    uint32_t cmd : 31;$/;"	m	struct:gatekeeper::GatekeeperRawMessage	typeref:typename:uint32_t:31
+cmd	common/libs/security/keymaster_channel.h	/^    AndroidKeymasterCommand cmd : 31;$/;"	m	struct:keymaster::keymaster_message	typeref:typename:AndroidKeymasterCommand:31
+cmd	guest/hals/confirmationui/include/TrustyIpc.h	/^    uint32_t cmd;$/;"	m	struct:confirmationui_hdr	typeref:typename:uint32_t
+cmd	host/commands/run_cvd/process_monitor.h	/^  std::unique_ptr<Command> cmd;$/;"	m	struct:cuttlefish::MonitorEntry	typeref:typename:std::unique_ptr<Command>
+cmdConsole	host/frontend/webrtc_operator/assets/js/controls.js	/^function cmdConsole(consoleViewName, consoleInputName) {$/;"	f
+code	common/libs/utils/network.cpp	/^  std::uint8_t code;$/;"	m	struct:cuttlefish::Dhcp4MessageTypeOption	typeref:typename:std::uint8_t	file:
+code	common/libs/utils/network.cpp	/^  std::uint8_t code;$/;"	m	struct:cuttlefish::Dhcp4ServerIdentifier	typeref:typename:std::uint8_t	file:
+code	guest/commands/vsoc_input_service/vsoc_input_service.h	/^  uint16_t code;$/;"	m	struct:cuttlefish::input_events::InputEvent	typeref:typename:uint16_t
+code	guest/hals/ril/reference-libril/ril.h	/^    RIL_KeepaliveStatusCode code;$/;"	m	struct:__anon0bfbaecfc708	typeref:typename:RIL_KeepaliveStatusCode
+code	guest/hals/ril/reference-libril/ril.h	/^    int     code;               \/* See 27.007 7.17$/;"	m	struct:__anon0bfbaecf3108	typeref:typename:int
+code	host/frontend/webrtc/connection_observer.cpp	/^  uint16_t code;$/;"	m	struct:cuttlefish::virtio_input_event	typeref:typename:uint16_t	file:
+code	host/libs/audio_connector/shm_layout.h	/^  Le32 code;$/;"	m	struct:cuttlefish::virtio_snd_hdr	typeref:typename:Le32
+color_bg_	host/libs/confui/host_renderer.h	/^  teeui::Color color_bg_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::Color
+color_text_	host/libs/confui/host_renderer.h	/^  teeui::Color color_text_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::Color
+com.android.cuttlefish.ril.tests	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^package com.android.cuttlefish.ril.tests;$/;"	p
+com.android.cuttlefish.tests	tests/graphics/src/com/android/cuttlefish/tests/GfxstreamEnabledTest.java	/^package com.android.cuttlefish.tests;$/;"	p
+com.android.cuttlefish.tests	tests/powerwash/src/com/android/cuttlefish/tests/PowerwashTest.java	/^package com.android.cuttlefish.tests;$/;"	p
+com.android.cuttlefish.tests	tests/recovery/src/com/android/cuttlefish/tests/RebootRecoveryTest.java	/^package com.android.cuttlefish.tests;$/;"	p
+com.android.cuttlefish.wifi.tests	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^package com.android.cuttlefish.wifi.tests;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceBroadcastReceiver.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobBase.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.google.gce.gceservice	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^package com.android.google.gce.gceservice;$/;"	p
+com.android.tests.tombstoneTransmit	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^package com.android.tests.tombstoneTransmit;$/;"	p
+command	guest/hals/ril/reference-libril/ril.h	/^    int command;    \/* one of the commands listed for TS 27.007 +CRSM*\/$/;"	m	struct:__anon0bfbaecf1d08	typeref:typename:int
+command	guest/hals/ril/reference-libril/ril.h	/^    int command;    \/* one of the commands listed for TS 27.007 +CRSM*\/$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:int
+command	host/example_custom_actions/custom_action_config.json	/^				"command":"alert",$/;"	s	object:1.buttons.1
+command	host/example_custom_actions/custom_action_config.json	/^				"command":"settings",$/;"	s	object:1.buttons.0
+command	host/example_custom_actions/custom_action_config.json	/^			"command":"web",$/;"	s	object:0.button
+command	host/frontend/webrtc/lib/streamer.cpp	/^  std::string command;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::ControlPanelButtonDescriptor	typeref:typename:std::string	file:
+command	host/frontend/webrtc_operator/assets/js/app.js	/^          command: 'device_state',$/;"	p	class:DeviceControlApp.getCustomDeviceStateButtonCb.message
+command	host/libs/config/custom_actions.h	/^  std::string command;$/;"	m	struct:cuttlefish::ControlPanelButton	typeref:typename:std::string
+command	shared/config/config_foldable.json	/^                                "command":"device_state_closed",$/;"	s	object:custom_actions.0.button
+command	shared/config/config_foldable.json	/^                                "command":"device_state_opened",$/;"	s	object:custom_actions.1.button
+command_	common/libs/utils/subprocess.h	/^  std::vector<std::string> command_;$/;"	m	class:cuttlefish::Command	typeref:typename:std::vector<std::string>
+command_	host/commands/modem_simulator/command_parser.h	/^  std::string_view command_;$/;"	m	class:cuttlefish::CommandParser	typeref:typename:std::string_view
+command_	host/libs/vm_manager/crosvm_builder.h	/^  Command command_;$/;"	m	class:cuttlefish::CrosvmBuilder	typeref:typename:Command
+command_handlers_	host/commands/modem_simulator/modem_service.h	/^  const std::vector<CommandHandler> command_handlers_;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::vector<CommandHandler>
+command_prefix	host/commands/modem_simulator/modem_service.h	/^  std::string command_prefix;$/;"	m	class:cuttlefish::CommandHandler	typeref:typename:std::string
+command_prefix_	host/commands/modem_simulator/unittest/service_test.cpp	/^  std::string command_prefix_;$/;"	m	class:ModemServiceTest	typeref:typename:std::string	file:
+command_queue_	host/commands/secure_env/in_process_tpm.cpp	/^  std::list<std::vector<uint8_t>> command_queue_;$/;"	m	class:cuttlefish::InProcessTpm::Impl	typeref:typename:std::list<std::vector<uint8_t>>	file:
+commands_event	guest/hals/ril/reference-libril/ril_ex.h	/^    struct ril_event* commands_event;$/;"	m	struct:SocketListenParam	typeref:struct:ril_event *
+commands_to_custom_action_servers_	host/frontend/webrtc/connection_observer.cpp	/^  std::map<std::string, cuttlefish::SharedFD> commands_to_custom_action_servers_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:std::map<std::string,cuttlefish::SharedFD>	file:
+commands_to_custom_action_servers_	host/frontend/webrtc/connection_observer.h	/^      commands_to_custom_action_servers_;$/;"	m	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:std::map<std::string,SharedFD>
+common_arg_parser	tools/tombstone_to_line.py	/^def common_arg_parser():$/;"	f
+company	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional string company = 10;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:string
+component_disks	host/libs/image_aggregator/cdisk_spec.proto	/^  repeated ComponentDisk component_disks = 2;$/;"	f	message:CompositeDisk	typeref:typename:ComponentDisk
+compositor_create_region	host/libs/wayland/wayland_compositor.cpp	/^void compositor_create_region(wl_client* client,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+compositor_create_surface	host/libs/wayland/wayland_compositor.cpp	/^void compositor_create_surface(wl_client* client,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+compositor_destroy_resource_callback	host/libs/wayland/wayland_compositor.cpp	/^void compositor_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+compositor_implementation	host/libs/wayland/wayland_compositor.cpp	/^const struct wl_compositor_interface compositor_implementation = {$/;"	v	namespace:wayland::__anon473d11590111	typeref:typename:const struct wl_compositor_interface
+computeChecksum	host/frontend/webrtc_operator/assets/js/adb.js	/^function computeChecksum(array) {$/;"	f
+computeCrc32	host/frontend/webrtc_operator/utils.cpp	/^uint32_t computeCrc32(const void *_data, size_t size) {$/;"	f	typeref:typename:uint32_t
+computeSharedHmac	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::computeSharedHmac($/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+computeSharedSecret	guest/hals/keymint/remote/remote_shared_secret.cpp	/^ScopedAStatus RemoteSharedSecret::computeSharedSecret($/;"	f	class:aidl::android::hardware::security::sharedsecret::RemoteSharedSecret	typeref:typename:ScopedAStatus
+concat	host/libs/config/bootconfig_args.cpp	/^std::string concat(const S& s, const T& t) {$/;"	f	namespace:cuttlefish::__anond90bdb570111	typeref:typename:std::string
+cond	guest/hals/ril/reference-libril/rilSocketQueue.h	/^    pthread_cond_t cond;$/;"	m	class:Ril_queue	typeref:typename:pthread_cond_t
+cond_	host/commands/modem_simulator/thread_looper.h	/^  std::condition_variable cond_;$/;"	m	class:cuttlefish::ThreadLooper	typeref:typename:std::condition_variable
+condvar_	host/commands/console_forwarder/main.cpp	/^  std::condition_variable condvar_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:std::condition_variable	file:
+conference	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::conference(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+conferenceResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::conferenceResponse(int slotId, int responseType,$/;"	f	class:radio_1_6	typeref:typename:int
+confidence_level	guest/hals/ril/reference-libril/ril.h	/^  unsigned char confidence_level;      \/* capacity estimate confidence: 0-100 *\/$/;"	m	struct:__anon0bfbaecf2408	typeref:typename:unsigned char
+config	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #config = undefined;$/;"	M	class:PollingConnector
+config	host/libs/config/adb/test.cpp	/^  AdbConfig& config;$/;"	m	struct:cuttlefish::TestData	typeref:typename:AdbConfig &	file:
+config_	host/commands/assemble_cvd/disk_flags.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::BootImageRepacker	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/assemble_cvd/disk_flags.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::InitializeAccessKregistryImage	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/assemble_cvd/flag_feature.cpp	/^  ConfigFlag& config_;$/;"	m	class:cuttlefish::ParseGflagsImpl	typeref:typename:ConfigFlag &	file:
+config_	host/commands/modem_simulator/nvram_config.h	/^    const NvramConfig* config_;$/;"	m	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:const NvramConfig *
+config_	host/commands/run_cvd/boot_state_machine.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::__anone7ed366f0111::ProcessLeader	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::BluetoothConnector	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::MetricsService	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::OpenWrt	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::RootCanal	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::SecureEnvironment	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::VehicleHalServer	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::VmmCommands	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::WmediumdServer	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch_modem.cpp	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch_streamer.cpp	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/launch_streamer.cpp	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/main.cc	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::__anonadab6e0c0111::CuttlefishEnvironment	typeref:typename:const CuttlefishConfig &	file:
+config_	host/commands/run_cvd/server_loop.cpp	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:const CuttlefishConfig &	file:
+config_	host/frontend/webrtc/lib/streamer.cpp	/^  StreamerConfig config_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:StreamerConfig	file:
+config_	host/libs/config/adb/config.cpp	/^  AdbConfig& config_;$/;"	m	class:cuttlefish::__anone963d72d0111::AdbConfigFragmentImpl	typeref:typename:AdbConfig &	file:
+config_	host/libs/config/adb/flags.cpp	/^  AdbConfig& config_;$/;"	m	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:AdbConfig &	file:
+config_	host/libs/config/adb/launch.cpp	/^  const AdbConfig& config_;$/;"	m	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:const AdbConfig &	file:
+config_	host/libs/config/config_flag.cpp	/^  std::string config_;$/;"	m	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:std::string	file:
+config_	host/libs/config/custom_actions.cpp	/^  ConfigFlag& config_;$/;"	m	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:ConfigFlag &	file:
+config_	host/libs/config/cuttlefish_config.h	/^    CuttlefishConfig* config_;$/;"	m	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:CuttlefishConfig *
+config_	host/libs/config/cuttlefish_config.h	/^    const CuttlefishConfig* config_;$/;"	m	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:const CuttlefishConfig *
+config_	host/libs/config/data_image.cpp	/^  const CuttlefishConfig& config_;$/;"	m	class:cuttlefish::InitializeDataImageImpl	typeref:typename:const CuttlefishConfig &	file:
+config_flag_	host/libs/config/adb/flags.cpp	/^  ConfigFlag& config_flag_;$/;"	m	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:ConfigFlag &	file:
+config_path_	host/commands/run_cvd/launch.cc	/^  std::string config_path_;$/;"	m	class:cuttlefish::WmediumdServer	typeref:typename:std::string	file:
+config_path_	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  std::string config_path_;$/;"	m	class:cuttlefish::WmediumdMessageReloadConfig	typeref:typename:std::string
+config_reader_	host/libs/config/config_flag.cpp	/^  ConfigReader& config_reader_;$/;"	m	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:ConfigReader &	file:
+config_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::config_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+configureStreams	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::configureStreams($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+configureStreams	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Status VsockCameraDeviceSession::configureStreams($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Status
+configureStreams_3_3	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::configureStreams_3_3($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+configureStreams_3_4	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::configureStreams_3_4($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+confirm	tools/make_manifest.sh	/^confirm() {$/;"	f
+confirmationui	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^namespace confirmationui {$/;"	n	namespace:android::hardware	file:
+confirmationui	guest/hals/confirmationui/TrustyConfirmationUI.h	/^namespace confirmationui {$/;"	n	namespace:android::hardware
+confirmationui	guest/hals/confirmationui/guest_session.cpp	/^namespace confirmationui {$/;"	n	namespace:android::hardware	file:
+confirmationui	guest/hals/confirmationui/guest_session.h	/^namespace confirmationui {$/;"	n	namespace:android::hardware
+confirmationui	guest/hals/confirmationui/include/TrustyConfirmationuiHal.h	/^namespace confirmationui {$/;"	n	namespace:android::hardware
+confirmationui_cmd	guest/hals/confirmationui/include/TrustyIpc.h	/^enum confirmationui_cmd : uint32_t {$/;"	g	typeref:typename:uint32_t
+confirmationui_hdr	guest/hals/confirmationui/include/TrustyIpc.h	/^struct confirmationui_hdr {$/;"	s
+confirmationui_init_req	guest/hals/confirmationui/include/TrustyIpc.h	/^struct confirmationui_init_req {$/;"	s
+confirmationui_msg_args	guest/hals/confirmationui/include/TrustyIpc.h	/^struct confirmationui_msg_args {$/;"	s
+confui	common/libs/confui/packet.cpp	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	common/libs/confui/packet.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	common/libs/confui/packet_types.cpp	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	common/libs/confui/packet_types.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	common/libs/confui/protocol.cpp	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	common/libs/confui/protocol.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	common/libs/confui/protocol_types.cpp	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	common/libs/confui/protocol_types.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	common/libs/confui/utils.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/cbor.cc	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	host/libs/confui/cbor.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/host_renderer.cc	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	host/libs/confui/host_renderer.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/host_server.cc	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	host/libs/confui/host_server.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/host_utils.cc	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	host/libs/confui/host_utils.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/host_virtual_input.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/server_common.cc	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	host/libs/confui/server_common.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/session.cc	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	host/libs/confui/session.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/sign.cc	/^namespace confui {$/;"	n	namespace:cuttlefish	file:
+confui	host/libs/confui/sign.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui	host/libs/confui/sign_utils.h	/^namespace confui {$/;"	n	namespace:cuttlefish
+confui_host_vsock_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::confui_host_vsock_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+confui_input_	host/frontend/webrtc/connection_observer.cpp	/^  cuttlefish::confui::HostVirtualInput &confui_input_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:cuttlefish::confui::HostVirtualInput &	file:
+confui_input_	host/frontend/webrtc/connection_observer.h	/^  cuttlefish::confui::HostVirtualInput& confui_input_;$/;"	m	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:cuttlefish::confui::HostVirtualInput &
+confui_mode_cv_	host/libs/confui/host_mode_ctrl.h	/^  std::condition_variable confui_mode_cv_;$/;"	m	class:cuttlefish::HostModeCtrl	typeref:typename:std::condition_variable
+connId	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #connId = undefined;$/;"	M	class:PollingConnector
+conn_types	host/commands/modem_simulator/data_service.h	/^    std::string conn_types;$/;"	m	struct:cuttlefish::DataService::PDPContext	typeref:typename:std::string
+connectReq	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::connectReq(int32_t token, int32_t maxMsgSize) {$/;"	f	class:SapImpl	typeref:typename:Return<void>
+connectWs	host/frontend/webrtc_operator/assets/js/server_connector.js	/^async function connectWs() {$/;"	f
+connected	host/frontend/webrtc_operator/assets/js/adb.js	/^function connected() {$/;"	f
+connected	host/libs/audio_connector/shm_layout.h	/^  uint8_t connected;$/;"	m	struct:cuttlefish::virtio_snd_jack_info	typeref:typename:uint8_t
+connectedCb	host/frontend/webrtc_operator/assets/js/adb.js	/^let connectedCb;$/;"	v
+connected_callback_	guest/hals/camera/vsock_camera_server.h	/^  callback_t connected_callback_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:callback_t
+connectionStatus	guest/hals/ril/reference-libril/ril.h	/^  RIL_CellConnectionStatus  connectionStatus;  \/* Connection status for the cell. *\/$/;"	m	struct:__anon0bfbaecf7208	typeref:typename:RIL_CellConnectionStatus
+connection_	guest/hals/camera/vsock_camera_device_3_4.h	/^  std::shared_ptr<cuttlefish::VsockConnection> connection_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:std::shared_ptr<cuttlefish::VsockConnection>
+connection_	guest/hals/camera/vsock_camera_provider_2_7.h	/^  std::shared_ptr<cuttlefish::VsockConnection> connection_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:std::shared_ptr<cuttlefish::VsockConnection>
+connection_	guest/hals/camera/vsock_camera_server.h	/^  std::shared_ptr<cuttlefish::VsockServerConnection> connection_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:std::shared_ptr<cuttlefish::VsockServerConnection>
+connection_	guest/hals/camera/vsock_frame_provider.h	/^  std::shared_ptr<cuttlefish::VsockConnection> connection_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::shared_ptr<cuttlefish::VsockConnection>
+connection_observer_factory_	host/frontend/webrtc/lib/streamer.cpp	/^  std::shared_ptr<ConnectionObserverFactory> connection_observer_factory_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::shared_ptr<ConnectionObserverFactory>	file:
+console	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::console() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+console_dev	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::console_dev() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+console_forwarder_in_wr_	host/commands/run_cvd/launch.cc	/^  SharedFD console_forwarder_in_wr_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:SharedFD	file:
+console_forwarder_out_rd_	host/commands/run_cvd/launch.cc	/^  SharedFD console_forwarder_out_rd_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:SharedFD	file:
+console_in_	host/commands/console_forwarder/main.cpp	/^  SharedFD console_in_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:SharedFD	file:
+console_in_pipe_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::console_in_pipe_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+console_log_	host/commands/console_forwarder/main.cpp	/^  SharedFD console_log_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:SharedFD	file:
+console_out_	host/commands/console_forwarder/main.cpp	/^  SharedFD console_out_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:SharedFD	file:
+console_out_pipe_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::console_out_pipe_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+console_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::console_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+console_path_	host/commands/console_forwarder/main.cpp	/^  std::string console_path_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:std::string	file:
+console_pipe_prefix	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::console_pipe_prefix() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+const_iterator	common/libs/fs/shared_select.h	/^  typedef std::set<SharedFD>::const_iterator const_iterator;$/;"	t	class:cuttlefish::SharedFDSet	typeref:typename:std::set<SharedFD>::const_iterator
+constructCdmaSms	guest/hals/ril/reference-libril/ril_service.cpp	/^void constructCdmaSms(RIL_CDMA_SMS_Message &rcsm, const CdmaSmsMessage& sms) {$/;"	f	typeref:typename:void
+constructDefaultRequestSettings	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::constructDefaultRequestSettings($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+constructor	host/frontend/webrtc_operator/assets/js/app.js	/^  constructor() {$/;"	m	class:DeviceDetailsUpdater
+constructor	host/frontend/webrtc_operator/assets/js/app.js	/^  constructor(deviceConnection) {$/;"	m	class:DeviceControlApp
+constructor	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  constructor(pc, control) {$/;"	m	class:DeviceConnection
+constructor	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  constructor(serverConnector) {$/;"	m	class:Controller
+constructor	host/frontend/webrtc_operator/assets/js/index.js	/^  constructor({url, selectDeviceCb}) {$/;"	m	class:DeviceListApp
+constructor	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  constructor() {$/;"	m	class:Connector
+constructor	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  constructor() {$/;"	m	class:PollingConnector
+constructor	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  constructor(ws) {$/;"	m	class:WebsocketConnector
+consumed_length	host/libs/audio_connector/shm_layout.h	/^  uint32_t consumed_length;$/;"	m	struct:cuttlefish::IoStatusMsg	typeref:typename:uint32_t
+containsValidSettings	guest/hals/camera/vsock_camera_server.cpp	/^bool containsValidSettings(const VsockCameraDevice::Settings& settings) {$/;"	f	namespace:android::hardware::camera::provider::V2_7::implementation::__anon29cd72800111	typeref:typename:bool
+content_len	host/libs/websocket/websocket_handler.cpp	/^size_t DynHandler::content_len() const { return out_buffer_.size() - LWS_PRE; }$/;"	f	class:cuttlefish::DynHandler	typeref:typename:size_t
+content_type	host/commands/fetcher/build_api.h	/^  std::string content_type;$/;"	m	class:cuttlefish::Artifact	typeref:typename:std::string
+contents	guest/hals/ril/reference-libril/ril.h	/^    char *contents;             \/* Carrier-defined content.  It is binary, opaque and$/;"	m	struct:__anon0bfbaecfc308	typeref:typename:char *
+contents_length	guest/hals/ril/reference-libril/ril.h	/^    int contents_length;        \/* The number of octets in the contents. *\/$/;"	m	struct:__anon0bfbaecfc308	typeref:typename:int
+context_	host/frontend/webrtc/lib/ws_connection.cpp	/^  std::shared_ptr<WsConnectionContextImpl> context_;$/;"	m	class:WsConnectionImpl	typeref:typename:std::shared_ptr<WsConnectionContextImpl>	file:
+context_	host/libs/websocket/websocket_server.h	/^  struct lws_context* context_;$/;"	m	class:cuttlefish::WebSocketServer	typeref:struct:lws_context *
+control	common/libs/utils/unix_sockets.h	/^  std::vector<ControlMessage> control;$/;"	m	struct:cuttlefish::UnixSocketMessage	typeref:typename:std::vector<ControlMessage>
+control	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #control;$/;"	M	class:DeviceConnection
+control-panel-custom-buttons	host/frontend/webrtc_operator/assets/client.html	/^          <div id='control-panel-custom-buttons' class='control-panel-column'><\/div>$/;"	I
+control-panel-default-buttons	host/frontend/webrtc_operator/assets/client.html	/^          <div id='control-panel-default-buttons' class='control-panel-column'>$/;"	I
+controlChannel	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #controlChannel;$/;"	M	class:DeviceConnection
+control_channel_	host/frontend/webrtc/lib/client_handler.cpp	/^  rtc::scoped_refptr<webrtc::DataChannelInterface> control_channel_;$/;"	m	class:cuttlefish::webrtc_streaming::ControlChannelHandler	typeref:typename:rtc::scoped_refptr<webrtc::DataChannelInterface>	file:
+control_handler_	host/frontend/webrtc/lib/client_handler.h	/^  std::unique_ptr<ControlChannelHandler> control_handler_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::unique_ptr<ControlChannelHandler>
+control_socket_	host/libs/audio_connector/server.h	/^  SharedFD control_socket_;$/;"	m	class:cuttlefish::AudioClientConnection	typeref:typename:SharedFD
+controls-and-displays	host/frontend/webrtc_operator/assets/client.html	/^        <div id='controls-and-displays'>$/;"	I
+convertApduResponseProtoToHal	guest/hals/ril/reference-libril/sap_service.cpp	/^SapResultCode convertApduResponseProtoToHal(RIL_SIM_SAP_APDU_RSP_Response responseProto) {$/;"	f	typeref:typename:SapResultCode
+convertBytesToHex	guest/hals/ril/reference-ril/reference-ril.c	/^void convertBytesToHex(uint8_t *bytes, int length, uint8_t *hex_str) {$/;"	f	typeref:typename:void
+convertBytesToHexString	guest/hals/ril/reference-ril/reference-ril.c	/^void convertBytesToHexString(char *bin_ptr, int length, unsigned char *hex_ptr) {$/;"	f	typeref:typename:void
+convertCertificate	guest/hals/keymint/remote/remote_keymint_device.cpp	/^Certificate convertCertificate(const keymaster_blob_t& cert) {$/;"	f	namespace:aidl::android::hardware::security::keymint::__anon087586ca0111	typeref:typename:Certificate
+convertCertificateChain	guest/hals/keymint/remote/remote_keymint_device.cpp	/^vector<Certificate> convertCertificateChain(const CertificateChain& chain) {$/;"	f	namespace:aidl::android::hardware::security::keymint::__anon087586ca0111	typeref:typename:vector<Certificate>
+convertCharPtrToHidlString	guest/hals/ril/reference-libril/ril_service.cpp	/^hidl_string convertCharPtrToHidlString(const char *ptr) {$/;"	f	typeref:typename:hidl_string
+convertFileContentsToString	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    private String convertFileContentsToString(File f) throws IOException {$/;"	m	class:TombstoneTransmitTest	file:
+convertFileListToStringList	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    private List<String> convertFileListToStringList(List<File> inputList) throws IOException {$/;"	m	class:TombstoneTransmitTest	file:
+convertHexStringToBytes	guest/hals/ril/reference-libril/ril_service.cpp	/^extern "C" uint8_t * convertHexStringToBytes(void *response, size_t responseLen) {$/;"	f	typeref:typename:uint8_t *
+convertIntToRadioIndicationType	guest/hals/ril/reference-libril/ril_service.cpp	/^RadioIndicationType convertIntToRadioIndicationType(int indicationType) {$/;"	f	typeref:typename:RadioIndicationType
+convertKeyCharacteristics	guest/hals/keymint/remote/remote_keymint_device.cpp	/^vector<KeyCharacteristics> convertKeyCharacteristics($/;"	f	namespace:aidl::android::hardware::security::keymint::__anon087586ca0111	typeref:typename:vector<KeyCharacteristics>
+convertMvnoTypeToString	guest/hals/ril/reference-libril/ril_service.cpp	/^static bool convertMvnoTypeToString(MvnoType type, char *&str) {$/;"	f	typeref:typename:bool	file:
+convertOperatorStatusToInt	guest/hals/ril/reference-libril/ril_service.cpp	/^int convertOperatorStatusToInt(const char *str) {$/;"	f	typeref:typename:int
+convertPowerResponseProtoToHal	guest/hals/ril/reference-libril/sap_service.cpp	/^SapResultCode convertPowerResponseProtoToHal(RIL_SIM_SAP_POWER_RSP_Response responseProto) {$/;"	f	typeref:typename:SapResultCode
+convertResetSimResponseProtoToHal	guest/hals/ril/reference-libril/sap_service.cpp	/^SapResultCode convertResetSimResponseProtoToHal(RIL_SIM_SAP_RESET_SIM_RSP_Response responseProto/;"	f	typeref:typename:SapResultCode
+convertResponseHexStringEntryToInt	guest/hals/ril/reference-libril/ril_service.cpp	/^int convertResponseHexStringEntryToInt(char **response, int index, int numStrings) {$/;"	f	typeref:typename:int
+convertResponseStringEntryToInt	guest/hals/ril/reference-libril/ril_service.cpp	/^int convertResponseStringEntryToInt(char **response, int index, int numStrings) {$/;"	f	typeref:typename:int
+convertRilCdmaSignalInfoRecordToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilCdmaSignalInfoRecordToHal(RIL_CDMA_SignalInfoRecord *signalInfoRecord,$/;"	f	typeref:typename:void
+convertRilCellInfoListToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilCellInfoListToHal(void *response, size_t responseLen, hidl_vec<CellInfo>& records/;"	f	typeref:typename:void
+convertRilCellInfoListToHal_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilCellInfoListToHal_1_2(void *response, size_t responseLen, hidl_vec<V1_2::CellInfo/;"	f	typeref:typename:void
+convertRilCellInfoListToHal_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilCellInfoListToHal_1_4(void *response, size_t responseLen, hidl_vec<V1_4::CellInfo/;"	f	typeref:typename:void
+convertRilDataCallListToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilDataCallListToHal(void *response, size_t responseLen,$/;"	f	typeref:typename:void
+convertRilDataCallToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilDataCallToHal(RIL_Data_Call_Response_v11 *dcResponse,$/;"	f	typeref:typename:void
+convertRilDataCallToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilDataCallToHal(RIL_Data_Call_Response_v12 *dcResponse,$/;"	f	typeref:typename:void
+convertRilHardwareConfigListToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilHardwareConfigListToHal(void *response, size_t responseLen,$/;"	f	typeref:typename:void
+convertRilKeepaliveStatusToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilKeepaliveStatusToHal(const RIL_KeepaliveStatus *rilStatus,$/;"	f	typeref:typename:void
+convertRilLceDataInfoToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilLceDataInfoToHal(void *response, size_t responseLen, LceDataInfo& lce) {$/;"	f	typeref:typename:void
+convertRilRadioCapabilityToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilRadioCapabilityToHal(void *response, size_t responseLen, RadioCapability& rc) {$/;"	f	typeref:typename:void
+convertRilSignalStrengthToHal	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilSignalStrengthToHal(void *response, size_t responseLen,$/;"	f	typeref:typename:void
+convertRilSignalStrengthToHal_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^void convertRilSignalStrengthToHal_1_4(void *response, size_t responseLen,$/;"	f	typeref:typename:void
+convertStorageKeyToEphemeral	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::convertStorageKeyToEphemeral($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+convertToPdpProtocolType	guest/hals/ril/reference-libril/ril_service.cpp	/^::android::hardware::radio::V1_4::PdpProtocolType convertToPdpProtocolType(hidl_string str) {$/;"	f	typeref:typename:::android::hardware::radio::V1_4::PdpProtocolType
+convertTransferAtrResponseProtoToHal	guest/hals/ril/reference-libril/sap_service.cpp	/^SapResultCode convertTransferAtrResponseProtoToHal($/;"	f	typeref:typename:SapResultCode
+convertTransferCardReaderStatusResponseProtoToHal	guest/hals/ril/reference-libril/sap_service.cpp	/^SapResultCode convertTransferCardReaderStatusResponseProtoToHal($/;"	f	typeref:typename:SapResultCode
+convertUIOption	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^teeui::UIOption convertUIOption(UIOption uio) {$/;"	f	namespace:android::hardware::confirmationui::V1_0::implementation::__anon2184467c0111	typeref:typename:teeui::UIOption
+convertUsimToSim	guest/hals/ril/reference-ril/reference-ril.c	/^bool convertUsimToSim(uint8_t *byteUSIM, int len, uint8_t *hexSIM) {$/;"	f	typeref:typename:bool
+copyHidlStringToRil	guest/hals/ril/reference-libril/ril_service.cpp	/^bool copyHidlStringToRil(char **dest, const hidl_string &src, RequestInfo *pRI) {$/;"	f	typeref:typename:bool
+copyHidlStringToRil	guest/hals/ril/reference-libril/ril_service.cpp	/^bool copyHidlStringToRil(char **dest, const hidl_string &src, RequestInfo *pRI, bool allowEmpty)/;"	f	typeref:typename:bool
+copyJpegData	guest/hals/camera/vsock_frame_provider.cpp	/^bool VsockFrameProvider::copyJpegData(uint32_t size, void* dst) {$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:bool
+copyYUVFrame	guest/hals/camera/vsock_frame_provider.cpp	/^bool VsockFrameProvider::copyYUVFrame(uint32_t w, uint32_t h, YCbCrLayout dst) {$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:bool
+copy_command_	host/commands/modem_simulator/command_parser.h	/^  std::string copy_command_;$/;"	m	class:cuttlefish::CommandParser	typeref:typename:std::string
+count	host/frontend/webrtc/audio_handler.h	/^    size_t count;$/;"	m	struct:cuttlefish::AudioHandler::HoldingBuffer	typeref:typename:size_t
+count	host/libs/audio_connector/commands.h	/^  uint32_t count() const { return count_; }$/;"	f	class:cuttlefish::InfoCommand	typeref:typename:uint32_t
+count	host/libs/audio_connector/shm_layout.h	/^  Le32 count;$/;"	m	struct:cuttlefish::virtio_snd_query_info	typeref:typename:Le32
+count_	common/libs/concurrency/semaphore.h	/^  unsigned int count_;$/;"	m	class:cuttlefish::Semaphore	typeref:typename:unsigned int
+count_	host/libs/audio_connector/commands.h	/^  const size_t count_;$/;"	m	class:cuttlefish::InfoCommand	typeref:typename:const size_t
+cpid	guest/hals/ril/reference-libril/ril.h	/^    int cpid;    \/* 8-bit Cell Parameters ID described in TS 25.331, 0..127, INT_MAX if unknown/;"	m	struct:__anon0bfbaecf5f08	typeref:typename:int
+cpid	guest/hals/ril/reference-libril/ril.h	/^    int cpid;    \/* 8-bit Cell Parameters ID described in TS 25.331, 0..127, INT_MAX if unknown/;"	m	struct:__anon0bfbaecf7b08	typeref:typename:int
+cpp_basename	common/libs/utils/files.cpp	/^std::string cpp_basename(const std::string& str) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+cpp_dirname	common/libs/utils/files.cpp	/^std::string cpp_dirname(const std::string& str) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string
+cpus	host/libs/config/cuttlefish_config.cpp	/^int CuttlefishConfig::cpus() const { return (*dictionary_)[kCpus].asInt(); }$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:int
+cqi	guest/hals/ril/reference-libril/ril.h	/^    int cqi;             \/* The current Channel Quality Indicator.$/;"	m	struct:__anon0bfbaecf4b08	typeref:typename:int
+cqi	guest/hals/ril/reference-libril/ril.h	/^    int cqi;             \/* The current Channel Quality Indicator.$/;"	m	struct:__anon0bfbaecf4c08	typeref:typename:int
+crc32	host/commands/fetcher/build_api.h	/^  unsigned int crc32;$/;"	m	class:cuttlefish::Artifact	typeref:typename:unsigned int
+crc32_tab	host/frontend/webrtc_operator/utils.cpp	/^static const uint32_t crc32_tab[] = {$/;"	v	typeref:typename:const uint32_t[]	file:
+createAdbMessage	host/frontend/webrtc_operator/assets/js/adb.js	/^function createAdbMessage(command, arg0, arg1, payload) {$/;"	f
+createConnector	host/frontend/webrtc_operator/assets/js/server_connector.js	/^export async function createConnector() {$/;"	f
+createControlPanelButton	host/frontend/webrtc_operator/assets/js/controls.js	/^function createControlPanelButton($/;"	f
+createDataChannel	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^function createDataChannel(pc, label, onMessage) {$/;"	f
+createDeviceDisplays	host/frontend/webrtc_operator/assets/js/app.js	/^  #createDeviceDisplays() {$/;"	m	class:DeviceControlApp
+createDeviceEntry	host/frontend/webrtc_operator/assets/js/index.js	/^  #createDeviceEntry(devId, buttonId) {$/;"	m	class:DeviceListApp
+createInstance	tools/create_base_image.go	/^func createInstance(instance string, arg string) {$/;"	f	package:main
+createManifest	tools/make_manifest.sh	/^createManifest() {$/;"	f
+createModalButton	host/frontend/webrtc_operator/assets/js/controls.js	/^function createModalButton(button_id, modal_id, close_id) {$/;"	f
+createMsgHeader	guest/hals/ril/reference-libril/sap_service.cpp	/^MsgHeader* SapImpl::createMsgHeader(MsgId msgId, int32_t token) {$/;"	f	class:SapImpl	typeref:typename:MsgHeader *
+createPeerConnection	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^function createPeerConnection(infra_config) {$/;"	f
+createRootcanalMessage	host/frontend/webrtc_operator/assets/js/rootcanal.js	/^function createRootcanalMessage(command, args) {$/;"	f
+createToggleControl	host/frontend/webrtc_operator/assets/js/controls.js	/^function createToggleControl(elm, iconName, onChangeCb) {$/;"	f
+createTrustyConfirmationUI	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^android::sp<IConfirmationUI> createTrustyConfirmationUI() {$/;"	f	namespace:android::hardware::confirmationui::V1_0::implementation	typeref:typename:android::sp<IConfirmationUI>
+create_interface	tools/vlan_prototype_up.sh	/^create_interface() {$/;"	f
+creation_time	host/commands/fetcher/build_api.h	/^  unsigned long creation_time;$/;"	m	class:cuttlefish::Artifact	typeref:typename:unsigned long
+credential	host/commands/fetcher/credential_source.h	/^  std::string credential;$/;"	m	class:cuttlefish::FixedCredentialSource	typeref:typename:std::string
+credential_source	host/commands/fetcher/build_api.h	/^  CredentialSource* credential_source;$/;"	m	class:cuttlefish::BuildApi	typeref:typename:CredentialSource *
+crosvm_binary	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::crosvm_binary() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+crosvm_socket	host/libs/vm_manager/crosvm_manager.cpp	/^constexpr auto crosvm_socket = "crosvm_control.sock";$/;"	v	namespace:cuttlefish::vm_manager	typeref:typename:auto
+crypt_method	host/libs/image_aggregator/image_aggregator.cc	/^  Be32 crypt_method;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be32	file:
+csiRsrp	guest/hals/ril/reference-libril/ril.h	/^  int32_t csiRsrp;  \/* CSI reference signal received power, multiplied by -1.$/;"	m	struct:__anon0bfbaecf4e08	typeref:typename:int32_t
+csiRsrq	guest/hals/ril/reference-libril/ril.h	/^  int32_t csiRsrq;  \/* CSI reference signal received quality, multiplied by -1.$/;"	m	struct:__anon0bfbaecf4e08	typeref:typename:int32_t
+csiSinr	guest/hals/ril/reference-libril/ril.h	/^  int32_t csiSinr;  \/* CSI signal-to-noise and interference ratio.$/;"	m	struct:__anon0bfbaecf4e08	typeref:typename:int32_t
+cssSupported	guest/hals/ril/reference-libril/ril.h	/^    int32_t cssSupported;                 \/\/ concurrent services support indicator. if$/;"	m	struct:__anon0bfbaecf7f08	typeref:typename:int32_t
+ctx_	host/libs/confui/host_renderer.h	/^  teeui::context<teeui::ConfUIParameters> ctx_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::context<teeui::ConfUIParameters>
+curl	host/commands/fetcher/build_api.h	/^  CurlWrapper& curl;$/;"	m	class:cuttlefish::BuildApi	typeref:typename:CurlWrapper &
+curl	host/commands/fetcher/credential_source.h	/^  CurlWrapper& curl;$/;"	m	class:cuttlefish::GceMetadataCredentialSource	typeref:typename:CurlWrapper &
+curl_	host/commands/fetcher/curl_wrapper.cc	/^  CURL* curl_;$/;"	m	class:cuttlefish::__anondfffca8d0111::CurlWrapperImpl	typeref:typename:CURL *	file:
+curr	guest/hals/ril/reference-libril/RilSapSocket.h	/^        MsgHeader* curr;$/;"	m	struct:RilSapSocket::SapSocketRequest	typeref:typename:MsgHeader *
+curr_session_	host/libs/confui/host_server.h	/^  std::shared_ptr<Session> curr_session_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:std::shared_ptr<Session>
+currentRotation	host/frontend/webrtc_operator/assets/js/app.js	/^  #currentRotation = 0;$/;"	M	class:DeviceControlApp
+currentSignalStrengthInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::currentSignalStrengthInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+currentState	guest/hals/ril/reference-ril/reference-ril.c	/^currentState()$/;"	f	typeref:typename:RIL_RadioState	file:
+currentTech	guest/hals/ril/reference-ril/reference-ril.c	/^    int currentTech;    \/\/ Technology the modem is currently using (in the format used by mode/;"	m	struct:__anon70d7df6f0108	typeref:typename:int	file:
+current_buffer	host/libs/wayland/wayland_surface.h	/^    struct wl_resource* current_buffer = nullptr;$/;"	m	struct:wayland::Surface::State	typeref:struct:wl_resource *
+current_frame_number	host/libs/wayland/wayland_surface.h	/^    uint32_t current_frame_number = 0;$/;"	m	struct:wayland::Surface::State	typeref:typename:uint32_t
+current_height_	host/libs/confui/host_renderer.h	/^  std::uint32_t current_height_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::uint32_t
+current_lba	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t current_lba;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint64_t	file:
+current_network_mode_	host/commands/modem_simulator/network_service.h	/^  ModemTechnology current_network_mode_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:ModemTechnology
+current_operator_numeric_	host/commands/modem_simulator/network_service.h	/^  std::string current_operator_numeric_ = "";$/;"	m	class:cuttlefish::NetworkService	typeref:typename:std::string
+current_select_item_menu_ids_	host/commands/modem_simulator/stk_service.h	/^  std::vector<std::string> current_select_item_menu_ids_;$/;"	m	class:cuttlefish::StkService	typeref:typename:std::vector<std::string>
+current_session_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    std::unique_ptr<GuestSession> current_session_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:std::unique_ptr<GuestSession>
+current_session_id_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    std::atomic<std::uint32_t> current_session_id_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:std::atomic<std::uint32_t>
+current_session_lock_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    std::mutex current_session_lock_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:std::mutex
+current_storage_	host/commands/start/flag_forwarder.cc	/^  T current_storage_;$/;"	m	class:DynamicFlag	typeref:typename:T	file:
+current_width_	host/libs/confui/host_renderer.h	/^  std::uint32_t current_width_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::uint32_t
+custom_action_config_	host/commands/run_cvd/launch_streamer.cpp	/^  const CustomActionConfigProvider& custom_action_config_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:const CustomActionConfigProvider &	file:
+custom_action_config_	host/libs/config/custom_actions.cpp	/^  std::string custom_action_config_;$/;"	m	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:std::string	file:
+custom_action_config_flag_	host/libs/config/custom_actions.cpp	/^  Flag custom_action_config_flag_;$/;"	m	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:Flag	file:
+custom_actions	shared/config/config_foldable.json	/^	"custom_actions" : [$/;"	a
+custom_actions_	host/libs/config/custom_actions.cpp	/^  std::vector<CustomActionConfig> custom_actions_;$/;"	m	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:std::vector<CustomActionConfig>	file:
+custom_actions_flag_	host/libs/config/custom_actions.cpp	/^  Flag custom_actions_flag_;$/;"	m	class:cuttlefish::__anon12e4c76c0111::CustomActionConfigImpl	typeref:typename:Flag	file:
+custom_control_panel_buttons_	host/frontend/webrtc/lib/streamer.cpp	/^  std::vector<ControlPanelButtonDescriptor> custom_control_panel_buttons_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::vector<ControlPanelButtonDescriptor>	file:
+cuttlefish	build/cvd-host-package.go	/^package cuttlefish$/;"	p
+cuttlefish	common/libs/concurrency/multiplexer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/concurrency/semaphore.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/concurrency/thread_safe_queue.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/confui/packet.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/confui/packet.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/confui/packet_types.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/confui/packet_types.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/confui/protocol.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/confui/protocol.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/confui/protocol_types.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/confui/protocol_types.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/confui/utils.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/device_config/device_config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/device_config/device_config.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/device_config/device_config.proto	/^package cuttlefish;$/;"	p
+cuttlefish	common/libs/device_config/device_config_shared.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/device_config/device_config_shared.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/device_config/guest_device_config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/device_config/host_device_config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/fs/shared_buf.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/fs/shared_buf.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/fs/shared_fd.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/fs/shared_fd.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/fs/shared_fd_stream.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/fs/shared_fd_stream.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/fs/shared_fd_test.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/fs/shared_select.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/net/netlink_client.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/net/netlink_client.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/net/netlink_request.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/net/netlink_request.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/net/netlink_request_test.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/net/network_interface.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/net/network_interface_manager.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/net/network_interface_manager.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/security/gatekeeper_channel.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/security/gatekeeper_channel.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/security/keymaster_channel.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/security/keymaster_channel.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/security/keymaster_channel_test.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/archive.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/archive.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/base64.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/base64.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/cf_endian.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/environment.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/environment.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/files.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/files.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/flag_parser.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/flag_parser.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/flag_parser_test.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/network.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/network.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/shared_fd_flag.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/shared_fd_flag.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/size_utils.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/subprocess.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/subprocess.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/tcp_socket.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/tcp_socket.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/tee_logging.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/tee_logging.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/unix_sockets.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/unix_sockets.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/unix_sockets_test.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/users.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/users.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	common/libs/utils/vsock_connection.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	common/libs/utils/vsock_connection.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	guest/commands/vsoc_input_service/vsoc_input_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	guest/hals/camera/vsock_frame_provider.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	guest/hals/camera/vsock_frame_provider.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/alloc.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/alloc.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/assemble_cvd.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/boot_config.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/boot_config.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/boot_image_utils.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/boot_image_utils.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/clean.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/clean.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/disk_flags.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/disk_flags.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/flag_feature.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/flag_feature.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/flags.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/flags.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/misc_info.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/misc_info.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/assemble_cvd/super_image_mixer.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/assemble_cvd/super_image_mixer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/console_forwarder/main.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/cvd/main.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/fetcher/build_api.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/fetcher/build_api.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/fetcher/credential_source.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/fetcher/credential_source.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/fetcher/curl_wrapper.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/fetcher/curl_wrapper.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/fetcher/fetch_cvd.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/host_bugreport/main.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/metrics/metrics_defs.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/metrics/proto/cf_log.proto	/^package cuttlefish;$/;"	p
+cuttlefish	host/commands/metrics/proto/cf_metrics_event.proto	/^package cuttlefish;$/;"	p
+cuttlefish	host/commands/modem_simulator/call_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/call_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/cf_device_config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/channel_monitor.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/channel_monitor.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/command_parser.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/command_parser.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/data_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/data_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/device_config.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/misc_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/misc_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/modem_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/modem_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/modem_simulator.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/modem_simulator.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/network_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/network_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/nvram_config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/nvram_config.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/pdu_parser.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/pdu_parser.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/sim_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/sim_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/sms_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/sms_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/stk_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/stk_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/sup_service.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/sup_service.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/modem_simulator/thread_looper.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/modem_simulator/thread_looper.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/powerwash_cvd/powerwash_cvd.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/restart_cvd/restart_cvd.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/boot_state_machine.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/boot_state_machine.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/run_cvd/launch.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/launch.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/run_cvd/launch_modem.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/launch_streamer.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/main.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/process_monitor.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/process_monitor.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/run_cvd/reporting.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/reporting.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/run_cvd/runner_defs.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/run_cvd/server_loop.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/server_loop.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/run_cvd/validate.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/run_cvd/validate.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/composite_serialization.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/composite_serialization.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/device_tpm.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/device_tpm.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/encrypted_serializable.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/encrypted_serializable.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/encrypted_serializable_test.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/fragile_tpm_storage.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/fragile_tpm_storage.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/gatekeeper_responder.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/gatekeeper_responder.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/gatekeeper_storage.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/hmac_serializable.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/hmac_serializable.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/in_process_tpm.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/in_process_tpm.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/insecure_fallback_storage.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/insecure_fallback_storage.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/json_serializable.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/json_serializable.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/keymaster_responder.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/keymaster_responder.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/primary_key_builder.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/primary_key_builder.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/proxy_keymaster_context.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/secure_env.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/test_tpm.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/test_tpm.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_attestation_record.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_attestation_record.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_auth.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_auth.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_commands.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_commands.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_encrypt_decrypt.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_encrypt_decrypt.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_gatekeeper.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_gatekeeper.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_hmac.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_hmac.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_key_blob_maker.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_key_blob_maker.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_keymaster_context.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_keymaster_context.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_keymaster_enforcement.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_random_source.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_random_source.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_remote_provisioning_context.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_remote_provisioning_context.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_resource_manager.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_resource_manager.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/secure_env/tpm_serialize.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/secure_env/tpm_serialize.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/commands/status/main.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/stop/main.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/commands/tombstone_receiver/main.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/adb_connector/adb_connection_maintainer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/adb_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/adb_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/audio_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/audio_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/bluetooth_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/bluetooth_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/connection_observer.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/connection_observer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/cvd_video_frame_buffer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/display_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/display_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/kernel_log_events_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/kernel_log_events_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/audio_device.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/audio_device.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/audio_frame_buffer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/audio_sink.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/audio_source.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/audio_track_source_impl.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/camera_controller.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/camera_streamer.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/camera_streamer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/client_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/client_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/connection_observer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/local_recorder.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/local_recorder.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/port_range_socket_factory.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/port_range_socket_factory.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/streamer.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/streamer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/utils.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/utils.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/video_frame_buffer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/video_sink.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/video_track_source_impl.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc/lib/vp8only_encoder_factory.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc/lib/vp8only_encoder_factory.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc_operator/client_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc_operator/client_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc_operator/constants/signaling_constants.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc_operator/device_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc_operator/device_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc_operator/device_list_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc_operator/device_list_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc_operator/device_registry.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc_operator/device_registry.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc_operator/server_config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc_operator/server_config.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/frontend/webrtc_operator/signal_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/frontend/webrtc_operator/signal_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/allocd/alloc_utils.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/allocd/alloc_utils.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/allocd/request.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/allocd/resource.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/allocd/resource.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/allocd/resource_manager.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/allocd/resource_manager.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/allocd/utils.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/allocd/utils.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/audio_connector/buffers.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/audio_connector/buffers.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/audio_connector/commands.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/audio_connector/commands.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/audio_connector/server.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/audio_connector/server.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/audio_connector/shm_layout.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/adb/adb.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/adb/config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/adb/data.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/adb/flags.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/adb/launch.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/adb/strings.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/adb/test.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/bootconfig_args.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/bootconfig_args.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/command_source.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/config_flag.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/config_flag.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/config_fragment.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/custom_actions.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/custom_actions.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/cuttlefish_config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/cuttlefish_config.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/cuttlefish_config_instance.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/data_image.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/data_image.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/feature.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/feature.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/fetcher_config.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/fetcher_config.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/host_tools_version.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/host_tools_version.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/inject.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/kernel_args.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/kernel_args.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/kernel_log_pipe_provider.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/known_paths.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/known_paths.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/config/logging.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/config/logging.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/cbor.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/confui/cbor.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/host_mode_ctrl.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/host_renderer.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/confui/host_renderer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/host_server.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/confui/host_server.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/host_utils.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/confui/host_utils.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/host_virtual_input.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/server_common.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/confui/server_common.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/session.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/confui/session.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/sign.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/confui/sign.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/confui/sign_utils.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/graphics_detector/graphics_detector.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/graphics_detector/graphics_detector.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/image_aggregator/image_aggregator.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/image_aggregator/image_aggregator.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/msg_queue/msg_queue.cc	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/msg_queue/msg_queue.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/screen_connector/screen_connector.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/screen_connector/screen_connector_common.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/screen_connector/screen_connector_ctrl.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/screen_connector/screen_connector_multiplexer.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/screen_connector/screen_connector_queue.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/screen_connector/wayland_screen_connector.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/screen_connector/wayland_screen_connector.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/vm_manager/crosvm_builder.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/vm_manager/crosvm_builder.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/vm_manager/crosvm_manager.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/vm_manager/crosvm_manager.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/vm_manager/host_configuration.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/vm_manager/host_configuration.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/vm_manager/qemu_manager.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/vm_manager/qemu_manager.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/vm_manager/vm_manager.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/vm_manager/vm_manager.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/websocket/websocket_handler.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/websocket/websocket_handler.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/websocket/websocket_server.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/websocket/websocket_server.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/wmediumd_controller/wmediumd_api_protocol.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^namespace cuttlefish {$/;"	n
+cuttlefish	host/libs/wmediumd_controller/wmediumd_controller.cpp	/^namespace cuttlefish {$/;"	n	file:
+cuttlefish	host/libs/wmediumd_controller/wmediumd_controller.h	/^namespace cuttlefish {$/;"	n
+cuttlefish_env_path	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::cuttlefish_env_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+cuttlefish_input_service	guest/commands/vsoc_input_service/virtual_device_base.h	/^namespace cuttlefish_input_service {$/;"	n
+cuttlefish_input_service	guest/commands/vsoc_input_service/virtual_keyboard.cpp	/^namespace cuttlefish_input_service {$/;"	n	file:
+cuttlefish_input_service	guest/commands/vsoc_input_service/virtual_keyboard.h	/^namespace cuttlefish_input_service {$/;"	n
+cuttlefish_input_service	guest/commands/vsoc_input_service/virtual_power_button.cpp	/^namespace cuttlefish_input_service {$/;"	n	file:
+cuttlefish_input_service	guest/commands/vsoc_input_service/virtual_power_button.h	/^namespace cuttlefish_input_service {$/;"	n
+cuttlefish_input_service	guest/commands/vsoc_input_service/virtual_touchscreen.cpp	/^namespace cuttlefish_input_service {$/;"	n	file:
+cuttlefish_input_service	guest/commands/vsoc_input_service/virtual_touchscreen.h	/^namespace cuttlefish_input_service {$/;"	n
+cuttlefish_input_service	guest/commands/vsoc_input_service/vsoc_input_service.h	/^namespace cuttlefish_input_service {$/;"	n
+cuttlefish_version	host/commands/metrics/proto/cf_log.proto	/^  optional string cuttlefish_version = 4;$/;"	f	message:cuttlefish.CuttlefishLogEvent	typeref:typename:string
+cvdHostPackage	build/cvd-host-package.go	/^type cvdHostPackage struct {$/;"	s	package:cuttlefish
+cvdHostPackageDependencyTag	build/cvd-host-package.go	/^var cvdHostPackageDependencyTag = dependencyTag{}$/;"	v	package:cuttlefish
+cvdHostPackageFactory	build/cvd-host-package.go	/^func cvdHostPackageFactory() android.Module {$/;"	f	package:cuttlefish	typeref:typename:android.Module
+cvd_connection_	host/frontend/webrtc/lib/camera_streamer.h	/^  VsockClientConnection cvd_connection_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:VsockClientConnection
+cvd_host_packages	host_package.mk	/^cvd_host_packages := $(SOONG_HOST_OUT)\/cvd-host_package.tar.gz$/;"	m
+cvd_host_packages	host_package.mk	/^cvd_host_packages :=$/;"	m
+data	common/libs/utils/unix_sockets.h	/^  std::vector<char> data;$/;"	m	struct:cuttlefish::UnixSocketMessage	typeref:typename:std::vector<char>
+data	guest/hals/ril/reference-libril/ril.h	/^    char *data;     \/* May be NULL*\/$/;"	m	struct:__anon0bfbaecf1d08	typeref:typename:char *
+data	guest/hals/ril/reference-libril/ril.h	/^    char *data;     \/* May be NULL*\/$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:char *
+data	guest/hals/ril/reference-libril/ril.h	/^    char *data;     \/* May be NULL. In hex string format. *\/$/;"	m	struct:__anon0bfbaecf1f08	typeref:typename:char *
+data	host/commands/fetcher/curl_wrapper.h	/^  T data;$/;"	m	struct:cuttlefish::CurlResponse	typeref:typename:T
+data	host/frontend/webrtc/audio_handler.cpp	/^  const uint8_t* data() const override { return buffer_; }$/;"	f	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:const uint8_t *	file:
+data	host/frontend/webrtc/audio_handler.cpp	/^uint8_t* AudioHandler::HoldingBuffer::data() { return buffer.data(); }$/;"	f	class:cuttlefish::AudioHandler::HoldingBuffer	typeref:typename:uint8_t *
+data	host/frontend/webrtc/connection_observer.cpp	/^  T *data() { return buffer_.data(); }$/;"	f	struct:cuttlefish::InputEventBufferImpl	typeref:typename:T *	file:
+data	host/frontend/webrtc/connection_observer.cpp	/^  const void *data() const override { return buffer_.data(); }$/;"	f	struct:cuttlefish::InputEventBufferImpl	typeref:typename:const void *	file:
+data	host/frontend/webrtc/lib/ws_connection.cpp	/^    uint8_t* data() { return &buffer_[LWS_PRE]; }$/;"	f	struct:WsConnectionImpl::WsBuffer	typeref:typename:uint8_t *	file:
+data	host/libs/confui/host_renderer.h	/^  auto data() { return teeui_frame_.data(); }$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:auto
+data	host/libs/confui/sign_utils.h	/^  const uint8_t* data() const { return data_; }$/;"	f	class:cuttlefish::confui::support::ByteBufferProxy	typeref:typename:const uint8_t *
+data	host/libs/websocket/websocket_handler.h	/^    std::vector<uint8_t> data;$/;"	m	struct:cuttlefish::WebSocketHandler::WsBuffer	typeref:typename:std::vector<uint8_t>
+dataCallListChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::dataCallListChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+data_	common/libs/utils/unix_sockets.h	/^  std::vector<char> data_;$/;"	m	struct:cuttlefish::ControlMessage	typeref:typename:std::vector<char>
+data_	host/libs/confui/sign_utils.h	/^  const uint8_t* data_;$/;"	m	class:cuttlefish::confui::support::ByteBufferProxy	typeref:typename:const uint8_t *
+data_channels_	host/frontend/webrtc/lib/client_handler.h	/^  std::vector<rtc::scoped_refptr<webrtc::DataChannelInterface>> data_channels_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::vector<rtc::scoped_refptr<webrtc::DataChannelInterface>>
+data_code_scheme_	host/commands/modem_simulator/pdu_parser.h	/^  std::string data_code_scheme_;$/;"	m	class:cuttlefish::PDUParser	typeref:typename:std::string
+data_path_	host/libs/config/data_image.cpp	/^  DataImagePath& data_path_;$/;"	m	class:cuttlefish::InitializeDataImageImpl	typeref:typename:DataImagePath &	file:
+data_policy	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::data_policy() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+data_registration_status_	host/commands/modem_simulator/network_service.h	/^  NetworkRegistrationStatus data_registration_status_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:NetworkRegistrationStatus
+data_service_	host/commands/modem_simulator/network_service.h	/^  DataService* data_service_ = nullptr;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:DataService *
+dbm	guest/hals/ril/reference-libril/ril.h	/^    int dbm;  \/* Valid values are positive integers.  This value is the actual RSSI value$/;"	m	struct:__anon0bfbaecf4908	typeref:typename:int
+dbm	guest/hals/ril/reference-libril/ril.h	/^    int dbm;  \/* Valid values are positive integers.  This value is the actual RSSI value$/;"	m	struct:__anon0bfbaecf4a08	typeref:typename:int
+dcss	host/commands/modem_simulator/sms_service.h	/^    std::string dcss;$/;"	m	struct:cuttlefish::SmsService::BroadcastConfig	typeref:typename:std::string
+deactivateDataCall	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::deactivateDataCall(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+deactivateDataCallResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::deactivateDataCallResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+deactivateDataCall_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::deactivateDataCall_1_2(int32_t serial, int32_t cid,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+death_recipient_	guest/hals/bt/remote/remote_bluetooth.h	/^  sp<BluetoothDeathRecipient> death_recipient_;$/;"	m	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:sp<BluetoothDeathRecipient>
+decodeRootcanalMessage	host/frontend/webrtc_operator/assets/js/rootcanal.js	/^function decodeRootcanalMessage(array) {$/;"	f
+defaultRoamingIndicator	guest/hals/ril/reference-libril/ril.h	/^    int32_t defaultRoamingIndicator;      \/\/ default Roaming Indicator from the PRL,$/;"	m	struct:__anon0bfbaecf7f08	typeref:typename:int32_t
+defvalue_storage_	host/commands/start/flag_forwarder.cc	/^  T defvalue_storage_;$/;"	m	class:DynamicFlag	typeref:typename:T	file:
+delete	host/commands/secure_env/in_process_tpm.cpp	/^#define delete /;"	d	file:
+deleteAllKeys	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<ErrorCode> RemoteKeymaster4Device::deleteAllKeys() {$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<ErrorCode>
+deleteAllKeys	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::deleteAllKeys() {$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+deleteAllUsers	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^Return<void> RemoteGateKeeperDevice::deleteAllUsers(deleteAllUsers_cb _hidl_cb) {$/;"	f	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:Return<void>
+deleteKey	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<ErrorCode> RemoteKeymaster4Device::deleteKey(const hidl_vec<uint8_t>& keyBlob) {$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<ErrorCode>
+deleteKey	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::deleteKey(const vector<uint8_t>& keyBlob) {$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+deleteSmsOnRuim	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::deleteSmsOnRuim(int32_t serial, int32_t index) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+deleteSmsOnRuimResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::deleteSmsOnRuimResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+deleteSmsOnSim	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::deleteSmsOnSim(int32_t serial, int32_t index) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+deleteSmsOnSimResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::deleteSmsOnSimResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+deleteUser	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^Return<void> RemoteGateKeeperDevice::deleteUser(uint32_t \/*uid*\/, deleteUser_cb _hidl_cb) {$/;"	f	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:Return<void>
+delete_interface	tools/vlan_prototype_down.sh	/^delete_interface() {$/;"	f
+deliverSecureInputEvent	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^TrustyConfirmationUI::deliverSecureInputEvent(const HardwareAuthToken& auth_token) {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:Return<ResponseCode>
+dependencyTag	build/cvd-host-package.go	/^type dependencyTag struct {$/;"	s	package:cuttlefish
+deprecated_boot_completed	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::deprecated_boot_completed() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+deprecated_boot_completed_	host/commands/kernel_log_monitor/kernel_log_server.h	/^  bool deprecated_boot_completed_;$/;"	m	class:monitor::KernelLogServer	typeref:typename:bool
+dequeue	guest/hals/ril/reference-libril/rilSocketQueue.h	/^T* Ril_queue<T>::dequeue(void) {$/;"	f	class:Ril_queue	typeref:typename:T *
+description	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #description;$/;"	M	class:DeviceConnection
+description	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  get description() {$/;"	G	class:DeviceConnection
+description	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  set description(desc) {$/;"	S	class:DeviceConnection
+dest_family	tools/create_base_image.go	/^var dest_family string$/;"	v	package:main	typeref:typename:string
+dest_family_flag=	tools/create_base_image_hostlib.sh	/^    dest_family_flag=()$/;"	f
+dest_image	tools/create_base_image.go	/^var dest_image string$/;"	v	package:main	typeref:typename:string
+dest_project	tools/create_base_image.go	/^var dest_project string$/;"	v	package:main	typeref:typename:string
+destinationAddress	guest/hals/ril/reference-libril/ril.h	/^    char destinationAddress[MAX_INADDR_LEN]; \/* Destination address in network-byte order *\/$/;"	m	struct:__anon0bfbaecfc508	typeref:typename:char[]
+destinationPort	guest/hals/ril/reference-libril/ril.h	/^    int destinationPort;                     \/* Destination port if applicable or 0x7FFFFFFF;$/;"	m	struct:__anon0bfbaecfc508	typeref:typename:int
+destinations_	common/libs/utils/tee_logging.h	/^  std::vector<SeverityTarget> destinations_;$/;"	m	class:cuttlefish::TeeLogger	typeref:typename:std::vector<SeverityTarget>
+destroyAttestationIds	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<ErrorCode> RemoteKeymaster4Device::destroyAttestationIds() {$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<ErrorCode>
+destroyAttestationIds	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::destroyAttestationIds() {$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+destroy_virtio_gpu_metadata_resource_callback	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^void destroy_virtio_gpu_metadata_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anon027348120111	typeref:typename:void
+destroy_virtio_gpu_surface_metadata_resource_callback	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^void destroy_virtio_gpu_surface_metadata_resource_callback($/;"	f	namespace:wayland::__anon027348120111	typeref:typename:void
+dev_	guest/commands/vsoc_input_service/virtual_device_base.h	/^  struct uinput_user_dev dev_ {};$/;"	s	class:cuttlefish_input_service::VirtualDeviceBase
+dev_path_	guest/hals/bt/remote/remote_bluetooth.h	/^  const std::string dev_path_;$/;"	m	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:const std::string
+device	guest/hals/camera/cached_stream_buffer.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera	file:
+device	guest/hals/camera/cached_stream_buffer.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera
+device	guest/hals/camera/stream_buffer_cache.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera	file:
+device	guest/hals/camera/stream_buffer_cache.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera
+device	guest/hals/camera/vsock_camera_device_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera	file:
+device	guest/hals/camera/vsock_camera_device_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera
+device	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera	file:
+device	guest/hals/camera/vsock_camera_device_session_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera
+device	guest/hals/camera/vsock_camera_metadata.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera	file:
+device	guest/hals/camera/vsock_camera_metadata.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera
+device	guest/hals/gatekeeper/remote/service.cpp	/^const char device[] = "\/dev\/hvc4";$/;"	v	typeref:typename:const char[]
+device	guest/hals/keymaster/remote/service4.cpp	/^const char device[] = "\/dev\/hvc3";$/;"	v	typeref:typename:const char[]
+device	guest/hals/keymint/remote/service.cpp	/^const char device[] = "\/dev\/hvc3";$/;"	v	namespace:__anon5714be600111	typeref:typename:const char[]
+device-audio	host/frontend/webrtc_operator/assets/client.html	/^            <audio controls id="device-audio"><\/audio>$/;"	I
+device-connection	host/frontend/webrtc_operator/assets/client.html	/^      <section id="device-connection">$/;"	I
+device-details-button	host/frontend/webrtc_operator/assets/client.html	/^            <button id='device-details-button' title='Device Details' class='material-icons'>$/;"	I
+device-details-close	host/frontend/webrtc_operator/assets/client.html	/^          <button id='device-details-close' title='Close' class='material-icons modal-close'>clo/;"	I
+device-details-hardware	host/frontend/webrtc_operator/assets/client.html	/^        <span id='device-details-hardware'>unknown<\/span>$/;"	I
+device-details-modal	host/frontend/webrtc_operator/assets/client.html	/^      <div id='device-details-modal' class='modal'>$/;"	I
+device-details-modal-header	host/frontend/webrtc_operator/assets/client.html	/^        <div id='device-details-modal-header' class='modal-header'>$/;"	I
+device-displays	host/frontend/webrtc_operator/assets/client.html	/^          <div id='device-displays'>$/;"	I
+device-list	host/frontend/webrtc_operator/assets/index.html	/^        <ul id="device-list"><\/ul>$/;"	I
+device-selector	host/frontend/webrtc_operator/assets/index.html	/^      <section id='device-selector'>$/;"	I
+deviceAdded	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^void VsockCameraProvider::deviceAdded(const char* name) {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:void
+deviceConnection	host/frontend/webrtc_operator/assets/js/app.js	/^  #deviceConnection = {};$/;"	M	class:DeviceControlApp
+deviceId	host/frontend/webrtc_operator/assets/js/server_connector.js	/^export function deviceId() {$/;"	f
+deviceLocked	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<ErrorCodeV41> RemoteKeymaster4Device::deviceLocked($/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<ErrorCodeV41>
+deviceLocked	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::deviceLocked($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+devicePrivKey_	host/commands/secure_env/tpm_remote_provisioning_context.h	/^  std::vector<uint8_t> devicePrivKey_;$/;"	m	class:cuttlefish::TpmRemoteProvisioningContext	typeref:typename:std::vector<uint8_t>
+deviceRemoved	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^void VsockCameraProvider::deviceRemoved(const char* name) {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:void
+device_config_	common/libs/device_config/device_config.h	/^  DeviceConfig device_config_;$/;"	m	class:cuttlefish::DeviceConfigHelper	typeref:typename:DeviceConfig
+device_handler	host/frontend/webrtc_operator/client_handler.cpp	/^  std::shared_ptr<DeviceHandler> device_handler() const {$/;"	f	class:cuttlefish::PollConnectionHandler	typeref:typename:std::shared_ptr<DeviceHandler>	file:
+device_handler_	host/frontend/webrtc_operator/client_handler.cpp	/^  std::weak_ptr<DeviceHandler> device_handler_;$/;"	m	class:cuttlefish::PollConnectionHandler	typeref:typename:std::weak_ptr<DeviceHandler>	file:
+device_handler_	host/frontend/webrtc_operator/client_handler.h	/^  std::weak_ptr<DeviceHandler> device_handler_;$/;"	m	class:cuttlefish::ClientWSHandler	typeref:typename:std::weak_ptr<DeviceHandler>
+device_id	host/commands/metrics/proto/cf_log.proto	/^  optional string device_id = 3;$/;"	f	message:cuttlefish.CuttlefishLogEvent	typeref:typename:string
+device_id	host/frontend/webrtc/lib/streamer.h	/^  std::string device_id;$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig	typeref:typename:std::string
+device_id_	host/frontend/webrtc_operator/device_handler.h	/^  std::string device_id_;$/;"	m	class:cuttlefish::DeviceHandler	typeref:typename:std::string
+device_info	host/frontend/webrtc_operator/device_handler.h	/^  Json::Value device_info() const { return device_info_; }$/;"	f	class:cuttlefish::DeviceHandler	typeref:typename:Json::Value
+device_info_	host/frontend/webrtc_operator/device_handler.h	/^  Json::Value device_info_;$/;"	m	class:cuttlefish::DeviceHandler	typeref:typename:Json::Value
+device_module	host/frontend/webrtc/lib/streamer.cpp	/^  rtc::scoped_refptr<CfAudioDeviceModule> device_module() {$/;"	f	class:cuttlefish::webrtc_streaming::__anonab9390d10111::AudioDeviceModuleWrapper	typeref:typename:rtc::scoped_refptr<CfAudioDeviceModule>	file:
+device_module_	host/frontend/webrtc/lib/streamer.cpp	/^  rtc::scoped_refptr<CfAudioDeviceModule> device_module_;$/;"	m	class:cuttlefish::webrtc_streaming::__anonab9390d10111::AudioDeviceModuleWrapper	typeref:typename:rtc::scoped_refptr<CfAudioDeviceModule>	file:
+device_name_	guest/commands/vsoc_input_service/virtual_device_base.h	/^  const char* const device_name_;$/;"	m	class:cuttlefish_input_service::VirtualDeviceBase	typeref:typename:const char * const
+device_states	host/frontend/webrtc/lib/streamer.cpp	/^  std::vector<DeviceState> device_states;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::ControlPanelButtonDescriptor	typeref:typename:std::vector<DeviceState>	file:
+device_states	host/libs/config/custom_actions.h	/^  std::vector<DeviceState> device_states;$/;"	m	struct:cuttlefish::CustomActionConfig	typeref:typename:std::vector<DeviceState>
+device_states	shared/config/config_foldable.json	/^                        "device_states": [$/;"	a	object:custom_actions.0
+device_states	shared/config/config_foldable.json	/^                        "device_states": [$/;"	a	object:custom_actions.1
+device_type	host/commands/metrics/proto/cf_log.proto	/^  optional DeviceType device_type = 2;$/;"	f	message:cuttlefish.CuttlefishLogEvent	typeref:typename:DeviceType
+devices_	host/frontend/webrtc_operator/device_registry.h	/^  std::map<std::string, std::weak_ptr<DeviceHandler>> devices_;$/;"	m	class:cuttlefish::DeviceRegistry	typeref:typename:std::map<std::string,std::weak_ptr<DeviceHandler>>
+df_name	host/commands/modem_simulator/sim_service.h	/^    std::string df_name;$/;"	m	struct:cuttlefish::SimService::LogicalChannel	typeref:typename:std::string
+dhcp	common/libs/utils/network.cpp	/^  Dhcp4ReleaseMessage dhcp;$/;"	m	struct:cuttlefish::CompleteReleaseFrame	typeref:typename:Dhcp4ReleaseMessage	file:
+dial	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::dial(int32_t serial, const Dial& dialInfo) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+dialInfo	guest/hals/ril/reference-libril/ril.h	/^    RIL_Dial                     dialInfo;$/;"	m	struct:__anon0bfbaecfb708	typeref:typename:RIL_Dial
+dialResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::dialResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+dictionary_	host/commands/modem_simulator/nvram_config.h	/^  std::unique_ptr<Json::Value> dictionary_;$/;"	m	class:cuttlefish::NvramConfig	typeref:typename:std::unique_ptr<Json::Value>
+dictionary_	host/libs/config/cuttlefish_config.h	/^  std::unique_ptr<Json::Value> dictionary_;$/;"	m	class:cuttlefish::CuttlefishConfig	typeref:typename:std::unique_ptr<Json::Value>
+dictionary_	host/libs/config/fetcher_config.h	/^  std::unique_ptr<Json::Value> dictionary_;$/;"	m	class:cuttlefish::FetcherConfig	typeref:typename:std::unique_ptr<Json::Value>
+digest	host/commands/secure_env/soft_gatekeeper.h	/^    uint8_t digest[SHA256_DIGEST_LENGTH];$/;"	m	struct:gatekeeper::fast_hash_t	typeref:typename:uint8_t[]
+digest_size_	host/commands/secure_env/hmac_serializable.h	/^  uint32_t digest_size_;$/;"	m	class:cuttlefish::HmacSerializable	typeref:typename:uint32_t
+direction	host/libs/audio_connector/shm_layout.h	/^  uint8_t direction;$/;"	m	struct:cuttlefish::virtio_snd_chmap_info	typeref:typename:uint8_t
+direction	host/libs/audio_connector/shm_layout.h	/^  uint8_t direction;$/;"	m	struct:cuttlefish::virtio_snd_pcm_info	typeref:typename:uint8_t
+disableWifi	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    private void disableWifi() throws Exception {$/;"	m	class:RilE2eTests	file:
+disableWifi	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    private void disableWifi() {$/;"	m	class:WifiE2eTests	file:
+disable_scan_offload	shared/config/wpa_supplicant_overlay.conf	/^disable_scan_offload=1$/;"	k
+disconnect	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  disconnect() {$/;"	m	class:DeviceConnection
+disconnectReq	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::disconnectReq(int32_t token) {$/;"	f	class:SapImpl	typeref:typename:Return<void>
+disconnect_callback_	common/libs/utils/vsock_connection.h	/^  std::function<void()> disconnect_callback_;$/;"	m	class:cuttlefish::VsockConnection	typeref:typename:std::function<void ()>
+disconnectedCb	host/frontend/webrtc_operator/assets/js/adb.js	/^let disconnectedCb;$/;"	v
+disconnectedTimeout	host/frontend/webrtc_operator/assets/js/adb.js	/^let disconnectedTimeout;$/;"	v
+discrete_gpu_device_extensions	host/libs/graphics_detector/graphics_detector.h	/^  std::string discrete_gpu_device_extensions;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+discrete_gpu_device_name	host/libs/graphics_detector/graphics_detector.h	/^  std::string discrete_gpu_device_name;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+disk_guid	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint8_t disk_guid[16];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint8_t[16]	file:
+disk_size	common/libs/utils/files.h	/^  off_t disk_size;$/;"	m	struct:cuttlefish::FileSizes	typeref:typename:off_t
+dispatchCallForwardStatus	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchCallForwardStatus(int serial, int slotId, int request,$/;"	f	typeref:typename:bool
+dispatchIccApdu	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchIccApdu(int serial, int slotId, int request, const SimApdu& message) {$/;"	f	typeref:typename:bool
+dispatchImsCdmaSms	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchImsCdmaSms(const ImsSmsMessage& message, RequestInfo *pRI) {$/;"	f	typeref:typename:bool
+dispatchImsGsmSms	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchImsGsmSms(const ImsSmsMessage& message, RequestInfo *pRI) {$/;"	f	typeref:typename:bool
+dispatchInts	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchInts(int serial, int slotId, int request, int countInts, ...) {$/;"	f	typeref:typename:bool
+dispatchQueue	guest/hals/ril/reference-libril/RilSapSocket.h	/^    Ril_queue<SapSocketRequest> dispatchQueue;$/;"	m	class:RilSapSocket	typeref:typename:Ril_queue<SapSocketRequest>
+dispatchRaw	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchRaw(int serial, int slotId, int request, const hidl_vec<uint8_t>& rawBytes) {$/;"	f	typeref:typename:bool
+dispatchRequest	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^void RilSapSocket::dispatchRequest(MsgHeader *req) {$/;"	f	class:RilSapSocket	typeref:typename:void
+dispatchString	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchString(int serial, int slotId, int request, const char * str) {$/;"	f	typeref:typename:bool
+dispatchStrings	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchStrings(int serial, int slotId, int request, bool allowEmpty, int countStrings, .../;"	f	typeref:typename:bool
+dispatchStrings	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchStrings(int serial, int slotId, int request, const hidl_vec<hidl_string>& data) {$/;"	f	typeref:typename:bool
+dispatchVoid	guest/hals/ril/reference-libril/ril_service.cpp	/^bool dispatchVoid(int serial, int slotId, int request) {$/;"	f	typeref:typename:bool
+display	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_DisplayInfoRecord           display;$/;"	m	union:__anon0bfbaecf8908::__anon0bfbaecf8a0a	typeref:typename:RIL_CDMA_DisplayInfoRecord
+display0	shared/config/config_auto.json	/^	"display0": "width=1080,height=600,dpi=120",$/;"	s
+display1	shared/config/config_auto.json	/^	"display1": "width=400,height=600,dpi=120",$/;"	s
+displayDescriptions	host/frontend/webrtc_operator/assets/js/app.js	/^  #displayDescriptions = [];$/;"	M	class:DeviceControlApp
+display_	host/libs/wayland/wayland_server.cpp	/^  struct wl_display* display_ = nullptr;$/;"	m	struct:wayland::internal::WaylandServerState	typeref:struct:wl_display *	file:
+display_config	common/libs/device_config/device_config.proto	/^  repeated DisplayConfig display_config = 2;$/;"	f	message:cuttlefish.DeviceConfig	typeref:typename:DisplayConfig
+display_configs	host/libs/config/cuttlefish_config.cpp	/^std::vector<CuttlefishConfig::DisplayConfig> CuttlefishConfig::display_configs()$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::vector<CuttlefishConfig::DisplayConfig>
+display_num_	host/libs/confui/host_renderer.h	/^  std::uint32_t display_num_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::uint32_t
+display_num_	host/libs/confui/host_server.h	/^  const std::uint32_t display_num_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:const std::uint32_t
+display_num_	host/libs/confui/session.h	/^  const std::uint32_t display_num_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:const std::uint32_t
+display_number_	host/libs/screen_connector/screen_connector_common.h	/^  std::uint32_t display_number_;$/;"	m	struct:cuttlefish::ScreenConnectorFrameInfo	typeref:typename:std::uint32_t
+display_sinks_	host/frontend/webrtc/display_handler.h	/^  std::vector<std::shared_ptr<webrtc_streaming::VideoSink>> display_sinks_;$/;"	m	class:cuttlefish::DisplayHandler	typeref:typename:std::vector<std::shared_ptr<webrtc_streaming::VideoSink>>
+displays_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::vector<std::unique_ptr<Display>> displays_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Impl	typeref:typename:std::vector<std::unique_ptr<Display>>	file:
+displays_	host/frontend/webrtc/lib/streamer.cpp	/^  std::map<std::string, DisplayDescriptor> displays_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::map<std::string,DisplayDescriptor>	file:
+dlog	guest/hals/ril/reference-libril/ril_event.cpp	/^#define dlog(/;"	d	file:
+dns	common/libs/device_config/device_config.proto	/^    string dns = 3;$/;"	f	message:cuttlefish.DeviceConfig.RILConfig	typeref:typename:string
+dnses	guest/hals/ril/reference-libril/ril.h	/^    char *          dnses;      \/* A space-delimited list of DNS server addresses,$/;"	m	struct:__anon0bfbaecf1308	typeref:typename:char *
+dnses	guest/hals/ril/reference-libril/ril.h	/^    char *          dnses;      \/* A space-delimited list of DNS server addresses,$/;"	m	struct:__anon0bfbaecf1408	typeref:typename:char *
+dnses	guest/hals/ril/reference-libril/ril.h	/^    char *          dnses;      \/* A space-delimited list of DNS server addresses,$/;"	m	struct:__anon0bfbaecf1508	typeref:typename:char *
+dnses	guest/hals/ril/reference-libril/ril.h	/^    char *          dnses;      \/* A space-delimited list of DNS server addresses,$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:char *
+dnses	host/commands/modem_simulator/data_service.h	/^    std::string dnses;$/;"	m	struct:cuttlefish::DataService::PDPContext	typeref:typename:std::string
+do_redirects	common/libs/utils/subprocess.cpp	/^void do_redirects(const std::map<Subprocess::StdIOChannel, int>& redirects) {$/;"	f	namespace:cuttlefish::__anon39e8abf00111	typeref:typename:void
+doc	host/commands/modem_simulator/sim_service.h	/^    XMLDocument doc;$/;"	m	struct:cuttlefish::SimService::SimFileSystem	typeref:typename:XMLDocument
+down	host/frontend/webrtc_operator/assets/js/app.js	/^      down: false,$/;"	p	class:DeviceControlApp.startMouseTracking.mouseCtx
+downLink	guest/hals/ril/reference-libril/ril.h	/^  char downLink;$/;"	m	struct:__anon0bfbaecf8808	typeref:typename:char
+download_host_package	host/commands/fetcher/fetch_cvd.cc	/^std::vector<std::string> download_host_package(BuildApi* build_api,$/;"	f	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:std::vector<std::string>
+download_images	host/commands/fetcher/fetch_cvd.cc	/^std::vector<std::string> download_images(BuildApi* build_api,$/;"	f	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:std::vector<std::string>
+download_ota_tools	host/commands/fetcher/fetch_cvd.cc	/^std::vector<std::string> download_ota_tools(BuildApi* build_api,$/;"	f	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:std::vector<std::string>
+download_target_files	host/commands/fetcher/fetch_cvd.cc	/^std::vector<std::string> download_target_files(BuildApi* build_api,$/;"	f	namespace:cuttlefish::__anonccb356fd0211	typeref:typename:std::vector<std::string>
+dpi	common/libs/device_config/device_config.proto	/^    int32 dpi = 3;$/;"	f	message:cuttlefish.DeviceConfig.DisplayConfig	typeref:typename:int32
+dpi	host/frontend/webrtc/lib/streamer.cpp	/^  int dpi;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::DisplayDescriptor	typeref:typename:int	file:
+dpi	host/libs/config/cuttlefish_config.h	/^    int dpi;$/;"	m	struct:cuttlefish::CuttlefishConfig::DisplayConfig	typeref:typename:int
+dpi	shared/config/config_foldable.json	/^	"dpi" : 386,$/;"	n
+dpi	shared/config/config_phone.json	/^	"dpi" : 320,$/;"	n
+dpi	shared/config/config_tablet.json	/^	"dpi" : 320,$/;"	n
+dpi	shared/config/config_tv.json	/^	"dpi" : 213,$/;"	n
+drawElements	host/libs/confui/host_renderer.h	/^  static teeui::Error drawElements(std::tuple<Elements...>& layout,$/;"	f	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::Error
+droidcore	fetcher.mk	/^droidcore: $(fetcher_bin)$/;"	t
+droidcore	host_package.mk	/^droidcore: $(cvd_host_packages)$/;"	t
+dump	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {$/;"	m	class:GceService
+dumpState	guest/hals/camera/vsock_camera_device_3_4.cpp	/^Return<void> VsockCameraDevice::dumpState($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:Return<void>
+dump_event	guest/hals/ril/reference-libril/ril_event.cpp	/^#define dump_event(/;"	d	file:
+dump_event	guest/hals/ril/reference-libril/ril_event.cpp	/^static void dump_event(struct ril_event * ev)$/;"	f	typeref:typename:void	file:
+dyn_handler_factories_	host/libs/websocket/websocket_server.h	/^  std::unordered_map<std::string, DynHandlerFactory> dyn_handler_factories_ =$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:std::unordered_map<std::string,DynHandlerFactory>
+dyn_handlers_	host/libs/websocket/websocket_server.h	/^  std::unordered_map<struct lws*, std::unique_ptr<DynHandler>> dyn_handlers_ =$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:std::unordered_map<struct lws *,std::unique_ptr<DynHandler>>
+dyn_mounts_	host/libs/websocket/websocket_server.h	/^  std::vector<struct lws_http_mount> dyn_mounts_ = {};$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:std::vector<struct lws_http_mount>
+earfcn	guest/hals/ril/reference-libril/ril.h	/^    int earfcn; \/* 18-bit LTE Absolute RF Channel Number; this value must be reported *\/$/;"	m	struct:__anon0bfbaecf5e08	typeref:typename:int
+earfcn	guest/hals/ril/reference-libril/ril.h	/^    int earfcn; \/* 18-bit LTE Absolute RF Channel Number; this value must be reported *\/$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:int
+earlyBootEnded	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<ErrorCodeV41> RemoteKeymaster4Device::earlyBootEnded() {$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<ErrorCodeV41>
+earlyBootEnded	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::earlyBootEnded() {$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+ebr	host/libs/allocd/request.h	/^  ebr           \/\/ ethernet bridge$/;"	e	enum:cuttlefish::IfaceType
+ecio	guest/hals/ril/reference-libril/ril.h	/^    int ecio; \/* Valid values are positive integers.  This value is the actual Ec\/Io multiplie/;"	m	struct:__anon0bfbaecf4908	typeref:typename:int
+ecio	guest/hals/ril/reference-libril/ril.h	/^    int ecio; \/* Valid values are positive integers.  This value is the actual Ec\/Io multiplie/;"	m	struct:__anon0bfbaecf4a08	typeref:typename:int
+ef_id	guest/hals/ril/reference-libril/ril.h	/^    int                  ef_id; \/* is the EFID of the updated file if the result is *\/$/;"	m	struct:__anon0bfbaecf4108	typeref:typename:int
+egl_client_extensions	host/libs/graphics_detector/graphics_detector.h	/^  std::string egl_client_extensions;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+egl_extensions	host/libs/graphics_detector/graphics_detector.h	/^  std::string egl_extensions;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+egl_vendor	host/libs/graphics_detector/graphics_detector.h	/^  std::string egl_vendor;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+egl_version	host/libs/graphics_detector/graphics_detector.h	/^  std::string egl_version;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+eid	guest/hals/ril/reference-libril/ril.h	/^    char *              eid;    \/* The EID is the eUICC identifier. The EID shall be stored wit/;"	m	struct:__anon0bfbaecf3c08	typeref:typename:char *
+eid	guest/hals/ril/reference-libril/ril.h	/^    char* eid;$/;"	m	struct:__anon0bfbaecfba08	typeref:typename:char *
+elapsed_time_ms	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional Duration elapsed_time_ms = 4;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:Duration
+element	host/frontend/webrtc_operator/assets/js/app.js	/^  #element;$/;"	M	class:DeviceDetailsUpdater
+emergencyDial	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::emergencyDial(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+emergencyDialResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::emergencyDialResponse(int slotId, int responseType, int serial, RIL_Errno e,$/;"	f	class:radio_1_6	typeref:typename:int
+emergencyDial_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::emergencyDial_1_6(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+emergency_mode	host/commands/modem_simulator/nvram_config.cpp	/^bool NvramConfig::InstanceSpecific::emergency_mode() const {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:bool
+empty	guest/hals/ril/reference-libril/rilSocketQueue.h	/^int Ril_queue<T>::empty(void) {$/;"	f	class:Ril_queue	typeref:typename:int
+empty	host/frontend/webrtc/audio_handler.cpp	/^bool AudioHandler::HoldingBuffer::empty() const { return count == 0; }$/;"	f	class:cuttlefish::AudioHandler::HoldingBuffer	typeref:typename:bool
+enableModem	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::enableModem(int32_t serial, bool \/* on *\/) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+enableModemResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::enableModemResponse(int slotId, int responseType, int serial, RIL_Errno e,$/;"	f	class:radio_1_6	typeref:typename:int
+enableNetwork	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    private void enableNetwork(String SSID) {$/;"	m	class:WifiE2eTests	file:
+enableUiccApplications	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::enableUiccApplications(int32_t serial, bool enable) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+enableUiccApplicationsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::enableUiccApplicationsResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+enableWifi	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    private void enableWifi() {$/;"	m	class:WifiE2eTests	file:
+enable_audio	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::enable_audio() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+enable_gnss_grpc_proxy	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::enable_gnss_grpc_proxy() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+enable_host_bluetooth	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::enable_host_bluetooth() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+enable_metrics	host/libs/config/cuttlefish_config.cpp	/^CuttlefishConfig::Answer CuttlefishConfig::enable_metrics() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:CuttlefishConfig::Answer
+enable_minimal_mode	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::enable_minimal_mode() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+enable_modem_simulator	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::enable_modem_simulator() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+enable_sandbox	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::enable_sandbox() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+enable_vehicle_hal_grpc_server	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::enable_vehicle_hal_grpc_server() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+enable_webrtc	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::enable_webrtc() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+enabled	guest/hals/ril/reference-libril/ril.h	/^    int enabled;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:int
+enabled	guest/hals/ril/reference-libril/ril.h	/^    int enabled;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+encode_queue_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::list<webrtc::VideoFrame> encode_queue_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:std::list<webrtc::VideoFrame>	file:
+encode_queue_mutex_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::mutex encode_queue_mutex_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:std::mutex	file:
+encoder_factory_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::unique_ptr<webrtc::VideoEncoderFactory> encoder_factory_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Impl	typeref:typename:std::unique_ptr<webrtc::VideoEncoderFactory>	file:
+encoder_queue_signal_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::condition_variable encoder_queue_signal_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:std::condition_variable	file:
+encoder_running_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::atomic_bool encoder_running_ = true;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:std::atomic_bool	file:
+encoder_thread_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::thread encoder_thread_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:std::thread	file:
+end	common/libs/fs/shared_select.h	/^  const_iterator end() const { return value_.end(); }$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:const_iterator
+end	common/libs/fs/shared_select.h	/^  iterator end() { return value_.end(); }$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:iterator
+end	host/libs/confui/sign_utils.h	/^  const uint8_t* end() const { return data_ + size_; }$/;"	f	class:cuttlefish::confui::support::ByteBufferProxy	typeref:typename:const uint8_t *
+endSensorInjection	guest/commands/sensor_injection/main.cpp	/^void endSensorInjection(const sp<ISensors> sensors) {$/;"	f	typeref:typename:void
+end_chs	host/libs/config/mbr.h	/^  std::uint8_t end_chs[3];$/;"	m	struct:MbrPartitionEntry	typeref:typename:std::uint8_t[3]
+end_code	common/libs/utils/network.cpp	/^  std::uint8_t end_code;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t	file:
+enforcement_	host/commands/secure_env/tpm_keymaster_context.h	/^  keymaster::KeymasterEnforcement& enforcement_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster::KeymasterEnforcement &
+enforcement_policy	host/commands/secure_env/proxy_keymaster_context.h	/^  keymaster::KeymasterEnforcement* enforcement_policy() override {$/;"	f	class:cuttlefish::ProxyKeymasterContext	typeref:typename:keymaster::KeymasterEnforcement *
+enforcement_policy	host/commands/secure_env/tpm_keymaster_context.cpp	/^keymaster::KeymasterEnforcement* TpmKeymasterContext::enforcement_policy() {$/;"	f	class:cuttlefish::TpmKeymasterContext	typeref:typename:keymaster::KeymasterEnforcement *
+enqueue	guest/hals/ril/reference-libril/rilSocketQueue.h	/^void Ril_queue<T>::enqueue(T* request) {$/;"	f	class:Ril_queue	typeref:typename:void
+enroll	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^Return<void> RemoteGateKeeperDevice::enroll(uint32_t uid,$/;"	f	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:Return<void>
+enterEmergencyCallbackModeInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::enterEmergencyCallbackModeInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+entries	host/libs/image_aggregator/image_aggregator.cc	/^  GptPartitionEntry entries[GPT_NUM_PARTITIONS];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptBeginning	typeref:typename:GptPartitionEntry[]	file:
+entries	host/libs/image_aggregator/image_aggregator.cc	/^  GptPartitionEntry entries[GPT_NUM_PARTITIONS];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptEnd	typeref:typename:GptPartitionEntry[]	file:
+env_	common/libs/utils/subprocess.h	/^  std::vector<std::string> env_{};$/;"	m	class:cuttlefish::Command	typeref:typename:std::vector<std::string>
+errno_	common/libs/fs/shared_fd.h	/^  int errno_;$/;"	m	class:cuttlefish::FileInstance	typeref:typename:int
+error	guest/hals/ril/reference-libril/ril.h	/^    RIL_Errno error;$/;"	m	struct:__anon0bfbaecfb308	typeref:typename:RIL_Errno
+error	host/frontend/webrtc/lib/utils.h	/^  std::string error() const { return error_.value_or(""); }$/;"	f	class:cuttlefish::webrtc_streaming::ValidationResult	typeref:typename:std::string
+error-message	host/frontend/webrtc_operator/assets/client.html	/^        <div id="error-message-div"><h3 id="error-message" class="error"><\/h3><\/div>$/;"	I
+error-message-div	host/frontend/webrtc_operator/assets/client.html	/^        <div id="error-message-div"><h3 id="error-message" class="error"><\/h3><\/div>$/;"	I
+errorCode	guest/hals/ril/reference-libril/ril.h	/^    int errorCode;    \/* See 3GPP 27.005, 3.2.5 for GSM\/UMTS,$/;"	m	struct:__anon0bfbaecf1a08	typeref:typename:int
+error_	guest/hals/gatekeeper/remote/remote_gatekeeper.h	/^    int error_;$/;"	m	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:int
+error_	host/frontend/webrtc/lib/utils.h	/^  std::optional<std::string> error_;$/;"	m	class:cuttlefish::webrtc_streaming::ValidationResult	typeref:typename:std::optional<std::string>
+error_type	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional ErrorType error_type = 2;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:ErrorType
+esp_image_	host/libs/config/data_image.cpp	/^  std::string esp_image_;$/;"	m	class:cuttlefish::InitializeEspImageImpl	typeref:typename:std::string	file:
+esys_	host/commands/secure_env/test_tpm.h	/^  ESYS_CONTEXT* esys_;$/;"	m	class:cuttlefish::TestTpm	typeref:typename:ESYS_CONTEXT *
+esys_	host/commands/secure_env/tpm_random_source.h	/^  ESYS_CONTEXT* esys_;$/;"	m	class:cuttlefish::TpmRandomSource	typeref:typename:ESYS_CONTEXT *
+esys_	host/commands/secure_env/tpm_resource_manager.h	/^  ESYS_CONTEXT* esys_;$/;"	m	class:cuttlefish::TpmResourceManager	typeref:typename:ESYS_CONTEXT *
+etap	host/libs/allocd/request.h	/^  etap,         \/\/ ethernet tap$/;"	e	enum:cuttlefish::IfaceType
+eth	common/libs/utils/network.cpp	/^  ether_header eth;$/;"	m	struct:cuttlefish::CompleteReleaseFrame	typeref:typename:ether_header	file:
+ethernet_tap	host/commands/assemble_cvd/alloc.h	/^  IfaceData ethernet_tap;$/;"	m	struct:cuttlefish::IfaceConfig	typeref:typename:IfaceData
+ethernet_tap_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::ethernet_tap_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+ethhdr	common/libs/utils/network.cpp	/^#define ethhdr /;"	d	file:
+eutran_bands	guest/hals/ril/reference-libril/ril.h	/^        RIL_EutranBands eutran_bands[MAX_BANDS];$/;"	m	union:__anon0bfbaecfab08::__anon0bfbaecfac0a	typeref:typename:RIL_EutranBands[]
+eutran_bands	guest/hals/ril/reference-libril/ril.h	/^        RIL_EutranBands eutran_bands[MAX_BANDS];$/;"	m	union:__anon0bfbaecfae08::__anon0bfbaecfaf0a	typeref:typename:RIL_EutranBands[]
+evdo_dbm	host/commands/modem_simulator/network_service.h	/^    int evdo_dbm;   \/* Refer cdma_dbm *\/$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+evdo_ecio	host/commands/modem_simulator/network_service.h	/^    int evdo_ecio;  \/* Refer cdma_ecio *\/$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+evdo_snr	host/commands/modem_simulator/network_service.h	/^    int evdo_snr;   \/* Valid values are 0-8.  8 is the highest signal to noise ratio. *\/$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+event	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^  struct input_event event {};$/;"	s	function:VirtualDeviceBase::EmitEvent	file:
+event	guest/hals/ril/reference-libril/ril.cpp	/^    struct ril_event event;$/;"	m	struct:android::UserCallbackInfo	typeref:struct:ril_event	file:
+event	host/commands/kernel_log_monitor/kernel_log_server.cc	/^  Event event;             \/\/ emitted when the stage is encountered$/;"	m	struct:__anonfa7764770111::__anonfa7764770308	typeref:typename:Event	file:
+event	host/commands/kernel_log_monitor/utils.h	/^  Event event;$/;"	m	struct:monitor::ReadEventResult	typeref:typename:Event
+eventLoop	guest/hals/ril/reference-libril/ril.cpp	/^eventLoop(void *param) {$/;"	f	namespace:android	typeref:typename:void *	file:
+event_pipe_read_ends_	host/commands/run_cvd/launch.cc	/^  std::vector<SharedFD> event_pipe_read_ends_;$/;"	m	class:cuttlefish::KernelLogMonitor	typeref:typename:std::vector<SharedFD>	file:
+event_pipe_write_ends_	host/commands/run_cvd/launch.cc	/^  std::vector<SharedFD> event_pipe_write_ends_;$/;"	m	class:cuttlefish::KernelLogMonitor	typeref:typename:std::vector<SharedFD>	file:
+event_socket_	host/libs/audio_connector/server.h	/^  SharedFD event_socket_;$/;"	m	class:cuttlefish::AudioClientConnection	typeref:typename:SharedFD
+event_time_ms	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional Timestamp event_time_ms = 3;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:Timestamp
+event_time_ms	host/commands/metrics/proto/clientanalytics.proto	/^  optional int64 event_time_ms = 1;$/;"	f	message:LogEvent	typeref:typename:int64
+event_type	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional EventType event_type = 1;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:EventType
+eventfd_	host/frontend/webrtc/kernel_log_events_handler.h	/^  SharedFD eventfd_;$/;"	m	struct:cuttlefish::KernelLogEventsHandler	typeref:typename:SharedFD
+excluded_carriers	guest/hals/ril/reference-libril/ril.h	/^  RIL_Carrier * excluded_carriers;      \/* excluded carriers$/;"	m	struct:__anon0bfbaecf2708	typeref:typename:RIL_Carrier *
+excluded_carriers	guest/hals/ril/reference-libril/ril.h	/^  RIL_Carrier * excluded_carriers;      \/* explicitly excluded carriers$/;"	m	struct:__anon0bfbaecf2908	typeref:typename:RIL_Carrier *
+execute	common/libs/utils/subprocess.cpp	/^int execute(const std::vector<std::string>& command) {$/;"	f	namespace:cuttlefish	typeref:typename:int
+execute	common/libs/utils/subprocess.cpp	/^int execute(const std::vector<std::string>& command,$/;"	f	namespace:cuttlefish	typeref:typename:int
+execute	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java	/^    public int execute() {$/;"	m	class:BluetoothChecker
+execute	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    public int execute() {$/;"	m	class:ConnectivityChecker
+execute	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    public int execute() {$/;"	m	class:EventReporter
+execute	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^        public synchronized int execute() {$/;"	m	class:GceWifiManager.MonitorWifiJob
+execute	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    public synchronized int execute() {$/;"	m	class:GceWifiManager
+execute	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobBase.java	/^    public abstract int execute();$/;"	m	class:JobBase
+exists_boot_image_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_boot_image_spec = 13;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_bootloader_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_bootloader_spec = 14;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_composite_disk_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_composite_disk_spec = 15;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_data_image_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_data_image_spec = 16;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_metadata_image_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_metadata_image_spec = 17;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_misc_image_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_misc_image_spec = 18;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_qemu_binary_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_qemu_binary_spec = 19;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_super_image_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_super_image_spec = 20;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_system_image_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_system_image_spec = 12;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exists_vendor_boot_image_spec	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional bool exists_vendor_boot_image_spec = 21;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:bool
+exitEmergencyCallbackMode	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::exitEmergencyCallbackMode(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+exitEmergencyCallbackModeInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::exitEmergencyCallbackModeInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+exitEmergencyCallbackModeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::exitEmergencyCallbackModeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+exit_with_parent_	common/libs/utils/subprocess.h	/^  bool exit_with_parent_;$/;"	m	class:cuttlefish::SubprocessOptions	typeref:typename:bool
+exp_data	common/libs/net/netlink_request_test.cpp	/^  const uint8_t* exp_data = static_cast<const uint8_t*>($/;"	v	namespace:cuttlefish::__anon1ff2f3d90111	typeref:typename:const uint8_t *
+expiration	host/commands/fetcher/credential_source.h	/^  std::chrono::steady_clock::time_point expiration;$/;"	m	class:cuttlefish::GceMetadataCredentialSource	typeref:typename:std::chrono::steady_clock::time_point
+expirationTime	guest/hals/ril/reference-libril/ril.h	/^    int64_t expirationTime;    \/* Date-Time (in UTC) when the key will expire. *\/$/;"	m	struct:__anon0bfbaecf2c08	typeref:typename:int64_t
+expirationTime	guest/hals/ril/reference-libril/ril.h	/^  int64_t expirationTime;             \/* Date-Time (in UTC) when the key will expire. *\/$/;"	m	struct:__anon0bfbaecf2a08	typeref:typename:int64_t
+expiration_date_passed	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^bool TpmKeymasterEnforcement::expiration_date_passed($/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:bool
+expiry	common/libs/utils/network.h	/^  std::uint64_t expiry;$/;"	m	struct:cuttlefish::DnsmasqDhcp4Lease	typeref:typename:std::uint64_t
+explicitCallTransfer	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::explicitCallTransfer(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+explicitCallTransferResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::explicitCallTransferResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+exportKey	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::exportKey(KeyFormat exportFormat,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+extended_sul_	host/frontend/webrtc/lib/ws_connection.cpp	/^  CreateConnectionSul extended_sul_;$/;"	m	class:WsConnectionImpl	typeref:typename:CreateConnectionSul	file:
+extra_bootconfig_args	host/libs/config/cuttlefish_config.cpp	/^std::vector<std::string> CuttlefishConfig::extra_bootconfig_args() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::vector<std::string>
+extra_data_	common/libs/confui/protocol_types.h	/^  std::vector<std::uint8_t> extra_data_;$/;"	m	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::vector<std::uint8_t>
+extra_data_	guest/hals/confirmationui/guest_session.h	/^    std::vector<std::uint8_t> extra_data_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::vector<std::uint8_t>
+extra_data_	host/libs/confui/cbor.h	/^  std::vector<std::uint8_t> extra_data_;$/;"	m	class:cuttlefish::confui::Cbor	typeref:typename:std::vector<std::uint8_t>
+extra_data_	host/libs/confui/session.h	/^  std::vector<std::uint8_t> extra_data_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::vector<std::uint8_t>
+extra_kernel_cmdline	host/libs/config/cuttlefish_config.cpp	/^std::vector<std::string> CuttlefishConfig::extra_kernel_cmdline() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::vector<std::string>
+f	host/libs/confui/sign_utils.h	/^    static int f(const U*, const void*) {$/;"	f	struct:cuttlefish::confui::support::ByteBufferProxy::has_data	typeref:typename:int
+f_command_handler	host/commands/modem_simulator/modem_service.h	/^  std::optional<f_func> f_command_handler;$/;"	m	class:cuttlefish::CommandHandler	typeref:typename:std::optional<f_func>
+f_func	host/commands/modem_simulator/modem_service.h	/^using f_func = std::function<void(const Client&)>;                \/\/ Full match$/;"	t	namespace:cuttlefish
+facility_lock_	host/commands/modem_simulator/sim_service.h	/^  std::map<std::string, FacilityLock> facility_lock_;$/;"	m	class:cuttlefish::SimService	typeref:typename:std::map<std::string,FacilityLock>
+factory_reset_protected_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::factory_reset_protected_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+failCauseToString	guest/hals/ril/reference-libril/ril.cpp	/^failCauseToString(RIL_Errno e) {$/;"	f	namespace:android	typeref:typename:const char *
+failure_map_	host/commands/secure_env/soft_gatekeeper.h	/^    FailureRecordMap failure_map_;$/;"	m	class:gatekeeper::SoftGateKeeper	typeref:typename:FailureRecordMap
+fast_hash_map_	host/commands/secure_env/soft_gatekeeper.h	/^    FastHashMap fast_hash_map_;$/;"	m	class:gatekeeper::SoftGateKeeper	typeref:typename:FastHashMap
+fast_hash_t	host/commands/secure_env/soft_gatekeeper.h	/^struct fast_hash_t {$/;"	s	namespace:gatekeeper
+fatal_echo	tools/create_base_image_hostlib.sh	/^fatal_echo() {$/;"	f
+fd	guest/hals/ril/reference-libril/ril_event.h	/^    int fd;$/;"	m	struct:ril_event	typeref:typename:int
+fdCommand	guest/hals/ril/reference-libril/ril_ex.h	/^    int fdCommand;$/;"	m	struct:SocketListenParam	typeref:typename:int
+fdListen	guest/hals/ril/reference-libril/ril_ex.h	/^    int fdListen;$/;"	m	struct:SocketListenParam	typeref:typename:int
+fd_	common/libs/fs/shared_fd.h	/^  int fd_;$/;"	m	class:cuttlefish::FileInstance	typeref:typename:int
+fd_	common/libs/utils/tcp_socket.h	/^  SharedFD fd_;$/;"	m	class:cuttlefish::ClientSocket	typeref:typename:SharedFD
+fd_	common/libs/utils/tcp_socket.h	/^  SharedFD fd_;$/;"	m	class:cuttlefish::ServerSocket	typeref:typename:SharedFD
+fd_	common/libs/utils/vsock_connection.h	/^  SharedFD fd_;$/;"	m	class:cuttlefish::VsockConnection	typeref:typename:SharedFD
+fd_	guest/commands/vsoc_input_service/virtual_device_base.h	/^  int fd_ = -1;$/;"	m	class:cuttlefish_input_service::VirtualDeviceBase	typeref:typename:int
+fd_	guest/hals/bt/remote/remote_bluetooth.h	/^  int fd_{-1};$/;"	m	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:int
+fds_	common/libs/utils/unix_sockets.h	/^  std::vector<int> fds_;$/;"	m	struct:cuttlefish::ControlMessage	typeref:typename:std::vector<int>
+features	host/libs/audio_connector/commands.h	/^  uint32_t features() const { return features_; }$/;"	f	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:uint32_t
+features	host/libs/audio_connector/shm_layout.h	/^  Le32 features; \/* 1 << VIRTIO_SND_JACK_F_XXX *\/$/;"	m	struct:cuttlefish::virtio_snd_jack_info	typeref:typename:Le32
+features	host/libs/audio_connector/shm_layout.h	/^  Le32 features; \/* 1 << VIRTIO_SND_PCM_F_XXX *\/$/;"	m	struct:cuttlefish::virtio_snd_pcm_info	typeref:typename:Le32
+features	host/libs/audio_connector/shm_layout.h	/^  Le32 features; \/* 1 << VIRTIO_SND_PCM_F_XXX *\/$/;"	m	struct:cuttlefish::virtio_snd_pcm_set_params	typeref:typename:Le32
+features_	host/libs/audio_connector/commands.h	/^  const uint32_t features_;$/;"	m	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:const uint32_t
+fetcher_bin	fetcher.mk	/^fetcher_bin := $(HOST_OUT)\/$(bin_path)\/fetch_cvd$/;"	m
+fg_launcher_pipe_	host/commands/run_cvd/boot_state_machine.cc	/^  SharedFD fg_launcher_pipe_;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:SharedFD	file:
+fifo_	host/commands/run_cvd/launch.cc	/^  SharedFD fifo_;$/;"	m	class:cuttlefish::KernelLogMonitor	typeref:typename:SharedFD	file:
+fifos_	host/commands/run_cvd/launch.cc	/^  std::vector<SharedFD> fifos_;$/;"	m	class:cuttlefish::BluetoothConnector	typeref:typename:std::vector<SharedFD>	file:
+fifos_	host/commands/run_cvd/launch.cc	/^  std::vector<SharedFD> fifos_;$/;"	m	class:cuttlefish::SecureEnvironment	typeref:typename:std::vector<SharedFD>	file:
+file	common/libs/utils/archive.h	/^  std::string file;$/;"	m	class:cuttlefish::Archive	typeref:typename:std::string
+file_path	host/commands/modem_simulator/sim_service.h	/^    std::string file_path;$/;"	m	struct:cuttlefish::SimService::SimFileSystem	typeref:typename:std::string
+file_path	host/libs/config/fetcher_config.h	/^  std::string file_path;$/;"	m	struct:cuttlefish::CvdFile	typeref:typename:std::string
+file_path	host/libs/image_aggregator/cdisk_spec.proto	/^  string file_path = 1;$/;"	f	message:ComponentDisk	typeref:typename:string
+file_write_callback	host/commands/fetcher/curl_wrapper.cc	/^size_t file_write_callback(char *ptr, size_t, size_t nmemb, void *userdata) {$/;"	f	namespace:cuttlefish::__anondfffca8d0111	typeref:typename:size_t
+file_writer_	host/frontend/webrtc/lib/local_recorder.cpp	/^  mkvmuxer::MkvWriter file_writer_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Impl	typeref:typename:mkvmuxer::MkvWriter	file:
+fileid	guest/hals/ril/reference-libril/ril.h	/^    int fileid;     \/* EF id *\/$/;"	m	struct:__anon0bfbaecf1d08	typeref:typename:int
+fileid	guest/hals/ril/reference-libril/ril.h	/^    int fileid;     \/* EF id *\/$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:int
+filename_	host/commands/start/flag_forwarder.cc	/^  std::string filename_;$/;"	m	class:DynamicFlag	typeref:typename:std::string	file:
+fillCaptureResult	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^void VsockCameraDeviceSession::fillCaptureResult($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:void
+fillCellIdentityFromDataRegStateResponseString	guest/hals/ril/reference-libril/ril_service.cpp	/^void fillCellIdentityFromDataRegStateResponseString(CellIdentity &cellIdentity,$/;"	f	typeref:typename:void
+fillCellIdentityFromDataRegStateResponseString_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^void fillCellIdentityFromDataRegStateResponseString_1_2(V1_2::CellIdentity &cellIdentity,$/;"	f	typeref:typename:void
+fillCellIdentityFromDataRegStateResponseString_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^void fillCellIdentityFromDataRegStateResponseString_1_5(V1_5::CellIdentity &cellIdentity,$/;"	f	typeref:typename:void
+fillCellIdentityFromVoiceRegStateResponseString	guest/hals/ril/reference-libril/ril_service.cpp	/^void fillCellIdentityFromVoiceRegStateResponseString(V1_5::CellIdentity &cellIdentity,$/;"	f	typeref:typename:void
+fillCellIdentityFromVoiceRegStateResponseString_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^void fillCellIdentityFromVoiceRegStateResponseString_1_2(V1_2::CellIdentity &cellIdentity,$/;"	f	typeref:typename:void
+fillCellIdentityResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^void fillCellIdentityResponse(CellIdentity &cellIdentity, RIL_CellIdentity_v16 &rilCellIdentity)/;"	f	typeref:typename:void
+fillCellIdentityResponse_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^void fillCellIdentityResponse_1_2(V1_2::CellIdentity &cellIdentity,$/;"	f	typeref:typename:void
+fillCellIdentityResponse_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^void fillCellIdentityResponse_1_5(V1_5::CellIdentity &cellIdentity,$/;"	f	typeref:typename:void
+finalResponse	guest/hals/ril/reference-ril/atchannel.h	/^    char *finalResponse;      \/* eg OK, ERROR *\/$/;"	m	struct:__anon512a2c1f0208	typeref:typename:char *
+findNextEOL	guest/hals/ril/reference-ril/atchannel.c	/^static char * findNextEOL(char *cur)$/;"	f	typeref:typename:char *	file:
+finish	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::finish(uint64_t operationHandle,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+finish	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^ScopedAStatus RemoteKeyMintOperation::finish($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintOperation	typeref:typename:ScopedAStatus
+firePending	guest/hals/ril/reference-libril/ril_event.cpp	/^static void firePending()$/;"	f	typeref:typename:void	file:
+first_lba	host/libs/config/mbr.h	/^  std::uint32_t first_lba;$/;"	m	struct:MbrPartitionEntry	typeref:typename:std::uint32_t
+first_lba	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t first_lba;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptPartitionEntry	typeref:typename:std::uint64_t	file:
+first_read_command_	host/commands/modem_simulator/channel_monitor.h	/^  bool first_read_command_;  \/\/ Only used when ClientType::REMOTE$/;"	m	class:cuttlefish::Client	typeref:typename:bool
+first_signal_strength_request_	host/commands/modem_simulator/network_service.h	/^  bool first_signal_strength_request_;  \/\/ For time update$/;"	m	class:cuttlefish::NetworkService	typeref:typename:bool
+first_usable_lba	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t first_usable_lba;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint64_t	file:
+flagXml	common/libs/utils/flag_parser_test.cpp	/^std::optional<std::map<std::string, std::string>> flagXml(const Flag& f) {$/;"	f	namespace:cuttlefish	typeref:typename:std::optional<std::map<std::string,std::string>>
+flag_	host/libs/config/config_flag.cpp	/^  Flag flag_;$/;"	m	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:Flag	file:
+flag_	host/libs/config/config_flag.cpp	/^  Flag flag_;$/;"	m	class:cuttlefish::__anon2e549bd00111::SystemImageDirFlagImpl	typeref:typename:Flag	file:
+flags	common/libs/utils/network.cpp	/^  __be16 flags;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:__be16	file:
+flags_	host/commands/start/flag_forwarder.h	/^  std::set<std::unique_ptr<SubprocessFlag>> flags_;$/;"	m	class:FlagForwarder	typeref:typename:std::set<std::unique_ptr<SubprocessFlag>>
+flags_	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  uint32_t flags_;$/;"	m	class:cuttlefish::WmediumdMessageSetControl	typeref:typename:uint32_t
+flush	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<Status> VsockCameraDeviceSession::flush() {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<Status>
+flushing_requests_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::atomic<bool> flushing_requests_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::atomic<bool>
+footer	host/libs/image_aggregator/image_aggregator.cc	/^  GptHeader footer;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptEnd	typeref:typename:GptHeader	file:
+footer_padding	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint8_t footer_padding[SECTOR_SIZE - sizeof(GptHeader)];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptEnd	typeref:typename:std::uint8_t[]	file:
+foreground_launcher_pipe_	host/commands/run_cvd/boot_state_machine.cc	/^  SharedFD foreground_launcher_pipe_;$/;"	m	class:cuttlefish::__anone7ed366f0111::ProcessLeader	typeref:typename:SharedFD	file:
+format	host/commands/kernel_log_monitor/kernel_log_server.cc	/^  EventFormat format;      \/\/ how the log message is formatted$/;"	m	struct:__anonfa7764770111::__anonfa7764770308	typeref:typename:EventFormat	file:
+format	host/libs/audio_connector/commands.h	/^  uint8_t format() const { return format_; }$/;"	f	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:uint8_t
+format	host/libs/audio_connector/shm_layout.h	/^  uint8_t format;$/;"	m	struct:cuttlefish::virtio_snd_pcm_set_params	typeref:typename:uint8_t
+format_	host/libs/audio_connector/commands.h	/^  const uint8_t format_;$/;"	m	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:const uint8_t
+formats	host/libs/audio_connector/shm_layout.h	/^  Le64 formats;  \/* 1 << VIRTIO_SND_PCM_FMT_XXX *\/$/;"	m	struct:cuttlefish::virtio_snd_pcm_info	typeref:typename:Le64
+formatted_message_buffer_	host/libs/confui/cbor.h	/^  std::vector<std::uint8_t> formatted_message_buffer_;$/;"	m	class:cuttlefish::confui::Cbor	typeref:typename:std::vector<std::uint8_t>
+forward	guest/commands/bt_vhci_forwarder/main.cpp	/^ssize_t forward(int from, int to, std::optional<unsigned char> filter_out,$/;"	f	typeref:typename:ssize_t
+forward	guest/commands/bt_vhci_forwarder/main.cpp	/^ssize_t forward(int from, int to, unsigned char* buf) {$/;"	f	typeref:typename:ssize_t
+forward	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async #forward(msg) {$/;"	m	class:PollingConnector
+forwardFromCCFCULine	guest/hals/ril/reference-ril/reference-ril.c	/^static int forwardFromCCFCULine(char *line, RIL_CallForwardInfo *p_forward) {$/;"	f	typeref:typename:int	file:
+fps_	guest/hals/camera/vsock_camera_metadata.h	/^  int32_t fps_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraMetadata	typeref:typename:int32_t
+fragment	host/libs/config/adb/test.cpp	/^  AdbConfigFragment& fragment;$/;"	m	struct:cuttlefish::TestData	typeref:typename:AdbConfigFragment &	file:
+frame_	guest/hals/camera/vsock_frame_provider.h	/^  std::vector<char> frame_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::vector<char>
+frame_buffer_	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^      frame_buffer_;$/;"	m	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:std::shared_ptr<::cuttlefish::webrtc_streaming::VideoFrameBuffer>	file:
+frame_mutex_	guest/hals/camera/vsock_frame_provider.h	/^  std::mutex frame_mutex_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::mutex
+frame_mutex_	host/frontend/webrtc/lib/camera_streamer.h	/^  std::mutex frame_mutex_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:std::mutex
+frame_number	guest/hals/camera/vsock_camera_device_session_3_4.h	/^    uint32_t frame_number;$/;"	m	struct:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::ReadVsockRequest	typeref:typename:uint32_t
+frame_provider_	guest/hals/camera/vsock_camera_device_3_4.h	/^  std::shared_ptr<cuttlefish::VsockFrameProvider> frame_provider_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:std::shared_ptr<cuttlefish::VsockFrameProvider>
+frame_provider_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::shared_ptr<cuttlefish::VsockFrameProvider> frame_provider_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::shared_ptr<cuttlefish::VsockFrameProvider>
+frames	host/frontend/webrtc/audio_handler.cpp	/^  int frames() const override { return frames_; }$/;"	f	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:int	file:
+frames_	host/frontend/webrtc/audio_handler.cpp	/^  int frames_;$/;"	m	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:int	file:
+frames_server_	host/commands/run_cvd/launch_streamer.cpp	/^  SharedFD frames_server_;$/;"	m	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:SharedFD	file:
+frames_socket_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::frames_socket_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+framesizeMatches	guest/hals/camera/vsock_frame_provider.cpp	/^bool VsockFrameProvider::framesizeMatches(uint32_t width, uint32_t height,$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:bool
+freeCardStatus	guest/hals/ril/reference-ril/reference-ril.c	/^static void freeCardStatus(RIL_CardStatus_v1_5 *p_card_status) {$/;"	f	typeref:typename:void	file:
+freeCarrierRestrictions	guest/hals/ril/reference-libril/ril_service.cpp	/^void freeCarrierRestrictions(RIL_CarrierRestrictions &request) {$/;"	f	typeref:typename:void
+freeSetDataProfileData	guest/hals/ril/reference-libril/ril_service.cpp	/^void freeSetDataProfileData(int numProfiles, T *dataProfiles, T **dataProfilePtrs,$/;"	f	typeref:typename:void
+fromCodeScheme	guest/hals/ril/reference-libril/ril.h	/^    int fromCodeScheme;$/;"	m	struct:__anon0bfbaecf4408	typeref:typename:int
+fromEmergencyDialer	guest/hals/ril/reference-libril/ril.h	/^    bool                         fromEmergencyDialer;$/;"	m	struct:__anon0bfbaecfb708	typeref:typename:bool
+fromServiceId	guest/hals/ril/reference-libril/ril.h	/^    int fromServiceId;$/;"	m	struct:__anon0bfbaecf4408	typeref:typename:int
+front	guest/hals/ril/reference-libril/rilSocketQueue.h	/^    T *front;$/;"	m	class:Ril_queue	typeref:typename:T *
+full	host/frontend/webrtc/audio_handler.cpp	/^bool AudioHandler::HoldingBuffer::full() const {$/;"	f	class:cuttlefish::AudioHandler::HoldingBuffer	typeref:typename:bool
+func	guest/hals/ril/reference-libril/ril_event.h	/^    ril_event_cb func;$/;"	m	struct:ril_event	typeref:typename:ril_event_cb
+futures	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #futures = {};$/;"	M	class:WebsocketConnector
+gCameraServer	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^VsockCameraServer gCameraServer;$/;"	v	namespace:android::hardware::camera::provider::V2_7::implementation::__anona6e38b1b0111	typeref:typename:VsockCameraServer
+gSimStatusResponse	host/commands/modem_simulator/sim_service.cpp	/^const std::map<SimService::SimStatus, std::string> gSimStatusResponse = {$/;"	v	namespace:cuttlefish	typeref:typename:const std::map<SimService::SimStatus,std::string>
+g_importer	guest/hals/camera/cached_stream_buffer.cpp	/^HandleImporter g_importer;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anon1055ca380111	typeref:typename:HandleImporter
+garbageCollect	guest/hals/health/storage/Storage.cpp	/^Storage::garbageCollect(int64_t \/*timeout_seconds*\/,$/;"	f	class:aidl::android::hardware::health::storage::Storage	typeref:typename:ndk::ScopedAStatus
+gatekeeper	common/libs/security/gatekeeper_channel.h	/^namespace gatekeeper {$/;"	n
+gatekeeper	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^namespace gatekeeper {$/;"	n	file:
+gatekeeper	guest/hals/gatekeeper/remote/remote_gatekeeper.h	/^namespace gatekeeper {$/;"	n
+gatekeeper	host/commands/secure_env/soft_gatekeeper.h	/^namespace gatekeeper {$/;"	n
+gatekeeper_	host/commands/secure_env/gatekeeper_responder.h	/^  gatekeeper::GateKeeper& gatekeeper_;$/;"	m	class:cuttlefish::GatekeeperResponder	typeref:typename:gatekeeper::GateKeeper &
+gatekeeper_	host/commands/secure_env/tpm_keymaster_enforcement.h	/^  TpmGatekeeper& gatekeeper_;$/;"	m	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:TpmGatekeeper &
+gatekeeper_channel_	guest/hals/gatekeeper/remote/remote_gatekeeper.h	/^    cuttlefish::GatekeeperChannel* gatekeeper_channel_;$/;"	m	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:cuttlefish::GatekeeperChannel *
+gateway	common/libs/device_config/device_config.proto	/^    string gateway = 2;$/;"	f	message:cuttlefish.DeviceConfig.RILConfig	typeref:typename:string
+gateway_ip	common/libs/utils/network.cpp	/^  std::uint8_t gateway_ip[4];$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t[4]	file:
+gateways	guest/hals/ril/reference-libril/ril.h	/^    char *          gateways;   \/* A space-delimited list of default gateway addresses,$/;"	m	struct:__anon0bfbaecf1308	typeref:typename:char *
+gateways	guest/hals/ril/reference-libril/ril.h	/^    char *          gateways;   \/* A space-delimited list of default gateway addresses,$/;"	m	struct:__anon0bfbaecf1408	typeref:typename:char *
+gateways	guest/hals/ril/reference-libril/ril.h	/^    char *          gateways;   \/* A space-delimited list of default gateway addresses,$/;"	m	struct:__anon0bfbaecf1508	typeref:typename:char *
+gateways	guest/hals/ril/reference-libril/ril.h	/^    char *          gateways;   \/* A space-delimited list of default gateway addresses,$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:char *
+gateways	host/commands/modem_simulator/data_service.h	/^    std::string gateways;$/;"	m	struct:cuttlefish::DataService::PDPContext	typeref:typename:std::string
+gce	tools/create_base_image.go	/^func gce(action OnFail, gceArg string, errorStr ...string) (string, error) {$/;"	f	package:main	typeref:typename:(string, error)
+gcloud_ssh	tools/upload_to_gce_and_run.py	/^def gcloud_ssh(args):$/;"	f
+gdb_port	host/libs/config/cuttlefish_config.cpp	/^int CuttlefishConfig::gdb_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:int
+generateCertificateRequest	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^ScopedAStatus RemoteRemotelyProvisionedComponent::generateCertificateRequest($/;"	f	class:aidl::android::hardware::security::keymint::RemoteRemotelyProvisionedComponent	typeref:typename:ScopedAStatus
+generateEcdsaP256KeyPair	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^ScopedAStatus RemoteRemotelyProvisionedComponent::generateEcdsaP256KeyPair($/;"	f	class:aidl::android::hardware::security::keymint::RemoteRemotelyProvisionedComponent	typeref:typename:ScopedAStatus
+generateKey	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::generateKey(const hidl_vec<KeyParameter>& keyParams,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+generateKey	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::generateKey($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+generateTimeStamp	guest/hals/keymint/remote/remote_secure_clock.cpp	/^ScopedAStatus RemoteSecureClock::generateTimeStamp(int64_t challenge,$/;"	f	class:aidl::android::hardware::security::secureclock::RemoteSecureClock	typeref:typename:ScopedAStatus
+generateTombstoneOfLengthInKb	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    private void generateTombstoneOfLengthInKb(int requestedLengthInKb) throws DeviceNotAvailabl/;"	m	class:TombstoneTransmitTest	file:
+geran_bands	guest/hals/ril/reference-libril/ril.h	/^        RIL_GeranBands geran_bands[MAX_BANDS];$/;"	m	union:__anon0bfbaecfab08::__anon0bfbaecfac0a	typeref:typename:RIL_GeranBands[]
+geran_bands	guest/hals/ril/reference-libril/ril.h	/^        RIL_GeranBands geran_bands[MAX_BANDS];$/;"	m	union:__anon0bfbaecfae08::__anon0bfbaecfaf0a	typeref:typename:RIL_GeranBands[]
+get	common/libs/fs/shared_fd.h	/^  const void* get() const { return ptr_; }$/;"	f	class:cuttlefish::ScopedMMap	typeref:typename:const void *
+get	common/libs/fs/shared_fd.h	/^  void* get() { return ptr_; }$/;"	f	class:cuttlefish::ScopedMMap	typeref:typename:void *
+get	guest/hals/camera/stream_buffer_cache.cpp	/^std::shared_ptr<CachedStreamBuffer> StreamBufferCache::get(uint64_t buffer_id) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::StreamBufferCache	typeref:typename:std::shared_ptr<CachedStreamBuffer>
+get	host/commands/secure_env/tpm_resource_manager.cpp	/^ESYS_TR TpmResourceManager::ObjectSlot::get() {$/;"	f	class:cuttlefish::TpmResourceManager::ObjectSlot	typeref:typename:ESYS_TR
+get	host/libs/audio_connector/buffers.h	/^  const volatile uint8_t* get() const { return buffer_; }$/;"	f	class:cuttlefish::TxBuffer	typeref:typename:const volatile uint8_t *
+get	host/libs/audio_connector/buffers.h	/^  volatile uint8_t* get() const { return buffer_; }$/;"	f	class:cuttlefish::RxBuffer	typeref:typename:volatile uint8_t *
+getAidlPackage	tests/hal/hal_implementation_test.cpp	/^std::string getAidlPackage(const std::string& aidlType) {$/;"	f	typeref:typename:std::string
+getAllowedCarriers	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getAllowedCarriers(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getAllowedCarriersResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getAllowedCarriersResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getAllowedCarriers_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getAllowedCarriers_1_4(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getAllowedNetworkTypesBitmap	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getAllowedNetworkTypesBitmap(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getAllowedNetworkTypesBitmapResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getAllowedNetworkTypesBitmapResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getAvailableBandModes	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getAvailableBandModes(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getAvailableBandModesResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getAvailableBandModesResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getAvailableNetworks	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getAvailableNetworks(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getAvailableNetworksResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getAvailableNetworksResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getBarringInfo	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getBarringInfo(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getBarringInfoResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getBarringInfoResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getBasebandVersion	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getBasebandVersion(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getBasebandVersionResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getBasebandVersionResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getBitmapFromPreferred	guest/hals/ril/reference-ril/reference-ril.c	/^unsigned getBitmapFromPreferred(int value) {$/;"	f	typeref:typename:unsigned
+getBlobSize	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^unsigned int VsockCameraDeviceSession::getBlobSize($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:unsigned int
+getByte	host/libs/confui/cbor.h	/^  inline uint8_t getByte(const uint64_t& v, const uint8_t index) {$/;"	f	class:cuttlefish::confui::Cbor	typeref:typename:uint8_t
+getCDMASubscription	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCDMASubscription(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCDMASubscriptionResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getCDMASubscriptionResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getCallForwardStatus	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCallForwardStatus(int32_t serial, const CallForwardInfo& callInfo/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCallForwardStatusResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getCallForwardStatusResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getCallWaiting	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCallWaiting(int32_t serial, int32_t serviceClass) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCallWaitingResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getCallWaitingResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getCameraCharacteristics	guest/hals/camera/vsock_camera_device_3_4.cpp	/^Return<void> VsockCameraDevice::getCameraCharacteristics($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:Return<void>
+getCameraDeviceInterface_V1_x	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::getCameraDeviceInterface_V1_x($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+getCameraDeviceInterface_V3_x	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::getCameraDeviceInterface_V3_x($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+getCameraIdList	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::getCameraIdList($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+getCapacity	guest/hals/health/health.cpp	/^Return<void> HealthImpl::getCapacity(getCapacity_cb _hidl_cb) {$/;"	f	class:android::hardware::health::V2_1::implementation::HealthImpl	typeref:typename:Return<void>
+getCaptureRequestMetadataQueue	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::getCaptureRequestMetadataQueue($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+getCaptureResultMetadataQueue	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::getCaptureResultMetadataQueue($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+getCardStatus	guest/hals/ril/reference-ril/reference-ril.c	/^static int getCardStatus(RIL_CardStatus_v1_5 **pp_card_status) {$/;"	f	typeref:typename:int	file:
+getCdmaBroadcastConfig	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCdmaBroadcastConfig(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCdmaBroadcastConfigResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getCdmaBroadcastConfigResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getCdmaRoamingPreference	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCdmaRoamingPreference(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCdmaRoamingPreferenceResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getCdmaRoamingPreferenceResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getCdmaSubscriptionSource	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCdmaSubscriptionSource(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCdmaSubscriptionSourceResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getCdmaSubscriptionSourceResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getCellInfoList	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCellInfoList(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCellInfoListResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getCellInfoListResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getCellInfoList_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCellInfoList_1_6(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCellInfoTypeRadioTechnology	guest/hals/ril/reference-libril/ril_service.cpp	/^RIL_CellInfoType getCellInfoTypeRadioTechnology(char *rat) {$/;"	f	typeref:typename:RIL_CellInfoType
+getChargeCounter	guest/hals/health/health.cpp	/^Return<void> HealthImpl::getChargeCounter(getChargeCounter_cb _hidl_cb) {$/;"	f	class:android::hardware::health::V2_1::implementation::HealthImpl	typeref:typename:Return<void>
+getChargeStatus	guest/hals/health/health.cpp	/^Return<void> HealthImpl::getChargeStatus(getChargeStatus_cb _hidl_cb) {$/;"	f	class:android::hardware::health::V2_1::implementation::HealthImpl	typeref:typename:Return<void>
+getClip	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getClip(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getClipResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getClipResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getClir	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getClir(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getClirResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getClirResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getConcurrentStreamingCameraIds	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::getConcurrentStreamingCameraIds($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+getConfig	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async #getConfig() {$/;"	m	class:PollingConnector
+getConfigSlotStatus	guest/hals/ril/reference-ril/reference-ril.c	/^void getConfigSlotStatus(RIL_SimSlotStatus_V1_2 *pSimSlotStatus) {$/;"	f	typeref:typename:void
+getConnected	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    public GceFuture<Boolean> getConnected() {$/;"	m	class:ConnectivityChecker
+getCurrentCalls	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCurrentCalls(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCurrentCallsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getCurrentCallsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getCurrentCalls_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getCurrentCalls_1_6(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getCurrentNow	guest/hals/health/health.cpp	/^Return<void> HealthImpl::getCurrentNow(getCurrentNow_cb _hidl_cb) {$/;"	f	class:android::hardware::health::V2_1::implementation::HealthImpl	typeref:typename:Return<void>
+getCustomDeviceStateButtonCb	host/frontend/webrtc_operator/assets/js/app.js	/^  #getCustomDeviceStateButtonCb(device_states) {$/;"	m	class:DeviceControlApp
+getDataCallList	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getDataCallList(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getDataCallListResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getDataCallListResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getDataCallList_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getDataCallList_1_6(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getDataRegistrationState	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getDataRegistrationState(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getDataRegistrationStateResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getDataRegistrationStateResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getDataRegistrationState_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getDataRegistrationState_1_5(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getDataRegistrationState_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getDataRegistrationState_1_6(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getDeviceIdentity	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getDeviceIdentity(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getDeviceIdentityResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getDeviceIdentityResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getEnabled	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java	/^    public GceFuture<Boolean> getEnabled() {$/;"	m	class:BluetoothChecker
+getFacilityLockForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getFacilityLockForApp(int32_t serial, const hidl_string& facility,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getFacilityLockForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getFacilityLockForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getGsmBroadcastConfig	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getGsmBroadcastConfig(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getGsmBroadcastConfigResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getGsmBroadcastConfigResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getHalDeviceCapabilities	guest/hals/ril/reference-libril/ril_config.cpp	/^Return<void> RadioConfigImpl::getHalDeviceCapabilities(int32_t serial) {$/;"	f	class:RadioConfigImpl	typeref:typename:Return<void>
+getHalDeviceCapabilitiesResponse	guest/hals/ril/reference-libril/ril_config.cpp	/^int radio_1_6::getHalDeviceCapabilitiesResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+getHardwareConfig	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getHardwareConfig(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getHardwareConfigResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getHardwareConfigResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getHardwareInfo	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::getHardwareInfo(getHardwareInfo_cb _hidl_cb) {$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+getHardwareInfo	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::getHardwareInfo(KeyMintHardwareInfo* info) {$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+getHardwareInfo	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^ScopedAStatus RemoteRemotelyProvisionedComponent::getHardwareInfo($/;"	f	class:aidl::android::hardware::security::keymint::RemoteRemotelyProvisionedComponent	typeref:typename:ScopedAStatus
+getHasDied	guest/hals/bt/remote/remote_bluetooth.cpp	/^  bool getHasDied() const { return has_died_; }$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothDeathRecipient	typeref:typename:bool	file:
+getHmacSharingParameters	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::getHmacSharingParameters($/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+getIMSIForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getIMSIForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getIccCardStatus	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getIccCardStatus(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getIccCardStatusResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getIccCardStatusResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getIccId	guest/hals/ril/reference-ril/reference-ril.c	/^static void getIccId(char *iccid, int size) {$/;"	f	typeref:typename:void	file:
+getImsRegistrationState	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getImsRegistrationState(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getImsRegistrationStateResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getImsRegistrationStateResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getImsiForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getImsiForApp(int32_t serial, const hidl_string& aid) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getKeyCharacteristics	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::getKeyCharacteristics(const hidl_vec<uint8_t>& keyBlob,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+getKeyCharacteristics	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::getKeyCharacteristics($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+getLastCallFailCause	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getLastCallFailCause(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getLastCallFailCauseResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getLastCallFailCauseResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getMessageList	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    public List<String> getMessageList() {$/;"	m	class:EventReporter
+getModemActivityInfo	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getModemActivityInfo(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getModemActivityInfoResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getModemActivityInfoResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getModemStackStatus	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getModemStackStatus(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getModemStackStatusResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getModemStackStatusResponse(int slotId, int responseType, int serial, RIL_Errno e/;"	f	class:radio_1_6	typeref:typename:int
+getModemTechFromPrefer	host/commands/modem_simulator/network_service.cpp	/^int NetworkService::getModemTechFromPrefer(int preferred_mask) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:int
+getModemsConfig	guest/hals/ril/reference-libril/ril_config.cpp	/^Return<void> RadioConfigImpl::getModemsConfig(int32_t serial) {$/;"	f	class:RadioConfigImpl	typeref:typename:Return<void>
+getModemsConfigResponse	guest/hals/ril/reference-libril/ril_config.cpp	/^int radio_1_6::getModemsConfigResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+getMute	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getMute(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getMuteResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getMuteResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getName	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    public String getName() {$/;"	m	class:GceFuture
+getNeighboringCids	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getNeighboringCids(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getNeighboringCidsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getNeighboringCidsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getNetworkSelectionMode	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getNetworkSelectionMode(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getNetworkSelectionModeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getNetworkSelectionModeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getNetworkTypeFromTech	host/commands/modem_simulator/network_service.cpp	/^NetworkService::getNetworkTypeFromTech(ModemTechnology modemTech) {$/;"	f	class:cuttlefish::NetworkService	typeref:typename:NetworkService::NetworkRegistrationStatus::AccessTechnoloy
+getNow	guest/hals/ril/reference-libril/ril_event.cpp	/^static void getNow(struct timeval * tv)$/;"	f	typeref:typename:void	file:
+getOperator	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getOperator(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getOperatorResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getOperatorResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getPDP	guest/hals/ril/reference-ril/reference-ril.c	/^static int getPDP() {$/;"	f	typeref:typename:int	file:
+getPhoneCapability	guest/hals/ril/reference-libril/ril_config.cpp	/^Return<void> RadioConfigImpl::getPhoneCapability(int32_t serial) {$/;"	f	class:RadioConfigImpl	typeref:typename:Return<void>
+getPhoneCapabilityResponse	guest/hals/ril/reference-libril/ril_config.cpp	/^int radio_1_6::getPhoneCapabilityResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+getPreferredFps	guest/hals/camera/vsock_camera_metadata.h	/^  int32_t getPreferredFps() const { return fps_; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraMetadata	typeref:typename:int32_t
+getPreferredFromBitmap	guest/hals/ril/reference-ril/reference-ril.c	/^int getPreferredFromBitmap(int value, int *index) {$/;"	f	typeref:typename:int
+getPreferredHeight	guest/hals/camera/vsock_camera_metadata.h	/^  int32_t getPreferredHeight() const { return height_; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraMetadata	typeref:typename:int32_t
+getPreferredNetworkType	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getPreferredNetworkType(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getPreferredNetworkTypeBitmap	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getPreferredNetworkTypeBitmap(int32_t serial ) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getPreferredNetworkTypeBitmapResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getPreferredNetworkTypeBitmapResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getPreferredNetworkTypeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getPreferredNetworkTypeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getPreferredVoicePrivacy	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getPreferredVoicePrivacy(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getPreferredVoicePrivacyResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getPreferredVoicePrivacyResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getPreferredWidth	guest/hals/camera/vsock_camera_metadata.h	/^  int32_t getPreferredWidth() const { return width_; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraMetadata	typeref:typename:int32_t
+getProtocolString	guest/hals/ril/reference-libril/ril_service.cpp	/^const char * getProtocolString(const ::android::hardware::radio::V1_4::PdpProtocolType protocolV/;"	f	typeref:typename:const char *
+getRUIMStatus	guest/hals/ril/reference-ril/reference-ril.c	/^getRUIMStatus()$/;"	f	typeref:typename:SIM_Status	file:
+getRadioCapability	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getRadioCapability(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getRadioCapabilityResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getRadioCapabilityResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getRadioInterfaceName	guest/hals/ril/reference-ril/reference-ril.c	/^static const char* getRadioInterfaceName()$/;"	f	typeref:typename:const char *	file:
+getRadioServiceRwlock	guest/hals/ril/reference-libril/ril_service.cpp	/^pthread_rwlock_t * radio_1_6::getRadioServiceRwlock(int slotId) {$/;"	f	class:radio_1_6	typeref:typename:pthread_rwlock_t *
+getRequestFromQueue	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^bool VsockCameraDeviceSession::getRequestFromQueue(ReadVsockRequest& req,$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:bool
+getRequestSettingsFmq	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^bool VsockCameraDeviceSession::getRequestSettingsFmq($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:bool
+getResourceCost	guest/hals/camera/vsock_camera_device_3_4.cpp	/^Return<void> VsockCameraDevice::getResourceCost($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:Return<void>
+getRotation	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private int getRotation() {$/;"	m	class:GceService	file:
+getSIMStatus	guest/hals/ril/reference-ril/reference-ril.c	/^getSIMStatus()$/;"	f	typeref:typename:SIM_Status	file:
+getSapImpl	guest/hals/ril/reference-libril/sap_service.cpp	/^sp<SapImpl> getSapImpl(RilSapSocket *sapSocket) {$/;"	f	typeref:typename:sp<SapImpl>
+getScreenBounds	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private Point getScreenBounds() {$/;"	m	class:GceService	file:
+getSecurityLevel	guest/hals/keymint/remote/service.cpp	/^SecurityLevel getSecurityLevel(::keymaster::RemoteKeymaster& remote_keymaster) {$/;"	f	namespace:__anon5714be600111	typeref:typename:SecurityLevel
+getSensorHandle	guest/commands/sensor_injection/main.cpp	/^int getSensorHandle(SensorType type, const sp<ISensors> sensors) {$/;"	f	typeref:typename:int
+getSharedSecretParameters	guest/hals/keymint/remote/remote_shared_secret.cpp	/^ScopedAStatus RemoteSharedSecret::getSharedSecretParameters($/;"	f	class:aidl::android::hardware::security::sharedsecret::RemoteSharedSecret	typeref:typename:ScopedAStatus
+getSignalStrength	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getSignalStrength(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getSignalStrengthResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getSignalStrengthResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getSignalStrength_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getSignalStrength_1_4(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getSignalStrength_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getSignalStrength_1_6(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getSimPhonebookCapacity	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getSimPhonebookCapacity(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getSimPhonebookCapacityResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getSimPhonebookCapacityResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+getSimPhonebookRecords	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getSimPhonebookRecords(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getSimPhonebookRecordsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getSimPhonebookRecordsResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+getSimSlotsStatus	guest/hals/ril/reference-libril/ril_config.cpp	/^Return<void> RadioConfigImpl::getSimSlotsStatus(int32_t serial) {$/;"	f	class:RadioConfigImpl	typeref:typename:Return<void>
+getSimSlotsStatusResponse	guest/hals/ril/reference-libril/ril_config.cpp	/^int radio_1_6::getSimSlotsStatusResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+getSimlockRemainTimes	guest/hals/ril/reference-ril/reference-ril.c	/^static int getSimlockRemainTimes(const char* type) {$/;"	f	typeref:typename:int	file:
+getSlicingConfig	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getSlicingConfig(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getSlicingConfigResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getSlicingConfigResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+getSmscAddress	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getSmscAddress(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getSmscAddressResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getSmscAddressResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getSocketById	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^RilSapSocket *RilSapSocket::getSocketById(RIL_SOCKET_ID socketId) {$/;"	f	class:RilSapSocket	typeref:typename:RilSapSocket *
+getSocketId	guest/hals/ril/reference-libril/RilSocket.h	/^        RIL_SOCKET_ID getSocketId(void) {$/;"	f	class:RilSocket	typeref:typename:RIL_SOCKET_ID
+getStream	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  getStream(stream_id) {$/;"	m	class:DeviceConnection
+getSystemSelectionChannels	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getSystemSelectionChannels(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getSystemSelectionChannelsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getSystemSelectionChannelsResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+getTTYMode	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getTTYMode(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getTTYModeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getTTYModeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getTechFromNetworkType	host/commands/modem_simulator/network_service.cpp	/^NetworkService::ModemTechnology NetworkService::getTechFromNetworkType($/;"	f	class:cuttlefish::NetworkService	typeref:typename:NetworkService::ModemTechnology
+getTimeNanosFromLine	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::string getTimeNanosFromLine(const std::string& line) {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:std::string	file:
+getTimestampString	host/frontend/webrtc_operator/assets/js/app.js	/^  #getTimestampString() {$/;"	m	class:DeviceControlApp
+getTombstonesViaAdb	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    private List<File> getTombstonesViaAdb() throws DeviceNotAvailableException {$/;"	m	class:TombstoneTransmitTest	file:
+getTransformRotation	host/frontend/webrtc_operator/assets/js/app.js	/^  #getTransformRotation(element) {$/;"	m	class:DeviceControlApp
+getU32LE	host/frontend/webrtc_operator/assets/js/adb.js	/^function getU32LE(array, offset) {$/;"	f
+getVendorTags	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::getVendorTags($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+getVersion	guest/hals/ril/reference-libril/ril.h	/^    RIL_GetVersion getVersion;$/;"	m	struct:__anon0bfbaecfbf08	typeref:typename:RIL_GetVersion
+getVersion	guest/hals/ril/reference-ril/reference-ril.c	/^static const char * getVersion(void)$/;"	f	typeref:typename:const char *	file:
+getVoiceRadioTechnology	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getVoiceRadioTechnology(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getVoiceRadioTechnologyResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getVoiceRadioTechnologyResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getVoiceRegistrationState	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getVoiceRegistrationState(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getVoiceRegistrationStateResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::getVoiceRegistrationStateResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+getVoiceRegistrationState_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getVoiceRegistrationState_1_5(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getVoiceRegistrationState_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::getVoiceRegistrationState_1_6(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+getWifiReady	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^        public GceFuture<Boolean> getWifiReady() {$/;"	m	class:GceWifiManager.MonitorWifiJob
+getWifiReady	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    public GceFuture<Boolean> getWifiReady() {$/;"	m	class:GceWifiManager
+getZeroPaddedString	host/frontend/webrtc_operator/assets/js/app.js	/^  #getZeroPaddedString(value, desiredLength) {$/;"	m	class:DeviceControlApp
+get_current_time_ms	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^uint64_t TpmKeymasterEnforcement::get_current_time_ms() const {$/;"	f	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:uint64_t
+get_cvd_files	host/libs/config/fetcher_config.cpp	/^std::map<std::string, CvdFile> FetcherConfig::get_cvd_files() const {$/;"	f	class:cuttlefish::FetcherConfig	typeref:typename:std::map<std::string,CvdFile>
+get_next_tombstone_path_blocking	guest/monitoring/tombstone_transmit/tombstone_transmit.cpp	/^static std::string get_next_tombstone_path_blocking(int fd) {$/;"	f	typeref:typename:std::string	file:
+get_wall_clock_time_ms	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^uint64_t get_wall_clock_time_ms() {$/;"	f	namespace:cuttlefish::__anon0281e17c0211	typeref:typename:uint64_t
+getter_	common/libs/utils/flag_parser.h	/^  std::optional<std::function<std::string()>> getter_;$/;"	m	class:cuttlefish::Flag	typeref:typename:std::optional<std::function<std::string ()>>
+gles2_extensions	host/libs/graphics_detector/graphics_detector.h	/^  std::string gles2_extensions;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+gles2_renderer	host/libs/graphics_detector/graphics_detector.h	/^  std::string gles2_renderer;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+gles2_vendor	host/libs/graphics_detector/graphics_detector.h	/^  std::string gles2_vendor;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+gles2_version	host/libs/graphics_detector/graphics_detector.h	/^  std::string gles2_version;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:std::string
+global_id_	host/libs/allocd/resource.h	/^  uint32_t global_id_{};$/;"	m	class:cuttlefish::StaticResource	typeref:typename:uint32_t
+global_instance	host/commands/secure_env/in_process_tpm.cpp	/^  static Impl* global_instance;$/;"	m	class:cuttlefish::InProcessTpm::Impl	typeref:typename:Impl *	file:
+global_instance	host/commands/secure_env/in_process_tpm.cpp	/^InProcessTpm::Impl* InProcessTpm::Impl::global_instance;$/;"	m	class:cuttlefish::InProcessTpm::Impl	typeref:typename:InProcessTpm::Impl *
+global_mutex	host/commands/secure_env/in_process_tpm.cpp	/^  static std::mutex global_mutex;$/;"	m	class:cuttlefish::InProcessTpm::Impl	typeref:typename:std::mutex	file:
+global_mutex	host/commands/secure_env/in_process_tpm.cpp	/^std::mutex InProcessTpm::Impl::global_mutex;$/;"	m	class:cuttlefish::InProcessTpm::Impl	typeref:typename:std::mutex
+global_resource_id_	host/libs/allocd/resource_manager.h	/^  std::atomic_uint32_t global_resource_id_ = 0;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:std::atomic_uint32_t
+gnss_file_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::gnss_file_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+gnss_grpc_proxy	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto	/^package gnss_grpc_proxy;$/;"	p
+gnss_grpc_proxy_in_wr_	host/commands/run_cvd/launch.cc	/^  SharedFD gnss_grpc_proxy_in_wr_;$/;"	m	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:SharedFD	file:
+gnss_grpc_proxy_out_rd_	host/commands/run_cvd/launch.cc	/^  SharedFD gnss_grpc_proxy_out_rd_;$/;"	m	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:SharedFD	file:
+gnss_grpc_proxy_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::gnss_grpc_proxy_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+gnss_in_	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    cuttlefish::SharedFD gnss_in_;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:cuttlefish::SharedFD	file:
+gnss_in_pipe_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::gnss_in_pipe_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+gnss_out_	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    cuttlefish::SharedFD gnss_out_;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:cuttlefish::SharedFD	file:
+gnss_out_pipe_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::gnss_out_pipe_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+gnss_pipe_prefix	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::gnss_pipe_prefix() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+gpu_capture_binary	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::gpu_capture_binary() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+gpu_mode	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::gpu_mode() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+grabPartialWakeLock	guest/hals/ril/reference-libril/ril.cpp	/^grabPartialWakeLock() {$/;"	f	namespace:android	typeref:typename:void	file:
+grp	common/libs/utils/users.cpp	/^  struct group grp{};$/;"	s	function:cuttlefish::__anonced26a190111::GroupIdFromName	file:
+grp_p	common/libs/utils/users.cpp	/^  struct group* grp_p{};$/;"	s	function:cuttlefish::__anonced26a190111::GroupIdFromName	file:
+grpc	host/commands/gnss_grpc_proxy/grpcpp.h	/^namespace grpc {$/;"	n
+gsm	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoGsm     gsm;$/;"	m	union:__anon0bfbaecf6e08::__anon0bfbaecf6f0a	typeref:typename:RIL_CellInfoGsm
+gsm	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoGsm_v12     gsm;$/;"	m	union:__anon0bfbaecf7008::__anon0bfbaecf710a	typeref:typename:RIL_CellInfoGsm_v12
+gsm	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoGsm_v12     gsm;$/;"	m	union:__anon0bfbaecf7208::__anon0bfbaecf730a	typeref:typename:RIL_CellInfoGsm_v12
+gsmMessage	guest/hals/ril/reference-libril/ril.h	/^        char**                gsmMessage;   \/* This is an array of pointers where pointers$/;"	m	union:__anon0bfbaecf1808::__anon0bfbaecf190a	typeref:typename:char **
+gsm_ber	host/commands/modem_simulator/network_service.h	/^    int gsm_ber;   \/* bit error rate (0-7, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+gsm_rssi	host/commands/modem_simulator/network_service.h	/^    int gsm_rssi;  \/* Valid values are (0-31, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+gsm_umts_subscription_app_index	guest/hals/ril/reference-libril/ril.h	/^  int           gsm_umts_subscription_app_index; \/* value < RIL_CARD_MAX_APPS, -1 if none *\/$/;"	m	struct:__anon0bfbaecf3908	typeref:typename:int
+gsm_umts_subscription_app_index	guest/hals/ril/reference-libril/ril.h	/^  int           gsm_umts_subscription_app_index; \/* value < RIL_CARD_MAX_APPS, -1 if none *\/$/;"	m	struct:__anon0bfbaecf3a08	typeref:typename:int
+guest_audit_security	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::guest_audit_security() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+guest_enforce_security	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::guest_enforce_security() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+guest_hal_socket_	host/libs/confui/host_server.h	/^  SharedFD guest_hal_socket_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:SharedFD
+h	host/libs/confui/host_renderer.h	/^    std::uint32_t x, y, w, h;  \/\/ (x, y) is the top left$/;"	m	struct:cuttlefish::confui::ConfUiRenderer::Boundary	typeref:typename:std::uint32_t
+h	host/libs/wayland/wayland_surface.h	/^    int32_t h;$/;"	m	struct:wayland::Surface::Region	typeref:typename:int32_t
+h4_	guest/hals/bt/remote/remote_bluetooth.h	/^  test_vendor_lib::H4Packetizer h4_{fd_,$/;"	m	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:test_vendor_lib::H4Packetizer
+h_	host/libs/confui/host_renderer.h	/^  int h_;$/;"	m	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:int
+hal_cli_socket_	host/libs/confui/host_server.h	/^  SharedFD hal_cli_socket_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:SharedFD
+hal_cmd_q_id_	host/libs/confui/host_server.h	/^  int hal_cmd_q_id_;         \/\/ Q id in input_multiplexer_$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:int
+hal_input_fetcher_thread_	host/libs/confui/host_server.h	/^  std::thread hal_input_fetcher_thread_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:std::thread
+hal_vsock_port_	host/libs/confui/host_server.h	/^  int hal_vsock_port_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:int
+handle	guest/hals/camera/cached_stream_buffer.h	/^  native_handle_t* handle() const { return handle_; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::ReleaseFence	typeref:typename:native_handle_t *
+handleConnectionRequest	host/frontend/webrtc_operator/client_handler.cpp	/^void ClientWSHandler::handleConnectionRequest(const Json::Value& message) {$/;"	f	class:cuttlefish::ClientWSHandler	typeref:typename:void
+handleFinalResponse	guest/hals/ril/reference-ril/atchannel.c	/^static void handleFinalResponse(const char *line)$/;"	f	typeref:typename:void	file:
+handleForward	host/frontend/webrtc_operator/client_handler.cpp	/^void ClientWSHandler::handleForward(const Json::Value& message) {$/;"	f	class:cuttlefish::ClientWSHandler	typeref:typename:void
+handleMessage	host/frontend/webrtc/adb_handler.cpp	/^void AdbHandler::handleMessage(const uint8_t *msg, size_t len) {$/;"	f	class:cuttlefish::webrtc_streaming::AdbHandler	typeref:typename:void
+handleMessage	host/frontend/webrtc/bluetooth_handler.cpp	/^void BluetoothHandler::handleMessage(const uint8_t *msg, size_t len) {$/;"	f	class:cuttlefish::webrtc_streaming::BluetoothHandler	typeref:typename:void
+handleMessage	host/frontend/webrtc_operator/client_handler.cpp	/^void ClientWSHandler::handleMessage(const std::string& type,$/;"	f	class:cuttlefish::ClientWSHandler	typeref:typename:void
+handleMessage	host/frontend/webrtc_operator/device_handler.cpp	/^void DeviceHandler::handleMessage(const std::string& type,$/;"	f	class:cuttlefish::DeviceHandler	typeref:typename:void
+handleStkCallSetupRequestFromSim	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::handleStkCallSetupRequestFromSim(int32_t serial, bool accept) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+handleStkCallSetupRequestFromSimResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::handleStkCallSetupRequestFromSimResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+handleUnsolicited	guest/hals/ril/reference-ril/atchannel.c	/^static void handleUnsolicited(const char *line)$/;"	f	typeref:typename:void	file:
+handle_	guest/hals/camera/cached_stream_buffer.h	/^  native_handle_t* handle_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::ReleaseFence	typeref:typename:native_handle_t *
+handler_factories_	host/libs/websocket/websocket_server.h	/^      handler_factories_ = {};$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:std::unordered_map<std::string,std::unique_ptr<WebSocketHandlerFactory>>
+handlers_	host/frontend/webrtc_operator/client_handler.h	/^       handlers_;$/;"	m	class:cuttlefish::PollConnectionStore	typeref:typename:std::map<std::string,std::shared_ptr<PollConnectionHandler>>
+handlers_	host/libs/websocket/websocket_server.h	/^  std::unordered_map<struct lws*, std::shared_ptr<WebSocketHandler>> handlers_ =$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:std::unordered_map<struct lws *,std::shared_ptr<WebSocketHandler>>
+hangup	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::hangup(int32_t serial, int32_t gsmIndex) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+hangupConnectionResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::hangupConnectionResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+hangupForegroundResumeBackground	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::hangupForegroundResumeBackground(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+hangupForegroundResumeBackgroundResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::hangupForegroundResumeBackgroundResponse(int slotId, int responseType, int serial/;"	f	class:radio_1_6	typeref:typename:int
+hangupWaitingOrBackground	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::hangupWaitingOrBackground(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+hangupWaitingOrBackgroundResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::hangupWaitingOrBackgroundResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+hardware	guest/hals/bt/remote/remote_bluetooth.cpp	/^namespace hardware {$/;"	n	namespace:android	file:
+hardware	guest/hals/bt/remote/remote_bluetooth.h	/^namespace hardware {$/;"	n	namespace:android
+hardware	guest/hals/camera/cached_stream_buffer.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android	file:
+hardware	guest/hals/camera/cached_stream_buffer.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android
+hardware	guest/hals/camera/stream_buffer_cache.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android	file:
+hardware	guest/hals/camera/stream_buffer_cache.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android
+hardware	guest/hals/camera/vsock_camera_device_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android	file:
+hardware	guest/hals/camera/vsock_camera_device_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android
+hardware	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android	file:
+hardware	guest/hals/camera/vsock_camera_device_session_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android
+hardware	guest/hals/camera/vsock_camera_metadata.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android	file:
+hardware	guest/hals/camera/vsock_camera_metadata.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android
+hardware	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android	file:
+hardware	guest/hals/camera/vsock_camera_provider_2_7.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android
+hardware	guest/hals/camera/vsock_camera_server.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android	file:
+hardware	guest/hals/camera/vsock_camera_server.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android
+hardware	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^namespace hardware {$/;"	n	namespace:android	file:
+hardware	guest/hals/confirmationui/TrustyConfirmationUI.h	/^namespace hardware {$/;"	n	namespace:android
+hardware	guest/hals/confirmationui/guest_session.cpp	/^namespace hardware {$/;"	n	namespace:android	file:
+hardware	guest/hals/confirmationui/guest_session.h	/^namespace hardware {$/;"	n	namespace:android
+hardware	guest/hals/confirmationui/include/TrustyConfirmationuiHal.h	/^namespace hardware {$/;"	n	namespace:android
+hardware	guest/hals/health/health.cpp	/^namespace hardware {$/;"	n	namespace:android	file:
+hardware	guest/hals/health/storage/Storage.cpp	/^namespace aidl::android::hardware::health::storage {$/;"	n	namespace:aidl::android	file:
+hardware	guest/hals/health/storage/Storage.h	/^namespace aidl::android::hardware::health::storage {$/;"	n	namespace:aidl::android
+hardware	guest/hals/keymint/remote/remote_keymint_device.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android	file:
+hardware	guest/hals/keymint/remote/remote_keymint_device.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android
+hardware	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android	file:
+hardware	guest/hals/keymint/remote/remote_keymint_operation.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android
+hardware	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android	file:
+hardware	guest/hals/keymint/remote/remote_remotely_provisioned_component.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android
+hardware	guest/hals/keymint/remote/remote_secure_clock.cpp	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	namespace:aidl::android	file:
+hardware	guest/hals/keymint/remote/remote_secure_clock.h	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	namespace:aidl::android
+hardware	guest/hals/keymint/remote/remote_shared_secret.cpp	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	namespace:aidl::android	file:
+hardware	guest/hals/keymint/remote/remote_shared_secret.h	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	namespace:aidl::android
+hardwareConfigChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::hardwareConfigChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+hardware_	host/frontend/webrtc/lib/streamer.cpp	/^  std::map<std::string, std::string> hardware_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::map<std::string,std::string>	file:
+hasRegistration	tests/hal/hal_implementation_test.cpp	/^  bool hasRegistration;$/;"	m	struct:AidlPackageCheck	typeref:typename:bool	file:
+has_broute_ipv4	host/libs/allocd/alloc_utils.h	/^  bool has_broute_ipv4 = false;$/;"	m	struct:cuttlefish::EthernetNetworkConfig	typeref:typename:bool
+has_broute_ipv6	host/libs/allocd/alloc_utils.h	/^  bool has_broute_ipv6 = false;$/;"	m	struct:cuttlefish::EthernetNetworkConfig	typeref:typename:bool
+has_data	host/libs/confui/sign_utils.h	/^  struct has_data {$/;"	s	class:cuttlefish::confui::support::ByteBufferProxy
+has_died_	guest/hals/bt/remote/remote_bluetooth.cpp	/^  bool has_died_;$/;"	m	class:android::hardware::bluetooth::V1_1::remote::BluetoothDeathRecipient	typeref:typename:bool	file:
+has_discrete_gpu	host/libs/graphics_detector/graphics_detector.h	/^  bool has_discrete_gpu = false;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:bool
+has_dnsmasq	host/libs/allocd/alloc_utils.h	/^  bool has_dnsmasq = false;$/;"	m	struct:cuttlefish::GatewayConfig	typeref:typename:bool
+has_egl	host/libs/graphics_detector/graphics_detector.h	/^  bool has_egl = false;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:bool
+has_gateway	host/libs/allocd/alloc_utils.h	/^  bool has_gateway = false;$/;"	m	struct:cuttlefish::GatewayConfig	typeref:typename:bool
+has_gl	host/libs/graphics_detector/graphics_detector.h	/^  bool has_gl = false;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:bool
+has_gles1	host/libs/graphics_detector/graphics_detector.h	/^  bool has_gles1 = false;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:bool
+has_gles2	host/libs/graphics_detector/graphics_detector.h	/^  bool has_gles2 = false;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:bool
+has_iptable	host/libs/allocd/alloc_utils.h	/^  bool has_iptable = false;$/;"	m	struct:cuttlefish::GatewayConfig	typeref:typename:bool
+has_ipv4_	host/libs/allocd/resource.h	/^  bool has_ipv4_ = true;$/;"	m	class:cuttlefish::EthernetIface	typeref:typename:bool
+has_ipv6_	host/libs/allocd/resource.h	/^  bool has_ipv6_ = true;$/;"	m	class:cuttlefish::EthernetIface	typeref:typename:bool
+has_tap	host/libs/allocd/alloc_utils.h	/^  bool has_tap = false;$/;"	m	struct:cuttlefish::EthernetNetworkConfig	typeref:typename:bool
+has_vulkan	host/libs/graphics_detector/graphics_detector.h	/^  bool has_vulkan = false;$/;"	m	struct:cuttlefish::GraphicsAvailability	typeref:typename:bool
+have_saved_params_	host/commands/secure_env/tpm_keymaster_enforcement.h	/^  bool have_saved_params_ = false;$/;"	m	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:bool
+hda_fn_nid	host/libs/audio_connector/shm_layout.h	/^  Le32 hda_fn_nid;$/;"	m	struct:cuttlefish::virtio_snd_info	typeref:typename:Le32
+hda_reg_caps	host/libs/audio_connector/shm_layout.h	/^  Le32 hda_reg_caps;$/;"	m	struct:cuttlefish::virtio_snd_jack_info	typeref:typename:Le32
+hda_reg_defconf	host/libs/audio_connector/shm_layout.h	/^  Le32 hda_reg_defconf;$/;"	m	struct:cuttlefish::virtio_snd_jack_info	typeref:typename:Le32
+hdr	host/libs/audio_connector/shm_layout.h	/^  struct virtio_snd_hdr hdr;$/;"	m	struct:cuttlefish::virtio_snd_pcm_hdr	typeref:struct:virtio_snd_hdr
+hdr	host/libs/audio_connector/shm_layout.h	/^  struct virtio_snd_hdr hdr;$/;"	m	struct:cuttlefish::virtio_snd_query_info	typeref:struct:virtio_snd_hdr
+hdr	host/libs/audio_connector/shm_layout.h	/^  struct virtio_snd_info hdr;$/;"	m	struct:cuttlefish::virtio_snd_chmap_info	typeref:struct:virtio_snd_info
+hdr	host/libs/audio_connector/shm_layout.h	/^  struct virtio_snd_info hdr;$/;"	m	struct:cuttlefish::virtio_snd_jack_info	typeref:struct:virtio_snd_info
+hdr	host/libs/audio_connector/shm_layout.h	/^  struct virtio_snd_info hdr;$/;"	m	struct:cuttlefish::virtio_snd_pcm_info	typeref:struct:virtio_snd_info
+hdr	host/libs/audio_connector/shm_layout.h	/^  struct virtio_snd_pcm_hdr hdr;$/;"	m	struct:cuttlefish::virtio_snd_pcm_set_params	typeref:struct:virtio_snd_pcm_hdr
+head	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^static RilSapSocket::RilSapSocketList *head = NULL;$/;"	v	typeref:typename:RilSapSocket::RilSapSocketList *	file:
+header	common/libs/net/netlink_request_test.cpp	/^  nlmsghdr* header = static_cast<nlmsghdr*>(arg.RequestData());$/;"	v	namespace:cuttlefish::__anon1ff2f3d90111	typeref:typename:nlmsghdr *
+header	host/frontend/webrtc_operator/assets/client.html	/^        <div id='header'>$/;"	I
+header	host/libs/image_aggregator/image_aggregator.cc	/^  GptHeader header;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptBeginning	typeref:typename:GptHeader	file:
+header_	common/libs/net/netlink_request.h	/^  nlmsghdr* header_;$/;"	m	class:cuttlefish::NetlinkRequest	typeref:typename:nlmsghdr *
+header_	host/libs/audio_connector/buffers.h	/^  const virtio_snd_pcm_xfer header_;$/;"	m	class:cuttlefish::ShmBuffer	typeref:typename:const virtio_snd_pcm_xfer
+header_crc32	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint32_t header_crc32;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint32_t	file:
+header_padding	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint8_t header_padding[SECTOR_SIZE - sizeof(GptHeader)];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptBeginning	typeref:typename:std::uint8_t[]	file:
+header_size	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint32_t header_size;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint32_t	file:
+headers_	host/frontend/webrtc/lib/ws_connection.cpp	/^  const std::vector<std::pair<std::string, std::string>> headers_;$/;"	m	class:WsConnectionImpl	typeref:typename:const std::vector<std::pair<std::string,std::string>>	file:
+headers_	host/libs/websocket/websocket_server.h	/^  struct lws_protocol_vhost_options headers_;$/;"	m	class:cuttlefish::WebSocketServer	typeref:struct:lws_protocol_vhost_options
+health	guest/hals/health/health.cpp	/^namespace health {$/;"	n	namespace:android::hardware	file:
+health	guest/hals/health/storage/Storage.cpp	/^namespace aidl::android::hardware::health::storage {$/;"	n	namespace:aidl::android::hardware	file:
+health	guest/hals/health/storage/Storage.h	/^namespace aidl::android::hardware::health::storage {$/;"	n	namespace:aidl::android::hardware
+health	host/commands/health/health.cpp	/^int health() {$/;"	f	typeref:typename:int
+height	common/libs/device_config/device_config.proto	/^    int32 height = 2;$/;"	f	message:cuttlefish.DeviceConfig.DisplayConfig	typeref:typename:int32
+height	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^int CvdVideoFrameBuffer::height() const { return height_; }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:int
+height	host/frontend/webrtc/lib/streamer.cpp	/^  int height;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::DisplayDescriptor	typeref:typename:int	file:
+height	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  int height() const override { return frame_buffer_->height(); }$/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:int	file:
+height	host/libs/config/cuttlefish_config.h	/^    int height;$/;"	m	struct:cuttlefish::CuttlefishConfig::DisplayConfig	typeref:typename:int
+height_	guest/hals/camera/vsock_camera_metadata.h	/^  int32_t height_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraMetadata	typeref:typename:int32_t
+height_	host/frontend/webrtc/cvd_video_frame_buffer.h	/^  const int height_;$/;"	m	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:const int
+height_	host/frontend/webrtc/lib/video_track_source_impl.h	/^  int height_;$/;"	m	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:int
+help_	common/libs/utils/flag_parser.h	/^  std::optional<std::string> help_;$/;"	m	class:cuttlefish::Flag	typeref:typename:std::optional<std::string>
+help_	host/commands/start/flag_forwarder.cc	/^  std::string help_;$/;"	m	class:DynamicFlag	typeref:typename:std::string	file:
+helper_	host/libs/config/adb/launch.cpp	/^  const AdbHelper& helper_;$/;"	m	class:cuttlefish::__anon7ea6a0320111::AdbConnector	typeref:typename:const AdbHelper &	file:
+helper_	host/libs/config/adb/launch.cpp	/^  const AdbHelper& helper_;$/;"	m	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:const AdbHelper &	file:
+hexCharToInt	guest/hals/ril/reference-libril/ril_service.cpp	/^extern "C" uint8_t hexCharToInt(uint8_t c) {$/;"	f	typeref:typename:uint8_t
+hidl2MsgString	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^inline MsgString hidl2MsgString(const hidl_string& s) {$/;"	f	namespace:android::hardware::confirmationui::V1_0::implementation::__anon2184467c0111	typeref:typename:MsgString
+hidl2MsgVector	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^inline MsgVector<teeui::UIOption> hidl2MsgVector(const hidl_vec<UIOption>& v) {$/;"	f	namespace:android::hardware::confirmationui::V1_0::implementation::__anon2184467c0111	typeref:typename:MsgVector<teeui::UIOption>
+hidl2MsgVector	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^template <typename T> inline MsgVector<T> hidl2MsgVector(const hidl_vec<T>& v) {$/;"	f	namespace:android::hardware::confirmationui::V1_0::implementation::__anon2184467c0111	typeref:typename:MsgVector<T>
+hidl_vec2sized_buffer	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^SizedBuffer hidl_vec2sized_buffer(const hidl_vec<uint8_t>& vec) {$/;"	f	namespace:gatekeeper	typeref:typename:SizedBuffer
+hinge_angle_value	host/libs/config/custom_actions.h	/^  std::optional<int> hinge_angle_value;$/;"	m	struct:cuttlefish::DeviceState	typeref:typename:std::optional<int>
+hinge_angle_value	shared/config/config_foldable.json	/^                                        "hinge_angle_value": 0$/;"	n	object:custom_actions.0.device_states.0
+hinge_angle_value	shared/config/config_foldable.json	/^                                        "hinge_angle_value": 180$/;"	n	object:custom_actions.1.device_states.0
+hlen	common/libs/utils/network.cpp	/^  std::uint8_t hlen;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t	file:
+hmac256	host/libs/confui/sign.cc	/^std::optional<support::hmac_t> HMacImplementation::hmac256($/;"	f	class:cuttlefish::confui::HMacImplementation	typeref:typename:std::optional<support::hmac_t>
+hmac_t	host/libs/confui/sign_utils.h	/^using hmac_t = auth_token_key_t;$/;"	t	namespace:cuttlefish::confui::support	typeref:typename:auth_token_key_t
+hops	common/libs/utils/network.cpp	/^  std::uint8_t hops;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t	file:
+host_cmd_fetcher_thread_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    std::thread host_cmd_fetcher_thread_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:std::thread
+host_fd_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    cuttlefish::SharedFD host_fd_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:cuttlefish::SharedFD
+host_fd_	guest/hals/confirmationui/guest_session.h	/^    cuttlefish::SharedFD host_fd_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:cuttlefish::SharedFD
+host_fetcher	fetcher.mk	/^host_fetcher: $(fetcher_bin)$/;"	t
+host_id	host/commands/modem_simulator/cf_device_config.cpp	/^int DeviceConfig::host_id() {$/;"	f	class:cuttlefish::modem::DeviceConfig	typeref:typename:int
+host_mode_ctrl_	host/libs/confui/host_server.h	/^  HostModeCtrl& host_mode_ctrl_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:HostModeCtrl &
+host_mode_ctrl_	host/libs/confui/session.h	/^  HostModeCtrl& host_mode_ctrl_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:HostModeCtrl &
+host_mode_ctrl_	host/libs/screen_connector/screen_connector.h	/^  HostModeCtrl& host_mode_ctrl_;$/;"	m	class:cuttlefish::ScreenConnector	typeref:typename:HostModeCtrl &
+host_mode_ctrl_	host/libs/screen_connector/screen_connector_multiplexer.h	/^  HostModeCtrl& host_mode_ctrl_;$/;"	m	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:HostModeCtrl &
+host_socket_	host/commands/run_cvd/launch_streamer.cpp	/^  SharedFD host_socket_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:SharedFD	file:
+host_tools_version	host/libs/config/cuttlefish_config.cpp	/^std::map<std::string, uint32_t> CuttlefishConfig::host_tools_version() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::map<std::string,uint32_t>
+host_vsock_port_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    int host_vsock_port_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:int
+hostname	common/libs/utils/network.h	/^  std::string hostname;$/;"	m	struct:cuttlefish::DnsmasqDhcp4Lease	typeref:typename:std::string
+hosttar	host_package.mk	/^hosttar: $(cvd_host_packages)$/;"	t
+hton	host/libs/confui/sign_utils.h	/^  inline static IntType hton(const IntType& value) { return value; }$/;"	f	struct:cuttlefish::confui::support::choose_hton	typeref:typename:IntType
+hton	host/libs/confui/sign_utils.h	/^  inline static IntType hton(const IntType& value) {$/;"	f	struct:cuttlefish::confui::support::choose_hton	typeref:typename:IntType
+hton	host/libs/confui/sign_utils.h	/^inline IntType hton(const IntType& value) {$/;"	f	namespace:cuttlefish::confui::support	typeref:typename:IntType
+httpUrl	host/frontend/webrtc_operator/assets/js/server_connector.js	/^function httpUrl(path) {$/;"	f
+http_code	host/commands/fetcher/curl_wrapper.h	/^  long http_code;$/;"	m	struct:cuttlefish::CurlResponse	typeref:typename:long
+http_headers	host/frontend/webrtc/lib/streamer.h	/^    std::vector<std::pair<std::string, std::string>> http_headers;$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig::__anonbc3851b60108	typeref:typename:std::vector<std::pair<std::string,std::string>>
+htype	common/libs/utils/network.cpp	/^  std::uint8_t htype;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t	file:
+hvc_num_	host/libs/vm_manager/crosvm_builder.h	/^  int hvc_num_;$/;"	m	class:cuttlefish::CrosvmBuilder	typeref:typename:int
+hysteresisDb	guest/hals/ril/reference-libril/ril.h	/^    int32_t hysteresisDb;$/;"	m	struct:__anon0bfbaecf5608	typeref:typename:int32_t
+hysteresisDlKbps	guest/hals/ril/reference-libril/ril.h	/^    int32_t hysteresisDlKbps;$/;"	m	struct:__anon0bfbaecf5708	typeref:typename:int32_t
+hysteresisMs	guest/hals/ril/reference-libril/ril.h	/^    int32_t hysteresisMs;$/;"	m	struct:__anon0bfbaecf5608	typeref:typename:int32_t
+hysteresisMs	guest/hals/ril/reference-libril/ril.h	/^    int32_t hysteresisMs;$/;"	m	struct:__anon0bfbaecf5708	typeref:typename:int32_t
+hysteresisUlKbps	guest/hals/ril/reference-libril/ril.h	/^    int32_t hysteresisUlKbps;$/;"	m	struct:__anon0bfbaecf5708	typeref:typename:int32_t
+iHeight	host/libs/graphics_detector/include/EGL/eglext.h	/^    EGLint iHeight;$/;"	m	struct:EGLClientPixmapHI	typeref:typename:EGLint
+iStride	host/libs/graphics_detector/include/EGL/eglext.h	/^    EGLint iStride;$/;"	m	struct:EGLClientPixmapHI	typeref:typename:EGLint
+iWidth	host/libs/graphics_detector/include/EGL/eglext.h	/^    EGLint iWidth;$/;"	m	struct:EGLClientPixmapHI	typeref:typename:EGLint
+iccCloseLogicalChannel	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::iccCloseLogicalChannel(int32_t serial, int32_t channelId) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+iccCloseLogicalChannelResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::iccCloseLogicalChannelResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+iccIOForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::iccIOForApp(int32_t serial, const IccIo& iccIo) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+iccIOForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::iccIOForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+iccOpenLogicalChannel	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::iccOpenLogicalChannel(int32_t serial, const hidl_string& aid, int32_/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+iccOpenLogicalChannelResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::iccOpenLogicalChannelResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+iccTransmitApduBasicChannel	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::iccTransmitApduBasicChannel(int32_t serial, const SimApdu& message) /;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+iccTransmitApduBasicChannelResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::iccTransmitApduBasicChannelResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+iccTransmitApduLogicalChannel	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::iccTransmitApduLogicalChannel(int32_t serial, const SimApdu& message/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+iccTransmitApduLogicalChannelResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::iccTransmitApduLogicalChannelResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+iccid	guest/hals/ril/reference-libril/ril.h	/^    char *iccid;$/;"	m	struct:__anon0bfbaecf3b08	typeref:typename:char *
+iccid	guest/hals/ril/reference-libril/ril.h	/^    char* iccid;$/;"	m	struct:__anon0bfbaecfb908	typeref:typename:char *
+iceServers	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  let pc_config = {iceServers: []};$/;"	p	class:Connect.pc_config
+iceServers	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  let pc_config = {iceServers: []};$/;"	p	class:createPeerConnection.pc_config
+icon_name	host/example_custom_actions/custom_action_config.json	/^				"icon_name":"notifications_paused"$/;"	s	object:1.buttons.1
+icon_name	host/example_custom_actions/custom_action_config.json	/^				"icon_name":"settings"$/;"	s	object:1.buttons.0
+icon_name	host/example_custom_actions/custom_action_config.json	/^			"icon_name":"language"$/;"	s	object:0.button
+icon_name	host/frontend/webrtc/lib/streamer.cpp	/^  std::string icon_name;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::ControlPanelButtonDescriptor	typeref:typename:std::string	file:
+icon_name	host/libs/config/custom_actions.h	/^  std::string icon_name;$/;"	m	struct:cuttlefish::ControlPanelButton	typeref:typename:std::string
+icon_name	shared/config/config_foldable.json	/^                                "icon_name":"smartphone"$/;"	s	object:custom_actions.0.button
+icon_name	shared/config/config_foldable.json	/^                                "icon_name":"tablet"$/;"	s	object:custom_actions.1.button
+id	guest/hals/ril/reference-libril/RilSocket.h	/^        RIL_SOCKET_ID id;$/;"	m	class:RilSocket	typeref:typename:RIL_SOCKET_ID
+id	host/commands/fetcher/build_api.h	/^  std::string id;$/;"	m	struct:cuttlefish::DeviceBuild	typeref:typename:std::string
+id	host/commands/fetcher/build_api.h	/^  std::string id;$/;"	m	struct:cuttlefish::DirectoryBuild	typeref:typename:std::string
+id	host/frontend/webrtc/connection_observer.cpp	/^  int32_t id;$/;"	m	struct:cuttlefish::multitouch_slot	typeref:typename:int32_t	file:
+id2name_	host/libs/confui/host_utils.h	/^  std::map<std::thread::id, std::string> id2name_;$/;"	m	class:cuttlefish::confui::thread::ThreadTracer	typeref:typename:std::map<std::thread::id,std::string>
+id_	guest/hals/camera/vsock_camera_device_3_4.h	/^  std::string id_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:std::string
+id_	host/commands/modem_simulator/nvram_config.h	/^    std::string id_;$/;"	m	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:std::string
+id_	host/libs/config/cuttlefish_config.h	/^    std::string id_;$/;"	m	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+id_	host/libs/config/cuttlefish_config.h	/^    std::string id_;$/;"	m	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:std::string
+identity_	common/libs/fs/shared_fd.h	/^  std::string identity_;$/;"	m	class:cuttlefish::FileInstance	typeref:typename:std::string
+idle_mode_time_ms	guest/hals/ril/reference-libril/ril.h	/^  uint32_t idle_mode_time_ms;$/;"	m	struct:__anon0bfbaecf9f08	typeref:typename:uint32_t
+if_index_	common/libs/net/network_interface.h	/^  size_t if_index_ = 0;$/;"	m	class:cuttlefish::NetworkInterface	typeref:typename:size_t
+ifa_list	common/libs/device_config/host_device_config.cpp	/^    struct ifaddrs *ifa_list{}, *ifa{};$/;"	s	function:cuttlefish::__anonf277137d0111::NetConfig::ParseInterfaceAttributes	file:
+iface_id_	host/libs/allocd/resource.h	/^  uint16_t iface_id_;$/;"	m	class:cuttlefish::EthernetIface	typeref:typename:uint16_t
+iface_id_	host/libs/allocd/resource.h	/^  uint16_t iface_id_;$/;"	m	class:cuttlefish::MobileIface	typeref:typename:uint16_t
+ifname	guest/hals/ril/reference-libril/ril.h	/^    char *          ifname;     \/* The network interface name *\/$/;"	m	struct:__anon0bfbaecf1308	typeref:typename:char *
+ifname	guest/hals/ril/reference-libril/ril.h	/^    char *          ifname;     \/* The network interface name *\/$/;"	m	struct:__anon0bfbaecf1408	typeref:typename:char *
+ifname	guest/hals/ril/reference-libril/ril.h	/^    char *          ifname;     \/* The network interface name *\/$/;"	m	struct:__anon0bfbaecf1508	typeref:typename:char *
+ifname	guest/hals/ril/reference-libril/ril.h	/^    char *          ifname;     \/* The network interface name *\/$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:char *
+imageCapture	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  get imageCapture() {$/;"	G	class:DeviceConnection
+imageHeight	host/frontend/webrtc_operator/assets/js/app.js	/^        imageHeight: this.#deviceConnection.cameraHeight$/;"	p	class:DeviceControlApp.takePhoto.photoSettings
+imageWidth	host/frontend/webrtc_operator/assets/js/app.js	/^        imageWidth: this.#deviceConnection.cameraWidth,$/;"	p	class:DeviceControlApp.takePhoto.photoSettings
+image_file_path	host/libs/image_aggregator/image_aggregator.h	/^  std::string image_file_path;$/;"	m	struct:cuttlefish::ImagePartition	typeref:typename:std::string
+image_file_paths	host/libs/image_aggregator/image_aggregator.h	/^  std::vector<std::string> image_file_paths;$/;"	m	struct:cuttlefish::MultipleImagePartition	typeref:typename:std::vector<std::string>
+impl	common/libs/confui/packet.h	/^namespace impl {$/;"	n	namespace:cuttlefish::confui::packet
+impl_	guest/hals/keymaster/remote/remote_keymaster4_device.h	/^    std::unique_ptr<::keymaster::RemoteKeymaster> impl_;$/;"	m	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:std::unique_ptr<::keymaster::RemoteKeymaster>
+impl_	guest/hals/keymint/remote/remote_remotely_provisioned_component.h	/^  keymaster::RemoteKeymaster& impl_;$/;"	m	class:aidl::android::hardware::security::keymint::RemoteRemotelyProvisionedComponent	typeref:typename:keymaster::RemoteKeymaster &
+impl_	host/commands/secure_env/in_process_tpm.h	/^ std::unique_ptr<Impl> impl_;$/;"	m	class:cuttlefish::InProcessTpm	typeref:typename:std::unique_ptr<Impl>
+impl_	host/frontend/webrtc/lib/local_recorder.cpp	/^  LocalRecorder::Impl& impl_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:LocalRecorder::Impl &	file:
+impl_	host/frontend/webrtc/lib/local_recorder.h	/^  std::unique_ptr<Impl> impl_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder	typeref:typename:std::unique_ptr<Impl>
+impl_	host/frontend/webrtc/lib/streamer.h	/^  std::shared_ptr<Impl> impl_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer	typeref:typename:std::shared_ptr<Impl>
+implementation	guest/hals/camera/cached_stream_buffer.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4	file:
+implementation	guest/hals/camera/cached_stream_buffer.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4
+implementation	guest/hals/camera/stream_buffer_cache.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4	file:
+implementation	guest/hals/camera/stream_buffer_cache.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4
+implementation	guest/hals/camera/vsock_camera_device_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4	file:
+implementation	guest/hals/camera/vsock_camera_device_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4
+implementation	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4	file:
+implementation	guest/hals/camera/vsock_camera_device_session_3_4.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4
+implementation	guest/hals/camera/vsock_camera_metadata.cpp	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4	file:
+implementation	guest/hals/camera/vsock_camera_metadata.h	/^namespace android::hardware::camera::device::V3_4::implementation {$/;"	n	namespace:android::hardware::camera::device::V3_4
+implementation	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera::provider::V2_7	file:
+implementation	guest/hals/camera/vsock_camera_provider_2_7.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera::provider::V2_7
+implementation	guest/hals/camera/vsock_camera_server.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera::provider::V2_7	file:
+implementation	guest/hals/camera/vsock_camera_server.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera::provider::V2_7
+implementation	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^namespace implementation {$/;"	n	namespace:android::hardware::confirmationui::V1_0	file:
+implementation	guest/hals/confirmationui/TrustyConfirmationUI.h	/^namespace implementation {$/;"	n	namespace:android::hardware::confirmationui::V1_0
+implementation	guest/hals/confirmationui/guest_session.cpp	/^namespace implementation {$/;"	n	namespace:android::hardware::confirmationui::V1_0	file:
+implementation	guest/hals/confirmationui/guest_session.h	/^namespace implementation {$/;"	n	namespace:android::hardware::confirmationui::V1_0
+implementation	guest/hals/confirmationui/include/TrustyConfirmationuiHal.h	/^namespace implementation {$/;"	n	namespace:android::hardware::confirmationui::V1_0
+implementation	guest/hals/health/health.cpp	/^namespace implementation {$/;"	n	namespace:android::hardware::health::V2_1	file:
+importFence	guest/hals/camera/cached_stream_buffer.cpp	/^void CachedStreamBuffer::importFence(const native_handle_t* fence_handle) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:void
+importKey	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::importKey(const hidl_vec<KeyParameter>& params,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+importKey	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::importKey($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+importWrappedKey	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::importWrappedKey($/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+importWrappedKey	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::importWrappedKey($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+imsNetworkStateChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::imsNetworkStateChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+imsSms	guest/hals/ril/reference-libril/ril_service.cpp	/^    RIL_IMS_SMS_Message imsSms;$/;"	m	struct:ImsCdmaSms	typeref:typename:RIL_IMS_SMS_Message	file:
+ims_subscription_app_index	guest/hals/ril/reference-libril/ril.h	/^  int           ims_subscription_app_index;      \/* value < RIL_CARD_MAX_APPS, -1 if none *\/$/;"	m	struct:__anon0bfbaecf3a08	typeref:typename:int
+in_buffer_	host/libs/websocket/websocket_handler.h	/^  std::string in_buffer_ = {};$/;"	m	class:cuttlefish::DynHandler	typeref:typename:std::string
+in_emergency_mode_	host/commands/modem_simulator/call_service.h	/^  bool in_emergency_mode_;$/;"	m	class:cuttlefish::CallService	typeref:typename:bool
+in_group_	common/libs/utils/subprocess.h	/^  bool in_group_;$/;"	m	class:cuttlefish::SubprocessOptions	typeref:typename:bool
+incoming_msg_queue_	guest/hals/confirmationui/guest_session.h	/^    Queue incoming_msg_queue_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:Queue
+incomplete_command	host/commands/modem_simulator/channel_monitor.h	/^  std::string incomplete_command;$/;"	m	class:cuttlefish::Client	typeref:typename:std::string
+incrementalResults	guest/hals/ril/reference-libril/ril.h	/^    int32_t incrementalResults;$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:int32_t
+incrementalResultsPeriodicity	guest/hals/ril/reference-libril/ril.h	/^    int32_t incrementalResultsPeriodicity;$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:int32_t
+index	guest/hals/ril/reference-libril/ril.h	/^    int             index;      \/* Connection Index for use with, eg, AT+CHLD *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:int
+index	guest/hals/ril/reference-libril/ril.h	/^    int     index;              \/* CUG index. See 27.007 7.17. *\/$/;"	m	struct:__anon0bfbaecf3108	typeref:typename:int
+index	guest/hals/ril/reference-libril/ril_event.h	/^    int index;$/;"	m	struct:ril_event	typeref:typename:int
+index_	host/commands/secure_env/fragile_tpm_storage.h	/^  Json::Value index_;$/;"	m	class:cuttlefish::FragileTpmStorage	typeref:typename:Json::Value
+index_	host/commands/secure_env/insecure_fallback_storage.h	/^  Json::Value index_;$/;"	m	class:cuttlefish::InsecureFallbackStorage	typeref:typename:Json::Value
+index_file_	host/commands/secure_env/fragile_tpm_storage.h	/^  std::string index_file_;$/;"	m	class:cuttlefish::FragileTpmStorage	typeref:typename:std::string
+index_file_	host/commands/secure_env/insecure_fallback_storage.h	/^  std::string index_file_;$/;"	m	class:cuttlefish::InsecureFallbackStorage	typeref:typename:std::string
+indicateRingbackToneInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::indicateRingbackToneInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+infoRec	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_InformationRecord infoRec[RIL_CDMA_MAX_NUMBER_OF_INFO_RECS];$/;"	m	struct:__anon0bfbaecf8b08	typeref:typename:RIL_CDMA_InformationRecord[]
+info_reply	host/libs/audio_connector/commands.h	/^  R* info_reply() { return info_reply_; }$/;"	f	class:cuttlefish::InfoCommand	typeref:typename:R *
+info_reply_	host/libs/audio_connector/commands.h	/^  R* info_reply_;$/;"	m	class:cuttlefish::InfoCommand	typeref:typename:R *
+inherited_fds_	common/libs/utils/subprocess.h	/^  std::map<SharedFD, int> inherited_fds_{};$/;"	m	class:cuttlefish::Command	typeref:typename:std::map<SharedFD,int>
+init	build/cvd-host-package.go	/^func init() {$/;"	f	package:cuttlefish
+init	tools/create_base_image.go	/^func init() {$/;"	f	package:main
+initSapSocket	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^void RilSapSocket::initSapSocket(const char *socketName,$/;"	f	class:RilSapSocket	typeref:typename:void
+init_adb	host/frontend/webrtc_operator/assets/js/adb.js	/^function init_adb(devConn, ccb = connectedCb, dcb = disconnectedCb) {$/;"	f
+init_list	guest/hals/ril/reference-libril/ril_event.cpp	/^static void init_list(struct ril_event * list)$/;"	f	typeref:typename:void	file:
+initialize	guest/hals/bt/remote/remote_bluetooth.cpp	/^Return<void> BluetoothHci::initialize($/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:Return<void>
+initializeAdb	host/frontend/webrtc_operator/assets/js/app.js	/^  #initializeAdb() {$/;"	m	class:DeviceControlApp
+initializeCallback	guest/hals/ril/reference-ril/reference-ril.c	/^static void initializeCallback(void *param __unused)$/;"	f	typeref:typename:void	file:
+initialize_1_1	guest/hals/bt/remote/remote_bluetooth.cpp	/^Return<void> BluetoothHci::initialize_1_1($/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:Return<void>
+initialize_impl	guest/hals/bt/remote/remote_bluetooth.cpp	/^Return<void> BluetoothHci::initialize_impl($/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:Return<void>
+initramfs_path_	host/libs/config/data_image.cpp	/^  std::string initramfs_path_;$/;"	m	class:cuttlefish::InitializeEspImageImpl	typeref:typename:std::string	file:
+injectAuthToken	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline hidl_vec<KeyParameter> injectAuthToken(const hidl_vec<KeyParameter>& keyParamsBase,$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:hidl_vec<KeyParameter>
+inner_	host/frontend/webrtc/lib/vp8only_encoder_factory.h	/^  std::unique_ptr<webrtc::VideoEncoderFactory> inner_;$/;"	m	class:cuttlefish::webrtc_streaming::VP8OnlyEncoderFactory	typeref:typename:std::unique_ptr<webrtc::VideoEncoderFactory>
+inner_curl_	host/commands/fetcher/curl_wrapper.cc	/^  CurlWrapper& inner_curl_;$/;"	m	class:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper	typeref:typename:CurlWrapper &	file:
+inputChannel	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #inputChannel;$/;"	M	class:DeviceConnection
+input_	common/libs/security/gatekeeper_channel.h	/^  SharedFD input_;$/;"	m	class:cuttlefish::GatekeeperChannel	typeref:typename:SharedFD
+input_	common/libs/security/keymaster_channel.h	/^  SharedFD input_;$/;"	m	class:cuttlefish::KeymasterChannel	typeref:typename:SharedFD
+input_channel_	host/frontend/webrtc/lib/client_handler.cpp	/^  rtc::scoped_refptr<webrtc::DataChannelInterface> input_channel_;$/;"	m	class:cuttlefish::webrtc_streaming::InputChannelHandler	typeref:typename:rtc::scoped_refptr<webrtc::DataChannelInterface>	file:
+input_events	guest/commands/vsoc_input_service/vsoc_input_service.h	/^namespace input_events {$/;"	n	namespace:cuttlefish
+input_handler_	host/frontend/webrtc/lib/client_handler.h	/^  std::unique_ptr<InputChannelHandler> input_handler_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::unique_ptr<InputChannelHandler>
+input_multiplexer_	host/libs/confui/host_server.h	/^  Multiplexer input_multiplexer_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:Multiplexer
+input_socket_path_	host/libs/confui/host_server.h	/^  std::string input_socket_path_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:std::string
+input_sockets_	host/frontend/webrtc/connection_observer.cpp	/^  cuttlefish::InputSockets& input_sockets_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:cuttlefish::InputSockets &	file:
+input_sockets_	host/frontend/webrtc/connection_observer.h	/^  InputSockets& input_sockets_;$/;"	m	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:InputSockets &
+insecure_storage_	host/commands/secure_env/tpm_gatekeeper.h	/^  GatekeeperStorage& insecure_storage_;$/;"	m	class:cuttlefish::TpmGatekeeper	typeref:typename:GatekeeperStorage &
+instance_	host/commands/assemble_cvd/disk_flags.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::InitializeAccessKregistryImage	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::BluetoothConnector	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::ConfigServer	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::GnssGrpcProxyServer	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::KernelLogMonitor	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::LogcatReceiver	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::OpenWrt	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::RootCanal	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::SecureEnvironment	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::TombstoneReceiver	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::VehicleHalServer	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::WmediumdServer	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch_modem.cpp	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch_streamer.cpp	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/launch_streamer.cpp	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/main.cc	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::__anonadab6e0c0111::CuttlefishEnvironment	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/server_loop.cpp	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/run_cvd/validate.cpp	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::__anon8d12954e0111::ValidateTapDevices	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/commands/secure_env/tpm_serialize.h	/^  Type* instance_;$/;"	m	class:cuttlefish::TpmSerializable	typeref:typename:Type *
+instance_	host/libs/config/adb/launch.cpp	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::__anon7ea6a0320111::AdbHelper	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_	host/libs/config/adb/launch.cpp	/^  const CuttlefishConfig::InstanceSpecific& instance_;$/;"	m	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:const CuttlefishConfig::InstanceSpecific &	file:
+instance_dir	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::instance_dir() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+instance_dirs	host/libs/config/cuttlefish_config.cpp	/^std::vector<std::string> CuttlefishConfig::instance_dirs() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::vector<std::string>
+instance_internal_dir	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::instance_internal_dir() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+instance_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::instance_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+instruction	guest/hals/ril/reference-libril/ril.h	/^    int instruction;$/;"	m	struct:__anon0bfbaecf1f08	typeref:typename:int
+internal	host/libs/wayland/wayland_server.cpp	/^namespace internal {$/;"	n	namespace:wayland	file:
+internal	host/libs/wayland/wayland_server.h	/^namespace internal {$/;"	n	namespace:wayland
+internalRequestTimedCallback	guest/hals/ril/reference-libril/ril.cpp	/^internalRequestTimedCallback (RIL_TimedCallback callback, void *param,$/;"	f	namespace:android	typeref:typename:UserCallbackInfo *	file:
+interval	guest/hals/ril/reference-libril/ril.h	/^    int32_t interval;                                               \/\/ Time interval in second/;"	m	struct:__anon0bfbaecfad08	typeref:typename:int32_t
+interval	guest/hals/ril/reference-libril/ril.h	/^    int32_t interval;$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:int32_t
+invalid_linux_version	host/libs/vm_manager/host_configuration.cpp	/^constexpr std::pair<int,int> invalid_linux_version = std::pair<int,int>();$/;"	v	namespace:cuttlefish::vm_manager::__anon1edaaabd0111	typeref:typename:std::pair<int,int>
+io_xfer	host/libs/audio_connector/shm_layout.h	/^  virtio_snd_pcm_xfer io_xfer;$/;"	m	struct:cuttlefish::IoTransferMsg	typeref:typename:virtio_snd_pcm_xfer
+ip	common/libs/utils/network.cpp	/^  iphdr ip;$/;"	m	struct:cuttlefish::CompleteReleaseFrame	typeref:typename:iphdr	file:
+ip_address	common/libs/utils/network.h	/^  std::uint8_t ip_address[4];$/;"	m	struct:cuttlefish::DnsmasqDhcp4Lease	typeref:typename:std::uint8_t[4]
+ip_address_	common/libs/net/network_interface.h	/^  std::string ip_address_;$/;"	m	class:cuttlefish::NetworkInterface	typeref:typename:std::string
+ip_checksum	common/libs/utils/network.cpp	/^static std::uint16_t ip_checksum(std::uint16_t *buf, std::size_t size) {$/;"	f	namespace:cuttlefish	typeref:typename:std::uint16_t	file:
+ipaddr	common/libs/device_config/device_config.proto	/^    string ipaddr = 1;$/;"	f	message:cuttlefish.DeviceConfig.RILConfig	typeref:typename:string
+ipaddr_	host/libs/allocd/resource.h	/^  std::string ipaddr_;$/;"	m	class:cuttlefish::EthernetIface	typeref:typename:std::string
+ipaddr_	host/libs/allocd/resource.h	/^  std::string ipaddr_;$/;"	m	class:cuttlefish::MobileIface	typeref:typename:std::string
+is3gpp2	guest/hals/ril/reference-ril/reference-ril.c	/^static int is3gpp2(int radioTech) {$/;"	f	typeref:typename:int	file:
+isAospAidlInterface	tests/hal/hal_implementation_test.cpp	/^static bool isAospAidlInterface(const std::string& name) {$/;"	f	typeref:typename:bool	file:
+isAospHidlInterface	tests/hal/hal_implementation_test.cpp	/^static bool isAospHidlInterface(const FQName& name) {$/;"	f	typeref:typename:bool	file:
+isBlob	guest/hals/camera/vsock_frame_provider.cpp	/^bool VsockFrameProvider::isBlob(const std::vector<char>& blob) {$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:bool
+isCallActive	host/commands/modem_simulator/call_service.h	/^    bool isCallActive() {$/;"	f	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+isCallAlerting	host/commands/modem_simulator/call_service.h	/^    bool isCallAlerting() {$/;"	f	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+isCallBackground	host/commands/modem_simulator/call_service.h	/^    bool isCallBackground() {$/;"	f	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+isCallDialing	host/commands/modem_simulator/call_service.h	/^    bool isCallDialing() {$/;"	f	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+isCallIncoming	host/commands/modem_simulator/call_service.h	/^    bool isCallIncoming() {$/;"	f	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+isCallWaiting	host/commands/modem_simulator/call_service.h	/^    bool isCallWaiting() {$/;"	f	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+isCancelled	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    public boolean isCancelled() {$/;"	m	class:GceFuture
+isConcurrentStreamCombinationSupported	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::isConcurrentStreamCombinationSupported($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+isConcurrentStreamCombinationSupported_2_7	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::isConcurrentStreamCombinationSupported_2_7($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+isEnabled	guest/hals/ril/reference-libril/ril.h	/^    bool isEnabled;$/;"	m	struct:__anon0bfbaecf5608	typeref:typename:bool
+isFinalResponse	guest/hals/ril/reference-ril/atchannel.c	/^static int isFinalResponse(const char *line)$/;"	f	typeref:typename:int	file:
+isFinalResponseError	guest/hals/ril/reference-ril/atchannel.c	/^static int isFinalResponseError(const char *line)$/;"	f	typeref:typename:int	file:
+isFinalResponseSuccess	guest/hals/ril/reference-ril/atchannel.c	/^static int isFinalResponseSuccess(const char *line)$/;"	f	typeref:typename:int	file:
+isGnssRawMeasurement	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    bool isGnssRawMeasurement(const std::string& inputStr) {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:bool	file:
+isHidlPackageConsidered	tests/hal/hal_implementation_test.cpp	/^static bool isHidlPackageConsidered(const FQName& name) {$/;"	f	typeref:typename:bool	file:
+isInEmulator	guest/hals/ril/reference-ril/misc.c	/^bool isInEmulator(void) {$/;"	f	typeref:typename:bool
+isInternetLingeringSupported	guest/hals/ril/reference-libril/ril.h	/^    int isInternetLingeringSupported;$/;"	m	struct:__anon0bfbaecfbc08	typeref:typename:int
+isMT	guest/hals/ril/reference-libril/ril.h	/^    char            isMT;       \/* nonzero if call is mobile terminated *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:char
+isMpty	guest/hals/ril/reference-libril/ril.h	/^    char            isMpty;     \/* nonzero if is mpty call *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:char
+isMultimode	guest/hals/ril/reference-ril/reference-ril.c	/^    int isMultimode;$/;"	m	struct:__anon70d7df6f0108	typeref:typename:int	file:
+isNMEA	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    bool isNMEA(const std::string& inputStr) {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:bool	file:
+isNrDualConnectivityEnabled	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::isNrDualConnectivityEnabled(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+isNrDualConnectivityEnabled	guest/hals/ril/reference-ril/reference-ril.c	/^static bool isNrDualConnectivityEnabled = true;$/;"	v	typeref:typename:bool	file:
+isNrDualConnectivityEnabledResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::isNrDualConnectivityEnabledResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+isPresent	guest/hals/ril/reference-libril/ril.h	/^  char isPresent;    \/* non-zero if signal information record is present *\/$/;"	m	struct:__anon0bfbaecf1008	typeref:typename:char
+isRadioOff	host/commands/modem_simulator/network_service.h	/^  bool isRadioOff() const { return radio_state_ == RADIO_STATE_OFF; }$/;"	f	class:cuttlefish::NetworkService	typeref:typename:bool
+isRadioOn	guest/hals/ril/reference-ril/reference-ril.c	/^static int isRadioOn()$/;"	f	typeref:typename:int	file:
+isRunning	guest/hals/camera/vsock_camera_server.h	/^  bool isRunning() const { return is_running_.load(); }$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:bool
+isRunning	guest/hals/camera/vsock_frame_provider.h	/^  bool isRunning() const { return running_.load(); }$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:bool
+isSMSUnsolicited	guest/hals/ril/reference-ril/atchannel.c	/^static int isSMSUnsolicited(const char *line)$/;"	f	typeref:typename:int	file:
+isServiceTypeCfQuery	guest/hals/ril/reference-libril/ril_service.cpp	/^bool isServiceTypeCfQuery(RIL_SsServiceType serType, RIL_SsRequestType reqType) {$/;"	f	typeref:typename:bool
+isSetTorchModeSupported	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::isSetTorchModeSupported($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+isStreamConfigurationSupported	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Status VsockCameraDeviceSession::isStreamConfigurationSupported($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Status
+isValid	guest/hals/camera/vsock_camera_metadata.h	/^  bool isValid() const { return is_valid_; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraRequestMetadata	typeref:typename:bool
+isVoice	guest/hals/ril/reference-libril/ril.h	/^    char            isVoice;    \/* nonzero if this is is a voice call *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:char
+isVoicePrivacy	guest/hals/ril/reference-libril/ril.h	/^    char            isVoicePrivacy;     \/* nonzero if CDMA voice privacy mode is active *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:char
+is_binary	host/frontend/webrtc/lib/ws_connection.cpp	/^    bool is_binary() const { return is_binary_; }$/;"	f	struct:WsConnectionImpl::WsBuffer	typeref:typename:bool	file:
+is_binary_	host/frontend/webrtc/lib/ws_connection.cpp	/^    bool is_binary_;$/;"	m	struct:WsConnectionImpl::WsBuffer	typeref:typename:bool	file:
+is_default_	host/libs/config/config_flag.cpp	/^  bool is_default_;$/;"	m	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:bool	file:
+is_international	host/commands/modem_simulator/call_service.h	/^    bool is_international;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+is_inverted_	host/libs/confui/host_renderer.h	/^  bool is_inverted_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:bool
+is_magnified_	host/libs/confui/host_renderer.h	/^  bool is_magnified_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:bool
+is_mobile_terminated	host/commands/modem_simulator/call_service.h	/^    bool is_mobile_terminated;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+is_movable	host/libs/screen_connector/screen_connector_common.h	/^struct is_movable {$/;"	s	namespace:cuttlefish
+is_multi_party	host/commands/modem_simulator/call_service.h	/^    bool is_multi_party;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+is_multimode_modem	guest/hals/ril/reference-ril/reference-ril.c	/^int is_multimode_modem(ModemInfo *mdm)$/;"	f	typeref:typename:int
+is_open	host/commands/modem_simulator/sim_service.h	/^    bool is_open;$/;"	m	struct:cuttlefish::SimService::LogicalChannel	typeref:typename:bool
+is_open_	guest/hals/camera/vsock_camera_device_3_4.h	/^  std::atomic<bool> is_open_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:std::atomic<bool>
+is_operational_	common/libs/net/network_interface.h	/^  bool is_operational_ = false;$/;"	m	class:cuttlefish::NetworkInterface	typeref:typename:bool
+is_regular_file_	common/libs/fs/shared_fd.h	/^  bool is_regular_file_;$/;"	m	class:cuttlefish::FileInstance	typeref:typename:bool
+is_remote_call	host/commands/modem_simulator/call_service.h	/^    bool is_remote_call;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+is_response	common/libs/security/gatekeeper_channel.h	/^    bool is_response : 1;$/;"	m	struct:gatekeeper::GatekeeperRawMessage	typeref:typename:bool:1
+is_response	common/libs/security/keymaster_channel.h	/^    bool is_response : 1;$/;"	m	struct:keymaster::keymaster_message	typeref:typename:bool:1
+is_running_	guest/hals/camera/vsock_camera_server.h	/^  std::atomic<bool> is_running_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:std::atomic<bool>
+is_setup_well_	host/libs/confui/host_renderer.h	/^  bool is_setup_well_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:bool
+is_socket_ok_	host/libs/confui/host_server.h	/^  bool is_socket_ok_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:bool
+is_success_	common/libs/confui/protocol_types.h	/^  bool is_success_;$/;"	m	class:cuttlefish::confui::ConfUiAckMessage	typeref:typename:bool
+is_success_	host/libs/screen_connector/screen_connector_common.h	/^  bool is_success_;$/;"	m	struct:cuttlefish::ScreenConnectorFrameInfo	typeref:typename:bool
+is_valid	host/commands/modem_simulator/channel_monitor.h	/^  bool is_valid = true;$/;"	m	class:cuttlefish::Client	typeref:typename:bool
+is_valid_	guest/hals/camera/vsock_camera_metadata.h	/^  bool is_valid_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraRequestMetadata	typeref:typename:bool
+is_valid_pdu_	host/commands/modem_simulator/pdu_parser.h	/^  bool is_valid_pdu_;$/;"	m	class:cuttlefish::PDUParser	typeref:typename:bool
+is_voice_mode	host/commands/modem_simulator/call_service.h	/^    bool is_voice_mode;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:bool
+is_waiting_sms_pdu_	host/commands/modem_simulator/sms_service.h	/^  bool is_waiting_sms_pdu_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:bool
+is_waiting_sms_to_sim_	host/commands/modem_simulator/sms_service.h	/^  bool is_waiting_sms_to_sim_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:bool
+itemID	guest/hals/ril/reference-libril/ril.h	/^  RIL_NV_Item   itemID;$/;"	m	struct:__anon0bfbaecf8d08	typeref:typename:RIL_NV_Item
+itemID	guest/hals/ril/reference-libril/ril.h	/^  RIL_NV_Item itemID;$/;"	m	struct:__anon0bfbaecf8c08	typeref:typename:RIL_NV_Item
+items_	common/libs/concurrency/thread_safe_queue.h	/^  QueueImpl items_;$/;"	m	class:cuttlefish::ThreadSafeQueue	typeref:typename:QueueImpl
+iterator	common/libs/fs/shared_select.h	/^  typedef std::set<SharedFD>::iterator iterator;$/;"	t	class:cuttlefish::SharedFDSet	typeref:typename:std::set<SharedFD>::iterator
+jacks	host/libs/audio_connector/shm_layout.h	/^  uint32_t jacks;$/;"	m	struct:cuttlefish::VioSConfig	typeref:typename:uint32_t
+jpegPending	guest/hals/camera/vsock_frame_provider.h	/^  bool jpegPending() const { return jpeg_pending_.load(); }$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:bool
+jpeg_mutex_	guest/hals/camera/vsock_frame_provider.h	/^  std::mutex jpeg_mutex_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::mutex
+jpeg_pending_	guest/hals/camera/vsock_frame_provider.h	/^  std::atomic<bool> jpeg_pending_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::atomic<bool>
+json_	host/commands/secure_env/json_serializable.cpp	/^  Json::Value& json_;$/;"	m	class:cuttlefish::JsonSerializable	typeref:typename:Json::Value &	file:
+k0x100	host/libs/confui/cbor.cc	/^  enum class Condition { k24, k0x100, k0x10000, k0x100000000, kBeyond };$/;"	e	enum:cuttlefish::confui::Cbor::WriteHeader::Condition	file:
+k0x10000	host/libs/confui/cbor.cc	/^  enum class Condition { k24, k0x100, k0x10000, k0x100000000, kBeyond };$/;"	e	enum:cuttlefish::confui::Cbor::WriteHeader::Condition	file:
+k0x100000000	host/libs/confui/cbor.cc	/^  enum class Condition { k24, k0x100, k0x10000, k0x100000000, kBeyond };$/;"	e	enum:cuttlefish::confui::Cbor::WriteHeader::Condition	file:
+k24	host/libs/confui/cbor.cc	/^  enum class Condition { k24, k0x100, k0x10000, k0x100000000, kBeyond };$/;"	e	enum:cuttlefish::confui::Cbor::WriteHeader::Condition	file:
+kAberrationMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAberrationMode = ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAbort	common/libs/confui/protocol_types.h	/^  kAbort = 115,       \/\/ to abort the current session$/;"	e	enum:cuttlefish::confui::ConfUiCmd
+kAck	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kAck = 1,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kAdbChannelLabel	host/frontend/webrtc/lib/client_handler.cpp	/^static constexpr auto kAdbChannelLabel = "adb-channel";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anond0fc42ea0111	typeref:typename:auto	file:
+kAdbCommandGapTime	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^static constexpr int kAdbCommandGapTime = 5;$/;"	v	namespace:__anon734383cf0111	typeref:typename:int	file:
+kAdbDaemonPort	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^constexpr int kAdbDaemonPort = 5037;$/;"	v	namespace:__anon734383cf0111	typeref:typename:int
+kAdbIPAndPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kAdbIPAndPort[] = "adb_ip_and_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kAdbMessageLengthLength	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^constexpr std::size_t kAdbMessageLengthLength = 4;$/;"	v	namespace:__anon734383cf0111	typeref:typename:std::size_t
+kAdbOkayStatusResponse	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^constexpr char kAdbOkayStatusResponse[] = "OKAY";$/;"	v	namespace:__anon734383cf0111	typeref:typename:char[]
+kAdbStatusResponseLength	host/frontend/adb_connector/adb_connection_maintainer.cpp	/^constexpr std::size_t kAdbStatusResponseLength =$/;"	v	namespace:__anon734383cf0111	typeref:typename:std::size_t
+kAeAvailableMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAeAvailableMode = ANDROID_CONTROL_AE_MODE_ON;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAeLockAvailable	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAeLockAvailable = ANDROID_CONTROL_AE_LOCK_AVAILABLE_FALSE;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAePrecaptureTrigger	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAePrecaptureTrigger = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAfAvailableModes	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAfAvailableModes[] = {ANDROID_CONTROL_AF_MODE_OFF};$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t[]
+kAfMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAfMode = ANDROID_CONTROL_AF_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAfTrigger	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAfTrigger = ANDROID_CONTROL_AF_TRIGGER_IDLE;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAllowSelfSigned	host/frontend/webrtc/lib/ws_connection.h	/^    kAllowSelfSigned,$/;"	e	enum:WsConnection::Security
+kAndroidMode	host/libs/confui/host_mode_ctrl.h	/^  enum class ModeType : std::uint8_t { kAndroidMode = 55, kConfUI_Mode = 77 };$/;"	e	enum:cuttlefish::HostModeCtrl::ModeType
+kAndroidMode	host/libs/screen_connector/screen_connector_ctrl.h	/^    kAndroidMode,$/;"	e	enum:cuttlefish::ScreenConnectorCtrl::ModeType
+kAntibandingMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAntibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kApKernelImage	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kApKernelImage[] = "ap_kernel_image";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kApRootfsImage	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kApRootfsImage[] = "ap_rootfs_image";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kAreaCode	host/commands/modem_simulator/network_service.cpp	/^static const std::string kAreaCode = "2142";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kArgumentParsingError	host/commands/run_cvd/runner_defs.h	/^  kArgumentParsingError = 1,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kAssemblerBin	host/commands/start/main.cc	/^std::string kAssemblerBin = cuttlefish::HostBinaryPath("assemble_cvd");$/;"	v	namespace:__anon8e1e78490111	typeref:typename:std::string
+kAssemblyDir	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kAssemblyDir[] = "assembly_dir";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kAudioControlServerPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kAudioControlServerPort[] = "audiocontrol_server_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kAudioStreamsField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kAudioStreamsField = "audio_streams";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kAvailableAberrationModes	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAvailableAberrationModes[] = {$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t[]
+kAvailableCapabilities	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAvailableCapabilities[] = {$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t[]
+kAvailableCharacteristicsKeys	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kAvailableCharacteristicsKeys[] = {$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kAvailableFffect	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAvailableFffect = ANDROID_CONTROL_EFFECT_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAvailableHotpixelMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAvailableHotpixelMode =$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAvailableRequestKeys	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kAvailableRequestKeys[] = {$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kAvailableResultKeys	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kAvailableResultKeys[] = {$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kAvailableSceneMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAvailableSceneMode = ANDROID_CONTROL_SCENE_MODE_DISABLED;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAvailableShadingMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAvailableShadingMode = ANDROID_SHADING_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAwaitCleanup	host/libs/confui/server_common.h	/^  kAwaitCleanup = 5,$/;"	e	enum:cuttlefish::confui::MainLoopState
+kAwaitingAnswer	host/frontend/webrtc/lib/client_handler.h	/^      kAwaitingAnswer,$/;"	e	enum:cuttlefish::webrtc_streaming::ClientHandler::State
+kAwbAvailableMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAwbAvailableMode = ANDROID_CONTROL_AWB_MODE_AUTO;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kAwbLockAvailable	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kAwbLockAvailable = ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kBare	host/commands/kernel_log_monitor/kernel_log_server.cc	/^  kBare,          \/\/ Just an event, no extra data$/;"	e	enum:__anonfa7764770111::EventFormat	file:
+kBeyond	host/libs/confui/cbor.cc	/^  enum class Condition { k24, k0x100, k0x10000, k0x100000000, kBeyond };$/;"	e	enum:cuttlefish::confui::Cbor::WriteHeader::Condition	file:
+kBlankDataImageMb	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kBlankDataImageMb[] = "blank_data_image_mb";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kBluetoothChannelLabel	host/frontend/webrtc/lib/client_handler.cpp	/^static constexpr auto kBluetoothChannelLabel = "bluetooth-channel";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anond0fc42ea0111	typeref:typename:auto	file:
+kBootCompletedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kBootCompletedMessage[] = "VIRTUAL_DEVICE_BOOT_COMPLETED";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kBootFailedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kBootFailedMessage[] = "VIRTUAL_DEVICE_BOOT_FAILED";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kBootImageUnpackError	host/commands/run_cvd/runner_defs.h	/^  kBootImageUnpackError = 6,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kBootPathAA64	host/libs/config/data_image.cpp	/^const std::string kBootPathAA64 = "EFI\/BOOT\/BOOTAA64.EFI";$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const std::string
+kBootPathIA32	host/libs/config/data_image.cpp	/^const std::string kBootPathIA32 = "EFI\/BOOT\/BOOTIA32.EFI";$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const std::string
+kBootSlot	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kBootSlot[] = "boot_slot";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kBootStarted	host/commands/run_cvd/boot_state_machine.cc	/^  static const int kBootStarted = 0;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:const int	file:
+kBootStartedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kBootStartedMessage[] = "VIRTUAL_DEVICE_BOOT_STARTED";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kBootconfigSupported	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kBootconfigSupported[] = "bootconfig_supported";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kBootloader	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kBootloader[] = "bootloader";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kBufferSize	common/libs/fs/shared_fd_stream.h	/^  static constexpr const ptrdiff_t kBufferSize = 4096 + kUngetSize;$/;"	m	class:cuttlefish::SharedFDStreambuf	typeref:typename:const ptrdiff_t
+kBufferSize	guest/commands/bt_vhci_forwarder/main.cpp	/^constexpr const size_t kBufferSize = (HCI_MAX_FRAME_SIZE + 1) * 2;$/;"	v	typeref:typename:const size_t
+kBufferSize	host/commands/bt_connector/main.cpp	/^constexpr const size_t kBufferSize = (HCI_MAX_FRAME_SIZE + 1) * 2;$/;"	v	typeref:typename:const size_t
+kBufferSize	host/frontend/webrtc/lib/ws_connection.cpp	/^constexpr int kBufferSize = 65536;$/;"	v	namespace:__anon14ee93270111	typeref:typename:int
+kCDMASignalStrength	host/commands/modem_simulator/network_service.cpp	/^const std::pair<int, int> kCDMASignalStrength = std::make_pair(4, 120);$/;"	v	namespace:cuttlefish	typeref:typename:const std::pair<int,int>
+kCORSHeaders	host/libs/websocket/websocket_server.cpp	/^const std::vector<std::pair<std::string, std::string>> kCORSHeaders = {$/;"	v	namespace:cuttlefish::__anon8185be2f0111	typeref:typename:const std::vector<std::pair<std::string,std::string>>
+kCallService	host/commands/modem_simulator/modem_service.h	/^  kCallService    = 3,$/;"	e	enum:cuttlefish::ModemServiceType
+kCameraDataChannelLabel	host/frontend/webrtc/lib/client_handler.cpp	/^static constexpr auto kCameraDataChannelLabel = "camera-data-channel";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anond0fc42ea0111	typeref:typename:auto	file:
+kCameraDataEof	host/frontend/webrtc/lib/client_handler.cpp	/^static constexpr auto kCameraDataEof = "EOF";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anond0fc42ea0111	typeref:typename:auto	file:
+kCameraServerPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kCameraServerPort[] = "camera_server_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kCancel	common/libs/confui/protocol_types.h	/^  constexpr static const auto kCancel = "user_cancel";$/;"	m	struct:cuttlefish::confui::UserResponse	typeref:typename:const auto
+kCellId	host/commands/modem_simulator/network_service.cpp	/^static const std::string kCellId = "0000B804";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kCliAck	common/libs/confui/protocol_types.h	/^  kCliAck = 113,  \/\/ client acknowledged. "error:err_msg" or "success:command"$/;"	e	enum:cuttlefish::confui::ConfUiCmd
+kCliRespond	common/libs/confui/protocol_types.h	/^  kCliRespond = 114,  \/\/  with "confirm" or "cancel" or "abort"$/;"	e	enum:cuttlefish::confui::ConfUiCmd
+kClientDisconnectType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kClientDisconnectType = "client_disconnected";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kClientIdField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kClientIdField = "client_id";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kClientMessageType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kClientMessageType = "client_msg";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kClientSecretField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kClientSecretField = "connection_id";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kCmeErrorFixedDialNumberOnlyAllowed	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorFixedDialNumberOnlyAllowed = "+CME ERROR: 56";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorFixedDialNumberOnlyAllowed	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorFixedDialNumberOnlyAllowed;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorInCorrectParameters	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorInCorrectParameters      = "+CME ERROR: 50";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorInCorrectParameters	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorInCorrectParameters;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorIncorrectPassword	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorIncorrectPassword        = "+CME ERROR: 16";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorIncorrectPassword	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorIncorrectPassword;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorInvalidCharactersInTextString	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorInvalidCharactersInTextString = "+CME ERROR: 27";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorInvalidCharactersInTextString	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorInvalidCharactersInTextString;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorInvalidIndex	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorInvalidIndex             = "+CME ERROR: 21";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorInvalidIndex	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorInvalidIndex;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorMemoryFull	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorMemoryFull               = "+CME ERROR: 20";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorMemoryFull	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorMemoryFull;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorNetworkNotAllowedEmergencyCallsOnly	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorNetworkNotAllowedEmergencyCallsOnly = "+CME ERROR: 32";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorNetworkNotAllowedEmergencyCallsOnly	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorNetworkNotAllowedEmergencyCallsOnly;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorNetworkNotAttachedDueToMTFunctionalRestrictions	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorNetworkNotAttachedDueToMTFunctionalRestrictions = "+CME/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorNetworkNotAttachedDueToMTFunctionalRestrictions	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorNetworkNotAttachedDueToMTFunctionalRestrictions;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorNoNetworkService	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorNoNetworkService         = "+CME ERROR: 30";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorNoNetworkService	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorNoNetworkService;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorNotFound	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorNotFound                 = "+CME ERROR: 22";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorNotFound	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorNotFound;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorOperationNotAllowed	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorOperationNotAllowed      = "+CME ERROR: 3";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorOperationNotAllowed	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorOperationNotAllowed;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorOperationNotSupported	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorOperationNotSupported    = "+CME ERROR: 4";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorOperationNotSupported	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorOperationNotSupported;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorSimBusy	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorSimBusy                  = "+CME ERROR: 14";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorSimBusy	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorSimBusy;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorSimNotInserted	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorSimNotInserted           = "+CME ERROR: 10";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorSimNotInserted	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorSimNotInserted;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorSimPinRequired	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorSimPinRequired           = "+CME ERROR: 11";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorSimPinRequired	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorSimPinRequired;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorSimPukRequired	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmeErrorSimPukRequired           = "+CME ERROR: 12";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmeErrorSimPukRequired	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmeErrorSimPukRequired;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmsErrorInvalidPDUModeParam	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmsErrorInvalidPDUModeParam      = "+CMS ERROR: 304";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmsErrorInvalidPDUModeParam	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmsErrorInvalidPDUModeParam;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmsErrorOperationNotAllowed	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmsErrorOperationNotAllowed      = "+CMS ERROR: 302";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmsErrorOperationNotAllowed	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmsErrorOperationNotAllowed;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmsErrorOperationNotSupported	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmsErrorOperationNotSupported    = "+CMS ERROR: 303";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmsErrorOperationNotSupported	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmsErrorOperationNotSupported;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmsErrorSCAddressUnknown	host/commands/modem_simulator/modem_service.cpp	/^const std::string ModemService::kCmsErrorSCAddressUnknown         = "+CMS ERROR: 304";$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kCmsErrorSCAddressUnknown	host/commands/modem_simulator/modem_service.h	/^  static const std::string kCmsErrorSCAddressUnknown;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::string
+kColorBackground	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorBackground = 0xffffffff;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorBackgroundInv	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorBackgroundInv = 0xff212121;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorDisabled	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorDisabled = 0xffbdbdbd;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorDisabledInv	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorDisabledInv = 0xff424242;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorEnabled	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorEnabled = 0xff212121;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorEnabledInv	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorEnabledInv = 0xffdedede;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorShield	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorShield = 0xff778500;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorShieldInv	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorShieldInv = 0xffc4cb80;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorText	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorText = 0xff212121;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kColorTextInv	host/libs/confui/host_renderer.h	/^  static constexpr const teeui::Color kColorTextInv = 0xffdedede;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:const teeui::Color
+kComingSoonAidl	tests/hal/hal_implementation_test.cpp	/^static const std::set<VersionedAidlPackage> kComingSoonAidl = {$/;"	v	typeref:typename:const std::set<VersionedAidlPackage>	file:
+kCompositorVersion	host/libs/wayland/wayland_compositor.cpp	/^constexpr const uint32_t kCompositorVersion = 3;$/;"	v	namespace:wayland::__anon473d11590111	typeref:typename:const uint32_t
+kConfUI_Mode	host/libs/confui/host_mode_ctrl.h	/^  enum class ModeType : std::uint8_t { kAndroidMode = 55, kConfUI_Mode = 77 };$/;"	e	enum:cuttlefish::HostModeCtrl::ModeType
+kConfUI_Mode	host/libs/screen_connector/screen_connector_ctrl.h	/^    kConfUI_Mode$/;"	e	enum:cuttlefish::ScreenConnectorCtrl::ModeType
+kConfUiHostPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kConfUiHostPort[] = "confirmation_ui_host_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kConfigServerError	host/commands/run_cvd/runner_defs.h	/^  kConfigServerError = 19,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kConfigServerPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kConfigServerPort[] = "config_server_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kConfigType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kConfigType = "config";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kConfirm	common/libs/confui/protocol_types.h	/^  constexpr static const auto kConfirm = "user_confirm";$/;"	m	struct:cuttlefish::confui::UserResponse	typeref:typename:const auto
+kConnectClientUriPath	host/frontend/webrtc_operator/server.cpp	/^constexpr auto kConnectClientUriPath = "\/connect_client";$/;"	v	namespace:__anon477f946a0111	typeref:typename:auto
+kConnectPath	host/frontend/webrtc_operator/server.cpp	/^const constexpr auto kConnectPath = "\/connect";$/;"	v	namespace:__anon477f946a0111	typeref:typename:const auto
+kConnectType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kConnectType = "connect";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kConnected	host/frontend/webrtc/lib/client_handler.h	/^      kConnected,$/;"	e	enum:cuttlefish::webrtc_streaming::ClientHandler::State
+kConnecting	host/frontend/webrtc/lib/client_handler.h	/^      kConnecting,$/;"	e	enum:cuttlefish::webrtc_streaming::ClientHandler::State
+kConnectorEnabled	host/libs/config/adb/config.cpp	/^  static constexpr char kConnectorEnabled[] = "connector_enabled";$/;"	m	class:cuttlefish::__anone963d72d0111::AdbConfigFragmentImpl	typeref:typename:char[]	file:
+kConsole	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kConsole[] = "console";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kControlAeCompensationRange	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kControlAeCompensationRange[] = {0, 0};$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kControlAeCompensationStep	guest/hals/camera/vsock_camera_metadata.cpp	/^const camera_metadata_rational_t kControlAeCompensationStep[] = {{0, 1}};$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const camera_metadata_rational_t[]
+kControlAvailableModes	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kControlAvailableModes[] = {ANDROID_CONTROL_MODE_OFF,$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t[]
+kControlMaxRegions	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kControlMaxRegions[] = {\/*AE*\/ 0, \/*AWB*\/ 0, \/*AF*\/ 0};$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kControlMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kControlMode = ANDROID_CONTROL_MODE_AUTO;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kControlPanelButtonCommand	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kControlPanelButtonCommand = "command";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kControlPanelButtonDeviceStates	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kControlPanelButtonDeviceStates = "device_states";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kControlPanelButtonHingeAngleValue	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kControlPanelButtonHingeAngleValue = "hinge_angle_value";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kControlPanelButtonIconName	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kControlPanelButtonIconName = "icon_name";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kControlPanelButtonLidSwitchOpen	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kControlPanelButtonLidSwitchOpen = "lid_switch_open";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kControlPanelButtonShellCommand	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kControlPanelButtonShellCommand = "shell_command";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kControlPanelButtonTitle	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kControlPanelButtonTitle = "title";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kCpus	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kCpus[] = "cpus";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kCreateImage	host/libs/config/data_image.cpp	/^  enum class DataImageAction { kNoAction, kCreateImage, kResizeImage };$/;"	e	enum:cuttlefish::InitializeDataImageImpl::DataImageAction	file:
+kCreatingOffer	host/frontend/webrtc/lib/client_handler.h	/^      kCreatingOffer,$/;"	e	enum:cuttlefish::webrtc_streaming::ClientHandler::State
+kCredentialField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kCredentialField = "credential";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kCredentialTypeField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kCredentialTypeField = "credentialType";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kCroppingType	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kCroppingType = ANDROID_SCALER_CROPPING_TYPE_CENTER_ONLY;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kCrosvmBinary	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kCrosvmBinary[] = "crosvm_binary";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kCrosvmVarEmptyDir	host/libs/config/cuttlefish_config.h	/^constexpr char kCrosvmVarEmptyDir[] = "\/var\/empty";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kCurHeaderVersion	host/libs/allocd/utils.cpp	/^constexpr uint16_t kCurHeaderVersion = 1;$/;"	v	namespace:cuttlefish	typeref:typename:uint16_t
+kCustomActionButton	host/libs/config/custom_actions.cpp	/^const char* kCustomActionButton = "button";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionButtonCommand	host/libs/config/custom_actions.cpp	/^const char* kCustomActionButtonCommand = "command";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionButtonIconName	host/libs/config/custom_actions.cpp	/^const char* kCustomActionButtonIconName = "icon_name";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionButtonTitle	host/libs/config/custom_actions.cpp	/^const char* kCustomActionButtonTitle = "title";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionButtons	host/libs/config/custom_actions.cpp	/^const char* kCustomActionButtons = "buttons";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionDeviceStateHingeAngleValue	host/libs/config/custom_actions.cpp	/^const char* kCustomActionDeviceStateHingeAngleValue = "hinge_angle_value";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionDeviceStateLidSwitchOpen	host/libs/config/custom_actions.cpp	/^const char* kCustomActionDeviceStateLidSwitchOpen = "lid_switch_open";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionDeviceStates	host/libs/config/custom_actions.cpp	/^const char* kCustomActionDeviceStates = "device_states";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionServer	host/libs/config/custom_actions.cpp	/^const char* kCustomActionServer = "server";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomActionShellCommand	host/libs/config/custom_actions.cpp	/^const char* kCustomActionShellCommand = "shell_command";$/;"	v	namespace:cuttlefish::__anon12e4c76c0111	typeref:typename:const char *
+kCustomControlPanelButtonsField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kCustomControlPanelButtonsField = "custom_control_panel_buttons";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kCuttlefishConfigEnvVarName	host/libs/config/cuttlefish_config.h	/^constexpr char kCuttlefishConfigEnvVarName[] = "CUTTLEFISH_CONFIG_FILE";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kCuttlefishConfigurationInitError	host/commands/run_cvd/runner_defs.h	/^  kCuttlefishConfigurationInitError = 3,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kCuttlefishConfigurationSaveError	host/commands/run_cvd/runner_defs.h	/^  kCuttlefishConfigurationSaveError = 7,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kCuttlefishEnvPath	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kCuttlefishEnvPath[] = "cuttlefish_env_path";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kCvdFileBuildId	host/libs/config/fetcher_config.cpp	/^const char* kCvdFileBuildId = "build_id";$/;"	v	namespace:cuttlefish::__anonf7286d770111	typeref:typename:const char *
+kCvdFileBuildTarget	host/libs/config/fetcher_config.cpp	/^const char* kCvdFileBuildTarget = "build_target";$/;"	v	namespace:cuttlefish::__anonf7286d770111	typeref:typename:const char *
+kCvdFileSource	host/libs/config/fetcher_config.cpp	/^const char* kCvdFileSource = "source";$/;"	v	namespace:cuttlefish::__anonf7286d770111	typeref:typename:const char *
+kCvdFiles	host/libs/config/fetcher_config.cpp	/^const char* kCvdFiles = "cvd_files";$/;"	v	namespace:cuttlefish::__anonf7286d770111	typeref:typename:const char *
+kDaemonizationError	host/commands/run_cvd/runner_defs.h	/^  kDaemonizationError = 8,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kDataPolicy	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kDataPolicy[] = "data_policy";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kDataPolicyAlwaysCreate	host/libs/config/data_image.cpp	/^const std::string kDataPolicyAlwaysCreate = "always_create";$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const std::string
+kDataPolicyCreateIfMissing	host/libs/config/data_image.cpp	/^const std::string kDataPolicyCreateIfMissing = "create_if_missing";$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const std::string
+kDataPolicyResizeUpTo	host/libs/config/data_image.cpp	/^const std::string kDataPolicyResizeUpTo= "resize_up_to";$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const std::string
+kDataPolicyUseExisting	host/libs/config/data_image.cpp	/^const std::string kDataPolicyUseExisting = "use_existing";$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const std::string
+kDataService	host/commands/modem_simulator/modem_service.h	/^  kDataService    = 2,$/;"	e	enum:cuttlefish::ModemServiceType
+kDefaultEmergencyMode	host/commands/modem_simulator/nvram_config.cpp	/^const bool  kDefaultEmergencyMode         = false;$/;"	v	namespace:cuttlefish	typeref:typename:const bool
+kDefaultLocation	host/libs/allocd/utils.h	/^constexpr char kDefaultLocation[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kDefaultModemTechnoloy	host/commands/modem_simulator/nvram_config.cpp	/^const int   kDefaultModemTechnoloy        = 0x10;  \/\/ LTE$/;"	v	namespace:cuttlefish	typeref:typename:const int
+kDefaultNetworkSelectionMode	host/commands/modem_simulator/nvram_config.cpp	/^const int   kDefaultNetworkSelectionMode  = 0;     \/\/ AUTOMATIC$/;"	v	namespace:cuttlefish	typeref:typename:const int
+kDefaultNumBootDevices	host/libs/vm_manager/vm_manager.h	/^  static const int kDefaultNumBootDevices = 2;$/;"	m	class:cuttlefish::vm_manager::VmManager	typeref:typename:const int
+kDefaultNumHvcs	host/libs/vm_manager/vm_manager.h	/^  static const int kDefaultNumHvcs = 7;$/;"	m	class:cuttlefish::vm_manager::VmManager	typeref:typename:const int
+kDefaultOperatorNumeric	host/commands/modem_simulator/nvram_config.cpp	/^const std::string kDefaultOperatorNumeric = "";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string
+kDefaultPinCode	host/commands/modem_simulator/sim_service.cpp	/^static const std::string kDefaultPinCode = "1234";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kDefaultPreferredNetworkMode	host/commands/modem_simulator/nvram_config.cpp	/^const int   kDefaultPreferredNetworkMode  = 0x13;  \/\/ LTE | WCDMA | GSM$/;"	v	namespace:cuttlefish	typeref:typename:const int
+kDefaultPukCode	host/commands/modem_simulator/sim_service.cpp	/^static const std::string kDefaultPukCode = "12345678";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kDefaultTargetBuildProp	host/commands/assemble_cvd/super_image_mixer.cc	/^const std::set<std::string> kDefaultTargetBuildProp = {$/;"	v	namespace:cuttlefish::__anonae6530d30111	typeref:typename:const std::set<std::string>
+kDefaultTargetImages	host/commands/assemble_cvd/super_image_mixer.cc	/^const std::set<std::string> kDefaultTargetImages = {$/;"	v	namespace:cuttlefish::__anonae6530d30111	typeref:typename:const std::set<std::string>
+kDefaultUuidPrefix	host/libs/config/cuttlefish_config.h	/^constexpr char kDefaultUuidPrefix[] = "699acfc4-c8c4-11e7-882b-5065f31dc1";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kDeprecatedBootCompleted	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kDeprecatedBootCompleted[] = "deprecated_boot_completed";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kDeviceIdField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kDeviceIdField = "device_id";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kDeviceInfoField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kDeviceInfoField = "device_info";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kDeviceInfoType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kDeviceInfoType = "device_info";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kDeviceMessageType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kDeviceMessageType = "device_msg";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kDeviceName	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^constexpr auto kDeviceName = "[email protected]\/external\/0";$/;"	v	namespace:android::hardware::camera::provider::V2_7::implementation::__anona6e38b1b0111	typeref:typename:auto
+kDisplayConfigs	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kDisplayConfigs[] = "display_configs";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kDisplayHelp	host/commands/assemble_cvd/flags.cc	/^constexpr const char kDisplayHelp[] =$/;"	v	typeref:typename:const char[]
+kDisplayPowerModeChangedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kDisplayPowerModeChangedMessage[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kDisplaysField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kDisplaysField = "displays";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kDomToLinuxMapping	host/frontend/webrtc/lib/keyboard.cpp	/^static const std::map<std::string, uint16_t> kDomToLinuxMapping = {$/;"	v	typeref:typename:const std::map<std::string,uint16_t>	file:
+kDpi	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kDpi[] = "dpi";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kDpiField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kDpiField = "dpi";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kDynamicPartitions	host/commands/assemble_cvd/misc_info.cc	/^static const std::string kDynamicPartitions = "dynamic_partition_list";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kE2eTestFailed	host/commands/run_cvd/runner_defs.h	/^  kE2eTestFailed = 16,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kEVDOSignalStrength	host/commands/modem_simulator/network_service.cpp	/^const std::pair<int, int> kEVDOSignalStrength = std::make_pair(4, 120);$/;"	v	namespace:cuttlefish	typeref:typename:const std::pair<int,int>
+kEbtablesLegacyName	host/libs/allocd/alloc_utils.h	/^constexpr char kEbtablesLegacyName[] = "ebtables-legacy";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kEbtablesName	host/libs/allocd/alloc_utils.h	/^constexpr char kEbtablesName[] = "ebtables";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kEdgeMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kEdgeMode = ANDROID_EDGE_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kEfiSystemPartition	host/libs/image_aggregator/image_aggregator.h	/^  kEfiSystemPartition,$/;"	e	enum:cuttlefish::ImagePartitionType
+kEglLib	host/libs/graphics_detector/graphics_detector.cpp	/^constexpr const char kEglLib[] = "libEGL.so.1";$/;"	v	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:const char[]
+kEmergencyMode	host/commands/modem_simulator/nvram_config.cpp	/^const char* kEmergencyMode        = "emergency_mode";$/;"	v	namespace:cuttlefish	typeref:typename:const char *
+kEnableAudio	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kEnableAudio[] = "enable_audio";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kEnableGnssGrpcProxy	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kEnableGnssGrpcProxy[] = "enable_gnss_grpc_proxy";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kEnableMetrics	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kEnableMetrics[] = "enable_metrics";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kEnableMinimalMode	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kEnableMinimalMode[] = "enable_minimal_mode";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kEnableSandbox	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kEnableSandbox[] = "enable_sandbox";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kEnableVehicleHalServer	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kEnableVehicleHalServer[] = "enable_vehicle_hal_server";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kEnableWebRTC	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kEnableWebRTC[] = "enable_webrtc";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kEntries	host/commands/secure_env/fragile_tpm_storage.cpp	/^static constexpr char kEntries[] = "entries";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kEntries	host/commands/secure_env/insecure_fallback_storage.cpp	/^static constexpr char kEntries[] = "entries";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kError	host/commands/run_cvd/runner_defs.h	/^  kError = 'E',$/;"	e	enum:cuttlefish::LauncherResponse
+kEthernetConnectedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kEthernetConnectedMessage[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kEthernetIp	host/libs/allocd/alloc_utils.h	/^constexpr char kEthernetIp[] = "192.168.98";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kEthernetTapName	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kEthernetTapName[] = "ethernet_tap_name";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kExposureCompensation	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kExposureCompensation = 0;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t
+kExtraBootconfigArgs	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kExtraBootconfigArgs[] = "extra_bootconfig_args";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kExtraKernelCmdline	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kExtraKernelCmdline[] = "extra_kernel_cmdline";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kFaceDetectMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kFaceDetectMode = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kFacing	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kFacing = ANDROID_LENS_FACING_EXTERNAL;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kFailed	host/frontend/webrtc/lib/client_handler.h	/^      kFailed,$/;"	e	enum:cuttlefish::webrtc_streaming::ClientHandler::State
+kFetcherConfigFile	host/commands/assemble_cvd/assemble_cvd.cc	/^std::string kFetcherConfigFile = "fetcher_config.json";$/;"	v	namespace:cuttlefish::__anon1e335d460111	typeref:typename:std::string
+kFinalResponseError	host/commands/modem_simulator/unittest/service_test.cpp	/^  const std::vector<std::string> kFinalResponseError = {$/;"	m	class:ModemServiceTest	typeref:typename:const std::vector<std::string>	file:
+kFinalResponseSuccess	host/commands/modem_simulator/unittest/service_test.cpp	/^  const std::vector<std::string> kFinalResponseSuccess = {"OK", "CONNECT", "> "};$/;"	m	class:ModemServiceTest	typeref:typename:const std::vector<std::string>	file:
+kFlagConsumed	common/libs/utils/flag_parser.h	/^    kFlagConsumed,              \/* Flag processed; consume one argument. *\/$/;"	e	enum:cuttlefish::Flag::FlagProcessResult
+kFlagConsumedWithFollowing	common/libs/utils/flag_parser.h	/^    kFlagConsumedWithFollowing, \/* Flag processed; consume 2 arguments. *\/$/;"	e	enum:cuttlefish::Flag::FlagProcessResult
+kFlagConsumesFollowing	common/libs/utils/flag_parser.h	/^  kFlagConsumesFollowing,$/;"	e	enum:cuttlefish::FlagAliasMode
+kFlagError	common/libs/utils/flag_parser.h	/^    kFlagError,$/;"	e	enum:cuttlefish::Flag::FlagProcessResult
+kFlagExact	common/libs/utils/flag_parser.h	/^  kFlagExact,$/;"	e	enum:cuttlefish::FlagAliasMode
+kFlagPrefix	common/libs/utils/flag_parser.h	/^  kFlagPrefix,$/;"	e	enum:cuttlefish::FlagAliasMode
+kFlagSkip	common/libs/utils/flag_parser.h	/^    kFlagSkip,                  \/* Flag skipped; consume no arguments. *\/$/;"	e	enum:cuttlefish::Flag::FlagProcessResult
+kFlags	host/libs/config/fetcher_config.cpp	/^const char* kFlags = "flags";$/;"	v	namespace:cuttlefish::__anonf7286d770111	typeref:typename:const char *
+kFlashInfo	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kFlashInfo = ANDROID_FLASH_INFO_AVAILABLE_FALSE;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kFlashMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kFlashMode = ANDROID_FLASH_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kFocusDistanceCalibration	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kFocusDistanceCalibration =$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kFooterSizeBytes	host/commands/modem_simulator/sim_service.cpp	/^constexpr int kFooterSizeBytes = 14;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kForwardPath	host/frontend/webrtc_operator/server.cpp	/^const constexpr auto kForwardPath = "\/forward";$/;"	v	namespace:__anon477f946a0111	typeref:typename:const auto
+kForwardType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kForwardType = "forward";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kFragments	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kFragments[] = "fragments";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kGSMSignalStrength	host/commands/modem_simulator/network_service.cpp	/^const std::pair<int, int> kGSMSignalStrength = std::make_pair(4, 30);$/;"	v	namespace:cuttlefish	typeref:typename:const std::pair<int,int>
+kGdbPort	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kGdbPort[] = "gdb_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kGetNodes	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kGetNodes = 7,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kGlLib	host/libs/graphics_detector/graphics_detector.cpp	/^constexpr const char kGlLib[] = "libOpenGL.so.0";$/;"	v	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:const char[]
+kGles1Lib	host/libs/graphics_detector/graphics_detector.cpp	/^constexpr const char kGles1Lib[] = "libGLESv1_CM.so.1";$/;"	v	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:const char[]
+kGles2Lib	host/libs/graphics_detector/graphics_detector.cpp	/^constexpr const char kGles2Lib[] = "libGLESv2.so.2";$/;"	v	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:const char[]
+kGnssFilePath	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kGnssFilePath[] = "gnss_file_path";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kGnssGrpcProxyServerPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kGnssGrpcProxyServerPort[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kGoogleDynamicPartitions	host/commands/assemble_cvd/misc_info.cc	/^static constexpr const char* kGoogleDynamicPartitions =$/;"	v	namespace:cuttlefish	typeref:typename:const char *	file:
+kGpuCaptureBinary	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kGpuCaptureBinary[] = "gpu_capture_binary";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kGpuMode	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kGpuMode[] = "gpu_mode";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kGpuModeAuto	host/libs/config/cuttlefish_config.cpp	/^const char* const kGpuModeAuto = "auto";$/;"	v	namespace:cuttlefish	typeref:typename:const char * const
+kGpuModeDrmVirgl	host/libs/config/cuttlefish_config.cpp	/^const char* const kGpuModeDrmVirgl = "drm_virgl";$/;"	v	namespace:cuttlefish	typeref:typename:const char * const
+kGpuModeGfxStream	host/libs/config/cuttlefish_config.cpp	/^const char* const kGpuModeGfxStream = "gfxstream";$/;"	v	namespace:cuttlefish	typeref:typename:const char * const
+kGpuModeGuestSwiftshader	host/libs/config/cuttlefish_config.cpp	/^const char* const kGpuModeGuestSwiftshader = "guest_swiftshader";$/;"	v	namespace:cuttlefish	typeref:typename:const char * const
+kGreenColor	host/commands/run_cvd/reporting.cpp	/^static constexpr char kGreenColor[] = "\\033[1;32m";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kGrubBlobTable	host/libs/config/data_image.cpp	/^const std::pair<std::string, std::string> kGrubBlobTable[] = {$/;"	v	namespace:cuttlefish::__anoned36ed9d0111	typeref:typename:const std::pair<std::string,std::string>[]
+kGuestAuditSecurity	host/libs/config/cuttlefish_config.cpp	/^const char* kGuestAuditSecurity = "guest_audit_security";$/;"	v	namespace:cuttlefish	typeref:typename:const char *
+kGuestBootCompleted	host/commands/run_cvd/boot_state_machine.cc	/^  static const int kGuestBootCompleted = 1 << 0;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:const int	file:
+kGuestBootFailed	host/commands/run_cvd/boot_state_machine.cc	/^  static const int kGuestBootFailed = 1 << 1;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:const int	file:
+kGuestEnforceSecurity	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kGuestEnforceSecurity[] = "guest_enforce_security";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kHalAbort	host/libs/confui/server_common.h	/^  kHalAbort,$/;"	e	enum:cuttlefish::confui::FsmInput
+kHalFormats	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kHalFormats[] = {HAL_PIXEL_FORMAT_BLOB,$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kHalStart	host/libs/confui/server_common.h	/^  kHalStart,$/;"	e	enum:cuttlefish::confui::FsmInput
+kHalStop	host/libs/confui/server_common.h	/^  kHalStop,$/;"	e	enum:cuttlefish::confui::FsmInput
+kHalUnknown	host/libs/confui/server_common.h	/^  kHalUnknown$/;"	e	enum:cuttlefish::confui::FsmInput
+kHandle	host/commands/secure_env/fragile_tpm_storage.cpp	/^static constexpr char kHandle[] = "handle";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kHardwareField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kHardwareField = "hardware";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kHardwarelevel	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kHardwarelevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kHelpBin	host/commands/cvd/main.cc	/^constexpr char kHelpBin[] = "help_placeholder";  \/\/ Unused, prints kHelpMessage.$/;"	v	namespace:cuttlefish::__anon483fb9980111	typeref:typename:char[]
+kHelpMessage	host/commands/cvd/main.cc	/^constexpr char kHelpMessage[] = R"(Cuttlefish Virtual Device (CVD) CLI.$/;"	v	namespace:cuttlefish::__anon483fb9980111	typeref:typename:char[]
+kHostBugreportBin	host/commands/cvd/main.cc	/^constexpr char kHostBugreportBin[] = "cvd_internal_host_bugreport";$/;"	v	namespace:cuttlefish::__anon483fb9980111	typeref:typename:char[]
+kHostPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kHostPort[] = "adb_host_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kHostToolsVersion	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kHostToolsVersion[] = "host_tools_version";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kHotPixelMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kHotPixelMode = ANDROID_HOT_PIXEL_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kInSession	host/libs/confui/server_common.h	/^  kInSession = 2,$/;"	e	enum:cuttlefish::confui::MainLoopState
+kIncorrectUTF8	common/libs/confui/protocol_types.h	/^  static constexpr char kIncorrectUTF8[] = "msg_incorrect_utf8";$/;"	m	struct:cuttlefish::confui::HostError	typeref:typename:char[]
+kInformationalPatterns	host/commands/kernel_log_monitor/kernel_log_server.cc	/^} kInformationalPatterns[] = {$/;"	v	namespace:__anonfa7764770111	typeref:struct:__anonfa7764770111::__anonfa7764770208[]
+kInfraConfigPath	host/frontend/webrtc_operator/server.cpp	/^const constexpr auto kInfraConfigPath = "\/infra_config";$/;"	v	namespace:__anon477f946a0111	typeref:typename:const auto
+kInit	host/libs/confui/server_common.h	/^  kInit = 1,$/;"	e	enum:cuttlefish::confui::MainLoopState
+kInitRamFsConcatError	host/commands/run_cvd/runner_defs.h	/^  kInitRamFsConcatError = 22,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kInitramfsImg	host/commands/assemble_cvd/assemble_cvd.cc	/^const std::string kInitramfsImg = "initramfs.img";$/;"	v	namespace:cuttlefish::__anon1e335d460111	typeref:typename:const std::string
+kInputChannelLabel	host/frontend/webrtc/lib/client_handler.cpp	/^static constexpr auto kInputChannelLabel = "input-channel";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anond0fc42ea0111	typeref:typename:auto	file:
+kInsecure	host/frontend/webrtc/lib/ws_connection.h	/^    kInsecure,$/;"	e	enum:WsConnection::Security
+kInstanceDir	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kInstanceDir[] = "instance_dir";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kInstanceDirCreationError	host/commands/run_cvd/runner_defs.h	/^  kInstanceDirCreationError = 4,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kInstances	host/commands/modem_simulator/nvram_config.cpp	/^const char* kInstances            = "instances";$/;"	v	namespace:cuttlefish	typeref:typename:const char *
+kInstances	host/libs/config/cuttlefish_config.cpp	/^const char* kInstances = "instances";$/;"	v	namespace:cuttlefish::__anon2cec80f10111	typeref:typename:const char *
+kInstances	host/libs/config/cuttlefish_config_instance.cpp	/^const char* kInstances = "instances";$/;"	v	namespace:cuttlefish::__anon3442b2250111	typeref:typename:const char *
+kInterfaceDown	guest/hals/ril/reference-ril/reference-ril.c	/^    kInterfaceDown,$/;"	e	enum:InterfaceState	file:
+kInterfaceUp	guest/hals/ril/reference-ril/reference-ril.c	/^    kInterfaceUp,$/;"	e	enum:InterfaceState	file:
+kInternalDirName	host/libs/config/cuttlefish_config.h	/^constexpr char kInternalDirName[] = "internal";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kInvalid	host/libs/confui/server_common.h	/^  kInvalid = 9$/;"	e	enum:cuttlefish::confui::MainLoopState
+kInvalid	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kInvalid = 0,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kInvalidHostConfiguration	host/commands/metrics/metrics_defs.h	/^  kInvalidHostConfiguration=2,$/;"	e	enum:cuttlefish::MetricsExitCodes
+kInvalidHostConfiguration	host/commands/run_cvd/runner_defs.h	/^  kInvalidHostConfiguration = 2,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kIsTouchField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kIsTouchField = "is_touch";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kJpegAvailableThumbnailSizes	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kJpegAvailableThumbnailSizes[] = {0, 0, 240, 180};$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kJpegOrientation	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kJpegOrientation = 0;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t
+kJpegQuality	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kJpegQuality = 90;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kKernelDecompressError	host/commands/run_cvd/runner_defs.h	/^  kKernelDecompressError = 17,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kKernelDefaultPath	host/commands/assemble_cvd/assemble_cvd.cc	/^const std::string kKernelDefaultPath = "kernel";$/;"	v	namespace:cuttlefish::__anon1e335d460111	typeref:typename:const std::string
+kKernelLoadedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kKernelLoadedMessage[] = "] Linux version";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kKey	host/commands/secure_env/fragile_tpm_storage.cpp	/^static constexpr char kKey[] = "key";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kKey	host/commands/secure_env/insecure_fallback_storage.cpp	/^static constexpr char kKey[] = "key";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kKeyValuePair	host/commands/kernel_log_monitor/kernel_log_server.cc	/^  kKeyValuePair,  \/\/ <stage> <key>=<value>$/;"	e	enum:__anonfa7764770111::EventFormat	file:
+kKeyboardServerPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kKeyboardServerPort[] = "keyboard_server_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kKgdb	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kKgdb[] = "kgdb";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kKnownMissingAidl	tests/hal/hal_implementation_test.cpp	/^static const std::set<VersionedAidlPackage> kKnownMissingAidl = {$/;"	v	typeref:typename:const std::set<VersionedAidlPackage>	file:
+kKnownMissingHidl	tests/hal/hal_implementation_test.cpp	/^static const std::set<std::string> kKnownMissingHidl = {$/;"	v	typeref:typename:const std::set<std::string>	file:
+kLTESignalStrength	host/commands/modem_simulator/network_service.cpp	/^const std::pair<int, int> kLTESignalStrength = std::make_pair(4, 30);$/;"	v	namespace:cuttlefish	typeref:typename:const std::pair<int,int>
+kLensMinFocusDistance	guest/hals/camera/vsock_camera_metadata.cpp	/^const float kLensMinFocusDistance = 0.0f;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const float
+kLensShadingMapMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kLensShadingMapMode =$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kLinuxDmabufVersion	host/libs/wayland/wayland_dmabuf.cpp	/^constexpr uint32_t kLinuxDmabufVersion = 2;$/;"	v	namespace:wayland::__anon8f5be4990111	typeref:typename:uint32_t
+kLinuxFilesystem	host/libs/image_aggregator/image_aggregator.h	/^  kLinuxFilesystem = 0,$/;"	e	enum:cuttlefish::ImagePartitionType
+kListDevicesUriPath	host/frontend/webrtc_operator/server.cpp	/^constexpr auto kListDevicesUriPath = "\/devices";$/;"	v	namespace:__anon477f946a0111	typeref:typename:auto
+kLocalChannelId	host/frontend/webrtc_operator/assets/js/adb.js	/^const kLocalChannelId = 666;$/;"	C
+kLogAlignment	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^constexpr int kLogAlignment = 6;  \/\/ multiple of 2^6$/;"	v	namespace:cuttlefish::__anonfb30483e0111	typeref:typename:int
+kLogcatSerialMode	host/libs/config/cuttlefish_config.h	/^constexpr char kLogcatSerialMode[] = "serial";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kLogcatServerError	host/commands/run_cvd/runner_defs.h	/^  kLogcatServerError = 18,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kLogcatVsockMode	host/libs/config/cuttlefish_config.h	/^constexpr char kLogcatVsockMode[] = "vsock";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kMacAddrStringSize	host/commands/wmediumd_control/main.cpp	/^const int kMacAddrStringSize = 17;$/;"	v	typeref:typename:const int
+kMax	host/libs/confui/cbor.h	/^  const std::uint32_t kMax = static_cast<std::uint32_t>(MessageSize::MAX);$/;"	m	class:cuttlefish::confui::Cbor	typeref:typename:const std::uint32_t
+kMaxCommandLength	host/commands/modem_simulator/channel_monitor.cpp	/^constexpr int32_t kMaxCommandLength = 4096;$/;"	v	namespace:cuttlefish	typeref:typename:int32_t
+kMaxDisks	host/libs/vm_manager/vm_manager.h	/^  static const int kMaxDisks = 3;$/;"	m	class:cuttlefish::vm_manager::VmManager	typeref:typename:const int
+kMaxFaceCount	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kMaxFaceCount = 0;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t
+kMaxIfaceNameId	host/libs/allocd/alloc_utils.h	/^constexpr uint32_t kMaxIfaceNameId = 63;$/;"	v	namespace:cuttlefish	typeref:typename:uint32_t
+kMaxLatency	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kMaxLatency = ANDROID_SYNC_MAX_LATENCY_UNKNOWN;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t
+kMaxLogicalChannels	host/commands/modem_simulator/sim_service.cpp	/^constexpr int kMaxLogicalChannels = 3;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kMaxMessageLength	common/libs/confui/protocol_types.h	/^constexpr const ssize_t kMaxMessageLength = packet::kMaxPayloadLength;$/;"	v	namespace:cuttlefish::confui	typeref:typename:const ssize_t
+kMaxNumberSizeBytes	host/commands/modem_simulator/sim_service.cpp	/^constexpr int kMaxNumberSizeBytes = 11;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kMaxPacketSize	common/frontend/socket_vsock_proxy/main.cpp	/^constexpr std::size_t kMaxPacketSize = 8192;$/;"	v	typeref:typename:std::size_t
+kMaxPayloadLength	common/libs/confui/packet_types.h	/^constexpr const ssize_t kMaxPayloadLength = 10000;$/;"	v	namespace:cuttlefish::confui::packet	typeref:typename:const ssize_t
+kMemoryMb	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kMemoryMb[] = "memory_mb";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kMessageTooLongError	common/libs/confui/protocol_types.h	/^  static constexpr char kMessageTooLongError[] = "msg_too_long_error";$/;"	m	struct:cuttlefish::confui::HostError	typeref:typename:char[]
+kMetricsBinary	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kMetricsBinary[] = "metrics_binary";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kMetricsError	host/commands/metrics/metrics_defs.h	/^  kMetricsError=1,$/;"	e	enum:cuttlefish::MetricsExitCodes
+kMinHeaderVersion	host/libs/allocd/utils.cpp	/^constexpr uint16_t kMinHeaderVersion = 1;$/;"	v	namespace:cuttlefish	typeref:typename:uint16_t
+kMiscInfoPath	host/commands/assemble_cvd/super_image_mixer.cc	/^const std::string kMiscInfoPath = "META\/misc_info.txt";$/;"	v	namespace:cuttlefish::__anonae6530d30111	typeref:typename:const std::string
+kMiscService	host/commands/modem_simulator/modem_service.h	/^  kMiscService    = 7,$/;"	e	enum:cuttlefish::ModemServiceType
+kMobileBridgeName	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kMobileBridgeName[] = "mobile_bridge_name";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kMobileIp	host/libs/allocd/alloc_utils.h	/^constexpr char kMobileIp[] = "192.168.97";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kMobileNetworkConnectedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kMobileNetworkConnectedMessage[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kMobileTapName	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kMobileTapName[] = "mobile_tap_name";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kMode	host/libs/config/adb/config.cpp	/^  static constexpr char kMode[] = "mode";$/;"	m	class:cuttlefish::__anone963d72d0111::AdbConfigFragmentImpl	typeref:typename:char[]	file:
+kModemSimulatorId	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kModemSimulatorId[] = "modem_simulator_host_id";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kModemSimulatorInstanceNumber	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kModemSimulatorInstanceNumber[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kModemSimulatorPorts	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kModemSimulatorPorts[] = "modem_simulator_ports";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kModemSimulatorServerError	host/commands/run_cvd/runner_defs.h	/^  kModemSimulatorServerError = 25,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kModemSimulatorSimType	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kModemSimulatorSimType[] = "modem_simulator_sim_type";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kModemTechnoloy	host/commands/modem_simulator/nvram_config.cpp	/^const char* kModemTechnoloy       = "modem_technoloy";$/;"	v	namespace:cuttlefish	typeref:typename:const char *
+kMonitorCreationFailed	host/commands/run_cvd/runner_defs.h	/^  kMonitorCreationFailed = 13,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kNRSignalStrength	host/commands/modem_simulator/network_service.cpp	/^const std::pair<int, int> kNRSignalStrength = std::make_pair(45, 135);$/;"	v	namespace:cuttlefish	typeref:typename:const std::pair<int,int>
+kNetlink	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kNetlink = 4,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kNetmask	host/libs/allocd/resource.h	/^  static constexpr char kNetmask[] = "\/24";$/;"	m	class:cuttlefish::EthernetIface	typeref:typename:char[]
+kNetmask	host/libs/allocd/resource.h	/^  static constexpr char kNetmask[] = "\/30";$/;"	m	class:cuttlefish::MobileIface	typeref:typename:char[]
+kNetworkSelectionMode	host/commands/modem_simulator/nvram_config.cpp	/^const char* kNetworkSelectionMode = "network_selection_mode";$/;"	v	namespace:cuttlefish	typeref:typename:const char *
+kNetworkService	host/commands/modem_simulator/modem_service.h	/^  kNetworkService = 1,$/;"	e	enum:cuttlefish::ModemServiceType
+kNew	host/frontend/webrtc/lib/client_handler.h	/^      kNew,$/;"	e	enum:cuttlefish::webrtc_streaming::ClientHandler::State
+kNo	host/libs/config/cuttlefish_config.h	/^    kNo,$/;"	e	enum:cuttlefish::CuttlefishConfig::Answer
+kNoAction	host/libs/config/data_image.cpp	/^  enum class DataImageAction { kNoAction, kCreateImage, kResizeImage };$/;"	e	enum:cuttlefish::InitializeDataImageImpl::DataImageAction	file:
+kNoiseReductionMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kNoiseReductionMode = ANDROID_NOISE_REDUCTION_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kOemHookEnabled	guest/hals/ril/reference-libril/ril_service.cpp	/^constexpr bool kOemHookEnabled = false;$/;"	v	typeref:typename:bool
+kOemHookEnabled	guest/hals/ril/reference-libril/ril_service.cpp	/^constexpr bool kOemHookEnabled = true;$/;"	v	typeref:typename:bool
+kOperationTableSize	host/commands/secure_env/secure_env.cpp	/^constexpr size_t kOperationTableSize = 16;$/;"	v	namespace:cuttlefish::__anon0a6d9b510111	typeref:typename:size_t
+kOperatorNumeric	host/commands/modem_simulator/nvram_config.cpp	/^const char* kOperatorNumeric      = "operator_numeric";$/;"	v	namespace:cuttlefish	typeref:typename:const char *
+kOpticalStabilizationMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kOpticalStabilizationMode =$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kOrientation	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kOrientation = 0;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t
+kPartialResultCount	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kPartialResultCount = 1;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t
+kPayloadField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kPayloadField = "payload";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kPipeIOError	host/commands/run_cvd/runner_defs.h	/^  kPipeIOError = 10,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kPlanePadding	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^constexpr int kPlanePadding = 1024;$/;"	v	namespace:cuttlefish::__anonfb30483e0111	typeref:typename:int
+kPollPath	host/frontend/webrtc_operator/server.cpp	/^const constexpr auto kPollPath = "\/poll_messages";$/;"	v	namespace:__anon477f946a0111	typeref:typename:const auto
+kPollType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kPollType = "client_poll";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kPowerwash	host/commands/run_cvd/runner_defs.h	/^  kPowerwash = 'P',$/;"	e	enum:cuttlefish::LauncherAction
+kPreferredNetworkMode	host/commands/modem_simulator/nvram_config.cpp	/^const char* kPreferredNetworkMode = "preferred_network_mode";$/;"	v	namespace:cuttlefish	typeref:typename:const char *
+kPrioFilesCleanupError	host/commands/run_cvd/runner_defs.h	/^  kPrioFilesCleanupError = 5,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kProcessGroupError	host/commands/run_cvd/runner_defs.h	/^  kProcessGroupError = 12,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kProtectedVm	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kProtectedVm[] = "protected_vm";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kProtocolName	host/frontend/webrtc/lib/ws_connection.cpp	/^constexpr char kProtocolName[] = "cf-webrtc-device";$/;"	v	namespace:__anon14ee93270111	typeref:typename:char[]
+kProtocols	host/frontend/webrtc/lib/ws_connection.cpp	/^const struct lws_protocols kProtocols[2] = {$/;"	v	namespace:__anon14ee93270111	typeref:typename:const struct lws_protocols[2]
+kQemuBinaryDir	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kQemuBinaryDir[] = "qemu_binary_dir";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kQemuVncServerPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kQemuVncServerPort[] = "qemu_vnc_server_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRead	host/commands/modem_simulator/sms_service.h	/^    enum SmsStatus { kUnread = 0, kRead = 1, kUnsent = 2, kSent = 3 };$/;"	e	enum:cuttlefish::SmsService::SmsMessage::SmsStatus
+kRecordScreen	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kRecordScreen[] = "record_screen";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRecvFlags	host/libs/allocd/utils.h	/^static constexpr int kRecvFlags = 0;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kRefreshRateHz	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kRefreshRateHz[] = "refresh_rate_hz";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRegister	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kRegister = 2,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kRegisterDeviceUriPath	host/frontend/webrtc_operator/server.cpp	/^constexpr auto kRegisterDeviceUriPath = "\/register_device";$/;"	v	namespace:__anon477f946a0111	typeref:typename:auto
+kRegisterType	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kRegisterType = "register";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kRegistrationRetries	host/frontend/webrtc/lib/streamer.cpp	/^constexpr int kRegistrationRetries = 3;$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:int
+kReloadConfig	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kReloadConfig = 9,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kReloadCurrentConfig	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kReloadCurrentConfig = 10,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kRemotePortRange	host/commands/modem_simulator/modem_service.cpp	/^const std::pair<int, int> ModemService::kRemotePortRange =$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::pair<int,int>
+kRemotePortRange	host/commands/modem_simulator/modem_service.h	/^  static const std::pair<int, int> kRemotePortRange;$/;"	m	class:cuttlefish::ModemService	typeref:typename:const std::pair<int,int>
+kRequestMaxNumInputStreams	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kRequestMaxNumInputStreams = 0;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t
+kRequestMaxNumOutputStreams	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kRequestMaxNumOutputStreams[] = {$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kRequestPipelineMaxDepth	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kRequestPipelineMaxDepth = 4;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kRequestSequenceNumber	common/libs/net/netlink_request.cpp	/^uint32_t kRequestSequenceNumber = 0;$/;"	v	namespace:cuttlefish::__anonf2157dfa0111	typeref:typename:uint32_t
+kResetColor	host/commands/run_cvd/reporting.cpp	/^static constexpr char kResetColor[] = "\\033[0m";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kResizeImage	host/libs/config/data_image.cpp	/^  enum class DataImageAction { kNoAction, kCreateImage, kResizeImage };$/;"	e	enum:cuttlefish::InitializeDataImageImpl::DataImageAction	file:
+kRestart	host/commands/run_cvd/runner_defs.h	/^  kRestart = 'R',$/;"	e	enum:cuttlefish::LauncherAction
+kRestartSubprocesses	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kRestartSubprocesses[] = "restart_subprocesses";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRetries	common/libs/device_config/guest_device_config.cpp	/^static constexpr int kRetries = 5;$/;"	v	namespace:cuttlefish::__anon4ec25d870111	typeref:typename:int	file:
+kRetry	host/frontend/webrtc/lib/ws_connection.cpp	/^const lws_retry_bo_t kRetry = {$/;"	v	namespace:__anon14ee93270111	typeref:typename:const lws_retry_bo_t
+kRetryDelaySeconds	common/libs/device_config/guest_device_config.cpp	/^static constexpr int kRetryDelaySeconds = 5;$/;"	v	namespace:cuttlefish::__anon4ec25d870111	typeref:typename:int	file:
+kRetryFirstIntervalMs	host/frontend/webrtc/lib/streamer.cpp	/^constexpr int kRetryFirstIntervalMs = 1000;$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:int
+kRilDns	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kRilDns[] = "ril_dns";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRootcanalConfigFile	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kRootcanalConfigFile[] = "rootcanal_config_file";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRootcanalDefaultCommandsFile	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kRootcanalDefaultCommandsFile[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRootcanalHciPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kRootcanalHciPort[] = "rootcanal_hci_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRootcanalLinkPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kRootcanalLinkPort[] = "rootcanal_link_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRootcanalTestPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kRootcanalTestPort[] = "rootcanal_test_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRtpTicksPerMs	host/frontend/webrtc/lib/local_recorder.cpp	/^constexpr double kRtpTicksPerMs = kRtpTicksPerSecond \/ 1000.;$/;"	v	namespace:cuttlefish::webrtc_streaming	typeref:typename:double
+kRtpTicksPerNs	host/frontend/webrtc/lib/local_recorder.cpp	/^constexpr double kRtpTicksPerNs = kRtpTicksPerUs \/ 1000.;$/;"	v	namespace:cuttlefish::webrtc_streaming	typeref:typename:double
+kRtpTicksPerSecond	host/frontend/webrtc/lib/local_recorder.cpp	/^constexpr double kRtpTicksPerSecond = 90000.;$/;"	v	namespace:cuttlefish::webrtc_streaming	typeref:typename:double
+kRtpTicksPerUs	host/frontend/webrtc/lib/local_recorder.cpp	/^constexpr double kRtpTicksPerUs = kRtpTicksPerMs \/ 1000.;$/;"	v	namespace:cuttlefish::webrtc_streaming	typeref:typename:double
+kRunAsDaemon	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kRunAsDaemon[] = "run_as_daemon";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRunModemSimulator	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kRunModemSimulator[] = "enable_modem_simulator";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kRunnerBin	host/commands/start/main.cc	/^std::string kRunnerBin = cuttlefish::HostBinaryPath("run_cvd");$/;"	v	namespace:__anon8e1e78490111	typeref:typename:std::string
+kSRIAndMMSIndicator	host/commands/modem_simulator/pdu_parser.cpp	/^static const std::string kSRIAndMMSIndicator              = "24";  \/* SRI is 1 && MMS is 1*\/$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kScalerAvailableMaxDigitalZoom	guest/hals/camera/vsock_camera_metadata.cpp	/^const float kScalerAvailableMaxDigitalZoom[] = {1};$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const float[]
+kScreenChangedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kScreenChangedMessage[] = "VIRTUAL_DEVICE_SCREEN_CHANGED";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kSeatVersion	host/libs/wayland/wayland_seat.cpp	/^constexpr const uint32_t kSeatVersion = 6;$/;"	v	namespace:wayland::__anona9f16c970111	typeref:typename:const uint32_t
+kSeccompDir	host/commands/assemble_cvd/flags.cc	/^static const std::string kSeccompDir = std::string("usr\/share\/crosvm\/") +$/;"	v	typeref:typename:const std::string	file:
+kSeccompPolicyDir	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSeccompPolicyDir[] = "seccomp_policy_dir";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSecureHals	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSecureHals[] = "secure_hals";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSelectError	host/commands/modem_simulator/channel_monitor.h	/^  kSelectError = 1,$/;"	e	enum:cuttlefish::ModemSimulatorExitCodes
+kSendFlags	host/libs/allocd/utils.h	/^static constexpr int kSendFlags = 0;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kSent	host/commands/modem_simulator/sms_service.h	/^    enum SmsStatus { kUnread = 0, kRead = 1, kUnsent = 2, kSent = 3 };$/;"	e	enum:cuttlefish::SmsService::SmsMessage::SmsStatus
+kSerialNumber	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kSerialNumber[] = "serial_number";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kServerError	host/commands/modem_simulator/channel_monitor.h	/^  kServerError = 2,$/;"	e	enum:cuttlefish::ModemSimulatorExitCodes
+kServerError	host/commands/run_cvd/runner_defs.h	/^  kServerError = 14,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kServersField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kServersField = "ice_servers";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kSessionId	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kSessionId[] = "session_id";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSetControl	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kSetControl = 5,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kSetSnr	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kSetSnr = 8,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kSetupWizardMode	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSetupWizardMode[] = "setupwizard_mode";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSharedDirName	host/libs/config/cuttlefish_config.h	/^constexpr char kSharedDirName[] = "shared";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kSigServerAddress	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSigServerAddress[] = "webrtc_sig_server_addr";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSigServerHeadersPath	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSigServerHeadersPath[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSigServerPath	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSigServerPath[] = "webrtc_sig_server_path";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSigServerPort	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSigServerPort[] = "webrtc_sig_server_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSigServerSecure	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSigServerSecure[] = "webrtc_sig_server_secure";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSigServerStrict	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSigServerStrict[] = "webrtc_sig_server_strict";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSimPinMaxRetryTimes	host/commands/modem_simulator/sim_service.cpp	/^constexpr int kSimPinMaxRetryTimes = 3;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kSimPinSizeRange	host/commands/modem_simulator/sim_service.cpp	/^const std::pair<int, int> kSimPinSizeRange(4, 8);$/;"	v	namespace:cuttlefish	typeref:typename:const std::pair<int,int>
+kSimPukMaxRetryTimes	host/commands/modem_simulator/sim_service.cpp	/^constexpr int kSimPukMaxRetryTimes = 10;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kSimPukSize	host/commands/modem_simulator/sim_service.cpp	/^constexpr int kSimPukSize = 8;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kSimService	host/commands/modem_simulator/modem_service.h	/^  kSimService     = 0,$/;"	e	enum:cuttlefish::ModemServiceType
+kSimType	host/commands/modem_simulator/nvram_config.cpp	/^const char* kSimType              = "sim_type";$/;"	v	namespace:cuttlefish	typeref:typename:const char *
+kSize	guest/hals/ril/reference-ril/reference-ril.c	/^#define kSize /;"	d	file:
+kSmsService	host/commands/modem_simulator/modem_service.h	/^  kSmsService     = 4,$/;"	e	enum:cuttlefish::ModemServiceType
+kSmt	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kSmt[] = "smt";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kSocketMode	host/libs/allocd/alloc_utils.h	/^constexpr int kSocketMode = 0666;$/;"	v	namespace:cuttlefish	typeref:typename:int
+kSocketProxyServerError	host/commands/run_cvd/runner_defs.h	/^  kSocketProxyServerError = 26,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kStageTable	host/commands/kernel_log_monitor/kernel_log_server.cc	/^} kStageTable[] = {$/;"	v	namespace:__anonfa7764770111	typeref:struct:__anonfa7764770111::__anonfa7764770308[]
+kStart	common/libs/confui/protocol_types.h	/^  kStart = 111,   \/\/ start rendering, send confirmation msg, & wait respond$/;"	e	enum:cuttlefish::confui::ConfUiCmd
+kStartAp	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kStartAp[] = "start_ap";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kStartBin	host/commands/cvd/main.cc	/^constexpr char kStartBin[] = "cvd_internal_start";$/;"	v	namespace:cuttlefish::__anon483fb9980111	typeref:typename:char[]
+kStartSigServer	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kStartSigServer[] = "webrtc_start_sig_server";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kStartWmediumd	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kStartWmediumd[] = "start_wmediumd";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kStatus	host/commands/run_cvd/runner_defs.h	/^  kStatus = 'I',$/;"	e	enum:cuttlefish::LauncherAction
+kStatusBin	host/commands/cvd/main.cc	/^constexpr char kStatusBin[] = "cvd_internal_status";$/;"	v	namespace:cuttlefish::__anon483fb9980111	typeref:typename:char[]
+kStatusReportIndicator	host/commands/modem_simulator/pdu_parser.cpp	/^static const std::string kStatusReportIndicator           = "06";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kStdErr	common/libs/utils/subprocess.h	/^    kStdErr = 2,$/;"	e	enum:cuttlefish::Subprocess::StdIOChannel
+kStdIn	common/libs/utils/subprocess.h	/^    kStdIn = 0,$/;"	e	enum:cuttlefish::Subprocess::StdIOChannel
+kStdOut	common/libs/utils/subprocess.h	/^    kStdOut = 1,$/;"	e	enum:cuttlefish::Subprocess::StdIOChannel
+kStkService	host/commands/modem_simulator/modem_service.h	/^  kStkService     = 6,$/;"	e	enum:cuttlefish::ModemServiceType
+kStop	common/libs/confui/protocol_types.h	/^  kStop = 112,    \/\/ start rendering, send confirmation msg, & wait respond$/;"	e	enum:cuttlefish::confui::ConfUiCmd
+kStop	host/commands/run_cvd/runner_defs.h	/^  kStop = 'X',$/;"	e	enum:cuttlefish::LauncherAction
+kStopBin	host/commands/cvd/main.cc	/^constexpr char kStopBin[] = "cvd_internal_stop";$/;"	v	namespace:cuttlefish::__anon483fb9980111	typeref:typename:char[]
+kStopCrash	common/libs/utils/subprocess.h	/^  kStopCrash,   \/* Attempted to stop the subprocess cleanly, but that failed. *\/$/;"	e	enum:cuttlefish::StopperResult
+kStopFailure	common/libs/utils/subprocess.h	/^  kStopFailure, \/* Failed to stop the subprocess. *\/$/;"	e	enum:cuttlefish::StopperResult
+kStopSuccess	common/libs/utils/subprocess.h	/^  kStopSuccess, \/* The subprocess exited in the expected way. *\/$/;"	e	enum:cuttlefish::StopperResult
+kStreamIdField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kStreamIdField = "stream_id";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kStrict	host/frontend/webrtc/lib/ws_connection.h	/^    kStrict,$/;"	e	enum:WsConnection::Security
+kStunPrefix	host/frontend/webrtc_operator/server_config.cpp	/^  constexpr auto kStunPrefix = "stun:";$/;"	v	namespace:cuttlefish::__anonc6b6781f0111	typeref:typename:auto
+kSuccess	host/commands/metrics/metrics_defs.h	/^  kSuccess=0,$/;"	e	enum:cuttlefish::MetricsExitCodes
+kSuccess	host/commands/modem_simulator/channel_monitor.h	/^  kSuccess = 0,$/;"	e	enum:cuttlefish::ModemSimulatorExitCodes
+kSuccess	host/commands/run_cvd/runner_defs.h	/^  kSuccess = 'S',$/;"	e	enum:cuttlefish::LauncherResponse
+kSuccess	host/commands/run_cvd/runner_defs.h	/^  kSuccess = 0,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kSupService	host/commands/modem_simulator/modem_service.h	/^  kSupService     = 5,$/;"	e	enum:cuttlefish::ModemServiceType
+kSuperPartitionGroups	host/commands/assemble_cvd/misc_info.cc	/^static constexpr const char* kSuperPartitionGroups = "super_partition_groups";$/;"	v	namespace:cuttlefish	typeref:typename:const char *	file:
+kSurfacelessContextExt	host/libs/graphics_detector/graphics_detector.cpp	/^constexpr const char kSurfacelessContextExt[] = "EGL_KHR_surfaceless_context";$/;"	v	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:const char[]
+kSystemError	common/libs/confui/protocol_types.h	/^  static constexpr char kSystemError[] = "system_error";$/;"	m	struct:cuttlefish::confui::HostError	typeref:typename:char[]
+kTapDeviceInUse	host/commands/run_cvd/runner_defs.h	/^  kTapDeviceInUse = 23,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kTargetArch	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kTargetArch[] = "target_arch";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kTemplateToIntent	guest/hals/camera/vsock_camera_metadata.cpp	/^const std::map<RequestTemplate, uint8_t> kTemplateToIntent = {$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const std::map<RequestTemplate,uint8_t>
+kTerminated	host/libs/confui/server_common.h	/^  kTerminated = 8,$/;"	e	enum:cuttlefish::confui::MainLoopState
+kTestPatternMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kTestPatternMode = ANDROID_SENSOR_TEST_PATTERN_MODE_OFF;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t
+kTestPatternModes	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kTestPatternModes[] = {ANDROID_SENSOR_TEST_PATTERN_MODE_OFF};$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kThumbnailSize	guest/hals/camera/vsock_camera_metadata.cpp	/^const int32_t kThumbnailSize[] = {240, 180};$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const int32_t[]
+kTimestampSource	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kTimestampSource = ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN;$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kTombstoneDirCreationError	host/commands/run_cvd/runner_defs.h	/^  kTombstoneDirCreationError = 21,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kTombstoneReceiverPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kTombstoneReceiverPort[] = "tombstone_receiver_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kTombstoneServerError	host/commands/run_cvd/runner_defs.h	/^  kTombstoneServerError = 20,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kTouchEvent	common/libs/confui/protocol_types.h	/^  constexpr static const auto kTouchEvent = "user_touch";$/;"	m	struct:cuttlefish::confui::UserResponse	typeref:typename:const auto
+kTouchServerPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kTouchServerPort[] = "touch_server_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kTpmDevice	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kTpmDevice[] = "tpm_device";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kTpmPassthroughError	host/commands/run_cvd/runner_defs.h	/^  kTpmPassthroughError = 24,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kTxStart	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kTxStart = 6,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kTypeField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kTypeField = "message_type";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kUDHIAndSRIAndMMSIndicator	host/commands/modem_simulator/pdu_parser.cpp	/^static const std::string kUDHIAndSRIAndMMSIndicator       = "64";  \/* UDHI is 1 && SRI is 1 && /;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kUIError	common/libs/confui/protocol_types.h	/^  static constexpr char kUIError[] = "ui_error";$/;"	m	struct:cuttlefish::confui::HostError	typeref:typename:char[]
+kUngetSize	common/libs/fs/shared_fd_stream.h	/^  static constexpr const ptrdiff_t kUngetSize = 128;$/;"	m	class:cuttlefish::SharedFDStreambuf	typeref:typename:const ptrdiff_t
+kUniqueKey	host/commands/secure_env/json_serializable.cpp	/^static constexpr char kUniqueKey[] = "JsonSerializable";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kUniqueKey	host/commands/secure_env/tpm_key_blob_maker.cpp	/^static constexpr char kUniqueKey[] = "TpmKeyBlobMaker";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kUnknown	common/libs/confui/protocol_types.h	/^  constexpr static const auto kUnknown = "user_unknown";$/;"	m	struct:cuttlefish::confui::UserResponse	typeref:typename:const auto
+kUnknown	common/libs/confui/protocol_types.h	/^  kUnknown = 100,$/;"	e	enum:cuttlefish::confui::ConfUiCmd
+kUnknown	host/libs/config/cuttlefish_config.h	/^    kUnknown = 0,$/;"	e	enum:cuttlefish::CuttlefishConfig::Answer
+kUnknownAction	host/commands/run_cvd/runner_defs.h	/^  kUnknownAction = 'U',$/;"	e	enum:cuttlefish::LauncherResponse
+kUnread	host/commands/modem_simulator/sms_service.h	/^    enum SmsStatus { kUnread = 0, kRead = 1, kUnsent = 2, kSent = 3 };$/;"	e	enum:cuttlefish::SmsService::SmsMessage::SmsStatus
+kUnregister	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  kUnregister = 3,$/;"	e	enum:cuttlefish::WmediumdMessageType
+kUnsent	host/commands/modem_simulator/sms_service.h	/^    enum SmsStatus { kUnread = 0, kRead = 1, kUnsent = 2, kSent = 3 };$/;"	e	enum:cuttlefish::SmsService::SmsMessage::SmsStatus
+kUrlsField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kUrlsField = "urls";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kUsbV1SocketError	host/commands/run_cvd/runner_defs.h	/^  kUsbV1SocketError = 15,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kUseAllocd	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kUseAllocd[] = "use_allocd";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kUserAbort	common/libs/confui/protocol_types.h	/^  constexpr static const auto kUserAbort = "user_abort";$/;"	m	struct:cuttlefish::confui::UserResponse	typeref:typename:const auto
+kUserEvent	host/libs/confui/server_common.h	/^  kUserEvent = 1,$/;"	e	enum:cuttlefish::confui::FsmInput
+kUserInputEvent	common/libs/confui/protocol_types.h	/^  kUserInputEvent = 200,$/;"	e	enum:cuttlefish::confui::ConfUiCmd
+kUserTouchEvent	common/libs/confui/protocol_types.h	/^  kUserTouchEvent = 201$/;"	e	enum:cuttlefish::confui::ConfUiCmd
+kUserdataFormat	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kUserdataFormat[] = "userdata_format";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kUsernameField	host/frontend/webrtc_operator/constants/signaling_constants.h	/^constexpr auto kUsernameField = "username";$/;"	v	namespace:cuttlefish::webrtc_signaling	typeref:typename:auto
+kUuid	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kUuid[] = "uuid";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kVMCreationError	host/commands/run_cvd/runner_defs.h	/^  kVMCreationError = 9,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kValue	host/commands/secure_env/insecure_fallback_storage.cpp	/^static constexpr char kValue[] = "value";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kVehicleHalServerPort	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kVehicleHalServerPort[] = "vehicle_hal_server_port";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kVhciDev	guest/commands/bt_vhci_forwarder/main.cpp	/^constexpr const char* kVhciDev = "\/dev\/vhci";$/;"	v	typeref:typename:const char *
+kVhostNet	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kVhostNet[] = "vhost_net";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kVhostUserMac80211Hwsim	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kVhostUserMac80211Hwsim[] = "vhost_user_mac80211_hwsim";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kVideoStabilizationMode	guest/hals/camera/vsock_camera_metadata.cpp	/^const uint8_t kVideoStabilizationMode =$/;"	v	namespace:android::hardware::camera::device::V3_4::implementation::__anonc140734a0111	typeref:typename:const uint8_t
+kVirtualDeviceBootFailed	host/commands/run_cvd/runner_defs.h	/^  kVirtualDeviceBootFailed = 11,$/;"	e	enum:cuttlefish::RunnerExitCodes
+kVirtualDiskPaths	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kVirtualDiskPaths[] = "virtual_disk_paths";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kVmManager	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kVmManager[] = "vm_manager";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kVsocUserPrefix	host/libs/config/cuttlefish_config.h	/^constexpr char kVsocUserPrefix[] = "vsoc-";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kVsockGuestCid	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kVsockGuestCid[] = "vsock_guest_cid";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kVulkanLib	host/libs/graphics_detector/graphics_detector.cpp	/^constexpr const char kVulkanLib[] = "libvulkan.so.1";$/;"	v	namespace:cuttlefish::__anon29a199ff0111	typeref:typename:const char[]
+kWCDMASignalStrength	host/commands/modem_simulator/network_service.cpp	/^const std::pair<int, int> kWCDMASignalStrength = std::make_pair(4, 30);$/;"	v	namespace:cuttlefish	typeref:typename:const std::pair<int,int>
+kWaitStop	host/libs/confui/server_common.h	/^  kWaitStop = 3,  \/\/ wait ack after sending confirm\/cancel$/;"	e	enum:cuttlefish::confui::MainLoopState
+kWebRTCAssetsDir	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kWebRTCAssetsDir[] = "webrtc_assets_dir";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWebRTCCertsDir	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kWebRTCCertsDir[] = "webrtc_certs_dir";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWebRTCEnableADBWebSocket	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kWebRTCEnableADBWebSocket[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWebrtcDeviceId	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kWebrtcDeviceId[] = "webrtc_device_id";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWebrtcTcpPortRange	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kWebrtcTcpPortRange[] = "webrtc_tcp_port_range";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWebrtcUdpPortRange	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kWebrtcUdpPortRange[] = "webrtc_udp_port_range";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWifiConnectedMessage	host/libs/config/cuttlefish_config.h	/^constexpr char kWifiConnectedMessage[] =$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kWifiMacPrefix	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kWifiMacPrefix[] = "wifi_mac_prefix";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWifiTapName	host/libs/config/cuttlefish_config_instance.cpp	/^static constexpr char kWifiTapName[] = "wifi_tap_name";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWirelessIp	host/libs/allocd/alloc_utils.h	/^constexpr char kWirelessIp[] = "192.168.96";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+kWithoutServiceCenterAddress	host/commands/modem_simulator/pdu_parser.cpp	/^static const std::string kWithoutServiceCenterAddress     = "00";$/;"	v	namespace:cuttlefish	typeref:typename:const std::string	file:
+kWmediumdApiServerSocket	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kWmediumdApiServerSocket[] = "wmediumd_api_server_socket";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kWmediumdConfig	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kWmediumdConfig[] = "wmediumd_config";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kXRes	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kXRes[] = "x_res";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kXResField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kXResField = "x_res";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kYRes	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kYRes[] = "y_res";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kYResField	host/frontend/webrtc/lib/streamer.cpp	/^constexpr auto kYResField = "y_res";$/;"	v	namespace:cuttlefish::webrtc_streaming::__anonab9390d10111	typeref:typename:auto
+kYes	host/libs/config/cuttlefish_config.h	/^    kYes,$/;"	e	enum:cuttlefish::CuttlefishConfig::Answer
+keepaliveStatusInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::keepaliveStatusInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+kenableHostBluetooth	host/libs/config/cuttlefish_config.cpp	/^static constexpr char kenableHostBluetooth[] = "enable_host_bluetooth";$/;"	v	namespace:cuttlefish	typeref:typename:char[]	file:
+kernel_log_events_handler_	host/frontend/webrtc/connection_observer.cpp	/^  cuttlefish::KernelLogEventsHandler* kernel_log_events_handler_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:cuttlefish::KernelLogEventsHandler *	file:
+kernel_log_events_handler_	host/frontend/webrtc/connection_observer.h	/^  KernelLogEventsHandler* kernel_log_events_handler_;$/;"	m	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:KernelLogEventsHandler *
+kernel_log_events_pipe_	host/commands/run_cvd/launch_streamer.cpp	/^  SharedFD kernel_log_events_pipe_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:SharedFD	file:
+kernel_log_fd_	host/frontend/webrtc/kernel_log_events_handler.h	/^  SharedFD kernel_log_fd_;$/;"	m	struct:cuttlefish::KernelLogEventsHandler	typeref:typename:SharedFD
+kernel_log_pipe_	host/commands/run_cvd/launch.cc	/^  SharedFD kernel_log_pipe_;$/;"	m	class:cuttlefish::SecureEnvironment	typeref:typename:SharedFD	file:
+kernel_log_pipe_	host/libs/config/adb/launch.cpp	/^  SharedFD kernel_log_pipe_;$/;"	m	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:SharedFD	file:
+kernel_log_pipe_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::kernel_log_pipe_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+kernel_log_pipe_provider_	host/commands/run_cvd/boot_state_machine.cc	/^  KernelLogPipeProvider& kernel_log_pipe_provider_;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:KernelLogPipeProvider &	file:
+kernel_log_pipe_provider_	host/commands/run_cvd/launch.cc	/^  KernelLogPipeProvider& kernel_log_pipe_provider_;$/;"	m	class:cuttlefish::SecureEnvironment	typeref:typename:KernelLogPipeProvider &	file:
+kernel_log_subscription_id_	host/frontend/webrtc/connection_observer.cpp	/^  int kernel_log_subscription_id_ = -1;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:int	file:
+kernel_path_	host/libs/config/data_image.cpp	/^  std::string kernel_path_;$/;"	m	class:cuttlefish::InitializeEspImageImpl	typeref:typename:std::string	file:
+key	common/libs/utils/flag_parser.h	/^  std::string key;$/;"	m	struct:cuttlefish::FlagMatch	typeref:typename:std::string
+keyIdentifier	guest/hals/ril/reference-libril/ril.h	/^    char* keyIdentifier;       \/* The keyIdentifier Attribute value pair that helps$/;"	m	struct:__anon0bfbaecf2c08	typeref:typename:char *
+keyIdentifier	guest/hals/ril/reference-libril/ril.h	/^  char * keyIdentifier;               \/* The keyIdentifier Attribute value pair that helps$/;"	m	struct:__anon0bfbaecf2a08	typeref:typename:char *
+keyType	guest/hals/ril/reference-libril/ril.h	/^    RIL_PublicKeyType keyType; \/* Public key type *\/$/;"	m	struct:__anon0bfbaecf2c08	typeref:typename:RIL_PublicKeyType
+key_	host/commands/secure_env/soft_gatekeeper.h	/^    std::unique_ptr<uint8_t[]> key_;$/;"	m	class:gatekeeper::SoftGateKeeper	typeref:typename:std::unique_ptr<uint8_t[]>
+key_blob_maker_	host/commands/secure_env/tpm_keymaster_context.h	/^  std::unique_ptr<TpmKeyBlobMaker> key_blob_maker_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::unique_ptr<TpmKeyBlobMaker>
+key_factories_	host/commands/secure_env/tpm_keymaster_context.h	/^  std::map<keymaster_algorithm_t, std::unique_ptr<keymaster::KeyFactory>> key_factories_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::map<keymaster_algorithm_t,std::unique_ptr<keymaster::KeyFactory>>
+keyboard-capture-control	host/frontend/webrtc_operator/assets/client.html	/^            <div id="keyboard-capture-control" title="Capture Keyboard"><\/div>$/;"	I
+keyboard_client	host/frontend/webrtc/connection_observer.h	/^  SharedFD keyboard_client;$/;"	m	struct:cuttlefish::InputSockets	typeref:typename:SharedFD
+keyboard_destroy_resource_callback	host/libs/wayland/wayland_seat.cpp	/^void keyboard_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+keyboard_implementation	host/libs/wayland/wayland_seat.cpp	/^const struct wl_keyboard_interface keyboard_implementation = {$/;"	v	namespace:wayland::__anona9f16c970111	typeref:typename:const struct wl_keyboard_interface
+keyboard_release	host/libs/wayland/wayland_seat.cpp	/^void keyboard_release(wl_client*, wl_resource* keyboard) {$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+keyboard_server	host/frontend/webrtc/connection_observer.h	/^  SharedFD keyboard_server;$/;"	m	struct:cuttlefish::InputSockets	typeref:typename:SharedFD
+keyboard_server_	host/commands/run_cvd/launch_streamer.cpp	/^  SharedFD keyboard_server_;$/;"	m	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:SharedFD	file:
+keyboard_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::keyboard_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+keyboard_socket_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::keyboard_socket_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+keymaster	common/libs/security/keymaster_channel.h	/^namespace keymaster {$/;"	n
+keymaster	guest/hals/keymaster/remote/remote_keymaster.cpp	/^namespace keymaster {$/;"	n	file:
+keymaster	guest/hals/keymaster/remote/remote_keymaster.h	/^namespace keymaster {$/;"	n
+keymaster	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^namespace keymaster {$/;"	n	file:
+keymaster	guest/hals/keymaster/remote/remote_keymaster4_device.h	/^namespace keymaster {$/;"	n
+keymaster	guest/hals/keymint/remote/remote_keymaster.cpp	/^namespace keymaster {$/;"	n	file:
+keymaster	guest/hals/keymint/remote/remote_keymaster.h	/^namespace keymaster {$/;"	n
+keymaster	guest/hals/keymint/remote/remote_keymint_operation.h	/^namespace keymaster {$/;"	n
+keymaster	guest/hals/keymint/remote/remote_secure_clock.h	/^namespace keymaster {$/;"	n
+keymaster	guest/hals/keymint/remote/remote_shared_secret.h	/^namespace keymaster {$/;"	n
+keymaster_	host/commands/secure_env/keymaster_responder.h	/^  keymaster::AndroidKeymaster& keymaster_;$/;"	m	class:cuttlefish::KeymasterResponder	typeref:typename:keymaster::AndroidKeymaster &
+keymaster_message	common/libs/security/keymaster_channel.h	/^struct keymaster_message {$/;"	s	namespace:keymaster
+keymint	guest/hals/keymint/remote/remote_keymint_device.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware::security	file:
+keymint	guest/hals/keymint/remote/remote_keymint_device.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware::security
+keymint	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware::security	file:
+keymint	guest/hals/keymint/remote/remote_keymint_operation.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware::security
+keymint	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware::security	file:
+keymint	guest/hals/keymint/remote/remote_remotely_provisioned_component.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware::security
+kgdb	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::kgdb() const { return (*dictionary_)[kKgdb].asBool(); }$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+khronos_boolean_enum_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^} khronos_boolean_enum_t;$/;"	t	typeref:enum:__anon5c4f198b0103
+khronos_float_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef          float         khronos_float_t;$/;"	t	typeref:typename:float
+khronos_int16_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef signed   short int     khronos_int16_t;$/;"	t	typeref:typename:signed short int
+khronos_int32_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef __int32                 khronos_int32_t;$/;"	t	typeref:typename:__int32
+khronos_int32_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef int                     khronos_int32_t;$/;"	t	typeref:typename:int
+khronos_int32_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef int32_t                 khronos_int32_t;$/;"	t	typeref:typename:int32_t
+khronos_int64_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef __int64                 khronos_int64_t;$/;"	t	typeref:typename:__int64
+khronos_int64_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef int64_t                 khronos_int64_t;$/;"	t	typeref:typename:int64_t
+khronos_int64_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef long int                khronos_int64_t;$/;"	t	typeref:typename:long int
+khronos_int64_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef long long int           khronos_int64_t;$/;"	t	typeref:typename:long long int
+khronos_int8_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef signed   char          khronos_int8_t;$/;"	t	typeref:typename:signed char
+khronos_intptr_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef signed   long  int     khronos_intptr_t;$/;"	t	typeref:typename:signed long int
+khronos_intptr_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef signed   long long int khronos_intptr_t;$/;"	t	typeref:typename:signed long long int
+khronos_ssize_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef signed   long  int     khronos_ssize_t;$/;"	t	typeref:typename:signed long int
+khronos_ssize_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef signed   long long int khronos_ssize_t;$/;"	t	typeref:typename:signed long long int
+khronos_stime_nanoseconds_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef khronos_int64_t        khronos_stime_nanoseconds_t;$/;"	t	typeref:typename:khronos_int64_t
+khronos_uint16_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned short int     khronos_uint16_t;$/;"	t	typeref:typename:unsigned short int
+khronos_uint32_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef uint32_t                khronos_uint32_t;$/;"	t	typeref:typename:uint32_t
+khronos_uint32_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned __int32        khronos_uint32_t;$/;"	t	typeref:typename:unsigned __int32
+khronos_uint32_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned int            khronos_uint32_t;$/;"	t	typeref:typename:unsigned int
+khronos_uint64_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef uint64_t                khronos_uint64_t;$/;"	t	typeref:typename:uint64_t
+khronos_uint64_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned __int64        khronos_uint64_t;$/;"	t	typeref:typename:unsigned __int64
+khronos_uint64_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned long int       khronos_uint64_t;$/;"	t	typeref:typename:unsigned long int
+khronos_uint64_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned long long int  khronos_uint64_t;$/;"	t	typeref:typename:unsigned long long int
+khronos_uint8_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned char          khronos_uint8_t;$/;"	t	typeref:typename:unsigned char
+khronos_uintptr_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned long  int     khronos_uintptr_t;$/;"	t	typeref:typename:unsigned long int
+khronos_uintptr_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned long long int khronos_uintptr_t;$/;"	t	typeref:typename:unsigned long long int
+khronos_usize_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned long  int     khronos_usize_t;$/;"	t	typeref:typename:unsigned long int
+khronos_usize_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef unsigned long long int khronos_usize_t;$/;"	t	typeref:typename:unsigned long long int
+khronos_utime_nanoseconds_t	host/libs/graphics_detector/include/KHR/khrplatform.h	/^typedef khronos_uint64_t       khronos_utime_nanoseconds_t;$/;"	t	typeref:typename:khronos_uint64_t
+klog_write	common/libs/net/netlink_request_test.cpp	/^extern "C" void klog_write(int \/* level *\/, const char* \/* format *\/, ...) {}$/;"	f	namespace:cuttlefish::__anon1ff2f3d90111	typeref:typename:void
+kmBlob2hidlVec	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline hidl_vec<uint8_t> kmBlob2hidlVec(const keymaster_blob_t& blob) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:hidl_vec<uint8_t>
+kmBlob2hidlVec	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline hidl_vec<uint8_t> kmBlob2hidlVec(const keymaster_key_blob_t& blob) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:hidl_vec<uint8_t>
+kmBuffer2hidlVec	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline hidl_vec<uint8_t> kmBuffer2hidlVec(const ::keymaster::Buffer& buf) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:hidl_vec<uint8_t>
+kmCertChain2Hidl	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline static hidl_vec<hidl_vec<uint8_t>> kmCertChain2Hidl($/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:hidl_vec<hidl_vec<uint8_t>>	file:
+kmParamSet2Hidl	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^static inline hidl_vec<KeyParameter> kmParamSet2Hidl(const keymaster_key_param_set_t& set) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:hidl_vec<KeyParameter>	file:
+knownMissing	tests/hal/hal_implementation_test.cpp	/^  bool knownMissing;$/;"	m	struct:AidlPackageCheck	typeref:typename:bool	file:
+l1_size	host/libs/image_aggregator/image_aggregator.cc	/^  Be32 l1_size;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be32	file:
+l1_table_offset	host/libs/image_aggregator/image_aggregator.cc	/^  Be64 l1_table_offset;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be64	file:
+label	host/libs/image_aggregator/image_aggregator.h	/^  std::string label;$/;"	m	struct:cuttlefish::ImagePartition	typeref:typename:std::string
+label	host/libs/image_aggregator/image_aggregator.h	/^  std::string label;$/;"	m	struct:cuttlefish::MultipleImagePartition	typeref:typename:std::string
+lac	guest/hals/ril/reference-libril/ril.h	/^    int lac;    \/* 16-bit Location Area Code, 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5808	typeref:typename:int
+lac	guest/hals/ril/reference-libril/ril.h	/^    int lac;    \/* 16-bit Location Area Code, 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5908	typeref:typename:int
+lac	guest/hals/ril/reference-libril/ril.h	/^    int lac;    \/* 16-bit Location Area Code, 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5a08	typeref:typename:int
+lac	guest/hals/ril/reference-libril/ril.h	/^    int lac;    \/* 16-bit Location Area Code, 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5b08	typeref:typename:int
+lac	guest/hals/ril/reference-libril/ril.h	/^    int lac;    \/* 16-bit Location Area Code, 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5f08	typeref:typename:int
+lac	guest/hals/ril/reference-libril/ril.h	/^    int lac;    \/* 16-bit Location Area Code, 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7808	typeref:typename:int
+lac	guest/hals/ril/reference-libril/ril.h	/^    int lac;    \/* 16-bit Location Area Code, 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7908	typeref:typename:int
+lac	guest/hals/ril/reference-libril/ril.h	/^    int lac;    \/* 16-bit Location Area Code, 0..65535, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7b08	typeref:typename:int
+lang_id_	host/libs/confui/host_renderer.h	/^  std::string lang_id_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::string
+last_active_call_index_	host/commands/modem_simulator/call_service.h	/^  int32_t last_active_call_index_;$/;"	m	class:cuttlefish::CallService	typeref:typename:int32_t
+last_buffer_	host/frontend/webrtc/display_handler.h	/^  std::shared_ptr<webrtc_streaming::VideoFrameBuffer> last_buffer_;$/;"	m	class:cuttlefish::DisplayHandler	typeref:typename:std::shared_ptr<webrtc_streaming::VideoFrameBuffer>
+last_buffer_display_	host/frontend/webrtc/display_handler.h	/^  std::uint32_t last_buffer_display_ = 0;$/;"	m	class:cuttlefish::DisplayHandler	typeref:typename:std::uint32_t
+last_buffer_mutex_	host/frontend/webrtc/display_handler.h	/^  std::mutex last_buffer_mutex_;$/;"	m	class:cuttlefish::DisplayHandler	typeref:typename:std::mutex
+last_file_id_	host/commands/modem_simulator/sim_service.h	/^  std::string last_file_id_;$/;"	m	class:cuttlefish::SimService	typeref:typename:std::string
+last_hop_capacity_kbps	guest/hals/ril/reference-libril/ril.h	/^  unsigned int last_hop_capacity_kbps; \/* last-hop cellular capacity: kilobits\/second. *\/$/;"	m	struct:__anon0bfbaecf2408	typeref:typename:unsigned int
+last_lba	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t last_lba;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptPartitionEntry	typeref:typename:std::uint64_t	file:
+last_modified_time	host/commands/fetcher/build_api.h	/^  unsigned long last_modified_time;$/;"	m	class:cuttlefish::Artifact	typeref:typename:unsigned long
+last_subscriber_id_	host/frontend/webrtc/kernel_log_events_handler.h	/^  int last_subscriber_id_ = 0;$/;"	m	struct:cuttlefish::KernelLogEventsHandler	typeref:typename:int
+last_tombstone_name	host/commands/tombstone_receiver/main.cpp	/^static std::string last_tombstone_name = "";$/;"	v	namespace:cuttlefish	typeref:typename:std::string	file:
+last_usable_lba	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t last_usable_lba;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint64_t	file:
+latency_bytes	host/libs/audio_connector/shm_layout.h	/^  Le32 latency_bytes;$/;"	m	struct:cuttlefish::virtio_snd_pcm_status	typeref:typename:Le32
+latest_credential	host/commands/fetcher/credential_source.h	/^  std::string latest_credential;$/;"	m	class:cuttlefish::GceMetadataCredentialSource	typeref:typename:std::string
+latest_request_settings_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  common::V1_0::helper::CameraMetadata latest_request_settings_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:common::V1_0::helper::CameraMetadata
+latitude	guest/hals/ril/reference-libril/ril.h	/^    int latitude;       \/* Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.$/;"	m	struct:__anon0bfbaecf5c08	typeref:typename:int
+latitude	guest/hals/ril/reference-libril/ril.h	/^    int latitude;       \/* Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.$/;"	m	struct:__anon0bfbaecf7c08	typeref:typename:int
+launchComponent	host/commands/run_cvd/launch.cc	/^fruit::Component<PublicDeps, KernelLogPipeProvider> launchComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<PublicDeps,KernelLogPipeProvider>
+launchModemComponent	host/commands/run_cvd/launch_modem.cpp	/^launchModemComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<const CuttlefishConfig,const CuttlefishConfig::InstanceSpecific>>
+launchStreamerComponent	host/commands/run_cvd/launch_streamer.cpp	/^launchStreamerComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<const CuttlefishConfig,KernelLogPipeProvider,const CuttlefishConfig::InstanceSpecific,const CustomActionConfigProvider>>
+launch_cvd	tools/upload_to_gce_and_run.py	/^def launch_cvd(args):$/;"	f
+launch_cvd	tools/upload_via_ssh.py	/^def launch_cvd(args):$/;"	f
+launch_cvd_flags	host/commands/metrics/proto/cf_metrics_event.proto	/^  repeated string launch_cvd_flags = 11;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:string
+launch_instance	tools/create_base_image.go	/^var launch_instance string$/;"	v	package:main	typeref:typename:string
+launcher_log_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::launcher_log_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+launcher_monitor_socket_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::launcher_monitor_socket_path()$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+layout_	host/libs/confui/host_renderer.h	/^  teeui::layout_t<teeui::ConfUILayout> layout_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::layout_t<teeui::ConfUILayout>
+lceDataInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::lceDataInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+lce_status	guest/hals/ril/reference-libril/ril.h	/^  char lce_status;                 \/* LCE service status:$/;"	m	struct:__anon0bfbaecf2308	typeref:typename:char
+lce_suspended	guest/hals/ril/reference-libril/ril.h	/^  unsigned char lce_suspended;         \/* LCE report going to be suspended? (e.g., radio$/;"	m	struct:__anon0bfbaecf2408	typeref:typename:unsigned char
+legacy_enum_conversion	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline ErrorCode legacy_enum_conversion(const keymaster_error_t value) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:ErrorCode
+legacy_enum_conversion	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline SecurityLevel legacy_enum_conversion(const keymaster_security_level_t value) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:SecurityLevel
+legacy_enum_conversion	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline Tag legacy_enum_conversion(const keymaster_tag_t value) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:Tag
+legacy_enum_conversion	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline hw_authenticator_type_t legacy_enum_conversion(const HardwareAuthenticatorType value) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:hw_authenticator_type_t
+legacy_enum_conversion	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline keymaster_key_format_t legacy_enum_conversion(const KeyFormat value) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:keymaster_key_format_t
+legacy_enum_conversion	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline keymaster_purpose_t legacy_enum_conversion(const KeyPurpose value) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:keymaster_purpose_t
+legacy_enum_conversion	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline keymaster_tag_t legacy_enum_conversion(const Tag value) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:keymaster_tag_t
+len	common/libs/fs/shared_fd.h	/^  size_t len() const { return len_; }$/;"	f	class:cuttlefish::ScopedMMap	typeref:typename:size_t
+len	common/libs/utils/network.cpp	/^  std::uint8_t len;$/;"	m	struct:cuttlefish::Dhcp4MessageTypeOption	typeref:typename:std::uint8_t	file:
+len	common/libs/utils/network.cpp	/^  std::uint8_t len;$/;"	m	struct:cuttlefish::Dhcp4ServerIdentifier	typeref:typename:std::uint8_t	file:
+len	guest/hals/ril/reference-libril/ril.h	/^  char len;$/;"	m	struct:__anon0bfbaecf8308	typeref:typename:char
+len	host/libs/allocd/request.h	/^  uint16_t len;      \/\/\/ length in bytes of the message payload$/;"	m	struct:cuttlefish::RequestHeader	typeref:typename:uint16_t
+len	host/libs/audio_connector/buffers.h	/^  uint32_t len() const { return len_; }$/;"	f	class:cuttlefish::ShmBuffer	typeref:typename:uint32_t
+len_	common/libs/fs/shared_fd.h	/^  size_t len_;$/;"	m	class:cuttlefish::ScopedMMap	typeref:typename:size_t
+len_	host/libs/audio_connector/buffers.h	/^  const uint32_t len_;$/;"	m	class:cuttlefish::ShmBuffer	typeref:typename:const uint32_t
+len_allowed_carriers	guest/hals/ril/reference-libril/ril.h	/^  int32_t len_allowed_carriers;         \/* length of array allowed_carriers *\/$/;"	m	struct:__anon0bfbaecf2708	typeref:typename:int32_t
+len_allowed_carriers	guest/hals/ril/reference-libril/ril.h	/^  int32_t len_allowed_carriers;         \/* length of array allowed_carriers *\/$/;"	m	struct:__anon0bfbaecf2908	typeref:typename:int32_t
+len_excluded_carriers	guest/hals/ril/reference-libril/ril.h	/^  int32_t len_excluded_carriers;        \/* length of array excluded_carriers *\/$/;"	m	struct:__anon0bfbaecf2708	typeref:typename:int32_t
+len_excluded_carriers	guest/hals/ril/reference-libril/ril.h	/^  int32_t len_excluded_carriers;        \/* length of array excluded_carriers *\/$/;"	m	struct:__anon0bfbaecf2908	typeref:typename:int32_t
+length	host/commands/secure_env/in_process_tpm.cpp	/^  uint32_t length;$/;"	m	struct:cuttlefish::tpm_message_header	typeref:typename:uint32_t	file:
+length	host/libs/image_aggregator/cdisk_spec.proto	/^  uint64 length = 3;$/;"	f	message:CompositeDisk	typeref:typename:uint64
+lid_switch_open	host/libs/config/custom_actions.h	/^  std::optional<bool> lid_switch_open;$/;"	m	struct:cuttlefish::DeviceState	typeref:typename:std::optional<bool>
+lid_switch_open	shared/config/config_foldable.json	/^                                        "lid_switch_open": false,$/;"	b	object:custom_actions.0.device_states.0
+lid_switch_open	shared/config/config_foldable.json	/^                                        "lid_switch_open": true,$/;"	b	object:custom_actions.1.device_states.0
+line	guest/hals/ril/reference-ril/atchannel.h	/^    char *line;$/;"	m	struct:ATLine	typeref:typename:char *
+lineCtrl	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_LineControlInfoRecord       lineCtrl;$/;"	m	union:__anon0bfbaecf8908::__anon0bfbaecf8a0a	typeref:typename:RIL_CDMA_LineControlInfoRecord
+lineCtrlPolarityIncluded	guest/hals/ril/reference-libril/ril.h	/^  char lineCtrlPolarityIncluded;$/;"	m	struct:__anon0bfbaecf8608	typeref:typename:char
+lineCtrlPowerDenial	guest/hals/ril/reference-libril/ril.h	/^  char lineCtrlPowerDenial;$/;"	m	struct:__anon0bfbaecf8608	typeref:typename:char
+lineCtrlReverse	guest/hals/ril/reference-libril/ril.h	/^  char lineCtrlReverse;$/;"	m	struct:__anon0bfbaecf8608	typeref:typename:char
+lineCtrlToggle	guest/hals/ril/reference-libril/ril.h	/^  char lineCtrlToggle;$/;"	m	struct:__anon0bfbaecf8608	typeref:typename:char
+line_	host/commands/kernel_log_monitor/kernel_log_server.h	/^  std::string line_;$/;"	m	class:monitor::KernelLogServer	typeref:typename:std::string
+linux_buffer_params_add	host/libs/wayland/wayland_dmabuf.cpp	/^void linux_buffer_params_add(wl_client*,$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+linux_buffer_params_create	host/libs/wayland/wayland_dmabuf.cpp	/^void linux_buffer_params_create(wl_client* client,$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+linux_buffer_params_create_immed	host/libs/wayland/wayland_dmabuf.cpp	/^void linux_buffer_params_create_immed(wl_client* client,$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+linux_buffer_params_destroy	host/libs/wayland/wayland_dmabuf.cpp	/^void linux_buffer_params_destroy(wl_client*, wl_resource* params) {$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+linux_dmabuf_create_params	host/libs/wayland/wayland_dmabuf.cpp	/^void linux_dmabuf_create_params(wl_client* client,$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+linux_dmabuf_destroy	host/libs/wayland/wayland_dmabuf.cpp	/^void linux_dmabuf_destroy(wl_client*, wl_resource* dmabuf) {$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+list1_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list1_length = 0x10;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90608	typeref:typename:const uint16_t	file:
+list1_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list1_length = 0x18;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint16_t	file:
+list1_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list1_length = 0xc;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint16_t	file:
+list1_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list1_type = kList1Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90608	typeref:typename:const uint16_t	file:
+list1_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list1_type = kList1Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint16_t	file:
+list1_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list1_type = kList1Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint16_t	file:
+list2_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list2_length = 0xc;  \/\/ Note, this only covers until kValue1.$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint16_t	file:
+list2_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list2_length = 0xc;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90608	typeref:typename:const uint16_t	file:
+list2_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list2_length = 0xc;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint16_t	file:
+list2_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list2_type = kList2Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90608	typeref:typename:const uint16_t	file:
+list2_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list2_type = kList2Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90708	typeref:typename:const uint16_t	file:
+list2_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list2_type = kList2Tag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90808	typeref:typename:const uint16_t	file:
+listMutex	guest/hals/ril/reference-libril/ril_event.cpp	/^static pthread_mutex_t listMutex;$/;"	v	typeref:typename:pthread_mutex_t	file:
+list_length	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list_length = 0xc;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90508	typeref:typename:const uint16_t	file:
+list_type	common/libs/net/netlink_request_test.cpp	/^    const uint16_t list_type = kListTag;$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90508	typeref:typename:const uint16_t	file:
+listen_event	guest/hals/ril/reference-libril/ril_ex.h	/^    struct ril_event* listen_event;$/;"	m	struct:SocketListenParam	typeref:struct:ril_event *
+listener_state_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    ListenerState listener_state_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:ListenerState
+listener_state_	guest/hals/confirmationui/guest_session.h	/^    ListenerState& listener_state_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:ListenerState &
+listener_state_condv_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    std::condition_variable listener_state_condv_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:std::condition_variable
+listener_state_condv_	guest/hals/confirmationui/guest_session.h	/^    std::condition_variable& listener_state_condv_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::condition_variable &
+listener_state_lock_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    std::mutex listener_state_lock_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:std::mutex
+listener_state_lock_	guest/hals/confirmationui/guest_session.h	/^    std::mutex& listener_state_lock_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::mutex &
+lists_	common/libs/net/netlink_request.h	/^  std::vector<std::pair<nlattr*, int32_t>> lists_;$/;"	m	class:cuttlefish::NetlinkRequest	typeref:typename:std::vector<std::pair<nlattr *,int32_t>>
+loader	host/frontend/webrtc_operator/assets/client.html	/^      <div id="loader"><\/div>$/;"	I
+local	guest/hals/ril/reference-libril/ril_internal.h	/^    char local;         \/\/ responses to local commands do not go back to command process$/;"	m	struct:android::RequestInfo	typeref:typename:char
+locale_	common/libs/confui/protocol_types.h	/^  std::string locale_;$/;"	m	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::string
+locale_	guest/hals/confirmationui/guest_session.h	/^    std::string locale_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::string
+locale_	host/libs/confui/session.h	/^  std::string locale_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::string
+location	host/libs/allocd/resource_manager.h	/^  std::string location = kDefaultLocation;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:std::string
+lock	common/libs/fs/shared_fd.cpp	/^SharedFD WeakFD::lock() const {$/;"	f	class:cuttlefish::WeakFD	typeref:typename:SharedFD
+lock_	host/commands/modem_simulator/thread_looper.h	/^  std::mutex lock_;$/;"	m	class:cuttlefish::ThreadLooper	typeref:typename:std::mutex
+lock_status	host/commands/modem_simulator/sim_service.h	/^    LockStatus lock_status;  \/\/ Ignore class$/;"	m	struct:cuttlefish::SimService::FacilityLock	typeref:typename:LockStatus
+log_event	host/commands/metrics/proto/clientanalytics.proto	/^  repeated LogEvent log_event = 3;$/;"	f	message:LogRequest	typeref:typename:LogEvent
+log_fd_	host/commands/kernel_log_monitor/kernel_log_server.h	/^  cuttlefish::SharedFD log_fd_;$/;"	m	class:monitor::KernelLogServer	typeref:typename:cuttlefish::SharedFD
+log_pipe_provider_	host/commands/run_cvd/launch_streamer.cpp	/^  KernelLogPipeProvider& log_pipe_provider_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:KernelLogPipeProvider &	file:
+log_pipe_provider_	host/libs/config/adb/launch.cpp	/^  KernelLogPipeProvider& log_pipe_provider_;$/;"	m	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:KernelLogPipeProvider &	file:
+log_source	host/commands/metrics/proto/clientanalytics.proto	/^  optional int32 log_source = 2;$/;"	f	message:LogRequest	typeref:typename:int32
+logcat_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::logcat_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+logcat_pipe_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::logcat_pipe_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+logicalModemList	guest/hals/ril/reference-libril/ril.h	/^    RIL_ModemInfo logicalModemList[MAX_LOGICAL_MODEM_NUM];$/;"	m	struct:__anon0bfbaecfbc08	typeref:typename:RIL_ModemInfo[]
+logicalModemUuid	guest/hals/ril/reference-libril/ril.h	/^    char logicalModemUuid[MAX_UUID_LENGTH]; \/\/ A UUID typically "com.xxxx.lmX where X is the l/;"	m	struct:__anon0bfbaecf0a08	typeref:typename:char[]
+logicalSlotId	guest/hals/ril/reference-libril/ril.h	/^    int logicalSlotId;$/;"	m	struct:__anon0bfbaecfb908	typeref:typename:int
+logical_channels_	host/commands/modem_simulator/sim_service.h	/^  std::vector<LogicalChannel> logical_channels_;$/;"	m	class:cuttlefish::SimService	typeref:typename:std::vector<LogicalChannel>
+long_name	host/commands/modem_simulator/network_service.h	/^    std::string long_name;$/;"	m	struct:cuttlefish::NetworkService::NetworkOperator	typeref:typename:std::string
+longitude	guest/hals/ril/reference-libril/ril.h	/^    int longitude;      \/* Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.$/;"	m	struct:__anon0bfbaecf5c08	typeref:typename:int
+longitude	guest/hals/ril/reference-libril/ril.h	/^    int longitude;      \/* Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.$/;"	m	struct:__anon0bfbaecf7c08	typeref:typename:int
+lookup_addr	tools/tombstone_to_line.py	/^def lookup_addr(args, object_path, address):$/;"	f
+looper_thread_	host/commands/modem_simulator/thread_looper.h	/^  std::thread looper_thread_;$/;"	m	class:cuttlefish::ThreadLooper	typeref:typename:std::thread
+lte	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoLte     lte;$/;"	m	union:__anon0bfbaecf6e08::__anon0bfbaecf6f0a	typeref:typename:RIL_CellInfoLte
+lte	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoLte_v12     lte;$/;"	m	union:__anon0bfbaecf7008::__anon0bfbaecf710a	typeref:typename:RIL_CellInfoLte_v12
+lte	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoLte_v12     lte;$/;"	m	union:__anon0bfbaecf7208::__anon0bfbaecf730a	typeref:typename:RIL_CellInfoLte_v12
+lte_cqi	host/commands/modem_simulator/network_service.h	/^    int lte_cqi;    \/* The current Channel Quality Indicator.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+lte_rsrp	host/commands/modem_simulator/network_service.h	/^    int lte_rsrp;   \/* The current Reference Signal Receive Power in dBm multiplied by -1.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+lte_rsrq	host/commands/modem_simulator/network_service.h	/^    int lte_rsrq;   \/* The current Reference Signal Receive Quality in dB multiplied by -1.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+lte_rssi	host/commands/modem_simulator/network_service.h	/^    int lte_rssi;   \/* Refer gsm_rssi *\/$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+lte_rssnr	host/commands/modem_simulator/network_service.h	/^    int lte_rssnr;  \/* The current reference signal signal-to-noise ratio in 0.1 dB units.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+lte_ta	host/commands/modem_simulator/network_service.h	/^    int lte_ta;     \/* timing advance in micro seconds for a one way trip from cell to device.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+lws_context	host/frontend/webrtc/lib/ws_connection.cpp	/^  struct lws_context* lws_context() {$/;"	f	class:WsConnectionContextImpl	typeref:struct:lws_context *	file:
+lws_context_	host/frontend/webrtc/lib/ws_connection.cpp	/^  struct lws_context* lws_context_;$/;"	m	class:WsConnectionContextImpl	typeref:struct:lws_context *	file:
+mBluetoothChecker	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private BluetoothChecker mBluetoothChecker = null;$/;"	f	class:GceService	file:
+mBroadcastReceiver	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private final GceBroadcastReceiver mBroadcastReceiver = new GceBroadcastReceiver();$/;"	f	class:GceService	file:
+mConnChecker	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private ConnectivityChecker mConnChecker;$/;"	f	class:GceService	file:
+mConnManager	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private final ConnectivityManager mConnManager;$/;"	f	class:GceWifiManager	file:
+mConnManager	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    private ConnectivityManager mConnManager;$/;"	f	class:RilE2eTests	file:
+mConnManager	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    private ConnectivityManager mConnManager;$/;"	f	class:WifiE2eTests	file:
+mConnected	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    private final GceFuture<Boolean> mConnected = new GceFuture<Boolean>("Connectivity");$/;"	f	class:ConnectivityChecker	file:
+mContext	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    private final Context mContext;$/;"	f	class:ConnectivityChecker	file:
+mContext	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private final Context mContext;$/;"	f	class:GceWifiManager	file:
+mContext	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    private Context mContext;$/;"	f	class:RilE2eTests	file:
+mContext	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    private Context mContext;$/;"	f	class:WifiE2eTests	file:
+mCounterOemHook	guest/hals/ril/reference-libril/ril_service.cpp	/^volatile int32_t mCounterOemHook[1];$/;"	v	typeref:typename:volatile int32_t[1]
+mCounterOemHook	guest/hals/ril/reference-libril/ril_service.cpp	/^volatile int32_t mCounterOemHook[SIM_COUNT];$/;"	v	typeref:typename:volatile int32_t[]
+mCounterRadio	guest/hals/ril/reference-libril/ril_service.cpp	/^volatile int32_t mCounterRadio[1];$/;"	v	typeref:typename:volatile int32_t[1]
+mCounterRadio	guest/hals/ril/reference-libril/ril_service.cpp	/^volatile int32_t mCounterRadio[SIM_COUNT];$/;"	v	typeref:typename:volatile int32_t[]
+mCounterRadioConfig	guest/hals/ril/reference-libril/ril_config.cpp	/^volatile int32_t mCounterRadioConfig;$/;"	v	typeref:typename:volatile int32_t
+mEnabled	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java	/^    private final GceFuture<Boolean> mEnabled = new GceFuture<Boolean>("Bluetooth");$/;"	f	class:BluetoothChecker	file:
+mEventReporter	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    private final EventReporter mEventReporter;$/;"	f	class:ConnectivityChecker	file:
+mEventReporter	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private final EventReporter mEventReporter = new EventReporter();$/;"	f	class:GceService	file:
+mEventReporter	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private final EventReporter mEventReporter;$/;"	f	class:GceWifiManager	file:
+mExecutor	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private final JobExecutor mExecutor = new JobExecutor();$/;"	f	class:GceService	file:
+mExecutor	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^    private final ScheduledExecutorService mExecutor;$/;"	f	class:JobExecutor	file:
+mHci	guest/hals/bt/remote/remote_bluetooth.cpp	/^  sp<IBluetoothHci> mHci;$/;"	m	class:android::hardware::bluetooth::V1_1::remote::BluetoothDeathRecipient	typeref:typename:sp<IBluetoothHci>	file:
+mJobExecutor	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private final JobExecutor mJobExecutor;$/;"	f	class:GceWifiManager	file:
+mKmsgStream	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private FileOutputStream mKmsgStream = null;$/;"	f	class:EventReporter	file:
+mKmsgWriter	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private PrintWriter mKmsgWriter = null;$/;"	f	class:EventReporter	file:
+mMessageList	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    private List<String> mMessageList = new ArrayList<String>();$/;"	f	class:EventReporter	file:
+mMonitorWifiJob	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private final MonitorWifiJob mMonitorWifiJob;$/;"	f	class:GceWifiManager	file:
+mMostRecentAction	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private String mMostRecentAction = null;$/;"	f	class:GceService	file:
+mName	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    private final String mName;$/;"	f	class:GceFuture	file:
+mOemHookIndication	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<IOemHookIndication> mOemHookIndication;$/;"	m	struct:OemHookImpl	typeref:typename:sp<IOemHookIndication>	file:
+mOemHookResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<IOemHookResponse> mOemHookResponse;$/;"	m	struct:OemHookImpl	typeref:typename:sp<IOemHookResponse>	file:
+mPreviousDpi	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private int mPreviousDpi;$/;"	f	class:GceService	file:
+mPreviousRotation	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private int mPreviousRotation;$/;"	f	class:GceService	file:
+mPreviousScreenBounds	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private Point mPreviousScreenBounds;$/;"	f	class:GceService	file:
+mRadioConfigIndication	guest/hals/ril/reference-libril/ril_config.cpp	/^    sp<V1_0::IRadioConfigIndication> mRadioConfigIndication;$/;"	m	struct:RadioConfigImpl	typeref:typename:sp<V1_0::IRadioConfigIndication>	file:
+mRadioConfigIndicationV1_2	guest/hals/ril/reference-libril/ril_config.cpp	/^    sp<V1_2::IRadioConfigIndication> mRadioConfigIndicationV1_2;$/;"	m	struct:RadioConfigImpl	typeref:typename:sp<V1_2::IRadioConfigIndication>	file:
+mRadioConfigResponse	guest/hals/ril/reference-libril/ril_config.cpp	/^    sp<V1_0::IRadioConfigResponse> mRadioConfigResponse;$/;"	m	struct:RadioConfigImpl	typeref:typename:sp<V1_0::IRadioConfigResponse>	file:
+mRadioConfigResponseV1_1	guest/hals/ril/reference-libril/ril_config.cpp	/^    sp<V1_1::IRadioConfigResponse> mRadioConfigResponseV1_1;$/;"	m	struct:RadioConfigImpl	typeref:typename:sp<V1_1::IRadioConfigResponse>	file:
+mRadioConfigResponseV1_2	guest/hals/ril/reference-libril/ril_config.cpp	/^    sp<V1_2::IRadioConfigResponse> mRadioConfigResponseV1_2;$/;"	m	struct:RadioConfigImpl	typeref:typename:sp<V1_2::IRadioConfigResponse>	file:
+mRadioConfigResponseV1_3	guest/hals/ril/reference-libril/ril_config.cpp	/^    sp<V1_3::IRadioConfigResponse> mRadioConfigResponseV1_3;$/;"	m	struct:RadioConfigImpl	typeref:typename:sp<V1_3::IRadioConfigResponse>	file:
+mRadioIndication	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<IRadioIndication> mRadioIndication;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<IRadioIndication>	file:
+mRadioIndicationV1_1	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_1::IRadioIndication> mRadioIndicationV1_1;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_1::IRadioIndication>	file:
+mRadioIndicationV1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_2::IRadioIndication> mRadioIndicationV1_2;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_2::IRadioIndication>	file:
+mRadioIndicationV1_3	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_3::IRadioIndication> mRadioIndicationV1_3;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_3::IRadioIndication>	file:
+mRadioIndicationV1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_4::IRadioIndication> mRadioIndicationV1_4;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_4::IRadioIndication>	file:
+mRadioIndicationV1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_5::IRadioIndication> mRadioIndicationV1_5;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_5::IRadioIndication>	file:
+mRadioIndicationV1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_6::IRadioIndication> mRadioIndicationV1_6;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_6::IRadioIndication>	file:
+mRadioResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<IRadioResponse> mRadioResponse;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<IRadioResponse>	file:
+mRadioResponseV1_1	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_1::IRadioResponse> mRadioResponseV1_1;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_1::IRadioResponse>	file:
+mRadioResponseV1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_2::IRadioResponse> mRadioResponseV1_2;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_2::IRadioResponse>	file:
+mRadioResponseV1_3	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_3::IRadioResponse> mRadioResponseV1_3;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_3::IRadioResponse>	file:
+mRadioResponseV1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_4::IRadioResponse> mRadioResponseV1_4;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_4::IRadioResponse>	file:
+mRadioResponseV1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_5::IRadioResponse> mRadioResponseV1_5;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_5::IRadioResponse>	file:
+mRadioResponseV1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^    sp<V1_6::IRadioResponse> mRadioResponseV1_6;$/;"	m	struct:RadioImpl_1_6	typeref:typename:sp<V1_6::IRadioResponse>	file:
+mReportedWifiNotConnected	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^        private boolean mReportedWifiNotConnected = false;$/;"	f	class:GceWifiManager.MonitorWifiJob	file:
+mSimCardPowerState	guest/hals/ril/reference-libril/ril_service.cpp	/^    V1_1::CardPowerState mSimCardPowerState;$/;"	m	struct:RadioImpl_1_6	typeref:typename:V1_1::CardPowerState	file:
+mSlotId	guest/hals/ril/reference-libril/ril_config.cpp	/^    int32_t mSlotId;$/;"	m	struct:RadioConfigImpl	typeref:typename:int32_t	file:
+mSlotId	guest/hals/ril/reference-libril/ril_service.cpp	/^    int32_t mSlotId;$/;"	m	struct:OemHookImpl	typeref:typename:int32_t	file:
+mSlotId	guest/hals/ril/reference-libril/ril_service.cpp	/^    int32_t mSlotId;$/;"	m	struct:RadioImpl_1_6	typeref:typename:int32_t	file:
+mStartedJobs	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^    private final Set<String> mStartedJobs;$/;"	f	class:JobExecutor	file:
+mTag	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobBase.java	/^    private final String mTag;$/;"	f	class:JobBase	file:
+mTeleManager	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    private TelephonyManager mTeleManager;$/;"	f	class:RilE2eTests	file:
+mWifiManager	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private GceWifiManager mWifiManager = null;$/;"	f	class:GceService	file:
+mWifiManager	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    private final WifiManager mWifiManager;$/;"	f	class:GceWifiManager	file:
+mWifiManager	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    private WifiManager mWifiManager;$/;"	f	class:RilE2eTests	file:
+mWifiManager	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    private WifiManager mWifiManager;$/;"	f	class:WifiE2eTests	file:
+mWifiReady	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^        private final GceFuture<Boolean> mWifiReady =$/;"	f	class:GceWifiManager.MonitorWifiJob	file:
+mWindowManager	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private WindowManager mWindowManager;$/;"	f	class:GceService	file:
+m_	common/libs/concurrency/thread_safe_queue.h	/^  std::mutex m_;$/;"	m	class:cuttlefish::ThreadSafeQueue	typeref:typename:std::mutex
+mac_address	common/libs/utils/network.h	/^  std::uint8_t mac_address[6];$/;"	m	struct:cuttlefish::DnsmasqDhcp4Lease	typeref:typename:std::uint8_t[6]
+magic	host/libs/image_aggregator/image_aggregator.cc	/^  Be32 magic;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be32	file:
+magic_cookie	common/libs/utils/network.cpp	/^  std::uint8_t magic_cookie[4];$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t[4]	file:
+main	common/frontend/socket_vsock_proxy/main.cpp	/^int main(int argc, char* argv[]) {$/;"	f	typeref:typename:int
+main	guest/commands/bt_vhci_forwarder/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	guest/commands/dlkm_loader/dlkm_loader.cpp	/^int main(void) {$/;"	f	typeref:typename:int
+main	guest/commands/rename_netiface/main.cpp	/^int main(int argc, char *argv[]) {$/;"	f	typeref:typename:int
+main	guest/commands/sensor_injection/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	guest/commands/setup_wifi/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	guest/commands/vsoc_input_service/main.cpp	/^int main(int argc, char* argv[]) {$/;"	f	typeref:typename:int
+main	guest/hals/bt/remote/service.cpp	/^int main(int \/* argc *\/, char** \/* argv *\/) {$/;"	f	typeref:typename:int
+main	guest/hals/camera/external-service.cpp	/^int main() {$/;"	f	typeref:typename:int
+main	guest/hals/confirmationui/service.cpp	/^int main() {$/;"	f	typeref:typename:int
+main	guest/hals/gatekeeper/remote/service.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	guest/hals/health/storage/service.cpp	/^int main() {$/;"	f	typeref:typename:int
+main	guest/hals/keymaster/remote/service4.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	guest/hals/keymint/remote/service.cpp	/^int main(int, char** argv) {$/;"	f	typeref:typename:int
+main	guest/hals/ril/reference-ril/reference-ril.c	/^int main (int argc, char **argv)$/;"	f	typeref:typename:int
+main	guest/hals/rild/rild_cuttlefish.c	/^int main(int argc, char **argv) {$/;"	f	typeref:typename:int
+main	guest/monitoring/tombstone_transmit/tombstone_producer.cpp	/^int __attribute__((noreturn)) main() {$/;"	f	typeref:typename:int
+main	guest/monitoring/tombstone_transmit/tombstone_transmit.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	guest/services/suspend_blocker/suspend_blocker.cpp	/^int main() {$/;"	f	typeref:typename:int
+main	host/commands/append_squashfs_overlay/src/main.rs	/^fn main() -> Result<()> {$/;"	f
+main	host/commands/assemble_cvd/assemble_cvd.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/bt_connector/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/config_server/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/console_forwarder/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/cvd/main.cc	/^int main(int argc, char** argv) { return cuttlefish::CvdMain(argc, argv); }$/;"	f	typeref:typename:int
+main	host/commands/fetcher/fetch_cvd.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/health/health.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/host_bugreport/main.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/kernel_log_monitor/main.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/log_tee/log_tee.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/logcat_receiver/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/metrics/metrics.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/modem_simulator/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/modem_simulator/unittest/main_test.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/powerwash_cvd/powerwash_cvd.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/restart_cvd/restart_cvd.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/run_cvd/main.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/secure_env/secure_env.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/start/main.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/status/main.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/stop/main.cc	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/tombstone_receiver/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/commands/wmediumd_control/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/example_custom_actions/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/frontend/adb_connector/main.cpp	/^int main(int argc, char* argv[]) {$/;"	f	typeref:typename:int
+main	host/frontend/webrtc/main.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/frontend/webrtc_operator/server.cpp	/^int main(int argc, char** argv) {$/;"	f	typeref:typename:int
+main	host/libs/allocd/allocd.cpp	/^int main(int argc, char* argv[]) {$/;"	f	typeref:typename:int
+main	host/libs/allocd/test/client.cpp	/^int main(int argc, char* argv[]) {$/;"	f	typeref:typename:int
+main	host/libs/graphics_detector/detect_graphics.cpp	/^int main(int argc, char* argv[]) {$/;"	f	typeref:typename:int
+main	tools/create_base_image.go	/^func main() {$/;"	f	package:main
+main	tools/create_base_image.go	/^package main$/;"	p
+main	tools/create_base_image_hostlib.sh	/^main() {$/;"	f
+main	tools/flash-blk-dev.sh	/^main()$/;"	f
+main	tools/upload_to_gce_and_run.py	/^def main():$/;"	f
+main	tools/upload_via_ssh.py	/^def main():$/;"	f
+mainLoop	guest/hals/ril/reference-ril/reference-ril.c	/^mainLoop(void *param __unused)$/;"	f	typeref:typename:void *	file:
+main_loop_thread_	host/libs/confui/host_server.h	/^  std::thread main_loop_thread_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:std::thread
+make	host/commands/fetcher/credential_source.cc	/^std::unique_ptr<CredentialSource> FixedCredentialSource::make($/;"	f	class:cuttlefish::FixedCredentialSource	typeref:typename:std::unique_ptr<CredentialSource>
+make	host/commands/fetcher/credential_source.cc	/^std::unique_ptr<CredentialSource> GceMetadataCredentialSource::make($/;"	f	class:cuttlefish::GceMetadataCredentialSource	typeref:typename:std::unique_ptr<CredentialSource>
+makeSafeCallback	host/commands/modem_simulator/thread_looper.h	/^std::function<void()> makeSafeCallback($/;"	f	namespace:cuttlefish	typeref:typename:std::function<void ()>
+makeSafeCallback	host/commands/modem_simulator/thread_looper.h	/^std::function<void()> makeSafeCallback(T *me, std::function<void(T *)> f) {$/;"	f	namespace:cuttlefish	typeref:typename:std::function<void ()>
+makeSendSmsResult	guest/hals/ril/reference-libril/ril_service.cpp	/^SendSmsResult makeSendSmsResult(RadioResponseInfo& responseInfo, int serial, int responseType,$/;"	f	typeref:typename:SendSmsResult
+makeSendSmsResult_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^SendSmsResult makeSendSmsResult_1_6($/;"	f	typeref:typename:SendSmsResult
+make_argv	guest/hals/rild/rild_cuttlefish.c	/^static int make_argv(char * args, char ** argv) {$/;"	f	typeref:typename:int	file:
+make_device	recovery/recovery_ui.cpp	/^Device* make_device() {$/;"	f	typeref:typename:Device *
+managed_resources_	host/libs/allocd/resource_manager.h	/^  std::map<uint32_t, std::shared_ptr<StaticResource>> managed_resources_;$/;"	m	class:cuttlefish::Session	typeref:typename:std::map<uint32_t,std::shared_ptr<StaticResource>>
+managed_sessions_	host/libs/allocd/resource_manager.h	/^  std::map<uint32_t, std::shared_ptr<Session>> managed_sessions_;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:std::map<uint32_t,std::shared_ptr<Session>>
+mapNetworkRegistrationResponse	guest/hals/ril/reference-ril/reference-ril.c	/^static int mapNetworkRegistrationResponse(int in_response) {$/;"	f	typeref:typename:int	file:
+mapRadioAccessNetworkToTech	guest/hals/ril/reference-ril/reference-ril.c	/^int mapRadioAccessNetworkToTech(RIL_RadioAccessNetworks network) {$/;"	f	typeref:typename:int
+map_mutex_	host/frontend/webrtc/lib/ws_connection.cpp	/^  std::mutex map_mutex_;$/;"	m	class:WsConnectionContextImpl	typeref:typename:std::mutex	file:
+match	host/commands/kernel_log_monitor/kernel_log_server.cc	/^  std::string_view match;   \/\/ Substring to match in the kernel logs$/;"	m	struct:__anonfa7764770111::__anonfa7764770208	typeref:typename:std::string_view	file:
+match_data	guest/hals/ril/reference-libril/ril.h	/^    const char * match_data;$/;"	m	struct:__anon0bfbaecf2608	typeref:typename:const char *
+match_mode	host/commands/modem_simulator/modem_service.h	/^  MatchMode match_mode;$/;"	m	class:cuttlefish::CommandHandler	typeref:typename:MatchMode
+match_type	guest/hals/ril/reference-libril/ril.h	/^    RIL_CarrierMatchType match_type;   \/* Specify match type for the carrier.$/;"	m	struct:__anon0bfbaecf2608	typeref:typename:RIL_CarrierMatchType
+maxActiveData	guest/hals/ril/reference-libril/ril.h	/^    int maxActiveData;$/;"	m	struct:__anon0bfbaecfbc08	typeref:typename:int
+maxActiveInternetData	guest/hals/ril/reference-libril/ril.h	/^    int maxActiveInternetData;$/;"	m	struct:__anon0bfbaecfbc08	typeref:typename:int
+maxConns	guest/hals/ril/reference-libril/ril.h	/^    int maxConns;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:int
+maxConns	guest/hals/ril/reference-libril/ril.h	/^    int maxConns;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+maxConnsTime	guest/hals/ril/reference-libril/ril.h	/^    int maxConnsTime;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:int
+maxConnsTime	guest/hals/ril/reference-libril/ril.h	/^    int maxConnsTime;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+maxData	guest/hals/ril/reference-libril/ril.h	/^   int maxData;$/;"	m	struct:__anon0bfbaecf9108	typeref:typename:int
+maxDataCalls	guest/hals/ril/reference-libril/ril.h	/^    int32_t maxDataCalls;                 \/\/ The maximum number of simultaneous Data Calls tha/;"	m	struct:__anon0bfbaecf8008	typeref:typename:int32_t
+maxKeepaliveIntervalMillis	guest/hals/ril/reference-libril/ril.h	/^    int maxKeepaliveIntervalMillis;          \/* Maximum milliseconds between two packets *\/$/;"	m	struct:__anon0bfbaecfc508	typeref:typename:int
+maxSearchTime	guest/hals/ril/reference-libril/ril.h	/^    int32_t maxSearchTime;$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:int32_t
+maxStandby	guest/hals/ril/reference-libril/ril.h	/^   int maxStandby;$/;"	m	struct:__anon0bfbaecf9108	typeref:typename:int
+maxVoice	guest/hals/ril/reference-libril/ril.h	/^   int maxVoice;$/;"	m	struct:__anon0bfbaecf9108	typeref:typename:int
+max_blob_size_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  unsigned int max_blob_size_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:unsigned int
+max_elements_	common/libs/concurrency/thread_safe_queue.h	/^  std::size_t max_elements_{};$/;"	m	class:cuttlefish::ThreadSafeQueue	typeref:typename:std::size_t
+max_elements_handler_	common/libs/concurrency/thread_safe_queue.h	/^  QueueFullHandler max_elements_handler_{};$/;"	m	class:cuttlefish::ThreadSafeQueue	typeref:typename:QueueFullHandler
+max_message_size_	common/libs/utils/unix_sockets.h	/^  std::uint32_t max_message_size_;$/;"	m	class:cuttlefish::UnixMessageSocket	typeref:typename:std::uint32_t
+maximum_object_slots_	host/commands/secure_env/tpm_resource_manager.h	/^  const std::uint32_t maximum_object_slots_;$/;"	m	class:cuttlefish::TpmResourceManager	typeref:typename:const std::uint32_t
+mcc	guest/hals/ril/reference-libril/ril.h	/^    char* mcc;                 \/* MCC of the Carrier. *\/$/;"	m	struct:__anon0bfbaecf2c08	typeref:typename:char *
+mcc	guest/hals/ril/reference-libril/ril.h	/^    const char * mcc;$/;"	m	struct:__anon0bfbaecf2608	typeref:typename:const char *
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;           \/* 3-digit Mobile Country Code, in range[0, 999]; This value must$/;"	m	struct:__anon0bfbaecf6108	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5a08	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5b08	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5d08	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5e08	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5f08	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7908	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7b08	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf5808	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf5908	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^    int mcc;    \/* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf7808	typeref:typename:int
+mcc	guest/hals/ril/reference-libril/ril.h	/^  char * mcc;                         \/* MCC of the Carrier. *\/$/;"	m	struct:__anon0bfbaecf2a08	typeref:typename:char *
+mccMncs	guest/hals/ril/reference-libril/ril.h	/^    char **mccMncs;$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:char **
+mccMncsNumbers	guest/hals/ril/reference-libril/ril.h	/^    uint32_t mccMncsNumbers;$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:uint32_t
+md5	host/commands/fetcher/build_api.h	/^  std::string md5;$/;"	m	class:cuttlefish::Artifact	typeref:typename:std::string
+measurement_file_read_thread_	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::thread measurement_file_read_thread_;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:std::thread	file:
+members_	host/commands/secure_env/composite_serialization.h	/^  std::vector<keymaster::Serializable*> members_;$/;"	m	class:cuttlefish::CompositeSerializable	typeref:typename:std::vector<keymaster::Serializable * >
+memfd_create_wrapper	common/libs/fs/shared_fd.cpp	/^int memfd_create_wrapper(const char* name, unsigned int flags) {$/;"	f	namespace:cuttlefish::__anond70c3a4f0111	typeref:typename:int
+memory_mb	host/libs/config/cuttlefish_config.cpp	/^int CuttlefishConfig::memory_mb() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:int
+memory_mb	shared/config/config_auto.json	/^	"memory_mb" : 4096$/;"	n
+memory_mb	shared/config/config_foldable.json	/^	"memory_mb" : 4096,$/;"	n
+memory_mb	shared/config/config_phone.json	/^	"memory_mb" : 2048$/;"	n
+memory_mb	shared/config/config_tablet.json	/^	"memory_mb" : 4096$/;"	n
+memory_mb	shared/config/config_tv.json	/^	"memory_mb" : 2048$/;"	n
+memsetAndFreeStrings	guest/hals/ril/reference-libril/ril_service.cpp	/^void memsetAndFreeStrings(int numPointers, ...) {$/;"	f	typeref:typename:void
+merge_fs	host/commands/append_squashfs_overlay/src/main.rs	/^fn merge_fs(src: &Path, overlay: &Path, dest: &Path, overwrite: bool) -> Result<()> {$/;"	f
+message	guest/hals/ril/reference-libril/ril.h	/^    } message;$/;"	m	struct:__anon0bfbaecf1808	typeref:union:__anon0bfbaecf1808::__anon0bfbaecf190a
+message	host/commands/modem_simulator/sms_service.h	/^    std::string message;$/;"	m	struct:cuttlefish::SmsService::SmsMessage	typeref:typename:std::string
+message	host/frontend/webrtc_operator/assets/js/app.js	/^        let message = {$/;"	c	class:DeviceControlApp.getCustomDeviceStateButtonCb
+messageRef	guest/hals/ril/reference-libril/ril.h	/^    int                       messageRef;  \/* Valid field if retry is set to nonzero.$/;"	m	struct:__anon0bfbaecf1808	typeref:typename:int
+messageRef	guest/hals/ril/reference-libril/ril.h	/^    int messageRef;   \/* TP-Message-Reference for GSM,$/;"	m	struct:__anon0bfbaecf1a08	typeref:typename:int
+message_	common/libs/confui/protocol_types.h	/^  std::vector<std::uint8_t> message_;$/;"	m	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:std::vector<std::uint8_t>
+message_	host/libs/confui/session.h	/^  std::vector<std::uint8_t> message_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::vector<std::uint8_t>
+message_id_	host/commands/modem_simulator/sms_service.h	/^  int message_id_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:int
+message_loop_	host/frontend/webrtc/lib/ws_connection.cpp	/^  std::thread message_loop_;$/;"	m	class:WsConnectionContextImpl	typeref:typename:std::thread	file:
+message_reference_	host/commands/modem_simulator/pdu_parser.h	/^  std::string message_reference_;$/;"	m	class:cuttlefish::PDUParser	typeref:typename:std::string
+message_reference_	host/commands/modem_simulator/sms_service.h	/^  int message_reference_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:int
+message_sender_	host/frontend/webrtc/lib/camera_controller.h	/^  std::function<bool(const Json::Value& msg)> message_sender_;$/;"	m	class:cuttlefish::CameraController	typeref:typename:std::function<bool (const Json::Value & msg)>
+message_type	common/libs/utils/network.cpp	/^  Dhcp4MessageTypeOption message_type;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:Dhcp4MessageTypeOption	file:
+message_type	common/libs/utils/network.cpp	/^  std::uint8_t message_type;$/;"	m	struct:cuttlefish::Dhcp4MessageTypeOption	typeref:typename:std::uint8_t	file:
+message_version	guest/hals/keymaster/remote/remote_keymaster.h	/^    uint32_t message_version() { return kDefaultMessageVersion; }$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:uint32_t
+message_version	guest/hals/keymint/remote/remote_keymaster.h	/^  uint32_t message_version() { return message_version_; }$/;"	f	class:keymaster::RemoteKeymaster	typeref:typename:uint32_t
+message_version_	guest/hals/keymint/remote/remote_keymaster.h	/^  const uint32_t message_version_;$/;"	m	class:keymaster::RemoteKeymaster	typeref:typename:const uint32_t
+messages_	host/frontend/webrtc_operator/client_handler.cpp	/^  std::vector<Json::Value> messages_;$/;"	m	class:cuttlefish::PollConnectionHandler	typeref:typename:std::vector<Json::Value>	file:
+messages_on_sim_card_	host/commands/modem_simulator/sms_service.h	/^  std::map<int, SmsMessage> messages_on_sim_card_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:std::map<int,SmsMessage>
+metadata	host/commands/kernel_log_monitor/utils.h	/^  Json::Value metadata;$/;"	m	struct:monitor::ReadEventResult	typeref:typename:Json::Value
+metadata_	guest/hals/camera/vsock_camera_device_3_4.h	/^  VsockCameraMetadata metadata_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:VsockCameraMetadata
+metadata_level	common/libs/utils/tee_logging.h	/^  MetadataLevel metadata_level;$/;"	m	struct:cuttlefish::SeverityTarget	typeref:typename:MetadataLevel
+metrics_binary	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::metrics_binary() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+metrics_event	host/commands/metrics/proto/cf_log.proto	/^  optional MetricsEvent metrics_event = 5;$/;"	f	message:cuttlefish.CuttlefishLogEvent	typeref:typename:MetricsEvent
+mic-capture-control	host/frontend/webrtc_operator/assets/client.html	/^            <div id="mic-capture-control" title="Capture Microphone"><\/div>$/;"	I
+micSenders	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #micSenders = [];$/;"	M	class:DeviceConnection
+midDrag	host/frontend/webrtc_operator/assets/js/controls.js	/^    midDrag: false,$/;"	p	class:createModalButton.modalOffsets
+mids	host/commands/modem_simulator/sms_service.h	/^    std::string mids;$/;"	m	struct:cuttlefish::SmsService::BroadcastConfig	typeref:typename:std::string
+misc_path_	host/libs/config/data_image.cpp	/^  MiscImagePath& misc_path_;$/;"	m	class:cuttlefish::InitializeMiscImageImpl	typeref:typename:MiscImagePath &	file:
+misc_service_	host/commands/modem_simulator/modem_simulator.h	/^  MiscService* misc_service_{nullptr};$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:MiscService *
+misc_service_	host/commands/modem_simulator/network_service.h	/^  MiscService* misc_service_ = nullptr;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:MiscService *
+mkv_mutex_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::mutex mkv_mutex_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Impl	typeref:typename:std::mutex	file:
+mnc	guest/hals/ril/reference-libril/ril.h	/^    char* mnc;                 \/* MNC of the Carrier. *\/$/;"	m	struct:__anon0bfbaecf2c08	typeref:typename:char *
+mnc	guest/hals/ril/reference-libril/ril.h	/^    const char * mnc;$/;"	m	struct:__anon0bfbaecf2608	typeref:typename:const char *
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;           \/* 2 or 3-digit Mobile Network Code, in range [0, 999], This value must /;"	m	struct:__anon0bfbaecf6108	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7908	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7b08	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf7808	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999;$/;"	m	struct:__anon0bfbaecf5808	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999;$/;"	m	struct:__anon0bfbaecf5908	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999;$/;"	m	struct:__anon0bfbaecf5a08	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999;$/;"	m	struct:__anon0bfbaecf5b08	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999;$/;"	m	struct:__anon0bfbaecf5d08	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999;$/;"	m	struct:__anon0bfbaecf5e08	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^    int mnc;    \/* 2 or 3-digit Mobile Network Code, 0..999;$/;"	m	struct:__anon0bfbaecf5f08	typeref:typename:int
+mnc	guest/hals/ril/reference-libril/ril.h	/^  char * mnc ;                        \/* MNC of the Carrier. *\/$/;"	m	struct:__anon0bfbaecf2a08	typeref:typename:char *
+mnc_digit	guest/hals/ril/reference-libril/ril.h	/^    int mnc_digit;\/*2 or 3-digit*\/$/;"	m	struct:__anon0bfbaecf7808	typeref:typename:int
+mnc_digit	guest/hals/ril/reference-libril/ril.h	/^    int mnc_digit;\/*2 or 3-digit*\/$/;"	m	struct:__anon0bfbaecf7908	typeref:typename:int
+mnc_digit	guest/hals/ril/reference-libril/ril.h	/^    int mnc_digit;\/*2 or 3-digit*\/$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:int
+mnc_digit	guest/hals/ril/reference-libril/ril.h	/^    int mnc_digit;\/*2 or 3-digit*\/$/;"	m	struct:__anon0bfbaecf7b08	typeref:typename:int
+mobile_bridge_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::mobile_bridge_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+mobile_tap	host/commands/assemble_cvd/alloc.h	/^  IfaceData mobile_tap;$/;"	m	struct:cuttlefish::IfaceConfig	typeref:typename:IfaceData
+mobile_tap_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::mobile_tap_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+modalOffsets	host/frontend/webrtc_operator/assets/js/controls.js	/^  let modalOffsets = {$/;"	c	class:createModalButton
+mode	common/libs/utils/flag_parser.h	/^  FlagAliasMode mode;$/;"	m	struct:cuttlefish::FlagAlias	typeref:typename:FlagAliasMode
+mode	host/commands/modem_simulator/sms_service.h	/^    int mode;$/;"	m	struct:cuttlefish::SmsService::BroadcastConfig	typeref:typename:int
+mode	host/commands/modem_simulator/sup_service.h	/^    int mode;                 \/\/ 0: disable; 1: enable; 2: query status$/;"	m	struct:cuttlefish::SupService::CallWaitingInfo	typeref:typename:int
+mode_flag_	host/libs/config/adb/flags.cpp	/^  Flag mode_flag_;$/;"	m	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:Flag	file:
+mode_help	host/libs/config/adb/flags.cpp	/^  static constexpr char mode_help[] =$/;"	m	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:char[]	file:
+mode_mtx_	host/libs/confui/host_mode_ctrl.h	/^  std::mutex mode_mtx_;$/;"	m	class:cuttlefish::HostModeCtrl	typeref:typename:std::mutex
+mode_mtx_	host/libs/screen_connector/screen_connector_ctrl.h	/^  std::mutex mode_mtx_;$/;"	m	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:std::mutex
+modem	guest/hals/ril/reference-libril/ril.h	/^     RIL_HardwareConfig_Modem modem;$/;"	m	union:__anon0bfbaecf9308::__anon0bfbaecf940a	typeref:typename:RIL_HardwareConfig_Modem
+modem	host/commands/modem_simulator/cf_device_config.cpp	/^namespace modem {$/;"	n	namespace:cuttlefish	file:
+modem	host/commands/modem_simulator/device_config.h	/^namespace modem {$/;"	n	namespace:cuttlefish
+modemCognitive	guest/hals/ril/reference-libril/ril.h	/^    int modemCognitive;         \/* indicating the APN setting was sent to the modem through$/;"	m	struct:__anon0bfbaecfc108	typeref:typename:int
+modemId	guest/hals/ril/reference-libril/ril.h	/^    int modemId;$/;"	m	struct:__anon0bfbaecfbb08	typeref:typename:int
+modemResetInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::modemResetInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+modemUuid	guest/hals/ril/reference-libril/ril.h	/^   char modemUuid[MAX_UUID_LENGTH];$/;"	m	struct:__anon0bfbaecf9208	typeref:typename:char[]
+modem_	host/commands/modem_simulator/channel_monitor.h	/^  ModemSimulator* modem_;$/;"	m	class:cuttlefish::ChannelMonitor	typeref:typename:ModemSimulator *
+modem_id_	host/commands/modem_simulator/modem_simulator.h	/^  int32_t modem_id_;$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:int32_t
+modem_radio_capability_	host/commands/modem_simulator/network_service.h	/^  int modem_radio_capability_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:int
+modem_services_	host/commands/modem_simulator/modem_simulator.h	/^  std::map<ModemServiceType, std::unique_ptr<ModemService>> modem_services_;$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:std::map<ModemServiceType,std::unique_ptr<ModemService>>
+modem_side_	host/commands/modem_simulator/unittest/service_test.cpp	/^  static Client* modem_side_;$/;"	m	class:ModemServiceTest	typeref:typename:Client *	file:
+modem_side_	host/commands/modem_simulator/unittest/service_test.cpp	/^Client* ModemServiceTest::modem_side_ = nullptr;$/;"	m	class:ModemServiceTest	typeref:typename:Client *
+modem_simulator_	host/commands/modem_simulator/unittest/service_test.cpp	/^  static ModemSimulator* modem_simulator_;$/;"	m	class:ModemServiceTest	typeref:typename:ModemSimulator *	file:
+modem_simulator_	host/commands/modem_simulator/unittest/service_test.cpp	/^ModemSimulator* ModemServiceTest::modem_simulator_ = nullptr;$/;"	m	class:ModemServiceTest	typeref:typename:ModemSimulator *
+modem_simulator_host_id	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::modem_simulator_host_id() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+modem_simulator_instance_number	host/libs/config/cuttlefish_config.cpp	/^int CuttlefishConfig::modem_simulator_instance_number() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:int
+modem_simulator_ports	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::modem_simulator_ports() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+modem_simulator_sim_type	host/libs/config/cuttlefish_config.cpp	/^int CuttlefishConfig::modem_simulator_sim_type() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:int
+modem_technoloy	host/commands/modem_simulator/nvram_config.cpp	/^int NvramConfig::InstanceSpecific::modem_technoloy() const {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:int
+modes_	host/libs/config/adb/data.cpp	/^  std::set<AdbMode> modes_;$/;"	m	class:cuttlefish::AdbConfigImpl	typeref:typename:std::set<AdbMode>	file:
+monitor	host/commands/kernel_log_monitor/kernel_log_server.cc	/^namespace monitor {$/;"	n	file:
+monitor	host/commands/kernel_log_monitor/kernel_log_server.h	/^namespace monitor {$/;"	n
+monitor	host/commands/kernel_log_monitor/utils.cc	/^namespace monitor {$/;"	n	file:
+monitor	host/commands/kernel_log_monitor/utils.h	/^namespace monitor {$/;"	n
+monitor_	host/commands/run_cvd/process_monitor.h	/^  pid_t monitor_;$/;"	m	class:cuttlefish::ProcessMonitor	typeref:typename:pid_t
+monitor_socket_	host/commands/run_cvd/process_monitor.h	/^  SharedFD monitor_socket_;$/;"	m	class:cuttlefish::ProcessMonitor	typeref:typename:SharedFD
+monitor_thread_	host/commands/modem_simulator/channel_monitor.h	/^  std::thread monitor_thread_;$/;"	m	class:cuttlefish::ChannelMonitor	typeref:typename:std::thread
+monitored_processes_	host/commands/run_cvd/process_monitor.h	/^  std::vector<MonitorEntry> monitored_processes_;$/;"	m	class:cuttlefish::ProcessMonitor	typeref:typename:std::vector<MonitorEntry>
+mouseCtx	host/frontend/webrtc_operator/assets/js/app.js	/^    let mouseCtx = {$/;"	c	class:DeviceControlApp.startMouseTracking
+mouseDownOffsetX	host/frontend/webrtc_operator/assets/js/controls.js	/^    mouseDownOffsetX: null,$/;"	p	class:createModalButton.modalOffsets
+mouseDownOffsetY	host/frontend/webrtc_operator/assets/js/controls.js	/^    mouseDownOffsetY: null,$/;"	p	class:createModalButton.modalOffsets
+msg	common/libs/net/netlink_client.cpp	/^  struct msghdr msg {};$/;"	s	function:cuttlefish::__anon61381e100111::NetlinkClientImpl::CheckResponse	file:
+msg_len	guest/hals/confirmationui/include/TrustyIpc.h	/^    uint32_t msg_len;$/;"	m	struct:confirmationui_msg_args	typeref:typename:uint32_t
+msg_queue	host/libs/msg_queue/README.md	/^# msg_queue$/;"	c
+msgid	host/libs/msg_queue/msg_queue.h	/^  int msgid;$/;"	m	class:cuttlefish::SysVMessageQueue	typeref:typename:int
+mtap	host/libs/allocd/request.h	/^  mtap,         \/\/ mobile tap$/;"	e	enum:cuttlefish::IfaceType
+mtu	guest/hals/ril/reference-libril/ril.h	/^    int             mtu;        \/* MTU received from network$/;"	m	struct:__anon0bfbaecf1508	typeref:typename:int
+mtu	guest/hals/ril/reference-libril/ril.h	/^    int mtu;                    \/* maximum transmission unit (MTU) size in bytes *\/$/;"	m	struct:__anon0bfbaecfc108	typeref:typename:int
+mtu	guest/hals/ril/reference-libril/ril.h	/^    int mtu;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+mtuV4	guest/hals/ril/reference-libril/ril.h	/^    int             mtuV4;      \/* MTU received from network for IPv4.$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:int
+mtuV6	guest/hals/ril/reference-libril/ril.h	/^    int             mtuV6;      \/* MTU received from network for IPv6.$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:int
+mtx	host/frontend/webrtc/audio_handler.h	/^    std::mutex mtx;$/;"	m	struct:cuttlefish::AudioHandler::StreamDesc	typeref:typename:std::mutex
+mtx_	common/libs/concurrency/semaphore.h	/^  std::mutex mtx_;$/;"	m	class:cuttlefish::Semaphore	typeref:typename:std::mutex
+mtx_	host/libs/confui/host_utils.h	/^  std::mutex mtx_;$/;"	m	class:cuttlefish::confui::thread::ThreadTracer	typeref:typename:std::mutex
+multiSimPolicy	guest/hals/ril/reference-libril/ril.h	/^  RIL_SimLockMultiSimPolicy multiSimPolicy; \/* multisim policy *\/$/;"	m	struct:__anon0bfbaecf2908	typeref:typename:RIL_SimLockMultiSimPolicy
+multiplexer_	host/libs/screen_connector/screen_connector_multiplexer.h	/^  Multiplexer multiplexer_;$/;"	m	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:Multiplexer
+multitouch_slot	host/frontend/webrtc/connection_observer.cpp	/^struct multitouch_slot {$/;"	s	namespace:cuttlefish	file:
+mustShell	tools/create_base_image.go	/^func mustShell(cmd string) string {$/;"	f	package:main	typeref:typename:string
+mute_on_	host/commands/modem_simulator/call_service.h	/^  bool mute_on_;$/;"	m	class:cuttlefish::CallService	typeref:typename:bool
+mutex_	guest/hals/camera/stream_buffer_cache.h	/^  std::mutex mutex_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::StreamBufferCache	typeref:typename:std::mutex
+mutex_	guest/hals/camera/vsock_camera_provider_2_7.h	/^  std::mutex mutex_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:std::mutex
+mutex_	host/commands/fetcher/curl_wrapper.cc	/^  std::mutex mutex_;$/;"	m	class:cuttlefish::__anondfffca8d0111::CurlWrapperImpl	typeref:typename:std::mutex	file:
+mutex_instance	guest/hals/ril/reference-libril/rilSocketQueue.h	/^    pthread_mutex_t mutex_instance;$/;"	m	class:Ril_queue	typeref:typename:pthread_mutex_t
+mvnoMatchData	guest/hals/ril/reference-libril/ril.h	/^    char *mvnoMatchData;        \/* MVNO match data. Can be anything defined by the carrier.$/;"	m	struct:__anon0bfbaecfc108	typeref:typename:char *
+mvnoMatchData	guest/hals/ril/reference-libril/ril.h	/^    char *mvnoMatchData;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:char *
+mvnoType	guest/hals/ril/reference-libril/ril.h	/^    char *mvnoType;             \/* the MVNO type: possible values are "imsi", "gid", "spn" *\/$/;"	m	struct:__anon0bfbaecfc108	typeref:typename:char *
+mvnoType	guest/hals/ril/reference-libril/ril.h	/^    char *mvnoType;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:char *
+myiccfile	host/commands/modem_simulator/unittest/service_test.cpp	/^static const char *myiccfile =$/;"	v	typeref:typename:const char *	file:
+name	apex/com.google.aosp_cf_x86_64_phone.rros/apex_manifest.json	/^  "name": "com.google.aosp_cf_x86_64_phone.rros",$/;"	s
+name	apex/com.google.cf.bt/manifest.json	/^  "name": "com.google.cf.bt",$/;"	s
+name	apex/com.google.cf.input.config/apex_manifest.json	/^  "name": "com.android.input.config",$/;"	s
+name	apex/com.google.cf.rild/apex_manifest.json	/^  "name": "com.google.cf.rild",$/;"	s
+name	apex/com.google.cf.wifi/apex_manifest.json	/^  "name": "com.android.wifi.hal",$/;"	s
+name	common/libs/utils/flag_parser.h	/^  std::string name;$/;"	m	struct:cuttlefish::FlagAlias	typeref:typename:std::string
+name	guest/hals/ril/reference-libril/RilSocket.h	/^        const char* name;$/;"	m	class:RilSocket	typeref:typename:const char *
+name	guest/hals/ril/reference-libril/ril.h	/^    char *          name;               \/* Remote party name *\/$/;"	m	struct:__anon0bfbaecf4208	typeref:typename:char *
+name	guest/hals/ril/reference-libril/ril.h	/^    char *          name;               \/* Remote party name *\/$/;"	m	struct:__anon0bfbaecf4308	typeref:typename:char *
+name	guest/hals/ril/reference-libril/ril.h	/^    char *          name;       \/* Remote party name *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:char *
+name	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_InfoRecName name;$/;"	m	struct:__anon0bfbaecf8908	typeref:typename:RIL_CDMA_InfoRecName
+name	host/commands/assemble_cvd/alloc.h	/^  std::string name;$/;"	m	struct:cuttlefish::IfaceData	typeref:typename:std::string
+name	host/commands/fetcher/build_api.h	/^  std::string name;$/;"	m	class:cuttlefish::Artifact	typeref:typename:std::string
+name	host/libs/vm_manager/crosvm_manager.h	/^  static std::string name() { return "crosvm"; }$/;"	f	class:cuttlefish::vm_manager::CrosvmManager	typeref:typename:std::string
+name	host/libs/vm_manager/qemu_manager.h	/^  static std::string name() { return "qemu_cli"; }$/;"	f	class:cuttlefish::vm_manager::QemuManager	typeref:typename:std::string
+name	tests/hal/hal_implementation_test.cpp	/^  std::string name;$/;"	m	struct:VersionedAidlPackage	typeref:typename:std::string	file:
+name2id_	host/libs/confui/host_utils.h	/^  std::map<std::string, std::thread::id> name2id_;$/;"	m	class:cuttlefish::confui::thread::ThreadTracer	typeref:typename:std::map<std::string,std::thread::id>
+namePresentation	guest/hals/ril/reference-libril/ril.h	/^    int             namePresentation; \/* 0=Allowed, 1=Restricted, 2=Not Specified\/Unknown 3=Pa/;"	m	struct:__anon0bfbaecf1108	typeref:typename:int
+name_	common/libs/net/network_interface.h	/^  std::string name_;$/;"	m	class:cuttlefish::NetworkInterface	typeref:typename:std::string
+name_	host/commands/start/flag_forwarder.cc	/^  std::string name_;$/;"	m	class:SubprocessFlag	typeref:typename:std::string	file:
+name_	host/libs/allocd/resource.h	/^  std::string name_{};$/;"	m	class:cuttlefish::StaticResource	typeref:typename:std::string
+nanos	host/commands/metrics/proto/common.proto	/^  required int32 nanos = 2;$/;"	f	message:Duration	typeref:typename:int32
+nanos	host/commands/metrics/proto/common.proto	/^  required int32 nanos = 2;$/;"	f	message:Timestamp	typeref:typename:int32
+nb_snapshots	host/libs/image_aggregator/image_aggregator.cc	/^  Be32 nb_snapshots;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be32	file:
+nci	guest/hals/ril/reference-libril/ril.h	/^    uint64_t nci;      \/* NR Cell Identity in range [0, 68719476735] (36 bits) described in 3GP/;"	m	struct:__anon0bfbaecf6108	typeref:typename:uint64_t
+net2modem	guest/hals/ril/reference-ril/reference-ril.c	/^static int net2modem[] = {$/;"	v	typeref:typename:int[]	file:
+net2pmask	guest/hals/ril/reference-ril/reference-ril.c	/^static int32_t net2pmask[] = {$/;"	v	typeref:typename:int32_t[]	file:
+netlink_fd_	common/libs/net/netlink_client.cpp	/^  SharedFD netlink_fd_;$/;"	m	class:cuttlefish::__anon61381e100111::NetlinkClientImpl	typeref:typename:SharedFD	file:
+networkId	guest/hals/ril/reference-libril/ril.h	/^    int networkId;      \/* Network Id 0..65535, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf5c08	typeref:typename:int
+networkId	guest/hals/ril/reference-libril/ril.h	/^    int networkId;      \/* Network Id 0..65535, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf7c08	typeref:typename:int
+networkModePossible	guest/hals/ril/reference-ril/reference-ril.c	/^static int networkModePossible(ModemInfo *mdm, int nm)$/;"	f	typeref:typename:int	file:
+networkScanResultInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::networkScanResultInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+networkStateChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::networkStateChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+network_infos	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfo_v12* network_infos;    \/\/ List of network information$/;"	m	struct:__anon0bfbaecfb308	typeref:typename:RIL_CellInfo_v12 *
+network_infos_length	guest/hals/ril/reference-libril/ril.h	/^    uint32_t network_infos_length;      \/\/ Total length of RIL_CellInfo$/;"	m	struct:__anon0bfbaecfb308	typeref:typename:uint32_t
+network_selection_mode	host/commands/modem_simulator/nvram_config.cpp	/^int NvramConfig::InstanceSpecific::network_selection_mode() const {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:int
+network_service_	host/commands/modem_simulator/call_service.h	/^  NetworkService* network_service_;$/;"	m	class:cuttlefish::CallService	typeref:typename:NetworkService *
+network_service_	host/commands/modem_simulator/modem_simulator.h	/^  NetworkService* network_service_{nullptr};$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:NetworkService *
+network_service_	host/commands/modem_simulator/sim_service.h	/^  NetworkService* network_service_;$/;"	m	class:cuttlefish::SimService	typeref:typename:NetworkService *
+network_thread_	host/frontend/webrtc/lib/streamer.cpp	/^  std::unique_ptr<rtc::Thread> network_thread_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::unique_ptr<rtc::Thread>	file:
+network_type	host/commands/modem_simulator/network_service.h	/^    AccessTechnoloy network_type;$/;"	m	struct:cuttlefish::NetworkService::NetworkRegistrationStatus	typeref:typename:AccessTechnoloy
+newBroadcastSmsInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::newBroadcastSmsInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+newSmsInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::newSmsInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+newSmsOnSimInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::newSmsOnSimInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+newSmsStatusReportInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::newSmsStatusReportInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+new_action	host/commands/kernel_log_monitor/main.cc	/^  struct sigaction new_action {$/;"	s	function:main	file:
+new_action	host/commands/logcat_receiver/main.cpp	/^  struct sigaction new_action {$/;"	s	function:main	file:
+new_item_	common/libs/concurrency/thread_safe_queue.h	/^  std::condition_variable new_item_;$/;"	m	class:cuttlefish::ThreadSafeQueue	typeref:typename:std::condition_variable
+new_tombstone_create_notifier	guest/monitoring/tombstone_transmit/tombstone_transmit.cpp	/^static int new_tombstone_create_notifier(void) {$/;"	f	typeref:typename:int	file:
+next	guest/hals/ril/reference-libril/RilSapSocket.h	/^            RilSapSocketList *next;$/;"	m	struct:RilSapSocket::RilSapSocketList	typeref:typename:RilSapSocketList *
+next	guest/hals/ril/reference-libril/ril_event.h	/^    struct ril_event *next;$/;"	m	struct:ril_event	typeref:struct:ril_event *
+nextTok	guest/hals/ril/reference-ril/at_tok.c	/^static char * nextTok(char **p_cur)$/;"	f	typeref:typename:char *	file:
+next_disk_offset_	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t next_disk_offset_;$/;"	m	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:std::uint64_t	file:
+next_frame_	guest/hals/camera/vsock_frame_provider.h	/^  std::vector<char> next_frame_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::vector<char>
+next_frame_mutex_	host/frontend/webrtc/display_handler.h	/^  std::mutex next_frame_mutex_;$/;"	m	class:cuttlefish::DisplayHandler	typeref:typename:std::mutex
+next_request_wait_millis	host/commands/metrics/proto/clientanalytics.proto	/^  optional int64 next_request_wait_millis = 1;$/;"	f	message:LogResponse	typeref:typename:int64
+next_serial_	host/commands/modem_simulator/thread_looper.h	/^  std::atomic<Serial> next_serial_;$/;"	m	class:cuttlefish::ThreadLooper	typeref:typename:std::atomic<Serial>
+next_tombstone_path	host/commands/tombstone_receiver/main.cpp	/^static std::string next_tombstone_path(const std::string& tombstone_dir) {$/;"	f	namespace:cuttlefish	typeref:typename:std::string	file:
+nfds	guest/hals/ril/reference-libril/ril_event.cpp	/^static int nfds = 0;$/;"	v	typeref:typename:int	file:
+ngran_bands	guest/hals/ril/reference-libril/ril.h	/^        RIL_NgranBands ngran_bands[MAX_BANDS];$/;"	m	union:__anon0bfbaecfab08::__anon0bfbaecfac0a	typeref:typename:RIL_NgranBands[]
+ngran_bands	guest/hals/ril/reference-libril/ril.h	/^        RIL_NgranBands ngran_bands[MAX_BANDS];$/;"	m	union:__anon0bfbaecfae08::__anon0bfbaecfaf0a	typeref:typename:RIL_NgranBands[]
+nitzTimeReceived	guest/hals/ril/reference-libril/ril_service.cpp	/^int64_t nitzTimeReceived[1];$/;"	v	typeref:typename:int64_t[1]
+nitzTimeReceived	guest/hals/ril/reference-libril/ril_service.cpp	/^int64_t nitzTimeReceived[SIM_COUNT];$/;"	v	typeref:typename:int64_t[]
+nitzTimeReceivedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::nitzTimeReceivedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+nl_client_	common/libs/net/network_interface_manager.h	/^  std::unique_ptr<NetlinkClient> nl_client_;$/;"	m	class:cuttlefish::NetworkInterfaceManager	typeref:typename:std::unique_ptr<NetlinkClient>
+nmea	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto	/^  string nmea = 1;$/;"	f	message:gnss_grpc_proxy.SendNmeaRequest	typeref:typename:string
+nmea_file_read_thread_	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::thread nmea_file_read_thread_;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:std::thread	file:
+node1_mac_	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  uint8_t node1_mac_[6];$/;"	m	class:cuttlefish::WmediumdMessageSetSnr	typeref:typename:uint8_t[6]
+node2_mac_	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  uint8_t node2_mac_[6];$/;"	m	class:cuttlefish::WmediumdMessageSetSnr	typeref:typename:uint8_t[6]
+noopRemoveWarning	guest/hals/ril/reference-ril/reference-ril.c	/^static void *noopRemoveWarning( void *a ) { return a; }$/;"	f	typeref:typename:void *	file:
+notificationType	guest/hals/ril/reference-libril/ril.h	/^    int     notificationType;   \/*$/;"	m	struct:__anon0bfbaecf3108	typeref:typename:int
+notifyDeviceStateChange	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<void> VsockCameraProvider::notifyDeviceStateChange($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<void>
+notifyError	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^void VsockCameraDeviceSession::notifyError(uint32_t frame_number,$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:void
+notifyShutter	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^void VsockCameraDeviceSession::notifyShutter(uint32_t frame_number,$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:void
+nr	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoNr          nr;$/;"	m	union:__anon0bfbaecf7208::__anon0bfbaecf730a	typeref:typename:RIL_CellInfoNr
+nr_csi_rsrp	host/commands/modem_simulator/network_service.h	/^    int32_t nr_csi_rsrp;  \/* CSI reference signal received power, multiplied by -1.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int32_t
+nr_csi_rsrq	host/commands/modem_simulator/network_service.h	/^    int32_t nr_csi_rsrq;  \/* CSI reference signal received quality, multiplied by -1.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int32_t
+nr_csi_sinr	host/commands/modem_simulator/network_service.h	/^    int32_t nr_csi_sinr;  \/* CSI signal-to-noise and interference ratio.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int32_t
+nr_ss_rsrp	host/commands/modem_simulator/network_service.h	/^    int32_t nr_ss_rsrp;   \/* SS reference signal received power, multiplied by -1.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int32_t
+nr_ss_rsrq	host/commands/modem_simulator/network_service.h	/^    int32_t nr_ss_rsrq;   \/* SS reference signal received quality, multiplied by -1.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int32_t
+nr_ss_sinr	host/commands/modem_simulator/network_service.h	/^    int32_t nr_ss_sinr;   \/* SS signal-to-noise and interference ratio.$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int32_t
+nrarfcn	guest/hals/ril/reference-libril/ril.h	/^    int32_t nrarfcn;   \/* NR Absolute Radio Frequency Channel Number, in range [0, 3279165].$/;"	m	struct:__anon0bfbaecf6108	typeref:typename:int32_t
+null_ptr_	common/libs/concurrency/multiplexer.h	/^  QueuePtr null_ptr_;$/;"	m	class:cuttlefish::Multiplexer	typeref:typename:QueuePtr
+numOfLiveModems	guest/hals/ril/reference-libril/ril.h	/^    int numOfLiveModems;$/;"	m	struct:__anon0bfbaecfbd08	typeref:typename:int
+numValidIndexes	guest/hals/ril/reference-libril/ril.h	/^  int numValidIndexes; \/* This gives the number of valid values in cfInfo.$/;"	m	struct:__anon0bfbaecf9808	typeref:typename:int
+num_applications	guest/hals/ril/reference-libril/ril.h	/^  int           num_applications;                \/* value <= RIL_CARD_MAX_APPS *\/$/;"	m	struct:__anon0bfbaecf3908	typeref:typename:int
+num_applications	guest/hals/ril/reference-libril/ril.h	/^  int           num_applications;                \/* value <= RIL_CARD_MAX_APPS *\/$/;"	m	struct:__anon0bfbaecf3a08	typeref:typename:int
+num_partition_entries	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint32_t num_partition_entries;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint32_t	file:
+num_sectors	host/libs/config/mbr.h	/^  std::uint32_t num_sectors;$/;"	m	struct:MbrPartitionEntry	typeref:typename:std::uint32_t
+num_tombstones_in_last_second	host/commands/tombstone_receiver/main.cpp	/^static uint num_tombstones_in_last_second = 0;$/;"	v	namespace:cuttlefish	typeref:typename:uint	file:
+number	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_NumberInfoRecord            number;$/;"	m	union:__anon0bfbaecf8908::__anon0bfbaecf8a0a	typeref:typename:RIL_CDMA_NumberInfoRecord
+number	guest/hals/ril/reference-libril/ril.h	/^    char *          number;             \/* Remote party number *\/$/;"	m	struct:__anon0bfbaecf4208	typeref:typename:char *
+number	guest/hals/ril/reference-libril/ril.h	/^    char *          number;             \/* Remote party number *\/$/;"	m	struct:__anon0bfbaecf4308	typeref:typename:char *
+number	guest/hals/ril/reference-libril/ril.h	/^    char *          number;      \/* "number" from TS 27.007 7.11. May be NULL *\/$/;"	m	struct:__anon0bfbaecf2108	typeref:typename:char *
+number	guest/hals/ril/reference-libril/ril.h	/^    char *          number;     \/* Remote party number *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:char *
+number	guest/hals/ril/reference-libril/ril.h	/^    char *  number;             \/* "number" from 27.007 7.17$/;"	m	struct:__anon0bfbaecf3108	typeref:typename:char *
+number	host/commands/modem_simulator/call_service.h	/^    std::string number;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:std::string
+number	host/commands/modem_simulator/sup_service.h	/^    std::string number; \/\/ "number" from TS 27.007 7.11. May be NULL$/;"	m	struct:cuttlefish::SupService::CallForwardInfo	typeref:typename:std::string
+numberOfInfoRecs	guest/hals/ril/reference-libril/ril.h	/^  char numberOfInfoRecs;$/;"	m	struct:__anon0bfbaecf8b08	typeref:typename:char
+numberPresentation	guest/hals/ril/reference-libril/ril.h	/^    int             numberPresentation; \/* 0=Allowed, 1=Restricted, 2=Not Specified\/Unknown *\/$/;"	m	struct:__anon0bfbaecf4208	typeref:typename:int
+numberPresentation	guest/hals/ril/reference-libril/ril.h	/^    int             numberPresentation; \/* 0=Allowed, 1=Restricted, 2=Not Specified\/Unknown *\/$/;"	m	struct:__anon0bfbaecf4308	typeref:typename:int
+numberPresentation	guest/hals/ril/reference-libril/ril.h	/^    int             numberPresentation; \/* 0=Allowed, 1=Restricted, 2=Not Specified\/Unknown 3=/;"	m	struct:__anon0bfbaecf1108	typeref:typename:int
+number_of_ones	common/libs/device_config/host_device_config.cpp	/^uint8_t number_of_ones(unsigned long val) {$/;"	f	namespace:cuttlefish::__anonf277137d0111	typeref:typename:uint8_t
+number_plan	guest/hals/ril/reference-libril/ril.h	/^    int             number_plan;        \/* 0=Unknown, 1=ISDN, 3=Data, 4=Telex, 8=Nat'l, 9=Priva/;"	m	struct:__anon0bfbaecf4308	typeref:typename:int
+number_plan	guest/hals/ril/reference-libril/ril.h	/^  char number_plan;$/;"	m	struct:__anon0bfbaecf8308	typeref:typename:char
+number_type	guest/hals/ril/reference-libril/ril.h	/^    int             number_type;        \/* 0=Unknown, 1=International, 2=National,$/;"	m	struct:__anon0bfbaecf4308	typeref:typename:int
+number_type	guest/hals/ril/reference-libril/ril.h	/^  char number_type;$/;"	m	struct:__anon0bfbaecf8308	typeref:typename:char
+number_type	host/commands/modem_simulator/sup_service.h	/^    int number_type;    \/\/ From 27.007 +CCFC\/+CLCK "class"$/;"	m	struct:cuttlefish::SupService::CallForwardInfo	typeref:typename:int
+numeric	host/commands/modem_simulator/network_service.h	/^    std::string numeric;$/;"	m	struct:cuttlefish::NetworkService::NetworkOperator	typeref:typename:std::string
+nvReadItem	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::nvReadItem(int32_t serial, NvItem itemId) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+nvReadItemResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::nvReadItemResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+nvResetConfig	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::nvResetConfig(int32_t serial, ResetNvType resetType) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+nvResetConfigResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::nvResetConfigResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+nvWriteCdmaPrl	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::nvWriteCdmaPrl(int32_t serial, const hidl_vec<uint8_t>& prl) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+nvWriteCdmaPrlResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::nvWriteCdmaPrlResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+nvWriteItem	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::nvWriteItem(int32_t serial, const NvWriteItem& item) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+nvWriteItemResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::nvWriteItemResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+observer_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::shared_ptr<ConnectionObserver> observer_;$/;"	m	class:cuttlefish::webrtc_streaming::AdbChannelHandler	typeref:typename:std::shared_ptr<ConnectionObserver>	file:
+observer_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::shared_ptr<ConnectionObserver> observer_;$/;"	m	class:cuttlefish::webrtc_streaming::BluetoothChannelHandler	typeref:typename:std::shared_ptr<ConnectionObserver>	file:
+observer_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::shared_ptr<ConnectionObserver> observer_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraChannelHandler	typeref:typename:std::shared_ptr<ConnectionObserver>	file:
+observer_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::shared_ptr<ConnectionObserver> observer_;$/;"	m	class:cuttlefish::webrtc_streaming::ControlChannelHandler	typeref:typename:std::shared_ptr<ConnectionObserver>	file:
+observer_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::shared_ptr<ConnectionObserver> observer_;$/;"	m	class:cuttlefish::webrtc_streaming::InputChannelHandler	typeref:typename:std::shared_ptr<ConnectionObserver>	file:
+observer_	host/frontend/webrtc/lib/client_handler.h	/^  std::shared_ptr<ConnectionObserver> observer_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::shared_ptr<ConnectionObserver>
+observer_	host/frontend/webrtc/lib/ws_connection.cpp	/^  std::weak_ptr<WsConnectionObserver> observer_;$/;"	m	class:WsConnectionImpl	typeref:typename:std::weak_ptr<WsConnectionObserver>	file:
+observers_mutex_	host/frontend/webrtc/lib/audio_track_source_impl.h	/^  std::mutex observers_mutex_;$/;"	m	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:std::mutex
+oemHookRawInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::oemHookRawInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+oemHookService	guest/hals/ril/reference-libril/ril_service.cpp	/^sp<OemHookImpl> oemHookService[1];$/;"	v	typeref:typename:sp<OemHookImpl>[1]
+oemHookService	guest/hals/ril/reference-libril/ril_service.cpp	/^sp<OemHookImpl> oemHookService[SIM_COUNT];$/;"	v	typeref:typename:sp<OemHookImpl>[]
+offset	common/libs/net/netlink_request_test.cpp	/^  size_t offset = sizeof(nlmsghdr);$/;"	v	namespace:cuttlefish::__anon1ff2f3d90111	typeref:typename:size_t
+offset	host/libs/image_aggregator/cdisk_spec.proto	/^  uint64 offset = 2;$/;"	f	message:ComponentDisk	typeref:typename:uint64
+offset	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t offset;$/;"	m	struct:cuttlefish::__anon02806fd80111::PartitionInfo	typeref:typename:std::uint64_t	file:
+ok	host/frontend/webrtc/lib/utils.h	/^  bool ok() const { return !error_.has_value(); }$/;"	f	class:cuttlefish::webrtc_streaming::ValidationResult	typeref:typename:bool
+onATReaderClosed	guest/hals/ril/reference-ril/reference-ril.c	/^static void onATReaderClosed()$/;"	f	typeref:typename:void	file:
+onATTimeout	guest/hals/ril/reference-ril/reference-ril.c	/^static void onATTimeout()$/;"	f	typeref:typename:void	file:
+onAdbMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #onAdbMessage;$/;"	M	class:DeviceConnection
+onAdbMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  onAdbMessage(cb) {$/;"	m	class:DeviceConnection
+onAnswer	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  async #onAnswer(answer) {$/;"	m	class:Controller
+onBind	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public IBinder onBind(Intent intent) {$/;"	m	class:GceService
+onBluetoothMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #onBluetoothMessage;$/;"	M	class:DeviceConnection
+onBluetoothMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  onBluetoothMessage(cb) {$/;"	m	class:DeviceConnection
+onCameraCaptureToggle	host/frontend/webrtc_operator/assets/js/app.js	/^  #onCameraCaptureToggle(enabled) {$/;"	m	class:DeviceControlApp
+onCancel	guest/hals/ril/reference-libril/ril.h	/^    RIL_Cancel onCancel;$/;"	m	struct:__anon0bfbaecfbf08	typeref:typename:RIL_Cancel
+onCancel	guest/hals/ril/reference-ril/reference-ril.c	/^static void onCancel (RIL_Token t __unused)$/;"	f	typeref:typename:void	file:
+onCommand	host/frontend/webrtc_operator/assets/js/controls.js	/^  let onCommand =$/;"	f	function:cmdConsole
+onConfigurationChanged	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public void onConfigurationChanged(Configuration config) {$/;"	m	class:GceService
+onConnectionStateChange	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  onConnectionStateChange(cb) {$/;"	m	class:DeviceConnection
+onContinueDrag	host/frontend/webrtc_operator/assets/js/app.js	/^    function onContinueDrag(e) {$/;"	f	function:DeviceControlApp.startMouseTracking
+onControlMessage	host/frontend/webrtc_operator/assets/js/app.js	/^  #onControlMessage(message) {$/;"	m	class:DeviceControlApp
+onControlMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #onControlMessage;$/;"	M	class:DeviceConnection
+onControlMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  onControlMessage(cb) {$/;"	m	class:DeviceConnection
+onControlPanelButton	host/frontend/webrtc_operator/assets/js/app.js	/^  #onControlPanelButton(e) {$/;"	m	class:DeviceControlApp
+onCreate	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public void onCreate() {$/;"	m	class:GceService
+onCustomShellButton	host/frontend/webrtc_operator/assets/js/app.js	/^  #onCustomShellButton(shell_command, e) {$/;"	m	class:DeviceControlApp
+onDataCallListChanged	guest/hals/ril/reference-ril/reference-ril.c	/^static void onDataCallListChanged(void *param __unused)$/;"	f	typeref:typename:void	file:
+onDependencyFailed	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/BluetoothChecker.java	/^    public void onDependencyFailed(Exception e) {$/;"	m	class:BluetoothChecker
+onDependencyFailed	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    public void onDependencyFailed(Exception e) {$/;"	m	class:ConnectivityChecker
+onDependencyFailed	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    public void onDependencyFailed(Exception e) {$/;"	m	class:EventReporter
+onDependencyFailed	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^        public void onDependencyFailed(Exception e) {$/;"	m	class:GceWifiManager.MonitorWifiJob
+onDependencyFailed	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceWifiManager.java	/^    public void onDependencyFailed(Exception e) {$/;"	m	class:GceWifiManager
+onDependencyFailed	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobBase.java	/^    public abstract void onDependencyFailed(Exception exception);$/;"	m	class:JobBase
+onDependencyStraggling	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    public void onDependencyStraggling(ArrayList<GceFuture<?>> deps) {$/;"	m	class:EventReporter
+onDependencyStraggling	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobBase.java	/^    public void onDependencyStraggling(ArrayList<GceFuture<?>> stragglingDependencies) {$/;"	m	class:JobBase
+onDestroy	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public void onDestroy() {$/;"	m	class:GceService
+onDeviceDisplayLoaded	host/frontend/webrtc_operator/assets/js/app.js	/^  #onDeviceDisplayLoaded() {$/;"	m	class:DeviceControlApp
+onDeviceMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #onDeviceMessage(message) {$/;"	m	class:Controller
+onDeviceMsg	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  onDeviceMsg(cb) {$/;"	m	class:PollingConnector
+onDeviceMsg	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  onDeviceMsg(cb) {$/;"	m	class:WebsocketConnector
+onDeviceMsgCb	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #onDeviceMsgCb = msg =>$/;"	M	class:PollingConnector
+onDeviceMsgCb	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #onDeviceMsgCb = msg =>$/;"	M	class:WebsocketConnector
+onEndDrag	host/frontend/webrtc_operator/assets/js/app.js	/^    function onEndDrag(e) {$/;"	f	function:DeviceControlApp.startMouseTracking
+onIccSlotStatus	guest/hals/ril/reference-ril/reference-ril.c	/^void onIccSlotStatus(RIL_Token t) {$/;"	f	typeref:typename:void
+onIceCandidate	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #onIceCandidate(iceCandidate) {$/;"	m	class:Controller
+onKeyEvent	host/frontend/webrtc_operator/assets/js/app.js	/^  #onKeyEvent(e) {$/;"	m	class:DeviceControlApp
+onKeyboardCaptureToggle	host/frontend/webrtc_operator/assets/js/app.js	/^  #onKeyboardCaptureToggle(enabled) {$/;"	m	class:DeviceControlApp
+onMicCaptureToggle	host/frontend/webrtc_operator/assets/js/app.js	/^  #onMicCaptureToggle(enabled) {$/;"	m	class:DeviceControlApp
+onNewCommandConnect	guest/hals/ril/reference-libril/ril.cpp	/^void onNewCommandConnect(RIL_SOCKET_ID socket_id) {$/;"	f	namespace:android	typeref:typename:void
+onOffer	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  async #onOffer(desc) {$/;"	m	class:Controller
+onRadioPowerOn	guest/hals/ril/reference-ril/reference-ril.c	/^static void onRadioPowerOn()$/;"	f	typeref:typename:void	file:
+onReaderClosed	guest/hals/ril/reference-ril/atchannel.c	/^static void onReaderClosed()$/;"	f	typeref:typename:void	file:
+onReceive	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceBroadcastReceiver.java	/^    public void onReceive(Context context, Intent intent) {$/;"	m	class:GceBroadcastReceiver
+onRequest	guest/hals/ril/reference-libril/ril.h	/^    RIL_RequestFunc onRequest;$/;"	m	struct:__anon0bfbaecfbf08	typeref:typename:RIL_RequestFunc
+onRequest	guest/hals/ril/reference-ril/reference-ril.c	/^onRequest (int request, void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+onRequestComplete	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^void RilSapSocket::onRequestComplete(RIL_Token t, RIL_Errno e, void *response,$/;"	f	class:RilSapSocket	typeref:typename:void
+onRotateButton	host/frontend/webrtc_operator/assets/js/app.js	/^  #onRotateButton(e) {$/;"	m	class:DeviceControlApp
+onSIMReady	guest/hals/ril/reference-ril/reference-ril.c	/^static void onSIMReady()$/;"	f	typeref:typename:void	file:
+onStartCommand	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    public int onStartCommand(Intent intent, int flags, int startId) {$/;"	m	class:GceService
+onStartDrag	host/frontend/webrtc_operator/assets/js/app.js	/^    function onStartDrag(e) {$/;"	f	function:DeviceControlApp.startMouseTracking
+onStateRequest	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioStateRequest onStateRequest;$/;"	m	struct:__anon0bfbaecfbf08	typeref:typename:RIL_RadioStateRequest
+onSupplementaryServiceIndicationInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::onSupplementaryServiceIndicationInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+onSupports	guest/hals/ril/reference-ril/reference-ril.c	/^onSupports (int requestCode __unused)$/;"	f	typeref:typename:int	file:
+onUnsolicited	guest/hals/ril/reference-ril/reference-ril.c	/^static void onUnsolicited (const char *s, const char *sms_pdu)$/;"	f	typeref:typename:void	file:
+onUnsolicitedResponse	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^void RilSapSocket::onUnsolicitedResponse(int unsolResponse, void *data, size_t datalen) {$/;"	f	class:RilSapSocket	typeref:typename:void
+onUpdatePhysicalChannelconfigs	host/commands/modem_simulator/data_service.cpp	/^void DataService::onUpdatePhysicalChannelconfigs(int modem_tech, int freq,$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+onUssdInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::onUssdInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+onVideoCaptureToggle	host/frontend/webrtc_operator/assets/js/app.js	/^  #onVideoCaptureToggle(enabled) {$/;"	m	class:DeviceControlApp
+onWebsocketMessage	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #onWebsocketMessage(message) {$/;"	m	class:WebsocketConnector
+on_close_	host/libs/graphics_detector/graphics_detector.cpp	/^  std::function<void()> on_close_;$/;"	m	class:cuttlefish::__anon29a199ff0111::Closer	typeref:typename:std::function<void ()>	file:
+on_connection_changed_cb_	host/frontend/webrtc/lib/client_handler.h	/^  std::function<void(bool)> on_connection_changed_cb_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::function<void (bool)>
+on_consumed_	host/libs/audio_connector/buffers.h	/^  OnConsumedCb on_consumed_;$/;"	m	class:cuttlefish::ShmBuffer	typeref:typename:OnConsumedCb
+on_error_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::function<void(webrtc::RTCError error)> on_error_;$/;"	m	class:cuttlefish::webrtc_streaming::__anond0fc42ea0111::CvdOnSetRemoteDescription	typeref:typename:std::function<void (webrtc::RTCError error)>	file:
+on_next_frame_cnt_	host/libs/screen_connector/screen_connector.h	/^  unsigned long long int on_next_frame_cnt_;$/;"	m	class:cuttlefish::ScreenConnector	typeref:typename:unsigned long long int
+on_next_frame_cnt_	host/libs/screen_connector/screen_connector_multiplexer.h	/^  unsigned long long int on_next_frame_cnt_;$/;"	m	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:unsigned long long int
+onframe_mutex_	host/frontend/webrtc/lib/camera_streamer.h	/^  std::mutex onframe_mutex_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:std::mutex
+op	common/libs/utils/network.cpp	/^  std::uint8_t op;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t	file:
+opHandle_	guest/hals/keymint/remote/remote_keymint_operation.h	/^  keymaster_operation_handle_t opHandle_;$/;"	m	class:aidl::android::hardware::security::keymint::RemoteKeyMintOperation	typeref:typename:keymaster_operation_handle_t
+open	guest/hals/camera/vsock_camera_device_3_4.cpp	/^Return<void> VsockCameraDevice::open(const sp<ICameraDeviceCallback>& callback,$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:Return<void>
+openLogicalChannel	host/commands/modem_simulator/unittest/service_test.cpp	/^  int openLogicalChannel(std::string& name) {$/;"	f	class:ModemServiceTest	typeref:typename:int	file:
+openSocket	host/commands/bt_connector/main.cpp	/^void openSocket(cuttlefish::SharedFD* fd, int port) {$/;"	f	typeref:typename:void
+oper_selection_mode_	host/commands/modem_simulator/network_service.h	/^  OperatorSelectionMode oper_selection_mode_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:OperatorSelectionMode
+operator !=	common/libs/fs/shared_fd.h	/^  bool operator!=(const SharedFD& rhs) const { return value_ != rhs.value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:bool
+operator ()	common/libs/security/gatekeeper_channel.cpp	/^void GatekeeperCommandDestroyer::operator()(GatekeeperRawMessage* ptr) {$/;"	f	class:cuttlefish::GatekeeperCommandDestroyer	typeref:typename:void
+operator ()	common/libs/security/keymaster_channel.cpp	/^void KeymasterCommandDestroyer::operator()(keymaster_message* ptr) {$/;"	f	class:cuttlefish::KeymasterCommandDestroyer	typeref:typename:void
+operator ()	common/libs/utils/tee_logging.cpp	/^void TeeLogger::operator()($/;"	f	class:cuttlefish::TeeLogger	typeref:typename:void
+operator ()	guest/hals/camera/vsock_camera_device_session_3_4.h	/^    bool operator()(const ReadVsockRequest& lhs, const ReadVsockRequest& rhs) {$/;"	f	struct:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::VsockRequestComparator	typeref:typename:bool
+operator ()	host/commands/fetcher/build_api.cc	/^  void operator()(DIR* dir) {$/;"	f	struct:cuttlefish::CloseDir	typeref:typename:void	file:
+operator ()	host/commands/secure_env/tpm_hmac.h	/^  void operator()(void* data) { Esys_Free(data); }$/;"	f	struct:cuttlefish::EsysDeleter	typeref:typename:void
+operator ()	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^  bool operator()($/;"	f	class:cuttlefish::CompareHmacSharingParams	typeref:typename:bool	file:
+operator ()	host/libs/graphics_detector/graphics_detector.cpp	/^  void operator()(void* library) { dlclose(library); }$/;"	f	struct:cuttlefish::__anon29a199ff0111::LibraryCloser	typeref:typename:void	file:
+operator *	common/libs/fs/shared_fd.h	/^  FileInstance& operator*() { return *value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:FileInstance &
+operator *	common/libs/fs/shared_fd.h	/^  const FileInstance& operator*() const { return *value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:const FileInstance &
+operator *	host/commands/modem_simulator/command_parser.h	/^  const std::string_view& operator*() const { return command_; }$/;"	f	class:cuttlefish::CommandParser	typeref:typename:const std::string_view &
+operator ->	common/libs/fs/shared_fd.h	/^  std::shared_ptr<FileInstance> operator->() const { return value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:std::shared_ptr<FileInstance>
+operator ->	host/commands/modem_simulator/command_parser.h	/^  const std::string_view* operator->() const { return &command_; }$/;"	f	class:cuttlefish::CommandParser	typeref:typename:const std::string_view *
+operator <	common/libs/fs/shared_fd.h	/^  bool operator<(const SharedFD& rhs) const { return value_ < rhs.value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:bool
+operator <	tests/hal/hal_implementation_test.cpp	/^  bool operator<(const VersionedAidlPackage& rhs) const {$/;"	f	struct:VersionedAidlPackage	typeref:typename:bool	file:
+operator <<	common/libs/utils/flag_parser.cpp	/^std::ostream& operator<<(std::ostream& out, const Flag& flag) {$/;"	f	namespace:cuttlefish	typeref:typename:std::ostream &
+operator <<	common/libs/utils/flag_parser.cpp	/^std::ostream& operator<<(std::ostream& out, const FlagAlias& alias) {$/;"	f	namespace:cuttlefish	typeref:typename:std::ostream &
+operator <<	common/libs/utils/network.cpp	/^std::ostream& operator<<(std::ostream& out, const DnsmasqDhcp4Lease& lease) {$/;"	f	namespace:cuttlefish	typeref:typename:std::ostream &
+operator <<	host/commands/fetcher/build_api.cc	/^std::ostream& operator<<(std::ostream& out, const Build& build) {$/;"	f	namespace:cuttlefish	typeref:typename:std::ostream &
+operator <<	host/commands/fetcher/build_api.cc	/^std::ostream& operator<<(std::ostream& out, const DeviceBuild& build) {$/;"	f	namespace:cuttlefish	typeref:typename:std::ostream &
+operator <<	host/commands/fetcher/build_api.cc	/^std::ostream& operator<<(std::ostream& out, const DirectoryBuild& build) {$/;"	f	namespace:cuttlefish	typeref:typename:std::ostream &
+operator <<	host/libs/config/fetcher_config.cpp	/^std::ostream& operator<<(std::ostream& os, const CvdFile& cvd_file) {$/;"	f	namespace:cuttlefish	typeref:typename:std::ostream &
+operator <<	host/libs/graphics_detector/graphics_detector.cpp	/^std::ostream& operator<<(std::ostream& stream,$/;"	f	namespace:cuttlefish	typeref:typename:std::ostream &
+operator <=	common/libs/fs/shared_fd.h	/^  bool operator<=(const SharedFD& rhs) const { return value_ <= rhs.value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:bool
+operator <=	host/commands/modem_simulator/thread_looper.cpp	/^bool ThreadLooper::Event::operator<=(const Event &other) const {$/;"	f	class:cuttlefish::ThreadLooper::Event	typeref:typename:bool
+operator =	common/libs/utils/subprocess.cpp	/^Subprocess& Subprocess::operator=(Subprocess&& other) {$/;"	f	class:cuttlefish::Subprocess	typeref:typename:Subprocess &
+operator =	common/libs/utils/tcp_socket.h	/^  ClientSocket& operator=(ClientSocket&& other) {$/;"	f	class:cuttlefish::ClientSocket	typeref:typename:ClientSocket &
+operator =	common/libs/utils/unix_sockets.cpp	/^ControlMessage& ControlMessage::operator=(ControlMessage&& existing) {$/;"	f	class:cuttlefish::ControlMessage	typeref:typename:ControlMessage &
+operator =	guest/hals/camera/cached_stream_buffer.cpp	/^CachedStreamBuffer& CachedStreamBuffer::operator=($/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:CachedStreamBuffer &
+operator ==	common/libs/fs/shared_fd.h	/^  bool operator==(const SharedFD& rhs) const { return value_ == rhs.value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:bool
+operator ==	host/commands/modem_simulator/channel_monitor.cpp	/^bool Client::operator==(const Client& other) const {$/;"	f	class:cuttlefish::Client	typeref:typename:bool
+operator ==	host/commands/modem_simulator/command_parser.h	/^  bool operator==(const std::string &rhs) const { return command_ == rhs; }$/;"	f	class:cuttlefish::CommandParser	typeref:typename:bool
+operator ==	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^bool operator==(const HmacSharingParameters& a,$/;"	f	namespace:cuttlefish::__anon0281e17c0111	typeref:typename:bool
+operator ==	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^inline bool operator==(const keymaster_blob_t& a, const keymaster_blob_t& b) {$/;"	f	namespace:cuttlefish::__anon0281e17c0111	typeref:typename:bool
+operator >	common/libs/fs/shared_fd.h	/^  bool operator>(const SharedFD& rhs) const { return value_ > rhs.value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:bool
+operator >=	common/libs/fs/shared_fd.h	/^  bool operator>=(const SharedFD& rhs) const { return value_ >= rhs.value_; }$/;"	f	class:cuttlefish::SharedFD	typeref:typename:bool
+operator []	host/commands/modem_simulator/command_parser.h	/^  std::string_view::const_reference& operator[](int index) const { return command_[index]; }$/;"	f	class:cuttlefish::CommandParser	typeref:typename:std::string_view::const_reference &
+operator []	host/libs/confui/host_renderer.h	/^  auto& operator[](const int idx) { return teeui_frame_[idx]; }$/;"	f	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:auto &
+operator bool	common/libs/fs/shared_fd.h	/^  operator bool() const { return ptr_ != MAP_FAILED; }$/;"	f	class:cuttlefish::ScopedMMap
+operatorNames	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityOperatorNames operatorNames;$/;"	m	struct:__anon0bfbaecf6108	typeref:typename:RIL_CellIdentityOperatorNames
+operatorNames	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityOperatorNames operatorNames;$/;"	m	struct:__anon0bfbaecf7808	typeref:typename:RIL_CellIdentityOperatorNames
+operatorNames	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityOperatorNames operatorNames;$/;"	m	struct:__anon0bfbaecf7908	typeref:typename:RIL_CellIdentityOperatorNames
+operatorNames	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityOperatorNames operatorNames;$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:RIL_CellIdentityOperatorNames
+operatorNames	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityOperatorNames operatorNames;$/;"	m	struct:__anon0bfbaecf7b08	typeref:typename:RIL_CellIdentityOperatorNames
+operatorNames	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellIdentityOperatorNames operatorNames;$/;"	m	struct:__anon0bfbaecf7c08	typeref:typename:RIL_CellIdentityOperatorNames
+operatorNumeric	guest/hals/ril/reference-libril/ril.h	/^  char *operatorNumeric;$/;"	m	struct:__anon0bfbaecfa608	typeref:typename:char *
+operator_config_	host/frontend/webrtc/lib/streamer.cpp	/^  OperatorServerConfig operator_config_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:OperatorServerConfig	file:
+operator_list_	host/commands/modem_simulator/network_service.h	/^  std::vector<NetworkOperator> operator_list_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:std::vector<NetworkOperator>
+operator_numeric	host/commands/modem_simulator/nvram_config.cpp	/^std::string NvramConfig::InstanceSpecific::operator_numeric() const {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:std::string
+operator_observer_	host/frontend/webrtc/lib/streamer.cpp	/^  std::weak_ptr<OperatorObserver> operator_observer_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::weak_ptr<OperatorObserver>	file:
+operator_server	host/frontend/webrtc/lib/streamer.h	/^  } operator_server;$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig	typeref:struct:cuttlefish::webrtc_streaming::StreamerConfig::__anonbc3851b60108
+operator_state	host/commands/modem_simulator/network_service.h	/^    OperatorState operator_state;$/;"	m	struct:cuttlefish::NetworkService::NetworkOperator	typeref:typename:OperatorState
+options	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^const cricket::AudioOptions AudioTrackSourceImpl::options() const {$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:const cricket::AudioOptions
+ordinal	host/commands/secure_env/in_process_tpm.cpp	/^  uint32_t ordinal;$/;"	m	struct:cuttlefish::tpm_message_header	typeref:typename:uint32_t	file:
+originator_address_	host/commands/modem_simulator/pdu_parser.h	/^  std::string originator_address_;$/;"	m	class:cuttlefish::PDUParser	typeref:typename:std::string
+os_composite_disk_config	host/commands/assemble_cvd/disk_flags.cc	/^std::vector<ImagePartition> os_composite_disk_config() {$/;"	f	namespace:cuttlefish	typeref:typename:std::vector<ImagePartition>
+os_composite_disk_path	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::os_composite_disk_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+os_patchlevel_	host/commands/secure_env/tpm_key_blob_maker.h	/^  uint32_t os_patchlevel_;$/;"	m	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:uint32_t
+os_patchlevel_	host/commands/secure_env/tpm_keymaster_context.h	/^  uint32_t os_patchlevel_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:uint32_t
+os_type	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional OsType os_type = 5;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:OsType
+os_version	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional string os_version = 6;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:string
+os_version_	host/commands/secure_env/tpm_key_blob_maker.h	/^  uint32_t os_version_;$/;"	m	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:uint32_t
+os_version_	host/commands/secure_env/tpm_keymaster_context.h	/^  uint32_t os_version_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:uint32_t
+other_side_closed_	common/libs/utils/tcp_socket.h	/^  bool other_side_closed_{};$/;"	m	class:cuttlefish::ClientSocket	typeref:typename:bool
+out_buffer_	host/libs/websocket/websocket_handler.h	/^  std::string out_buffer_ = {};$/;"	m	class:cuttlefish::DynHandler	typeref:typename:std::string
+output_	common/libs/security/gatekeeper_channel.h	/^  SharedFD output_;$/;"	m	class:cuttlefish::GatekeeperChannel	typeref:typename:SharedFD
+output_	common/libs/security/keymaster_channel.h	/^  SharedFD output_;$/;"	m	class:cuttlefish::KeymasterChannel	typeref:typename:SharedFD
+overflow	common/libs/fs/shared_fd_stream.cpp	/^int SharedFDStreambuf::overflow(int c) {$/;"	f	class:cuttlefish::SharedFDStreambuf	typeref:typename:int
+p	host/commands/secure_env/soft_gatekeeper.h	/^    static const uint32_t p = 1;$/;"	m	class:gatekeeper::SoftGateKeeper	typeref:typename:const uint32_t
+p1	guest/hals/ril/reference-libril/ril.h	/^    int p1;$/;"	m	struct:__anon0bfbaecf1d08	typeref:typename:int
+p1	guest/hals/ril/reference-libril/ril.h	/^    int p1;$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:int
+p1	guest/hals/ril/reference-libril/ril.h	/^    int p1;$/;"	m	struct:__anon0bfbaecf1f08	typeref:typename:int
+p2	guest/hals/ril/reference-libril/ril.h	/^    int p2;        \/* P2 parameter (described in ISO 7816-4)$/;"	m	struct:__anon0bfbaecfa308	typeref:typename:int
+p2	guest/hals/ril/reference-libril/ril.h	/^    int p2;$/;"	m	struct:__anon0bfbaecf1d08	typeref:typename:int
+p2	guest/hals/ril/reference-libril/ril.h	/^    int p2;$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:int
+p2	guest/hals/ril/reference-libril/ril.h	/^    int p2;$/;"	m	struct:__anon0bfbaecf1f08	typeref:typename:int
+p2p_disabled	shared/config/wpa_supplicant_overlay.conf	/^p2p_disabled=1$/;"	k
+p3	guest/hals/ril/reference-libril/ril.h	/^    int p3;         \/* A negative P3 implies a 4 byte APDU. *\/$/;"	m	struct:__anon0bfbaecf1f08	typeref:typename:int
+p3	guest/hals/ril/reference-libril/ril.h	/^    int p3;$/;"	m	struct:__anon0bfbaecf1d08	typeref:typename:int
+p3	guest/hals/ril/reference-libril/ril.h	/^    int p3;$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:int
+pCI	guest/hals/ril/reference-libril/ril_internal.h	/^    CommandInfo *pCI;$/;"	m	struct:android::RequestInfo	typeref:typename:CommandInfo *
+pData	host/libs/graphics_detector/include/EGL/eglext.h	/^    void  *pData;$/;"	m	struct:EGLClientPixmapHI	typeref:typename:void *
+p_callback	guest/hals/ril/reference-libril/ril.cpp	/^    RIL_TimedCallback p_callback;$/;"	m	struct:android::UserCallbackInfo	typeref:typename:RIL_TimedCallback	file:
+p_command_handler	host/commands/modem_simulator/modem_service.h	/^  std::optional<p_func> p_command_handler;$/;"	m	class:cuttlefish::CommandHandler	typeref:typename:std::optional<p_func>
+p_func	host/commands/modem_simulator/modem_service.h	/^using p_func = std::function<void(const Client&, std::string&)>;  \/\/ Partial match$/;"	t	namespace:cuttlefish
+p_intermediates	guest/hals/ril/reference-ril/atchannel.h	/^    ATLine  *p_intermediates; \/* any intermediate responses *\/$/;"	m	struct:__anon512a2c1f0208	typeref:typename:ATLine *
+p_next	guest/hals/ril/reference-libril/RilSapSocket.h	/^        struct SapSocketRequest* p_next;$/;"	m	struct:RilSapSocket::SapSocketRequest	typeref:struct:SapSocketRequest *
+p_next	guest/hals/ril/reference-libril/ril.cpp	/^    struct UserCallbackInfo *p_next;$/;"	m	struct:android::UserCallbackInfo	typeref:struct:UserCallbackInfo *	file:
+p_next	guest/hals/ril/reference-libril/ril_internal.h	/^    struct RequestInfo *p_next;$/;"	m	struct:android::RequestInfo	typeref:struct:RequestInfo *
+p_next	guest/hals/ril/reference-ril/atchannel.h	/^    struct ATLine *p_next;$/;"	m	struct:ATLine	typeref:struct:ATLine *
+p_rs	guest/hals/ril/reference-libril/ril_ex.h	/^    RecordStream *p_rs;$/;"	m	struct:SocketListenParam	typeref:typename:RecordStream *
+packageSource	tools/create_base_image.go	/^func packageSource(url string, branch string, version string, subdir string) {$/;"	f	package:main
+package_source	tools/create_base_image_hostlib.sh	/^package_source() {$/;"	f
+packet	common/libs/confui/packet.cpp	/^namespace packet {$/;"	n	namespace:cuttlefish::confui	file:
+packet	common/libs/confui/packet.h	/^namespace packet {$/;"	n	namespace:cuttlefish::confui
+packet	common/libs/confui/packet_types.cpp	/^namespace packet {$/;"	n	namespace:cuttlefish::confui	file:
+packet	common/libs/confui/packet_types.h	/^namespace packet {$/;"	n	namespace:cuttlefish::confui
+padding	host/libs/audio_connector/shm_layout.h	/^  uint8_t padding;$/;"	m	struct:cuttlefish::virtio_snd_pcm_set_params	typeref:typename:uint8_t
+padding	host/libs/audio_connector/shm_layout.h	/^  uint8_t padding[5];$/;"	m	struct:cuttlefish::virtio_snd_pcm_info	typeref:typename:uint8_t[5]
+padding	host/libs/audio_connector/shm_layout.h	/^  uint8_t padding[7];$/;"	m	struct:cuttlefish::virtio_snd_jack_info	typeref:typename:uint8_t[7]
+param	guest/hals/ril/reference-libril/ril_event.h	/^    void *param;$/;"	m	struct:ril_event	typeref:typename:void *
+params_destroy_resource_callback	host/libs/wayland/wayland_dmabuf.cpp	/^void params_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anon8f5be4990111	typeref:typename:void
+parent_key_fn_	host/commands/secure_env/encrypted_serializable.h	/^  std::function<TpmObjectSlot(TpmResourceManager&)> parent_key_fn_;$/;"	m	class:cuttlefish::EncryptedSerializable	typeref:typename:std::function<TpmObjectSlot (TpmResourceManager &)>
+parse	host/libs/allocd/request.h	/^  std::optional<Json::Value> parse(std::string msg) {$/;"	f	class:cuttlefish::JsonRequestReader	typeref:typename:std::optional<Json::Value>
+parseProactiveCmdInd	guest/hals/ril/reference-ril/reference-ril.c	/^static int parseProactiveCmdInd(char *response) {$/;"	f	typeref:typename:int	file:
+parseRegistrationState	guest/hals/ril/reference-ril/reference-ril.c	/^static int parseRegistrationState(char *str, int *type, int *items, int **response)$/;"	f	typeref:typename:int	file:
+parseSimResponseLine	guest/hals/ril/reference-ril/reference-ril.c	/^static int parseSimResponseLine(char* line, RIL_SIM_IO_Response* response) {$/;"	f	typeref:typename:int	file:
+parse_int	host/commands/modem_simulator/command_parser.cpp	/^static int parse_int(const std::string& snumber, int base) {$/;"	f	namespace:cuttlefish	typeref:typename:int	file:
+parse_technology_response	guest/hals/ril/reference-ril/reference-ril.c	/^int parse_technology_response( const char *response, int *current, int32_t *preferred )$/;"	f	typeref:typename:int
+parser	tools/tombstone_to_line.py	/^  parser = common_arg_parser()$/;"	v
+partition_alignment	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint8_t partition_alignment[3072];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptBeginning	typeref:typename:std::uint8_t[3072]	file:
+partition_entries_crc32	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint32_t partition_entries_crc32;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint32_t	file:
+partition_entries_lba	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t partition_entries_lba;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint64_t	file:
+partition_entry_size	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint32_t partition_entry_size;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint32_t	file:
+partition_name	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint16_t partition_name[36]; \/\/ UTF-16LE$/;"	m	struct:cuttlefish::__anon02806fd80111::GptPartitionEntry	typeref:typename:std::uint16_t[36]	file:
+partition_type	host/libs/config/mbr.h	/^  std::uint8_t partition_type;$/;"	m	struct:MbrPartitionEntry	typeref:typename:std::uint8_t
+partition_type_guid	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint8_t partition_type_guid[16];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptPartitionEntry	typeref:typename:std::uint8_t[16]	file:
+partitions	host/libs/config/mbr.h	/^  MbrPartitionEntry partitions[4];$/;"	m	struct:MasterBootRecord	typeref:typename:MbrPartitionEntry[4]
+partitions_	host/libs/image_aggregator/image_aggregator.cc	/^  std::vector<PartitionInfo> partitions_;$/;"	m	class:cuttlefish::__anon02806fd80111::CompositeDiskBuilder	typeref:typename:std::vector<PartitionInfo>	file:
+password	guest/hals/ril/reference-libril/ril.h	/^    char *password;             \/* the password for APN, or NULL *\/$/;"	m	struct:__anon0bfbaecfc008	typeref:typename:char *
+password	guest/hals/ril/reference-libril/ril.h	/^    char *password;             \/* the password for APN, or NULL *\/$/;"	m	struct:__anon0bfbaecfc108	typeref:typename:char *
+password	guest/hals/ril/reference-libril/ril.h	/^    char* password;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:char *
+password	guest/hals/ril/reference-libril/ril.h	/^    char* password;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:char *
+path	guest/hals/ril/reference-libril/ril.h	/^    char *path;     \/* "pathid" from TS 27.007 +CRSM command.$/;"	m	struct:__anon0bfbaecf1d08	typeref:typename:char *
+path	guest/hals/ril/reference-libril/ril.h	/^    char *path;     \/* "pathid" from TS 27.007 +CRSM command.$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:char *
+path	host/frontend/webrtc/lib/streamer.h	/^    std::string path;$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig::__anonbc3851b60108	typeref:typename:std::string
+path_	host/frontend/webrtc/lib/ws_connection.cpp	/^  const std::string path_;$/;"	m	class:WsConnectionImpl	typeref:typename:const std::string	file:
+path_	host/libs/config/config_flag.cpp	/^  std::string path_;$/;"	m	class:cuttlefish::__anon2e549bd00111::SystemImageDirFlagImpl	typeref:typename:std::string	file:
+path_	host/libs/config/data_image.cpp	/^  std::string path_;$/;"	m	class:cuttlefish::FixedDataImagePath	typeref:typename:std::string	file:
+path_	host/libs/config/data_image.cpp	/^  std::string path_;$/;"	m	class:cuttlefish::FixedMiscImagePath	typeref:typename:std::string	file:
+paths	host/commands/fetcher/build_api.h	/^  std::vector<std::string> paths;$/;"	m	struct:cuttlefish::DirectoryBuild	typeref:typename:std::vector<std::string>
+patterns	tools/tombstone_to_line.py	/^patterns = [$/;"	v
+payload	common/libs/security/gatekeeper_channel.h	/^    uint8_t payload[0];$/;"	m	struct:gatekeeper::GatekeeperRawMessage	typeref:typename:uint8_t[0]
+payload	common/libs/security/keymaster_channel.h	/^    uint8_t payload[0];$/;"	m	struct:keymaster::keymaster_message	typeref:typename:uint8_t[0]
+payload_length_	common/libs/confui/packet_types.h	/^  std::uint32_t payload_length_;$/;"	m	struct:cuttlefish::confui::packet::PayloadHeader	typeref:typename:std::uint32_t
+payload_size	common/libs/security/gatekeeper_channel.h	/^    uint32_t payload_size;$/;"	m	struct:gatekeeper::GatekeeperRawMessage	typeref:typename:uint32_t
+payload_size	common/libs/security/keymaster_channel.h	/^    uint32_t payload_size;$/;"	m	struct:keymaster::keymaster_message	typeref:typename:uint32_t
+pbackfail	common/libs/fs/shared_fd_stream.cpp	/^int SharedFDStreambuf::pbackfail(int c) {$/;"	f	class:cuttlefish::SharedFDStreambuf	typeref:typename:int
+pc	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #pc;$/;"	M	class:Controller
+pc	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #pc;$/;"	M	class:DeviceConnection
+pc_config	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  let pc_config = {iceServers: []};$/;"	c	class:Connect
+pc_config	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  let pc_config = {iceServers: []};$/;"	c	class:createPeerConnection
+pci	guest/hals/ril/reference-libril/ril.h	/^    int pci;    \/* physical cell id 0..503, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5d08	typeref:typename:int
+pci	guest/hals/ril/reference-libril/ril.h	/^    int pci;    \/* physical cell id 0..503; this value must be reported *\/$/;"	m	struct:__anon0bfbaecf5e08	typeref:typename:int
+pci	guest/hals/ril/reference-libril/ril.h	/^    int pci;    \/* physical cell id 0..503; this value must be reported *\/$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:int
+pci	guest/hals/ril/reference-libril/ril.h	/^    uint32_t pci;      \/* Physical cell id in range [0, 1007] described in 3GPP TS 38.331. This/;"	m	struct:__anon0bfbaecf6108	typeref:typename:uint32_t
+pcoDataInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::pcoDataInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+pco_id	guest/hals/ril/reference-libril/ril.h	/^    int pco_id;                 \/* The protocol ID for this box.  Note that only IDs from$/;"	m	struct:__anon0bfbaecfc308	typeref:typename:int
+pcscf	guest/hals/ril/reference-libril/ril.h	/^    char *          pcscf;      \/* the Proxy Call State Control Function address$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:char *
+pcscf	guest/hals/ril/reference-libril/ril.h	/^    char *          pcscf;    \/* the Proxy Call State Control Function address$/;"	m	struct:__anon0bfbaecf1408	typeref:typename:char *
+pcscf	guest/hals/ril/reference-libril/ril.h	/^    char *          pcscf;    \/* the Proxy Call State Control Function address$/;"	m	struct:__anon0bfbaecf1508	typeref:typename:char *
+pctx	build/cvd-host-package.go	/^var pctx = android.NewPackageContext("android\/soong\/cuttlefish")$/;"	v	package:cuttlefish
+pdp_context_	host/commands/modem_simulator/data_service.h	/^  std::vector<PDPContext> pdp_context_;$/;"	m	class:cuttlefish::DataService	typeref:typename:std::vector<PDPContext>
+pdu	guest/hals/ril/reference-libril/ril.h	/^    char * pdu;     \/* PDU of message to write, as an ASCII hex string less the SMSC address,$/;"	m	struct:__anon0bfbaecf1b08	typeref:typename:char *
+pdu_type_	host/commands/modem_simulator/pdu_parser.h	/^  std::string pdu_type_;$/;"	m	class:cuttlefish::PDUParser	typeref:typename:std::string
+peer_connection_	host/frontend/webrtc/lib/client_handler.h	/^  rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:rtc::scoped_refptr<webrtc::PeerConnectionInterface>
+peer_connection_factory_	host/frontend/webrtc/lib/streamer.cpp	/^      peer_connection_factory_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>	file:
+pendingResponseQueue	guest/hals/ril/reference-libril/RilSapSocket.h	/^    Ril_queue<SapSocketRequest> pendingResponseQueue;$/;"	m	class:RilSapSocket	typeref:typename:Ril_queue<SapSocketRequest>
+pending_add_	host/libs/allocd/resource_manager.h	/^  std::map<uint32_t, std::shared_ptr<StaticResource>> pending_add_;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:std::map<uint32_t,std::shared_ptr<StaticResource>>
+pending_buffer	host/libs/wayland/wayland_surface.h	/^    struct wl_resource* pending_buffer = nullptr;$/;"	m	struct:wayland::Surface::State	typeref:struct:wl_resource *
+pending_connection_	host/frontend/webrtc/lib/camera_streamer.h	/^  std::future<bool> pending_connection_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:std::future<bool>
+pending_ice_candidates_	host/frontend/webrtc/lib/client_handler.h	/^      pending_ice_candidates_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::vector<std::unique_ptr<webrtc::IceCandidateInterface>>
+pending_list	guest/hals/ril/reference-libril/ril_event.cpp	/^static struct ril_event pending_list;$/;"	v	typeref:struct:ril_event	file:
+pending_requests_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^      pending_requests_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::priority_queue<ReadVsockRequest,std::vector<ReadVsockRequest>,VsockRequestComparator>
+percentd_	host/commands/modem_simulator/network_service.h	/^  double percentd_{0.8};$/;"	m	class:cuttlefish::NetworkService	typeref:typename:double
+period_bytes	host/libs/audio_connector/commands.h	/^  uint32_t period_bytes() const { return period_bytes_; }$/;"	f	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:uint32_t
+period_bytes	host/libs/audio_connector/shm_layout.h	/^  Le32 period_bytes;$/;"	m	struct:cuttlefish::virtio_snd_pcm_set_params	typeref:typename:Le32
+period_bytes_	host/libs/audio_connector/commands.h	/^  const uint32_t period_bytes_;$/;"	m	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:const uint32_t
+persist	guest/hals/ril/reference-libril/ril_event.h	/^    bool persist;$/;"	m	struct:ril_event	typeref:typename:bool
+persistent_bootconfig_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::persistent_bootconfig_path()$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+persistent_composite_disk_config	host/commands/assemble_cvd/disk_flags.cc	/^std::vector<ImagePartition> persistent_composite_disk_config($/;"	f	namespace:cuttlefish	typeref:typename:std::vector<ImagePartition>
+persistent_composite_disk_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::persistent_composite_disk_path()$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+persoSubstate	guest/hals/ril/reference-libril/ril.h	/^    RIL_PersoSubstateV1_5 persoSubstate;$/;"	m	struct:__anon0bfbaecf3e08	typeref:typename:RIL_PersoSubstateV1_5
+perso_substate	guest/hals/ril/reference-libril/ril.h	/^  RIL_PersoSubstate perso_substate; \/* applicable only if app_state ==$/;"	m	struct:__anon0bfbaecf3808	typeref:typename:RIL_PersoSubstate
+phase	guest/hals/ril/reference-libril/ril.h	/^    int phase;              \/\/ CONFIGURED, START, APPLY, FINISH$/;"	m	struct:__anon0bfbaecf0a08	typeref:typename:int
+photoSettings	host/frontend/webrtc_operator/assets/js/app.js	/^      const photoSettings = {$/;"	c	class:DeviceControlApp.takePhoto
+physicalSlotId	guest/hals/ril/reference-libril/ril.h	/^    uint32_t physicalSlotId;$/;"	m	struct:__anon0bfbaecf3b08	typeref:typename:uint32_t
+pi	guest/hals/ril/reference-libril/ril.h	/^  char pi;$/;"	m	struct:__anon0bfbaecf8308	typeref:typename:char
+pid	common/libs/utils/subprocess.h	/^  pid_t pid() const { return pid_; }$/;"	f	class:cuttlefish::Subprocess	typeref:typename:pid_t
+pid_	common/libs/utils/subprocess.h	/^  pid_t pid_ = -1;$/;"	m	class:cuttlefish::Subprocess	typeref:typename:pid_t
+pin1	guest/hals/ril/reference-libril/ril.h	/^  RIL_PinState     pin1;$/;"	m	struct:__anon0bfbaecf3808	typeref:typename:RIL_PinState
+pin1_replaced	guest/hals/ril/reference-libril/ril.h	/^  int              pin1_replaced;   \/* applicable to USIM, CSIM & ISIM *\/$/;"	m	struct:__anon0bfbaecf3808	typeref:typename:int
+pin1_status_	host/commands/modem_simulator/sim_service.h	/^  PinStatus pin1_status_;$/;"	m	class:cuttlefish::SimService	typeref:typename:PinStatus
+pin2	guest/hals/ril/reference-libril/ril.h	/^    char *pin2;     \/* May be NULL*\/$/;"	m	struct:__anon0bfbaecf1d08	typeref:typename:char *
+pin2	guest/hals/ril/reference-libril/ril.h	/^    char *pin2;     \/* May be NULL*\/$/;"	m	struct:__anon0bfbaecf1e08	typeref:typename:char *
+pin2	guest/hals/ril/reference-libril/ril.h	/^  RIL_PinState     pin2;$/;"	m	struct:__anon0bfbaecf3808	typeref:typename:RIL_PinState
+pin2_status_	host/commands/modem_simulator/sim_service.h	/^  PinStatus pin2_status_;$/;"	m	class:cuttlefish::SimService	typeref:typename:PinStatus
+pin_	host/commands/modem_simulator/sim_service.h	/^    std::string pin_;$/;"	m	struct:cuttlefish::SimService::PinStatus	typeref:typename:std::string
+pin_remaining_times_	host/commands/modem_simulator/sim_service.h	/^    int pin_remaining_times_;$/;"	m	struct:cuttlefish::SimService::PinStatus	typeref:typename:int
+pipe_	host/commands/run_cvd/launch.cc	/^  SharedFD pipe_;$/;"	m	class:cuttlefish::LogcatReceiver	typeref:typename:SharedFD	file:
+pipe_fd_	host/commands/kernel_log_monitor/kernel_log_server.h	/^  cuttlefish::SharedFD pipe_fd_;$/;"	m	class:monitor::KernelLogServer	typeref:typename:cuttlefish::SharedFD
+pipe_message	common/libs/fs/shared_fd_test.cpp	/^char pipe_message[] = "Testing the pipe";$/;"	v	namespace:cuttlefish	typeref:typename:char[]
+playing_	host/frontend/webrtc/lib/audio_device.h	/^  std::atomic<bool> playing_ = false;$/;"	m	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:std::atomic<bool>
+pointer_destroy_resource_callback	host/libs/wayland/wayland_seat.cpp	/^void pointer_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+pointer_implementation	host/libs/wayland/wayland_seat.cpp	/^const struct wl_pointer_interface pointer_implementation = {$/;"	v	namespace:wayland::__anona9f16c970111	typeref:typename:const struct wl_pointer_interface
+pointer_release	host/libs/wayland/wayland_seat.cpp	/^void pointer_release(wl_client*, wl_resource* pointer) {$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+pointer_set_cursor	host/libs/wayland/wayland_seat.cpp	/^void pointer_set_cursor(wl_client*,$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+pollMessages	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async #pollMessages() {$/;"	m	class:PollingConnector
+pollSIMState	guest/hals/ril/reference-ril/reference-ril.c	/^static void pollSIMState (void *param __unused)$/;"	f	typeref:typename:void	file:
+poll_store_	host/frontend/webrtc_operator/client_handler.h	/^  PollConnectionStore* poll_store_;$/;"	m	class:cuttlefish::ClientDynHandler	typeref:typename:PollConnectionStore *
+pollerSchedule	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #pollerSchedule;$/;"	M	class:PollingConnector
+pool	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^std::multimap<int, std::vector<uint8_t>> pool;$/;"	v	namespace:cuttlefish::__anonfb30483e0111	typeref:typename:std::multimap<int,std::vector<uint8_t>>
+pool_mutex	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^std::mutex pool_mutex;$/;"	v	namespace:cuttlefish::__anonfb30483e0111	typeref:typename:std::mutex
+populateResponseInfo	guest/hals/ril/reference-libril/ril_service.cpp	/^void populateResponseInfo(RadioResponseInfo& responseInfo, int serial, int responseType,$/;"	f	typeref:typename:void
+populateResponseInfo_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^void populateResponseInfo_1_6($/;"	f	typeref:typename:void
+popup_destroy_resource_callback	host/libs/wayland/wayland_shell.cpp	/^void popup_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+port	host/frontend/webrtc/lib/streamer.h	/^    int port;$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig::__anonbc3851b60108	typeref:typename:int
+port_	host/frontend/webrtc/lib/camera_streamer.h	/^  unsigned int port_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:unsigned int
+port_	host/frontend/webrtc/lib/ws_connection.cpp	/^  const int port_;$/;"	m	class:WsConnectionImpl	typeref:typename:const int	file:
+positioner_destroy_resource_callback	host/libs/wayland/wayland_shell.cpp	/^void positioner_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+positions	host/libs/audio_connector/shm_layout.h	/^  uint8_t positions[VIRTIO_SND_CHMAP_MAX_SIZE];$/;"	m	struct:cuttlefish::virtio_snd_chmap_info	typeref:typename:uint8_t[]
+powerReq	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::powerReq(int32_t token, bool state) {$/;"	f	class:SapImpl	typeref:typename:Return<void>
+powerState	guest/hals/ril/reference-libril/ril.h	/^    RIL_DcPowerStates           powerState; \/\/ Current power state$/;"	m	struct:__anon0bfbaecf9c08	typeref:typename:RIL_DcPowerStates
+preferredNetworkMode	guest/hals/ril/reference-ril/reference-ril.c	/^    int32_t preferredNetworkMode;$/;"	m	struct:__anon70d7df6f0108	typeref:typename:int32_t	file:
+preferred_network_mode	host/commands/modem_simulator/nvram_config.cpp	/^int NvramConfig::InstanceSpecific::preferred_network_mode() const {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:int
+preferred_network_mode_	host/commands/modem_simulator/network_service.h	/^  int preferred_network_mode_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:int
+prefix	host/commands/kernel_log_monitor/kernel_log_server.cc	/^  std::string_view prefix;  \/\/ Prefix value to output, describing the entry$/;"	m	struct:__anonfa7764770111::__anonfa7764770208	typeref:typename:std::string_view	file:
+prefix_len_	common/libs/net/network_interface.h	/^  int prefix_len_ = 24;$/;"	m	class:cuttlefish::NetworkInterface	typeref:typename:int
+prefix_to_mac	guest/commands/setup_wifi/main.cpp	/^static std::array<unsigned char, 6> prefix_to_mac($/;"	f	typeref:typename:std::array<unsigned char,6>	file:
+prefixlen	common/libs/device_config/device_config.proto	/^    int32 prefixlen = 5;$/;"	f	message:cuttlefish.DeviceConfig.RILConfig	typeref:typename:int32
+prepareCarrierRestrictions	guest/hals/ril/reference-libril/ril_service.cpp	/^int prepareCarrierRestrictions(RIL_CarrierRestrictions &request, bool allAllowed,$/;"	f	typeref:typename:int
+prepareCarrierRestrictionsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^void prepareCarrierRestrictionsResponse(hidl_vec<Carrier>& allowedCarriers,$/;"	f	typeref:typename:void
+prepareNetworkScanRequest_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^int prepareNetworkScanRequest_1_2(RIL_NetworkScanRequest &scan_request,$/;"	f	typeref:typename:int
+prepareNetworkScanRequest_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^int prepareNetworkScanRequest_1_5(RIL_NetworkScanRequest_v1_5 &scan_request,$/;"	f	typeref:typename:int
+present	host/commands/health/health.cpp	/^int present() {$/;"	f	typeref:typename:int
+presentation_status	host/commands/modem_simulator/sup_service.h	/^    int presentation_status;  \/\/ sets \/ shows the result code presentation status to the TE,$/;"	m	struct:cuttlefish::SupService::CallWaitingInfo	typeref:typename:int
+prev	guest/hals/ril/reference-libril/ril_event.h	/^    struct ril_event *prev;$/;"	m	struct:ril_event	typeref:struct:ril_event *
+previous_cached_gnss_raw	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::string previous_cached_gnss_raw;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:std::string	file:
+printBuf	guest/hals/ril/reference-libril/ril.cpp	/^    static char printBuf[PRINTBUF_SIZE];$/;"	v	namespace:android	typeref:typename:char[]	file:
+printList	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^void RilSapSocket::printList() {$/;"	f	class:RilSapSocket	typeref:typename:void
+printReadies	guest/hals/ril/reference-libril/ril_event.cpp	/^#define printReadies(/;"	d	file:
+printReadies	guest/hals/ril/reference-libril/ril_event.cpp	/^static void printReadies(fd_set * rfds)$/;"	f	typeref:typename:void	file:
+printRequest	guest/hals/ril/reference-libril/ril_internal.h	/^    #define printRequest(/;"	d
+printResponse	guest/hals/ril/reference-libril/ril_internal.h	/^    #define printResponse /;"	d
+printTombstoneListStats	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    public static void printTombstoneListStats(List<String> tList) {$/;"	m	class:TombstoneTransmitTest
+probeForModemMode	guest/hals/ril/reference-ril/reference-ril.c	/^static void probeForModemMode(ModemInfo *info)$/;"	f	typeref:typename:void	file:
+proc	host/commands/run_cvd/process_monitor.h	/^  std::unique_ptr<Subprocess> proc;$/;"	m	struct:cuttlefish::MonitorEntry	typeref:typename:std::unique_ptr<Subprocess>
+process	tools/tombstone_to_line.py	/^def process(in_file, out_file, args):$/;"	f
+processCaptureRequest	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::processCaptureRequest($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+processCaptureRequest_3_4	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Return<void> VsockCameraDeviceSession::processCaptureRequest_3_4($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Return<void>
+processCommandsCallback	guest/hals/ril/reference-libril/ril_ex.h	/^    void (*processCommandsCallback)(int fd, short flags, void *param);$/;"	m	struct:SocketListenParam	typeref:typename:void (*)(int fd,short flags,void * param)
+processLine	guest/hals/ril/reference-ril/atchannel.c	/^static void processLine(const char *line)$/;"	f	typeref:typename:void	file:
+processName	guest/hals/ril/reference-libril/ril_ex.h	/^    const char* processName;$/;"	m	struct:SocketListenParam	typeref:typename:const char *
+processOneCaptureRequest	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^Status VsockCameraDeviceSession::processOneCaptureRequest($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:Status
+processReadReadies	guest/hals/ril/reference-libril/ril_event.cpp	/^static void processReadReadies(fd_set * rfds, int n)$/;"	f	typeref:typename:void	file:
+processRequestLoop	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^void VsockCameraDeviceSession::processRequestLoop($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:void
+processResponse	guest/hals/ril/reference-libril/sap_service.cpp	/^void processResponse(MsgHeader *rsp, RilSapSocket *sapSocket, MsgType msgType) {$/;"	f	typeref:typename:void
+processResponse	guest/hals/ril/reference-libril/sap_service.cpp	/^void sap::processResponse(MsgHeader *rsp, RilSapSocket *sapSocket) {$/;"	f	class:sap	typeref:typename:void
+processTimeouts	guest/hals/ril/reference-libril/ril_event.cpp	/^static void processTimeouts()$/;"	f	typeref:typename:void	file:
+processUnsolResponse	guest/hals/ril/reference-libril/sap_service.cpp	/^void sap::processUnsolResponse(MsgHeader *rsp, RilSapSocket *sapSocket) {$/;"	f	class:sap	typeref:typename:void
+processWakeupCallback	guest/hals/ril/reference-libril/ril.cpp	/^static void processWakeupCallback(int fd, short flags, void *param) {$/;"	f	namespace:android	typeref:typename:void	file:
+process_all	tools/tombstone_to_line.py	/^def process_all(args):$/;"	f
+process_file	tools/tombstone_to_line.py	/^def process_file(path, args):$/;"	f
+process_leader_	host/commands/run_cvd/boot_state_machine.cc	/^  ProcessLeader& process_leader_;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:ProcessLeader &	file:
+process_requests_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::atomic<bool> process_requests_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::atomic<bool>
+product	host/commands/fetcher/build_api.h	/^  std::string product;$/;"	m	struct:cuttlefish::DeviceBuild	typeref:typename:std::string
+product	host/commands/fetcher/build_api.h	/^  std::string product;$/;"	m	struct:cuttlefish::DirectoryBuild	typeref:typename:std::string
+product_id_	guest/commands/vsoc_input_service/virtual_device_base.h	/^  const uint16_t product_id_;$/;"	m	class:cuttlefish_input_service::VirtualDeviceBase	typeref:typename:const uint16_t
+profileId	guest/hals/ril/reference-libril/ril.h	/^    int profileId;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:int
+profileId	guest/hals/ril/reference-libril/ril.h	/^    int profileId;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+promptUserConfirmation	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^Return<ResponseCode> TrustyConfirmationUI::promptUserConfirmation($/;"	f	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:Return<ResponseCode>
+prompt_result_	guest/hals/confirmationui/TrustyConfirmationUI.h	/^    ResponseCode prompt_result_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI	typeref:typename:ResponseCode
+prompt_text_	common/libs/confui/protocol_types.h	/^  std::string prompt_text_;$/;"	m	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::string
+prompt_text_	guest/hals/confirmationui/guest_session.h	/^    std::string prompt_text_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::string
+prompt_text_	host/libs/confui/cbor.h	/^  std::string prompt_text_;$/;"	m	class:cuttlefish::confui::Cbor	typeref:typename:std::string
+prompt_text_	host/libs/confui/host_renderer.h	/^  std::string prompt_text_;  \/\/ confirmation ui message$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::string
+prompt_text_	host/libs/confui/session.h	/^  std::string prompt_text_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::string
+protected_vm	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::protected_vm() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+protective_mbr	host/libs/image_aggregator/image_aggregator.cc	/^  MasterBootRecord protective_mbr;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptBeginning	typeref:typename:MasterBootRecord	file:
+protocol	guest/hals/ril/reference-libril/ril.h	/^    char *protocol;             \/* one of the PDP_type values in TS 27.007 section 10.1.1 used /;"	m	struct:__anon0bfbaecfc008	typeref:typename:char *
+protocol	guest/hals/ril/reference-libril/ril.h	/^    char *protocol;             \/* one of the PDP_type values in TS 27.007 section 10.1.1 used /;"	m	struct:__anon0bfbaecfc108	typeref:typename:char *
+protocol	guest/hals/ril/reference-libril/ril.h	/^    char* protocol;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:char *
+protocol	guest/hals/ril/reference-libril/ril.h	/^    char* protocol;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:char *
+protocol_id_	host/commands/modem_simulator/pdu_parser.h	/^  std::string protocol_id_;$/;"	m	class:cuttlefish::PDUParser	typeref:typename:std::string
+protocol_name_	host/libs/websocket/websocket_server.h	/^  std::string protocol_name_;$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:std::string
+provider	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera	file:
+provider	guest/hals/camera/vsock_camera_provider_2_7.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera
+provider	guest/hals/camera/vsock_camera_server.cpp	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera	file:
+provider	guest/hals/camera/vsock_camera_server.h	/^namespace android::hardware::camera::provider::V2_7::implementation {$/;"	n	namespace:android::hardware::camera
+psc	guest/hals/ril/reference-libril/ril.h	/^    int psc;    \/* 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511, INT_MAX i/;"	m	struct:__anon0bfbaecf5a08	typeref:typename:int
+psc	guest/hals/ril/reference-libril/ril.h	/^    int psc;    \/* 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511, INT_MAX i/;"	m	struct:__anon0bfbaecf7908	typeref:typename:int
+psc	guest/hals/ril/reference-libril/ril.h	/^    int psc;    \/* 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511; this valu/;"	m	struct:__anon0bfbaecf5b08	typeref:typename:int
+pstore_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::pstore_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+ptr_	common/libs/fs/shared_fd.h	/^  void* ptr_ = MAP_FAILED;$/;"	m	class:cuttlefish::ScopedMMap	typeref:typename:void *
+public_area_	host/commands/secure_env/primary_key_builder.h	/^  TPMT_PUBLIC public_area_;$/;"	m	class:cuttlefish::PrimaryKeyBuilder	typeref:typename:TPMT_PUBLIC
+puk_	host/commands/modem_simulator/sim_service.h	/^    std::string puk_;$/;"	m	struct:cuttlefish::SimService::PinStatus	typeref:typename:std::string
+puk_remaining_times_	host/commands/modem_simulator/sim_service.h	/^    int puk_remaining_times_;$/;"	m	struct:cuttlefish::SimService::PinStatus	typeref:typename:int
+pullLceData	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::pullLceData(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+pullLceDataResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::pullLceDataResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+putPDP	guest/hals/ril/reference-ril/reference-ril.c	/^static void putPDP(int cid) {$/;"	f	typeref:typename:void	file:
+putRequestToQueue	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^void VsockCameraDeviceSession::putRequestToQueue($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:void
+q_empty_	host/libs/screen_connector/screen_connector_queue.h	/^  std::condition_variable q_empty_;$/;"	m	class:cuttlefish::ScreenConnectorQueue	typeref:typename:std::condition_variable
+q_max_size_	host/libs/screen_connector/screen_connector_queue.h	/^  const int q_max_size_;$/;"	m	class:cuttlefish::ScreenConnectorQueue	typeref:typename:const int
+q_mutex_	host/libs/screen_connector/screen_connector_queue.h	/^  std::unique_ptr<std::mutex> q_mutex_;$/;"	m	class:cuttlefish::ScreenConnectorQueue	typeref:typename:std::unique_ptr<std::mutex>
+qemu_binary_dir	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::qemu_binary_dir() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+qemu_open_modem_port	guest/hals/ril/reference-ril/misc.c	/^int qemu_open_modem_port() {$/;"	f	typeref:typename:int
+qemu_vnc_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::qemu_vnc_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+query_ctec	guest/hals/ril/reference-ril/reference-ril.c	/^int query_ctec(ModemInfo *mdm __unused, int *current, int32_t *preferred)$/;"	f	typeref:typename:int
+query_nvidia	tools/create_base_image_gce.sh	/^query_nvidia() {$/;"	f
+query_supported_techs	guest/hals/ril/reference-ril/reference-ril.c	/^int query_supported_techs( ModemInfo *mdm __unused, int *supported )$/;"	f	typeref:typename:int
+queue_	host/commands/modem_simulator/thread_looper.h	/^  std::deque<Event> queue_;$/;"	m	class:cuttlefish::ThreadLooper	typeref:typename:std::deque<Event>
+queue_empty_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::condition_variable queue_empty_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::condition_variable
+queue_mutex_	host/commands/secure_env/in_process_tpm.cpp	/^  std::mutex queue_mutex_;$/;"	m	class:cuttlefish::InProcessTpm::Impl	typeref:typename:std::mutex	file:
+queues_	common/libs/concurrency/multiplexer.h	/^  std::vector<QueuePtr> queues_;$/;"	m	class:cuttlefish::Multiplexer	typeref:typename:std::vector<QueuePtr>
+r	host/commands/secure_env/soft_gatekeeper.h	/^    static const uint32_t r = 8;$/;"	m	class:gatekeeper::SoftGateKeeper	typeref:typename:const uint32_t
+radioCapabilityIndicationInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::radioCapabilityIndicationInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+radioConfigService	guest/hals/ril/reference-libril/ril_config.cpp	/^sp<RadioConfigImpl> radioConfigService;$/;"	v	typeref:typename:sp<RadioConfigImpl>
+radioService	guest/hals/ril/reference-libril/ril_service.cpp	/^sp<RadioImpl_1_6> radioService[1];$/;"	v	typeref:typename:sp<RadioImpl_1_6>[1]
+radioService	guest/hals/ril/reference-libril/ril_service.cpp	/^sp<RadioImpl_1_6> radioService[SIM_COUNT];$/;"	v	typeref:typename:sp<RadioImpl_1_6>[]
+radioServiceRwlock	guest/hals/ril/reference-libril/ril_service.cpp	/^static pthread_rwlock_t radioServiceRwlock = PTHREAD_RWLOCK_INITIALIZER;$/;"	v	typeref:typename:pthread_rwlock_t	file:
+radioServiceRwlock2	guest/hals/ril/reference-libril/ril_service.cpp	/^static pthread_rwlock_t radioServiceRwlock2 = PTHREAD_RWLOCK_INITIALIZER;$/;"	v	typeref:typename:pthread_rwlock_t	file:
+radioServiceRwlock3	guest/hals/ril/reference-libril/ril_service.cpp	/^static pthread_rwlock_t radioServiceRwlock3 = PTHREAD_RWLOCK_INITIALIZER;$/;"	v	typeref:typename:pthread_rwlock_t	file:
+radioServiceRwlock4	guest/hals/ril/reference-libril/ril_service.cpp	/^static pthread_rwlock_t radioServiceRwlock4 = PTHREAD_RWLOCK_INITIALIZER;$/;"	v	typeref:typename:pthread_rwlock_t	file:
+radioStateChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::radioStateChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+radioStateToString	guest/hals/ril/reference-libril/ril.cpp	/^radioStateToString(RIL_RadioState s) {$/;"	f	namespace:android	typeref:typename:const char *
+radio_1_6	guest/hals/ril/reference-libril/ril_service.h	/^namespace radio_1_6 {$/;"	n
+radio_access_network	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioAccessNetworks radio_access_network; \/\/ The type of network to scan.$/;"	m	struct:__anon0bfbaecfab08	typeref:typename:RIL_RadioAccessNetworks
+radio_access_network	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioAccessNetworks_v1_5 radio_access_network; \/\/ The type of network to scan.$/;"	m	struct:__anon0bfbaecfae08	typeref:typename:RIL_RadioAccessNetworks_v1_5
+radio_state_	host/commands/modem_simulator/network_service.h	/^  RadioState radio_state_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:RadioState
+random_source_	host/commands/secure_env/tpm_keymaster_context.h	/^  std::unique_ptr<TpmRandomSource> random_source_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::unique_ptr<TpmRandomSource>
+rat	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioTechnology rat;              \/\/ indicates the available data radio technology,$/;"	m	struct:__anon0bfbaecf8008	typeref:typename:RIL_RadioTechnology
+rat	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioTechnology rat;              \/\/ indicates the available voice radio technology,$/;"	m	struct:__anon0bfbaecf7f08	typeref:typename:RIL_RadioTechnology
+rat	guest/hals/ril/reference-libril/ril.h	/^    int rat;                \/\/ RIL_RadioAccessFamily for the radio$/;"	m	struct:__anon0bfbaecf0a08	typeref:typename:int
+rat	guest/hals/ril/reference-libril/ril.h	/^   uint32_t rat; \/* bitset - ref. RIL_RadioTechnology. *\/$/;"	m	struct:__anon0bfbaecf9108	typeref:typename:uint32_t
+rate	host/libs/audio_connector/commands.h	/^  uint8_t rate() const { return rate_; }$/;"	f	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:uint8_t
+rate	host/libs/audio_connector/shm_layout.h	/^  uint8_t rate;$/;"	m	struct:cuttlefish::virtio_snd_pcm_set_params	typeref:typename:uint8_t
+rate_	host/libs/audio_connector/commands.h	/^  const uint8_t rate_;$/;"	m	struct:cuttlefish::StreamSetParamsCommand	typeref:typename:const uint8_t
+rates	host/libs/audio_connector/shm_layout.h	/^  Le64 rates;    \/* 1 << VIRTIO_SND_PCM_RATE_XXX *\/$/;"	m	struct:cuttlefish::virtio_snd_pcm_info	typeref:typename:Le64
+raw_frame_	host/libs/confui/host_renderer.h	/^  std::shared_ptr<TeeUiFrameWrapper> raw_frame_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:std::shared_ptr<TeeUiFrameWrapper>
+readFds	guest/hals/ril/reference-libril/ril_event.cpp	/^static fd_set readFds;$/;"	v	typeref:typename:fd_set	file:
+readSettingsFromJson	guest/hals/camera/vsock_camera_server.cpp	/^bool readSettingsFromJson(VsockCameraDevice::Settings& settings,$/;"	f	namespace:android::hardware::camera::provider::V2_7::implementation::__anon29cd72800111	typeref:typename:bool
+read_buffer_	common/libs/fs/shared_fd_stream.h	/^  std::unique_ptr<char[]> read_buffer_ = nullptr;$/;"	m	class:cuttlefish::SharedFDStreambuf	typeref:typename:std::unique_ptr<char[]>
+read_mutex_	common/libs/utils/vsock_connection.h	/^  std::recursive_mutex read_mutex_;$/;"	m	class:cuttlefish::VsockConnection	typeref:typename:std::recursive_mutex
+read_only	host/libs/image_aggregator/image_aggregator.h	/^  bool read_only;$/;"	m	struct:cuttlefish::ImagePartition	typeref:typename:bool
+read_only	host/libs/image_aggregator/image_aggregator.h	/^  bool read_only;$/;"	m	struct:cuttlefish::MultipleImagePartition	typeref:typename:bool
+read_pipe_	host/commands/modem_simulator/channel_monitor.h	/^  cuttlefish::SharedFD read_pipe_;$/;"	m	class:cuttlefish::ChannelMonitor	typeref:typename:cuttlefish::SharedFD
+read_set_	host/frontend/webrtc/adb_handler.h	/^  SharedFDSet read_set_;$/;"	m	struct:cuttlefish::webrtc_streaming::AdbHandler	typeref:typename:SharedFDSet
+read_set_	host/frontend/webrtc/bluetooth_handler.h	/^  SharedFDSet read_set_;$/;"	m	struct:cuttlefish::webrtc_streaming::BluetoothHandler	typeref:typename:SharedFDSet
+read_thread_	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    std::thread read_thread_;$/;"	m	class:GnssGrpcProxyServiceImpl	typeref:typename:std::thread	file:
+read_thread_	host/frontend/webrtc/adb_handler.h	/^  std::thread read_thread_;$/;"	m	struct:cuttlefish::webrtc_streaming::AdbHandler	typeref:typename:std::thread
+read_thread_	host/frontend/webrtc/bluetooth_handler.h	/^  std::thread read_thread_;$/;"	m	struct:cuttlefish::webrtc_streaming::BluetoothHandler	typeref:typename:std::thread
+read_thread_	host/frontend/webrtc/kernel_log_events_handler.h	/^  std::thread read_thread_;$/;"	m	struct:cuttlefish::KernelLogEventsHandler	typeref:typename:std::thread
+read_write_capability	host/libs/image_aggregator/cdisk_spec.proto	/^  ReadWriteCapability read_write_capability = 3;$/;"	f	message:ComponentDisk	typeref:typename:ReadWriteCapability
+readerLoop	guest/hals/ril/reference-ril/atchannel.c	/^static void *readerLoop(void *arg __unused)$/;"	f	typeref:typename:void *	file:
+reader_builder	host/libs/allocd/request.h	/^  Json::CharReaderBuilder reader_builder;$/;"	m	class:cuttlefish::JsonRequestReader	typeref:typename:Json::CharReaderBuilder
+reader_thread_	guest/hals/camera/vsock_frame_provider.h	/^  std::thread reader_thread_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::thread
+reader_thread_	host/frontend/webrtc/lib/camera_streamer.h	/^  std::thread reader_thread_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:std::thread
+readline	guest/hals/ril/reference-ril/atchannel.c	/^static const char *readline()$/;"	f	typeref:typename:const char *	file:
+reason	guest/hals/ril/reference-libril/ril.h	/^    int             reason;      \/* from TS 27.007 7.11 "reason" *\/$/;"	m	struct:__anon0bfbaecf2108	typeref:typename:int
+reason	host/commands/modem_simulator/sup_service.h	/^    Reason reason;$/;"	m	struct:cuttlefish::SupService::CallForwardInfo	typeref:typename:Reason
+reasonDataDenied	guest/hals/ril/reference-libril/ril.h	/^    int32_t reasonDataDenied;             \/\/ if registration state is 3 (Registration$/;"	m	struct:__anon0bfbaecf8008	typeref:typename:int32_t
+reasonForDenial	guest/hals/ril/reference-libril/ril.h	/^    int32_t reasonForDenial;              \/\/ reasonForDenial if registration state is 3$/;"	m	struct:__anon0bfbaecf7f08	typeref:typename:int32_t
+reboot_notification_	host/commands/run_cvd/boot_state_machine.cc	/^  SharedFD reboot_notification_;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:SharedFD	file:
+rec	guest/hals/ril/reference-libril/ril.h	/^  } rec;$/;"	m	struct:__anon0bfbaecf8908	typeref:union:__anon0bfbaecf8908::__anon0bfbaecf8a0a
+receive_buffer_	host/frontend/webrtc/lib/client_handler.cpp	/^  std::vector<char> receive_buffer_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraChannelHandler	typeref:typename:std::vector<char>	file:
+receive_buffer_	host/frontend/webrtc_operator/signal_handler.h	/^  std::vector<uint8_t> receive_buffer_;$/;"	m	class:cuttlefish::SignalHandler	typeref:typename:std::vector<uint8_t>
+record-video-control	host/frontend/webrtc_operator/assets/client.html	/^            <div id="record-video-control" title="Capture Display as Webm"><\/div>$/;"	I
+record_screen	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::record_screen() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+recording	host/frontend/webrtc_operator/assets/js/app.js	/^  #recording = {};$/;"	M	class:DeviceControlApp
+recording_	host/frontend/webrtc/lib/audio_device.h	/^  std::atomic<bool> recording_ = false;$/;"	m	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:std::atomic<bool>
+redir	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_RedirectingNumberInfoRecord redir;$/;"	m	union:__anon0bfbaecf8908::__anon0bfbaecf8a0a	typeref:typename:RIL_CDMA_RedirectingNumberInfoRecord
+redirectingNumber	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_NumberInfoRecord redirectingNumber;$/;"	m	struct:__anon0bfbaecf8508	typeref:typename:RIL_CDMA_NumberInfoRecord
+redirectingReason	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_RedirectingReason redirectingReason;$/;"	m	struct:__anon0bfbaecf8508	typeref:typename:RIL_CDMA_RedirectingReason
+redirects_	common/libs/utils/subprocess.h	/^  std::map<Subprocess::StdIOChannel, int> redirects_{};$/;"	m	class:cuttlefish::Command	typeref:typename:std::map<Subprocess::StdIOChannel,int>
+refcount_table_clusters	host/libs/image_aggregator/image_aggregator.cc	/^  Be32 refcount_table_clusters;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be32	file:
+refcount_table_offset	host/libs/image_aggregator/image_aggregator.cc	/^  Be64 refcount_table_offset;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be64	file:
+refresh-list	host/frontend/webrtc_operator/assets/index.html	/^        <h1>Available devices <span id='refresh-list'>&#8635;<\/span><\/h1>$/;"	I
+refresh_rate_hz	common/libs/device_config/device_config.proto	/^    int32 refresh_rate_hz = 4;$/;"	f	message:cuttlefish.DeviceConfig.DisplayConfig	typeref:typename:int32
+refresh_rate_hz	host/libs/config/cuttlefish_config.h	/^    int refresh_rate_hz;$/;"	m	struct:cuttlefish::CuttlefishConfig::DisplayConfig	typeref:typename:int
+regState	guest/hals/ril/reference-libril/ril.h	/^    RIL_RegState regState;                \/\/ Valid reg states are RIL_NOT_REG_AND_NOT_SEARCHIN/;"	m	struct:__anon0bfbaecf7f08	typeref:typename:RIL_RegState
+regState	guest/hals/ril/reference-libril/ril.h	/^    RIL_RegState regState;                \/\/ Valid reg states are RIL_NOT_REG_AND_NOT_SEARCHIN/;"	m	struct:__anon0bfbaecf8008	typeref:typename:RIL_RegState
+region	host/libs/wayland/wayland_surface.h	/^    Region region;$/;"	m	struct:wayland::Surface::State	typeref:typename:Region
+region_add	host/libs/wayland/wayland_compositor.cpp	/^void region_add(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+region_destroy	host/libs/wayland/wayland_compositor.cpp	/^void region_destroy(wl_client*, wl_resource* region_resource) {$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+region_implementation	host/libs/wayland/wayland_compositor.cpp	/^const struct wl_region_interface region_implementation = {$/;"	v	namespace:wayland::__anon473d11590111	typeref:typename:const struct wl_region_interface
+region_subtract	host/libs/wayland/wayland_compositor.cpp	/^void region_subtract(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+registerBroadcastReceivers	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceService.java	/^    private void registerBroadcastReceivers() {$/;"	m	class:GceService	file:
+registerConfigService	guest/hals/ril/reference-libril/ril_config.cpp	/^void radio_1_6::registerConfigService(RIL_RadioFunctions *callbacks, CommandInfo *commands) {$/;"	f	class:radio_1_6	typeref:typename:void
+registerService	guest/hals/ril/reference-libril/ril_service.cpp	/^void radio_1_6::registerService(RIL_RadioFunctions *callbacks, CommandInfo *commands) {$/;"	f	class:radio_1_6	typeref:typename:void
+registerService	guest/hals/ril/reference-libril/sap_service.cpp	/^void sap::registerService(const RIL_RadioFunctions *callbacks) {$/;"	f	class:sap	typeref:typename:void
+registered	guest/hals/ril/reference-libril/ril.h	/^  int                       registered;     \/* !0 if this cell is registered 0 if not registere/;"	m	struct:__anon0bfbaecf7208	typeref:typename:int
+registered	guest/hals/ril/reference-libril/ril.h	/^  int               registered;     \/* !0 if this cell is registered 0 if not registered *\/$/;"	m	struct:__anon0bfbaecf6e08	typeref:typename:int
+registered	guest/hals/ril/reference-libril/ril.h	/^  int               registered;     \/* !0 if this cell is registered 0 if not registered *\/$/;"	m	struct:__anon0bfbaecf7008	typeref:typename:int
+registerer_	host/commands/start/flag_forwarder.cc	/^  gflags::FlagRegisterer registerer_;$/;"	m	class:DynamicFlag	typeref:typename:gflags::FlagRegisterer	file:
+registration_retries_left_	host/frontend/webrtc/lib/streamer.cpp	/^  int registration_retries_left_ = kRegistrationRetries;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:int	file:
+registration_state	host/commands/modem_simulator/network_service.h	/^    RegistrationState registration_state;$/;"	m	struct:cuttlefish::NetworkService::NetworkRegistrationStatus	typeref:typename:RegistrationState
+registry_	host/frontend/webrtc_operator/client_handler.h	/^  DeviceRegistry* registry_;$/;"	m	class:cuttlefish::ClientWSHandlerFactory	typeref:typename:DeviceRegistry *
+registry_	host/frontend/webrtc_operator/client_handler.h	/^  DeviceRegistry* registry_;$/;"	m	class:cuttlefish::ConnectHandler	typeref:typename:DeviceRegistry *
+registry_	host/frontend/webrtc_operator/device_handler.h	/^  DeviceRegistry* registry_;$/;"	m	class:cuttlefish::DeviceHandlerFactory	typeref:typename:DeviceRegistry *
+registry_	host/frontend/webrtc_operator/device_list_handler.h	/^  DeviceRegistry& registry_;$/;"	m	class:cuttlefish::DeviceListHandler	typeref:typename:DeviceRegistry &
+registry_	host/frontend/webrtc_operator/signal_handler.h	/^  DeviceRegistry* registry_;$/;"	m	class:cuttlefish::SignalHandler	typeref:typename:DeviceRegistry *
+rejectCall	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::rejectCall(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+rejectCallResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::rejectCallResponse(int slotId, int responseType,$/;"	f	class:radio_1_6	typeref:typename:int
+release	guest/hals/camera/cached_stream_buffer.cpp	/^int CachedStreamBuffer::release() { return g_importer.unlock(buffer_); }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:int
+releasePduSessionId	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::releasePduSessionId(int32_t serial, int32_t id) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+releasePduSessionIdResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::releasePduSessionIdResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+releaseWakeLock	guest/hals/ril/reference-libril/ril.cpp	/^releaseWakeLock() {$/;"	f	namespace:android	typeref:typename:void
+remote	guest/hals/bt/remote/remote_bluetooth.cpp	/^namespace remote {$/;"	n	namespace:android::hardware::bluetooth::V1_1	file:
+remote	guest/hals/bt/remote/remote_bluetooth.h	/^namespace remote {$/;"	n	namespace:android::hardware::bluetooth::V1_1
+remote	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^bool AudioTrackSourceImpl::remote() const { return false; }$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:bool
+remote_client	host/commands/modem_simulator/call_service.h	/^    std::optional<cuttlefish::SharedFD> remote_client;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:std::optional<cuttlefish::SharedFD>
+remote_clients_	host/commands/modem_simulator/channel_monitor.h	/^  std::vector<std::unique_ptr<Client>> remote_clients_;$/;"	m	class:cuttlefish::ChannelMonitor	typeref:typename:std::vector<std::unique_ptr<Client>>
+remote_description_added_	host/frontend/webrtc/lib/client_handler.h	/^  bool remote_description_added_ = false;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:bool
+remote_provisioning_context_	host/commands/secure_env/tpm_keymaster_context.h	/^  std::unique_ptr<TpmRemoteProvisioningContext> remote_provisioning_context_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::unique_ptr<TpmRemoteProvisioningContext>
+remove	guest/hals/camera/stream_buffer_cache.cpp	/^void StreamBufferCache::remove(uint64_t buffer_id) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::StreamBufferCache	typeref:typename:void
+removeFromList	guest/hals/ril/reference-libril/ril_event.cpp	/^static void removeFromList(struct ril_event * ev)$/;"	f	typeref:typename:void	file:
+removeInvalidClients	host/commands/modem_simulator/channel_monitor.cpp	/^static void removeInvalidClients(std::vector<std::unique_ptr<Client>>& clients) {$/;"	f	namespace:cuttlefish	typeref:typename:void	file:
+removeLastChar	guest/hals/ril/reference-libril/ril_internal.h	/^    #define removeLastChar /;"	d
+removeStreamsExcept	guest/hals/camera/stream_buffer_cache.cpp	/^void StreamBufferCache::removeStreamsExcept(std::set<int32_t> streams_to_keep) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::StreamBufferCache	typeref:typename:void
+removeWatch	guest/hals/ril/reference-libril/ril_event.cpp	/^static void removeWatch(struct ril_event * ev, int index)$/;"	f	typeref:typename:void	file:
+render_confui_cnt_	host/libs/screen_connector/screen_connector.h	/^  unsigned long long int render_confui_cnt_;$/;"	m	class:cuttlefish::ScreenConnector	typeref:typename:unsigned long long int
+renderer_	host/libs/confui/session.h	/^  std::unique_ptr<ConfUiRenderer> renderer_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::unique_ptr<ConfUiRenderer>
+renegotiateConnection	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  async renegotiateConnection() {$/;"	m	class:Controller
+reply	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.proto	/^  string reply = 1;$/;"	f	message:gnss_grpc_proxy.SendNmeaReply	typeref:typename:string
+reportBootStarted	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    public void reportBootStarted() {$/;"	m	class:EventReporter
+reportIntent	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceBroadcastReceiver.java	/^    private void reportIntent(Context context, String intentType) {$/;"	m	class:GceBroadcastReceiver	file:
+reportMessage	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    public void reportMessage(String message) {$/;"	m	class:EventReporter
+reportPhysicalChannelConfigs	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::reportPhysicalChannelConfigs(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+reportScreenChanged	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/EventReporter.java	/^    public void reportScreenChanged(int width, int height, int dpi, int rotation) {$/;"	m	class:EventReporter
+reportSmsMemoryStatus	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::reportSmsMemoryStatus(int32_t serial, bool available) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+reportSmsMemoryStatusResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::reportSmsMemoryStatusResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+reportStkServiceIsRunning	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::reportStkServiceIsRunning(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+reportStkServiceIsRunningResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::reportStkServiceIsRunningResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+reportedEthernetConnectivity	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    private static boolean reportedEthernetConnectivity = false;$/;"	f	class:ConnectivityChecker	file:
+reportedMobileConnectivity	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/ConnectivityChecker.java	/^    private static boolean reportedMobileConnectivity = false;$/;"	f	class:ConnectivityChecker	file:
+repository_branch	tools/create_base_image.go	/^var repository_branch string$/;"	v	package:main	typeref:typename:string
+repository_url	tools/create_base_image.go	/^var repository_url string$/;"	v	package:main	typeref:typename:string
+requestCallSelection	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCallSelection($/;"	f	typeref:typename:void	file:
+requestCdmaBaseBandVersion	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCdmaBaseBandVersion(int request __unused, void *data __unused,$/;"	f	typeref:typename:void	file:
+requestCdmaGetRoamingPreference	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCdmaGetRoamingPreference(int request __unused, void *data __unused,$/;"	f	typeref:typename:void	file:
+requestCdmaGetSubscriptionSource	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCdmaGetSubscriptionSource(int request __unused, void *data,$/;"	f	typeref:typename:void	file:
+requestCdmaPrlVersion	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCdmaPrlVersion(int request __unused, void *data __unused,$/;"	f	typeref:typename:void	file:
+requestCdmaSendSMS	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCdmaSendSMS(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestCdmaSetRoamingPreference	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCdmaSetRoamingPreference(int request __unused, void *data,$/;"	f	typeref:typename:void	file:
+requestCdmaSetSubscriptionSource	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCdmaSetSubscriptionSource(int request __unused, void *data,$/;"	f	typeref:typename:void	file:
+requestCdmaSubscription	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestCdmaSubscription(int request __unused, void *data __unused,$/;"	f	typeref:typename:void	file:
+requestChangeBarringPassword	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestChangeBarringPassword(char **data, size_t datalen, RIL_Token t) {$/;"	f	typeref:typename:void	file:
+requestChangeSimPin	guest/hals/ril/reference-ril/reference-ril.c	/^static void  requestChangeSimPin(int request, void*  data, size_t  datalen, RIL_Token  t)$/;"	f	typeref:typename:void	file:
+requestChangeSimPin2	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestChangeSimPin2(void *data, size_t datalen, RIL_Token t) {$/;"	f	typeref:typename:void	file:
+requestDataCallList	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestDataCallList(void *data __unused, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestDeactivateDataCall	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestDeactivateDataCall(void *data, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestDevice	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async requestDevice(deviceId) {$/;"	m	class:Connector
+requestDevice	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async requestDevice(deviceId) {$/;"	m	class:PollingConnector
+requestDevice	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async requestDevice(deviceId) {$/;"	m	class:WebsocketConnector
+requestDeviceIdentity	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestDeviceIdentity(int request __unused, void *data __unused,$/;"	f	typeref:typename:void	file:
+requestDial	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestDial(void *data, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestEccDial	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestEccDial(void *data, RIL_Token t) {$/;"	f	typeref:typename:void	file:
+requestEnterSimPin	guest/hals/ril/reference-ril/reference-ril.c	/^static void  requestEnterSimPin(int request, void*  data, size_t  datalen, RIL_Token  t)$/;"	f	typeref:typename:void	file:
+requestExitEmergencyMode	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestExitEmergencyMode(void *data __unused, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestFacilityLock	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestFacilityLock(int request, char **data,$/;"	f	typeref:typename:void	file:
+requestGetActivityInfo	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetActivityInfo(void *data __unused, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestGetCellInfoList	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetCellInfoList(void *data __unused, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestGetCurrentCalls	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetCurrentCalls(void *data __unused, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestGetHardwareConfig	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetHardwareConfig(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestGetMute	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetMute(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestGetPreferredNetworkType	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetPreferredNetworkType(int request __unused, void *data __unused,$/;"	f	typeref:typename:void	file:
+requestGetRadioCapability	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetRadioCapability(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestGetSmsBroadcastConfig	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetSmsBroadcastConfig(void *data, size_t datalen,$/;"	f	typeref:typename:void	file:
+requestGetSmscAddress	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetSmscAddress(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestGetTtyMode	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestGetTtyMode(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestHangup	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestHangup(void *data, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestIccSimAuthentication	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::requestIccSimAuthentication(int32_t serial, int32_t authContext,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+requestIccSimAuthenticationResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::requestIccSimAuthenticationResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+requestImsSendSMS	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestImsSendSMS(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestIsimAuthentication	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::requestIsimAuthentication(int32_t serial, const hidl_string& challen/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+requestIsimAuthenticationResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::requestIsimAuthenticationResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+requestJpeg	guest/hals/camera/vsock_frame_provider.cpp	/^void VsockFrameProvider::requestJpeg() {$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:void
+requestNumber	guest/hals/ril/reference-libril/ril.cpp	/^    int requestNumber;$/;"	m	struct:android::__anonf9a2982a0108	typeref:typename:int	file:
+requestNumber	guest/hals/ril/reference-libril/ril_internal.h	/^    int requestNumber;$/;"	m	struct:android::CommandInfo	typeref:typename:int
+requestOperator	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestOperator(void *data __unused, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestOrSendDataCallList	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestOrSendDataCallList(int cid, RIL_Token *t)$/;"	f	typeref:typename:void	file:
+requestQueryCallForward	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestQueryCallForward(RIL_CallForwardInfo *data,$/;"	f	typeref:typename:void	file:
+requestQueryCallWaiting	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestQueryCallWaiting(void *data, size_t datalen, RIL_Token t) {$/;"	f	typeref:typename:void	file:
+requestQueryClip	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestQueryClip(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestQueryClir	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestQueryClir(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestQueryNetworkSelectionMode	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestQueryNetworkSelectionMode($/;"	f	typeref:typename:void	file:
+requestRadioPower	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestRadioPower(void *data, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestRegistrationState	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestRegistrationState(int request, void *data __unused,$/;"	f	typeref:typename:void	file:
+requestSIM_IO	guest/hals/ril/reference-ril/reference-ril.c	/^static void  requestSIM_IO(void *data, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSMSAcknowledge	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSMSAcknowledge(void *data, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestScreenState	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestScreenState(void *data, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSendSMS	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSendSMS(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSendUSSD	guest/hals/ril/reference-ril/reference-ril.c	/^static void  requestSendUSSD(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSetCallForward	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetCallForward(RIL_CallForwardInfo *data,$/;"	f	typeref:typename:void	file:
+requestSetCallWaiting	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetCallWaiting(void *data, size_t datalen, RIL_Token t) {$/;"	f	typeref:typename:void	file:
+requestSetCellInfoListRate	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetCellInfoListRate(void *data, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSetClir	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetClir(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSetMute	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetMute(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSetNetworlSelectionManual	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetNetworlSelectionManual(void *data, RIL_Token t) {$/;"	f	typeref:typename:void	file:
+requestSetPreferredNetworkType	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetPreferredNetworkType(int request, void *data,$/;"	f	typeref:typename:void	file:
+requestSetRadioCapability	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetRadioCapability(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSetSmsBroadcastConfig	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetSmsBroadcastConfig(void *data, size_t datalen,$/;"	f	typeref:typename:void	file:
+requestSetSmscAddress	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetSmscAddress(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSetSuppServiceNotifications	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetSuppServiceNotifications(void *data, size_t datalen,$/;"	f	typeref:typename:void	file:
+requestSetupDataCall	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSetupDataCall(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestShutdown	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::requestShutdown(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+requestShutdown	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestShutdown(RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestShutdownResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::requestShutdownResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+requestSignalStrength	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSignalStrength(void *data __unused, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSimAuthentication	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSimAuthentication(int authContext, char* authData, RIL_Token t) {$/;"	f	typeref:typename:void	file:
+requestSimCloseChannel	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSimCloseChannel(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSimOpenChannel	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSimOpenChannel(void *data, size_t datalen, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestSimTransmitApduChannel	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestSimTransmitApduChannel(void *data,$/;"	f	typeref:typename:void	file:
+requestStkSendEnvelope	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestStkSendEnvelope(void *data, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestStkServiceIsRunning	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestStkServiceIsRunning(RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestStksendTerminalResponse	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestStksendTerminalResponse(void *data, RIL_Token t)$/;"	f	typeref:typename:void	file:
+requestToString	guest/hals/ril/reference-libril/ril.cpp	/^requestToString(int request) {$/;"	f	namespace:android	typeref:typename:const char *
+requestTransmitApduBasic	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestTransmitApduBasic( void *data, size_t datalen,$/;"	f	typeref:typename:void	file:
+requestType	guest/hals/ril/reference-libril/ril.h	/^  RIL_SsRequestType requestType;$/;"	m	struct:__anon0bfbaecf9908	typeref:typename:RIL_SsRequestType
+requestWriteSmsToSim	guest/hals/ril/reference-ril/reference-ril.c	/^static void requestWriteSmsToSim(void *data, size_t datalen __unused, RIL_Token t)$/;"	f	typeref:typename:void	file:
+request_	common/libs/net/netlink_request.h	/^  std::vector<char> request_;$/;"	m	class:cuttlefish::NetlinkRequest	typeref:typename:std::vector<char>
+request_available_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::condition_variable request_available_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::condition_variable
+request_mutex_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::mutex request_mutex_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::mutex
+request_processor_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::thread request_processor_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::thread
+request_queue_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::unique_ptr<MessageQueue<uint8_t, kSynchronizedReadWrite>> request_queue_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::unique_ptr<MessageQueue<uint8_t,kSynchronizedReadWrite>>
+request_time_ms	host/commands/metrics/proto/clientanalytics.proto	/^  optional int64 request_time_ms = 4;$/;"	f	message:LogRequest	typeref:typename:int64
+resendIncallMuteInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::resendIncallMuteInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+resendLastNITZTimeData	guest/hals/ril/reference-libril/ril.cpp	/^static void resendLastNITZTimeData(RIL_SOCKET_ID socket_id) {$/;"	f	namespace:android	typeref:typename:void	file:
+reserved	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint32_t reserved;$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint32_t	file:
+resetSimReq	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::resetSimReq(int32_t token) {$/;"	f	class:SapImpl	typeref:typename:Return<void>
+resizeDeviceDisplays	host/frontend/webrtc_operator/assets/js/app.js	/^  #resizeDeviceDisplays() {$/;"	m	class:DeviceControlApp
+resolution_	host/frontend/webrtc/lib/camera_streamer.h	/^  std::atomic<Resolution> resolution_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:std::atomic<Resolution>
+resource_	host/commands/secure_env/tpm_resource_manager.h	/^    ESYS_TR resource_;$/;"	m	class:cuttlefish::TpmResourceManager::ObjectSlot	typeref:typename:ESYS_TR
+resource_id	host/commands/assemble_cvd/alloc.h	/^  uint32_t resource_id;$/;"	m	struct:cuttlefish::IfaceData	typeref:typename:uint32_t
+resource_manager_	host/commands/secure_env/encrypted_serializable.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::EncryptedSerializable	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/fragile_tpm_storage.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::FragileTpmStorage	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/hmac_serializable.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::HmacSerializable	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/insecure_fallback_storage.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::InsecureFallbackStorage	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/tpm_gatekeeper.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::TpmGatekeeper	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/tpm_key_blob_maker.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/tpm_keymaster_context.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/tpm_keymaster_enforcement.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/tpm_remote_provisioning_context.h	/^  TpmResourceManager& resource_manager_;$/;"	m	class:cuttlefish::TpmRemoteProvisioningContext	typeref:typename:TpmResourceManager &
+resource_manager_	host/commands/secure_env/tpm_resource_manager.h	/^    TpmResourceManager* resource_manager_;$/;"	m	class:cuttlefish::TpmResourceManager::ObjectSlot	typeref:typename:TpmResourceManager *
+resoure_cv_	common/libs/concurrency/semaphore.h	/^  std::condition_variable resoure_cv_;$/;"	m	class:cuttlefish::Semaphore	typeref:typename:std::condition_variable
+responseAcknowledgement	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::responseAcknowledgement() {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+responseFunction	guest/hals/ril/reference-libril/ril.cpp	/^    int (*responseFunction) (int slotId, int responseType, int token,$/;"	m	struct:android::__anonf9a2982a0108	typeref:typename:int (*)(int slotId,int responseType,int token,RIL_Errno e,void * response,size_t responselen)	file:
+responseFunction	guest/hals/ril/reference-libril/ril_internal.h	/^    int(*responseFunction) (int slotId, int responseType, int token,$/;"	m	struct:android::CommandInfo	typeref:typename:int (*)(int slotId,int responseType,int token,RIL_Errno e,void * response,size_t responselen)
+responseIccIo	guest/hals/ril/reference-libril/ril_service.cpp	/^IccIoResult responseIccIo(RadioResponseInfo& responseInfo, int serial, int responseType,$/;"	f	typeref:typename:IccIoResult
+responseInt	guest/hals/ril/reference-libril/ril_service.cpp	/^int responseInt(RadioResponseInfo& responseInfo, int serial, int responseType, RIL_Errno e,$/;"	f	typeref:typename:int
+responseIntOrEmpty	guest/hals/ril/reference-libril/ril_service.cpp	/^int responseIntOrEmpty(RadioResponseInfo& responseInfo, int serial, int responseType, RIL_Errno /;"	f	typeref:typename:int
+responseInt_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^int responseInt_1_6(::android::hardware::radio::V1_6::RadioResponseInfo &responseInfo, int seria/;"	f	typeref:typename:int
+responseLceStatusInfo	guest/hals/ril/reference-libril/ril_service.cpp	/^LceStatusInfo responseLceStatusInfo(RadioResponseInfo& responseInfo, int serial, int responseTyp/;"	f	typeref:typename:LceStatusInfo
+responseRadioCapability	guest/hals/ril/reference-libril/ril_service.cpp	/^void responseRadioCapability(RadioResponseInfo& responseInfo, int serial,$/;"	f	typeref:typename:void
+response_	common/libs/confui/protocol_types.h	/^  UserResponse::type response_;     \/\/ plain format$/;"	m	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:UserResponse::type
+response_	common/libs/confui/protocol_types.h	/^  UserResponse::type response_;$/;"	m	class:cuttlefish::confui::ConfUiUserSelectionMessage	typeref:typename:UserResponse::type
+response_	common/libs/confui/protocol_types.h	/^  UserResponse::type response_;$/;"	m	class:cuttlefish::confui::ConfUiUserTouchMessage	typeref:typename:UserResponse::type
+restart_subprocesses	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::restart_subprocesses() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+restart_subprocesses_	host/commands/run_cvd/process_monitor.h	/^  bool restart_subprocesses_;$/;"	m	class:cuttlefish::ProcessMonitor	typeref:typename:bool
+restrictedStateChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::restrictedStateChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+result	guest/hals/ril/reference-libril/ril.h	/^    RIL_SimRefreshResult result;$/;"	m	struct:__anon0bfbaecf4108	typeref:typename:RIL_SimRefreshResult
+result	guest/hals/ril/reference-libril/ril.h	/^  RIL_Errno result;$/;"	m	struct:__anon0bfbaecf9908	typeref:typename:RIL_Errno
+result_queue_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::shared_ptr<MessageQueue<uint8_t, kSynchronizedReadWrite>> result_queue_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::shared_ptr<MessageQueue<uint8_t,kSynchronizedReadWrite>>
+retry	guest/hals/ril/reference-libril/ril.h	/^    unsigned char             retry;       \/* 0 == not retry, nonzero == retry *\/$/;"	m	struct:__anon0bfbaecf1808	typeref:typename:unsigned char
+retry_	host/libs/websocket/websocket_server.h	/^  lws_retry_bo_t retry_;$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:lws_retry_bo_t
+retry_attempts_	host/commands/fetcher/curl_wrapper.cc	/^  int retry_attempts_;$/;"	m	class:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper	typeref:typename:int	file:
+retry_delay_	host/commands/fetcher/curl_wrapper.cc	/^  std::chrono::milliseconds retry_delay_;$/;"	m	class:cuttlefish::__anondfffca8d0111::CurlServerErrorRetryingWrapper	typeref:typename:std::chrono::milliseconds	file:
+retry_interval_ms_	host/frontend/webrtc/lib/streamer.cpp	/^  int retry_interval_ms_ = kRetryFirstIntervalMs;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:int	file:
+reverseIntermediates	guest/hals/ril/reference-ril/atchannel.c	/^static void reverseIntermediates(ATResponse *p_response)$/;"	f	typeref:typename:void	file:
+revision	host/commands/fetcher/build_api.h	/^  std::string revision;$/;"	m	class:cuttlefish::Artifact	typeref:typename:std::string
+revision	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint8_t revision[4];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint8_t[4]	file:
+rilConnectedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::rilConnectedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+rilEventAddWakeup	guest/hals/ril/reference-libril/ril.cpp	/^static void rilEventAddWakeup(struct ril_event *ev) {$/;"	f	namespace:android	typeref:typename:void	file:
+rilModel	guest/hals/ril/reference-libril/ril.h	/^   int rilModel;$/;"	m	struct:__anon0bfbaecf9108	typeref:typename:int
+rilSocketId	guest/hals/ril/reference-libril/sap_service.cpp	/^    RIL_SOCKET_ID rilSocketId;$/;"	m	struct:SapImpl	typeref:typename:RIL_SOCKET_ID	file:
+rilSocketIdToString	guest/hals/ril/reference-libril/ril.cpp	/^rilSocketIdToString(RIL_SOCKET_ID socket_id)$/;"	f	namespace:android	typeref:typename:const char *
+ril_address_and_prefix	host/commands/modem_simulator/cf_device_config.cpp	/^std::string DeviceConfig::ril_address_and_prefix() {$/;"	f	class:cuttlefish::modem::DeviceConfig	typeref:typename:std::string
+ril_broadcast	common/libs/device_config/host_device_config.cpp	/^  std::string ril_broadcast;$/;"	m	class:cuttlefish::__anonf277137d0111::NetConfig	typeref:typename:std::string	file:
+ril_config	common/libs/device_config/device_config.proto	/^  RILConfig ril_config = 1;$/;"	f	message:cuttlefish.DeviceConfig	typeref:typename:RILConfig
+ril_dns	common/libs/device_config/host_device_config.cpp	/^  std::string ril_dns;$/;"	m	class:cuttlefish::__anonf277137d0111::NetConfig	typeref:typename:std::string	file:
+ril_dns	host/commands/modem_simulator/cf_device_config.cpp	/^std::string DeviceConfig::ril_dns() {$/;"	f	class:cuttlefish::modem::DeviceConfig	typeref:typename:std::string
+ril_dns	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::ril_dns() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+ril_event	guest/hals/ril/reference-libril/ril_event.h	/^struct ril_event {$/;"	s
+ril_event_add	guest/hals/ril/reference-libril/ril_event.cpp	/^void ril_event_add(struct ril_event * ev)$/;"	f	typeref:typename:void
+ril_event_cb	guest/hals/ril/reference-libril/ril_event.h	/^typedef void (*ril_event_cb)(int fd, short events, void *userdata);$/;"	t	typeref:typename:void (*)(int fd,short events,void * userdata)
+ril_event_del	guest/hals/ril/reference-libril/ril_event.cpp	/^void ril_event_del(struct ril_event * ev)$/;"	f	typeref:typename:void
+ril_event_init	guest/hals/ril/reference-libril/ril_event.cpp	/^void ril_event_init()$/;"	f	typeref:typename:void
+ril_event_loop	guest/hals/ril/reference-libril/ril_event.cpp	/^void ril_event_loop()$/;"	f	typeref:typename:void
+ril_event_set	guest/hals/ril/reference-libril/ril_event.cpp	/^void ril_event_set(struct ril_event * ev, int fd, bool persist, ril_event_cb func, void * param)$/;"	f	typeref:typename:void
+ril_gateway	common/libs/device_config/host_device_config.cpp	/^  std::string ril_gateway;$/;"	m	class:cuttlefish::__anonf277137d0111::NetConfig	typeref:typename:std::string	file:
+ril_gateway	host/commands/modem_simulator/cf_device_config.cpp	/^std::string DeviceConfig::ril_gateway() {$/;"	f	class:cuttlefish::modem::DeviceConfig	typeref:typename:std::string
+ril_ipaddr	common/libs/device_config/host_device_config.cpp	/^  std::string ril_ipaddr;$/;"	m	class:cuttlefish::__anonf277137d0111::NetConfig	typeref:typename:std::string	file:
+ril_prefixlen	common/libs/device_config/host_device_config.cpp	/^  uint8_t ril_prefixlen = -1;$/;"	m	class:cuttlefish::__anonf277137d0111::NetConfig	typeref:typename:uint8_t	file:
+ril_side_	host/commands/modem_simulator/unittest/service_test.cpp	/^  static Client* ril_side_;$/;"	m	class:ModemServiceTest	typeref:typename:Client *	file:
+ril_side_	host/commands/modem_simulator/unittest/service_test.cpp	/^Client* ModemServiceTest::ril_side_ = nullptr;$/;"	m	class:ModemServiceTest	typeref:typename:Client *
+ril_timer_add	guest/hals/ril/reference-libril/ril_event.cpp	/^void ril_timer_add(struct ril_event * ev, struct timeval * tv)$/;"	f	typeref:typename:void
+rilc_thread_pool	guest/hals/ril/reference-libril/ril_service.cpp	/^void rilc_thread_pool() {$/;"	f	typeref:typename:void
+roamingIndicator	guest/hals/ril/reference-libril/ril.h	/^    int32_t roamingIndicator;             \/\/ TSB-58 Roaming Indicator if registered$/;"	m	struct:__anon0bfbaecf7f08	typeref:typename:int32_t
+roamingProtocol	guest/hals/ril/reference-libril/ril.h	/^    char *roamingProtocol;      \/* one of the PDP_type values in TS 27.007 section 10.1.1 used /;"	m	struct:__anon0bfbaecfc108	typeref:typename:char *
+roamingProtocol	guest/hals/ril/reference-libril/ril.h	/^    char *roamingProtocol;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:char *
+room_cv_	common/libs/concurrency/semaphore.h	/^  std::condition_variable room_cv_;$/;"	m	class:cuttlefish::Semaphore	typeref:typename:std::condition_variable
+rootCanalAddPayload	host/frontend/webrtc_operator/assets/js/rootcanal.js	/^function rootCanalAddPayload(array, pos, payload) {$/;"	f
+rootCanalAddString	host/frontend/webrtc_operator/assets/js/rootcanal.js	/^function rootCanalAddString(array, pos, val) {$/;"	f
+rootCanalAddU8	host/frontend/webrtc_operator/assets/js/rootcanal.js	/^function rootCanalAddU8(array, pos, val) {$/;"	f
+rootCanalCalculateMessageSize	host/frontend/webrtc_operator/assets/js/rootcanal.js	/^function rootCanalCalculateMessageSize(name, args) {$/;"	f
+rootcanal_config_file	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::rootcanal_config_file() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+rootcanal_default_commands_file	host/libs/config/cuttlefish_config_instance.cpp	/^CuttlefishConfig::InstanceSpecific::rootcanal_default_commands_file() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+rootcanal_hci_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::rootcanal_hci_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+rootcanal_link_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::rootcanal_link_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+rootcanal_socket_	host/frontend/webrtc/bluetooth_handler.h	/^  SharedFD rootcanal_socket_;$/;"	m	struct:cuttlefish::webrtc_streaming::BluetoothHandler	typeref:typename:SharedFD
+rootcanal_test_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::rootcanal_test_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+routing	guest/hals/ril/reference-libril/ril.h	/^    RIL_EmergencyCallRouting     routing;$/;"	m	struct:__anon0bfbaecfb708	typeref:typename:RIL_EmergencyCallRouting
+rscp	guest/hals/ril/reference-libril/ril.h	/^    int rscp;    \/* The Received Signal Code Power in dBm multipled by -1.$/;"	m	struct:__anon0bfbaecf4d08	typeref:typename:int
+rsrp	guest/hals/ril/reference-libril/ril.h	/^    int rsrp;            \/* The current Reference Signal Receive Power in dBm multipled by -1.$/;"	m	struct:__anon0bfbaecf4b08	typeref:typename:int
+rsrp	guest/hals/ril/reference-libril/ril.h	/^    int rsrp;            \/* The current Reference Signal Receive Power in dBm multipled by -1.$/;"	m	struct:__anon0bfbaecf4c08	typeref:typename:int
+rsrq	guest/hals/ril/reference-libril/ril.h	/^    int rsrq;            \/* The current Reference Signal Receive Quality in dB multiplied by -1/;"	m	struct:__anon0bfbaecf4b08	typeref:typename:int
+rsrq	guest/hals/ril/reference-libril/ril.h	/^    int rsrq;            \/* The current Reference Signal Receive Quality in dB multiplied by -1/;"	m	struct:__anon0bfbaecf4c08	typeref:typename:int
+rssi	guest/hals/ril/reference-libril/ril.h	/^   int    rssi;        \/* Received RSSI in GSM,$/;"	m	struct:__anon0bfbaecf2208	typeref:typename:int
+rssnr	guest/hals/ril/reference-libril/ril.h	/^    int rssnr;           \/* The current reference signal signal-to-noise ratio in 0.1 dB units.$/;"	m	struct:__anon0bfbaecf4b08	typeref:typename:int
+rssnr	guest/hals/ril/reference-libril/ril.h	/^    int rssnr;           \/* The current reference signal signal-to-noise ratio in 0.1 dB units.$/;"	m	struct:__anon0bfbaecf4c08	typeref:typename:int
+runCvdComponent	host/commands/run_cvd/main.cc	/^fruit::Component<ServerLoop> runCvdComponent($/;"	f	namespace:cuttlefish::__anonadab6e0c0111	typeref:typename:fruit::Component<ServerLoop>
+run_as_daemon	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::run_as_daemon() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+run_connector_	host/libs/config/adb/data.cpp	/^  bool run_connector_;$/;"	m	class:cuttlefish::AdbConfigImpl	typeref:typename:bool	file:
+run_help	host/libs/config/adb/flags.cpp	/^  static constexpr char run_help[] =$/;"	m	class:cuttlefish::__anon459bf0e40111::AdbConfigFlagImpl	typeref:typename:char[]	file:
+running_	guest/hals/camera/vsock_frame_provider.h	/^  std::atomic<bool> running_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::atomic<bool>
+running_	host/frontend/webrtc/kernel_log_events_handler.h	/^  std::atomic<bool> running_;$/;"	m	struct:cuttlefish::KernelLogEventsHandler	typeref:typename:std::atomic<bool>
+rx_mode_time_ms	guest/hals/ril/reference-libril/ril.h	/^  uint32_t rx_mode_time_ms;$/;"	m	struct:__anon0bfbaecf9f08	typeref:typename:uint32_t
+rx_shm_	host/libs/audio_connector/server.h	/^  ScopedMMap rx_shm_;$/;"	m	class:cuttlefish::AudioClientConnection	typeref:typename:ScopedMMap
+rx_socket_	host/libs/audio_connector/server.h	/^  SharedFD rx_socket_;$/;"	m	class:cuttlefish::AudioClientConnection	typeref:typename:SharedFD
+sATBuffer	guest/hals/ril/reference-ril/reference-ril.c	/^static char sATBuffer[MAX_AT_RESPONSE+1];$/;"	v	typeref:typename:char[]	file:
+sATBufferCur	guest/hals/ril/reference-ril/reference-ril.c	/^static char *sATBufferCur = NULL;$/;"	v	typeref:typename:char *	file:
+sFD	guest/hals/ril/reference-ril/reference-ril.c	/^static int sFD;     \/* file desc of AT channel *\/$/;"	v	typeref:typename:int	file:
+sMdmInfo	guest/hals/ril/reference-ril/reference-ril.c	/^static ModemInfo *sMdmInfo;$/;"	v	typeref:typename:ModemInfo *	file:
+sOnRequestComplete	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^void RilSapSocket::sOnRequestComplete (RIL_Token t,$/;"	f	class:RilSapSocket	typeref:typename:void
+sOnUnsolicitedResponse	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^void RilSapSocket::sOnUnsolicitedResponse(int unsolResponse,$/;"	f	class:RilSapSocket	typeref:typename:void
+sState	guest/hals/ril/reference-ril/reference-ril.c	/^static RIL_RadioState sState = RADIO_STATE_UNAVAILABLE;$/;"	v	typeref:typename:RIL_RadioState	file:
+s_ATBuffer	guest/hals/ril/reference-ril/atchannel.c	/^static char s_ATBuffer[MAX_AT_RESPONSE+1];$/;"	v	typeref:typename:char[]	file:
+s_ATBufferCur	guest/hals/ril/reference-ril/atchannel.c	/^static char *s_ATBufferCur = s_ATBuffer;$/;"	v	typeref:typename:char *	file:
+s_PDP	guest/hals/ril/reference-ril/reference-ril.c	/^struct PDPInfo s_PDP[] = {$/;"	v	typeref:struct:PDPInfo[]
+s_callbacks	guest/hals/ril/reference-libril/ril.cpp	/^RIL_RadioFunctions s_callbacks = {0, NULL, NULL, NULL, NULL, NULL};$/;"	v	namespace:android	typeref:typename:RIL_RadioFunctions
+s_callbacks	guest/hals/ril/reference-ril/reference-ril.c	/^static const RIL_RadioFunctions s_callbacks = {$/;"	v	typeref:typename:const RIL_RadioFunctions	file:
+s_cell_info_rate_ms	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_cell_info_rate_ms = INT_MAX;$/;"	v	typeref:typename:int	file:
+s_cid	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_cid = 0;$/;"	v	typeref:typename:int	file:
+s_closed	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_closed = 0;$/;"	v	typeref:typename:int	file:
+s_commandcond	guest/hals/ril/reference-ril/atchannel.c	/^static pthread_cond_t s_commandcond = PTHREAD_COND_INITIALIZER;$/;"	v	typeref:typename:pthread_cond_t	file:
+s_commandmutex	guest/hals/ril/reference-ril/atchannel.c	/^static pthread_mutex_t s_commandmutex = PTHREAD_MUTEX_INITIALIZER;$/;"	v	typeref:typename:pthread_mutex_t	file:
+s_commands	guest/hals/ril/reference-libril/ril.cpp	/^static CommandInfo s_commands[] = {$/;"	v	namespace:android	typeref:typename:CommandInfo[]	file:
+s_commands	guest/hals/ril/reference-libril/ril_service.cpp	/^static CommandInfo *s_commands;$/;"	v	typeref:typename:CommandInfo *	file:
+s_configCommands	guest/hals/ril/reference-libril/ril.cpp	/^static CommandInfo s_configCommands[] = {$/;"	v	namespace:android	typeref:typename:CommandInfo[]	file:
+s_configCommands	guest/hals/ril/reference-libril/ril_config.cpp	/^static CommandInfo *s_configCommands;$/;"	v	typeref:typename:CommandInfo *	file:
+s_configUnsolResponses	guest/hals/ril/reference-libril/ril.cpp	/^static UnsolResponseInfo s_configUnsolResponses[] = {$/;"	v	namespace:android	typeref:typename:UnsolResponseInfo[]	file:
+s_device_path	guest/hals/ril/reference-ril/reference-ril.c	/^static const char * s_device_path = NULL;$/;"	v	typeref:typename:const char *	file:
+s_device_socket	guest/hals/ril/reference-ril/reference-ril.c	/^static int          s_device_socket = 0;$/;"	v	typeref:typename:int	file:
+s_expectAnswer	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_expectAnswer = 0;$/;"	v	typeref:typename:int	file:
+s_fd	guest/hals/ril/reference-ril/atchannel.c	/^static int s_fd = -1;    \/* fd of the AT channel *\/$/;"	v	typeref:typename:int	file:
+s_fdWakeupRead	guest/hals/ril/reference-libril/ril.cpp	/^static int s_fdWakeupRead;$/;"	v	namespace:android	typeref:typename:int	file:
+s_fdWakeupWrite	guest/hals/ril/reference-libril/ril.cpp	/^static int s_fdWakeupWrite;$/;"	v	namespace:android	typeref:typename:int	file:
+s_finalResponsesError	guest/hals/ril/reference-ril/atchannel.c	/^static const char * s_finalResponsesError[] = {$/;"	v	typeref:typename:const char * []	file:
+s_finalResponsesSuccess	guest/hals/ril/reference-ril/atchannel.c	/^static const char * s_finalResponsesSuccess[] = {$/;"	v	typeref:typename:const char * []	file:
+s_ims_cause_perm_failure	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_ims_cause_perm_failure = 0; \/\/ 1==causes sms over ims to permanent fail$/;"	v	typeref:typename:int	file:
+s_ims_cause_retry	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_ims_cause_retry = 0;        \/\/ 1==causes sms over ims to temp fail$/;"	v	typeref:typename:int	file:
+s_ims_format	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_ims_format    = 1;          \/\/ FORMAT_3GPP(1) vs FORMAT_3GPP2(2);$/;"	v	typeref:typename:int	file:
+s_ims_gsm_fail	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_ims_gsm_fail    = 0;        \/\/ 1==causes sms over gsm to permanent fail$/;"	v	typeref:typename:int	file:
+s_ims_gsm_retry	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_ims_gsm_retry   = 0;        \/\/ 1==causes sms over gsm to temp fail$/;"	v	typeref:typename:int	file:
+s_ims_registered	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_ims_registered  = 0;        \/\/ 0==unregistered$/;"	v	typeref:typename:int	file:
+s_ims_services	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_ims_services    = 1;        \/\/ & 0x1 == sms over ims supported$/;"	v	typeref:typename:int	file:
+s_incomingOrWaitingLine	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_incomingOrWaitingLine = -1;$/;"	v	typeref:typename:int	file:
+s_lac	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_lac = 0;$/;"	v	typeref:typename:int	file:
+s_lastNITZTimeData	guest/hals/ril/reference-libril/ril.cpp	/^static void *s_lastNITZTimeData = NULL;$/;"	v	namespace:android	typeref:typename:void *	file:
+s_lastNITZTimeDataSize	guest/hals/ril/reference-libril/ril.cpp	/^static size_t s_lastNITZTimeDataSize;$/;"	v	namespace:android	typeref:typename:size_t	file:
+s_last_activity_info_query	guest/hals/ril/reference-ril/reference-ril.c	/^static uint64_t s_last_activity_info_query = 0;$/;"	v	typeref:typename:uint64_t	file:
+s_last_wake_timeout_info	guest/hals/ril/reference-libril/ril.cpp	/^static UserCallbackInfo *s_last_wake_timeout_info = NULL;$/;"	v	namespace:android	typeref:typename:UserCallbackInfo *	file:
+s_mcc	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_mcc = 0;$/;"	v	typeref:typename:int	file:
+s_mnc	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_mnc = 0;$/;"	v	typeref:typename:int	file:
+s_mncLength	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_mncLength = 2;$/;"	v	typeref:typename:int	file:
+s_modem_simulator_port	guest/hals/ril/reference-ril/reference-ril.c	/^static uint32_t s_modem_simulator_port = -1;$/;"	v	typeref:typename:uint32_t	file:
+s_networkMask	guest/hals/ril/reference-ril/reference-ril.c	/^static NetworkTypeBitmap s_networkMask[] = {$/;"	v	typeref:typename:NetworkTypeBitmap[]	file:
+s_nvram_config	host/commands/modem_simulator/nvram_config.cpp	/^std::unique_ptr<NvramConfig> NvramConfig::s_nvram_config;$/;"	m	class:cuttlefish::NvramConfig	typeref:typename:std::unique_ptr<NvramConfig>
+s_nvram_config	host/commands/modem_simulator/nvram_config.h	/^  static std::unique_ptr<NvramConfig> s_nvram_config;$/;"	m	class:cuttlefish::NvramConfig	typeref:typename:std::unique_ptr<NvramConfig>
+s_onReaderClosed	guest/hals/ril/reference-ril/atchannel.c	/^static void (*s_onReaderClosed)(void) = NULL;$/;"	v	typeref:typename:void (*)(void)	file:
+s_onTimeout	guest/hals/ril/reference-ril/atchannel.c	/^static void (*s_onTimeout)(void) = NULL;$/;"	v	typeref:typename:void (*)(void)	file:
+s_pendingRequests	guest/hals/ril/reference-libril/ril.cpp	/^static RequestInfo *s_pendingRequests = NULL;$/;"	v	namespace:android	typeref:typename:RequestInfo *	file:
+s_pendingRequestsMutex	guest/hals/ril/reference-libril/ril.cpp	/^static pthread_mutex_t s_pendingRequestsMutex = PTHREAD_MUTEX_INITIALIZER;$/;"	v	namespace:android	typeref:typename:pthread_mutex_t	file:
+s_pendingRequestsMutex_socket2	guest/hals/ril/reference-libril/ril.cpp	/^static pthread_mutex_t s_pendingRequestsMutex_socket2  = PTHREAD_MUTEX_INITIALIZER;$/;"	v	namespace:android	typeref:typename:pthread_mutex_t	file:
+s_pendingRequestsMutex_socket3	guest/hals/ril/reference-libril/ril.cpp	/^static pthread_mutex_t s_pendingRequestsMutex_socket3  = PTHREAD_MUTEX_INITIALIZER;$/;"	v	namespace:android	typeref:typename:pthread_mutex_t	file:
+s_pendingRequestsMutex_socket4	guest/hals/ril/reference-libril/ril.cpp	/^static pthread_mutex_t s_pendingRequestsMutex_socket4  = PTHREAD_MUTEX_INITIALIZER;$/;"	v	namespace:android	typeref:typename:pthread_mutex_t	file:
+s_pendingRequests_socket2	guest/hals/ril/reference-libril/ril.cpp	/^static RequestInfo *s_pendingRequests_socket2          = NULL;$/;"	v	namespace:android	typeref:typename:RequestInfo *	file:
+s_pendingRequests_socket3	guest/hals/ril/reference-libril/ril.cpp	/^static RequestInfo *s_pendingRequests_socket3          = NULL;$/;"	v	namespace:android	typeref:typename:RequestInfo *	file:
+s_pendingRequests_socket4	guest/hals/ril/reference-libril/ril.cpp	/^static RequestInfo *s_pendingRequests_socket4          = NULL;$/;"	v	namespace:android	typeref:typename:RequestInfo *	file:
+s_port	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_port = -1;$/;"	v	typeref:typename:int	file:
+s_readerClosed	guest/hals/ril/reference-ril/atchannel.c	/^static int s_readerClosed;$/;"	v	typeref:typename:int	file:
+s_registerCalled	guest/hals/ril/reference-libril/ril.cpp	/^static int s_registerCalled = 0;$/;"	v	namespace:android	typeref:typename:int	file:
+s_repollCallsCount	guest/hals/ril/reference-ril/reference-ril.c	/^static int s_repollCallsCount = 0;$/;"	v	typeref:typename:int	file:
+s_responsePrefix	guest/hals/ril/reference-ril/atchannel.c	/^static const char *s_responsePrefix = NULL;$/;"	v	typeref:typename:const char *	file:
+s_rilEnv	guest/hals/rild/rild_cuttlefish.c	/^static struct RIL_Env s_rilEnv = {$/;"	v	typeref:struct:RIL_Env	file:
+s_rilenv	guest/hals/ril/reference-ril/reference-ril.c	/^static const struct RIL_Env *s_rilenv;$/;"	v	typeref:typename:const struct RIL_Env *	file:
+s_smsPDU	guest/hals/ril/reference-ril/atchannel.c	/^static const char *s_smsPDU = NULL;$/;"	v	typeref:typename:const char *	file:
+s_smsUnsoliciteds	guest/hals/ril/reference-ril/atchannel.c	/^static const char * s_smsUnsoliciteds[] = {$/;"	v	typeref:typename:const char * []	file:
+s_started	guest/hals/ril/reference-libril/ril.cpp	/^static int s_started = 0;$/;"	v	namespace:android	typeref:typename:int	file:
+s_startupCond	guest/hals/ril/reference-libril/ril.cpp	/^static pthread_cond_t s_startupCond = PTHREAD_COND_INITIALIZER;$/;"	v	namespace:android	typeref:typename:pthread_cond_t	file:
+s_startupMutex	guest/hals/ril/reference-libril/ril.cpp	/^static pthread_mutex_t s_startupMutex = PTHREAD_MUTEX_INITIALIZER;$/;"	v	namespace:android	typeref:typename:pthread_mutex_t	file:
+s_state_cond	guest/hals/ril/reference-ril/reference-ril.c	/^static pthread_cond_t s_state_cond = PTHREAD_COND_INITIALIZER;$/;"	v	typeref:typename:pthread_cond_t	file:
+s_state_mutex	guest/hals/ril/reference-ril/reference-ril.c	/^static pthread_mutex_t s_state_mutex = PTHREAD_MUTEX_INITIALIZER;$/;"	v	typeref:typename:pthread_mutex_t	file:
+s_stkServiceRunning	guest/hals/ril/reference-ril/reference-ril.c	/^static bool s_stkServiceRunning = false;$/;"	v	typeref:typename:bool	file:
+s_stkUnsolResponse	guest/hals/ril/reference-ril/reference-ril.c	/^static char *s_stkUnsolResponse = NULL;$/;"	v	typeref:typename:char *	file:
+s_tid_dispatch	guest/hals/ril/reference-libril/ril.cpp	/^static pthread_t s_tid_dispatch;$/;"	v	namespace:android	typeref:typename:pthread_t	file:
+s_tid_mainloop	guest/hals/ril/reference-ril/reference-ril.c	/^pthread_t s_tid_mainloop;$/;"	v	typeref:typename:pthread_t
+s_tid_reader	guest/hals/ril/reference-ril/atchannel.c	/^static pthread_t s_tid_reader;$/;"	v	typeref:typename:pthread_t	file:
+s_type	guest/hals/ril/reference-ril/atchannel.c	/^static ATCommandType s_type;$/;"	v	typeref:typename:ATCommandType	file:
+s_unsolHandler	guest/hals/ril/reference-ril/atchannel.c	/^static ATUnsolHandler s_unsolHandler;$/;"	v	typeref:typename:ATUnsolHandler	file:
+s_unsolResponses	guest/hals/ril/reference-libril/ril.cpp	/^static UnsolResponseInfo s_unsolResponses[] = {$/;"	v	namespace:android	typeref:typename:UnsolResponseInfo[]	file:
+s_vendorFunctions	guest/hals/ril/reference-libril/ril_service.cpp	/^RIL_RadioFunctions *s_vendorFunctions = NULL;$/;"	v	typeref:typename:RIL_RadioFunctions *
+s_vendorFunctions_config	guest/hals/ril/reference-libril/ril_config.cpp	/^RIL_RadioFunctions *s_vendorFunctions_config = NULL;$/;"	v	typeref:typename:RIL_RadioFunctions *
+s_wakeLockCountMutex	guest/hals/ril/reference-libril/ril.cpp	/^static pthread_mutex_t s_wakeLockCountMutex = PTHREAD_MUTEX_INITIALIZER;$/;"	v	namespace:android	typeref:typename:pthread_mutex_t	file:
+s_wakelock_count	guest/hals/ril/reference-libril/ril.cpp	/^int s_wakelock_count = 0;$/;"	v	namespace:android	typeref:typename:int
+s_wakeupfd_event	guest/hals/ril/reference-libril/ril.cpp	/^static struct ril_event s_wakeupfd_event;$/;"	v	namespace:android	typeref:struct:ril_event	file:
+s_writeMutex	guest/hals/ril/reference-ril/atchannel.c	/^static pthread_mutex_t s_writeMutex = PTHREAD_MUTEX_INITIALIZER;$/;"	v	typeref:typename:pthread_mutex_t	file:
+salt	host/commands/secure_env/soft_gatekeeper.h	/^    uint64_t salt;$/;"	m	struct:gatekeeper::fast_hash_t	typeref:typename:uint64_t
+sample_rate	host/frontend/webrtc/audio_handler.cpp	/^  int sample_rate() const override { return sample_rate_; }$/;"	f	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:int	file:
+sample_rate	host/frontend/webrtc/audio_handler.h	/^    int sample_rate = -1;$/;"	m	struct:cuttlefish::AudioHandler::StreamDesc	typeref:typename:int
+sample_rate_	host/frontend/webrtc/audio_handler.cpp	/^  int sample_rate_;$/;"	m	class:cuttlefish::__anon2a3d92f70111::CvdAudioFrameBuffer	typeref:typename:int	file:
+sap	guest/hals/ril/reference-libril/sap_service.h	/^namespace sap {$/;"	n
+sapCallback	guest/hals/ril/reference-libril/sap_service.cpp	/^    sp<ISapCallback> sapCallback;$/;"	m	struct:SapImpl	typeref:typename:sp<ISapCallback>	file:
+sapDecodeMessage	guest/hals/ril/reference-libril/sap_service.cpp	/^void *sapDecodeMessage(MsgId msgId, MsgType msgType, uint8_t *payloadPtr, size_t payloadLen) {$/;"	f	typeref:typename:void *
+sapService	guest/hals/ril/reference-libril/sap_service.cpp	/^sp<SapImpl> sapService[1];$/;"	v	typeref:typename:sp<SapImpl>[1]
+sapService	guest/hals/ril/reference-libril/sap_service.cpp	/^sp<SapImpl> sapService[SIM_COUNT];$/;"	v	typeref:typename:sp<SapImpl>[]
+saved_params_	host/commands/secure_env/tpm_keymaster_enforcement.h	/^  keymaster::HmacSharingParameters saved_params_;$/;"	m	class:cuttlefish::TpmKeymasterEnforcement	typeref:typename:keymaster::HmacSharingParameters
+saved_state_	host/libs/confui/session.h	/^  MainLoopState saved_state_;  \/\/ for restore\/suspend$/;"	m	class:cuttlefish::confui::Session	typeref:typename:MainLoopState
+sc_android_queue_id_	host/libs/screen_connector/screen_connector_multiplexer.h	/^  int sc_android_queue_id_;$/;"	m	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:int
+sc_android_src_	host/libs/screen_connector/screen_connector.h	/^  std::unique_ptr<WaylandScreenConnector> sc_android_src_;$/;"	m	class:cuttlefish::ScreenConnector	typeref:typename:std::unique_ptr<WaylandScreenConnector>
+sc_confui_queue_id_	host/libs/screen_connector/screen_connector_multiplexer.h	/^  int sc_confui_queue_id_;$/;"	m	class:cuttlefish::ScreenConnectorInputMultiplexer	typeref:typename:int
+sc_frame_multiplexer_	host/libs/screen_connector/screen_connector.h	/^  FrameMultiplexer sc_frame_multiplexer_;$/;"	m	class:cuttlefish::ScreenConnector	typeref:typename:FrameMultiplexer
+sca	host/commands/modem_simulator/sms_service.h	/^    std::string sca;$/;"	m	struct:cuttlefish::SmsService::SmsServiceCenterAddress	typeref:typename:std::string
+scaled_frame_	host/frontend/webrtc/lib/camera_streamer.h	/^  rtc::scoped_refptr<webrtc::I420Buffer> scaled_frame_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:rtc::scoped_refptr<webrtc::I420Buffer>
+scanout_id	host/libs/wayland/wayland_surface.h	/^    std::optional<uint32_t> scanout_id;$/;"	m	struct:wayland::Surface::VirtioGpuMetadata	typeref:typename:std::optional<uint32_t>
+schedule	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/JobExecutor.java	/^    public void schedule(final JobBase job, final GceFuture<?>... futures) {$/;"	m	class:JobExecutor
+screen_connector_	host/frontend/webrtc/display_handler.h	/^  ScreenConnector& screen_connector_;$/;"	m	class:cuttlefish::DisplayHandler	typeref:typename:ScreenConnector &
+screen_connector_	host/libs/confui/host_server.h	/^  ScreenConnectorFrameRenderer& screen_connector_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:ScreenConnectorFrameRenderer &
+screen_connector_	host/libs/confui/session.h	/^  ScreenConnectorFrameRenderer& screen_connector_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:ScreenConnectorFrameRenderer &
+sdcard_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::sdcard_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+seat_get_keyboard	host/libs/wayland/wayland_seat.cpp	/^void seat_get_keyboard(wl_client* client, wl_resource* seat, uint32_t id) {$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+seat_get_pointer	host/libs/wayland/wayland_seat.cpp	/^void seat_get_pointer(wl_client* client, wl_resource* seat, uint32_t id) {$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+seat_get_touch	host/libs/wayland/wayland_seat.cpp	/^void seat_get_touch(wl_client* client, wl_resource* seat, uint32_t id) {$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+seat_implementation	host/libs/wayland/wayland_seat.cpp	/^const struct wl_seat_interface seat_implementation = {$/;"	v	namespace:wayland::__anona9f16c970111	typeref:typename:const struct wl_seat_interface
+seat_release	host/libs/wayland/wayland_seat.cpp	/^void seat_release(wl_client*, wl_resource* resource) {$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+seccomp_policy_dir	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::seccomp_policy_dir() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+seconds	host/commands/metrics/proto/common.proto	/^  required int64 seconds = 1;$/;"	f	message:Duration	typeref:typename:int64
+seconds	host/commands/metrics/proto/common.proto	/^  required int64 seconds = 1;$/;"	f	message:Timestamp	typeref:typename:int64
+secs	common/libs/utils/network.cpp	/^  __be16 secs;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:__be16	file:
+secure_hals	host/libs/config/cuttlefish_config.cpp	/^std::set<SecureHal> CuttlefishConfig::secure_hals() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::set<SecureHal>
+secure_storage_	host/commands/secure_env/tpm_gatekeeper.h	/^  GatekeeperStorage& secure_storage_;$/;"	m	class:cuttlefish::TpmGatekeeper	typeref:typename:GatekeeperStorage &
+secureclock	guest/hals/keymint/remote/remote_secure_clock.cpp	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	namespace:aidl::android::hardware::security	file:
+secureclock	guest/hals/keymint/remote/remote_secure_clock.h	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	namespace:aidl::android::hardware::security
+security	guest/hals/keymint/remote/remote_keymint_device.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware	file:
+security	guest/hals/keymint/remote/remote_keymint_device.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware
+security	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware	file:
+security	guest/hals/keymint/remote/remote_keymint_operation.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware
+security	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware	file:
+security	guest/hals/keymint/remote/remote_remotely_provisioned_component.h	/^namespace aidl::android::hardware::security::keymint {$/;"	n	namespace:aidl::android::hardware
+security	guest/hals/keymint/remote/remote_secure_clock.cpp	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	namespace:aidl::android::hardware	file:
+security	guest/hals/keymint/remote/remote_secure_clock.h	/^namespace aidl::android::hardware::security::secureclock {$/;"	n	namespace:aidl::android::hardware
+security	guest/hals/keymint/remote/remote_shared_secret.cpp	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	namespace:aidl::android::hardware	file:
+security	guest/hals/keymint/remote/remote_shared_secret.h	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	namespace:aidl::android::hardware
+security	host/frontend/webrtc/lib/streamer.h	/^    WsConnection::Security security;$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig::__anonbc3851b60108	typeref:typename:WsConnection::Security
+securityLevel_	guest/hals/keymint/remote/remote_keymint_device.h	/^  SecurityLevel securityLevel_;$/;"	m	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:SecurityLevel
+security_	host/frontend/webrtc/lib/ws_connection.cpp	/^  const Security security_;$/;"	m	class:WsConnectionImpl	typeref:typename:const Security	file:
+security_level	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^    keymaster_security_level_t security_level;$/;"	m	struct:cuttlefish::TpmKeymasterEnforcement::VerifyAuthorization::VerificationData	typeref:typename:keymaster_security_level_t	file:
+segment_	host/frontend/webrtc/lib/local_recorder.cpp	/^  mkvmuxer::Segment segment_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Impl	typeref:typename:mkvmuxer::Segment	file:
+selectDeviceCb	host/frontend/webrtc_operator/assets/js/index.js	/^  #selectDeviceCb;$/;"	M	class:DeviceListApp
+selected	guest/hals/ril/reference-libril/ril.h	/^    unsigned char selected;$/;"	m	struct:__anon0bfbaecf4408	typeref:typename:unsigned char
+sem_	host/libs/screen_connector/screen_connector_ctrl.h	/^  Semaphore sem_;$/;"	m	class:cuttlefish::ScreenConnectorCtrl	typeref:typename:Semaphore
+sem_items_	common/libs/concurrency/multiplexer.h	/^  Semaphore sem_items_;$/;"	m	class:cuttlefish::Multiplexer	typeref:typename:Semaphore
+send	guest/commands/bt_vhci_forwarder/main.cpp	/^ssize_t send(int fd_, uint8_t type, const uint8_t* data, size_t length) {$/;"	f	typeref:typename:ssize_t
+send	guest/hals/bt/remote/remote_bluetooth.cpp	/^void BluetoothHci::send(test_vendor_lib::PacketType type,$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:void
+send	host/frontend/webrtc_operator/assets/js/adb.js	/^    send: function(buffer) {$/;"	m	class:init_adb.adb_ws
+sendAclData	guest/hals/bt/remote/remote_bluetooth.cpp	/^Return<void> BluetoothHci::sendAclData(const hidl_vec<uint8_t>& packet) {$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:Return<void>
+sendAdbMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendAdbMessage(msg) {$/;"	m	class:DeviceConnection
+sendBluetoothMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendBluetoothMessage(msg) {$/;"	m	class:DeviceConnection
+sendBurstDtmf	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendBurstDtmf(int32_t serial, const hidl_string& dtmf, int32_t on,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendBurstDtmfResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendBurstDtmfResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendCDMAFeatureCode	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendCDMAFeatureCode(int32_t serial, const hidl_string& featureCode) /;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendCDMAFeatureCodeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendCDMAFeatureCodeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendCallStateChanged	guest/hals/ril/reference-ril/reference-ril.c	/^static void sendCallStateChanged(void *param __unused)$/;"	f	typeref:typename:void	file:
+sendCameraData	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendCameraData(data) {$/;"	m	class:DeviceConnection
+sendCameraResolution	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendCameraResolution(stream) {$/;"	m	class:DeviceConnection
+sendCdmaSms	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendCdmaSms(int32_t serial, const CdmaSmsMessage& sms) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendCdmaSmsExpectMore	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendCdmaSmsExpectMore(int32_t serial, const CdmaSmsMessage& sms) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendCdmaSmsExpectMoreResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendCdmaSmsExpectMoreResponse(int slotId, int responseType, int serial, RIL_Errno/;"	f	class:radio_1_6	typeref:typename:int
+sendCdmaSmsExpectMore_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendCdmaSmsExpectMore_1_6(int32_t serial, const CdmaSmsMessage& sms)/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendCdmaSmsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendCdmaSmsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendCdmaSms_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendCdmaSms_1_6(int32_t serial, const CdmaSmsMessage& sms) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendClientDescription	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  async #sendClientDescription(desc) {$/;"	m	class:Controller
+sendCmdAgainForOpenChannelWithP2	guest/hals/ril/reference-ril/reference-ril.c	/^static int sendCmdAgainForOpenChannelWithP2( char *data,$/;"	f	typeref:typename:int	file:
+sendControlMessage	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendControlMessage(msg) {$/;"	m	class:DeviceConnection
+sendDeviceState	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendDeviceState(int32_t serial, DeviceStateType deviceStateType,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendDeviceStateResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendDeviceStateResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendDtmf	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendDtmf(int32_t serial, const hidl_string& s) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendDtmfResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendDtmfResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendEnvelope	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendEnvelope(int32_t serial, const hidl_string& command) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendEnvelopeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendEnvelopeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendEnvelopeWithStatus	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendEnvelopeWithStatus(int32_t serial, const hidl_string& contents) /;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendEnvelopeWithStatusResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendEnvelopeWithStatusResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendErrorResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^void sendErrorResponse(RequestInfo *pRI, RIL_Errno err) {$/;"	f	typeref:typename:void
+sendEventUpdate	host/frontend/webrtc_operator/assets/js/app.js	/^  #sendEventUpdate(ctx, e) {$/;"	m	class:DeviceControlApp
+sendFailedResponse	guest/hals/ril/reference-libril/sap_service.cpp	/^void SapImpl::sendFailedResponse(MsgId msgId, int32_t token, int numPointers, ...) {$/;"	f	class:SapImpl	typeref:typename:void
+sendGnssRawToSerial	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    void sendGnssRawToSerial() {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:void	file:
+sendHciCommand	guest/hals/bt/remote/remote_bluetooth.cpp	/^Return<void> BluetoothHci::sendHciCommand(const hidl_vec<uint8_t>& packet) {$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:Return<void>
+sendIceCandidate	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  async #sendIceCandidate(candidate) {$/;"	m	class:Controller
+sendImsSms	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendImsSms(int32_t serial, const ImsSmsMessage& message) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendImsSmsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendImsSmsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendIsoData	guest/hals/bt/remote/remote_bluetooth.cpp	/^Return<void> BluetoothHci::sendIsoData(const hidl_vec<uint8_t>& packet) {$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:Return<void>
+sendJsonInput	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #sendJsonInput(evt) {$/;"	m	class:DeviceConnection
+sendKeyEvent	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendKeyEvent(code, type) {$/;"	m	class:DeviceConnection
+sendMousePosition	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendMousePosition({x, y, down, display_label}) {$/;"	m	class:DeviceConnection
+sendMultiTouch	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendMultiTouch({idArr, xArr, yArr, down, slotArr, display_label}) {$/;"	m	class:DeviceConnection
+sendOnePhysChanCfgUpdate	host/commands/modem_simulator/data_service.cpp	/^void DataService::sendOnePhysChanCfgUpdate(int status, int bandwidth, int rat,$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+sendOrQueueCameraData	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  sendOrQueueCameraData(data) {$/;"	m	class:DeviceConnection
+sendRequestRaw	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> OemHookImpl::sendRequestRaw(int32_t serial, const hidl_vec<uint8_t>& data) {$/;"	f	class:OemHookImpl	typeref:typename:Return<void>
+sendRequestRawResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendRequestRawResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendRequestStrings	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> OemHookImpl::sendRequestStrings(int32_t serial,$/;"	f	class:OemHookImpl	typeref:typename:Return<void>
+sendRequestStringsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendRequestStringsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendSMSExpectMore	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendSMSExpectMore(int32_t serial, const GsmSmsMessage& message) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendScoData	guest/hals/bt/remote/remote_bluetooth.cpp	/^Return<void> BluetoothHci::sendScoData(const hidl_vec<uint8_t>& packet) {$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:Return<void>
+sendSms	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendSms(int32_t serial, const GsmSmsMessage& message) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendSmsExpectMoreResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendSmsExpectMoreResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendSmsExpectMore_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendSmsExpectMore_1_6(int32_t serial, const GsmSmsMessage& message) /;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendSmsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendSmsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendSms_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendSms_1_6(int32_t serial, const GsmSmsMessage& message) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendTerminalResponseToSim	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendTerminalResponseToSim(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendTerminalResponseToSimResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendTerminalResponseToSimResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sendToDevice	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async sendToDevice(msg) {$/;"	m	class:Connector
+sendToDevice	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async sendToDevice(msg) {$/;"	m	class:PollingConnector
+sendToDevice	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async sendToDevice(msg) {$/;"	m	class:WebsocketConnector
+sendToSerial	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    void sendToSerial() {$/;"	f	class:GnssGrpcProxyServiceImpl	typeref:typename:void	file:
+sendUnsolImsNetworkStateChanged	guest/hals/ril/reference-ril/reference-ril.c	/^static void sendUnsolImsNetworkStateChanged()$/;"	f	typeref:typename:void	file:
+sendUnsolNetworkScanResult	guest/hals/ril/reference-ril/reference-ril.c	/^void sendUnsolNetworkScanResult() {$/;"	f	typeref:typename:void
+sendUssd	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::sendUssd(int32_t serial, const hidl_string& ussd) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+sendUssdResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::sendUssdResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+send_lock_	common/libs/utils/tcp_socket.h	/^  std::mutex send_lock_;$/;"	m	class:cuttlefish::ClientSocket	typeref:typename:std::mutex
+send_serializer_mtx_	guest/hals/confirmationui/guest_session.h	/^    std::mutex send_serializer_mtx_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::mutex
+send_to_client_	host/frontend/webrtc/adb_handler.h	/^  std::function<void(const uint8_t *, size_t)> send_to_client_;$/;"	m	struct:cuttlefish::webrtc_streaming::AdbHandler	typeref:typename:std::function<void (const uint8_t *,size_t)>
+send_to_client_	host/frontend/webrtc/bluetooth_handler.h	/^  std::function<void(const uint8_t *, size_t)> send_to_client_;$/;"	m	struct:cuttlefish::webrtc_streaming::BluetoothHandler	typeref:typename:std::function<void (const uint8_t *,size_t)>
+send_to_client_	host/frontend/webrtc/lib/client_handler.h	/^  std::function<void(const Json::Value&)> send_to_client_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:std::function<void (const Json::Value &)>
+separateConnection	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::separateConnection(int32_t serial, int32_t gsmIndex) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+separateConnectionResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::separateConnectionResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+serial	host/commands/modem_simulator/thread_looper.h	/^      Serial serial;$/;"	m	struct:cuttlefish::ThreadLooper::Event	typeref:typename:Serial
+serial_num_	host/libs/vm_manager/crosvm_builder.h	/^  int serial_num_;$/;"	m	class:cuttlefish::CrosvmBuilder	typeref:typename:int
+serial_number	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::serial_number() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+server	host/example_custom_actions/custom_action_config.json	/^		"server":"cuttlefish_example_action_server",$/;"	s	object:1
+server	host/libs/config/custom_actions.h	/^  std::optional<std::string> server;$/;"	m	struct:cuttlefish::CustomActionConfig	typeref:typename:std::optional<std::string>
+serverConnector	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #serverConnector;$/;"	M	class:Controller
+serverLoop	guest/hals/camera/vsock_camera_server.cpp	/^void VsockCameraServer::serverLoop(unsigned int port, unsigned int cid) {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:void
+serverLoopComponent	host/commands/run_cvd/server_loop.cpp	/^serverLoopComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<const CuttlefishConfig,const CuttlefishConfig::InstanceSpecific>,ServerLoop>
+server_	guest/hals/camera/vsock_camera_provider_2_7.h	/^  VsockCameraServer* server_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:VsockCameraServer *
+server_	host/commands/modem_simulator/channel_monitor.h	/^  cuttlefish::SharedFD server_;$/;"	m	class:cuttlefish::ChannelMonitor	typeref:typename:cuttlefish::SharedFD
+server_	host/commands/run_cvd/server_loop.cpp	/^  SharedFD server_;$/;"	m	class:cuttlefish::__anon527e8bd40111::ServerLoopImpl	typeref:typename:SharedFD	file:
+server_	host/libs/screen_connector/wayland_screen_connector.h	/^  std::unique_ptr<wayland::WaylandServer> server_;$/;"	m	class:cuttlefish::WaylandScreenConnector	typeref:typename:std::unique_ptr<wayland::WaylandServer>
+server_config_	host/frontend/webrtc_operator/client_handler.h	/^  const ServerConfig& server_config_;$/;"	m	class:cuttlefish::ClientWSHandlerFactory	typeref:typename:const ServerConfig &
+server_config_	host/frontend/webrtc_operator/client_handler.h	/^  const ServerConfig& server_config_;$/;"	m	class:cuttlefish::ConfigHandler	typeref:typename:const ServerConfig &
+server_config_	host/frontend/webrtc_operator/device_handler.h	/^  const ServerConfig& server_config_;$/;"	m	class:cuttlefish::DeviceHandlerFactory	typeref:typename:const ServerConfig &
+server_config_	host/frontend/webrtc_operator/signal_handler.h	/^  const ServerConfig& server_config_;$/;"	m	class:cuttlefish::SignalHandler	typeref:typename:const ServerConfig &
+server_connection_	host/frontend/webrtc/lib/streamer.cpp	/^  std::shared_ptr<WsConnection> server_connection_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::shared_ptr<WsConnection>	file:
+server_fd_	common/libs/utils/vsock_connection.h	/^  SharedFD server_fd_;$/;"	m	class:cuttlefish::VsockServerConnection	typeref:typename:SharedFD
+server_identifier	common/libs/utils/network.cpp	/^  Dhcp4ServerIdentifier server_identifier;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:Dhcp4ServerIdentifier	file:
+server_ip	common/libs/utils/network.cpp	/^  std::uint8_t server_ip[4];$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t[4]	file:
+server_ip	common/libs/utils/network.cpp	/^  std::uint8_t server_ip[4];$/;"	m	struct:cuttlefish::Dhcp4ServerIdentifier	typeref:typename:std::uint8_t[4]	file:
+server_name	common/libs/utils/network.cpp	/^  std::uint8_t server_name[64];$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:std::uint8_t[64]	file:
+server_port_	host/libs/websocket/websocket_server.h	/^  int server_port_;$/;"	m	class:cuttlefish::WebSocketServer	typeref:typename:int
+server_ready_	host/libs/wayland/wayland_server.h	/^    bool server_ready_ = false;$/;"	m	class:wayland::WaylandServer	typeref:typename:bool
+server_ready_cv_	host/libs/wayland/wayland_server.h	/^    std::condition_variable server_ready_cv_;$/;"	m	class:wayland::WaylandServer	typeref:typename:std::condition_variable
+server_ready_mutex_	host/libs/wayland/wayland_server.h	/^    std::mutex server_ready_mutex_;$/;"	m	class:wayland::WaylandServer	typeref:typename:std::mutex
+server_socket_	host/libs/audio_connector/server.h	/^  SharedFD server_socket_;$/;"	m	class:cuttlefish::AudioServer	typeref:typename:SharedFD
+server_state_	host/libs/wayland/wayland_server.h	/^    std::unique_ptr<internal::WaylandServerState> server_state_;$/;"	m	class:wayland::WaylandServer	typeref:typename:std::unique_ptr<internal::WaylandServerState>
+server_thread_	guest/hals/camera/vsock_camera_server.h	/^  std::thread server_thread_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:std::thread
+server_thread_	host/frontend/webrtc/audio_handler.h	/^  std::thread server_thread_;$/;"	m	class:cuttlefish::AudioHandler	typeref:typename:std::thread
+server_thread_	host/libs/wayland/wayland_server.h	/^    std::thread server_thread_;$/;"	m	class:wayland::WaylandServer	typeref:typename:std::thread
+servers	host/frontend/webrtc/lib/streamer.cpp	/^  std::vector<webrtc::PeerConnectionInterface::IceServer> servers;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::OperatorServerConfig	typeref:typename:std::vector<webrtc::PeerConnectionInterface::IceServer>	file:
+serviceClass	guest/hals/ril/reference-libril/ril.h	/^    int             serviceClass;\/* From 27.007 +CCFC\/+CLCK "class"$/;"	m	struct:__anon0bfbaecf2108	typeref:typename:int
+serviceClass	guest/hals/ril/reference-libril/ril.h	/^  int serviceClass;$/;"	m	struct:__anon0bfbaecf9908	typeref:typename:int
+serviceDied	guest/hals/bt/remote/remote_bluetooth.cpp	/^  void serviceDied($/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothDeathRecipient	typeref:typename:void	file:
+serviceType	guest/hals/ril/reference-libril/ril.h	/^  RIL_SsServiceType serviceType;$/;"	m	struct:__anon0bfbaecf9908	typeref:typename:RIL_SsServiceType
+service_id_	host/commands/modem_simulator/modem_service.h	/^  int32_t service_id_;$/;"	m	class:cuttlefish::ModemService	typeref:typename:int32_t
+session	guest/hals/ril/reference-libril/ril.h	/^    int session;            \/\/ Unique session value defined by framework returned in all "resp/;"	m	struct:__anon0bfbaecf0a08	typeref:typename:int
+sessionHandle	guest/hals/ril/reference-libril/ril.h	/^    uint32_t sessionHandle;$/;"	m	struct:__anon0bfbaecfc708	typeref:typename:uint32_t
+session_	guest/hals/camera/vsock_camera_device_3_4.h	/^  sp<VsockCameraDeviceSession> session_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:sp<VsockCameraDeviceSession>
+session_id	host/commands/assemble_cvd/alloc.h	/^  uint32_t session_id;$/;"	m	struct:cuttlefish::IfaceData	typeref:typename:uint32_t
+session_id	host/commands/metrics/proto/cf_log.proto	/^  optional string session_id = 6;$/;"	f	message:cuttlefish.CuttlefishLogEvent	typeref:typename:string
+session_id	host/commands/modem_simulator/sim_service.h	/^    int session_id;$/;"	m	struct:cuttlefish::SimService::LogicalChannel	typeref:typename:int
+session_id	host/libs/config/cuttlefish_config_instance.cpp	/^uint32_t CuttlefishConfig::InstanceSpecific::session_id() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:uint32_t
+session_id_	common/libs/confui/packet_types.h	/^  std::string session_id_;$/;"	m	struct:cuttlefish::confui::packet::ParsedPacket	typeref:typename:std::string
+session_id_	common/libs/confui/protocol_types.h	/^  std::string session_id_;$/;"	m	class:cuttlefish::confui::ConfUiMessage	typeref:typename:std::string
+session_id_	host/libs/allocd/resource_manager.h	/^  std::atomic_uint32_t session_id_ = 0;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:std::atomic_uint32_t
+session_id_	host/libs/allocd/resource_manager.h	/^  uint32_t session_id_{};$/;"	m	class:cuttlefish::Session	typeref:typename:uint32_t
+session_id_	host/libs/confui/session.h	/^  const std::string session_id_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:const std::string
+session_name_	guest/hals/confirmationui/guest_session.h	/^    const std::string session_name_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:const std::string
+sessionid	guest/hals/ril/reference-libril/ril.h	/^    int sessionid;  \/* "sessionid" from TS 27.007 +CGLA command. Should be$/;"	m	struct:__anon0bfbaecf1f08	typeref:typename:int
+set	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    public boolean set(T value) {$/;"	m	class:GceFuture
+set	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    public void set(Exception e) {$/;"	m	class:GceFuture
+set	host/commands/secure_env/tpm_resource_manager.cpp	/^void TpmResourceManager::ObjectSlot::set(ESYS_TR resource) {$/;"	f	class:cuttlefish::TpmResourceManager::ObjectSlot	typeref:typename:void
+setAllowedCarriers	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setAllowedCarriers(int32_t serial, bool allAllowed,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setAllowedCarriersResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setAllowedCarriersResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setAllowedCarriers_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setAllowedCarriers_1_4(int32_t  serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setAllowedNetworkTypesBitmap	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setAllowedNetworkTypesBitmap($/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setAllowedNetworkTypesBitmapResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setAllowedNetworkTypesBitmapResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setBandMode	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setBandMode(int32_t serial, RadioBandMode mode) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setBandModeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setBandModeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setBarringPassword	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setBarringPassword(int32_t serial, const hidl_string& facility,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setBarringPasswordResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setBarringPasswordResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setCallForward	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCallForward(int32_t serial, const CallForwardInfo& callInfo) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCallForwardResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setCallForwardResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setCallWaiting	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCallWaiting(int32_t serial, bool enable, int32_t serviceClass) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCallWaitingResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setCallWaitingResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setCallback	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^Return<Status> VsockCameraProvider::setCallback($/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:Return<Status>
+setCallback	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::setCallback(const ::android::sp<ISapCallback>& sapCallbackParam) {$/;"	f	class:SapImpl	typeref:typename:Return<void>
+setCarrierInfoForImsiEncryption	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCarrierInfoForImsiEncryption(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCarrierInfoForImsiEncryptionResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setCarrierInfoForImsiEncryptionResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setCarrierInfoForImsiEncryption_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCarrierInfoForImsiEncryption_1_6($/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCdmaBroadcastActivation	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCdmaBroadcastActivation(int32_t serial, bool activate) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCdmaBroadcastActivationResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setCdmaBroadcastActivationResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setCdmaBroadcastConfig	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCdmaBroadcastConfig(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCdmaBroadcastConfigResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setCdmaBroadcastConfigResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setCdmaRoamingPreference	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCdmaRoamingPreference(int32_t serial, CdmaRoamingType type) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCdmaRoamingPreferenceResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setCdmaRoamingPreferenceResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setCdmaSubscriptionSource	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCdmaSubscriptionSource(int32_t serial, CdmaSubscriptionSource cdm/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCdmaSubscriptionSourceResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setCdmaSubscriptionSourceResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setCellInfoListRate	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setCellInfoListRate(int32_t serial, int32_t rate) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setCellInfoListRateResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setCellInfoListRateResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setClir	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setClir(int32_t serial, int32_t status) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setClirResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setClirResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setConnectedCallback	guest/hals/camera/vsock_camera_server.cpp	/^void VsockCameraServer::setConnectedCallback(callback_t callback) {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:void
+setDataAllowed	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setDataAllowed(int32_t serial, bool allow) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setDataAllowedResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setDataAllowedResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setDataProfile	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setDataProfile(int32_t serial, const hidl_vec<DataProfileInfo>& prof/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setDataProfileResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setDataProfileResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setDataProfile_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setDataProfile_1_4(int32_t  serial ,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setDataProfile_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setDataProfile_1_5(int32_t  serial ,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setDataThrottling	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setDataThrottling(int32_t serial, V1_6::DataThrottlingAction dataThr/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setDataThrottlingResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setDataThrottlingResponse(int slotId, int responseType,$/;"	f	class:radio_1_6	typeref:typename:int
+setDeviceStateDetailsText	host/frontend/webrtc_operator/assets/js/app.js	/^  setDeviceStateDetailsText(text) {$/;"	m	class:DeviceDetailsUpdater
+setFacilityLockForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setFacilityLockForApp(int32_t serial, const hidl_string& facility,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setFacilityLockForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setFacilityLockForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setGsmBroadcastActivation	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setGsmBroadcastActivation(int32_t serial, bool activate) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setGsmBroadcastActivationResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setGsmBroadcastActivationResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setGsmBroadcastConfig	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setGsmBroadcastConfig(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setGsmBroadcastConfigData	guest/hals/ril/reference-ril/reference-ril.c	/^static void setGsmBroadcastConfigData(int from, int to, int id, int outStrSize, char *outStr) {$/;"	f	typeref:typename:void	file:
+setGsmBroadcastConfigResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setGsmBroadcastConfigResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setHardwareConfiguration	guest/hals/ril/reference-ril/reference-ril.c	/^static void setHardwareConfiguration(int num, RIL_HardwareConfig *cfg)$/;"	f	typeref:typename:void	file:
+setHardwareDetailsText	host/frontend/webrtc_operator/assets/js/app.js	/^  setHardwareDetailsText(text) {$/;"	m	class:DeviceDetailsUpdater
+setHasDied	guest/hals/bt/remote/remote_bluetooth.cpp	/^  void setHasDied(bool has_died) { has_died_ = has_died; }$/;"	f	class:android::hardware::bluetooth::V1_1::remote::BluetoothDeathRecipient	typeref:typename:void	file:
+setIndicationFilter	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setIndicationFilter(int32_t serial, int32_t indicationFilter) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setIndicationFilterResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setIndicationFilterResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setIndicationFilter_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setIndicationFilter_1_2(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setIndicationFilter_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setIndicationFilter_1_5(int32_t \/* serial *\/,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setInitialAttachApn	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setInitialAttachApn(int32_t serial, const DataProfileInfo& dataProfi/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setInitialAttachApnResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setInitialAttachApnResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setInitialAttachApn_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setInitialAttachApn_1_4(int32_t  serial ,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setInitialAttachApn_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setInitialAttachApn_1_5(int32_t  serial ,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setInterfaceState	guest/hals/ril/reference-ril/reference-ril.c	/^static RIL_Errno setInterfaceState(const char* interfaceName,$/;"	f	typeref:typename:RIL_Errno	file:
+setLinkCapacityReportingCriteria	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setLinkCapacityReportingCriteria(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setLinkCapacityReportingCriteriaResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setLinkCapacityReportingCriteriaResponse(int slotId, int responseType, int serial/;"	f	class:radio_1_6	typeref:typename:int
+setLinkCapacityReportingCriteria_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setLinkCapacityReportingCriteria_1_5(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setLocationUpdates	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setLocationUpdates(int32_t serial, bool enable) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setLocationUpdatesResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setLocationUpdatesResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setModemsConfig	guest/hals/ril/reference-libril/ril_config.cpp	/^Return<void> RadioConfigImpl::setModemsConfig(int32_t serial, const V1_1::ModemsConfig& modemsCo/;"	f	class:RadioConfigImpl	typeref:typename:Return<void>
+setModemsConfigResponse	guest/hals/ril/reference-libril/ril_config.cpp	/^int radio_1_6::setModemsConfigResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+setMute	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setMute(int32_t serial, bool enable) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setMuteResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setMuteResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setNetworkSelectionModeAutomatic	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setNetworkSelectionModeAutomatic(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setNetworkSelectionModeAutomaticResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setNetworkSelectionModeAutomaticResponse(int slotId, int responseType, int serial/;"	f	class:radio_1_6	typeref:typename:int
+setNetworkSelectionModeManual	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setNetworkSelectionModeManual(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setNetworkSelectionModeManualResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setNetworkSelectionModeManualResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setNetworkSelectionModeManual_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setNetworkSelectionModeManual_1_5(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setNitzTimeReceived	guest/hals/ril/reference-libril/ril_service.cpp	/^void radio_1_6::setNitzTimeReceived(int slotId, long timeReceived) {$/;"	f	class:radio_1_6	typeref:typename:void
+setNrDualConnectivityState	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setNrDualConnectivityState(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setNrDualConnectivityStateResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setNrDualConnectivityStateResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+setPreferredDataModem	guest/hals/ril/reference-libril/ril_config.cpp	/^Return<void> RadioConfigImpl::setPreferredDataModem(int32_t serial, uint8_t modemId) {$/;"	f	class:RadioConfigImpl	typeref:typename:Return<void>
+setPreferredDataModemResponse	guest/hals/ril/reference-libril/ril_config.cpp	/^int radio_1_6::setPreferredDataModemResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+setPreferredNetworkType	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setPreferredNetworkType(int32_t serial, PreferredNetworkType nwType)/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setPreferredNetworkTypeBitmap	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setPreferredNetworkTypeBitmap($/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setPreferredNetworkTypeBitmapResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setPreferredNetworkTypeBitmapResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setPreferredNetworkTypeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setPreferredNetworkTypeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setPreferredVoicePrivacy	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setPreferredVoicePrivacy(int32_t serial, bool enable) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setPreferredVoicePrivacyResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setPreferredVoicePrivacyResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setRadioCapability	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setRadioCapability(int32_t serial, const RadioCapability& rc) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setRadioCapabilityResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setRadioCapabilityResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setRadioPower	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setRadioPower(int32_t serial, bool on) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setRadioPowerResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setRadioPowerResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setRadioPower_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setRadioPower_1_5(int32_t serial, bool powerOn, bool forEmergencyCal/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setRadioPower_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setRadioPower_1_6(int32_t serial, bool powerOn, bool forEmergencyCal/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setRadioState	guest/hals/ril/reference-ril/reference-ril.c	/^setRadioState(RIL_RadioState newState)$/;"	f	typeref:typename:void	file:
+setRadioTechnology	guest/hals/ril/reference-ril/reference-ril.c	/^setRadioTechnology(ModemInfo *mdm, int newtech)$/;"	f	typeref:typename:void	file:
+setResponseFunctions	guest/hals/ril/reference-libril/ril_config.cpp	/^Return<void> RadioConfigImpl::setResponseFunctions($/;"	f	class:RadioConfigImpl	typeref:typename:Return<void>
+setResponseFunctions	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> OemHookImpl::setResponseFunctions($/;"	f	class:OemHookImpl	typeref:typename:Return<void>
+setResponseFunctions	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setResponseFunctions($/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSignalStrengthReportingCriteria	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSignalStrengthReportingCriteria(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSignalStrengthReportingCriteriaResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setSignalStrengthReportingCriteriaResponse(int slotId, int responseType, int seri/;"	f	class:radio_1_6	typeref:typename:int
+setSignalStrengthReportingCriteria_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSignalStrengthReportingCriteria_1_5(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSimCardPower	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSimCardPower(int32_t serial, bool powerUp) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSimCardPowerResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setSimCardPowerResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setSimCardPower_1_1	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSimCardPower_1_1(int32_t serial, const V1_1::CardPowerState state/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSimCardPower_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSimCardPower_1_6(int32_t serial, const V1_1::CardPowerState state/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSimSlotsMapping	guest/hals/ril/reference-libril/ril_config.cpp	/^Return<void> RadioConfigImpl::setSimSlotsMapping(int32_t serial, const hidl_vec<uint32_t>& slotM/;"	f	class:RadioConfigImpl	typeref:typename:Return<void>
+setSimSlotsMappingResponse	guest/hals/ril/reference-libril/ril_config.cpp	/^int radio_1_6::setSimSlotsMappingResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+setSmscAddress	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSmscAddress(int32_t serial, const hidl_string& smsc) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSmscAddressResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setSmscAddressResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setSuppServiceNotifications	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSuppServiceNotifications(int32_t serial, bool enable) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSuppServiceNotificationsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setSuppServiceNotificationsResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setSystemSelectionChannels	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSystemSelectionChannels(int32_t serial, bool \/* specifyChannels /;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setSystemSelectionChannelsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setSystemSelectionChannelsResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+setSystemSelectionChannels_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setSystemSelectionChannels_1_5(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setTTYMode	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setTTYMode(int32_t serial, TtyMode mode) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setTTYModeResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setTTYModeResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setTerminalRaw	guest/commands/bt_vhci_forwarder/main.cpp	/^int setTerminalRaw(int fd_) {$/;"	f	typeref:typename:int
+setTimespecRelative	guest/hals/ril/reference-ril/atchannel.c	/^static void setTimespecRelative(struct timespec *p_ts, long long msec)$/;"	f	typeref:typename:void	file:
+setTorchMode	guest/hals/camera/vsock_camera_device_3_4.cpp	/^Return<Status> VsockCameraDevice::setTorchMode(TorchMode) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice	typeref:typename:Return<Status>
+setTransferProtocolReq	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::setTransferProtocolReq(int32_t token, SapTransferProtocol transferProtocol/;"	f	class:SapImpl	typeref:typename:Return<void>
+setU32LE	host/frontend/webrtc_operator/assets/js/adb.js	/^function setU32LE(array, offset, x) {$/;"	f
+setUiccSubscription	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setUiccSubscription(int32_t serial, const SelectUiccSub& uiccSub) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setUiccSubscriptionResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setUiccSubscriptionResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setUp	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    public void setUp() throws Exception {$/;"	m	class:RilE2eTests
+setUp	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    public void setUp() throws Exception {$/;"	m	class:WifiE2eTests
+set_Ip_Addr	guest/hals/ril/reference-ril/reference-ril.c	/^static void set_Ip_Addr(const char *addr, const char* radioInterfaceName) {$/;"	f	typeref:typename:void	file:
+set_adb_host_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_adb_host_port(int port) {$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_adb_ip_and_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_adb_ip_and_port($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_ap_kernel_image	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_ap_kernel_image(const std::string& ap_kernel_image) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_ap_rootfs_image	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_ap_rootfs_image(const std::string& ap_rootfs_image) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_assembly_dir	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_assembly_dir(const std::string& assembly_dir) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_audiocontrol_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_audiocontrol_server_port(int audiocontrol_se/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_blank_data_image_mb	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_blank_data_image_mb(int blank_data_image_mb) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_boot_slot	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_boot_slot(const std::string& boot_slot) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_bootconfig_supported	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_bootconfig_supported(bool bootconfig_supported) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_bootloader	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_bootloader(const std::string& bootloader) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_camera_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_camera_server_port($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_config_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_config_server_port(int config_server_port) {$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_confui_host_vsock_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_confui_host_vsock_port($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_console	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_console(bool console) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_cpus	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_cpus(int cpus) { (*dictionary_)[kCpus] = cpus; }$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_crosvm_binary	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_crosvm_binary(const std::string& crosvm_binary) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_cuttlefish_env_path	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_cuttlefish_env_path(const std::string& path) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_data_policy	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_data_policy(const std::string& data_policy) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_deprecated_boot_completed	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_deprecated_boot_completed($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_display_configs	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_display_configs($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_emergency_mode	host/commands/modem_simulator/nvram_config.cpp	/^void NvramConfig::InstanceSpecific::set_emergency_mode(bool mode) {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:void
+set_enable_audio	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_audio(bool enable) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_enable_gnss_grpc_proxy	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_gnss_grpc_proxy($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_enable_host_bluetooth	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_host_bluetooth(bool enable_host_bluetooth) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_enable_metrics	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_metrics(std::string enable_metrics) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_enable_minimal_mode	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_minimal_mode(bool enable_minimal_mode) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_enable_modem_simulator	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_modem_simulator(bool enable_modem_simulator) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_enable_sandbox	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_sandbox(const bool enable_sandbox) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_enable_vehicle_hal_grpc_server	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_vehicle_hal_grpc_server($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_enable_webrtc	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_enable_webrtc(bool enable_webrtc) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_ethernet_tap_name	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_ethernet_tap_name($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_extra_bootconfig_args	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_extra_bootconfig_args($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_extra_kernel_cmdline	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_extra_kernel_cmdline($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_gdb_port	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_gdb_port(int port) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_gnss_file_path	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_gnss_file_path($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_gnss_grpc_proxy_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_gnss_grpc_proxy_server_port($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_gpu_capture_binary	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_gpu_capture_binary(const std::string& name) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_gpu_mode	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_gpu_mode(const std::string& name) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_guest_audit_security	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_guest_audit_security(bool guest_audit_security) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_guest_enforce_security	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_guest_enforce_security(bool guest_enforce_security) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_host_tools_version	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_host_tools_version($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_instance_dir	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_instance_dir($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_keyboard_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_keyboard_server_port(int keyboard_server_por/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_kgdb	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_kgdb(bool kgdb) { (*dictionary_)[kKgdb] = kgdb; }$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_memory_mb	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_memory_mb(int memory_mb) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_metrics_binary	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_metrics_binary(const std::string& metrics_binary) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_mobile_bridge_name	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_mobile_bridge_name($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_mobile_tap_name	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_mobile_tap_name($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_modem_simulator_host_id	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_modem_simulator_host_id($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_modem_simulator_instance_number	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_modem_simulator_instance_number($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_modem_simulator_ports	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_modem_simulator_ports($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_modem_simulator_sim_type	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_modem_simulator_sim_type(int sim_type) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_modem_technoloy	host/commands/modem_simulator/nvram_config.cpp	/^void NvramConfig::InstanceSpecific::set_modem_technoloy(int technoloy) {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:void
+set_network_selection_mode	host/commands/modem_simulator/nvram_config.cpp	/^void NvramConfig::InstanceSpecific::set_network_selection_mode(int mode) {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:void
+set_operator_numeric	host/commands/modem_simulator/nvram_config.cpp	/^void NvramConfig::InstanceSpecific::set_operator_numeric(std::string& operator_numeric) {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:void
+set_preferred_network_mode	host/commands/modem_simulator/nvram_config.cpp	/^void NvramConfig::InstanceSpecific::set_preferred_network_mode(int mode) {$/;"	f	class:cuttlefish::NvramConfig::InstanceSpecific	typeref:typename:void
+set_protected_vm	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_protected_vm(bool protected_vm) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_qemu_binary_dir	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_qemu_binary_dir(const std::string& qemu_binary_dir) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_qemu_vnc_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_qemu_vnc_server_port($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_record_screen	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_record_screen(bool record_screen) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_restart_subprocesses	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_restart_subprocesses(bool restart_subprocesses) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_ril_dns	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_ril_dns(const std::string& ril_dns) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_rootcanal_config_file	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_rootcanal_config_file($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_rootcanal_default_commands_file	host/libs/config/cuttlefish_config_instance.cpp	/^    set_rootcanal_default_commands_file($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_rootcanal_hci_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_rootcanal_hci_port($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_rootcanal_link_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_rootcanal_link_port($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_rootcanal_test_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_rootcanal_test_port($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_run_as_daemon	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_run_as_daemon(bool run_as_daemon) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_seccomp_policy_dir	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_seccomp_policy_dir($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_secure_hals	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_secure_hals(const std::set<std::string>& hals) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_serial_number	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_serial_number($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_session_id	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_session_id($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_setupwizard_mode	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_setupwizard_mode(const std::string& mode) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_sig_server_address	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_sig_server_address(const std::string& addr) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_sig_server_headers_path	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_sig_server_headers_path(const std::string& path) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_sig_server_path	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_sig_server_path(const std::string& path) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_sig_server_port	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_sig_server_port(int port) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_sig_server_secure	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_sig_server_secure(bool secure) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_sig_server_strict	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_sig_server_strict(bool strict) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_smt	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_smt(bool smt) { (*dictionary_)[kSmt] = smt; }$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_start_ap	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_start_ap(bool start) {$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_start_webrtc_signaling_server	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_start_webrtc_signaling_server(bool start) {$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_start_wmediumd	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_start_wmediumd(bool start) {$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_target_arch	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_target_arch(Arch target_arch) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_tombstone_receiver_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_tombstone_receiver_port(int tombstone_receiv/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_touch_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_touch_server_port(int touch_server_port) {$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_tpm_device	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_tpm_device(const std::string& tpm_device) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_use_allocd	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_use_allocd($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_userdata_format	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_userdata_format(const std::string& userdata_format) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_uuid	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_uuid(const std::string& uuid) {$/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_vehicle_hal_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_vehicle_hal_server_port(int vehicle_hal_serv/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_vhost_net	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_vhost_net(bool vhost_net) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_vhost_user_mac80211_hwsim	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_vhost_user_mac80211_hwsim(const std::string& path) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_virtual_disk_paths	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_virtual_disk_paths($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_vm_manager	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_vm_manager(const std::string& name) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_vsock_guest_cid	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_vsock_guest_cid($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_webrtc_assets_dir	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_webrtc_assets_dir($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_webrtc_certs_dir	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_webrtc_certs_dir(const std::string& certs_dir) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_webrtc_device_id	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_webrtc_device_id($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_webrtc_enable_adb_websocket	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_webrtc_enable_adb_websocket(bool enable) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_webrtc_tcp_port_range	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_webrtc_tcp_port_range($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_webrtc_udp_port_range	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_webrtc_udp_port_range($/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_wifi_mac_prefix	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_wifi_mac_prefix($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_wifi_tap_name	host/libs/config/cuttlefish_config_instance.cpp	/^void CuttlefishConfig::MutableInstanceSpecific::set_wifi_tap_name($/;"	f	class:cuttlefish::CuttlefishConfig::MutableInstanceSpecific	typeref:typename:void
+set_wmediumd_api_server_socket	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_wmediumd_api_server_socket(const std::string& path) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+set_wmediumd_config	host/libs/config/cuttlefish_config.cpp	/^void CuttlefishConfig::set_wmediumd_config(const std::string& config) {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:void
+setter_	common/libs/utils/flag_parser.h	/^  std::optional<std::function<bool(const FlagMatch&)>> setter_;$/;"	m	class:cuttlefish::Flag	typeref:typename:std::optional<std::function<bool (const FlagMatch &)>>
+settings	guest/hals/camera/vsock_camera_device_session_3_4.h	/^    common::V1_0::helper::CameraMetadata settings;$/;"	m	struct:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::ReadVsockRequest	typeref:typename:common::V1_0::helper::CameraMetadata
+settings_	guest/hals/camera/vsock_camera_provider_2_7.h	/^  VsockCameraDevice::Settings settings_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider	typeref:typename:VsockCameraDevice::Settings
+settings_	guest/hals/camera/vsock_camera_server.h	/^  VsockCameraDevice::Settings settings_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:VsockCameraDevice::Settings
+settings_buffer_	host/frontend/webrtc/lib/camera_streamer.h	/^  std::string settings_buffer_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:std::string
+settings_mutex_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::mutex settings_mutex_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::mutex
+settings_mutex_	guest/hals/camera/vsock_camera_server.h	/^  std::mutex settings_mutex_;$/;"	m	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:std::mutex
+settings_mutex_	host/frontend/webrtc/lib/camera_streamer.h	/^  std::mutex settings_mutex_;$/;"	m	class:cuttlefish::webrtc_streaming::CameraStreamer	typeref:typename:std::mutex
+setupDataCall	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setupDataCall(int32_t serial, RadioTechnology radioTechnology,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setupDataCallResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::setupDataCallResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+setupDataCall_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setupDataCall_1_2(int32_t serial, V1_2::AccessNetwork accessNetwork,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setupDataCall_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setupDataCall_1_4(int32_t serial ,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setupDataCall_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setupDataCall_1_5(int32_t serial ,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setupDataCall_1_6	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::setupDataCall_1_6(int32_t serial ,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+setupwizard_mode	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::setupwizard_mode() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+severity	common/libs/utils/tee_logging.h	/^  android::base::LogSeverity severity;$/;"	m	struct:cuttlefish::SeverityTarget	typeref:typename:android::base::LogSeverity
+shared_fd_	common/libs/fs/shared_fd_stream.h	/^  SharedFD shared_fd_;$/;"	m	class:cuttlefish::SharedFDStreambuf	typeref:typename:SharedFD
+sharedsecret	guest/hals/keymint/remote/remote_shared_secret.cpp	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	namespace:aidl::android::hardware::security	file:
+sharedsecret	guest/hals/keymint/remote/remote_shared_secret.h	/^namespace aidl::android::hardware::security::sharedsecret {$/;"	n	namespace:aidl::android::hardware::security
+shell	tools/create_base_image.go	/^func shell(cmd string) (string, error) {$/;"	f	package:main	typeref:typename:(string, error)
+shell_command	host/example_custom_actions/custom_action_config.json	/^		"shell_command":"am start -a android.intent.action.VIEW -d https:\/\/www.android.com\/",$/;"	s	object:0
+shell_command	host/frontend/webrtc/lib/streamer.cpp	/^  std::optional<std::string> shell_command;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::ControlPanelButtonDescriptor	typeref:typename:std::optional<std::string>	file:
+shell_command	host/libs/config/custom_actions.h	/^  std::optional<std::string> shell_command;$/;"	m	struct:cuttlefish::CustomActionConfig	typeref:typename:std::optional<std::string>
+shield_color_	host/libs/confui/host_renderer.h	/^  teeui::Color shield_color_;$/;"	m	class:cuttlefish::confui::ConfUiRenderer	typeref:typename:teeui::Color
+shm_len	guest/hals/confirmationui/include/TrustyIpc.h	/^    uint32_t shm_len;$/;"	m	struct:confirmationui_init_req	typeref:typename:uint32_t
+short_name	host/commands/modem_simulator/network_service.h	/^    std::string short_name;$/;"	m	struct:cuttlefish::NetworkService::NetworkOperator	typeref:typename:std::string
+showAdbConnected	host/frontend/webrtc_operator/assets/js/app.js	/^  #showAdbConnected() {$/;"	m	class:DeviceControlApp
+showAdbError	host/frontend/webrtc_operator/assets/js/app.js	/^  #showAdbError() {$/;"	m	class:DeviceControlApp
+showDeviceUI	host/frontend/webrtc_operator/assets/js/app.js	/^  #showDeviceUI() {$/;"	m	class:DeviceControlApp
+showError	host/frontend/webrtc_operator/assets/js/app.js	/^function showError(msg) {$/;"	f
+showHideModal	host/frontend/webrtc_operator/assets/js/controls.js	/^  function showHideModal(show) {$/;"	f	function:createModalButton
+showWarning	host/frontend/webrtc_operator/assets/js/app.js	/^function showWarning(msg) {$/;"	f
+showWebrtcError	host/frontend/webrtc_operator/assets/js/app.js	/^  #showWebrtcError() {$/;"	m	class:DeviceControlApp
+shutdown_	host/frontend/webrtc/adb_handler.h	/^  SharedFD shutdown_;$/;"	m	struct:cuttlefish::webrtc_streaming::AdbHandler	typeref:typename:SharedFD
+shutdown_	host/frontend/webrtc/bluetooth_handler.h	/^  SharedFD shutdown_;$/;"	m	struct:cuttlefish::webrtc_streaming::BluetoothHandler	typeref:typename:SharedFD
+shutdown_socket_	host/libs/allocd/resource_manager.h	/^  cuttlefish::SharedFD shutdown_socket_;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:cuttlefish::SharedFD
+si	guest/hals/ril/reference-libril/ril.h	/^  char si;$/;"	m	struct:__anon0bfbaecf8308	typeref:typename:char
+sig_server_address	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::sig_server_address() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+sig_server_headers_path	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::sig_server_headers_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+sig_server_path	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::sig_server_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+sig_server_port	host/libs/config/cuttlefish_config.cpp	/^int CuttlefishConfig::sig_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:int
+sig_server_secure	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::sig_server_secure() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+sig_server_strict	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::sig_server_strict() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+sign	host/libs/confui/sign.cc	/^std::optional<std::vector<std::uint8_t>> sign($/;"	f	namespace:cuttlefish::confui	typeref:typename:std::optional<std::vector<std::uint8_t>>
+sign_	common/libs/confui/protocol_types.h	/^  std::vector<std::uint8_t> sign_;  \/\/ signed format$/;"	m	class:cuttlefish::confui::ConfUiCliResponseMessage	typeref:typename:std::vector<std::uint8_t>
+signal	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_SignalInfoRecord            signal;$/;"	m	union:__anon0bfbaecf8908::__anon0bfbaecf8a0a	typeref:typename:RIL_CDMA_SignalInfoRecord
+signal	guest/hals/ril/reference-libril/ril.h	/^  char signal;       \/* as defined 3.7.5.5-3, 3.7.5.5-4 or 3.7.5.5-5 *\/$/;"	m	struct:__anon0bfbaecf1008	typeref:typename:char
+signalInfoRecord	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_SignalInfoRecord signalInfoRecord;$/;"	m	struct:__anon0bfbaecf4208	typeref:typename:RIL_CDMA_SignalInfoRecord
+signalInfoRecord	guest/hals/ril/reference-libril/ril.h	/^    RIL_CDMA_SignalInfoRecord signalInfoRecord;$/;"	m	struct:__anon0bfbaecf4308	typeref:typename:RIL_CDMA_SignalInfoRecord
+signalMeasurement	guest/hals/ril/reference-libril/ril.h	/^    SignalMeasurementType signalMeasurement;$/;"	m	struct:__anon0bfbaecf5608	typeref:typename:SignalMeasurementType
+signalNoiseRatio	guest/hals/ril/reference-libril/ril.h	/^    int signalNoiseRatio; \/* Valid values are 0-8.  8 is the highest signal to noise ratio. *\/$/;"	m	struct:__anon0bfbaecf4a08	typeref:typename:int
+signalStrength	guest/hals/ril/reference-libril/ril.h	/^    int signalStrength;  \/* Valid values are (0-31, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:__anon0bfbaecf4608	typeref:typename:int
+signalStrength	guest/hals/ril/reference-libril/ril.h	/^    int signalStrength;  \/* Valid values are (0-31, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:__anon0bfbaecf4708	typeref:typename:int
+signalStrength	guest/hals/ril/reference-libril/ril.h	/^    int signalStrength;  \/* Valid values are (0-31, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:__anon0bfbaecf4808	typeref:typename:int
+signalStrength	guest/hals/ril/reference-libril/ril.h	/^    int signalStrength;  \/* Valid values are (0-31, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:__anon0bfbaecf4b08	typeref:typename:int
+signalStrength	guest/hals/ril/reference-libril/ril.h	/^    int signalStrength;  \/* Valid values are (0-31, 99) as defined in TS 27.007 8.5 *\/$/;"	m	struct:__anon0bfbaecf4c08	typeref:typename:int
+signalStrength	guest/hals/ril/reference-libril/ril.h	/^  RIL_NR_SignalStrength       signalStrength;$/;"	m	struct:__anon0bfbaecf6a08	typeref:typename:RIL_NR_SignalStrength
+signalStrengthCdma	guest/hals/ril/reference-libril/ril.h	/^  RIL_CDMA_SignalStrength   signalStrengthCdma;$/;"	m	struct:__anon0bfbaecf6608	typeref:typename:RIL_CDMA_SignalStrength
+signalStrengthEvdo	guest/hals/ril/reference-libril/ril.h	/^  RIL_EVDO_SignalStrength   signalStrengthEvdo;$/;"	m	struct:__anon0bfbaecf6608	typeref:typename:RIL_EVDO_SignalStrength
+signalStrengthGsm	guest/hals/ril/reference-libril/ril.h	/^  RIL_GSM_SignalStrength_v12 signalStrengthGsm;$/;"	m	struct:__anon0bfbaecf6308	typeref:typename:RIL_GSM_SignalStrength_v12
+signalStrengthGsm	guest/hals/ril/reference-libril/ril.h	/^  RIL_GW_SignalStrength signalStrengthGsm;$/;"	m	struct:__anon0bfbaecf6208	typeref:typename:RIL_GW_SignalStrength
+signalStrengthLte	guest/hals/ril/reference-libril/ril.h	/^  RIL_LTE_SignalStrength_v8  signalStrengthLte;$/;"	m	struct:__anon0bfbaecf6708	typeref:typename:RIL_LTE_SignalStrength_v8
+signalStrengthLte	guest/hals/ril/reference-libril/ril.h	/^  RIL_LTE_SignalStrength_v8  signalStrengthLte;$/;"	m	struct:__anon0bfbaecf6808	typeref:typename:RIL_LTE_SignalStrength_v8
+signalStrengthTdscdma	guest/hals/ril/reference-libril/ril.h	/^  RIL_TD_SCDMA_SignalStrength signalStrengthTdscdma;$/;"	m	struct:__anon0bfbaecf6908	typeref:typename:RIL_TD_SCDMA_SignalStrength
+signalStrengthWcdma	guest/hals/ril/reference-libril/ril.h	/^  RIL_SignalStrengthWcdma signalStrengthWcdma;$/;"	m	struct:__anon0bfbaecf6408	typeref:typename:RIL_SignalStrengthWcdma
+signalStrengthWcdma	guest/hals/ril/reference-libril/ril.h	/^  RIL_SignalStrengthWcdma signalStrengthWcdma;$/;"	m	struct:__anon0bfbaecf6508	typeref:typename:RIL_SignalStrengthWcdma
+signalType	guest/hals/ril/reference-libril/ril.h	/^  char signalType;   \/* as defined 3.7.5.5-1 *\/$/;"	m	struct:__anon0bfbaecf1008	typeref:typename:char
+signal_strength_	host/commands/modem_simulator/network_service.h	/^  SignalStrength signal_strength_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:SignalStrength
+signal_thread_	host/frontend/webrtc/lib/streamer.cpp	/^  std::unique_ptr<rtc::Thread> signal_thread_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::unique_ptr<rtc::Thread>	file:
+signature	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint8_t signature[8];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptHeader	typeref:typename:std::uint8_t[8]	file:
+signed_confirmation_	host/libs/confui/session.h	/^  std::vector<std::uint8_t> signed_confirmation_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::vector<std::uint8_t>
+signing_key_fn_	host/commands/secure_env/hmac_serializable.h	/^  std::function<TpmObjectSlot(TpmResourceManager&)> signing_key_fn_;$/;"	m	class:cuttlefish::HmacSerializable	typeref:typename:std::function<TpmObjectSlot (TpmResourceManager &)>
+sim	guest/hals/ril/reference-libril/ril.h	/^     RIL_HardwareConfig_Sim sim;$/;"	m	union:__anon0bfbaecf9308::__anon0bfbaecf940a	typeref:typename:RIL_HardwareConfig_Sim
+simRefreshInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::simRefreshInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+simResponse	guest/hals/ril/reference-libril/ril.h	/^    char *simResponse;  \/* In hex string format ([a-fA-F0-9]*), except for SIM_AUTHENTICATION$/;"	m	struct:__anon0bfbaecf2008	typeref:typename:char *
+simSlotsStatusChanged	guest/hals/ril/reference-libril/ril_config.cpp	/^int radio_1_6::simSlotsStatusChanged(int slotId, int indicationType, int token, RIL_Errno e,$/;"	f	class:radio_1_6	typeref:typename:int
+simSmsStorageFullInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::simSmsStorageFullInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+simStatusChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::simStatusChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+sim_file_system_	host/commands/modem_simulator/sim_service.h	/^  SimFileSystem sim_file_system_;$/;"	m	class:cuttlefish::SimService	typeref:typename:SimFileSystem
+sim_service_	host/commands/modem_simulator/call_service.h	/^  SimService* sim_service_;$/;"	m	class:cuttlefish::CallService	typeref:typename:SimService *
+sim_service_	host/commands/modem_simulator/modem_simulator.h	/^  SimService* sim_service_{nullptr};$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:SimService *
+sim_service_	host/commands/modem_simulator/network_service.h	/^  SimService* sim_service_ = nullptr;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:SimService *
+sim_service_	host/commands/modem_simulator/sms_service.h	/^  SimService* sim_service_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:SimService *
+sim_service_	host/commands/modem_simulator/stk_service.h	/^  SimService* sim_service_;$/;"	m	class:cuttlefish::StkService	typeref:typename:SimService *
+sim_status_	host/commands/modem_simulator/sim_service.h	/^  SimStatus sim_status_;$/;"	m	class:cuttlefish::SimService	typeref:typename:SimStatus
+sim_type	host/commands/modem_simulator/nvram_config.cpp	/^int NvramConfig::sim_type() const {$/;"	f	class:cuttlefish::NvramConfig	typeref:typename:int
+sim_type_	host/commands/modem_simulator/nvram_config.h	/^  int sim_type_;$/;"	m	class:cuttlefish::NvramConfig	typeref:typename:int
+simple_match	tools/tombstone_to_line.py	/^def simple_match(line, info, indent, out_file):$/;"	f
+single_element_emplace	host/commands/run_cvd/launch.cc	/^std::vector<T> single_element_emplace(T&& element) {$/;"	f	namespace:cuttlefish::__anonf13e85620111	typeref:typename:std::vector<T>
+sink_	host/frontend/webrtc/lib/client_handler.cpp	/^  rtc::VideoSinkInterface<webrtc::VideoFrame> *sink_ = nullptr;$/;"	m	class:cuttlefish::webrtc_streaming::ClientVideoTrackImpl	typeref:typename:rtc::VideoSinkInterface<webrtc::VideoFrame> *	file:
+sinks_	host/frontend/webrtc/lib/audio_track_source_impl.h	/^  std::set<webrtc::AudioTrackSinkInterface*> sinks_;$/;"	m	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:std::set<webrtc::AudioTrackSinkInterface * >
+sinks_mutex_	host/frontend/webrtc/lib/audio_track_source_impl.h	/^  std::mutex sinks_mutex_;$/;"	m	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:std::mutex
+size	host/commands/fetcher/build_api.h	/^  size_t size;$/;"	m	class:cuttlefish::Artifact	typeref:typename:size_t
+size	host/frontend/webrtc/connection_observer.cpp	/^  std::size_t size() const override { return buffer_.size() * sizeof(T); }$/;"	f	struct:cuttlefish::InputEventBufferImpl	typeref:typename:std::size_t	file:
+size	host/frontend/webrtc/lib/ws_connection.cpp	/^    size_t size() const { return buffer_.size() - LWS_PRE; }$/;"	f	struct:WsConnectionImpl::WsBuffer	typeref:typename:size_t	file:
+size	host/libs/audio_connector/shm_layout.h	/^  Le32 size;  \/\/ unused$/;"	m	struct:cuttlefish::virtio_snd_query_info	typeref:typename:Le32
+size	host/libs/confui/sign_utils.h	/^  size_t size() const { return size_; }$/;"	f	class:cuttlefish::confui::support::ByteBufferProxy	typeref:typename:size_t
+size	host/libs/image_aggregator/image_aggregator.cc	/^  Be64 size;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be64	file:
+size	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint64_t size;$/;"	m	struct:cuttlefish::__anon02806fd80111::PartitionInfo	typeref:typename:std::uint64_t	file:
+size_	host/libs/confui/sign_utils.h	/^  size_t size_;$/;"	m	class:cuttlefish::confui::support::ByteBufferProxy	typeref:typename:size_t
+skipNextComma	guest/hals/ril/reference-ril/at_tok.c	/^void skipNextComma(char **p_cur)$/;"	f	typeref:typename:void
+skipWhiteSpace	guest/hals/ril/reference-ril/at_tok.c	/^static void skipWhiteSpace(char **p_cur)$/;"	f	typeref:typename:void	file:
+sleepMsec	guest/hals/ril/reference-ril/atchannel.c	/^static void sleepMsec(long long msec)$/;"	f	typeref:typename:void	file:
+sleep_mode_time_ms	guest/hals/ril/reference-libril/ril.h	/^  uint32_t sleep_mode_time_ms;$/;"	m	struct:__anon0bfbaecf9f08	typeref:typename:uint32_t
+slot	host/frontend/webrtc/connection_observer.cpp	/^  int32_t slot;$/;"	m	struct:cuttlefish::multitouch_slot	typeref:typename:int32_t	file:
+slotId	guest/hals/ril/reference-libril/sap_service.cpp	/^    int32_t slotId;$/;"	m	struct:SapImpl	typeref:typename:int32_t	file:
+slotState	guest/hals/ril/reference-libril/ril.h	/^    RIL_SlotState slotState;$/;"	m	struct:__anon0bfbaecfb908	typeref:typename:RIL_SlotState
+sms_service_	host/commands/modem_simulator/modem_simulator.h	/^  SmsService* sms_service_{nullptr};$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:SmsService *
+sms_service_center_address_	host/commands/modem_simulator/sms_service.h	/^  SmsServiceCenterAddress sms_service_center_address_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:SmsServiceCenterAddress
+sms_status_on_sim_	host/commands/modem_simulator/sms_service.h	/^  SmsMessage::SmsStatus sms_status_on_sim_;$/;"	m	class:cuttlefish::SmsService	typeref:typename:SmsMessage::SmsStatus
+smsc	guest/hals/ril/reference-libril/ril.h	/^    char * smsc;    \/* SMSC address in GSM BCD format prefixed by a length byte$/;"	m	struct:__anon0bfbaecf1b08	typeref:typename:char *
+smt	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::smt() const { return (*dictionary_)[kSmt].asBool(); }$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+snapshots_offset	host/libs/image_aggregator/image_aggregator.cc	/^  Be64 snapshots_offset;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be64	file:
+snr_	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  uint8_t snr_;$/;"	m	class:cuttlefish::WmediumdMessageSetSnr	typeref:typename:uint8_t
+sockaddr_vm	common/libs/fs/vm_sockets.h	/^struct sockaddr_vm {$/;"	s
+socket	guest/hals/ril/reference-libril/RilSapSocket.h	/^            RilSapSocket* socket;$/;"	m	struct:RilSapSocket::RilSapSocketList	typeref:typename:RilSapSocket *
+socketErrorIsRecoverable	common/frontend/socket_vsock_proxy/main.cpp	/^bool socketErrorIsRecoverable(int error) {$/;"	f	namespace:__anon913036200111	typeref:typename:bool
+socketId	guest/hals/ril/reference-libril/RilSapSocket.h	/^        RIL_SOCKET_ID socketId;$/;"	m	struct:RilSapSocket::SapSocketRequest	typeref:typename:RIL_SOCKET_ID
+socket_	common/frontend/socket_vsock_proxy/main.cpp	/^  cuttlefish::SharedFD socket_;$/;"	m	class:__anon913036200111::SocketReceiver	typeref:typename:cuttlefish::SharedFD	file:
+socket_	common/frontend/socket_vsock_proxy/main.cpp	/^  cuttlefish::SharedFD socket_;$/;"	m	class:__anon913036200111::SocketSender	typeref:typename:cuttlefish::SharedFD	file:
+socket_	common/libs/utils/unix_sockets.h	/^  SharedFD socket_;$/;"	m	class:cuttlefish::UnixMessageSocket	typeref:typename:SharedFD
+socket_	host/commands/run_cvd/launch.cc	/^  SharedFD socket_;$/;"	m	class:cuttlefish::ConfigServer	typeref:typename:SharedFD	file:
+socket_	host/commands/run_cvd/launch.cc	/^  SharedFD socket_;$/;"	m	class:cuttlefish::TombstoneReceiver	typeref:typename:SharedFD	file:
+socket_flag_cv_	host/libs/confui/host_server.h	/^  std::condition_variable socket_flag_cv_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:std::condition_variable
+socket_flag_mtx_	host/libs/confui/host_server.h	/^  std::mutex socket_flag_mtx_;$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:std::mutex
+socket_id	guest/hals/ril/reference-libril/ril_ex.h	/^    RIL_SOCKET_ID socket_id;$/;"	m	struct:SocketListenParam	typeref:typename:RIL_SOCKET_ID
+socket_id	guest/hals/ril/reference-libril/ril_internal.h	/^    RIL_SOCKET_ID socket_id;$/;"	m	struct:android::RequestInfo	typeref:typename:RIL_SOCKET_ID
+sockets_	host/commands/run_cvd/launch_modem.cpp	/^  std::vector<SharedFD> sockets_;$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:std::vector<SharedFD>	file:
+sockets_	host/commands/run_cvd/launch_streamer.cpp	/^  StreamerSockets& sockets_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:StreamerSockets &	file:
+source	host/frontend/webrtc/lib/streamer.cpp	/^  rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> source;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::DisplayDescriptor	typeref:typename:rtc::scoped_refptr<webrtc::VideoTrackSourceInterface>	file:
+source	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^rtc::VideoSourceInterface<webrtc::VideoFrame> *VideoTrackSourceImpl::source() {$/;"	f	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:rtc::VideoSourceInterface<webrtc::VideoFrame> *
+source	host/libs/config/fetcher_config.h	/^  FileSource source;$/;"	m	struct:cuttlefish::CvdFile	typeref:typename:FileSource
+source	host/libs/image_aggregator/image_aggregator.cc	/^  MultipleImagePartition source;$/;"	m	struct:cuttlefish::__anon02806fd80111::PartitionInfo	typeref:typename:MultipleImagePartition	file:
+sourceAddress	guest/hals/ril/reference-libril/ril.h	/^    char sourceAddress[MAX_INADDR_LEN];      \/* Source address in network-byte order *\/$/;"	m	struct:__anon0bfbaecfc508	typeref:typename:char[]
+sourcePort	guest/hals/ril/reference-libril/ril.h	/^    int sourcePort;                          \/* Source port if applicable, or 0x7FFFFFFF;$/;"	m	struct:__anon0bfbaecfc508	typeref:typename:int
+source_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::shared_ptr<webrtc::VideoTrackSourceInterface> source_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:std::shared_ptr<webrtc::VideoTrackSourceInterface>	file:
+source_extension	host/commands/metrics/proto/clientanalytics.proto	/^  optional bytes source_extension = 6;$/;"	f	message:LogEvent	typeref:typename:bytes
+source_image_family	tools/create_base_image.go	/^var source_image_family string$/;"	v	package:main	typeref:typename:string
+source_image_project	tools/create_base_image.go	/^var source_image_project string$/;"	v	package:main	typeref:typename:string
+source_match	tools/tombstone_to_line.py	/^def source_match(line, info, indent, out_file):$/;"	f
+sources	guest/hals/ril/reference-libril/ril.h	/^    RIL_EmergencyNumberSource    sources;    \/* The bitfield of @1.4::EmergencyNumberSource(s).$/;"	m	struct:__anon0bfbaecfb708	typeref:typename:RIL_EmergencyNumberSource
+sp_response	guest/hals/ril/reference-ril/atchannel.c	/^static ATResponse *sp_response = NULL;$/;"	v	typeref:typename:ATResponse *	file:
+sparse_size	common/libs/utils/files.h	/^  off_t sparse_size;$/;"	m	struct:cuttlefish::FileSizes	typeref:typename:off_t
+specifiers	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioAccessSpecifier specifiers[MAX_RADIO_ACCESS_NETWORKS]; \/\/ Radio access networks$/;"	m	struct:__anon0bfbaecfad08	typeref:typename:RIL_RadioAccessSpecifier[]
+specifiers	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioAccessSpecifier_v1_5    specifiers[RIL_RADIO_ACCESS_SPECIFIER_MAX_SIZE];  \/\/ Radi/;"	m	struct:__anon0bfbaecfb108	typeref:typename:RIL_RadioAccessSpecifier_v1_5[]
+specifiers	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioAccessSpecifier_v1_5 specifiers[RIL_RADIO_ACCESS_SPECIFIER_MAX_SIZE];$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:RIL_RadioAccessSpecifier_v1_5[]
+specifiers_length	guest/hals/ril/reference-libril/ril.h	/^    uint32_t                         specifiers_length;  \/\/ Length of specifiers$/;"	m	struct:__anon0bfbaecfb108	typeref:typename:uint32_t
+specifiers_length	guest/hals/ril/reference-libril/ril.h	/^    uint32_t specifiers_length;                                     \/\/ Length of specifiers$/;"	m	struct:__anon0bfbaecfad08	typeref:typename:uint32_t
+specifiers_length	guest/hals/ril/reference-libril/ril.h	/^    uint32_t specifiers_length;  \/\/ Length of specifiers$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:uint32_t
+specifyChannels	guest/hals/ril/reference-libril/ril.h	/^    int                              specifyChannels;$/;"	m	struct:__anon0bfbaecfb108	typeref:typename:int
+split	guest/hals/ril/reference-libril/ril_service.cpp	/^hidl_vec<hidl_string> split(hidl_string str) {$/;"	f	typeref:typename:hidl_vec<hidl_string>
+srvccStateNotifyInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::srvccStateNotifyInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+ssInfo	guest/hals/ril/reference-libril/ril.h	/^    int ssInfo[SS_INFO_MAX]; \/* This is the response data for most of the SS GET\/SET$/;"	m	union:__anon0bfbaecf9908::__anon0bfbaecf9a0a	typeref:typename:int[]
+ssRsrp	guest/hals/ril/reference-libril/ril.h	/^  int32_t ssRsrp;   \/* SS reference signal received power, multiplied by -1.$/;"	m	struct:__anon0bfbaecf4e08	typeref:typename:int32_t
+ssRsrq	guest/hals/ril/reference-libril/ril.h	/^  int32_t ssRsrq;   \/* SS reference signal received quality, multiplied by -1.$/;"	m	struct:__anon0bfbaecf4e08	typeref:typename:int32_t
+ssSinr	guest/hals/ril/reference-libril/ril.h	/^  int32_t ssSinr;   \/* SS signal-to-noise and interference ratio.$/;"	m	struct:__anon0bfbaecf4e08	typeref:typename:int32_t
+stage	host/commands/kernel_log_monitor/kernel_log_server.cc	/^  std::string_view stage;  \/\/ substring in the log identifying the stage$/;"	m	struct:__anonfa7764770111::__anonfa7764770308	typeref:typename:std::string_view	file:
+start	guest/hals/camera/vsock_camera_server.cpp	/^void VsockCameraServer::start(unsigned int port, unsigned int cid) {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:void
+start	guest/hals/camera/vsock_frame_provider.cpp	/^void VsockFrameProvider::start($/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:void
+start	host/frontend/webrtc_operator/assets/js/app.js	/^  start() {$/;"	m	class:DeviceControlApp
+start	host/frontend/webrtc_operator/assets/js/index.js	/^  start() {$/;"	m	class:DeviceListApp
+startDtmf	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::startDtmf(int32_t serial, const hidl_string& s) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+startDtmfResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::startDtmfResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+startHandover	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::startHandover(int32_t serial, int32_t callId) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+startHandoverResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::startHandoverResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+startKeepalive	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::startKeepalive(int32_t serial, const V1_1::KeepaliveRequest& keepali/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+startKeepaliveResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::startKeepaliveResponse(int slotId, int responseType, int serial, RIL_Errno e,$/;"	f	class:radio_1_6	typeref:typename:int
+startLceService	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::startLceService(int32_t serial, int32_t reportInterval, bool pullMod/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+startLceServiceResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::startLceServiceResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+startMouseTracking	host/frontend/webrtc_operator/assets/js/app.js	/^  #startMouseTracking() {$/;"	m	class:DeviceControlApp
+startNetworkScan	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::startNetworkScan(int32_t serial, const V1_1::NetworkScanRequest& req/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+startNetworkScanResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::startNetworkScanResponse(int slotId, int responseType, int serial, RIL_Errno e,$/;"	f	class:radio_1_6	typeref:typename:int
+startNetworkScan_1_2	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::startNetworkScan_1_2(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+startNetworkScan_1_4	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::startNetworkScan_1_4(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+startNetworkScan_1_5	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::startNetworkScan_1_5(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+startPolling	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #startPolling() {$/;"	m	class:PollingConnector
+startRequest	guest/hals/ril/reference-libril/ril_internal.h	/^    #define startRequest /;"	d
+startResponse	guest/hals/ril/reference-libril/ril_internal.h	/^    #define startResponse /;"	d
+startSensorInjection	guest/commands/sensor_injection/main.cpp	/^sp<ISensors> startSensorInjection() {$/;"	f	typeref:typename:sp<ISensors>
+start_ap	host/libs/config/cuttlefish_config_instance.cpp	/^bool CuttlefishConfig::InstanceSpecific::start_ap() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:bool
+start_id	host/libs/audio_connector/commands.h	/^  uint32_t start_id() const { return start_id_; }$/;"	f	class:cuttlefish::InfoCommand	typeref:typename:uint32_t
+start_id	host/libs/audio_connector/shm_layout.h	/^  Le32 start_id;$/;"	m	struct:cuttlefish::virtio_snd_query_info	typeref:typename:Le32
+start_id_	host/libs/audio_connector/commands.h	/^  const uint32_t start_id_;$/;"	m	class:cuttlefish::InfoCommand	typeref:typename:const uint32_t
+start_time_	host/libs/confui/session.h	/^  std::unique_ptr<TimePoint> start_time_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::unique_ptr<TimePoint>
+start_webrtc_sig_server	host/libs/config/cuttlefish_config_instance.cpp	/^bool CuttlefishConfig::InstanceSpecific::start_webrtc_sig_server() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:bool
+start_wmediumd	host/libs/config/cuttlefish_config_instance.cpp	/^bool CuttlefishConfig::InstanceSpecific::start_wmediumd() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:bool
+started_	common/libs/utils/subprocess.h	/^  bool started_ = false;$/;"	m	class:cuttlefish::Subprocess	typeref:typename:bool
+state	guest/hals/ril/reference-libril/ril.h	/^    RIL_CallState   state;$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:RIL_CallState
+state	guest/hals/ril/reference-libril/ril.h	/^  RIL_HardwareConfig_State state;$/;"	m	struct:__anon0bfbaecf9308	typeref:typename:RIL_HardwareConfig_State
+state	guest/hals/ril/reference-ril/reference-ril.c	/^    enum PDPState state;$/;"	m	struct:PDPInfo	typeref:enum:PDPState	file:
+state	host/commands/modem_simulator/data_service.h	/^    CidState state;$/;"	m	struct:cuttlefish::DataService::PDPContext	typeref:typename:CidState
+state	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^AudioTrackSourceImpl::SourceState AudioTrackSourceImpl::state() const {$/;"	f	class:cuttlefish::webrtc_streaming::AudioTrackSourceImpl	typeref:typename:AudioTrackSourceImpl::SourceState
+state_	host/commands/run_cvd/boot_state_machine.cc	/^  int state_;$/;"	m	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	typeref:typename:int	file:
+state_	host/frontend/webrtc/lib/client_handler.h	/^  State state_ = State::kNew;$/;"	m	class:cuttlefish::webrtc_streaming::ClientHandler	typeref:typename:State
+state_	host/libs/confui/session.h	/^  std::atomic<MainLoopState> state_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::atomic<MainLoopState>
+state_	host/libs/wayland/wayland_surface.h	/^  State state_;$/;"	m	class:wayland::Surface	typeref:typename:State
+state_mutex_	host/libs/wayland/wayland_surface.h	/^  std::mutex state_mutex_;$/;"	m	class:wayland::Surface	typeref:typename:std::mutex
+static_mount_	host/libs/websocket/websocket_server.h	/^  struct lws_http_mount static_mount_;$/;"	m	class:cuttlefish::WebSocketServer	typeref:struct:lws_http_mount
+status	guest/hals/ril/reference-libril/ril.h	/^    RIL_ScanStatus status;              \/\/ The status of the scan$/;"	m	struct:__anon0bfbaecfb308	typeref:typename:RIL_ScanStatus
+status	guest/hals/ril/reference-libril/ril.h	/^    int             status;     \/* A RIL_DataCallFailCause, 0 which is PDP_FAIL_NONE if no erro/;"	m	struct:__anon0bfbaecf1308	typeref:typename:int
+status	guest/hals/ril/reference-libril/ril.h	/^    int             status;     \/* A RIL_DataCallFailCause, 0 which is PDP_FAIL_NONE if no erro/;"	m	struct:__anon0bfbaecf1408	typeref:typename:int
+status	guest/hals/ril/reference-libril/ril.h	/^    int             status;     \/* A RIL_DataCallFailCause, 0 which is PDP_FAIL_NONE if no erro/;"	m	struct:__anon0bfbaecf1508	typeref:typename:int
+status	guest/hals/ril/reference-libril/ril.h	/^    int             status;     \/* A RIL_DataCallFailCause, 0 which is PDP_FAIL_NONE if no erro/;"	m	struct:__anon0bfbaecf1608	typeref:typename:int
+status	guest/hals/ril/reference-libril/ril.h	/^    int             status;     \/*$/;"	m	struct:__anon0bfbaecf2108	typeref:typename:int
+status	guest/hals/ril/reference-libril/ril.h	/^    int status;             \/\/ Return status and an input parameter for RC_PHASE_FINISH$/;"	m	struct:__anon0bfbaecf0a08	typeref:typename:int
+status	guest/hals/ril/reference-libril/ril.h	/^    int status;     \/* Status of message.  See TS 27.005 3.1, "<stat>": *\/$/;"	m	struct:__anon0bfbaecf1b08	typeref:typename:int
+status	host/commands/health/health.cpp	/^int status() {$/;"	f	typeref:typename:int
+status	host/commands/modem_simulator/sms_service.h	/^    SmsStatus status;$/;"	m	struct:cuttlefish::SmsService::SmsMessage	typeref:typename:SmsStatus
+status	host/commands/modem_simulator/sup_service.h	/^    CallForwardInfoStatus status;$/;"	m	struct:cuttlefish::SupService::CallForwardInfo	typeref:typename:CallForwardInfoStatus
+status	host/commands/modem_simulator/sup_service.h	/^    ClirStatus status;$/;"	m	struct:cuttlefish::SupService::ClirStatusInfo	typeref:typename:ClirStatus
+status	host/libs/audio_connector/commands.h	/^  AudioStatus status() const { return status_; }$/;"	f	class:cuttlefish::AudioCommand	typeref:typename:AudioStatus
+status	host/libs/audio_connector/shm_layout.h	/^  Le32 status;$/;"	m	struct:cuttlefish::virtio_snd_pcm_status	typeref:typename:Le32
+status	host/libs/audio_connector/shm_layout.h	/^  virtio_snd_pcm_status status;$/;"	m	struct:cuttlefish::IoStatusMsg	typeref:typename:virtio_snd_pcm_status
+status	host/libs/config/mbr.h	/^  std::uint8_t status;$/;"	m	struct:MbrPartitionEntry	typeref:typename:std::uint8_t
+status-div	host/frontend/webrtc_operator/assets/client.html	/^          <div id='status-div'>$/;"	I
+status-message	host/frontend/webrtc_operator/assets/client.html	/^            <h3 id='status-message' class='connecting'>Connecting to device<\/h3>$/;"	I
+status_	host/libs/audio_connector/commands.h	/^  AudioStatus status_ = AudioStatus::NOT_SET;$/;"	m	class:cuttlefish::AudioCommand	typeref:typename:AudioStatus
+status_message_	common/libs/confui/protocol_types.h	/^  std::string status_message_;$/;"	m	class:cuttlefish::confui::ConfUiAckMessage	typeref:typename:std::string
+status_sent_	host/libs/audio_connector/buffers.h	/^  bool status_sent_ = false;$/;"	m	class:cuttlefish::ShmBuffer	typeref:typename:bool
+stereo_playout_enabled_	host/frontend/webrtc/lib/audio_device.h	/^  bool stereo_playout_enabled_ = true;$/;"	m	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+stereo_recording_enabled_	host/frontend/webrtc/lib/audio_device.h	/^  bool stereo_recording_enabled_ = true;$/;"	m	class:cuttlefish::webrtc_streaming::CfAudioDeviceModule	typeref:typename:bool
+stkCallControlAlphaNotifyInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stkCallControlAlphaNotifyInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+stkCallSetupInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stkCallSetupInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+stkEventNotifyInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stkEventNotifyInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+stkProactiveCommandInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stkProactiveCommandInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+stkSessionEndInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stkSessionEndInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+stop	guest/hals/camera/vsock_camera_server.cpp	/^void VsockCameraServer::stop() {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer	typeref:typename:void
+stop	guest/hals/camera/vsock_frame_provider.cpp	/^void VsockFrameProvider::stop() {$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:void
+stop	host/commands/run_cvd/process_monitor.cc	/^  bool stop;$/;"	m	struct:cuttlefish::ParentToChildMessage	typeref:typename:bool	file:
+stopDtmf	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::stopDtmf(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+stopDtmfResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stopDtmfResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+stopKeepalive	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::stopKeepalive(int32_t serial, int32_t sessionHandle) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+stopKeepaliveResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stopKeepaliveResponse(int slotId, int responseType, int serial, RIL_Errno e,$/;"	f	class:radio_1_6	typeref:typename:int
+stopLceService	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::stopLceService(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+stopLceServiceResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stopLceServiceResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+stopNetworkScan	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::stopNetworkScan(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+stopNetworkScanResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::stopNetworkScanResponse(int slotId, int responseType, int serial, RIL_Errno e,$/;"	f	class:radio_1_6	typeref:typename:int
+stop_cvd	tools/upload_to_gce_and_run.py	/^def stop_cvd(args):$/;"	f
+stop_cvd	tools/upload_via_ssh.py	/^def stop_cvd(args):$/;"	f
+stopped_	host/commands/modem_simulator/thread_looper.h	/^  bool stopped_;$/;"	m	class:cuttlefish::ThreadLooper	typeref:typename:bool
+stopper_	common/libs/utils/subprocess.h	/^  SubprocessStopper stopper_;$/;"	m	class:cuttlefish::Subprocess	typeref:typename:SubprocessStopper
+storage	guest/hals/health/storage/Storage.cpp	/^namespace aidl::android::hardware::health::storage {$/;"	n	namespace:aidl::android::hardware::health	file:
+storage	guest/hals/health/storage/Storage.h	/^namespace aidl::android::hardware::health::storage {$/;"	n	namespace:aidl::android::hardware::health
+strStartsWith	guest/hals/ril/reference-ril/misc.c	/^int strStartsWith(const char *line, const char *prefix)$/;"	f	typeref:typename:int
+streamId	guest/hals/camera/cached_stream_buffer.h	/^  int32_t streamId() const { return stream_id_; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:int32_t
+streamPromiseResolvers	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #streamPromiseResolvers;$/;"	M	class:DeviceConnection
+stream_cache_	guest/hals/camera/vsock_camera_device_session_3_4.h	/^  std::map<int32_t, Stream> stream_cache_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:std::map<int32_t,Stream>
+stream_descs_	host/frontend/webrtc/audio_handler.h	/^  std::vector<StreamDesc> stream_descs_ = {};$/;"	m	class:cuttlefish::AudioHandler	typeref:typename:std::vector<StreamDesc>
+stream_id	host/libs/audio_connector/buffers.cpp	/^uint32_t ShmBuffer::stream_id() const { return header_.stream_id.as_uint32_t(); }$/;"	f	class:cuttlefish::ShmBuffer	typeref:typename:uint32_t
+stream_id	host/libs/audio_connector/commands.h	/^  uint32_t stream_id() const { return stream_id_; }$/;"	f	struct:cuttlefish::StreamControlCommand	typeref:typename:uint32_t
+stream_id	host/libs/audio_connector/shm_layout.h	/^  Le32 stream_id;$/;"	m	struct:cuttlefish::virtio_snd_pcm_hdr	typeref:typename:Le32
+stream_id	host/libs/audio_connector/shm_layout.h	/^  Le32 stream_id;$/;"	m	struct:cuttlefish::virtio_snd_pcm_xfer	typeref:typename:Le32
+stream_id_	guest/hals/camera/cached_stream_buffer.h	/^  int32_t stream_id_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:int32_t
+stream_id_	host/libs/audio_connector/commands.h	/^  const uint32_t stream_id_;$/;"	m	struct:cuttlefish::StreamControlCommand	typeref:typename:const uint32_t
+streamer_callback_mutex_	host/libs/screen_connector/screen_connector.h	/^  std::mutex streamer_callback_mutex_; \/\/ mutex to set & read callback_from_streamer_$/;"	m	class:cuttlefish::ScreenConnector	typeref:typename:std::mutex
+streamer_callback_set_cv_	host/libs/screen_connector/screen_connector.h	/^  std::condition_variable streamer_callback_set_cv_;$/;"	m	class:cuttlefish::ScreenConnector	typeref:typename:std::condition_variable
+streams	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  #streams;$/;"	M	class:DeviceConnection
+streams	host/libs/audio_connector/shm_layout.h	/^  uint32_t streams;$/;"	m	struct:cuttlefish::VioSConfig	typeref:typename:uint32_t
+stun_servers_	host/frontend/webrtc_operator/server_config.h	/^  std::vector<std::string> stun_servers_;$/;"	m	class:cuttlefish::ServerConfig	typeref:typename:std::vector<std::string>
+subcompositor_destroy	host/libs/wayland/wayland_subcompositor.cpp	/^void subcompositor_destroy(wl_client*, wl_resource* subcompositor) {$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subcompositor_destroy_resource_callback	host/libs/wayland/wayland_subcompositor.cpp	/^void subcompositor_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subcompositor_get_subsurface	host/libs/wayland/wayland_subcompositor.cpp	/^void subcompositor_get_subsurface(wl_client* client,$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subcompositor_implementation	host/libs/wayland/wayland_subcompositor.cpp	/^const struct wl_subcompositor_interface subcompositor_implementation = {$/;"	v	namespace:wayland::__anonebd60ce30111	typeref:typename:const struct wl_subcompositor_interface
+subprocess_	host/commands/start/flag_forwarder.cc	/^  std::string subprocess_;$/;"	m	class:SubprocessFlag	typeref:typename:std::string	file:
+subprocess_stopper_	common/libs/utils/subprocess.h	/^  SubprocessStopper subprocess_stopper_;$/;"	m	class:cuttlefish::Command	typeref:typename:SubprocessStopper
+subprocesses_	host/commands/start/flag_forwarder.h	/^  std::set<std::string> subprocesses_;$/;"	m	class:FlagForwarder	typeref:typename:std::set<std::string>
+subscribers_	host/commands/kernel_log_monitor/kernel_log_server.h	/^  std::vector<EventCallback> subscribers_;$/;"	m	class:monitor::KernelLogServer	typeref:typename:std::vector<EventCallback>
+subscribers_	host/frontend/webrtc/kernel_log_events_handler.h	/^  std::map<int, std::function<void(const Json::Value&)>> subscribers_;$/;"	m	struct:cuttlefish::KernelLogEventsHandler	typeref:typename:std::map<int,std::function<void (const Json::Value &)>>
+subscribers_mtx_	host/frontend/webrtc/kernel_log_events_handler.h	/^  std::mutex subscribers_mtx_;$/;"	m	struct:cuttlefish::KernelLogEventsHandler	typeref:typename:std::mutex
+subscriptionStatusChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::subscriptionStatusChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+subscription_source	guest/hals/ril/reference-ril/reference-ril.c	/^    int subscription_source;$/;"	m	struct:__anon70d7df6f0108	typeref:typename:int	file:
+subsurface_destroy	host/libs/wayland/wayland_subcompositor.cpp	/^void subsurface_destroy(wl_client*, wl_resource* subsurface) {$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subsurface_destroy_resource_callback	host/libs/wayland/wayland_subcompositor.cpp	/^void subsurface_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subsurface_implementation	host/libs/wayland/wayland_subcompositor.cpp	/^const struct wl_subsurface_interface subsurface_implementation = {$/;"	v	namespace:wayland::__anonebd60ce30111	typeref:typename:const struct wl_subsurface_interface
+subsurface_place_above	host/libs/wayland/wayland_subcompositor.cpp	/^void subsurface_place_above(wl_client*,$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subsurface_place_below	host/libs/wayland/wayland_subcompositor.cpp	/^void subsurface_place_below(wl_client*,$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subsurface_set_desync	host/libs/wayland/wayland_subcompositor.cpp	/^void subsurface_set_desync(wl_client*, wl_resource* subsurface) {$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subsurface_set_position	host/libs/wayland/wayland_subcompositor.cpp	/^void subsurface_set_position(wl_client*,$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+subsurface_set_sync	host/libs/wayland/wayland_subcompositor.cpp	/^void subsurface_set_sync(wl_client*, wl_resource* subsurface) {$/;"	f	namespace:wayland::__anonebd60ce30111	typeref:typename:void
+success	guest/hals/ril/reference-ril/atchannel.h	/^    int success;              \/* true if final response indicates$/;"	m	struct:__anon512a2c1f0208	typeref:typename:int
+suggestedRetryTime	guest/hals/ril/reference-libril/ril.h	/^    int             suggestedRetryTime; \/* If status != 0, this fields indicates the suggested /;"	m	struct:__anon0bfbaecf1308	typeref:typename:int
+suggestedRetryTime	guest/hals/ril/reference-libril/ril.h	/^    int             suggestedRetryTime; \/* If status != 0, this fields indicates the suggested /;"	m	struct:__anon0bfbaecf1408	typeref:typename:int
+suggestedRetryTime	guest/hals/ril/reference-libril/ril.h	/^    int             suggestedRetryTime; \/* If status != 0, this fields indicates the suggested /;"	m	struct:__anon0bfbaecf1508	typeref:typename:int
+suggestedRetryTime	guest/hals/ril/reference-libril/ril.h	/^    int             suggestedRetryTime; \/* If status != 0, this fields indicates the suggested /;"	m	struct:__anon0bfbaecf1608	typeref:typename:int
+sul	host/frontend/webrtc/lib/ws_connection.cpp	/^    lws_sorted_usec_list_t sul = {};$/;"	m	struct:WsConnectionImpl::CreateConnectionSul	typeref:typename:lws_sorted_usec_list_t	file:
+suppSvcNotifyInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::suppSvcNotifyInd(int slotId, int indicationType,$/;"	f	class:radio_1_6	typeref:typename:int
+supplyIccPin2ForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::supplyIccPin2ForApp(int32_t serial, const hidl_string& pin2,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+supplyIccPin2ForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::supplyIccPin2ForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+supplyIccPinForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::supplyIccPinForApp(int32_t serial, const hidl_string& pin,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+supplyIccPinForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::supplyIccPinForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+supplyIccPuk2ForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::supplyIccPuk2ForApp(int32_t serial, const hidl_string& puk2,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+supplyIccPuk2ForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::supplyIccPuk2ForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+supplyIccPukForApp	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::supplyIccPukForApp(int32_t serial, const hidl_string& puk,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+supplyIccPukForAppResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::supplyIccPukForAppResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+supplyNetworkDepersonalization	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::supplyNetworkDepersonalization(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+supplyNetworkDepersonalizationResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::supplyNetworkDepersonalizationResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+supplySimDepersonalization	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::supplySimDepersonalization(int32_t serial,$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+supplySimDepersonalizationResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::supplySimDepersonalizationResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+support	host/libs/confui/sign_utils.h	/^namespace support {$/;"	n	namespace:cuttlefish::confui
+supportedTechs	guest/hals/ril/reference-ril/reference-ril.c	/^    int supportedTechs; \/\/ Bitmask of supported Modem Technology bits$/;"	m	struct:__anon70d7df6f0108	typeref:typename:int	file:
+supportedTypesBitmask	guest/hals/ril/reference-libril/ril.h	/^    int supportedTypesBitmask;  \/* supported APN types bitmask. See RIL_ApnTypes for the value /;"	m	struct:__anon0bfbaecfc108	typeref:typename:int
+supportedTypesBitmask	guest/hals/ril/reference-libril/ril.h	/^    int supportedTypesBitmask;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+supported_algorithms_	host/commands/secure_env/tpm_keymaster_context.h	/^  std::vector<keymaster_algorithm_t> supported_algorithms_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::vector<keymaster_algorithm_t>
+supports	guest/hals/ril/reference-libril/ril.h	/^    RIL_Supports supports;$/;"	m	struct:__anon0bfbaecfbf08	typeref:typename:RIL_Supports
+surface_attach	host/libs/wayland/wayland_compositor.cpp	/^void surface_attach(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_commit	host/libs/wayland/wayland_compositor.cpp	/^void surface_commit(wl_client*, wl_resource* surface_resource) {$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_damage	host/libs/wayland/wayland_compositor.cpp	/^void surface_damage(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_damage_buffer	host/libs/wayland/wayland_compositor.cpp	/^void surface_damage_buffer(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_destroy	host/libs/wayland/wayland_compositor.cpp	/^void surface_destroy(wl_client*, wl_resource* surface) {$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_destroy_resource_callback	host/libs/wayland/wayland_compositor.cpp	/^void surface_destroy_resource_callback(struct wl_resource* surface_resource) {$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_destroy_resource_callback	host/libs/wayland/wayland_shell.cpp	/^void surface_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+surface_frame	host/libs/wayland/wayland_compositor.cpp	/^void surface_frame(wl_client*, wl_resource* surface, uint32_t) {$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_implementation	host/libs/wayland/wayland_compositor.cpp	/^const struct wl_surface_interface surface_implementation = {$/;"	v	namespace:wayland::__anon473d11590111	typeref:typename:const struct wl_surface_interface
+surface_set_buffer_scale	host/libs/wayland/wayland_compositor.cpp	/^void surface_set_buffer_scale(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_set_buffer_transform	host/libs/wayland/wayland_compositor.cpp	/^void surface_set_buffer_transform(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_set_input_region	host/libs/wayland/wayland_compositor.cpp	/^void surface_set_input_region(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surface_set_opaque_region	host/libs/wayland/wayland_compositor.cpp	/^void surface_set_opaque_region(wl_client*,$/;"	f	namespace:wayland::__anon473d11590111	typeref:typename:void
+surfaces_	host/libs/wayland/wayland_server.cpp	/^  Surfaces surfaces_;$/;"	m	struct:wayland::internal::WaylandServerState	typeref:typename:Surfaces	file:
+surfaces_	host/libs/wayland/wayland_surface.h	/^  Surfaces& surfaces_;$/;"	m	class:wayland::Surface	typeref:typename:Surfaces &
+svm_cid	common/libs/fs/vm_sockets.h	/^  unsigned int svm_cid;$/;"	m	struct:sockaddr_vm	typeref:typename:unsigned int
+svm_family	common/libs/fs/vm_sockets.h	/^  __kernel_sa_family_t svm_family;$/;"	m	struct:sockaddr_vm	typeref:typename:__kernel_sa_family_t
+svm_port	common/libs/fs/vm_sockets.h	/^  unsigned int svm_port;$/;"	m	struct:sockaddr_vm	typeref:typename:unsigned int
+svm_reserved1	common/libs/fs/vm_sockets.h	/^  unsigned short svm_reserved1;$/;"	m	struct:sockaddr_vm	typeref:typename:unsigned short
+svm_zero	common/libs/fs/vm_sockets.h	/^  unsigned char svm_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - sizeof(unsigned short) /;"	m	struct:sockaddr_vm	typeref:typename:unsigned char[]
+sw1	guest/hals/ril/reference-libril/ril.h	/^    int sw1;$/;"	m	struct:__anon0bfbaecf2008	typeref:typename:int
+sw2	guest/hals/ril/reference-libril/ril.h	/^    int sw2;$/;"	m	struct:__anon0bfbaecf2008	typeref:typename:int
+swap	common/libs/fs/shared_select.h	/^  void swap(SharedFDSet* rhs) {$/;"	f	class:cuttlefish::SharedFDSet	typeref:typename:void
+switchWaitingOrHoldingAndActive	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::switchWaitingOrHoldingAndActive(int32_t serial) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+switchWaitingOrHoldingAndActiveResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::switchWaitingOrHoldingAndActiveResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+switches_client	host/frontend/webrtc/connection_observer.h	/^  SharedFD switches_client;$/;"	m	struct:cuttlefish::InputSockets	typeref:typename:SharedFD
+switches_server	host/frontend/webrtc/connection_observer.h	/^  SharedFD switches_server;$/;"	m	struct:cuttlefish::InputSockets	typeref:typename:SharedFD
+switches_server_	host/commands/run_cvd/launch_streamer.cpp	/^  SharedFD switches_server_;$/;"	m	class:cuttlefish::__anon6b0274e10111::WebRtcServer	typeref:typename:SharedFD	file:
+switches_socket_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::switches_socket_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+systemId	guest/hals/ril/reference-libril/ril.h	/^    int systemId;       \/* CDMA System Id 0..32767, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5c08	typeref:typename:int
+systemId	guest/hals/ril/reference-libril/ril.h	/^    int systemId;       \/* CDMA System Id 0..32767, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7c08	typeref:typename:int
+systemIsInPrl	guest/hals/ril/reference-libril/ril.h	/^    int32_t systemIsInPrl;                \/\/ indicates whether the current system is in the$/;"	m	struct:__anon0bfbaecf7f08	typeref:typename:int32_t
+system_image_dir_flag_	host/libs/config/config_flag.cpp	/^  SystemImageDirFlag& system_image_dir_flag_;$/;"	m	class:cuttlefish::__anon2e549bd00111::ConfigFlagImpl	typeref:typename:SystemImageDirFlag &	file:
+tac	guest/hals/ril/reference-libril/ril.h	/^    int tac;    \/* 16-bit tracking area code, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5d08	typeref:typename:int
+tac	guest/hals/ril/reference-libril/ril.h	/^    int tac;    \/* 16-bit tracking area code, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf5e08	typeref:typename:int
+tac	guest/hals/ril/reference-libril/ril.h	/^    int tac;    \/* 16-bit tracking area code, INT_MAX if unknown  *\/$/;"	m	struct:__anon0bfbaecf7a08	typeref:typename:int
+tac	guest/hals/ril/reference-libril/ril.h	/^    int32_t tac;       \/* 16-bit tracking area code, INT_MAX means invalid\/unreported. *\/$/;"	m	struct:__anon0bfbaecf6108	typeref:typename:int32_t
+tag	host/commands/secure_env/in_process_tpm.cpp	/^  uint16_t tag;$/;"	m	struct:cuttlefish::tpm_message_header	typeref:typename:uint16_t	file:
+takePhoto	host/frontend/webrtc_operator/assets/js/app.js	/^  #takePhoto() {$/;"	m	class:DeviceControlApp
+target	common/libs/utils/tee_logging.h	/^  SharedFD target;$/;"	m	struct:cuttlefish::SeverityTarget	typeref:typename:SharedFD
+target	host/commands/fetcher/build_api.h	/^  std::string target;$/;"	m	struct:cuttlefish::DeviceBuild	typeref:typename:std::string
+target	host/commands/fetcher/build_api.h	/^  std::string target;$/;"	m	struct:cuttlefish::DirectoryBuild	typeref:typename:std::string
+target_arch	host/commands/assemble_cvd/flags.h	/^  Arch target_arch;$/;"	m	struct:cuttlefish::KernelConfig	typeref:typename:Arch
+target_arch	host/libs/config/cuttlefish_config.cpp	/^Arch CuttlefishConfig::target_arch() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:Arch
+tcp_port_range	host/frontend/webrtc/lib/streamer.h	/^  std::pair<uint16_t, uint16_t> tcp_port_range = {15550, 15558};$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig	typeref:typename:std::pair<uint16_t,uint16_t>
+tcp_port_range_	host/frontend/webrtc/lib/port_range_socket_factory.h	/^  std::pair<uint16_t, uint16_t> tcp_port_range_;$/;"	m	class:cuttlefish::webrtc_streaming::PortRangeSocketFactory	typeref:typename:std::pair<uint16_t,uint16_t>
+tcp_server_	host/libs/config/adb/launch.cpp	/^  SharedFD tcp_server_;$/;"	m	class:cuttlefish::__anon7ea6a0320111::SocketVsockProxy	typeref:typename:SharedFD	file:
+tcti_context_	host/commands/secure_env/in_process_tpm.cpp	/^  TSS2_TCTI_CONTEXT_COMMON_CURRENT tcti_context_;$/;"	m	class:cuttlefish::InProcessTpm::Impl	typeref:typename:TSS2_TCTI_CONTEXT_COMMON_CURRENT	file:
+tdls_external_control	shared/config/wpa_supplicant_overlay.conf	/^tdls_external_control=1$/;"	k
+tdscdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoTdscdma     tdscdma;$/;"	m	union:__anon0bfbaecf7008::__anon0bfbaecf710a	typeref:typename:RIL_CellInfoTdscdma
+tdscdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoTdscdma     tdscdma;$/;"	m	union:__anon0bfbaecf7208::__anon0bfbaecf730a	typeref:typename:RIL_CellInfoTdscdma
+tdscdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoTdscdma tdscdma;$/;"	m	union:__anon0bfbaecf6e08::__anon0bfbaecf6f0a	typeref:typename:RIL_CellInfoTdscdma
+tdscdma_rscp	host/commands/modem_simulator/network_service.h	/^    int tdscdma_rscp;   \/* P-CCPCH RSCP as defined in TS 25.225 5.1.1$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+tearDown	tests/recovery/src/com/android/cuttlefish/tests/RebootRecoveryTest.java	/^    public void tearDown() throws Exception {$/;"	m	class:RebootRecoveryTest
+tech	guest/hals/ril/reference-libril/ril.h	/^    RIL_RadioTechnologyFamily tech;$/;"	m	struct:__anon0bfbaecf1808	typeref:typename:RIL_RadioTechnologyFamily
+techFromModemType	guest/hals/ril/reference-ril/reference-ril.c	/^static int techFromModemType(int mdmtype)$/;"	f	typeref:typename:int	file:
+teeui	host/libs/confui/layouts/layout.h	/^namespace teeui {$/;"	n
+teeui_frame_	host/libs/confui/host_renderer.h	/^  TeeUiFrame teeui_frame_;$/;"	m	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:TeeUiFrame
+teleserviceType	guest/hals/ril/reference-libril/ril.h	/^  RIL_SsTeleserviceType teleserviceType;$/;"	m	struct:__anon0bfbaecf9908	typeref:typename:RIL_SsTeleserviceType
+testBasicPhoneAttributes	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    public void testBasicPhoneAttributes() throws Exception {$/;"	m	class:RilE2eTests
+testGfxstreamEnabled	tests/graphics/src/com/android/cuttlefish/tests/GfxstreamEnabledTest.java	/^    public void testGfxstreamEnabled() throws Exception {$/;"	m	class:GfxstreamEnabledTest
+testPowerwash	tests/powerwash/src/com/android/cuttlefish/tests/PowerwashTest.java	/^    public void testPowerwash() throws Exception {$/;"	m	class:PowerwashTest
+testRebootRecovery	tests/recovery/src/com/android/cuttlefish/tests/RebootRecoveryTest.java	/^    public void testRebootRecovery() throws Exception {$/;"	m	class:RebootRecoveryTest
+testRilConnects	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    public void testRilConnects() throws Exception {$/;"	m	class:RilE2eTests
+testSignalLevels	tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java	/^    public void testSignalLevels() throws Exception {$/;"	m	class:RilE2eTests
+testTombstoneTransmitIntegrity	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    public void testTombstoneTransmitIntegrity() throws Exception {$/;"	m	class:TombstoneTransmitTest
+testTombstonesOfVaryingLengths	tests/src/com/android/tests/tombstoneTransmit/TombstoneTransmitTest.java	/^    public void testTombstonesOfVaryingLengths() throws Exception {$/;"	m	class:TombstoneTransmitTest
+testWifiConnects	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    public void testWifiConnects() throws Exception {$/;"	m	class:WifiE2eTests
+testWifiInitialization	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    public void testWifiInitialization() {$/;"	m	class:WifiE2eTests
+text	common/libs/net/netlink_request_test.cpp	/^    char text[sizeof(kLongString)];  \/\/ sizeof includes padding 0.$/;"	m	struct:cuttlefish::TEST::__anon1ff2f3d90208	typeref:typename:char[]	file:
+thread	host/libs/confui/host_utils.cc	/^namespace thread {$/;"	n	namespace:cuttlefish::confui	file:
+thread	host/libs/confui/host_utils.h	/^namespace thread {$/;"	n	namespace:cuttlefish::confui
+thread_looper_	host/commands/modem_simulator/modem_service.h	/^  ThreadLooper* thread_looper_;$/;"	m	class:cuttlefish::ModemService	typeref:typename:ThreadLooper *
+thread_looper_	host/commands/modem_simulator/modem_simulator.h	/^  std::unique_ptr<ThreadLooper> thread_looper_;$/;"	m	class:cuttlefish::ModemSimulator	typeref:typename:std::unique_ptr<ThreadLooper>
+threads_	common/libs/utils/subprocess.cpp	/^std::vector<std::thread*> threads_;$/;"	m	class:cuttlefish::ThreadJoiner	typeref:typename:std::vector<std::thread * >	file:
+thresholdsDbm	guest/hals/ril/reference-libril/ril.h	/^    int32_t *thresholdsDbm;$/;"	m	struct:__anon0bfbaecf5608	typeref:typename:int32_t *
+thresholdsDbmNumber	guest/hals/ril/reference-libril/ril.h	/^    int32_t thresholdsDbmNumber;$/;"	m	struct:__anon0bfbaecf5608	typeref:typename:int32_t
+thresholdsDownlinkKbps	guest/hals/ril/reference-libril/ril.h	/^    int32_t *thresholdsDownlinkKbps;$/;"	m	struct:__anon0bfbaecf5708	typeref:typename:int32_t *
+thresholdsDownlinkKbpsLength	guest/hals/ril/reference-libril/ril.h	/^    int32_t thresholdsDownlinkKbpsLength;$/;"	m	struct:__anon0bfbaecf5708	typeref:typename:int32_t
+thresholdsUplinkKbps	guest/hals/ril/reference-libril/ril.h	/^    int32_t *thresholdsUplinkKbps;$/;"	m	struct:__anon0bfbaecf5708	typeref:typename:int32_t *
+thresholdsUplinkKbpsLength	guest/hals/ril/reference-libril/ril.h	/^    int32_t thresholdsUplinkKbpsLength;$/;"	m	struct:__anon0bfbaecf5708	typeref:typename:int32_t
+time	guest/hals/ril/reference-libril/ril.h	/^    uint64_t                    time;       \/\/ Time in nanos as returned by ril_nano_time$/;"	m	struct:__anon0bfbaecf9c08	typeref:typename:uint64_t
+timeSeconds	guest/hals/ril/reference-libril/ril.h	/^    int             timeSeconds; \/* for CF no reply only *\/$/;"	m	struct:__anon0bfbaecf2108	typeref:typename:int
+timeSeconds	host/commands/modem_simulator/sup_service.h	/^    int timeSeconds;    \/\/ for CF no reply only$/;"	m	struct:cuttlefish::SupService::CallForwardInfo	typeref:typename:int
+timeStamp	guest/hals/ril/reference-libril/ril.h	/^  uint64_t          timeStamp;      \/* Time in nanos as returned by ril_nano_time *\/$/;"	m	struct:__anon0bfbaecf6e08	typeref:typename:uint64_t
+timeStamp	guest/hals/ril/reference-libril/ril.h	/^  uint64_t          timeStamp;      \/* Time in nanos as returned by ril_nano_time *\/$/;"	m	struct:__anon0bfbaecf7008	typeref:typename:uint64_t
+timeStampType	guest/hals/ril/reference-libril/ril.h	/^  RIL_TimeStampType timeStampType;  \/* type of time stamp represented by timeStamp *\/$/;"	m	struct:__anon0bfbaecf6e08	typeref:typename:RIL_TimeStampType
+timeStampType	guest/hals/ril/reference-libril/ril.h	/^  RIL_TimeStampType timeStampType;  \/* type of time stamp represented by timeStamp *\/$/;"	m	struct:__anon0bfbaecf7008	typeref:typename:RIL_TimeStampType
+timeout	guest/hals/ril/reference-libril/ril_event.h	/^    struct timeval timeout;$/;"	m	struct:ril_event	typeref:struct:timeval
+timeoutMs	host/frontend/webrtc_operator/assets/js/adb.js	/^const timeoutMs = 3000;$/;"	C
+timeout_serial	host/commands/modem_simulator/call_service.h	/^    std::optional<int32_t> timeout_serial;$/;"	m	struct:cuttlefish::CallService::CallStatus	typeref:typename:std::optional<int32_t>
+timer_list	guest/hals/ril/reference-libril/ril_event.cpp	/^static struct ril_event timer_list;$/;"	v	typeref:struct:ril_event	file:
+timeradd	guest/hals/ril/reference-libril/ril_event.cpp	/^#define timeradd(/;"	d	file:
+timercmp	guest/hals/ril/reference-libril/ril_event.cpp	/^#define timercmp(/;"	d	file:
+timersub	guest/hals/ril/reference-libril/ril_event.cpp	/^#define timersub(/;"	d	file:
+timespec_to_ms	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^uint64_t timespec_to_ms(const struct timespec& tp) {$/;"	f	namespace:cuttlefish::__anon0281e17c0211	typeref:typename:uint64_t
+timestamp	guest/hals/camera/vsock_camera_device_session_3_4.h	/^    nsecs_t timestamp;$/;"	m	struct:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession::ReadVsockRequest	typeref:typename:nsecs_t
+timestamp	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^    uint64_t timestamp;$/;"	m	struct:cuttlefish::TpmKeymasterEnforcement::VerifyAuthorization::VerificationData	typeref:typename:uint64_t	file:
+timestamp_	guest/hals/camera/vsock_frame_provider.h	/^  std::atomic<nsecs_t> timestamp_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::atomic<nsecs_t>
+timestamp_ms	host/commands/metrics/proto/cf_log.proto	/^  optional Timestamp timestamp_ms = 1;$/;"	f	message:cuttlefish.CuttlefishLogEvent	typeref:typename:Timestamp
+timezone_	host/commands/modem_simulator/misc_service.h	/^  std::string timezone_;$/;"	m	class:cuttlefish::MiscService	typeref:typename:std::string
+timingAdvance	guest/hals/ril/reference-libril/ril.h	/^    int timingAdvance;   \/* Timing Advance in bit periods. 1 bit period = 48\/13 us.$/;"	m	struct:__anon0bfbaecf4708	typeref:typename:int
+timingAdvance	guest/hals/ril/reference-libril/ril.h	/^    int timingAdvance;   \/* timing advance in micro seconds for a one way trip from cell to dev/;"	m	struct:__anon0bfbaecf4c08	typeref:typename:int
+title	host/example_custom_actions/custom_action_config.json	/^				"title":"Do Not Disturb",$/;"	s	object:1.buttons.1
+title	host/example_custom_actions/custom_action_config.json	/^				"title":"Quick Settings",$/;"	s	object:1.buttons.0
+title	host/example_custom_actions/custom_action_config.json	/^			"title":"Web Page",$/;"	s	object:0.button
+title	host/frontend/webrtc/lib/streamer.cpp	/^  std::string title;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::ControlPanelButtonDescriptor	typeref:typename:std::string	file:
+title	host/libs/config/custom_actions.h	/^  std::string title;$/;"	m	struct:cuttlefish::ControlPanelButton	typeref:typename:std::string
+title	shared/config/config_foldable.json	/^                                "title":"Device State Closed",$/;"	s	object:custom_actions.0.button
+title	shared/config/config_foldable.json	/^                                "title":"Device State Opened",$/;"	s	object:custom_actions.1.button
+tmp_debs=	tools/create_base_image_gce.sh	/^tmp_debs=()$/;"	f
+tmp_test_dir	host/commands/modem_simulator/unittest/service_test.cpp	/^static const std::string tmp_test_dir = std::string(fs::temp_directory_path()) +$/;"	v	typeref:typename:const std::string	file:
+toCodeScheme	guest/hals/ril/reference-libril/ril.h	/^    int toCodeScheme;$/;"	m	struct:__anon0bfbaecf4408	typeref:typename:int
+toKeymasterError	guest/hals/keymint/remote/remote_remotely_provisioned_component.cpp	/^ndk::ScopedAStatus toKeymasterError(const KeymasterResponse& response) {$/;"	f	namespace:aidl::android::hardware::security::keymint::__anone2ec5ace0111	typeref:typename:ndk::ScopedAStatus
+toServiceId	guest/hals/ril/reference-libril/ril.h	/^    int toServiceId;$/;"	m	struct:__anon0bfbaecf4408	typeref:typename:int
+toString	guest/monitoring/cuttlefish_service/java/com/android/google/gce/gceservice/GceFuture.java	/^    public static String toString(ArrayList<GceFuture<?>> futures) {$/;"	m	class:GceFuture
+toa	guest/hals/ril/reference-libril/ril.h	/^    int             toa;         \/* "type" from TS 27.007 7.11 *\/$/;"	m	struct:__anon0bfbaecf2108	typeref:typename:int
+toa	guest/hals/ril/reference-libril/ril.h	/^    int             toa;        \/* type of address, eg 145 = intl *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:int
+token	guest/hals/ril/reference-libril/RilSapSocket.h	/^        int token;$/;"	m	struct:RilSapSocket::SapSocketRequest	typeref:typename:int
+token	guest/hals/ril/reference-libril/ril_internal.h	/^    int32_t token;      \/\/this is not RIL_Token$/;"	m	struct:android::RequestInfo	typeref:typename:int32_t
+tombstone_dir_	host/commands/run_cvd/launch.cc	/^  std::string tombstone_dir_;$/;"	m	class:cuttlefish::TombstoneReceiver	typeref:typename:std::string	file:
+tombstone_receiver_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::tombstone_receiver_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+ton	host/commands/modem_simulator/sup_service.h	/^    int ton;            \/\/ "type" from TS 27.007 7.11$/;"	m	struct:cuttlefish::SupService::CallForwardInfo	typeref:typename:int
+toplevel_destroy_resource_callback	host/libs/wayland/wayland_shell.cpp	/^void toplevel_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+tosca	host/commands/modem_simulator/sms_service.h	/^    int tosca;$/;"	m	struct:cuttlefish::SmsService::SmsServiceCenterAddress	typeref:typename:int
+total_instances_	host/commands/modem_simulator/nvram_config.h	/^  size_t total_instances_;$/;"	m	class:cuttlefish::NvramConfig	typeref:typename:size_t
+total_len	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.h	/^  int total_len;$/;"	m	struct:android_wifi_priv_cmd	typeref:typename:int
+touchIdSlotMap	host/frontend/webrtc_operator/assets/js/app.js	/^      touchIdSlotMap: new Map(),$/;"	p	class:DeviceControlApp.startMouseTracking.mouseCtx
+touchSlots	host/frontend/webrtc_operator/assets/js/app.js	/^      touchSlots: [],$/;"	p	class:DeviceControlApp.startMouseTracking.mouseCtx
+touch_clients	host/frontend/webrtc/connection_observer.h	/^  std::map<std::string, SharedFD> touch_clients;$/;"	m	struct:cuttlefish::InputSockets	typeref:typename:std::map<std::string,SharedFD>
+touch_destroy_resource_callback	host/libs/wayland/wayland_seat.cpp	/^void touch_destroy_resource_callback(struct wl_resource*) {}$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+touch_enabled	host/frontend/webrtc/lib/streamer.cpp	/^  bool touch_enabled;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::DisplayDescriptor	typeref:typename:bool	file:
+touch_implementation	host/libs/wayland/wayland_seat.cpp	/^const struct wl_touch_interface touch_implementation = {$/;"	v	namespace:wayland::__anona9f16c970111	typeref:typename:const struct wl_touch_interface
+touch_release	host/libs/wayland/wayland_seat.cpp	/^void touch_release(wl_client*, wl_resource* touch) {$/;"	f	namespace:wayland::__anona9f16c970111	typeref:typename:void
+touch_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::touch_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+touch_servers	host/frontend/webrtc/connection_observer.h	/^  std::map<std::string, SharedFD> touch_servers;$/;"	m	struct:cuttlefish::InputSockets	typeref:typename:std::map<std::string,SharedFD>
+touch_servers_	host/commands/run_cvd/launch_streamer.cpp	/^  std::vector<SharedFD> touch_servers_;$/;"	m	class:cuttlefish::__anon6b0274e10111::StreamerSockets	typeref:typename:std::vector<SharedFD>	file:
+touch_socket_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::touch_socket_path($/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+tpm_	host/commands/secure_env/device_tpm.h	/^  std::unique_ptr<TSS2_TCTI_CONTEXT, void(*)(TSS2_TCTI_CONTEXT*)> tpm_;$/;"	m	class:cuttlefish::DeviceTpm	typeref:typename:std::unique_ptr<TSS2_TCTI_CONTEXT,void (*)(TSS2_TCTI_CONTEXT *)>
+tpm_	host/commands/secure_env/test_tpm.h	/^  InProcessTpm tpm_;$/;"	m	class:cuttlefish::TestTpm	typeref:typename:InProcessTpm
+tpm_device	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::tpm_device() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+tpm_message_header	host/commands/secure_env/in_process_tpm.cpp	/^struct __attribute__((__packed__)) tpm_message_header {$/;"	s	namespace:cuttlefish	file:
+track_source_impl_	host/frontend/webrtc/lib/audio_track_source_impl.h	/^  rtc::scoped_refptr<AudioTrackSourceImpl> track_source_impl_;$/;"	m	class:cuttlefish::webrtc_streaming::AudioTrackSourceImplSinkWrapper	typeref:typename:rtc::scoped_refptr<AudioTrackSourceImpl>
+track_source_impl_	host/frontend/webrtc/lib/video_track_source_impl.h	/^  rtc::scoped_refptr<VideoTrackSourceImpl> track_source_impl_;$/;"	m	class:cuttlefish::webrtc_streaming::VideoTrackSourceImplSinkWrapper	typeref:typename:rtc::scoped_refptr<VideoTrackSourceImpl>
+transferAtrReq	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::transferAtrReq(int32_t token) {$/;"	f	class:SapImpl	typeref:typename:Return<void>
+transferCardReaderStatusReq	guest/hals/ril/reference-libril/sap_service.cpp	/^Return<void> SapImpl::transferCardReaderStatusReq(int32_t token) {$/;"	f	class:SapImpl	typeref:typename:Return<void>
+triggerEvLoop	guest/hals/ril/reference-libril/ril.cpp	/^static void triggerEvLoop() {$/;"	f	namespace:android	typeref:typename:void	file:
+tryWriteFmqResult	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^void VsockCameraDeviceSession::tryWriteFmqResult(V3_2::CaptureResult& result) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:void
+tx_mode_time_ms	guest/hals/ril/reference-libril/ril.h	/^  uint32_t tx_mode_time_ms[RIL_NUM_TX_POWER_LEVELS];$/;"	m	struct:__anon0bfbaecf9f08	typeref:typename:uint32_t[]
+tx_shm_	host/libs/audio_connector/server.h	/^  const ScopedMMap tx_shm_;$/;"	m	class:cuttlefish::AudioClientConnection	typeref:typename:const ScopedMMap
+tx_socket_	host/libs/audio_connector/server.h	/^  SharedFD tx_socket_;$/;"	m	class:cuttlefish::AudioClientConnection	typeref:typename:SharedFD
+ty_	host/libs/allocd/resource.h	/^  ResourceType ty_ = ResourceType::Invalid;$/;"	m	class:cuttlefish::StaticResource	typeref:typename:ResourceType
+type	common/libs/confui/protocol_types.h	/^  using type = std::string;$/;"	t	struct:cuttlefish::confui::UserResponse	typeref:typename:std::string
+type	guest/commands/vsoc_input_service/vsoc_input_service.h	/^  uint16_t type;$/;"	m	struct:cuttlefish::input_events::InputEvent	typeref:typename:uint16_t
+type	guest/hals/ril/reference-libril/ril.h	/^    RIL_KeepaliveType type;                  \/* Type of keepalive packet *\/$/;"	m	struct:__anon0bfbaecfc508	typeref:typename:RIL_KeepaliveType
+type	guest/hals/ril/reference-libril/ril.h	/^    RIL_ScanType type;                                              \/\/ Type of the scan$/;"	m	struct:__anon0bfbaecfad08	typeref:typename:RIL_ScanType
+type	guest/hals/ril/reference-libril/ril.h	/^    RIL_ScanType type;$/;"	m	struct:__anon0bfbaecfb008	typeref:typename:RIL_ScanType
+type	guest/hals/ril/reference-libril/ril.h	/^    char *          type;       \/* One of the PDP_type values in TS 27.007 section 10.1.1.$/;"	m	struct:__anon0bfbaecf1208	typeref:typename:char *
+type	guest/hals/ril/reference-libril/ril.h	/^    char *          type;       \/* One of the PDP_type values in TS 27.007 section 10.1.1.$/;"	m	struct:__anon0bfbaecf1308	typeref:typename:char *
+type	guest/hals/ril/reference-libril/ril.h	/^    char *          type;       \/* One of the PDP_type values in TS 27.007 section 10.1.1.$/;"	m	struct:__anon0bfbaecf1408	typeref:typename:char *
+type	guest/hals/ril/reference-libril/ril.h	/^    char *          type;       \/* One of the PDP_type values in TS 27.007 section 10.1.1.$/;"	m	struct:__anon0bfbaecf1508	typeref:typename:char *
+type	guest/hals/ril/reference-libril/ril.h	/^    char *          type;       \/* One of the PDP_type values in TS 27.007 section 10.1.1.$/;"	m	struct:__anon0bfbaecf1608	typeref:typename:char *
+type	guest/hals/ril/reference-libril/ril.h	/^    int     type;               \/* "type" from 27.007 7.17 (MT only). *\/$/;"	m	struct:__anon0bfbaecf3108	typeref:typename:int
+type	guest/hals/ril/reference-libril/ril.h	/^    int type;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:int
+type	guest/hals/ril/reference-libril/ril.h	/^    int type;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+type	guest/hals/ril/reference-libril/ril.h	/^  RIL_HardwareConfig_Type type;$/;"	m	struct:__anon0bfbaecf9308	typeref:typename:RIL_HardwareConfig_Type
+type	guest/hals/ril/reference-libril/ril_ex.h	/^    RIL_SOCKET_TYPE type;$/;"	m	struct:SocketListenParam	typeref:typename:RIL_SOCKET_TYPE
+type	guest/hals/ril/reference-ril/reference-ril.c	/^    int type;$/;"	m	struct:__anon70d7df6f0208	typeref:typename:int	file:
+type	host/commands/modem_simulator/channel_monitor.h	/^  ClientType type = RIL;$/;"	m	class:cuttlefish::Client	typeref:typename:ClientType
+type	host/commands/modem_simulator/sup_service.h	/^    ClirType type;$/;"	m	struct:cuttlefish::SupService::ClirStatusInfo	typeref:typename:ClirType
+type	host/frontend/webrtc/connection_observer.cpp	/^  uint16_t type;$/;"	m	struct:cuttlefish::virtio_input_event	typeref:typename:uint16_t	file:
+type	host/libs/audio_connector/commands.h	/^  AudioCommandType type() const { return type_; }$/;"	f	class:cuttlefish::AudioCommand	typeref:typename:AudioCommandType
+type	host/libs/image_aggregator/image_aggregator.h	/^  ImagePartitionType type;$/;"	m	struct:cuttlefish::ImagePartition	typeref:typename:ImagePartitionType
+type	host/libs/image_aggregator/image_aggregator.h	/^  ImagePartitionType type;$/;"	m	struct:cuttlefish::MultipleImagePartition	typeref:typename:ImagePartitionType
+typeFromTag	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^inline keymaster_tag_type_t typeFromTag(const keymaster_tag_t tag) {$/;"	f	namespace:keymaster::V4_1::__anon49de69e60111	typeref:typename:keymaster_tag_type_t
+type_	common/libs/confui/packet_types.h	/^  std::string type_;$/;"	m	struct:cuttlefish::confui::packet::ParsedPacket	typeref:typename:std::string
+type_	host/libs/audio_connector/commands.h	/^  const AudioCommandType type_;$/;"	m	class:cuttlefish::AudioCommand	typeref:typename:const AudioCommandType
+u16cpy	host/libs/image_aggregator/image_aggregator.cc	/^void u16cpy(std::uint16_t* dest, std::uint16_t* src, std::size_t size) {$/;"	f	namespace:cuttlefish::__anon02806fd80111	typeref:typename:void
+u_	host/frontend/webrtc/cvd_video_frame_buffer.h	/^  std::vector<std::uint8_t> u_;$/;"	m	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:std::vector<std::uint8_t>
+uarfcn	guest/hals/ril/reference-libril/ril.h	/^    int uarfcn; \/* 16-bit UMTS Absolute RF Channel Number, INT_MAX if unknown *\/$/;"	m	struct:__anon0bfbaecf7908	typeref:typename:int
+uarfcn	guest/hals/ril/reference-libril/ril.h	/^    int uarfcn; \/* 16-bit UMTS Absolute RF Channel Number; this value must be reported *\/$/;"	m	struct:__anon0bfbaecf5b08	typeref:typename:int
+uarfcn	guest/hals/ril/reference-libril/ril.h	/^    int32_t uarfcn;  \/* 16-bit UMTS Absolute RF Channel Number defined in TS 25.102 5.4.4; this/;"	m	struct:__anon0bfbaecf7b08	typeref:typename:int32_t
+uboot_env_image_path	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::uboot_env_image_path() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+ucred	host/libs/allocd/resource_manager.cpp	/^  struct ucred ucred {};$/;"	s	function:cuttlefish::GetUserIDFromSock	file:
+udp	common/libs/utils/network.cpp	/^  udphdr udp;$/;"	m	struct:cuttlefish::CompleteReleaseFrame	typeref:typename:udphdr	file:
+udp_port_range	host/frontend/webrtc/lib/streamer.h	/^  std::pair<uint16_t, uint16_t> udp_port_range = {15550, 15558};$/;"	m	struct:cuttlefish::webrtc_streaming::StreamerConfig	typeref:typename:std::pair<uint16_t,uint16_t>
+udp_port_range_	host/frontend/webrtc/lib/port_range_socket_factory.h	/^  std::pair<uint16_t, uint16_t> udp_port_range_;$/;"	m	class:cuttlefish::webrtc_streaming::PortRangeSocketFactory	typeref:typename:std::pair<uint16_t,uint16_t>
+ui_options_	guest/hals/confirmationui/guest_session.h	/^    std::vector<teeui::UIOption> ui_options_;$/;"	m	class:android::hardware::confirmationui::V1_0::implementation::GuestSession	typeref:typename:std::vector<teeui::UIOption>
+ui_options_	host/libs/confui/session.h	/^  std::vector<teeui::UIOption> ui_options_;$/;"	m	class:cuttlefish::confui::Session	typeref:typename:std::vector<teeui::UIOption>
+ui_opts_	common/libs/confui/protocol_types.h	/^  std::vector<teeui::UIOption> ui_opts_;$/;"	m	class:cuttlefish::confui::ConfUiStartMessage	typeref:typename:std::vector<teeui::UIOption>
+uid_	host/libs/allocd/resource.h	/^  uid_t uid_{};$/;"	m	class:cuttlefish::StaticResource	typeref:typename:uid_t
+uid_	host/libs/allocd/resource_manager.h	/^  uid_t uid_{};$/;"	m	class:cuttlefish::Session	typeref:typename:uid_t
+uimFuncs	guest/hals/ril/reference-libril/RilSapSocket.h	/^    const RIL_RadioFunctions* uimFuncs;$/;"	m	class:RilSapSocket	typeref:typename:const RIL_RadioFunctions *
+uimRilEnv	guest/hals/ril/reference-libril/RilSapSocket.cpp	/^struct RIL_Env RilSapSocket::uimRilEnv = {$/;"	m	class:RilSapSocket	typeref:struct:RIL_Env
+uimRilEnv	guest/hals/ril/reference-libril/RilSapSocket.h	/^        static struct RIL_Env uimRilEnv;$/;"	m	class:RilSapSocket	typeref:struct:RIL_Env
+underflow	common/libs/fs/shared_fd_stream.cpp	/^int SharedFDStreambuf::underflow() {$/;"	f	class:cuttlefish::SharedFDStreambuf	typeref:typename:int
+unenv_	common/libs/utils/subprocess.h	/^  std::unordered_set<std::string> unenv_{};$/;"	m	class:cuttlefish::Command	typeref:typename:std::unordered_set<std::string>
+unique_id_hbk_	host/commands/secure_env/tpm_attestation_record.h	/^ std::vector<uint8_t> unique_id_hbk_;$/;"	m	class:cuttlefish::TpmAttestationRecordContext	typeref:typename:std::vector<uint8_t>
+unique_partition_guid	host/libs/image_aggregator/image_aggregator.cc	/^  std::uint8_t unique_partition_guid[16];$/;"	m	struct:cuttlefish::__anon02806fd80111::GptPartitionEntry	typeref:typename:std::uint8_t[16]	file:
+universal_pin_state	guest/hals/ril/reference-libril/ril.h	/^  RIL_PinState  universal_pin_state;             \/* applicable to USIM and CSIM: RIL_PINSTATE_x/;"	m	struct:__anon0bfbaecf3908	typeref:typename:RIL_PinState
+universal_pin_state	guest/hals/ril/reference-libril/ril.h	/^  RIL_PinState  universal_pin_state;             \/* applicable to USIM and CSIM: RIL_PINSTATE_x/;"	m	struct:__anon0bfbaecf3a08	typeref:typename:RIL_PinState
+unlink_cb_	guest/hals/bt/remote/remote_bluetooth.h	/^  std::function<void(sp<BluetoothDeathRecipient>&)> unlink_cb_;$/;"	m	class:android::hardware::bluetooth::V1_1::remote::BluetoothHci	typeref:typename:std::function<void (sp<BluetoothDeathRecipient> &)>
+unsol_mode	host/commands/modem_simulator/network_service.h	/^    RegistrationUnsolMode unsol_mode;$/;"	m	struct:cuttlefish::NetworkService::NetworkRegistrationStatus	typeref:typename:RegistrationUnsolMode
+upLink	guest/hals/ril/reference-libril/ril.h	/^  char upLink;$/;"	m	struct:__anon0bfbaecf8808	typeref:typename:char
+update	guest/hals/camera/stream_buffer_cache.cpp	/^void StreamBufferCache::update(const StreamBuffer& buffer) {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::StreamBufferCache	typeref:typename:void
+update	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::update(uint64_t operationHandle,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+update	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^ScopedAStatus RemoteKeyMintOperation::update($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintOperation	typeref:typename:ScopedAStatus
+update	host/frontend/webrtc_operator/assets/js/app.js	/^  update() {$/;"	m	class:DeviceDetailsUpdater
+updateAad	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^ScopedAStatus RemoteKeyMintOperation::updateAad($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintOperation	typeref:typename:ScopedAStatus
+updateBufferCaches	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^void VsockCameraDeviceSession::updateBufferCaches($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:void
+updateDeviceHardwareDetails	host/frontend/webrtc_operator/assets/js/app.js	/^  #updateDeviceHardwareDetails(hardware) {$/;"	m	class:DeviceControlApp
+updateDeviceStateDetails	host/frontend/webrtc_operator/assets/js/app.js	/^  #updateDeviceStateDetails(lidSwitchOpen, hingeAngle) {$/;"	m	class:DeviceControlApp
+updateDisplayVisibility	host/frontend/webrtc_operator/assets/js/app.js	/^  #updateDisplayVisibility(displayId, powerMode) {$/;"	m	class:DeviceControlApp
+updatePhysicalChannelconfigs	host/commands/modem_simulator/data_service.cpp	/^void DataService::updatePhysicalChannelconfigs(int modem_tech, int freq,$/;"	f	class:cuttlefish::DataService	typeref:typename:void
+updateSimPhonebookRecords	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::updateSimPhonebookRecords($/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+updateSimPhonebookRecordsResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::updateSimPhonebookRecordsResponse(int slotId, int responseType, int serial,$/;"	f	class:radio_1_6	typeref:typename:int
+updateStreamInfo	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^void VsockCameraDeviceSession::updateStreamInfo($/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession	typeref:typename:void
+upgradeKey	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::upgradeKey(const hidl_vec<uint8_t>& keyBlobToUpgrade,$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+upgradeKey	guest/hals/keymint/remote/remote_keymint_device.cpp	/^ScopedAStatus RemoteKeyMintDevice::upgradeKey($/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice	typeref:typename:ScopedAStatus
+upload_artifacts	tools/upload_to_gce_and_run.py	/^def upload_artifacts(args):$/;"	f
+upload_artifacts	tools/upload_via_ssh.py	/^def upload_artifacts(args):$/;"	f
+url	host/frontend/webrtc_operator/assets/js/index.js	/^  #url;$/;"	M	class:DeviceListApp
+urns	guest/hals/ril/reference-libril/ril.h	/^    char **                      urns;       \/* The list of emergency Uniform Resource Names (U/;"	m	struct:__anon0bfbaecfb708	typeref:typename:char **
+urnsNumber	guest/hals/ril/reference-libril/ril.h	/^    uint32_t                     urnsNumber;$/;"	m	struct:__anon0bfbaecfb708	typeref:typename:uint32_t
+usage	guest/hals/ril/reference-ril/reference-ril.c	/^static void usage(char *s __unused)$/;"	f	typeref:typename:void	file:
+usage	guest/hals/rild/rild_cuttlefish.c	/^static void usage(const char *argv0) {$/;"	f	typeref:typename:void	file:
+usage	host/commands/health/health.cpp	/^int usage() {$/;"	f	typeref:typename:int
+usage	tools/flash-blk-dev.sh	/^usage() {$/;"	f
+usageMessage	host/commands/wmediumd_control/main.cpp	/^const std::string usageMessage =$/;"	v	typeref:typename:const std::string
+useCamera	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  async useCamera(in_use) {$/;"	m	class:DeviceConnection
+useDevice	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  async #useDevice(in_use, senders_arr, device_opt) {$/;"	m	class:DeviceConnection
+useMic	host/frontend/webrtc_operator/assets/js/cf_webrtc.js	/^  async useMic(in_use) {$/;"	m	class:DeviceConnection
+use_allocd	host/libs/config/cuttlefish_config_instance.cpp	/^bool CuttlefishConfig::InstanceSpecific::use_allocd() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:bool
+use_bootloader	host/libs/config/cuttlefish_config.h	/^  bool use_bootloader() const { return true; };$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+use_ebtables_legacy	host/libs/allocd/alloc_utils.h	/^  bool use_ebtables_legacy = false;$/;"	m	struct:cuttlefish::EthernetNetworkConfig	typeref:typename:bool
+use_ebtables_legacy_	host/libs/allocd/resource.h	/^  bool use_ebtables_legacy_ = false;$/;"	m	class:cuttlefish::EthernetIface	typeref:typename:bool
+use_ebtables_legacy_	host/libs/allocd/resource_manager.h	/^  bool use_ebtables_legacy_ = false;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:bool
+use_ipv4_bridge_	host/libs/allocd/resource_manager.h	/^  bool use_ipv4_bridge_ = true;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:bool
+use_ipv6_bridge_	host/libs/allocd/resource_manager.h	/^  bool use_ipv6_bridge_ = true;$/;"	m	struct:cuttlefish::ResourceManager	typeref:typename:bool
+use_parent_env_	common/libs/utils/subprocess.h	/^  bool use_parent_env_ = true;$/;"	m	class:cuttlefish::Command	typeref:typename:bool
+used_len	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.h	/^  int used_len;$/;"	m	struct:android_wifi_priv_cmd	typeref:typename:int
+used_slots_	host/commands/secure_env/tpm_resource_manager.h	/^  std::atomic<std::uint32_t> used_slots_;$/;"	m	class:cuttlefish::TpmResourceManager	typeref:typename:std::atomic<std::uint32_t>
+user	guest/hals/ril/reference-libril/ril.h	/^    char* user;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:char *
+user	guest/hals/ril/reference-libril/ril.h	/^    char* user;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:char *
+userParam	guest/hals/ril/reference-libril/ril.cpp	/^    void *userParam;$/;"	m	struct:android::UserCallbackInfo	typeref:typename:void *	file:
+userTimerCallback	guest/hals/ril/reference-libril/ril.cpp	/^static void userTimerCallback (int fd, short flags, void *param) {$/;"	f	namespace:android	typeref:typename:void	file:
+user_data_	host/commands/modem_simulator/pdu_parser.h	/^  std::string user_data_;$/;"	m	class:cuttlefish::PDUParser	typeref:typename:std::string
+user_input_evt_q_id_	host/libs/confui/host_server.h	/^  int user_input_evt_q_id_;  \/\/ Q id in input_multiplexer_$/;"	m	class:cuttlefish::confui::HostServer	typeref:typename:int
+userdata_format	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::userdata_format() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+username	guest/hals/ril/reference-libril/ril.h	/^    char *username;             \/* the username for APN, or NULL *\/$/;"	m	struct:__anon0bfbaecfc008	typeref:typename:char *
+username	guest/hals/ril/reference-libril/ril.h	/^    char *username;             \/* the username for APN, or NULL *\/$/;"	m	struct:__anon0bfbaecfc108	typeref:typename:char *
+username	tools/create_base_image.go	/^var username string$/;"	v	package:main	typeref:typename:string
+utf8Decoder	host/frontend/webrtc_operator/assets/js/adb.js	/^let utf8Decoder = new TextDecoder();$/;"	v
+utf8Encoder	host/frontend/webrtc_operator/assets/js/adb.js	/^let utf8Encoder = new TextEncoder();$/;"	v
+utran_bands	guest/hals/ril/reference-libril/ril.h	/^        RIL_UtranBands utran_bands[MAX_BANDS];$/;"	m	union:__anon0bfbaecfab08::__anon0bfbaecfac0a	typeref:typename:RIL_UtranBands[]
+utran_bands	guest/hals/ril/reference-libril/ril.h	/^        RIL_UtranBands utran_bands[MAX_BANDS];$/;"	m	union:__anon0bfbaecfae08::__anon0bfbaecfaf0a	typeref:typename:RIL_UtranBands[]
+uuid	guest/hals/ril/reference-libril/ril.h	/^  char uuid[MAX_UUID_LENGTH];$/;"	m	struct:__anon0bfbaecf9308	typeref:typename:char[]
+uuid	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::uuid() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+uusData	guest/hals/ril/reference-libril/ril.h	/^  char *          uusData;    \/* UUS Data *\/$/;"	m	struct:__anon0bfbaecf0f08	typeref:typename:char *
+uusDcs	guest/hals/ril/reference-libril/ril.h	/^  RIL_UUS_DCS     uusDcs;     \/* UUS Data Coding Scheme *\/$/;"	m	struct:__anon0bfbaecf0f08	typeref:typename:RIL_UUS_DCS
+uusInfo	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_Info *  uusInfo;    \/* NULL or Pointer to User-User Signaling Information *\/$/;"	m	struct:__anon0bfbaecf1108	typeref:typename:RIL_UUS_Info *
+uusInfo	guest/hals/ril/reference-libril/ril.h	/^    RIL_UUS_Info *  uusInfo;    \/* NULL or Pointer to User-User Signaling Information *\/$/;"	m	struct:__anon0bfbaecf1c08	typeref:typename:RIL_UUS_Info *
+uusLength	guest/hals/ril/reference-libril/ril.h	/^  int             uusLength;  \/* Length of UUS Data *\/$/;"	m	struct:__anon0bfbaecf0f08	typeref:typename:int
+uusType	guest/hals/ril/reference-libril/ril.h	/^  RIL_UUS_Type    uusType;    \/* UUS Type *\/$/;"	m	struct:__anon0bfbaecf0f08	typeref:typename:RIL_UUS_Type
+v_	host/frontend/webrtc/cvd_video_frame_buffer.h	/^  std::vector<std::uint8_t> v_;$/;"	m	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:std::vector<std::uint8_t>
+valid	guest/hals/camera/cached_stream_buffer.h	/^  bool valid() const { return buffer_ != nullptr; }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer	typeref:typename:bool
+validate_redirects	common/libs/utils/subprocess.cpp	/^bool validate_redirects($/;"	f	namespace:cuttlefish::__anon39e8abf00111	typeref:typename:bool
+validationComponent	host/commands/run_cvd/validate.cpp	/^validationComponent() {$/;"	f	namespace:cuttlefish	typeref:typename:fruit::Component<fruit::Required<const CuttlefishConfig::InstanceSpecific>>
+value	common/libs/utils/flag_parser.h	/^  std::string value;$/;"	m	struct:cuttlefish::FlagMatch	typeref:typename:std::string
+value	guest/commands/vsoc_input_service/vsoc_input_service.h	/^  uint32_t value;$/;"	m	struct:cuttlefish::input_events::InputEvent	typeref:typename:uint32_t
+value	guest/hals/ril/reference-libril/ril.h	/^  char *        value;$/;"	m	struct:__anon0bfbaecf8d08	typeref:typename:char *
+value	host/frontend/webrtc/connection_observer.cpp	/^  int32_t value;$/;"	m	struct:cuttlefish::virtio_input_event	typeref:typename:int32_t	file:
+value	host/libs/confui/sign_utils.h	/^    static constexpr bool value =$/;"	m	struct:cuttlefish::confui::support::ByteBufferProxy::has_data	typeref:typename:bool
+value	host/libs/screen_connector/screen_connector_common.h	/^  static constexpr const bool value =$/;"	m	struct:cuttlefish::is_movable	typeref:typename:const bool
+value_	common/libs/fs/shared_fd.h	/^  std::shared_ptr<FileInstance> value_;$/;"	m	class:cuttlefish::SharedFD	typeref:typename:std::shared_ptr<FileInstance>
+value_	common/libs/fs/shared_fd.h	/^  std::weak_ptr<FileInstance> value_;$/;"	m	class:cuttlefish::WeakFD	typeref:typename:std::weak_ptr<FileInstance>
+value_	common/libs/fs/shared_select.h	/^  std::set<SharedFD> value_;$/;"	m	class:cuttlefish::SharedFDSet	typeref:typename:std::set<SharedFD>
+vb_params_	host/commands/secure_env/tpm_attestation_record.h	/^ VerifiedBootParams vb_params_;$/;"	m	class:cuttlefish::TpmAttestationRecordContext	typeref:typename:VerifiedBootParams
+vehicle_hal_server_port	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::vehicle_hal_server_port() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+vendor_cause	guest/hals/ril/reference-libril/ril.h	/^  char *                vendor_cause;$/;"	m	struct:__anon0bfbaecf2e08	typeref:typename:char *
+vendor_id_	guest/commands/vsoc_input_service/virtual_device_base.h	/^  const uint16_t vendor_id_;$/;"	m	class:cuttlefish_input_service::VirtualDeviceBase	typeref:typename:const uint16_t
+vendor_patchlevel_	host/commands/secure_env/tpm_key_blob_maker.h	/^  std::optional<uint32_t> vendor_patchlevel_;$/;"	m	class:cuttlefish::TpmKeyBlobMaker	typeref:typename:std::optional<uint32_t>
+vendor_patchlevel_	host/commands/secure_env/tpm_keymaster_context.h	/^  std::optional<uint32_t> vendor_patchlevel_;$/;"	m	class:cuttlefish::TpmKeymasterContext	typeref:typename:std::optional<uint32_t>
+verbose	tools/create_base_image.go	/^var verbose bool$/;"	v	package:main	typeref:typename:bool
+verbose_	common/libs/utils/subprocess.h	/^  bool verbose_;$/;"	m	class:cuttlefish::SubprocessOptions	typeref:typename:bool
+verify	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^Return<void> RemoteGateKeeperDevice::verify($/;"	f	class:gatekeeper::RemoteGateKeeperDevice	typeref:typename:Return<void>
+verifyAuthorization	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^Return<void> RemoteKeymaster4Device::verifyAuthorization($/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device	typeref:typename:Return<void>
+version	apex/com.google.aosp_cf_x86_64_phone.rros/apex_manifest.json	/^  "version": 1$/;"	n
+version	apex/com.google.cf.bt/manifest.json	/^  "version": 1$/;"	n
+version	apex/com.google.cf.input.config/apex_manifest.json	/^  "version": 1$/;"	n
+version	apex/com.google.cf.rild/apex_manifest.json	/^  "version": 1$/;"	n
+version	apex/com.google.cf.wifi/apex_manifest.json	/^  "version": 1$/;"	n
+version	guest/hals/ril/reference-libril/ril.h	/^    int version;            \/\/ Version of structure, RIL_RADIO_CAPABILITY_VERSION$/;"	m	struct:__anon0bfbaecf0a08	typeref:typename:int
+version	guest/hals/ril/reference-libril/ril.h	/^    int version;        \/* set to RIL_VERSION *\/$/;"	m	struct:__anon0bfbaecfbf08	typeref:typename:int
+version	host/libs/allocd/request.h	/^  uint16_t version;  \/\/\/ used to differentiate between allocd feature sets$/;"	m	struct:cuttlefish::RequestHeader	typeref:typename:uint16_t
+version	host/libs/audio_connector/shm_layout.h	/^  uint32_t version;$/;"	m	struct:cuttlefish::VioSConfig	typeref:typename:uint32_t
+version	host/libs/image_aggregator/cdisk_spec.proto	/^  uint64 version = 1;$/;"	f	message:CompositeDisk	typeref:typename:uint64
+version	host/libs/image_aggregator/image_aggregator.cc	/^  Be32 version;$/;"	m	struct:cuttlefish::__anon02806fd80111::QCowHeader	typeref:typename:Be32	file:
+version	tests/hal/hal_implementation_test.cpp	/^  size_t version;$/;"	m	struct:VersionedAidlPackage	typeref:typename:size_t	file:
+version	tools/create_base_image.go	/^var version string$/;"	v	package:main	typeref:typename:string
+version_	guest/commands/vsoc_input_service/virtual_device_base.h	/^  const uint16_t version_;$/;"	m	class:cuttlefish_input_service::VirtualDeviceBase	typeref:typename:const uint16_t
+vhost_net	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::vhost_net() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+vhost_user_mac80211_hwsim	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::vhost_user_mac80211_hwsim() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+video_encoder_	host/frontend/webrtc/lib/local_recorder.cpp	/^  std::unique_ptr<webrtc::VideoEncoder> video_encoder_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:std::unique_ptr<webrtc::VideoEncoder>	file:
+video_track_	host/frontend/webrtc/lib/client_handler.cpp	/^  webrtc::VideoTrackInterface* video_track_;$/;"	m	class:cuttlefish::webrtc_streaming::ClientVideoTrackImpl	typeref:typename:webrtc::VideoTrackInterface *	file:
+video_track_number_	host/frontend/webrtc/lib/local_recorder.cpp	/^  uint64_t video_track_number_;$/;"	m	class:cuttlefish::webrtc_streaming::LocalRecorder::Display	typeref:typename:uint64_t	file:
+virtio_gpu_metadata_	host/libs/wayland/wayland_surface.h	/^    VirtioGpuMetadata virtio_gpu_metadata_;$/;"	m	struct:wayland::Surface::State	typeref:typename:VirtioGpuMetadata
+virtio_gpu_metadata_get_surface_metadata	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^void virtio_gpu_metadata_get_surface_metadata($/;"	f	namespace:wayland::__anon027348120111	typeref:typename:void
+virtio_gpu_metadata_implementation	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^    virtio_gpu_metadata_implementation = {$/;"	v	namespace:wayland::__anon027348120111	typeref:typename:const struct wp_virtio_gpu_metadata_v1_interface
+virtio_gpu_surface_metadata_implementation	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^    virtio_gpu_surface_metadata_implementation = {$/;"	v	namespace:wayland::__anon027348120111	typeref:typename:const struct wp_virtio_gpu_surface_metadata_v1_interface
+virtio_gpu_surface_metadata_set_scanout_id	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^void virtio_gpu_surface_metadata_set_scanout_id($/;"	f	namespace:wayland::__anon027348120111	typeref:typename:void
+virtio_input_event	host/frontend/webrtc/connection_observer.cpp	/^struct virtio_input_event {$/;"	s	namespace:cuttlefish	file:
+virtio_snd_chmap_info	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_chmap_info {$/;"	s	namespace:cuttlefish
+virtio_snd_hdr	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_hdr {$/;"	s	namespace:cuttlefish
+virtio_snd_info	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_info {$/;"	s	namespace:cuttlefish
+virtio_snd_jack_info	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_jack_info {$/;"	s	namespace:cuttlefish
+virtio_snd_pcm_hdr	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_pcm_hdr {$/;"	s	namespace:cuttlefish
+virtio_snd_pcm_info	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_pcm_info {$/;"	s	namespace:cuttlefish
+virtio_snd_pcm_set_params	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_pcm_set_params {$/;"	s	namespace:cuttlefish
+virtio_snd_pcm_status	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_pcm_status {$/;"	s	namespace:cuttlefish
+virtio_snd_pcm_xfer	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_pcm_xfer {$/;"	s	namespace:cuttlefish
+virtio_snd_query_info	host/libs/audio_connector/shm_layout.h	/^struct virtio_snd_query_info {$/;"	s	namespace:cuttlefish
+virtual_disk_paths	host/libs/config/cuttlefish_config_instance.cpp	/^std::vector<std::string> CuttlefishConfig::InstanceSpecific::virtual_disk_paths() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::vector<std::string>
+virtual_keyboard_	guest/commands/vsoc_input_service/vsoc_input_service.h	/^  std::shared_ptr<VirtualKeyboard> virtual_keyboard_;$/;"	m	class:cuttlefish_input_service::VSoCInputService	typeref:typename:std::shared_ptr<VirtualKeyboard>
+virtual_power_button_	guest/commands/vsoc_input_service/vsoc_input_service.h	/^  std::shared_ptr<VirtualPowerButton> virtual_power_button_;$/;"	m	class:cuttlefish_input_service::VSoCInputService	typeref:typename:std::shared_ptr<VirtualPowerButton>
+virtual_touchscreen_	guest/commands/vsoc_input_service/vsoc_input_service.h	/^  std::shared_ptr<VirtualTouchScreen> virtual_touchscreen_;$/;"	m	class:cuttlefish_input_service::VSoCInputService	typeref:typename:std::shared_ptr<VirtualTouchScreen>
+vm_manager	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::vm_manager() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+vm_manager	host/libs/vm_manager/crosvm_manager.cpp	/^namespace vm_manager {$/;"	n	namespace:cuttlefish	file:
+vm_manager	host/libs/vm_manager/crosvm_manager.h	/^namespace vm_manager {$/;"	n	namespace:cuttlefish
+vm_manager	host/libs/vm_manager/host_configuration.cpp	/^namespace vm_manager {$/;"	n	namespace:cuttlefish	file:
+vm_manager	host/libs/vm_manager/host_configuration.h	/^namespace vm_manager {$/;"	n	namespace:cuttlefish
+vm_manager	host/libs/vm_manager/qemu_manager.cpp	/^namespace vm_manager {$/;"	n	namespace:cuttlefish	file:
+vm_manager	host/libs/vm_manager/qemu_manager.h	/^namespace vm_manager {$/;"	n	namespace:cuttlefish
+vm_manager	host/libs/vm_manager/vm_manager.cpp	/^namespace vm_manager {$/;"	n	namespace:cuttlefish	file:
+vm_manager	host/libs/vm_manager/vm_manager.h	/^namespace vm_manager {$/;"	n	namespace:cuttlefish
+vmm_	host/commands/run_cvd/launch.cc	/^  VmManager& vmm_;$/;"	m	class:cuttlefish::VmmCommands	typeref:typename:VmManager &	file:
+vmm_type	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional VmmType vmm_type = 8;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:VmmType
+vmm_version	host/commands/metrics/proto/cf_metrics_event.proto	/^  optional string vmm_version = 9;$/;"	f	message:cuttlefish.MetricsEvent	typeref:typename:string
+vnet	common/libs/utils/network.cpp	/^  std::uint8_t vnet[SIZE_OF_VIRTIO_NET_HDR_V1];$/;"	m	struct:cuttlefish::CompleteReleaseFrame	typeref:typename:std::uint8_t[]	file:
+voiceRadioTechChangedInd	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::voiceRadioTechChangedInd(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+voice_registration_status_	host/commands/modem_simulator/network_service.h	/^  NetworkRegistrationStatus voice_registration_status_;$/;"	m	class:cuttlefish::NetworkService	typeref:typename:NetworkRegistrationStatus
+vsock_guest_cid	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::vsock_guest_cid() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+w	host/libs/confui/host_renderer.h	/^    std::uint32_t x, y, w, h;  \/\/ (x, y) is the top left$/;"	m	struct:cuttlefish::confui::ConfUiRenderer::Boundary	typeref:typename:std::uint32_t
+w	host/libs/wayland/wayland_surface.h	/^    int32_t w;$/;"	m	struct:wayland::Surface::Region	typeref:typename:int32_t
+w_	host/libs/confui/host_renderer.h	/^  int w_;$/;"	m	class:cuttlefish::confui::TeeUiFrameWrapper	typeref:typename:int
+waitForClose	guest/hals/ril/reference-ril/reference-ril.c	/^static void waitForClose()$/;"	f	typeref:typename:void	file:
+waitForInstance	tools/create_base_image.go	/^func waitForInstance(PZ string) {$/;"	f	package:main
+waitForSupplicantState	tests/wifi/src/com/android/cuttlefish/wifi/tests/WifiE2eTests.java	/^    private void waitForSupplicantState(SupplicantState... expectedStates) {$/;"	m	class:WifiE2eTests	file:
+waitTime	guest/hals/ril/reference-libril/ril.h	/^    int waitTime;$/;"	m	struct:__anon0bfbaecf9d08	typeref:typename:int
+waitTime	guest/hals/ril/reference-libril/ril.h	/^    int waitTime;$/;"	m	struct:__anon0bfbaecf9e08	typeref:typename:int
+waitYUVFrame	guest/hals/camera/vsock_frame_provider.cpp	/^bool VsockFrameProvider::waitYUVFrame(unsigned int max_wait_ms) {$/;"	f	class:cuttlefish::VsockFrameProvider	typeref:typename:bool
+wait_for_instance	tools/create_base_image_hostlib.sh	/^wait_for_instance() {$/;"	f
+wakeTimeoutCallback	guest/hals/ril/reference-libril/ril.cpp	/^wakeTimeoutCallback (void *param) {$/;"	f	namespace:android	typeref:typename:void	file:
+wakeType	guest/hals/ril/reference-libril/ril.cpp	/^    WakeType wakeType;$/;"	m	struct:android::__anonf9a2982a0108	typeref:typename:WakeType	file:
+wants_	host/frontend/webrtc/lib/client_handler.cpp	/^  rtc::VideoSinkWants wants_ = {};$/;"	m	class:cuttlefish::webrtc_streaming::ClientVideoTrackImpl	typeref:typename:rtc::VideoSinkWants	file:
+wasAckSent	guest/hals/ril/reference-libril/ril_internal.h	/^    int wasAckSent;    \/\/ Indicates whether an ack was sent earlier$/;"	m	struct:android::RequestInfo	typeref:typename:int
+watch_table	guest/hals/ril/reference-libril/ril_event.cpp	/^static struct ril_event * watch_table[MAX_FD_EVENTS];$/;"	v	typeref:struct:ril_event * []	file:
+wayland	host/libs/wayland/wayland_compositor.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_compositor.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_dmabuf.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_dmabuf.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_seat.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_seat.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_server.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_server.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_shell.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_shell.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_subcompositor.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_subcompositor.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_surface.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_surface.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_surfaces.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_surfaces.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_utils.h	/^namespace wayland {$/;"	n
+wayland	host/libs/wayland/wayland_virtio_gpu_metadata.cpp	/^namespace wayland {$/;"	n	file:
+wayland	host/libs/wayland/wayland_virtio_gpu_metadata.h	/^namespace wayland {$/;"	n
+wbr	host/libs/allocd/request.h	/^  wbr,          \/\/ wireless bridge$/;"	e	enum:cuttlefish::IfaceType
+wcdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoWcdma   wcdma;$/;"	m	union:__anon0bfbaecf6e08::__anon0bfbaecf6f0a	typeref:typename:RIL_CellInfoWcdma
+wcdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoWcdma_v12   wcdma;$/;"	m	union:__anon0bfbaecf7008::__anon0bfbaecf710a	typeref:typename:RIL_CellInfoWcdma_v12
+wcdma	guest/hals/ril/reference-libril/ril.h	/^    RIL_CellInfoWcdma_v12   wcdma;$/;"	m	union:__anon0bfbaecf7208::__anon0bfbaecf730a	typeref:typename:RIL_CellInfoWcdma_v12
+wcdma_ber	host/commands/modem_simulator/network_service.h	/^    int wcdma_ber;   \/* Refer gsm_ber *\/$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+wcdma_rssi	host/commands/modem_simulator/network_service.h	/^    int wcdma_rssi;  \/* Refer gsm_rssi *\/$/;"	m	struct:cuttlefish::NetworkService::SignalStrength	typeref:typename:int
+weak_by_ptr_	host/frontend/webrtc/lib/ws_connection.cpp	/^  std::map<void*, std::weak_ptr<WsConnectionImpl>> weak_by_ptr_;$/;"	m	class:WsConnectionContextImpl	typeref:typename:std::map<void *,std::weak_ptr<WsConnectionImpl>>	file:
+weak_display_handler_	host/frontend/webrtc/connection_observer.cpp	/^  std::weak_ptr<DisplayHandler> weak_display_handler_;$/;"	m	class:cuttlefish::ConnectionObserverImpl	typeref:typename:std::weak_ptr<DisplayHandler>	file:
+weak_display_handler_	host/frontend/webrtc/connection_observer.h	/^  std::weak_ptr<DisplayHandler> weak_display_handler_;$/;"	m	class:cuttlefish::CfConnectionObserverFactory	typeref:typename:std::weak_ptr<DisplayHandler>
+weak_this	host/frontend/webrtc/lib/ws_connection.cpp	/^    std::weak_ptr<WsConnectionImpl> weak_this;$/;"	m	struct:WsConnectionImpl::CreateConnectionSul	typeref:typename:std::weak_ptr<WsConnectionImpl>	file:
+webrtc	host/frontend/webrtc/lib/local_recorder.h	/^namespace webrtc {$/;"	n
+webrtc_assets_dir	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::webrtc_assets_dir() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+webrtc_certs_dir	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::webrtc_certs_dir() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+webrtc_device_id	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::webrtc_device_id() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+webrtc_enable_adb_websocket	host/libs/config/cuttlefish_config.cpp	/^bool CuttlefishConfig::webrtc_enable_adb_websocket() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:bool
+webrtc_signaling	host/frontend/webrtc_operator/constants/signaling_constants.h	/^namespace webrtc_signaling {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/adb_handler.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/adb_handler.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/bluetooth_handler.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/bluetooth_handler.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/audio_device.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/audio_device.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/audio_frame_buffer.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/audio_sink.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/audio_source.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/audio_track_source_impl.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/audio_track_source_impl.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/camera_streamer.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/camera_streamer.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/client_handler.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/client_handler.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/connection_observer.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/local_recorder.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/local_recorder.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/port_range_socket_factory.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/port_range_socket_factory.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/streamer.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/streamer.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/utils.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/utils.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/video_frame_buffer.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/video_sink.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/video_track_source_impl.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_streaming	host/frontend/webrtc/lib/vp8only_encoder_factory.cpp	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish	file:
+webrtc_streaming	host/frontend/webrtc/lib/vp8only_encoder_factory.h	/^namespace webrtc_streaming {$/;"	n	namespace:cuttlefish
+webrtc_tcp_port_range	host/libs/config/cuttlefish_config.cpp	/^std::pair<uint16_t, uint16_t> CuttlefishConfig::webrtc_tcp_port_range() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::pair<uint16_t,uint16_t>
+webrtc_udp_port_range	host/libs/config/cuttlefish_config.cpp	/^std::pair<uint16_t, uint16_t> CuttlefishConfig::webrtc_udp_port_range() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::pair<uint16_t,uint16_t>
+websocket	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  #websocket;$/;"	M	class:WebsocketConnector
+websocketUrl	host/frontend/webrtc_operator/assets/js/server_connector.js	/^function websocketUrl(path) {$/;"	f
+when	host/commands/modem_simulator/thread_looper.h	/^      std::chrono::steady_clock::time_point when;$/;"	m	struct:cuttlefish::ThreadLooper::Event	typeref:typename:std::chrono::steady_clock::time_point
+width	common/libs/device_config/device_config.proto	/^    int32 width = 1;$/;"	f	message:cuttlefish.DeviceConfig.DisplayConfig	typeref:typename:int32
+width	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^int CvdVideoFrameBuffer::width() const { return width_; }$/;"	f	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:int
+width	host/frontend/webrtc/lib/streamer.cpp	/^  int width;$/;"	m	struct:cuttlefish::webrtc_streaming::__anonab9390d10111::DisplayDescriptor	typeref:typename:int	file:
+width	host/frontend/webrtc/lib/video_track_source_impl.cpp	/^  int width() const override { return frame_buffer_->width(); }$/;"	f	class:cuttlefish::webrtc_streaming::__anone9f9f83a0111::VideoFrameWrapper	typeref:typename:int	file:
+width	host/libs/config/cuttlefish_config.h	/^    int width;$/;"	m	struct:cuttlefish::CuttlefishConfig::DisplayConfig	typeref:typename:int
+width_	guest/hals/camera/vsock_camera_metadata.h	/^  int32_t width_;$/;"	m	class:android::hardware::camera::device::V3_4::implementation::VsockCameraMetadata	typeref:typename:int32_t
+width_	host/frontend/webrtc/cvd_video_frame_buffer.h	/^  const int width_;$/;"	m	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:const int
+width_	host/frontend/webrtc/lib/video_track_source_impl.h	/^  int width_;$/;"	m	class:cuttlefish::webrtc_streaming::VideoTrackSourceImpl	typeref:typename:int
+wifi_mac_prefix	host/libs/config/cuttlefish_config_instance.cpp	/^int CuttlefishConfig::InstanceSpecific::wifi_mac_prefix() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:int
+wifi_tap_name	host/libs/config/cuttlefish_config_instance.cpp	/^std::string CuttlefishConfig::InstanceSpecific::wifi_tap_name() const {$/;"	f	class:cuttlefish::CuttlefishConfig::InstanceSpecific	typeref:typename:std::string
+wireless_tap	host/commands/assemble_cvd/alloc.h	/^  IfaceData wireless_tap;$/;"	m	struct:cuttlefish::IfaceConfig	typeref:typename:IfaceData
+wmediumd_api_server_socket	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::wmediumd_api_server_socket() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+wmediumd_config	host/libs/config/cuttlefish_config.cpp	/^std::string CuttlefishConfig::wmediumd_config() const {$/;"	f	class:cuttlefish::CuttlefishConfig	typeref:typename:std::string
+wmediumd_socket_	host/libs/wmediumd_controller/wmediumd_controller.h	/^  SharedFD wmediumd_socket_;$/;"	m	class:cuttlefish::WmediumdController	typeref:typename:SharedFD
+worker_thread_	host/frontend/webrtc/lib/streamer.cpp	/^  std::unique_ptr<rtc::Thread> worker_thread_;$/;"	m	class:cuttlefish::webrtc_streaming::Streamer::Impl	typeref:typename:std::unique_ptr<rtc::Thread>	file:
+wpa_driver_get_p2p_noa	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.c	/^int wpa_driver_get_p2p_noa(void* priv, u8* buf, size_t len) {$/;"	f	typeref:typename:int
+wpa_driver_nl80211_driver_cmd	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.c	/^int wpa_driver_nl80211_driver_cmd(void* priv, char* cmd, char* buf,$/;"	f	typeref:typename:int
+wpa_driver_set_ap_wps_p2p_ie	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.c	/^int wpa_driver_set_ap_wps_p2p_ie(void* priv, const struct wpabuf* beacon,$/;"	f	typeref:typename:int
+wpa_driver_set_p2p_noa	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.c	/^int wpa_driver_set_p2p_noa(void* priv, u8 count, int start, int duration) {$/;"	f	typeref:typename:int
+wpa_driver_set_p2p_ps	guest/libs/wpa_supplicant_8_lib/driver_cmd_nl80211.c	/^int wpa_driver_set_p2p_ps(void* priv, int legacy_ps, int opp_ps, int ctwindow) {$/;"	f	typeref:typename:int
+wrapped_	host/commands/secure_env/encrypted_serializable.h	/^  keymaster::Serializable& wrapped_;$/;"	m	class:cuttlefish::EncryptedSerializable	typeref:typename:keymaster::Serializable &
+wrapped_	host/commands/secure_env/hmac_serializable.h	/^  Serializable* wrapped_;$/;"	m	class:cuttlefish::HmacSerializable	typeref:typename:Serializable *
+wrapped_	host/commands/secure_env/proxy_keymaster_context.h	/^  KeymasterContext& wrapped_;$/;"	m	class:cuttlefish::ProxyKeymasterContext	typeref:typename:KeymasterContext &
+writeCtrlZ	guest/hals/ril/reference-ril/atchannel.c	/^static int writeCtrlZ (const char *s)$/;"	f	typeref:typename:int	file:
+writeJsonEventMessage	guest/hals/camera/vsock_frame_provider.cpp	/^bool writeJsonEventMessage($/;"	f	namespace:cuttlefish::__anon2426deb60111	typeref:typename:bool
+writeSmsToRuim	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::writeSmsToRuim(int32_t serial, const CdmaSmsWriteArgs& cdmaSms) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+writeSmsToRuimResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::writeSmsToRuimResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+writeSmsToSim	guest/hals/ril/reference-libril/ril_service.cpp	/^Return<void> RadioImpl_1_6::writeSmsToSim(int32_t serial, const SmsWriteArgs& smsWriteArgs) {$/;"	f	class:RadioImpl_1_6	typeref:typename:Return<void>
+writeSmsToSimResponse	guest/hals/ril/reference-libril/ril_service.cpp	/^int radio_1_6::writeSmsToSimResponse(int slotId,$/;"	f	class:radio_1_6	typeref:typename:int
+write_mutex	host/commands/modem_simulator/channel_monitor.h	/^  std::mutex write_mutex;$/;"	m	class:cuttlefish::Client	typeref:typename:std::mutex
+write_mutex_	common/libs/utils/vsock_connection.h	/^  std::recursive_mutex write_mutex_;$/;"	m	class:cuttlefish::VsockConnection	typeref:typename:std::recursive_mutex
+write_pipe_	host/commands/modem_simulator/channel_monitor.h	/^  cuttlefish::SharedFD write_pipe_;$/;"	m	class:cuttlefish::ChannelMonitor	typeref:typename:cuttlefish::SharedFD
+write_queue_	host/commands/console_forwarder/main.cpp	/^      write_queue_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:std::deque<std::pair<SharedFD,std::shared_ptr<std::vector<char>>>>	file:
+write_queue_	host/frontend/webrtc/lib/ws_connection.cpp	/^  std::deque<WsBuffer> write_queue_;$/;"	m	class:WsConnectionImpl	typeref:typename:std::deque<WsBuffer>	file:
+write_queue_mutex_	host/commands/console_forwarder/main.cpp	/^  std::mutex write_queue_mutex_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:std::mutex	file:
+write_queue_mutex_	host/frontend/webrtc/lib/ws_connection.cpp	/^  std::mutex write_queue_mutex_;$/;"	m	class:WsConnectionImpl	typeref:typename:std::mutex	file:
+writeline	guest/hals/ril/reference-ril/atchannel.c	/^static int writeline (const char *s)$/;"	f	typeref:typename:int	file:
+writer_thread_	host/commands/console_forwarder/main.cpp	/^  std::thread writer_thread_;$/;"	m	class:cuttlefish::ConsoleForwarder	typeref:typename:std::thread	file:
+wsSendJson	host/frontend/webrtc_operator/assets/js/server_connector.js	/^  async #wsSendJson(obj) {$/;"	m	class:WebsocketConnector
+wsi_	host/frontend/webrtc/lib/ws_connection.cpp	/^  struct lws* wsi_;$/;"	m	class:WsConnectionImpl	typeref:struct:lws *	file:
+wsi_	host/libs/websocket/websocket_handler.h	/^  struct lws* wsi_;$/;"	m	class:cuttlefish::DynHandler	typeref:struct:lws *
+wsi_	host/libs/websocket/websocket_handler.h	/^  struct lws* wsi_;$/;"	m	class:cuttlefish::WebSocketHandler	typeref:struct:lws *
+wtap	host/libs/allocd/request.h	/^  wtap,         \/\/ wireless tap$/;"	e	enum:cuttlefish::IfaceType
+x	host/frontend/webrtc/connection_observer.cpp	/^  int32_t x;$/;"	m	struct:cuttlefish::multitouch_slot	typeref:typename:int32_t	file:
+x	host/libs/confui/host_renderer.h	/^    std::uint32_t x, y, w, h;  \/\/ (x, y) is the top left$/;"	m	struct:cuttlefish::confui::ConfUiRenderer::Boundary	typeref:typename:std::uint32_t
+x	host/libs/wayland/wayland_surface.h	/^    int32_t x;$/;"	m	struct:wayland::Surface::Region	typeref:typename:int32_t
+x_	common/libs/confui/protocol_types.h	/^  int x_;$/;"	m	class:cuttlefish::confui::ConfUiUserTouchMessage	typeref:typename:int
+x_res	shared/config/config_foldable.json	/^	"x_res" : 1768,$/;"	n
+x_res	shared/config/config_phone.json	/^	"x_res" : 720,$/;"	n
+x_res	shared/config/config_tablet.json	/^	"x_res" : 2560,$/;"	n
+x_res	shared/config/config_tv.json	/^	"x_res" : 1920,$/;"	n
+xdg_popup_destroy	host/libs/wayland/wayland_shell.cpp	/^void xdg_popup_destroy(wl_client*, wl_resource* popup) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_popup_grab	host/libs/wayland/wayland_shell.cpp	/^void xdg_popup_grab(wl_client*, wl_resource* popup, wl_resource* seat,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_popup_implementation	host/libs/wayland/wayland_shell.cpp	/^const struct xdg_popup_interface xdg_popup_implementation = {$/;"	v	namespace:wayland::__anond268d4620111	typeref:typename:const struct xdg_popup_interface
+xdg_positioner_destroy	host/libs/wayland/wayland_shell.cpp	/^void xdg_positioner_destroy(wl_client*, wl_resource* positioner) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_positioner_implementation	host/libs/wayland/wayland_shell.cpp	/^const struct xdg_positioner_interface xdg_positioner_implementation = {$/;"	v	namespace:wayland::__anond268d4620111	typeref:typename:const struct xdg_positioner_interface
+xdg_positioner_set_anchor	host/libs/wayland/wayland_shell.cpp	/^void xdg_positioner_set_anchor(wl_client*, wl_resource* positioner,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_positioner_set_anchor_rect	host/libs/wayland/wayland_shell.cpp	/^void xdg_positioner_set_anchor_rect(wl_client*, wl_resource* positioner,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_positioner_set_constraint_adjustment	host/libs/wayland/wayland_shell.cpp	/^void xdg_positioner_set_constraint_adjustment(wl_client*,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_positioner_set_gravity	host/libs/wayland/wayland_shell.cpp	/^void xdg_positioner_set_gravity(wl_client*, wl_resource* positioner,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_positioner_set_offset	host/libs/wayland/wayland_shell.cpp	/^void xdg_positioner_set_offset(wl_client*, wl_resource* positioner, int32_t x,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_positioner_set_size	host/libs/wayland/wayland_shell.cpp	/^void xdg_positioner_set_size(wl_client*, wl_resource* positioner, int32_t w,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_shell_create_positioner	host/libs/wayland/wayland_shell.cpp	/^void xdg_shell_create_positioner(wl_client* client, wl_resource* shell,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_shell_destroy	host/libs/wayland/wayland_shell.cpp	/^void xdg_shell_destroy(wl_client*, wl_resource* shell) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_shell_get_xdg_surface	host/libs/wayland/wayland_shell.cpp	/^void xdg_shell_get_xdg_surface(wl_client* client, wl_resource* shell,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_shell_implementation	host/libs/wayland/wayland_shell.cpp	/^const struct xdg_wm_base_interface xdg_shell_implementation = {$/;"	v	namespace:wayland::__anond268d4620111	typeref:typename:const struct xdg_wm_base_interface
+xdg_shell_pong	host/libs/wayland/wayland_shell.cpp	/^void xdg_shell_pong(wl_client*, wl_resource* shell, uint32_t serial) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_surface_ack_configure	host/libs/wayland/wayland_shell.cpp	/^void xdg_surface_ack_configure(wl_client*, wl_resource* surface,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_surface_destroy	host/libs/wayland/wayland_shell.cpp	/^void xdg_surface_destroy(wl_client*, wl_resource* surface) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_surface_get_popup	host/libs/wayland/wayland_shell.cpp	/^void xdg_surface_get_popup(wl_client* client, wl_resource* surface, uint32_t id,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_surface_get_toplevel	host/libs/wayland/wayland_shell.cpp	/^void xdg_surface_get_toplevel(wl_client* client, wl_resource* surface,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_surface_implementation	host/libs/wayland/wayland_shell.cpp	/^const struct xdg_surface_interface xdg_surface_implementation = {$/;"	v	namespace:wayland::__anond268d4620111	typeref:typename:const struct xdg_surface_interface
+xdg_surface_set_window_geometry	host/libs/wayland/wayland_shell.cpp	/^void xdg_surface_set_window_geometry(wl_client*, wl_resource* surface,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_destroy	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_destroy(wl_client*, wl_resource* toplevel) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_implementation	host/libs/wayland/wayland_shell.cpp	/^const struct xdg_toplevel_interface xdg_toplevel_implementation = {$/;"	v	namespace:wayland::__anond268d4620111	typeref:typename:const struct xdg_toplevel_interface
+xdg_toplevel_move	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_move(wl_client*, wl_resource* toplevel, wl_resource* seat,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_resize	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_resize(wl_client*, wl_resource* toplevel, wl_resource* seat,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_set_app_id	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_set_app_id(wl_client*, wl_resource* toplevel,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_set_fullscreen	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_set_fullscreen(wl_client*, wl_resource* toplevel,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_set_max_size	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_set_max_size(wl_client*, wl_resource* toplevel, int32_t w,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_set_maximized	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_set_maximized(wl_client*, wl_resource* toplevel) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_set_min_size	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_set_min_size(wl_client*, wl_resource* toplevel, int32_t w,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_set_minimized	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_set_minimized(wl_client*, wl_resource* toplevel) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_set_parent	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_set_parent(wl_client*, wl_resource* toplevel,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_set_title	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_set_title(wl_client*, wl_resource* toplevel,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_show_window_menu	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_show_window_menu(wl_client*, wl_resource* toplevel,$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_unset_fullscreen	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_unset_fullscreen(wl_client*, wl_resource* toplevel) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xdg_toplevel_unset_maximized	host/libs/wayland/wayland_shell.cpp	/^void xdg_toplevel_unset_maximized(wl_client*, wl_resource* toplevel) {$/;"	f	namespace:wayland::__anond268d4620111	typeref:typename:void
+xi	shared/auto/audio_policy_configuration.xml	/^<audioPolicyConfiguration version="1.0" xmlns:xi="http:\/\/www.w3.org\/2001\/XInclude">$/;"	n	uri:http://www.w3.org/2001/XInclude
+xid	common/libs/utils/network.cpp	/^  __be32 xid;$/;"	m	struct:cuttlefish::Dhcp4ReleaseMessage	typeref:typename:__be32	file:
+xliff	host/commands/modem_simulator/files/numeric_operator.xml	/^<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">$/;"	n	uri:urn:oasis:names:tc:xliff:document:1.2
+xliff	shared/auto/overlay/frameworks/base/core/res/res/values/config.xml	/^<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">$/;"	n	uri:urn:oasis:names:tc:xliff:document:1.2
+xliff	shared/foldable/overlay/frameworks/base/core/res/res/values/config.xml	/^<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">$/;"	n	uri:urn:oasis:names:tc:xliff:document:1.2
+xliff	shared/pc/overlay/frameworks/base/core/res/res/values/config.xml	/^<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">$/;"	n	uri:urn:oasis:names:tc:xliff:document:1.2
+xliff	shared/phone/overlays/core/res/values/config.xml	/^<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">$/;"	n	uri:urn:oasis:names:tc:xliff:document:1.2
+xmlChildWithName	host/commands/start/flag_forwarder.cc	/^xmlNodePtr xmlChildWithName(xmlNodePtr node, const std::string& name) {$/;"	f	namespace:__anon4552bec90111	typeref:typename:xmlNodePtr
+xmlContent	host/commands/start/flag_forwarder.cc	/^std::string xmlContent(xmlNodePtr node) {$/;"	f	namespace:__anon4552bec90111	typeref:typename:std::string
+xsgetn	common/libs/fs/shared_fd_stream.cpp	/^std::streamsize SharedFDStreambuf::xsgetn(char* dst, std::streamsize count) {$/;"	f	class:cuttlefish::SharedFDStreambuf	typeref:typename:std::streamsize
+xsputn	common/libs/fs/shared_fd_stream.cpp	/^std::streamsize SharedFDStreambuf::xsputn(const char* src,$/;"	f	class:cuttlefish::SharedFDStreambuf	typeref:typename:std::streamsize
+y	host/frontend/webrtc/connection_observer.cpp	/^  int32_t y;$/;"	m	struct:cuttlefish::multitouch_slot	typeref:typename:int32_t	file:
+y	host/libs/confui/host_renderer.h	/^    std::uint32_t x, y, w, h;  \/\/ (x, y) is the top left$/;"	m	struct:cuttlefish::confui::ConfUiRenderer::Boundary	typeref:typename:std::uint32_t
+y	host/libs/wayland/wayland_surface.h	/^    int32_t y;$/;"	m	struct:wayland::Surface::Region	typeref:typename:int32_t
+y_	common/libs/confui/protocol_types.h	/^  int y_;$/;"	m	class:cuttlefish::confui::ConfUiUserTouchMessage	typeref:typename:int
+y_	host/frontend/webrtc/cvd_video_frame_buffer.h	/^  std::vector<std::uint8_t> y_;$/;"	m	class:cuttlefish::CvdVideoFrameBuffer	typeref:typename:std::vector<std::uint8_t>
+y_res	shared/config/config_foldable.json	/^	"y_res" : 2208,$/;"	n
+y_res	shared/config/config_phone.json	/^	"y_res" : 1280,$/;"	n
+y_res	shared/config/config_tablet.json	/^	"y_res" : 1800,$/;"	n
+y_res	shared/config/config_tv.json	/^	"y_res" : 1080,$/;"	n
+yuv_frame_updated_	guest/hals/camera/vsock_frame_provider.h	/^  std::condition_variable yuv_frame_updated_;$/;"	m	class:cuttlefish::VsockFrameProvider	typeref:typename:std::condition_variable
+zwp_linux_buffer_params_implementation	host/libs/wayland/wayland_dmabuf.cpp	/^    zwp_linux_buffer_params_implementation = {$/;"	v	namespace:wayland::__anon8f5be4990111	typeref:typename:const struct zwp_linux_buffer_params_v1_interface
+zwp_linux_dmabuf_v1_implementation	host/libs/wayland/wayland_dmabuf.cpp	/^    zwp_linux_dmabuf_v1_implementation = {$/;"	v	namespace:wayland::__anon8f5be4990111	typeref:typename:const struct zwp_linux_dmabuf_v1_interface
+~AdbChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^AdbChannelHandler::~AdbChannelHandler() { adb_channel_->UnregisterObserver(); }$/;"	f	class:cuttlefish::webrtc_streaming::AdbChannelHandler
+~AdbHandler	host/frontend/webrtc/adb_handler.cpp	/^AdbHandler::~AdbHandler() {$/;"	f	class:cuttlefish::webrtc_streaming::AdbHandler
+~Archive	common/libs/utils/archive.cpp	/^Archive::~Archive() {$/;"	f	class:cuttlefish::Archive
+~AudioCommand	host/libs/audio_connector/commands.cpp	/^AudioCommand::~AudioCommand() {$/;"	f	class:cuttlefish::AudioCommand
+~BluetoothChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^BluetoothChannelHandler::~BluetoothChannelHandler() {$/;"	f	class:cuttlefish::webrtc_streaming::BluetoothChannelHandler
+~BluetoothHandler	host/frontend/webrtc/bluetooth_handler.cpp	/^BluetoothHandler::~BluetoothHandler() {$/;"	f	class:cuttlefish::webrtc_streaming::BluetoothHandler
+~CachedStreamBuffer	guest/hals/camera/cached_stream_buffer.cpp	/^CachedStreamBuffer::~CachedStreamBuffer() {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::CachedStreamBuffer
+~CameraChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^CameraChannelHandler::~CameraChannelHandler() {$/;"	f	class:cuttlefish::webrtc_streaming::CameraChannelHandler
+~CameraStreamer	host/frontend/webrtc/lib/camera_streamer.cpp	/^CameraStreamer::~CameraStreamer() { Disconnect(); }$/;"	f	class:cuttlefish::webrtc_streaming::CameraStreamer
+~ChannelMonitor	host/commands/modem_simulator/channel_monitor.cpp	/^ChannelMonitor::~ChannelMonitor() {$/;"	f	class:cuttlefish::ChannelMonitor
+~ClientHandler	host/frontend/webrtc/lib/client_handler.cpp	/^ClientHandler::~ClientHandler() {$/;"	f	class:cuttlefish::webrtc_streaming::ClientHandler
+~Closer	host/libs/graphics_detector/graphics_detector.cpp	/^  ~Closer() { on_close_(); }$/;"	f	class:cuttlefish::__anon29a199ff0111::Closer	file:
+~Command	common/libs/utils/subprocess.cpp	/^Command::~Command() {$/;"	f	class:cuttlefish::Command
+~ConnectionObserverImpl	host/frontend/webrtc/connection_observer.cpp	/^  virtual ~ConnectionObserverImpl() {$/;"	f	class:cuttlefish::ConnectionObserverImpl	file:
+~ControlChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^ControlChannelHandler::~ControlChannelHandler() {$/;"	f	class:cuttlefish::webrtc_streaming::ControlChannelHandler
+~ControlMessage	common/libs/utils/unix_sockets.cpp	/^ControlMessage::~ControlMessage() {$/;"	f	class:cuttlefish::ControlMessage
+~CurlWrapperImpl	host/commands/fetcher/curl_wrapper.cc	/^  ~CurlWrapperImpl() { curl_easy_cleanup(curl_); }$/;"	f	class:cuttlefish::__anondfffca8d0111::CurlWrapperImpl	file:
+~CvdBootStateMachine	host/commands/run_cvd/boot_state_machine.cc	/^  ~CvdBootStateMachine() { boot_event_handler_.join(); }$/;"	f	class:cuttlefish::__anone7ed366f0111::CvdBootStateMachine	file:
+~CvdVideoFrameBuffer	host/frontend/webrtc/cvd_video_frame_buffer.cpp	/^CvdVideoFrameBuffer::~CvdVideoFrameBuffer() {$/;"	f	class:cuttlefish::CvdVideoFrameBuffer
+~Feature	host/libs/config/feature.cpp	/^Feature::~Feature() {}$/;"	f	class:cuttlefish::Feature
+~FetcherConfig	host/libs/config/fetcher_config.cpp	/^FetcherConfig::~FetcherConfig() {$/;"	f	class:cuttlefish::FetcherConfig
+~FileInstance	common/libs/fs/shared_fd.h	/^  virtual ~FileInstance() { Close(); }$/;"	f	class:cuttlefish::FileInstance
+~GnssGrpcProxyServiceImpl	host/commands/gnss_grpc_proxy/gnss_grpc_proxy.cpp	/^    ~GnssGrpcProxyServiceImpl() {$/;"	f	class:GnssGrpcProxyServiceImpl	file:
+~GuestSession	guest/hals/confirmationui/guest_session.h	/^    ~GuestSession() {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::GuestSession
+~HostServer	host/libs/confui/host_server.h	/^  virtual ~HostServer() {}$/;"	f	class:cuttlefish::confui::HostServer
+~Impl	host/commands/secure_env/in_process_tpm.cpp	/^  ~Impl() {$/;"	f	class:cuttlefish::InProcessTpm::Impl	file:
+~InputChannelHandler	host/frontend/webrtc/lib/client_handler.cpp	/^InputChannelHandler::~InputChannelHandler() {$/;"	f	class:cuttlefish::webrtc_streaming::InputChannelHandler
+~KernelLogEventsHandler	host/frontend/webrtc/kernel_log_events_handler.cpp	/^KernelLogEventsHandler::~KernelLogEventsHandler() {$/;"	f	class:cuttlefish::KernelLogEventsHandler
+~KmParamSet	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^    ~KmParamSet() { delete[] params; }$/;"	f	class:keymaster::V4_1::__anon49de69e60111::KmParamSet	file:
+~ModemSimulator	host/commands/modem_simulator/modem_simulator.cpp	/^ModemSimulator::~ModemSimulator() {$/;"	f	class:cuttlefish::ModemSimulator
+~NetlinkClient	common/libs/net/netlink_client.h	/^  virtual ~NetlinkClient() {}$/;"	f	class:cuttlefish::NetlinkClient
+~ObjectSlot	host/commands/secure_env/tpm_resource_manager.cpp	/^TpmResourceManager::ObjectSlot::~ObjectSlot() {$/;"	f	class:cuttlefish::TpmResourceManager::ObjectSlot
+~ReleaseFence	guest/hals/camera/cached_stream_buffer.cpp	/^ReleaseFence::~ReleaseFence() {$/;"	f	class:android::hardware::camera::device::V3_4::implementation::ReleaseFence
+~RemoteGateKeeperDevice	guest/hals/gatekeeper/remote/remote_gatekeeper.cpp	/^RemoteGateKeeperDevice::~RemoteGateKeeperDevice() {$/;"	f	class:gatekeeper::RemoteGateKeeperDevice
+~RemoteKeyMintDevice	guest/hals/keymint/remote/remote_keymint_device.cpp	/^RemoteKeyMintDevice::~RemoteKeyMintDevice() {}$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintDevice
+~RemoteKeyMintOperation	guest/hals/keymint/remote/remote_keymint_operation.cpp	/^RemoteKeyMintOperation::~RemoteKeyMintOperation() {$/;"	f	class:aidl::android::hardware::security::keymint::RemoteKeyMintOperation
+~RemoteKeymaster	guest/hals/keymaster/remote/remote_keymaster.cpp	/^RemoteKeymaster::~RemoteKeymaster() {$/;"	f	class:keymaster::RemoteKeymaster
+~RemoteKeymaster	guest/hals/keymint/remote/remote_keymaster.cpp	/^RemoteKeymaster::~RemoteKeymaster() {}$/;"	f	class:keymaster::RemoteKeymaster
+~RemoteKeymaster4Device	guest/hals/keymaster/remote/remote_keymaster4_device.cpp	/^RemoteKeymaster4Device::~RemoteKeymaster4Device() {}$/;"	f	class:keymaster::V4_1::RemoteKeymaster4Device
+~RemoteSecureClock	guest/hals/keymint/remote/remote_secure_clock.cpp	/^RemoteSecureClock::~RemoteSecureClock() {}$/;"	f	class:aidl::android::hardware::security::secureclock::RemoteSecureClock
+~RemoteSharedSecret	guest/hals/keymint/remote/remote_shared_secret.cpp	/^RemoteSharedSecret::~RemoteSharedSecret() {}$/;"	f	class:aidl::android::hardware::security::sharedsecret::RemoteSharedSecret
+~ResourceManager	host/libs/allocd/resource_manager.cpp	/^ResourceManager::~ResourceManager() {$/;"	f	class:cuttlefish::ResourceManager
+~RilSocket	guest/hals/ril/reference-libril/RilSocket.h	/^        virtual ~RilSocket(){}$/;"	f	class:RilSocket
+~ScopedMMap	common/libs/fs/shared_fd.cpp	/^ScopedMMap::~ScopedMMap() {$/;"	f	class:cuttlefish::ScopedMMap
+~Session	host/libs/allocd/resource_manager.h	/^  ~Session() { ReleaseAllResources(); }$/;"	f	class:cuttlefish::Session
+~ShmBuffer	host/libs/audio_connector/buffers.cpp	/^ShmBuffer::~ShmBuffer() {$/;"	f	class:cuttlefish::ShmBuffer
+~SocketSender	common/frontend/socket_vsock_proxy/main.cpp	/^  ~SocketSender() {$/;"	f	class:__anon913036200111::SocketSender	file:
+~SoftGateKeeper	host/commands/secure_env/soft_gatekeeper.h	/^    virtual ~SoftGateKeeper() {}$/;"	f	class:gatekeeper::SoftGateKeeper
+~SysVMessageQueue	host/libs/msg_queue/msg_queue.cc	/^SysVMessageQueue::~SysVMessageQueue(void) {$/;"	f	class:cuttlefish::SysVMessageQueue
+~TestTpm	host/commands/secure_env/test_tpm.cpp	/^TestTpm::~TestTpm() { Esys_Finalize(&esys_); }$/;"	f	class:cuttlefish::TestTpm
+~ThreadJoiner	common/libs/utils/subprocess.cpp	/^  ~ThreadJoiner() {$/;"	f	class:cuttlefish::ThreadJoiner	file:
+~ThreadLooper	host/commands/modem_simulator/thread_looper.cpp	/^ThreadLooper::~ThreadLooper() { Stop(); }$/;"	f	class:cuttlefish::ThreadLooper
+~TpmKeymasterEnforcement	host/commands/secure_env/tpm_keymaster_enforcement.cpp	/^TpmKeymasterEnforcement::~TpmKeymasterEnforcement() {$/;"	f	class:cuttlefish::TpmKeymasterEnforcement
+~TpmResourceManager	host/commands/secure_env/tpm_resource_manager.cpp	/^TpmResourceManager::~TpmResourceManager() {$/;"	f	class:cuttlefish::TpmResourceManager
+~TrustyConfirmationUI	guest/hals/confirmationui/TrustyConfirmationUI.cpp	/^TrustyConfirmationUI::~TrustyConfirmationUI() {$/;"	f	class:android::hardware::confirmationui::V1_0::implementation::TrustyConfirmationUI
+~VirtualDeviceBase	guest/commands/vsoc_input_service/virtual_device_base.cpp	/^VirtualDeviceBase::~VirtualDeviceBase() {$/;"	f	class:VirtualDeviceBase
+~VsockCameraDevice	guest/hals/camera/vsock_camera_device_3_4.cpp	/^VsockCameraDevice::~VsockCameraDevice() { ALOGI("%s", __FUNCTION__); }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDevice
+~VsockCameraDeviceSession	guest/hals/camera/vsock_camera_device_session_3_4.cpp	/^VsockCameraDeviceSession::~VsockCameraDeviceSession() { close(); }$/;"	f	class:android::hardware::camera::device::V3_4::implementation::VsockCameraDeviceSession
+~VsockCameraProvider	guest/hals/camera/vsock_camera_provider_2_7.cpp	/^VsockCameraProvider::~VsockCameraProvider() {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraProvider
+~VsockCameraServer	guest/hals/camera/vsock_camera_server.cpp	/^VsockCameraServer::~VsockCameraServer() {$/;"	f	class:android::hardware::camera::provider::V2_7::implementation::VsockCameraServer
+~VsockConnection	common/libs/utils/vsock_connection.cpp	/^VsockConnection::~VsockConnection() { Disconnect(); }$/;"	f	class:cuttlefish::VsockConnection
+~VsockFrameProvider	guest/hals/camera/vsock_frame_provider.cpp	/^VsockFrameProvider::~VsockFrameProvider() { stop(); }$/;"	f	class:cuttlefish::VsockFrameProvider
+~VsockServerConnection	common/libs/utils/vsock_connection.cpp	/^VsockServerConnection::~VsockServerConnection() { ServerShutdown(); }$/;"	f	class:cuttlefish::VsockServerConnection
+~WaylandServer	host/libs/wayland/wayland_server.cpp	/^WaylandServer::~WaylandServer() {$/;"	f	class:wayland::WaylandServer
+~WmediumdController	host/libs/wmediumd_controller/wmediumd_controller.h	/^  virtual ~WmediumdController() {}$/;"	f	class:cuttlefish::WmediumdController
+~WmediumdMessage	host/libs/wmediumd_controller/wmediumd_api_protocol.h	/^  virtual ~WmediumdMessage() {}$/;"	f	class:cuttlefish::WmediumdMessage
+~WsConnectionContextImpl	host/frontend/webrtc/lib/ws_connection.cpp	/^WsConnectionContextImpl::~WsConnectionContextImpl() {$/;"	f	class:WsConnectionContextImpl
+~WsConnectionImpl	host/frontend/webrtc/lib/ws_connection.cpp	/^WsConnectionImpl::~WsConnectionImpl() {$/;"	f	class:WsConnectionImpl
diff --git a/tests/hal/hal_implementation_test.cpp b/tests/hal/hal_implementation_test.cpp
index d05f077..66b8225 100644
--- a/tests/hal/hal_implementation_test.cpp
+++ b/tests/hal/hal_implementation_test.cpp
@@ -17,15 +17,16 @@
 #include <android-base/logging.h>
 #include <android-base/strings.h>
 #include <gtest/gtest.h>
-#include <hidl/metadata.h>
 #include <hidl-util/FQName.h>
+#include <hidl/metadata.h>
 #include <vintf/VintfObject.h>
 
 using namespace android;
 
+// clang-format off
 static const std::set<std::string> kKnownMissingHidl = {
-    "[email protected]",
     "[email protected]",
+    "[email protected]", // deprecated, see b/141930622
     "[email protected]", // deprecated, see b/37226359
     "[email protected]",
     "[email protected]",
@@ -47,12 +48,13 @@
     "[email protected]",
     "[email protected]",
     "[email protected]",
+    "[email protected]",
     "[email protected]",
     "[email protected]",
     "[email protected]",
-    "[email protected]",
     "[email protected]", // deprecated, see b/149050985, b/149050733
     "[email protected]",
+    "[email protected]", // deprecated, see b/205760700
     "[email protected]", // is sub-interface of gnss
     "[email protected]",
     "[email protected]",
@@ -62,7 +64,8 @@
     "[email protected]",
     "[email protected]",
     "[email protected]", // converted to AIDL, see b/177470478
-    "[email protected]",
+    "[email protected]", // converted to AIDL, see b/177269435
+    "[email protected]", // converted to AIDL, see b/205000342
     "[email protected]",
     "[email protected]", // Replaced by KeyMint
     "[email protected]",
@@ -89,219 +92,314 @@
     "[email protected]",
     "[email protected]",
     "[email protected]",
-    "[email protected]",
-    "[email protected]",
     "[email protected]",
     "[email protected]",
     "[email protected]",
+    "[email protected]", // Converted to AIDL (see b/170260236)
+};
+// clang-format on
+
+struct VersionedAidlPackage {
+  std::string name;
+  size_t version;
+  bool operator<(const VersionedAidlPackage& rhs) const {
+    return (name < rhs.name || (name == rhs.name && version < rhs.version));
+  }
 };
 
-static const std::set<std::string> kKnownMissingAidl = {
+static const std::set<VersionedAidlPackage> kKnownMissingAidl = {
     // types-only packages, which never expect a default implementation
-    "android.hardware.biometrics.common.",
-    "android.hardware.common.",
-    "android.hardware.common.fmq.",
-    "android.hardware.graphics.common.",
+    {"android.hardware.audio.common.", 1},
+    {"android.hardware.biometrics.common.", 1},
+    {"android.hardware.common.", 1},
+    {"android.hardware.common.", 2},
+    {"android.hardware.common.fmq.", 1},
+    {"android.hardware.graphics.common.", 1},
+    {"android.hardware.graphics.common.", 2},
+
+    // No implementations on cuttlefish for wifi aidl hal
+    {"android.hardware.wifi.hostapd.", 1},
+
+    // No implementations on cuttlefish for omapi aidl hal
+    {"android.se.omapi.", 1},
+
+    // Temporarily treat the dice hal default implementation as missing until it
+    // and its dependencies have landed. b/198197213
+    {"android.hardware.security.dice.", 1},
 
     // These KeyMaster types are in an AIDL types-only HAL because they're used
     // by the Identity Credential AIDL HAL. Remove this when fully porting
     // KeyMaster to AIDL.
-    "android.hardware.keymaster.",
+    {"android.hardware.keymaster.", 1},
+    {"android.hardware.keymaster.", 2},
+    {"android.hardware.keymaster.", 3},
+
+    {"android.media.audio.common.", 1},
 
     // These types are only used in Automotive.
-    "android.automotive.computepipe.registry.",
-    "android.automotive.computepipe.runner.",
-    "android.automotive.watchdog.",
-    "android.frameworks.automotive.powerpolicy.",
-    "android.frameworks.automotive.telemetry.",
-    "android.hardware.automotive.audiocontrol.",
-    "android.hardware.automotive.occupant_awareness.",
+    {"android.automotive.computepipe.registry.", 1},
+    {"android.automotive.computepipe.runner.", 1},
+    {"android.automotive.watchdog.", 2},
+    {"android.automotive.watchdog.", 3},
+    {"android.frameworks.automotive.powerpolicy.", 1},
+    {"android.frameworks.automotive.telemetry.", 1},
+    {"android.hardware.automotive.audiocontrol.", 1},
+    {"android.hardware.automotive.occupant_awareness.", 1},
+
+    // No implementation in AOSP for supplicant aidl hal (b/210166896)
+    {"android.hardware.wifi.supplicant.", 1},
+
+    // These versions need to be implemented (b/198331776)
+    {"android.hardware.radio.", 1},
+    {"android.hardware.radio.data.", 1},
+    {"android.hardware.radio.messaging.", 1},
+    {"android.hardware.radio.modem.", 1},
+    {"android.hardware.radio.network.", 1},
+    {"android.hardware.radio.sim.", 1},
+    {"android.hardware.radio.voice.", 1},
+
+    // This version needs to be implemented (b/198331886)
+    {"android.hardware.radio.config.", 1},
+
+    // These versions need to be implemented (b/203490261)
+    {"android.hardware.bluetooth.audio.", 1},
+};
+
+static const std::set<VersionedAidlPackage> kComingSoonAidl = {
+    {"android.hardware.wifi.hostapd.", 1},
 };
 
 // AOSP packages which are never considered
 static bool isHidlPackageConsidered(const FQName& name) {
-    static std::vector<std::string> gAospExclude = {
-        // packages not implemented now that we never expect to be implemented
-        "android.hardware.tests",
-        // packages not registered with hwservicemanager, usually sub-interfaces
-        "android.hardware.camera.device",
-    };
-    for (const std::string& package : gAospExclude) {
-        if (name.inPackage(package)) {
-            return false;
-        }
+  static std::vector<std::string> gAospExclude = {
+      // packages not implemented now that we never expect to be implemented
+      "android.hardware.tests",
+      // packages not registered with hwservicemanager, usually sub-interfaces
+      "android.hardware.camera.device",
+  };
+  for (const std::string& package : gAospExclude) {
+    if (name.inPackage(package)) {
+      return false;
     }
-    return true;
+  }
+  return true;
 }
 
 static bool isAospHidlInterface(const FQName& name) {
-    static const std::vector<std::string> kAospPackages = {
-        "android.hidl",
-        "android.hardware",
-        "android.frameworks",
-        "android.system",
-    };
-    for (const std::string& package : kAospPackages) {
-        if (name.inPackage(package)) {
-            return true;
-        }
+  static const std::vector<std::string> kAospPackages = {
+      "android.hidl",
+      "android.hardware",
+      "android.frameworks",
+      "android.system",
+  };
+  for (const std::string& package : kAospPackages) {
+    if (name.inPackage(package)) {
+      return true;
     }
-    return false;
+  }
+  return false;
 }
 
 static std::set<FQName> allTreeHidlInterfaces() {
-    std::set<FQName> ret;
-    for (const auto& iface : HidlInterfaceMetadata::all()) {
-        FQName f;
-        CHECK(f.setTo(iface.name)) << iface.name;
-        ret.insert(f);
-    }
-    return ret;
+  std::set<FQName> ret;
+  for (const auto& iface : HidlInterfaceMetadata::all()) {
+    FQName f;
+    CHECK(f.setTo(iface.name)) << iface.name;
+    ret.insert(f);
+  }
+  return ret;
 }
 
 static std::set<FQName> allHidlManifestInterfaces() {
-    std::set<FQName> ret;
-    auto setInserter = [&] (const vintf::ManifestInstance& i) -> bool {
-        if (i.format() != vintf::HalFormat::HIDL) {
-            return true;  // continue
-        }
-        ret.insert(i.getFqInstance().getFqName());
-        return true;  // continue
-    };
-    vintf::VintfObject::GetDeviceHalManifest()->forEachInstance(setInserter);
-    vintf::VintfObject::GetFrameworkHalManifest()->forEachInstance(setInserter);
-    return ret;
+  std::set<FQName> ret;
+  auto setInserter = [&](const vintf::ManifestInstance& i) -> bool {
+    if (i.format() != vintf::HalFormat::HIDL) {
+      return true;  // continue
+    }
+    ret.insert(i.getFqInstance().getFqName());
+    return true;  // continue
+  };
+  vintf::VintfObject::GetDeviceHalManifest()->forEachInstance(setInserter);
+  vintf::VintfObject::GetFrameworkHalManifest()->forEachInstance(setInserter);
+  return ret;
 }
 
 static bool isAospAidlInterface(const std::string& name) {
-    return base::StartsWith(name, "android.") &&
-        !base::StartsWith(name, "android.hardware.tests.") &&
-        !base::StartsWith(name, "android.aidl.tests");
+  return base::StartsWith(name, "android.") &&
+         !base::StartsWith(name, "android.hardware.tests.") &&
+         !base::StartsWith(name, "android.aidl.tests");
 }
 
-static std::set<std::string> allAidlManifestInterfaces() {
-    std::set<std::string> ret;
-    auto setInserter = [&] (const vintf::ManifestInstance& i) -> bool {
-        if (i.format() != vintf::HalFormat::AIDL) {
-            return true;  // continue
-        }
-        ret.insert(i.package() + "." + i.interface());
-        return true;  // continue
-    };
-    vintf::VintfObject::GetDeviceHalManifest()->forEachInstance(setInserter);
-    vintf::VintfObject::GetFrameworkHalManifest()->forEachInstance(setInserter);
-    return ret;
+static std::set<VersionedAidlPackage> allAidlManifestInterfaces() {
+  std::set<VersionedAidlPackage> ret;
+  auto setInserter = [&](const vintf::ManifestInstance& i) -> bool {
+    if (i.format() != vintf::HalFormat::AIDL) {
+      return true;  // continue
+    }
+    ret.insert({i.package() + "." + i.interface(), i.version().minorVer});
+    return true;  // continue
+  };
+  vintf::VintfObject::GetDeviceHalManifest()->forEachInstance(setInserter);
+  vintf::VintfObject::GetFrameworkHalManifest()->forEachInstance(setInserter);
+  return ret;
 }
 
 TEST(Hal, AllHidlInterfacesAreInAosp) {
-    for (const FQName& name : allHidlManifestInterfaces()) {
-      EXPECT_TRUE(isAospHidlInterface(name))
-          << "This device should only have AOSP interfaces, not: "
-          << name.string();
-    }
+  for (const FQName& name : allHidlManifestInterfaces()) {
+    EXPECT_TRUE(isAospHidlInterface(name))
+        << "This device should only have AOSP interfaces, not: "
+        << name.string();
+  }
 }
 
 TEST(Hal, HidlInterfacesImplemented) {
-    // instances -> major version -> minor versions
-    std::map<std::string, std::map<size_t, std::set<size_t>>> unimplemented;
+  // instances -> major version -> minor versions
+  std::map<std::string, std::map<size_t, std::set<size_t>>> unimplemented;
 
-    for (const FQName& f : allTreeHidlInterfaces()) {
-        if (!isAospHidlInterface(f)) continue;
-        if (!isHidlPackageConsidered(f)) continue;
+  for (const FQName& f : allTreeHidlInterfaces()) {
+    if (!isAospHidlInterface(f)) continue;
+    if (!isHidlPackageConsidered(f)) continue;
 
-        unimplemented[f.package()][f.getPackageMajorVersion()].insert(f.getPackageMinorVersion());
+    unimplemented[f.package()][f.getPackageMajorVersion()].insert(
+        f.getPackageMinorVersion());
+  }
+
+  // we'll be removing items from this which we know are missing
+  // in order to be left with those elements which we thought we
+  // knew were missing but are actually present
+  std::set<std::string> thoughtMissing = kKnownMissingHidl;
+
+  for (const FQName& f : allHidlManifestInterfaces()) {
+    if (thoughtMissing.erase(f.getPackageAndVersion().string()) > 0) {
+      ADD_FAILURE() << "Instance in missing list, but available: "
+                    << f.string();
     }
 
-    // we'll be removing items from this which we know are missing
-    // in order to be left with those elements which we thought we
-    // knew were missing but are actually present
-    std::set<std::string> thoughtMissing = kKnownMissingHidl;
+    std::set<size_t>& minors =
+        unimplemented[f.package()][f.getPackageMajorVersion()];
+    size_t minor = f.getPackageMinorVersion();
 
-    for (const FQName& f : allHidlManifestInterfaces()) {
-        if (thoughtMissing.erase(f.getPackageAndVersion().string()) > 0) {
-             ADD_FAILURE() << "Instance in missing list, but available: " << f.string();
-        }
+    auto it = minors.find(minor);
+    if (it == minors.end()) continue;
 
-        std::set<size_t>& minors = unimplemented[f.package()][f.getPackageMajorVersion()];
-        size_t minor = f.getPackageMinorVersion();
+    // if 1.2 is implemented, also considere 1.0, 1.1 implemented
+    minors.erase(minors.begin(), std::next(it));
+  }
 
-        auto it = minors.find(minor);
-        if (it == minors.end()) continue;
+  for (const auto& [package, minorsPerMajor] : unimplemented) {
+    for (const auto& [major, minors] : minorsPerMajor) {
+      if (minors.empty()) continue;
 
-        // if 1.2 is implemented, also considere 1.0, 1.1 implemented
-        minors.erase(minors.begin(), std::next(it));
+      size_t maxMinor = *minors.rbegin();
+
+      FQName missing;
+      ASSERT_TRUE(missing.setTo(package, major, maxMinor));
+
+      if (thoughtMissing.erase(missing.string()) > 0) continue;
+
+      ADD_FAILURE() << "Missing implementation from " << missing.string();
     }
+  }
 
-    for (const auto& [package, minorsPerMajor] : unimplemented) {
-        for (const auto& [major, minors] : minorsPerMajor) {
-            if (minors.empty()) continue;
-
-            size_t maxMinor = *minors.rbegin();
-
-            FQName missing;
-            ASSERT_TRUE(missing.setTo(package, major, maxMinor));
-
-            if (thoughtMissing.erase(missing.string()) > 0) continue;
-
-            ADD_FAILURE() << "Missing implementation from " << missing.string();
-        }
-    }
-
-    for (const std::string& missing : thoughtMissing) {
-        ADD_FAILURE() << "Instance in missing list and cannot find it anywhere: " << missing
-                  << " (multiple versions in missing list?)";
-    }
+  for (const std::string& missing : thoughtMissing) {
+    ADD_FAILURE() << "Instance in missing list and cannot find it anywhere: "
+                  << missing << " (multiple versions in missing list?)";
+  }
 }
 
 TEST(Hal, AllAidlInterfacesAreInAosp) {
-    for (const std::string& name : allAidlManifestInterfaces()) {
-      EXPECT_TRUE(isAospAidlInterface(name))
-          << "This device should only have AOSP interfaces, not: " << name;
-    }
+  for (const auto& package : allAidlManifestInterfaces()) {
+    EXPECT_TRUE(isAospAidlInterface(package.name))
+        << "This device should only have AOSP interfaces, not: "
+        << package.name;
+  }
 }
 
 // android.hardware.foo.IFoo -> android.hardware.foo.
 std::string getAidlPackage(const std::string& aidlType) {
-    size_t lastDot = aidlType.rfind('.');
-    CHECK(lastDot != std::string::npos);
-    return aidlType.substr(0, lastDot + 1);
+  size_t lastDot = aidlType.rfind('.');
+  CHECK(lastDot != std::string::npos);
+  return aidlType.substr(0, lastDot + 1);
 }
 
+struct AidlPackageCheck {
+  bool hasRegistration;
+  bool knownMissing;
+};
+
 TEST(Hal, AidlInterfacesImplemented) {
-    std::set<std::string> manifest = allAidlManifestInterfaces();
-    std::set<std::string> thoughtMissing = kKnownMissingAidl;
+  std::set<VersionedAidlPackage> manifest = allAidlManifestInterfaces();
+  std::set<VersionedAidlPackage> thoughtMissing = kKnownMissingAidl;
 
-    for (const auto& iface : AidlInterfaceMetadata::all()) {
-        ASSERT_FALSE(iface.types.empty()) << iface.name;  // sanity
-        if (std::none_of(iface.types.begin(), iface.types.end(), isAospAidlInterface)) continue;
-        if (iface.stability != "vintf") continue;
+  for (const auto& treePackage : AidlInterfaceMetadata::all()) {
+    ASSERT_FALSE(treePackage.types.empty()) << treePackage.name;
+    if (std::none_of(treePackage.types.begin(), treePackage.types.end(),
+                     isAospAidlInterface))
+      continue;
+    if (treePackage.stability != "vintf") continue;
 
-        bool hasRegistration = false;
-        bool knownMissing = false;
-        for (const std::string& type : iface.types) {
-            if (manifest.erase(type) > 0) hasRegistration = true;
-            if (thoughtMissing.erase(getAidlPackage(type)) > 0)  knownMissing = true;
+    // expect versions from 1 to latest version. If the package has development
+    // the latest version is the latest known version + 1. Each of these need
+    // to be checked for registration and knownMissing.
+    std::map<size_t, AidlPackageCheck> expectedVersions;
+    for (const auto version : treePackage.versions) {
+      expectedVersions[version] = {false, false};
+    }
+    if (treePackage.has_development) {
+      size_t version =
+          treePackage.versions.empty() ? 1 : *treePackage.versions.rbegin() + 1;
+      expectedVersions[version] = {false, false};
+    }
+
+    // Check all types and versions defined by the package for registration.
+    // The package version is considered registered if any of those types are
+    // present in the manifest with the same version.
+    // The package version is considered known missing if it is found in
+    // thoughtMissing.
+    bool latestRegistered = false;
+    for (const std::string& type : treePackage.types) {
+      for (auto& [version, check] : expectedVersions) {
+        if (manifest.erase({type, version}) > 0) {
+          if (version == expectedVersions.rbegin()->first) {
+            latestRegistered = true;
+          }
+          check.hasRegistration = true;
+        }
+        if (thoughtMissing.erase({getAidlPackage(type), version}) > 0)
+          check.knownMissing = true;
+      }
+    }
+
+    if (!latestRegistered && !expectedVersions.rbegin()->second.knownMissing) {
+      ADD_FAILURE() << "The latest version ("
+                    << expectedVersions.rbegin()->first
+                    << ") of the package is not implemented: "
+                    << treePackage.name
+                    << " which declares the following types:\n    "
+                    << base::Join(treePackage.types, "\n    ");
+    }
+
+    for (const auto& [version, check] : expectedVersions) {
+      if (check.knownMissing) {
+        if (check.hasRegistration) {
+          ADD_FAILURE() << "Package in missing list, but available: "
+                        << treePackage.name << " V" << version
+                        << " which declares the following types:\n    "
+                        << base::Join(treePackage.types, "\n    ");
         }
 
-        if (knownMissing) {
-            if (hasRegistration) {
-                ADD_FAILURE() << "Interface in missing list, but available: " << iface.name
-                          << " which declares the following types:\n    "
-                          << base::Join(iface.types, "\n    ");
-            }
-
-            continue;
-        }
-
-        EXPECT_TRUE(hasRegistration) << iface.name << " which declares the following types:\n    "
-            << base::Join(iface.types, "\n    ");
+        continue;
+      }
     }
+  }
 
-    for (const std::string& iface : thoughtMissing) {
-        ADD_FAILURE() << "Interface in manifest list and cannot find it anywhere: " << iface;
-    }
+  for (const auto& package : thoughtMissing) {
+    ADD_FAILURE() << "Interface in missing list and cannot find it anywhere: "
+                  << package.name << " V" << package.version;
+  }
 
-    for (const std::string& iface : manifest) {
-        ADD_FAILURE() << "Can't find manifest entry in tree: " << iface;
-    }
+  for (const auto& package : manifest) {
+    ADD_FAILURE() << "Can't find manifest entry in tree: " << package.name
+                  << " version: " << package.version;
+  }
 }
diff --git a/tests/powerwash/src/com/android/cuttlefish/tests/PowerwashTest.java b/tests/powerwash/src/com/android/cuttlefish/tests/PowerwashTest.java
index 84fa852..42d9dda 100644
--- a/tests/powerwash/src/com/android/cuttlefish/tests/PowerwashTest.java
+++ b/tests/powerwash/src/com/android/cuttlefish/tests/PowerwashTest.java
@@ -15,15 +15,19 @@
  */
 package com.android.cuttlefish.tests;
 
+import static org.junit.Assert.assertTrue;
+
 import com.android.tradefed.device.cloud.RemoteAndroidVirtualDevice;
+import com.android.tradefed.device.internal.DeviceResetHandler;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
 import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
 
-import java.io.File;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.File;
+
 /**
  * Test powerwash function.
  *
@@ -48,14 +52,18 @@
         if (file == null) {
             Assert.fail("Setup failed: tmp file failed to persist after device reboot.");
         }
-
+        boolean success = false;
         if (getDevice() instanceof RemoteAndroidVirtualDevice) {
-            ((RemoteAndroidVirtualDevice) getDevice()).powerwashGce();
+            success = ((RemoteAndroidVirtualDevice) getDevice()).powerwashGce();
         } else {
-            Assert.fail("This test only supports running in test lab setup.");
+            // We don't usually expect tests to use our feature server, but in this case we are
+            // validating the feature itself so it's fine
+            DeviceResetHandler handler = new DeviceResetHandler(getInvocationContext());
+            success = handler.resetDevice(getDevice());
         }
+        assertTrue("Powerwash reset failed", success);
 
-        // Verify that the device is back online and pre-xisting file is gone.
+        // Verify that the device is back online and pre-existing file is gone.
         file = getDevice().pullFile(tmpFile);
         if (file != null) {
             Assert.fail("Powerwash failed: pre-existing file still exists.");
diff --git a/tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java b/tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java
index 3c5db3f..534f676 100644
--- a/tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java
+++ b/tests/ril/src/com/android/cuttlefish/ril/tests/RilE2eTests.java
@@ -35,7 +35,6 @@
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -141,8 +140,6 @@
         Assert.assertSame(TelephonyManager.DATA_CONNECTED, mTeleManager.getDataState());
     }
 
-    // See b/74256305
-    @Ignore
     @Test
     public void testSignalLevels() throws Exception {
         CellInfoGsm cellinfogsm = (CellInfoGsm)mTeleManager.getAllCellInfo().get(0);
diff --git a/tools/Android.bp b/tools/Android.bp
new file mode 100644
index 0000000..fe771af
--- /dev/null
+++ b/tools/Android.bp
@@ -0,0 +1,8 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+blueprint_go_binary {
+    name: "create_base_image",
+    srcs: ["create_base_image.go"],
+}
diff --git a/tools/create_base_image.go b/tools/create_base_image.go
new file mode 100644
index 0000000..f784801
--- /dev/null
+++ b/tools/create_base_image.go
@@ -0,0 +1,247 @@
+package main
+
+import (
+  "os"
+  "os/exec"
+  "os/user"
+  "flag"
+  "fmt"
+  "strings"
+  "io/ioutil"
+  "log"
+  "time"
+)
+
+type OnFail int
+
+const (
+    IgnoreOnFail OnFail = iota
+    WarnOnFail
+    ExitOnFail
+)
+
+var build_instance string
+var build_project string
+var build_zone string
+var dest_image string
+var dest_family string
+var dest_project string
+var launch_instance string
+var source_image_family string
+var source_image_project string
+var repository_url string
+var repository_branch string
+var version string
+var SSH_FLAGS string
+var INTERNAL_extra_source string
+var verbose bool
+var username string
+
+func init() {
+  user, err := user.Current()
+  if err != nil {
+    panic(err)
+  }
+  username = user.Username
+
+  flag.StringVar(&build_instance, "build_instance",
+    username+"-build", "Instance name to create for the build")
+  flag.StringVar(&build_project, "build_project",
+    mustShell("gcloud config get-value project"), "Project to use for scratch")
+  flag.StringVar(&build_zone, "build_zone",
+    mustShell("gcloud config get-value compute/zone"),
+    "Zone to use for scratch resources")
+  flag.StringVar(&dest_image, "dest_image",
+    "vsoc-host-scratch-"+username, "Image to create")
+  flag.StringVar(&dest_family, "dest_family", "",
+    "Image family to add the image to")
+  flag.StringVar(&dest_project, "dest_project",
+    mustShell("gcloud config get-value project"), "Project to use for the new image")
+  flag.StringVar(&launch_instance, "launch_instance", "",
+    "Name of the instance to launch with the new image")
+  flag.StringVar(&source_image_family, "source_image_family", "debian-11",
+    "Image familty to use as the base")
+  flag.StringVar(&source_image_project, "source_image_project", "debian-cloud",
+    "Project holding the base image")
+  flag.StringVar(&repository_url, "repository_url",
+    "https://github.com/google/android-cuttlefish.git",
+    "URL to the repository with host changes")
+  flag.StringVar(&repository_branch, "repository_branch",
+    "main", "Branch to check out")
+  flag.StringVar(&version, "version", "", "cuttlefish-common version")
+  flag.StringVar(&SSH_FLAGS, "INTERNAL_IP", "",
+    "INTERNAL_IP can be set to --internal-ip run on a GCE instance."+
+    "The instance will need --scope compute-rw.")
+  flag.StringVar(&INTERNAL_extra_source, "INTERNAL_extra_source", "",
+    "INTERNAL_extra_source may be set to a directory containing the source for extra packages to build.")
+  flag.BoolVar(&verbose, "verbose", true, "print commands and output (default: true)")
+  flag.Parse()
+}
+
+func shell(cmd string) (string, error) {
+  if verbose {
+    fmt.Println(cmd)
+  }
+  b, err := exec.Command("/bin/sh", "-c", cmd).CombinedOutput()
+  if verbose {
+    fmt.Println(string(b))
+  }
+  if err != nil {
+    return "", err
+  }
+  return strings.TrimSpace(string(b)), nil
+}
+
+func mustShell(cmd string) string {
+  if verbose {
+    fmt.Println(cmd)
+  }
+  out, err := shell(cmd)
+  if err != nil {
+    panic(err)
+  }
+  if verbose {
+    fmt.Println(out)
+  }
+  return strings.TrimSpace(out)
+}
+
+func gce(action OnFail, gceArg string, errorStr ...string) (string, error) {
+  cmd := "gcloud " + gceArg
+  out, err := shell(cmd)
+  if out != "" {
+    fmt.Println(out)
+  }
+  if err != nil && action != IgnoreOnFail {
+    var buf string
+    fmt.Sprintf(buf, "gcloud error occurred: %s", err)
+    if (len(errorStr) > 0) {
+      buf += " [" + errorStr[0] + "]"
+    }
+    if action == ExitOnFail {
+      panic(buf)
+    }
+    if action == WarnOnFail {
+      fmt.Println(buf)
+    }
+  }
+  return out, err
+}
+
+func waitForInstance(PZ string) {
+  for {
+    time.Sleep(5 * time.Second)
+    _, err := gce(WarnOnFail, `compute ssh `+SSH_FLAGS+` `+PZ+` `+
+                  build_instance+` -- uptime`)
+    if err == nil {
+      break
+    }
+  }
+}
+
+func packageSource(url string, branch string, version string, subdir string) {
+  repository_dir := url[strings.LastIndex(url, "/")+1:]
+  debian_dir := mustShell(`basename "`+repository_dir+`" .git`)
+  if subdir != "" {
+    debian_dir = repository_dir + "/" + subdir
+  }
+  mustShell("git clone " + url + " -b "+branch)
+  mustShell("dpkg-source -b " + debian_dir)
+  mustShell("rm -rf " + debian_dir)
+  mustShell("ls -l")
+  mustShell("pwd")
+}
+
+func createInstance(instance string, arg string) {
+  _, err := gce(WarnOnFail, `compute instances describe "`+instance+`"`)
+  if err != nil {
+    gce(ExitOnFail, `compute instances create `+arg+` "`+instance+`"`)
+  }
+}
+
+func main() {
+  gpu_type := "nvidia-tesla-p100-vws"
+  PZ := "--project=" + build_project + " --zone=" + build_zone
+
+  dest_family_flag := ""
+  if dest_family != "" {
+    dest_family_flag = "--family=" + dest_family
+  }
+
+  scratch_dir, err := ioutil.TempDir("", "")
+  if err != nil {
+    log.Fatal(err)
+  }
+
+  oldDir, err := os.Getwd()
+  if err != nil {
+    log.Fatal(err)
+  }
+  os.Chdir(scratch_dir)
+  packageSource(repository_url, repository_branch, "cuttlefish-common_" + version, "")
+  os.Chdir(oldDir)
+
+  abt := os.Getenv("ANDROID_BUILD_TOP")
+  source_files := `"` + abt + `/device/google/cuttlefish/tools/create_base_image_gce.sh"`
+  source_files += " " + scratch_dir + "/*"
+  if INTERNAL_extra_source != "" {
+    source_files += " " + INTERNAL_extra_source + "/*"
+  }
+
+  delete_instances := build_instance + " " + dest_image
+  if launch_instance != "" {
+    delete_instances += " " + launch_instance
+  }
+
+  gce(WarnOnFail, `compute instances delete -q `+PZ+` `+delete_instances,
+    `Not running`)
+  gce(WarnOnFail, `compute disks delete -q `+PZ+` "`+dest_image+
+    `"`, `No scratch disk`)
+  gce(WarnOnFail, `compute images delete -q --project="`+build_project+
+    `" "`+dest_image+`"`, `Not respinning`)
+  gce(WarnOnFail, `compute disks create `+PZ+` --image-family="`+source_image_family+
+    `" --image-project="`+source_image_project+`" "`+dest_image+`"`)
+  gce(ExitOnFail, `compute accelerator-types describe "`+gpu_type+`" `+PZ,
+    `Please use a zone with `+gpu_type+` GPUs available.`)
+  createInstance(build_instance, PZ+
+    ` --machine-type=n1-standard-16 --image-family="`+source_image_family+
+    `" --image-project="`+source_image_project+
+    `" --boot-disk-size=200GiB --accelerator="type=`+gpu_type+
+    `,count=1" --maintenance-policy=TERMINATE --boot-disk-size=200GiB`)
+
+  waitForInstance(PZ)
+
+  // Ubuntu tends to mount the wrong disk as root, so help it by waiting until
+  // it has booted before giving it access to the clean image disk
+  gce(WarnOnFail, `compute instances attach-disk `+PZ+` "`+build_instance+
+    `" --disk="`+dest_image+`"`)
+
+  // beta for the --internal-ip flag that may be passed via SSH_FLAGS
+  gce(ExitOnFail, `beta compute scp `+SSH_FLAGS+` `+PZ+` `+source_files+
+    ` "`+build_instance+`:"`)
+  gce(ExitOnFail, `compute ssh `+SSH_FLAGS+` `+PZ+` "`+build_instance+
+    `" -- ./create_base_image_gce.sh`)
+  gce(ExitOnFail, `compute instances delete -q `+PZ+` "`+build_instance+`"`)
+  gce(ExitOnFail, `compute images create --project="`+build_project+
+    `" --source-disk="`+dest_image+`" --source-disk-zone="`+build_zone+
+    `" --licenses=https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx `+
+    dest_family_flag+` "`+dest_image+`"`)
+  gce(ExitOnFail, `compute disks delete -q `+PZ+` "`+dest_image+`"`)
+
+  if launch_instance != "" {
+    createInstance(launch_instance, PZ+
+      ` --image-project="`+build_project+`" --image="`+dest_image+
+      `" --machine-type=n1-standard-4 --scopes storage-ro --accelerator="type=`+
+      gpu_type+`,count=1" --maintenance-policy=TERMINATE`)
+  }
+
+  fmt.Printf("Test and if this looks good, consider releasing it via:\n"+
+            "\n"+
+            "gcloud compute images create \\\n"+
+            "  --project=\"%s\" \\\n"+
+            "  --source-image=\"%s\" \\\n"+
+            "  --source-image-project=\"%s\" \\\n"+
+            "  \"%s\" \\\n"+
+            "  \"%s\"\n",
+            dest_project, dest_image, build_project, dest_family_flag, dest_image)
+}
diff --git a/tools/create_base_image.sh b/tools/create_base_image.sh
deleted file mode 100755
index bd85f0b..0000000
--- a/tools/create_base_image.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-# Creates a base image suitable for booting cuttlefish on GCE
-
-source "${ANDROID_BUILD_TOP}/device/google/cuttlefish/tools/create_base_image_hostlib.sh"
-
-FLAGS "$@" || exit 1
-main "${FLAGS_ARGV[@]}"
diff --git a/tools/create_base_image_arm.sh b/tools/create_base_image_arm.sh
index 644d909..5258636 100755
--- a/tools/create_base_image_arm.sh
+++ b/tools/create_base_image_arm.sh
@@ -14,8 +14,16 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+set -e
+set -u
+
 script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
 
+if [ -z $ANDROID_BUILD_TOP ]; then
+	echo "error: run script after 'lunch'"
+	exit 1
+fi
+
 source "${ANDROID_BUILD_TOP}/external/shflags/shflags"
 
 DEFINE_boolean p1 \
@@ -29,7 +37,11 @@
 DEFINE_boolean p5 \
 	false "Only generate/write the 5th partition (rootfs)" "5"
 
-FLAGS_HELP="USAGE: $0 <KERNEL_DIR> [IMAGE] [flags]"
+UBOOT_REPO=
+KERNEL_REPO=
+IMAGE=
+
+FLAGS_HELP="USAGE: $0 <UBOOT_REPO> <KERNEL_REPO> [IMAGE] [flags]"
 
 FLAGS "$@" || exit $?
 eval set -- "${FLAGS_ARGV}"
@@ -47,8 +59,10 @@
 fi
 
 for arg in "$@" ; do
-	if [ -z $KERNEL_DIR ]; then
-		KERNEL_DIR=$arg
+	if [ -z $UBOOT_REPO ]; then
+		UBOOT_REPO=$arg
+	elif [ -z $KERNEL_REPO ]; then
+		KERNEL_REPO=$arg
 	elif [ -z $IMAGE ]; then
 		IMAGE=$arg
 	else
@@ -59,25 +73,18 @@
 
 USE_IMAGE=`[ -z "${IMAGE}" ] && echo "0" || echo "1"`
 OVERWRITE=`[ -e "${IMAGE}" ] && echo "1" || echo "0"`
-if [ -z $KERNEL_DIR ]; then
+if [ -z $KERNEL_REPO -o -z $UBOOT_REPO ]; then
 	flags_help
 	exit 1
 fi
-if [ ! -e "${KERNEL_DIR}" ]; then
-	echo "error: can't find '${KERNEL_DIR}'. aborting..."
+if [ ! -e "${UBOOT_REPO}" ]; then
+	echo "error: can't find '${UBOOT_REPO}'. aborting..."
 	exit 1
 fi
-
-# escalate to superuser
-if [ $UID -ne 0 ]; then
-	cd ${ANDROID_BUILD_TOP}
-	. ./build/envsetup.sh
-	lunch ${TARGET_PRODUCT}-${TARGET_BUILD_VARIANT}
-	mmma external/u-boot
-	cd -
-	exec sudo -E "${0}" ${@}
+if [ ! -e "${KERNEL_REPO}" ]; then
+	echo "error: can't find '${KERNEL_REPO}'. aborting..."
+	exit 1
 fi
-
 if [ $OVERWRITE -eq 1 ]; then
 	OVERWRITE_IMAGE=${IMAGE}
 	IMAGE=`mktemp`
@@ -118,15 +125,6 @@
 	echo "Detected device at /dev/${mmc_dev}"
 fi
 
-if [ ${FLAGS_p1} -eq ${FLAGS_TRUE} ]; then
-	cd ${ANDROID_BUILD_TOP}/external/arm-trusted-firmware
-	CROSS_COMPILE=aarch64-linux-gnu- make PLAT=rk3399 DEBUG=0 ERROR_DEPRECATED=1 bl31
-	export BL31="${ANDROID_BUILD_TOP}/external/arm-trusted-firmware/build/rk3399/release/bl31/bl31.elf"
-	cd -
-fi
-
-cd ${ANDROID_BUILD_TOP}/external/u-boot
-
 if [ ${FLAGS_p2} -eq ${FLAGS_TRUE} ]; then
 	tmpfile=`mktemp`
 	bootenv=`mktemp`
@@ -144,474 +142,62 @@
 find_script=if test -e mmc ${devnum}:${distro_bootpart} /boot/boot.scr; then echo Found U-Boot script /boot/boot.scr; run run_scr; fi
 run_scr=load mmc ${devnum}:${distro_bootpart} ${scriptaddr} /boot/boot.scr; source ${scriptaddr}
 EOF
-	echo "Sha=`${script_dir}/gen_sha.sh --kernel ${KERNEL_DIR}`" >> ${tmpfile}
-	${ANDROID_HOST_OUT}/bin/mkenvimage -s 32768 -o ${bootenv} - < ${tmpfile}
+	echo "Sha=`${script_dir}/gen_sha.sh --uboot ${UBOOT_REPO} --kernel ${KERNEL_REPO}`" >> ${tmpfile}
+	${ANDROID_BUILD_TOP}/device/google/cuttlefish_prebuilts/uboot_tools/mkenvimage -s 32768 -o ${bootenv} - < ${tmpfile}
 fi
 
 if [ ${FLAGS_p1} -eq ${FLAGS_TRUE} ] || [ ${FLAGS_p3} -eq ${FLAGS_TRUE} ]; then
-	make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- rock-pi-4-rk3399_defconfig
-	if [ ${FLAGS_p1} -eq ${FLAGS_TRUE} ]; then
-		make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- -j`nproc`
-	fi
-	if [ ${FLAGS_p3} -eq ${FLAGS_TRUE} ]; then
-		make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- u-boot.itb
-	fi
-	if [ ${FLAGS_p1} -eq ${FLAGS_TRUE} ]; then
-		idbloader=`mktemp`
-		${ANDROID_HOST_OUT}/bin/mkimage -n rk3399 -T rksd -d tpl/u-boot-tpl.bin ${idbloader}
-		cat spl/u-boot-spl.bin >> ${idbloader}
-	fi
+	cd ${UBOOT_REPO}
+	BUILD_CONFIG=u-boot/build.config.rockpi4 build/build.sh -j1
+	cd -
 fi
-cd -
 
 if [ ${FLAGS_p5} -eq ${FLAGS_TRUE} ]; then
-	${ANDROID_BUILD_TOP}/kernel/tests/net/test/build_rootfs.sh -a arm64 -s buster -n ${IMAGE}
+	cd ${KERNEL_REPO}
+	rm -rf out
+	BUILD_CONFIG=common/build.config.rockpi4 build/build.sh -j`nproc`
+	cd -
+
+	dist_dir=$(echo ${KERNEL_REPO}/out/android*/dist)
+	${ANDROID_BUILD_TOP}/kernel/tests/net/test/build_rootfs.sh \
+		-a arm64 -s bullseye-rockpi -n ${IMAGE} -r ${IMAGE}.initrd -e \
+		-k ${dist_dir}/Image -i ${dist_dir}/initramfs.img \
+		-d ${dist_dir}/rk3399-rock-pi-4b.dtb:rockchip
 	if [ $? -ne 0 ]; then
 		echo "error: failed to build rootfs. exiting..."
 		exit 1
 	fi
+	rm -f ${IMAGE}.initrd
 	truncate -s +3G ${IMAGE}
 	e2fsck -f ${IMAGE}
 	resize2fs ${IMAGE}
 
-	mntdir=`mktemp -d`
-	mount ${IMAGE} ${mntdir}
-	if [ $? != 0 ]; then
-		echo "error: unable to mount ${IMAGE} ${mntdir}"
-		exit 1
-	fi
-
-	cat > ${mntdir}/boot/boot.cmd << "EOF"
-setenv start_poe 'gpio set 150; gpio clear 146'
-run start_poe
-setenv bootcmd_dhcp '
-mw.b ${scriptaddr} 0 0x8000
-mmc dev 0 0
-mmc read ${scriptaddr} 0x1fc0 0x40
-env import -b ${scriptaddr} 0x8000
-mw.b ${scriptaddr} 0 0x8000
-if dhcp ${scriptaddr} manifest.txt; then
-	setenv OldSha ${Sha}
-	setenv Sha
-	env import -t ${scriptaddr} 0x8000 ManifestVersion
-	echo "Manifest version $ManifestVersion";
-	if test "$ManifestVersion" = "1"; then
-		run manifest1
-	elif test "$ManifestVersion" = "2"; then
-		run manifest2
-	else
-		run manifestX
-	fi
-fi'
-setenv manifestX 'echo "***** ERROR: Unknown manifest version! *****";'
-setenv manifest1 '
-env import -t ${scriptaddr} 0x8000
-if test "$Sha" != "$OldSha"; then
-	setenv serverip ${TftpServer}
-	setenv loadaddr 0x00200000
-	mmc dev 0 0;
-	setenv file $TplSplImg; offset=0x40; size=0x1f80; run tftpget1; setenv TplSplImg
-	setenv file $UbootItb;  offset=0x4000; size=0x2000; run tftpget1; setenv UbootItb
-	setenv file $TrustImg; offset=0x6000; size=0x2000; run tftpget1; setenv TrustImg
-	setenv file $RootfsImg; offset=0x8000; size=0; run tftpget1; setenv RootfsImg
-	setenv file $UbootEnv; offset=0x1fc0; size=0x40; run tftpget1; setenv UbootEnv
-	mw.b ${scriptaddr} 0 0x8000
-	env export -b ${scriptaddr} 0x8000
-	mmc write ${scriptaddr} 0x1fc0 0x40
-else
-	echo "Already have ${Sha}. Booting..."
-fi'
-setenv manifest2 '
-env import -t ${scriptaddr} 0x8000
-if test "$DFUethaddr" = "$ethaddr" || test "$DFUethaddr" = ""; then
-	if test "$Sha" != "$OldSha"; then
-		setenv serverip ${TftpServer}
-		setenv loadaddr 0x00200000
-		mmc dev 0 0;
-		setenv file $TplSplImg; offset=0x40; size=0x1f80; run tftpget1; setenv TplSplImg
-		setenv file $UbootItb;  offset=0x4000; size=0x2000; run tftpget1; setenv UbootItb
-		setenv file $TrustImg; offset=0x6000; size=0x2000; run tftpget1; setenv TrustImg
-		setenv file $RootfsImg; offset=0x8000; size=0; run tftpget1; setenv RootfsImg
-		setenv file $UbootEnv; offset=0x1fc0; size=0x40; run tftpget1; setenv UbootEnv
-		mw.b ${scriptaddr} 0 0x8000
-		env export -b ${scriptaddr} 0x8000
-		mmc write ${scriptaddr} 0x1fc0 0x40
-	else
-		echo "Already have ${Sha}. Booting..."
-	fi
-else
-	echo "Update ${Sha} is not for me. Booting..."
-fi'
-setenv tftpget1 '
-if test "$file" != ""; then
-	mw.b ${loadaddr} 0 0x400000
-	tftp ${file}
-	if test $? = 0; then
-		setenv isGz 0 && setexpr isGz sub .*\\.gz\$ 1 ${file}
-		if test $isGz = 1; then
-			if test ${file} = ${UbootEnv}; then
-				echo "** gzipped env unsupported **"
-			else
-				setexpr boffset ${offset} * 0x200
-				gzwrite mmc 0 ${loadaddr} 0x${filesize} 100000 ${boffset} && echo Updated: ${file}
-			fi
-		elif test ${file} = ${UbootEnv}; then
-			env import -b ${loadaddr} && echo Updated: ${file}
-		else
-			if test $size = 0; then
-				setexpr x $filesize - 1
-				setexpr x $x / 0x1000
-				setexpr x $x + 1
-				setexpr x $x * 0x1000
-				setexpr x $x / 0x200
-				size=0x${x}
-			fi
-			mmc write ${loadaddr} ${offset} ${size} && echo Updated: ${file}
-		fi
-	fi
-	if test $? != 0; then
-		echo ** UPDATE FAILED: ${file} **
-	fi
-fi'
-if mmc dev 1 0; then; else
-	run bootcmd_dhcp;
-fi
-load mmc ${devnum}:${distro_bootpart} 0x02080000 /boot/Image
-load mmc ${devnum}:${distro_bootpart} 0x04000000 /boot/uInitrd
-load mmc ${devnum}:${distro_bootpart} 0x01f00000 /boot/dtb/rockchip/rk3399-rock-pi-4.dtb
-setenv finduuid "part uuid mmc ${devnum}:${distro_bootpart} uuid"
-run finduuid
-setenv bootargs "earlycon=uart8250,mmio32,0xff1a0000 console=ttyS2,1500000n8 loglevel=7 root=PARTUUID=${uuid} rootwait rootfstype=ext4 sdhci.debug_quirks=0x20000000 of_devlink=0"
-booti 0x02080000 0x04000000 0x01f00000
-EOF
-	${ANDROID_HOST_OUT}/bin/mkimage \
-		-C none -A arm -T script -d ${mntdir}/boot/boot.cmd ${mntdir}/boot/boot.scr
-
-	cd ${KERNEL_DIR}
-	export PATH=${ANDROID_BUILD_TOP}/prebuilts/clang/host/linux-x86/clang-r353983c/bin:$PATH
-	export PATH=${ANDROID_BUILD_TOP}/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin:$PATH
-	make ARCH=arm64 CC=clang CROSS_COMPILE=aarch64-linux-androidkernel- \
-	      CLANG_TRIPLE=aarch64-linux-gnu- rockpi4_defconfig
-	make ARCH=arm64 CC=clang CROSS_COMPILE=aarch64-linux-androidkernel- \
-	      CLANG_TRIPLE=aarch64-linux-gnu- -j`nproc`
-
-	cp ${KERNEL_DIR}/arch/arm64/boot/Image ${mntdir}/boot/
-	mkdir -p ${mntdir}/boot/dtb/rockchip/
-	cp ${KERNEL_DIR}/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtb ${mntdir}/boot/dtb/rockchip/
-	cd -
-
-	mount -o bind /proc ${mntdir}/proc
-	mount -o bind /sys ${mntdir}/sys
-	mount -o bind /dev ${mntdir}/dev
-
-	echo "Installing required packages..."
-	chroot ${mntdir} /bin/bash <<EOF
-apt-get update
-apt-get install -y -f initramfs-tools u-boot-tools network-manager openssh-server sudo man-db vim git dpkg-dev cdbs debhelper config-package-dev gdisk eject lzop binfmt-support ntpdate lsof
-EOF
-
-	echo "Turning on DHCP client..."
-	cat >${mntdir}/etc/systemd/network/dhcp.network <<EOF
-[Match]
-Name=en*
-
-[Network]
-DHCP=yes
-EOF
-
-	chroot ${mntdir} /bin/bash << "EOT"
-echo "Adding user vsoc-01 and groups..."
-useradd -m -G kvm,sudo -d /home/vsoc-01 --shell /bin/bash vsoc-01
-echo -e "cuttlefish\ncuttlefish" | passwd
-echo -e "cuttlefish\ncuttlefish" | passwd vsoc-01
-EOT
-
-	echo "Cloning android-cuttlefish..."
-	cd ${mntdir}/home/vsoc-01
-	git clone https://github.com/google/android-cuttlefish.git
-	cd -
-
-	echo "Creating PoE script..."
-	cat > ${mntdir}/usr/local/bin/poe << "EOF"
-#!/bin/bash
-
-if [ "$1" == "--start" ]; then
-	echo 146 > /sys/class/gpio/export
-	echo out > /sys/class/gpio/gpio146/direction
-	echo 0 > /sys/class/gpio/gpio146/value
-	echo 150 > /sys/class/gpio/export
-	echo out > /sys/class/gpio/gpio150/direction
-	echo 1 > /sys/class/gpio/gpio150/value
-	exit 0
-fi
-
-if [ "$1" == "--stop" ]; then
-	echo 0 > /sys/class/gpio/gpio146/value
-	echo 146 > /sys/class/gpio/unexport
-	echo 0 > /sys/class/gpio/gpio150/value
-	echo 150 > /sys/class/gpio/unexport
-	exit 0
-fi
-
-if [ ! -e /sys/class/gpio/gpio146/value ] || [ ! -e /sys/class/gpio/gpio150/value ]; then
-	echo "error: PoE service not initialized"
-	exit 1
-fi
-
-if [ "$1" == "0" ] || [ "$1" == "off" ] || [ "$1" == "OFF" ]; then
-	echo 0 > /sys/class/gpio/gpio150/value
-	exit 0
-fi
-
-if [ "$1" == "1" ] || [ "$1" == "on" ] || [ "$1" == "ON" ]; then
-	echo 1 > /sys/class/gpio/gpio150/value
-	exit 0
-fi
-
-echo "usage: poe <0|1>"
-exit 1
-EOF
-	chown root:root ${mntdir}/usr/local/bin/poe
-	chmod 755 ${mntdir}/usr/local/bin/poe
-
-	echo "Creating PoE service..."
-	cat > ${mntdir}/etc/systemd/system/poe.service << EOF
-[Unit]
- Description=PoE service
- ConditionPathExists=/usr/local/bin/poe
-
-[Service]
- Type=oneshot
- ExecStart=/usr/local/bin/poe --start
- ExecStop=/usr/local/bin/poe --stop
- RemainAfterExit=true
- StandardOutput=journal
-
-[Install]
- WantedBy=multi-user.target
-EOF
-
-	echo "Creating led script..."
-	cat > ${mntdir}/usr/local/bin/led << "EOF"
-#!/bin/bash
-
-if [ "$1" == "--start" ]; then
-	echo 125 > /sys/class/gpio/export
-	echo out > /sys/class/gpio/gpio125/direction
-	chmod 666 /sys/class/gpio/gpio125/value
-	echo 0 > /sys/class/gpio/gpio125/value
-	exit 0
-fi
-
-if [ "$1" == "--stop" ]; then
-	echo 0 > /sys/class/gpio/gpio125/value
-	echo 125 > /sys/class/gpio/unexport
-	exit 0
-fi
-
-if [ ! -e /sys/class/gpio/gpio125/value ]; then
-	echo "error: led service not initialized"
-	exit 1
-fi
-
-if [ "$1" == "0" ] || [ "$1" == "off" ] || [ "$1" == "OFF" ]; then
-	echo 0 > /sys/class/gpio/gpio125/value
-	exit 0
-fi
-
-if [ "$1" == "1" ] || [ "$1" == "on" ] || [ "$1" == "ON" ]; then
-	echo 1 > /sys/class/gpio/gpio125/value
-	exit 0
-fi
-
-echo "usage: led <0|1>"
-exit 1
-EOF
-	chown root:root ${mntdir}/usr/local/bin/led
-	chmod 755 ${mntdir}/usr/local/bin/led
-
-	echo "Creating led service..."
-	cat > ${mntdir}/etc/systemd/system/led.service << EOF
-[Unit]
- Description=led service
- ConditionPathExists=/usr/local/bin/led
-
-[Service]
- Type=oneshot
- ExecStart=/usr/local/bin/led --start
- ExecStop=/usr/local/bin/led --stop
- RemainAfterExit=true
- StandardOutput=journal
-
-[Install]
- WantedBy=multi-user.target
-EOF
-
-	echo "Creating SD duplicator script..."
-	cat > ${mntdir}/usr/local/bin/sd-dupe << "EOF"
-#!/bin/bash
-led 0
-
-src_dev=mmcblk0
-dest_dev=mmcblk1
-part_num=p5
-
-if [ -e /dev/mmcblk0p5 ] && [ -e /dev/mmcblk1p5 ]; then
-	led 1
-
-	sgdisk -Z -a1 /dev/${dest_dev}
-	sgdisk -a1 -n:1:64:8127 -t:1:8301 -c:1:loader1 /dev/${dest_dev}
-	sgdisk -a1 -n:2:8128:8191 -t:2:8301 -c:2:env /dev/${dest_dev}
-	sgdisk -a1 -n:3:16384:24575 -t:3:8301 -c:3:loader2 /dev/${dest_dev}
-	sgdisk -a1 -n:4:24576:32767 -t:4:8301 -c:4:trust /dev/${dest_dev}
-	sgdisk -a1 -n:5:32768:- -A:5:set:2 -t:5:8305 -c:5:rootfs /dev/${dest_dev}
-
-	src_block_count=`tune2fs -l /dev/${src_dev}${part_num} | grep "Block count:" | sed 's/.*: *//'`
-	src_block_size=`tune2fs -l /dev/${src_dev}${part_num} | grep "Block size:" | sed 's/.*: *//'`
-	src_fs_size=$(( src_block_count*src_block_size ))
-	src_fs_size_m=$(( src_fs_size / 1024 / 1024 + 1 ))
-
-	dd if=/dev/${src_dev}p1 of=/dev/${dest_dev}p1 conv=sync,noerror status=progress
-	dd if=/dev/${src_dev}p2 of=/dev/${dest_dev}p2 conv=sync,noerror status=progress
-	dd if=/dev/${src_dev}p3 of=/dev/${dest_dev}p3 conv=sync,noerror status=progress
-	dd if=/dev/${src_dev}p4 of=/dev/${dest_dev}p4 conv=sync,noerror status=progress
-
-	echo "Writing ${src_fs_size_m} MB: /dev/${src_dev} -> /dev/${dest_dev}..."
-	dd if=/dev/${src_dev}${part_num} of=/dev/${dest_dev}${part_num} bs=1M conv=sync,noerror status=progress
-
-	echo "Expanding /dev/${dest_dev}${part_num} filesystem..."
-	e2fsck -fy /dev/${dest_dev}${part_num}
-	resize2fs /dev/${dest_dev}${part_num}
-	tune2fs -O has_journal /dev/${dest_dev}${part_num}
-	e2fsck -fy /dev/${dest_dev}${part_num}
-	sync /dev/${dest_dev}
-
-	echo "Cleaning up..."
-	mount /dev/${dest_dev}${part_num} /media
-	chroot /media /usr/local/bin/install-cleanup
-
-	if [ $? == 0 ]; then
-		echo "Successfully copied Rock Pi image!"
-		while true; do
-			led 1; sleep 0.5
-			led 0; sleep 0.5
-		done
-	else
-		echo "Error while copying Rock Pi image"
-		while true; do
-			led 1; sleep 0.1
-			led 0; sleep 0.1
-		done
-	fi
-else
-	echo "Expanding /dev/${dest_dev}${part_num} filesystem..."
-	e2fsck -fy /dev/${dest_dev}${part_num}
-	resize2fs /dev/${dest_dev}${part_num}
-	tune2fs -O has_journal /dev/${dest_dev}${part_num}
-	e2fsck -fy /dev/${dest_dev}${part_num}
-	sync /dev/${dest_dev}
-
-	echo "Cleaning up..."
-	/usr/local/bin/install-cleanup
-fi
-EOF
-	chmod +x ${mntdir}/usr/local/bin/sd-dupe
-
-	echo "Creating SD duplicator service..."
-	cat > ${mntdir}/etc/systemd/system/sd-dupe.service << EOF
-[Unit]
- Description=Duplicate SD card rootfs to eMMC on Rock Pi
- ConditionPathExists=/usr/local/bin/sd-dupe
- After=led.service
-
-[Service]
- Type=simple
- ExecStart=/usr/local/bin/sd-dupe
- TimeoutSec=0
- StandardOutput=tty
-
-[Install]
- WantedBy=multi-user.target
-EOF
-
-	umount ${mntdir}/sys
-	umount ${mntdir}/dev
-	umount ${mntdir}/proc
-
-	chroot ${mntdir} /bin/bash << "EOT"
-echo "Installing cuttlefish-common package..."
-dpkg --add-architecture amd64
-apt-get update
-apt-get install -y -f libc6:amd64 qemu-user-static
-cd /home/vsoc-01/android-cuttlefish
-dpkg-buildpackage -d -uc -us
-apt-get install -y -f ../cuttlefish-common_*_arm64.deb
-apt-get clean
-
-usermod -aG cvdnetwork vsoc-01
-chmod 660 /dev/vhost-vsock
-chown root:cvdnetwork /dev/vhost-vsock
-rm -rf /home/vsoc-01/*
-EOT
-
-	echo "Creating cleanup script..."
-	cat > ${mntdir}/usr/local/bin/install-cleanup << "EOF"
-#!/bin/bash
-echo "nameserver 8.8.8.8" > /etc/resolv.conf
-MAC=`ip link | grep eth0 -A1 | grep ether | sed 's/.*\(..:..:..:..:..:..\) .*/\1/' | tr -d :`
-sed -i " 1 s/.*/& rockpi-${MAC}/" /etc/hosts
-sudo hostnamectl set-hostname "rockpi-${MAC}"
-
-rm /etc/machine-id
-rm /var/lib/dbus/machine-id
-dbus-uuidgen --ensure
-systemd-machine-id-setup
-
-systemctl disable sd-dupe
-rm /etc/systemd/system/sd-dupe.service
-rm /usr/local/bin/sd-dupe
-rm /usr/local/bin/install-cleanup
-EOF
-	chmod +x ${mntdir}/usr/local/bin/install-cleanup
-
-	chroot ${mntdir} /bin/bash << "EOT"
-echo "Enabling services..."
-systemctl enable poe
-systemctl enable led
-systemctl enable sd-dupe
-
-echo "Creating Initial Ramdisk..."
-update-initramfs -c -t -k "5.2.0"
-mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 -n uInitrd -d /boot/initrd.img-5.2.0 /boot/uInitrd-5.2.0
-ln -s /boot/uInitrd-5.2.0 /boot/uInitrd
-EOT
-
-	umount ${mntdir}
-
 	# Turn on journaling
 	tune2fs -O ^has_journal ${IMAGE}
 	e2fsck -fy ${IMAGE} >/dev/null 2>&1
 fi
 
 if [ ${USE_IMAGE} -eq 0 ]; then
-	# 32GB eMMC size
-	end_sector=61071326
 	device=/dev/${mmc_dev}
 	devicep=${device}
 
-	sgdisk -Z -a1 ${device}
-	sgdisk -a1 -n:1:64:8127 -t:1:8301 -c:1:loader1 ${device}
-	sgdisk -a1 -n:2:8128:8191 -t:2:8301 -c:2:env ${device}
-	sgdisk -a1 -n:3:16384:24575 -t:3:8301 -c:3:loader2 ${device}
-	sgdisk -a1 -n:4:24576:32767 -t:4:8301 -c:4:trust ${device}
-	sgdisk -a1 -n:5:32768:${end_sector} -A:5:set:2 -t:5:8305 -c:5:rootfs ${device}
+	# 32GB eMMC size
+	end_sector=61071326
+
+	sudo sgdisk --zap-all --set-alignment=1 ${device}
+	sudo sgdisk --set-alignment=1 --new=1:64:8127 --typecode=1:8301 --change-name=1:loader1 ${device}
+	sudo sgdisk --set-alignment=1 --new=2:8128:8191 --typecode=2:8301 --change-name=2:env ${device}
+	sudo sgdisk --set-alignment=1 --new=3:16384:24575 --typecode=3:8301 --change-name=3:loader2 ${device}
+	sudo sgdisk --set-alignment=1 --new=4:24576:32767 --typecode=4:8301 --change-name=4:trust ${device}
+	sudo sgdisk --set-alignment=1 --new=5:32768:${end_sector} --typecode=5:8305 --change-name=5:rootfs --attributes=5:set:2 ${device}
 	if [ ${FLAGS_p5} -eq ${FLAGS_TRUE} ]; then
-		dd if=${IMAGE} of=${devicep}5 bs=1M
-		resize2fs ${devicep}5 >/dev/null 2>&1
+		sudo dd if=${IMAGE} of=${devicep}5 bs=1M conv=fsync
+		sudo resize2fs ${devicep}5 >/dev/null 2>&1
 	fi
 else
-	device=$(losetup -f)
+	device=$(sudo losetup -f)
 	devicep=${device}p
+
 	if [ ${FLAGS_p5} -eq ${FLAGS_FALSE} ]; then
 		fs_end=3G
 		end_sector=-
@@ -649,34 +235,37 @@
 	truncate -s ${fs_end} ${tmpimg}
 
 	# Create GPT
-	sgdisk -Z -a1 ${tmpimg}
-	sgdisk -a1 -n:1:64:8127 -t:1:8301 -c:1:loader1 ${tmpimg}
-	sgdisk -a1 -n:2:8128:8191 -t:2:8301 -c:2:env ${tmpimg}
-	sgdisk -a1 -n:3:16384:24575 -t:3:8301 -c:3:loader2 ${tmpimg}
-	sgdisk -a1 -n:4:24576:32767 -t:4:8301 -c:4:trust ${tmpimg}
-	sgdisk -a1 -n:5:32768:${end_sector} -A:5:set:2 -t:5:8305 -c:5:rootfs ${tmpimg}
+	sgdisk --zap-all --set-alignment=1 ${tmpimg}
+	sgdisk --set-alignment=1 --new=1:64:8127 --typecode=1:8301 --change-name=1:loader1 ${tmpimg}
+	sgdisk --set-alignment=1 --new=2:8128:8191 --typecode=2:8301 --change-name=2:env ${tmpimg}
+	sgdisk --set-alignment=1 --new=3:16384:24575 --typecode=3:8301 --change-name=3:loader2 ${tmpimg}
+	sgdisk --set-alignment=1 --new=4:24576:32767 --typecode=4:8301 --change-name=4:trust ${tmpimg}
+	sgdisk --set-alignment=1 --new=5:32768:${end_sector} --typecode=5:8305 --change-name=5:rootfs --attributes=5:set:2 ${tmpimg}
 
-	losetup ${device} ${tmpimg}
-	partx -v --add ${device}
+	sudo losetup ${device} ${tmpimg}
+	sudo partx -v --add ${device}
 
 	if [ ${FLAGS_p5} -eq ${FLAGS_TRUE} ]; then
-		dd if=${IMAGE} of=${devicep}5 bs=1M
+		sudo dd if=${IMAGE} of=${devicep}5 bs=1M conv=fsync
 	fi
 fi
 if [ ${FLAGS_p1} -eq ${FLAGS_TRUE} ]; then
-	dd if=${idbloader} of=${devicep}1
+	# sudo dd if=${UBOOT_REPO}/out/u-boot-mainline/dist/idbloader.img of=${devicep}1 conv=fsync
+	# loader1
+	sudo dd if=${ANDROID_BUILD_TOP}/device/google/cuttlefish_prebuilts/uboot_bin/idbloader.img of=${devicep}1 conv=fsync
 fi
 if [ ${FLAGS_p2} -eq ${FLAGS_TRUE} ]; then
-	dd if=${bootenv} of=${devicep}2
+	sudo dd if=${bootenv} of=${devicep}2 conv=fsync
 fi
 if [ ${FLAGS_p3} -eq ${FLAGS_TRUE} ]; then
-	dd if=${ANDROID_BUILD_TOP}/external/u-boot/u-boot.itb of=${devicep}3
+	# sudo dd if=${UBOOT_REPO}/out/u-boot-mainline/dist/u-boot.itb of=${devicep}3 conv=fsync
+	# loader2
+	sudo dd if=${ANDROID_BUILD_TOP}/device/google/cuttlefish_prebuilts/uboot_bin/u-boot.itb of=${devicep}3 conv=fsync
 fi
 if [ ${USE_IMAGE} -eq 1 ]; then
-	chown $SUDO_USER:`id -ng $SUDO_USER` ${tmpimg}
+	sudo partx -v --delete ${device}
+	sudo losetup -d ${device}
 	if [ $OVERWRITE -eq 0 ]; then
 		mv ${tmpimg} ${IMAGE}
 	fi
-	partx -v --delete ${device}
-	losetup -d ${device}
 fi
diff --git a/tools/create_base_image_gce.sh b/tools/create_base_image_gce.sh
index 02797db..c875340 100755
--- a/tools/create_base_image_gce.sh
+++ b/tools/create_base_image_gce.sh
@@ -39,7 +39,7 @@
 done
 
 # Now install the packages on the disk
-sudo mkdir /mnt/image
+sudo mkdir -p /mnt/image
 sudo mount /dev/sdb1 /mnt/image
 cp "${debs[@]}" /mnt/image/tmp
 sudo mount -t sysfs none /mnt/image/sys
@@ -60,30 +60,22 @@
 
 sudo chroot /mnt/image /usr/bin/find /home -ls
 
+# update QEMU version to most recent backport
+sudo chroot /mnt/image /usr/bin/apt install -y --only-upgrade qemu-system-x86 -t bullseye-backports
+sudo chroot /mnt/image /usr/bin/apt install -y --only-upgrade qemu-system-arm -t bullseye-backports
 
 # Install GPU driver dependencies
 sudo chroot /mnt/image /usr/bin/apt install -y gcc
 sudo chroot /mnt/image /usr/bin/apt install -y linux-source
 sudo chroot /mnt/image /usr/bin/apt install -y linux-headers-`uname -r`
 sudo chroot /mnt/image /usr/bin/apt install -y make
-
-# Download the latest GPU driver installer
-gsutil cp \
-  $(gsutil ls gs://nvidia-drivers-us-public/GRID/GRID*/*-Linux-x86_64-*.run \
-    | sort \
-    | tail -n 1) \
-  /mnt/image/tmp/nvidia-driver-installer.run
-
-# Make GPU driver installer executable
-chmod +x /mnt/image/tmp/nvidia-driver-installer.run
-
-# Install the latest GPU driver with default options and the dispatch libs
-sudo chroot /mnt/image /tmp/nvidia-driver-installer.run \
-  --silent \
-  --install-libglvnd
-
-# Cleanup after install
-rm /mnt/image/tmp/nvidia-driver-installer.run
+sudo chroot /mnt/image /usr/bin/apt install -y software-properties-common
+sudo chroot /mnt/image /usr/bin/add-apt-repository non-free
+sudo chroot /mnt/image /usr/bin/add-apt-repository contrib
+sudo chroot /mnt/image /usr/bin/apt update
+sudo chroot /mnt/image /bin/bash -c 'DEBIAN_FRONTEND=noninteractive /usr/bin/apt install -y nvidia-driver'
+sudo chroot /mnt/image /usr/bin/apt install -y firmware-misc-nonfree
+sudo chroot /mnt/image /usr/bin/apt install -y libglvnd-dev
 
 # Verify
 query_nvidia() {
diff --git a/tools/create_base_image_hostlib.sh b/tools/create_base_image_hostlib.sh
index dafefbd..cc7227f 100755
--- a/tools/create_base_image_hostlib.sh
+++ b/tools/create_base_image_hostlib.sh
@@ -2,9 +2,6 @@
 
 # Common code to build a host image on GCE
 
-# INTERNAL_extra_source may be set to a directory containing the source for
-# extra package to build.
-
 # INTERNAL_IP can be set to --internal-ip run on a GCE instance
 # The instance will need --scope compute-rw
 
@@ -22,7 +19,7 @@
   "Project to use for the new image" "p"
 DEFINE_string launch_instance "" \
   "Name of the instance to launch with the new image" "l"
-DEFINE_string source_image_family "debian-10" \
+DEFINE_string source_image_family "debian-11" \
   "Image familty to use as the base" "s"
 DEFINE_string source_image_project debian-cloud \
   "Project holding the base image" "m"
@@ -79,9 +76,6 @@
     "${ANDROID_BUILD_TOP}/device/google/cuttlefish/tools/create_base_image_gce.sh"
     ${scratch_dir}/*
   )
-  if [[ -n "${INTERNAL_extra_source}" ]]; then
-    source_files+=("${INTERNAL_extra_source}"/*)
-  fi
 
   delete_instances=("${FLAGS_build_instance}" "${FLAGS_dest_image}")
   if [[ -n "${FLAGS_launch_instance}" ]]; then
@@ -143,6 +137,7 @@
       --scopes storage-ro \
       --accelerator="type=${gpu_type},count=1" \
       --maintenance-policy=TERMINATE \
+      --boot-disk-size=200GiB \
       "${FLAGS_launch_instance}"
   fi
   cat <<EOF
@@ -156,3 +151,11 @@
       "${FLAGS_dest_image}"
 EOF
 }
+
+FLAGS "$@" || exit 1
+if [[ "${FLAGS_help}" -eq 0 ]]; then
+  echo ${FLAGS_help}
+  exit 1
+fi
+
+main "${FLAGS_ARGV[@]}"
diff --git a/tools/gen_sha.sh b/tools/gen_sha.sh
index 51dc76c..d3da1c4 100755
--- a/tools/gen_sha.sh
+++ b/tools/gen_sha.sh
@@ -14,17 +14,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-source "${ANDROID_BUILD_TOP}/external/shflags/src/shflags"
+set -e
+set -u
+
+source "${ANDROID_BUILD_TOP}/external/shflags/shflags"
 
 DEFINE_string kernel \
-  "" "Path to kernel build dir" "k"
+  "" "Path to kernel repo checkout" "k"
+DEFINE_string uboot \
+  "" "Path to u-boot repo checkout" "u"
 
 FLAGS_HELP="USAGE: $0 [flags]"
 
 FLAGS "$@" || exit $?
 eval set -- "${FLAGS_ARGV}"
 
-if [ -z ${FLAGS_kernel} ]; then
+if [ -z ${FLAGS_kernel} -o -z ${FLAGS_uboot} ]; then
 	flags_help
 	exit 1
 fi
@@ -32,13 +37,14 @@
 cd "${ANDROID_BUILD_TOP}/device/google/cuttlefish"
 Sha=`git rev-parse HEAD`
 cd - >/dev/null
-cd "${ANDROID_BUILD_TOP}/external/u-boot"
+# cd "${FLAGS_uboot}/u-boot"
+cd "${ANDROID_BUILD_TOP}/device/google/cuttlefish_prebuilts"
 Sha="$Sha,`git rev-parse HEAD`"
 cd - >/dev/null
-cd "${ANDROID_BUILD_TOP}/external/arm-trusted-firmware"
+cd "${FLAGS_uboot}/external/arm-trusted-firmware"
 Sha="$Sha,`git rev-parse HEAD`"
 cd - >/dev/null
-cd "${FLAGS_kernel}"
+cd "${FLAGS_kernel}/common"
 Sha="$Sha,`git rev-parse HEAD`"
 cd - >/dev/null
 echo $Sha
diff --git a/tools/go.mod b/tools/go.mod
new file mode 100644
index 0000000..00809b9
--- /dev/null
+++ b/tools/go.mod
@@ -0,0 +1,3 @@
+module tools
+
+go 1.17
diff --git a/tools/latest_fetch_cvd.sh b/tools/latest_fetch_cvd.sh
new file mode 100755
index 0000000..d853786
--- /dev/null
+++ b/tools/latest_fetch_cvd.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+LATEST_BUILD_ID=`curl "https://www.googleapis.com/android/internal/build/v3/builds?branch=aosp-master&buildAttemptStatus=complete&buildType=submitted&maxResults=1&successful=true&target=aosp_cf_x86_64_phone-userdebug" 2>/dev/null | \
+  python3 -c "import sys, json; print(json.load(sys.stdin)['builds'][0]['buildId'])"`
+LATEST_BUILD_URL=`curl "https://www.googleapis.com/android/internal/build/v3/builds/$LATEST_BUILD_ID/aosp_cf_x86_64_phone-userdebug/attempts/latest/artifacts/fetch_cvd/url" 2>/dev/null | \
+  python3 -c "import sys, json; print(json.load(sys.stdin)['signedUrl'])"`
+
+DOWNLOAD_TARGET=`mktemp`
+
+curl "${LATEST_BUILD_URL}" -o $DOWNLOAD_TARGET
+
+chmod +x $DOWNLOAD_TARGET
+
+exec $DOWNLOAD_TARGET $@
diff --git a/tools/upload_to_gce_and_run.py b/tools/upload_to_gce_and_run.py
index f4dc4b8..db78340 100755
--- a/tools/upload_to_gce_and_run.py
+++ b/tools/upload_to_gce_and_run.py
@@ -59,9 +59,6 @@
 
 
 def __get_default_hostdir():
-  soong_host_dir = os.environ.get('ANDROID_SOONG_HOST_OUT')
-  if soong_host_dir:
-    return soong_host_dir
   return os.environ.get('ANDROID_HOST_OUT', '.')
 
 
diff --git a/tools/upload_via_ssh.py b/tools/upload_via_ssh.py
index 5359473..2b5cfd1 100755
--- a/tools/upload_via_ssh.py
+++ b/tools/upload_via_ssh.py
@@ -58,7 +58,7 @@
   parser.add_argument(
       '-host_dir',
       type=str,
-      default=os.environ.get('ANDROID_SOONG_HOST_OUT', '.'),
+      default=os.environ.get('ANDROID_HOST_OUT', '.'),
       help='path to soong host out directory')
   parser.add_argument(
       '-image_dir',
diff --git a/vsoc_arm64/auto/aosp_cf.mk b/vsoc_arm64/auto/aosp_cf.mk
index 51ae7a3..0f8c417 100644
--- a/vsoc_arm64/auto/aosp_cf.mk
+++ b/vsoc_arm64/auto/aosp_cf.mk
@@ -26,3 +26,6 @@
 PRODUCT_VENDOR_PROPERTIES += \
     ro.soc.manufacturer=$(PRODUCT_MANUFACTURER) \
     ro.soc.model=$(PRODUCT_DEVICE)
+
+# TODO(b/205788876) remove this when openwrt has an image for arm.
+PRODUCT_ENFORCE_MAC80211_HWSIM := false
\ No newline at end of file
diff --git a/vsoc_arm64/bootloader.mk b/vsoc_arm64/bootloader.mk
index a5aea94..ce29443 100644
--- a/vsoc_arm64/bootloader.mk
+++ b/vsoc_arm64/bootloader.mk
@@ -18,5 +18,3 @@
 # FIXME: Copying the QEMU bootloader for now, but this should be updated..
 BOARD_PREBUILT_BOOTLOADER := \
     device/google/cuttlefish_prebuilts/bootloader/crosvm_aarch64/u-boot.bin
-PRODUCT_COPY_FILES += \
-    device/google/cuttlefish_prebuilts/bootloader/qemu_aarch64/u-boot.bin:bootloader.qemu
diff --git a/vsoc_arm64/phone/aosp_cf.mk b/vsoc_arm64/phone/aosp_cf.mk
index b33e523..86fe29e 100644
--- a/vsoc_arm64/phone/aosp_cf.mk
+++ b/vsoc_arm64/phone/aosp_cf.mk
@@ -37,6 +37,8 @@
 # All components inherited here go to vendor image
 #
 $(call inherit-product, device/google/cuttlefish/shared/phone/device_vendor.mk)
+# TODO(b/205788876) remove this when openwrt has an image for arm.
+PRODUCT_ENFORCE_MAC80211_HWSIM := false
 
 # Nested virtualization support
 $(call inherit-product, packages/modules/Virtualization/apex/product_packages.mk)
diff --git a/vsoc_arm64/phone/aosp_cf_hwasan.mk b/vsoc_arm64/phone/aosp_cf_hwasan.mk
new file mode 100644
index 0000000..8e19670
--- /dev/null
+++ b/vsoc_arm64/phone/aosp_cf_hwasan.mk
@@ -0,0 +1,24 @@
+#
+# Copyright (C) 2021 The Android Open Source Project
+#
+# 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.
+#
+
+$(call inherit-product, device/google/cuttlefish/vsoc_arm64/phone/aosp_cf.mk)
+
+PRODUCT_NAME := aosp_cf_arm64_phone_hwasan
+
+# Add "hwaddress" as a global sanitizer if it's missing.
+ifeq ($(filter hwaddress,$(SANITIZE_TARGET)),)
+  SANITIZE_TARGET := $(strip $(SANITIZE_TARGET) hwaddress)
+endif
diff --git a/vsoc_arm64_only/phone/aosp_cf.mk b/vsoc_arm64_only/phone/aosp_cf.mk
index 5bcfc7b..0da151f 100644
--- a/vsoc_arm64_only/phone/aosp_cf.mk
+++ b/vsoc_arm64_only/phone/aosp_cf.mk
@@ -39,6 +39,9 @@
 LOCAL_DISABLE_OMX := true
 $(call inherit-product, device/google/cuttlefish/shared/phone/device_vendor.mk)
 
+# TODO(b/205788876) remove this when openwrt has an image for arm.
+PRODUCT_ENFORCE_MAC80211_HWSIM := false
+
 # Nested virtualization support
 $(call inherit-product, packages/modules/Virtualization/apex/product_packages.mk)
 
diff --git a/vsoc_arm64_only/phone/aosp_cf_hwasan.mk b/vsoc_arm64_only/phone/aosp_cf_hwasan.mk
new file mode 100644
index 0000000..c261662
--- /dev/null
+++ b/vsoc_arm64_only/phone/aosp_cf_hwasan.mk
@@ -0,0 +1,24 @@
+#
+# Copyright (C) 2021 The Android Open Source Project
+#
+# 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.
+#
+
+$(call inherit-product, device/google/cuttlefish/vsoc_arm64_only/phone/aosp_cf.mk)
+
+PRODUCT_NAME := aosp_cf_arm64_only_phone_hwasan
+
+# Add "hwaddress" as a global sanitizer if it's missing.
+ifeq ($(filter hwaddress,$(SANITIZE_TARGET)),)
+  SANITIZE_TARGET := $(strip $(SANITIZE_TARGET) hwaddress)
+endif
diff --git a/vsoc_arm_only/BoardConfig.mk b/vsoc_arm_only/BoardConfig.mk
index e0cb5ce..54c656c 100644
--- a/vsoc_arm_only/BoardConfig.mk
+++ b/vsoc_arm_only/BoardConfig.mk
@@ -27,7 +27,7 @@
 TARGET_CPU_ABI2 := armeabi
 TARGET_CPU_VARIANT := cortex-a15
 
-BOARD_VENDOR_RAMDISK_KERNEL_MODULES += $(wildcard device/google/cuttlefish_prebuilts/kernel/5.4-arm/*.ko)
+BOARD_VENDOR_RAMDISK_KERNEL_MODULES += $(wildcard device/google/cuttlefish_prebuilts/kernel/$(TARGET_KERNEL_USE)-arm/*.ko)
 
 HOST_CROSS_OS := linux_bionic
 HOST_CROSS_ARCH := arm64
diff --git a/vsoc_arm_only/bootloader.mk b/vsoc_arm_only/bootloader.mk
index 93de14e..959cd61 100644
--- a/vsoc_arm_only/bootloader.mk
+++ b/vsoc_arm_only/bootloader.mk
@@ -18,5 +18,3 @@
 # FIXME: Copying the QEMU bootloader for now, but this should be updated..
 BOARD_PREBUILT_BOOTLOADER := \
     device/google/cuttlefish_prebuilts/bootloader/qemu_arm/u-boot.bin
-PRODUCT_COPY_FILES += \
-    device/google/cuttlefish_prebuilts/bootloader/qemu_arm/u-boot.bin:bootloader.qemu
diff --git a/vsoc_arm_only/kernel.mk b/vsoc_arm_only/kernel.mk
index f7472e7..a216444 100644
--- a/vsoc_arm_only/kernel.mk
+++ b/vsoc_arm_only/kernel.mk
@@ -13,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-TARGET_KERNEL_PATH ?= device/google/cuttlefish_prebuilts/kernel/5.4-arm/kernel-5.4
+TARGET_KERNEL_USE ?= mainline
+TARGET_KERNEL_PATH ?= device/google/cuttlefish_prebuilts/kernel/$(TARGET_KERNEL_USE)-arm/kernel-$(TARGET_KERNEL_USE)
 
 PRODUCT_COPY_FILES += $(TARGET_KERNEL_PATH):kernel
diff --git a/vsoc_arm_only/phone/aosp_cf.mk b/vsoc_arm_only/phone/aosp_cf.mk
index 2643c90..3ba708a 100644
--- a/vsoc_arm_only/phone/aosp_cf.mk
+++ b/vsoc_arm_only/phone/aosp_cf.mk
@@ -51,6 +51,9 @@
 #
 $(call inherit-product, device/google/cuttlefish/shared/phone/device_vendor.mk)
 
+# TODO(b/205788876) remove this when openwrt has an image for arm.
+PRODUCT_ENFORCE_MAC80211_HWSIM := false
+
 #
 # Special settings for the target
 #
@@ -67,5 +70,10 @@
 PRODUCT_MODEL := Cuttlefish arm phone 32-bit only
 
 PRODUCT_VENDOR_PROPERTIES += \
+    ro.config.low_ram=true \
     ro.soc.manufacturer=$(PRODUCT_MANUFACTURER) \
     ro.soc.model=$(PRODUCT_DEVICE)
+
+TARGET_SYSTEM_PROP += \
+    build/make/target/board/go_defaults_512.prop \
+    build/make/target/board/go_defaults_common.prop
diff --git a/vsoc_x86/BoardConfig.mk b/vsoc_x86/BoardConfig.mk
index 70db8c2..59c999e 100644
--- a/vsoc_x86/BoardConfig.mk
+++ b/vsoc_x86/BoardConfig.mk
@@ -30,8 +30,6 @@
 TARGET_NATIVE_BRIDGE_CPU_VARIANT := generic
 TARGET_NATIVE_BRIDGE_ABI := armeabi-v7a armeabi
 
-BUILD_BROKEN_DUP_RULES := true
-
 ifeq ($(BOARD_VENDOR_RAMDISK_KERNEL_MODULES),)
     BOARD_VENDOR_RAMDISK_KERNEL_MODULES += $(wildcard kernel/prebuilts/common-modules/virtual-device/5.10/x86-64/*.ko)
 endif
diff --git a/vsoc_x86/go_512_phone/device.mk b/vsoc_x86/go_512_phone/device.mk
index 2df9023..1a34001 100644
--- a/vsoc_x86/go_512_phone/device.mk
+++ b/vsoc_x86/go_512_phone/device.mk
@@ -16,6 +16,7 @@
 
 $(call inherit-product, device/google/cuttlefish/shared/go_512/device.mk)
 $(call inherit-product, device/google/cuttlefish/vsoc_x86_64/kernel.mk)
+$(call inherit-product, device/google/cuttlefish/vsoc_x86_64/bootloader.mk)
 
 PRODUCT_NAME := aosp_cf_x86_go_512_phone
 PRODUCT_DEVICE := vsoc_x86
diff --git a/vsoc_x86/go_phone/OWNERS b/vsoc_x86/go_phone/OWNERS
new file mode 100644
index 0000000..0c77d0e
--- /dev/null
+++ b/vsoc_x86/go_phone/OWNERS
@@ -0,0 +1,2 @@
[email protected]
[email protected]
diff --git a/vsoc_x86/go_phone/device.mk b/vsoc_x86/go_phone/device.mk
index 8b2a8f3..394e359 100644
--- a/vsoc_x86/go_phone/device.mk
+++ b/vsoc_x86/go_phone/device.mk
@@ -16,12 +16,13 @@
 
 $(call inherit-product, device/google/cuttlefish/shared/go/device.mk)
 $(call inherit-product, device/google/cuttlefish/vsoc_x86_64/kernel.mk)
+$(call inherit-product, device/google/cuttlefish/vsoc_x86_64/bootloader.mk)
 
 PRODUCT_NAME := aosp_cf_x86_go_phone
 PRODUCT_DEVICE := vsoc_x86
 PRODUCT_MANUFACTURER := Google
 PRODUCT_MODEL := Cuttlefish x86 Go phone
-PRODUCT_PACKAGE_OVERLAYS := device/google/cuttlefish/vsoc_x86/phone/overlay
+PRODUCT_PACKAGE_OVERLAYS := device/google/cuttlefish/vsoc_x86/go_phone/overlay
 
 PRODUCT_VENDOR_PROPERTIES += \
     ro.soc.manufacturer=$(PRODUCT_MANUFACTURER) \
diff --git a/vsoc_x86/go_phone/overlay/frameworks/base/core/res/res/values/config.xml b/vsoc_x86/go_phone/overlay/frameworks/base/core/res/res/values/config.xml
new file mode 100644
index 0000000..da1dca2
--- /dev/null
+++ b/vsoc_x86/go_phone/overlay/frameworks/base/core/res/res/values/config.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2022, The Android Open Source Project
+**
+** 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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- True if the device requires AppWidgetService even if it does not have
+         the PackageManager.FEATURE_APP_WIDGETS feature -->
+    <bool name="config_enableAppWidgetService">true</bool>
+
+    <!-- circle shape icon mask to be used for {@link AdaptiveIconDrawable} -->
+    <string name="config_icon_mask" translatable="false">"M50 0C77.6 0 100 22.4 100 50C100 77.6 77.6 100 50 100C22.4 100 0 77.6 0 50C0 22.4 22.4 0 50 0Z"</string>
+</resources>
diff --git a/vsoc_x86_64/BoardConfig.mk b/vsoc_x86_64/BoardConfig.mk
index 52dde5c..39f5967 100644
--- a/vsoc_x86_64/BoardConfig.mk
+++ b/vsoc_x86_64/BoardConfig.mk
@@ -40,8 +40,6 @@
 TARGET_NATIVE_BRIDGE_2ND_CPU_VARIANT := generic
 TARGET_NATIVE_BRIDGE_2ND_ABI := armeabi-v7a armeabi
 
-BUILD_BROKEN_DUP_RULES := true
-
 ifeq ($(BOARD_VENDOR_RAMDISK_KERNEL_MODULES),)
     BOARD_VENDOR_RAMDISK_KERNEL_MODULES += $(wildcard kernel/prebuilts/common-modules/virtual-device/$(TARGET_KERNEL_USE)/x86-64/*.ko)
 endif
diff --git a/vsoc_x86_64/bootloader.mk b/vsoc_x86_64/bootloader.mk
index b0d8c5d..6294ca7 100644
--- a/vsoc_x86_64/bootloader.mk
+++ b/vsoc_x86_64/bootloader.mk
@@ -17,5 +17,3 @@
 TARGET_NO_BOOTLOADER := false
 BOARD_PREBUILT_BOOTLOADER := \
     device/google/cuttlefish_prebuilts/bootloader/crosvm_x86_64/u-boot.rom
-PRODUCT_COPY_FILES += \
-    device/google/cuttlefish_prebuilts/bootloader/qemu_x86_64/u-boot.rom:bootloader.qemu
diff --git a/vsoc_x86_64/phone/aosp_cf.mk b/vsoc_x86_64/phone/aosp_cf.mk
index 478452f..69f1f9a 100644
--- a/vsoc_x86_64/phone/aosp_cf.mk
+++ b/vsoc_x86_64/phone/aosp_cf.mk
@@ -36,6 +36,7 @@
 #
 # All components inherited here go to vendor image
 #
+LOCAL_PREFER_VENDOR_APEX := true
 $(call inherit-product, device/google/cuttlefish/shared/phone/device_vendor.mk)
 
 # Nested virtualization support
@@ -48,8 +49,12 @@
 $(call inherit-product, device/google/cuttlefish/vsoc_x86_64/bootloader.mk)
 
 # Exclude features that are not available on AOSP devices.
+ifeq ($(LOCAL_PREFER_VENDOR_APEX),true)
+PRODUCT_PACKAGES += com.google.aosp_cf_x86_64_phone.hardware.core_permissions
+else
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/aosp_excluded_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/aosp_excluded_hardware.xml
+endif
 
 PRODUCT_NAME := aosp_cf_x86_64_phone
 PRODUCT_DEVICE := vsoc_x86_64
diff --git a/vsoc_x86_64/phone/aosp_cf_foldable.mk b/vsoc_x86_64/phone/aosp_cf_foldable.mk
index c0872d8..f5901fc 100644
--- a/vsoc_x86_64/phone/aosp_cf_foldable.mk
+++ b/vsoc_x86_64/phone/aosp_cf_foldable.mk
@@ -33,6 +33,6 @@
 # Include RRO settings that specify the fold states and screen information.
 DEVICE_PACKAGE_OVERLAYS += device/google/cuttlefish/shared/foldable/overlay
 # Include the foldable `launch_cvd --config foldable` option.
-SOONG_CONFIG_cvd_launch_configs += cvd_config_foldable.json
+$(call soong_config_append,cvd, launch_configs, cvd_config_foldable.json)
 # Include the android-info.txt that specifies the foldable --config by default.
 TARGET_BOARD_INFO_FILE := device/google/cuttlefish/shared/foldable/android-info.txt
diff --git a/vsoc_x86_64/tv/OWNERS b/vsoc_x86_64/tv/OWNERS
new file mode 100644
index 0000000..4df9f27
--- /dev/null
+++ b/vsoc_x86_64/tv/OWNERS
@@ -0,0 +1,2 @@
+# Bug component: 760438
+include device/google/atv:/OWNERS
diff --git a/vsoc_x86_64/tv/device.mk b/vsoc_x86_64/tv/device.mk
index d25210d..7ab18cd 100644
--- a/vsoc_x86_64/tv/device.mk
+++ b/vsoc_x86_64/tv/device.mk
@@ -15,10 +15,12 @@
 #
 
 $(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
+$(call inherit-product, device/google/atv/products/atv_base.mk)
 $(call inherit-product, device/google/cuttlefish/shared/tv/device.mk)
 $(call inherit-product, device/google/cuttlefish/vsoc_x86_64/kernel.mk)
 $(call inherit-product, device/google/cuttlefish/vsoc_x86_64/bootloader.mk)
 
+PRODUCT_BRAND := generic
 PRODUCT_NAME := aosp_cf_x86_64_tv
 PRODUCT_DEVICE := vsoc_x86_64
 PRODUCT_MANUFACTURER := Google
diff --git a/vsoc_x86_64_only/BoardConfig.mk b/vsoc_x86_64_only/BoardConfig.mk
index d702533..4a3da4c 100644
--- a/vsoc_x86_64_only/BoardConfig.mk
+++ b/vsoc_x86_64_only/BoardConfig.mk
@@ -31,5 +31,4 @@
 TARGET_NATIVE_BRIDGE_ABI := arm64-v8a
 
 AUDIOSERVER_MULTILIB := first
-BUILD_BROKEN_DUP_RULES := true
 BOARD_VENDOR_RAMDISK_KERNEL_MODULES += $(wildcard kernel/prebuilts/common-modules/virtual-device/5.10/x86-64/*.ko)
diff --git a/vsoc_x86_noapex/aosp_cf_noapex.mk b/vsoc_x86_noapex/aosp_cf_noapex.mk
index aa5d3b2..dd5d642 100644
--- a/vsoc_x86_noapex/aosp_cf_noapex.mk
+++ b/vsoc_x86_noapex/aosp_cf_noapex.mk
@@ -25,7 +25,3 @@
 PRODUCT_DEVICE := vsoc_x86_noapex
 PRODUCT_MANUFACTURER := Google
 PRODUCT_MODEL := Cuttlefish x86 phone without APEX support
-
-PRODUCT_VENDOR_PROPERTIES += \
-    ro.soc.manufacturer=$(PRODUCT_MANUFACTURER) \
-    ro.soc.model=$(PRODUCT_DEVICE)