blob: 893babd1d9ecfbfa495eb21b1651fe569e795ed7 [file] [log] [blame]
# Copyright 2022 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
config("common_public_configs") {
include_dirs = [ "src/include" ]
# Disable logging by default. Developer enable it locally if needed. Note
# that enabling log brings in code that currently doesn't compile with some
# toolchains like efi, due to missing dependencies.
defines = [ "MAXLOGLEVEL=LOGL_NONE" ]
if (is_efi_toolchain) {
# efi tool chain has __WIN32 defined, which causes some source files and
# headers to expect the windows.h header file.
include_dirs += [ "efi_sysdeps" ]
}
}
source_set("efi_sysdeps") {
sources = [ "efi_sysdeps/sysdeps.cc" ]
if (is_kernel) {
public_deps = [
"//zircon/kernel/lib/ktl",
"//zircon/kernel/lib/libc",
]
}
}
static_library("tss2-mu") {
include_dirs = [
"src/include/tss2",
"src/src",
]
sources = [
"src/src/tss2-mu/base-types.c",
"src/src/tss2-mu/tpm2b-types.c",
"src/src/tss2-mu/tpma-types.c",
"src/src/tss2-mu/tpml-types.c",
"src/src/tss2-mu/tpms-types.c",
"src/src/tss2-mu/tpmt-types.c",
"src/src/tss2-mu/tpmu-types.c",
"src/src/util/log.h",
"src/src/util/tss2_endian.h",
]
configs += [
"//build/config:Wno-conversion",
"//build/config:Wno-extra-semi",
"//build/config:Wno-missing-prototypes",
]
public_configs = [ ":common_public_configs" ]
cflags_c = [ "-Wno-implicit-function-declaration" ]
if (is_kernel) {
public_deps = [
"//zircon/kernel/lib/ktl",
"//zircon/kernel/lib/libc",
]
}
}
static_library("tss2-rc") {
include_dirs = [
"src/include/tss2",
"src/src",
]
sources = [
"src/src/tss2-rc/tss2_rc.c",
"src/src/util/log.h",
]
configs += [
"//build/config:Wno-conversion",
"//build/config:Wno-extra-semi",
]
cflags_c = [ "-Wno-incompatible-pointer-types-discards-qualifiers" ]
public_configs = [ ":common_public_configs" ]
if (is_kernel) {
public_deps = [
"//zircon/kernel/lib/ktl",
"//zircon/kernel/lib/libc",
]
if (is_efi_toolchain) {
# efi tool chain doesn't have the __thread attribute. Override it to be empty.
defines = [ "__thread=" ]
}
}
}
static_library("tss2-sys") {
include_dirs = [
"src/include/tss2",
"src/src",
"src/src/tss2-sys",
]
sources = [
"src/src/tss2-sys/api/Tss2_Sys_ACT_SetTimeout.c",
"src/src/tss2-sys/api/Tss2_Sys_AC_GetCapability.c",
"src/src/tss2-sys/api/Tss2_Sys_AC_Send.c",
"src/src/tss2-sys/api/Tss2_Sys_ActivateCredential.c",
"src/src/tss2-sys/api/Tss2_Sys_Certify.c",
"src/src/tss2-sys/api/Tss2_Sys_CertifyCreation.c",
"src/src/tss2-sys/api/Tss2_Sys_CertifyX509.c",
"src/src/tss2-sys/api/Tss2_Sys_ChangeEPS.c",
"src/src/tss2-sys/api/Tss2_Sys_ChangePPS.c",
"src/src/tss2-sys/api/Tss2_Sys_Clear.c",
"src/src/tss2-sys/api/Tss2_Sys_ClearControl.c",
"src/src/tss2-sys/api/Tss2_Sys_ClockRateAdjust.c",
"src/src/tss2-sys/api/Tss2_Sys_ClockSet.c",
"src/src/tss2-sys/api/Tss2_Sys_Commit.c",
"src/src/tss2-sys/api/Tss2_Sys_ContextLoad.c",
"src/src/tss2-sys/api/Tss2_Sys_ContextSave.c",
"src/src/tss2-sys/api/Tss2_Sys_Create.c",
"src/src/tss2-sys/api/Tss2_Sys_CreateLoaded.c",
"src/src/tss2-sys/api/Tss2_Sys_CreatePrimary.c",
"src/src/tss2-sys/api/Tss2_Sys_DictionaryAttackLockReset.c",
"src/src/tss2-sys/api/Tss2_Sys_DictionaryAttackParameters.c",
"src/src/tss2-sys/api/Tss2_Sys_Duplicate.c",
"src/src/tss2-sys/api/Tss2_Sys_ECC_Parameters.c",
"src/src/tss2-sys/api/Tss2_Sys_ECDH_KeyGen.c",
"src/src/tss2-sys/api/Tss2_Sys_ECDH_ZGen.c",
"src/src/tss2-sys/api/Tss2_Sys_EC_Ephemeral.c",
"src/src/tss2-sys/api/Tss2_Sys_EncryptDecrypt.c",
"src/src/tss2-sys/api/Tss2_Sys_EncryptDecrypt2.c",
"src/src/tss2-sys/api/Tss2_Sys_EventSequenceComplete.c",
"src/src/tss2-sys/api/Tss2_Sys_EvictControl.c",
"src/src/tss2-sys/api/Tss2_Sys_Execute.c",
"src/src/tss2-sys/api/Tss2_Sys_FieldUpgradeData.c",
"src/src/tss2-sys/api/Tss2_Sys_FieldUpgradeStart.c",
"src/src/tss2-sys/api/Tss2_Sys_Finalize.c",
"src/src/tss2-sys/api/Tss2_Sys_FirmwareRead.c",
"src/src/tss2-sys/api/Tss2_Sys_FlushContext.c",
"src/src/tss2-sys/api/Tss2_Sys_GetCapability.c",
"src/src/tss2-sys/api/Tss2_Sys_GetCommandAuditDigest.c",
"src/src/tss2-sys/api/Tss2_Sys_GetCommandCode.c",
"src/src/tss2-sys/api/Tss2_Sys_GetContextSize.c",
"src/src/tss2-sys/api/Tss2_Sys_GetCpBuffer.c",
"src/src/tss2-sys/api/Tss2_Sys_GetDecryptParam.c",
"src/src/tss2-sys/api/Tss2_Sys_GetEncryptParam.c",
"src/src/tss2-sys/api/Tss2_Sys_GetRandom.c",
"src/src/tss2-sys/api/Tss2_Sys_GetRpBuffer.c",
"src/src/tss2-sys/api/Tss2_Sys_GetRspAuths.c",
"src/src/tss2-sys/api/Tss2_Sys_GetSessionAuditDigest.c",
"src/src/tss2-sys/api/Tss2_Sys_GetTctiContext.c",
"src/src/tss2-sys/api/Tss2_Sys_GetTestResult.c",
"src/src/tss2-sys/api/Tss2_Sys_GetTime.c",
"src/src/tss2-sys/api/Tss2_Sys_HMAC.c",
"src/src/tss2-sys/api/Tss2_Sys_HMAC_Start.c",
"src/src/tss2-sys/api/Tss2_Sys_Hash.c",
"src/src/tss2-sys/api/Tss2_Sys_HashSequenceStart.c",
"src/src/tss2-sys/api/Tss2_Sys_HierarchyChangeAuth.c",
"src/src/tss2-sys/api/Tss2_Sys_HierarchyControl.c",
"src/src/tss2-sys/api/Tss2_Sys_Import.c",
"src/src/tss2-sys/api/Tss2_Sys_IncrementalSelfTest.c",
"src/src/tss2-sys/api/Tss2_Sys_Initialize.c",
"src/src/tss2-sys/api/Tss2_Sys_Load.c",
"src/src/tss2-sys/api/Tss2_Sys_LoadExternal.c",
"src/src/tss2-sys/api/Tss2_Sys_MakeCredential.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_Certify.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_ChangeAuth.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_DefineSpace.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_Extend.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_GlobalWriteLock.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_Increment.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_Read.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_ReadLock.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_ReadPublic.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_SetBits.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_UndefineSpace.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_UndefineSpaceSpecial.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_Write.c",
"src/src/tss2-sys/api/Tss2_Sys_NV_WriteLock.c",
"src/src/tss2-sys/api/Tss2_Sys_ObjectChangeAuth.c",
"src/src/tss2-sys/api/Tss2_Sys_PCR_Allocate.c",
"src/src/tss2-sys/api/Tss2_Sys_PCR_Event.c",
"src/src/tss2-sys/api/Tss2_Sys_PCR_Extend.c",
"src/src/tss2-sys/api/Tss2_Sys_PCR_Read.c",
"src/src/tss2-sys/api/Tss2_Sys_PCR_Reset.c",
"src/src/tss2-sys/api/Tss2_Sys_PCR_SetAuthPolicy.c",
"src/src/tss2-sys/api/Tss2_Sys_PCR_SetAuthValue.c",
"src/src/tss2-sys/api/Tss2_Sys_PP_Commands.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyAuthValue.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyAuthorize.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyAuthorizeNV.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyCommandCode.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyCounterTimer.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyCpHash.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyDuplicationSelect.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyGetDigest.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyLocality.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyNV.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyNameHash.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyNvWritten.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyOR.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyPCR.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyPassword.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyPhysicalPresence.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyRestart.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicySecret.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicySigned.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyTemplate.c",
"src/src/tss2-sys/api/Tss2_Sys_PolicyTicket.c",
"src/src/tss2-sys/api/Tss2_Sys_Policy_AC_SendSelect.c",
"src/src/tss2-sys/api/Tss2_Sys_Quote.c",
"src/src/tss2-sys/api/Tss2_Sys_RSA_Decrypt.c",
"src/src/tss2-sys/api/Tss2_Sys_RSA_Encrypt.c",
"src/src/tss2-sys/api/Tss2_Sys_ReadClock.c",
"src/src/tss2-sys/api/Tss2_Sys_ReadPublic.c",
"src/src/tss2-sys/api/Tss2_Sys_Rewrap.c",
"src/src/tss2-sys/api/Tss2_Sys_SelfTest.c",
"src/src/tss2-sys/api/Tss2_Sys_SequenceComplete.c",
"src/src/tss2-sys/api/Tss2_Sys_SequenceUpdate.c",
"src/src/tss2-sys/api/Tss2_Sys_SetAlgorithmSet.c",
"src/src/tss2-sys/api/Tss2_Sys_SetCmdAuths.c",
"src/src/tss2-sys/api/Tss2_Sys_SetCommandCodeAuditStatus.c",
"src/src/tss2-sys/api/Tss2_Sys_SetDecryptParam.c",
"src/src/tss2-sys/api/Tss2_Sys_SetEncryptParam.c",
"src/src/tss2-sys/api/Tss2_Sys_SetPrimaryPolicy.c",
"src/src/tss2-sys/api/Tss2_Sys_Shutdown.c",
"src/src/tss2-sys/api/Tss2_Sys_Sign.c",
"src/src/tss2-sys/api/Tss2_Sys_StartAuthSession.c",
"src/src/tss2-sys/api/Tss2_Sys_Startup.c",
"src/src/tss2-sys/api/Tss2_Sys_StirRandom.c",
"src/src/tss2-sys/api/Tss2_Sys_TestParms.c",
"src/src/tss2-sys/api/Tss2_Sys_Unseal.c",
"src/src/tss2-sys/api/Tss2_Sys_Vendor_TCG_Test.c",
"src/src/tss2-sys/api/Tss2_Sys_VerifySignature.c",
"src/src/tss2-sys/api/Tss2_Sys_ZGen_2Phase.c",
"src/src/tss2-sys/sysapi_util.c",
"src/src/tss2-sys/sysapi_util.h",
"src/src/util/log.c",
]
configs += [
"//build/config:Wno-conversion",
"//build/config:Wno-extra-semi",
]
deps = [ ":tss2-mu" ]
public_configs = [ ":common_public_configs" ]
cflags_c = [ "-Wno-implicit-function-declaration" ]
if (is_kernel) {
public_deps = [
"//zircon/kernel/lib/ktl",
"//zircon/kernel/lib/libc",
]
}
}
static_library("tss2-esys") {
include_dirs = [
"src/include/tss2",
"src/src",
"src/src/tss2-esys",
]
sources = [
"src/src/tss2-esys/api/Esys_ACT_SetTimeout.c",
"src/src/tss2-esys/api/Esys_ActivateCredential.c",
"src/src/tss2-esys/api/Esys_Certify.c",
"src/src/tss2-esys/api/Esys_CertifyCreation.c",
"src/src/tss2-esys/api/Esys_CertifyX509.c",
"src/src/tss2-esys/api/Esys_ChangeEPS.c",
"src/src/tss2-esys/api/Esys_ChangePPS.c",
"src/src/tss2-esys/api/Esys_Clear.c",
"src/src/tss2-esys/api/Esys_ClearControl.c",
"src/src/tss2-esys/api/Esys_ClockRateAdjust.c",
"src/src/tss2-esys/api/Esys_ClockSet.c",
"src/src/tss2-esys/api/Esys_Commit.c",
"src/src/tss2-esys/api/Esys_ContextLoad.c",
"src/src/tss2-esys/api/Esys_ContextSave.c",
"src/src/tss2-esys/api/Esys_Create.c",
"src/src/tss2-esys/api/Esys_CreateLoaded.c",
"src/src/tss2-esys/api/Esys_CreatePrimary.c",
"src/src/tss2-esys/api/Esys_DictionaryAttackLockReset.c",
"src/src/tss2-esys/api/Esys_DictionaryAttackParameters.c",
"src/src/tss2-esys/api/Esys_Duplicate.c",
"src/src/tss2-esys/api/Esys_ECC_Parameters.c",
"src/src/tss2-esys/api/Esys_ECDH_KeyGen.c",
"src/src/tss2-esys/api/Esys_ECDH_ZGen.c",
"src/src/tss2-esys/api/Esys_EC_Ephemeral.c",
"src/src/tss2-esys/api/Esys_EncryptDecrypt.c",
"src/src/tss2-esys/api/Esys_EncryptDecrypt2.c",
"src/src/tss2-esys/api/Esys_EventSequenceComplete.c",
"src/src/tss2-esys/api/Esys_EvictControl.c",
"src/src/tss2-esys/api/Esys_FieldUpgradeData.c",
"src/src/tss2-esys/api/Esys_FieldUpgradeStart.c",
"src/src/tss2-esys/api/Esys_FirmwareRead.c",
"src/src/tss2-esys/api/Esys_FlushContext.c",
"src/src/tss2-esys/api/Esys_GetCapability.c",
"src/src/tss2-esys/api/Esys_GetCommandAuditDigest.c",
"src/src/tss2-esys/api/Esys_GetRandom.c",
"src/src/tss2-esys/api/Esys_GetSessionAuditDigest.c",
"src/src/tss2-esys/api/Esys_GetTestResult.c",
"src/src/tss2-esys/api/Esys_GetTime.c",
"src/src/tss2-esys/api/Esys_HMAC.c",
"src/src/tss2-esys/api/Esys_HMAC_Start.c",
"src/src/tss2-esys/api/Esys_Hash.c",
"src/src/tss2-esys/api/Esys_HashSequenceStart.c",
"src/src/tss2-esys/api/Esys_HierarchyChangeAuth.c",
"src/src/tss2-esys/api/Esys_HierarchyControl.c",
"src/src/tss2-esys/api/Esys_Import.c",
"src/src/tss2-esys/api/Esys_IncrementalSelfTest.c",
"src/src/tss2-esys/api/Esys_Load.c",
"src/src/tss2-esys/api/Esys_LoadExternal.c",
"src/src/tss2-esys/api/Esys_MakeCredential.c",
"src/src/tss2-esys/api/Esys_NV_Certify.c",
"src/src/tss2-esys/api/Esys_NV_ChangeAuth.c",
"src/src/tss2-esys/api/Esys_NV_DefineSpace.c",
"src/src/tss2-esys/api/Esys_NV_Extend.c",
"src/src/tss2-esys/api/Esys_NV_GlobalWriteLock.c",
"src/src/tss2-esys/api/Esys_NV_Increment.c",
"src/src/tss2-esys/api/Esys_NV_Read.c",
"src/src/tss2-esys/api/Esys_NV_ReadLock.c",
"src/src/tss2-esys/api/Esys_NV_ReadPublic.c",
"src/src/tss2-esys/api/Esys_NV_SetBits.c",
"src/src/tss2-esys/api/Esys_NV_UndefineSpace.c",
"src/src/tss2-esys/api/Esys_NV_UndefineSpaceSpecial.c",
"src/src/tss2-esys/api/Esys_NV_Write.c",
"src/src/tss2-esys/api/Esys_NV_WriteLock.c",
"src/src/tss2-esys/api/Esys_ObjectChangeAuth.c",
"src/src/tss2-esys/api/Esys_PCR_Allocate.c",
"src/src/tss2-esys/api/Esys_PCR_Event.c",
"src/src/tss2-esys/api/Esys_PCR_Extend.c",
"src/src/tss2-esys/api/Esys_PCR_Read.c",
"src/src/tss2-esys/api/Esys_PCR_Reset.c",
"src/src/tss2-esys/api/Esys_PCR_SetAuthPolicy.c",
"src/src/tss2-esys/api/Esys_PCR_SetAuthValue.c",
"src/src/tss2-esys/api/Esys_PP_Commands.c",
"src/src/tss2-esys/api/Esys_PolicyAuthValue.c",
"src/src/tss2-esys/api/Esys_PolicyAuthorize.c",
"src/src/tss2-esys/api/Esys_PolicyAuthorizeNV.c",
"src/src/tss2-esys/api/Esys_PolicyCommandCode.c",
"src/src/tss2-esys/api/Esys_PolicyCounterTimer.c",
"src/src/tss2-esys/api/Esys_PolicyCpHash.c",
"src/src/tss2-esys/api/Esys_PolicyDuplicationSelect.c",
"src/src/tss2-esys/api/Esys_PolicyGetDigest.c",
"src/src/tss2-esys/api/Esys_PolicyLocality.c",
"src/src/tss2-esys/api/Esys_PolicyNV.c",
"src/src/tss2-esys/api/Esys_PolicyNameHash.c",
"src/src/tss2-esys/api/Esys_PolicyNvWritten.c",
"src/src/tss2-esys/api/Esys_PolicyOR.c",
"src/src/tss2-esys/api/Esys_PolicyPCR.c",
"src/src/tss2-esys/api/Esys_PolicyPassword.c",
"src/src/tss2-esys/api/Esys_PolicyPhysicalPresence.c",
"src/src/tss2-esys/api/Esys_PolicyRestart.c",
"src/src/tss2-esys/api/Esys_PolicySecret.c",
"src/src/tss2-esys/api/Esys_PolicySigned.c",
"src/src/tss2-esys/api/Esys_PolicyTemplate.c",
"src/src/tss2-esys/api/Esys_PolicyTicket.c",
"src/src/tss2-esys/api/Esys_Quote.c",
"src/src/tss2-esys/api/Esys_RSA_Decrypt.c",
"src/src/tss2-esys/api/Esys_RSA_Encrypt.c",
"src/src/tss2-esys/api/Esys_ReadClock.c",
"src/src/tss2-esys/api/Esys_ReadPublic.c",
"src/src/tss2-esys/api/Esys_Rewrap.c",
"src/src/tss2-esys/api/Esys_SelfTest.c",
"src/src/tss2-esys/api/Esys_SequenceComplete.c",
"src/src/tss2-esys/api/Esys_SequenceUpdate.c",
"src/src/tss2-esys/api/Esys_SetAlgorithmSet.c",
"src/src/tss2-esys/api/Esys_SetCommandCodeAuditStatus.c",
"src/src/tss2-esys/api/Esys_SetPrimaryPolicy.c",
"src/src/tss2-esys/api/Esys_Shutdown.c",
"src/src/tss2-esys/api/Esys_Sign.c",
"src/src/tss2-esys/api/Esys_StartAuthSession.c",
"src/src/tss2-esys/api/Esys_Startup.c",
"src/src/tss2-esys/api/Esys_StirRandom.c",
"src/src/tss2-esys/api/Esys_TestParms.c",
"src/src/tss2-esys/api/Esys_Unseal.c",
"src/src/tss2-esys/api/Esys_Vendor_TCG_Test.c",
"src/src/tss2-esys/api/Esys_VerifySignature.c",
"src/src/tss2-esys/api/Esys_ZGen_2Phase.c",
"src/src/tss2-esys/esys_context.c",
"src/src/tss2-esys/esys_crypto.c",
"src/src/tss2-esys/esys_crypto_bssl.c",
"src/src/tss2-esys/esys_free.c",
"src/src/tss2-esys/esys_iutil.c",
"src/src/tss2-esys/esys_mu.c",
"src/src/tss2-esys/esys_tr.c",
"src/src/util/log.c",
]
configs += [
"//build/config:Wno-conversion",
"//build/config:Wno-extra-semi",
"//build/config:Wno-strict-prototypes",
]
deps = [
":tss2-mu",
":tss2-rc",
":tss2-sys",
"//third_party/boringssl",
]
}
static_library("tss2-tcti-fuchsia-agent") {
include_dirs = [
"src/include/tss2",
"src/src",
]
sources = [
"src/src/tss2-tcti/tcti-common.c",
"src/src/tss2-tcti/tcti-common.h",
"src/src/tss2-tcti/tcti-fuchsia.c",
"src/src/tss2-tcti/tcti-fuchsia.h",
"src/src/util/io.c",
"src/src/util/io.h",
"src/src/util/log.c",
"src/src/util/log.h",
]
configs += [
"//build/config:Wno-conversion",
"//build/config:Wno-extra-semi",
]
deps = [
":tss2-mu",
"//src/security/lib/fuchsia-tcti:agent",
]
}
static_library("tss2-tcti-fuchsia-device") {
include_dirs = [
"src/include/tss2",
"src/src",
]
sources = [
"src/src/tss2-tcti/tcti-common.c",
"src/src/tss2-tcti/tcti-common.h",
"src/src/tss2-tcti/tcti-fuchsia.c",
"src/src/tss2-tcti/tcti-fuchsia.h",
"src/src/util/io.c",
"src/src/util/io.h",
"src/src/util/log.c",
"src/src/util/log.h",
]
configs += [
"//build/config:Wno-conversion",
"//build/config:Wno-extra-semi",
]
deps = [
":tss2-mu",
"//src/security/lib/fuchsia-tcti:device",
]
}
group("tpm2-tss") {
deps = [
":tss2-esys",
":tss2-mu",
":tss2-rc",
":tss2-sys",
":tss2-tcti-fuchsia-agent",
":tss2-tcti-fuchsia-device",
]
}