@@ -8,24 +8,21 @@ MACHINE_FEATURES += "touchscreen"
SERIAL_CONSOLES = "115200;ttyS2"
+KERNEL_DEVICETREE_PREFIX = " \
+ am57 \
+ ti/am57 \
+ ti/lcd \
+ ti/ov10635 \
+"
+
KERNEL_DEVICETREE = " \
am57xx-beagle-x15.dtb \
am57xx-beagle-x15-revb1.dtb \
am57xx-beagle-x15-revc.dtb \
am5729-beagleboneai.dtb \
- ${@oe.utils.conditional('PREFERRED_PROVIDER_virtual/kernel', 'linux-ti-mainline', '', 'am57xx-evm.dtb', d)} \
- ti/am57xx-evm-common.dtbo \
- ${@oe.utils.conditional('PREFERRED_PROVIDER_virtual/kernel', 'linux-ti-mainline', '', 'am57xx-evm-reva3.dtb', d)} \
- ti/am57xx-evm-reva3.dtbo \
am571x-idk.dtb \
- ti/am571x-idk-touchscreen.dtbo \
am572x-idk.dtb \
am574x-idk.dtb \
- ti/am57xx-idk-osd-lcd-common.dtbo \
- ti/am572x-idk-touchscreen.dtbo \
- ti/lcd-osd101t2587.dtbo \
- ti/lcd-osd101t2045.dtbo \
- ${@oe.utils.conditional('PREFERRED_PROVIDER_virtual/kernel', 'linux-ti-mainline', '', 'ti/ov10635.dtbo', d)} \
"
KERNEL_DEVICETREE += "${@oe.utils.conditional('ENABLE_TI_UIO_DEVICES', '1', 'am574x-idk-pru-excl-uio.dtb am572x-idk-pru-excl-uio.dtb am571x-idk-pru-excl-uio.dtb', '', d)}"
@@ -4,23 +4,13 @@
require conf/machine/include/am62axx.inc
+KERNEL_DEVICETREE_PREFIX = " \
+ ti/k3-am62a7 \
+ ti/k3-j721e-fpdlink \
+"
+
KERNEL_DEVICETREE = " \
ti/k3-am62a7-sk.dtb \
- ti/k3-am62a7-fpdlink-ov2312-0-0.dtbo \
- ti/k3-am62a7-fpdlink-ov2312-0-1.dtbo \
- ti/k3-am62a7-fpdlink-ov2312-0-2.dtbo \
- ti/k3-am62a7-fpdlink-ov2312-0-3.dtbo \
- ti/k3-am62a7-fpdlink-sk-fusion.dtbo \
- ti/k3-am62a7-sk-csi2-imx219.dtbo \
- ti/k3-am62a7-sk-ethernet-dc01.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-3.dtbo \
"
UBOOT_MACHINE = "am62ax_evm_a53_defconfig"
@@ -4,16 +4,10 @@
require conf/machine/include/am62xx.inc
+KERNEL_DEVICETREE_PREFIX = "ti/k3-am625"
+
KERNEL_DEVICETREE = " \
ti/k3-am625-sk.dtb \
- ti/k3-am625-skeleton.dtb \
- ti/k3-am625-sk-lpmdemo.dtb \
- ti/k3-am625-sk-csi2-ov5640.dtbo \
- ti/k3-am625-sk-csi2-tevi-ov5640.dtbo \
- ti/k3-am625-sk-ecap-capture.dtbo \
- ti/k3-am625-sk-hdmi-audio.dtbo \
- ti/k3-am625-sk-mcan.dtbo \
- ti/k3-am625-sk-oldi-panel.dtbo \
"
UBOOT_MACHINE = "am62x_evm_a53_defconfig"
@@ -4,12 +4,13 @@
require conf/machine/include/am62xx-lp.inc
+KERNEL_DEVICETREE_PREFIX = " \
+ ti/k3-am62x-lp \
+ ti/k3-am625-sk \
+"
+
KERNEL_DEVICETREE = " \
ti/k3-am62x-lp-sk.dtb \
- ti/k3-am625-skeleton.dtb \
- ti/k3-am625-sk-lpmdemo.dtb \
- ti/k3-am625-sk-csi2-ov5640.dtbo \
- ti/k3-am62x-lp-sk-oldi-panel.dtbo \
"
SPL_BINARY = "tispl.bin_HS"
@@ -4,7 +4,13 @@
require conf/machine/include/am57xx.inc
-KERNEL_DEVICETREE = "am57xx-beagle-x15.dtb am57xx-beagle-x15-revb1.dtb am57xx-beagle-x15-revc.dtb"
+KERNEL_DEVICETREE_PREFIX = "am57xx-beagle-x15"
+
+KERNEL_DEVICETREE = " \
+ am57xx-beagle-x15.dtb \
+ am57xx-beagle-x15-revb1.dtb \
+ am57xx-beagle-x15-revc.dtb \
+"
MACHINE_GUI_CLASS = "bigscreen"
@@ -4,9 +4,16 @@
require conf/machine/include/ti33x.inc
-KERNEL_DEVICETREE = "am335x-bone.dtb am335x-boneblue.dtb \
- am335x-boneblack.dtb am335x-boneblack-wireless.dtb \
- am335x-bonegreen.dtb am335x-bonegreen-wireless.dtb"
+KERNEL_DEVICETREE_PREFIX = "am335x-bone"
+
+KERNEL_DEVICETREE = " \
+ am335x-bone.dtb \
+ am335x-boneblue.dtb \
+ am335x-boneblack.dtb \
+ am335x-boneblack-wireless.dtb \
+ am335x-bonegreen.dtb \
+ am335x-bonegreen-wireless.dtb \
+"
MACHINE_GUI_CLASS = "bigscreen"
MACHINE_FEATURES += "screen"
@@ -8,20 +8,18 @@ MACHINE_FEATURES += "touchscreen"
SERIAL_CONSOLES = "115200;ttyS0"
+KERNEL_DEVICETREE_PREFIX = " \
+ dra7 \
+ ti/dra7 \
+ ti/lcd \
+"
+
KERNEL_DEVICETREE = " \
dra7-evm.dtb \
- ti/dra7x-evm-osd-lcd-common.dtbo \
dra71-evm.dtb \
- ${@oe.utils.conditional('PREFERRED_PROVIDER_virtual/kernel', 'linux-ti-mainline', '', 'dra71-evm-nand.dtb', d)} \
- ti/dra71-evm-lcd-auo-g101evn01.0.dtbo \
dra72-evm.dtb \
dra72-evm-revc.dtb \
- ti/dra72-evm-touchscreen.dtbo \
- ti/dra74-evm-touchscreen.dtbo \
dra76-evm.dtb \
- ti/dra76-evm-tfp410.dtbo \
- ti/lcd-osd101t2045.dtbo \
- ti/lcd-osd101t2587.dtbo \
"
UBOOT_MACHINE = "dra7xx_evm_config"
@@ -4,12 +4,11 @@ SOC_FAMILY:append = ":am64xx"
SERIAL_CONSOLES = "115200;ttyS2 115200;ttyS1"
SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
+KERNEL_DEVICETREE_PREFIX = "ti/k3-am642"
+
KERNEL_DEVICETREE = " \
ti/k3-am642-evm.dtb \
ti/k3-am642-sk.dtb \
- ti/k3-am642-evm-icssg1-dualemac.dtbo \
- ti/k3-am642-evm-icssg1-dualemac-mii.dtbo \
- ti/k3-am642-evm-nand.dtbo \
"
# Default tiboot3.bin on AM64x is for SR2.0 HS-FS
@@ -8,18 +8,10 @@ SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
PREFERRED_PROVIDER_virtual/gpudriver ?= ""
+KERNEL_DEVICETREE_PREFIX = "ti/k3-am654"
+
KERNEL_DEVICETREE = " \
ti/k3-am654-base-board.dtb \
- ti/k3-am654-base-board-sr1.dtbo \
- ti/k3-am654-gp.dtbo \
- ti/k3-am654-idk.dtbo \
- ti/k3-am654-idk-sr1.dtbo \
- ti/k3-am654-sr1.dtbo \
- ti/k3-am654-pcie-usb2.dtbo \
- ti/k3-am654-pcie-usb3.dtbo \
- ti/k3-am654-evm-tc358876.dtbo \
- ti/k3-am654-evm-oldi-lcd1evm.dtbo \
- ti/k3-am654-evm-ov5640.dtbo \
"
# On AM65x the file tiboot3.bin comes from the bootloader not ti-sci-fw
@@ -18,12 +18,19 @@ PVR_DISPLAY_CONTROLLER_ALIAS ?= "tilcdc"
KERNEL_IMAGETYPE = "zImage"
+KERNEL_DEVICETREE_PREFIX = "am335x"
+
KERNEL_DEVICETREE = " \
- am335x-evm.dtb am335x-evmsk.dtb \
+ am335x-evm.dtb \
+ am335x-evmsk.dtb \
am335x-icev2.dtb \
- am335x-pocketbeagle.dtb am335x-bone.dtb am335x-boneblue.dtb \
- am335x-bonegreen.dtb am335x-bonegreen-wireless.dtb \
- am335x-boneblack.dtb am335x-boneblack-wireless.dtb \
+ am335x-pocketbeagle.dtb \
+ am335x-bone.dtb \
+ am335x-boneblue.dtb \
+ am335x-bonegreen.dtb \
+ am335x-bonegreen-wireless.dtb \
+ am335x-boneblack.dtb \
+ am335x-boneblack-wireless.dtb \
am335x-sancloud-bbe.dtb \
"
@@ -18,12 +18,16 @@ PVR_DISPLAY_CONTROLLER_ALIAS ?= "omapdrm"
KERNEL_IMAGETYPE = "zImage"
+KERNEL_DEVICETREE_PREFIX = " \
+ am437x \
+ am43x \
+"
+
KERNEL_DEVICETREE = " \
am437x-gp-evm.dtb \
- ${@oe.utils.conditional('PREFERRED_PROVIDER_virtual/kernel', 'linux-ti-mainline', '', 'am437x-gp-evm-hdmi.dtb', d)} \
- am437x-sk-evm.dtb am437x-idk-evm.dtb \
+ am437x-sk-evm.dtb \
+ am437x-idk-evm.dtb \
am43x-epos-evm.dtb \
- ${@oe.utils.conditional('PREFERRED_PROVIDER_virtual/kernel', 'linux-ti-mainline', '', 'am43x-epos-evm-hdmi.dtb', d)} \
"
KERNEL_DEVICETREE += "${@oe.utils.conditional('ENABLE_TI_UIO_DEVICES', '1', 'am437x-idk-pru-excl-uio.dtb', '', d)}"
@@ -7,10 +7,10 @@ require conf/machine/include/j7200.inc
SERIAL_CONSOLES = "115200;ttyS2 115200;ttyS3"
SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
+KERNEL_DEVICETREE_PREFIX = "ti/k3-j7200"
+
KERNEL_DEVICETREE = " \
ti/k3-j7200-common-proc-board.dtb \
- ti/k3-j7200-mcspi-loopback.dtbo \
- ti/k3-j7200-common-proc-board-uarts.dtbo \
"
UBOOT_MACHINE = "j7200_evm_a72_config"
@@ -7,33 +7,14 @@ require conf/machine/include/j721e.inc
SERIAL_CONSOLES = "115200;ttyS2 115200;ttyS3"
SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
+KERNEL_DEVICETREE_PREFIX = " \
+ ti/k3-j721e \
+ ti/k3-j7200-mcspi-loopback \
+"
+
KERNEL_DEVICETREE = " \
ti/k3-j721e-common-proc-board.dtb \
- ti/k3-j721e-common-proc-board-infotainment.dtbo \
- ti/k3-j721e-cpb-csi2-ov5640.dtbo \
- ti/k3-j721e-fpdlink-cpb-fusion.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-3.dtbo \
ti/k3-j721e-sk.dtb \
- ti/k3-j721e-fpdlink-sk-fusion.dtbo \
- ti/k3-j721e-sk-csi2-ov5640.dtbo \
- ti/k3-j721e-sk-rpi-cam-imx219.dtbo \
- ti/k3-j721e-common-proc-board-uarts.dtbo \
- ti/k3-j7200-mcspi-loopback.dtbo \
"
UBOOT_MACHINE = "j721e_evm_a72_config"
@@ -9,35 +9,13 @@ SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
TFA_K3_USART = "0x8"
OPTEE_K3_USART = "0x8"
+KERNEL_DEVICETREE_PREFIX = " \
+ ti/k3-j721s2 \
+ ti/k3-j7200-mcspi-loopback \
+"
+
KERNEL_DEVICETREE = " \
- ti/k3-am68-sk-base-board.dtb \
- ti/k3-am68-sk-bb-csi2-ov5640.dtbo \
- ti/k3-am68-sk-bb-rpi-cam-imx219.dtbo \
- ti/k3-am68-sk-fpdlink-fusion.dtbo \
- ti/k3-am68-sk-rpi-hdr-ehrpwm.dtbo \
- ti/k3-am68-sk-som-ddr_mem_carveout.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-3.dtbo \
ti/k3-j721s2-common-proc-board.dtb \
- ti/k3-j721s2-cpb-csi2-ov5640.dtbo \
- ti/k3-j721s2-fpdlink-cpb-fusion.dtbo \
- ti/k3-j721s2-gesi-exp-board.dtbo \
- ti/k3-j721s2-common-proc-board-uarts.dtbo \
- ti/k3-j7200-mcspi-loopback.dtbo \
"
UBOOT_MACHINE = "j721s2_evm_a72_defconfig"
@@ -9,36 +9,13 @@ SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
TFA_K3_USART = "0x8"
OPTEE_K3_USART = "0x8"
-KERNEL_DEVICETREE = " \
- ti/k3-am69-sk.dtb \
- ti/k3-am69-sk-csi2-ov5640.dtbo \
- ti/k3-am69-sk-ddr-mem-carveout.dtbo \
- ti/k3-am69-sk-fpdlink-fusion.dtbo \
- ti/k3-am69-sk-rpi-hdr-ehrpwm.dtbo \
- ti/k3-am69-sk-rpi-cam-imx219.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-0-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-cm-1-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-0-3.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-0.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-1.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-2.dtbo \
- ti/k3-j721e-fpdlink-imx390-rcm-1-3.dtbo \
- ti/k3-j784s4-evm.dtb \
- ti/k3-j784s4-evm-csi2-ov5640.dtbo \
- ti/k3-j784s4-fpdlink-fusion.dtbo \
- ti/k3-j784s4-evm-uarts.dtbo \
- ti/k3-j7200-mcspi-loopback.dtbo \
+KERNEL_DEVICETREE_PREFIX = " \
+ ti/k3-j784s4 \
+ ti/k3-j7200-mcspi-loopback \
"
+KERNEL_DEVICETREE = ""
+
UBOOT_MACHINE = "j784s4_evm_a72_defconfig"
# Default tiboot3.bin on J784S4 is for GP
@@ -15,4 +15,9 @@ IMAGE_FSTYPES += "tar.xz"
SERIAL_CONSOLES = "115200;ttyS2"
-KERNEL_DEVICETREE = "da850-evm.dtb da850-lcdk.dtb"
+KERNEL_DEVICETREE_PREFIX = "da850"
+
+KERNEL_DEVICETREE = " \
+ da850-evm.dtb \
+ da850-lcdk.dtb \
+"
@@ -39,34 +39,11 @@ SRC_URI += " \
SRCREV_ti-upstream-tools = "0f60697843bba6f8d721b14da92b1652563ccb95"
SRCREV_FORMAT = "linux"
-KERNEL_DEVICETREE = ""
-
kernel_do_compile:append() {
oe_runmake dtbs CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
oe_runmake -C ${S}/ti-upstream-tools LINUX=${S} DTC=${B}/scripts/dtc/dtc O=${B} CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
}
-do_install:append() {
- for dtbf in `find arch/${ARCH}/boot/dts/ \( -name '*.dtb' -or -name '*.dtbo' \)`; do
- dtb="$dtbf"
- dtb_ext=${dtb##*.}
- dtb_base_name=`basename $dtb .$dtb_ext`
- dtb_path=`get_real_dtb_path_in_kernel "$dtb"`
- install -m 0644 $dtbf ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext
- done
-}
-
-do_deploy:append() {
- for dtbf in `find arch/${ARCH}/boot/dts/ \( -name '*.dtb' -or -name '*.dtbo' \) -printf '%P\n'`; do
- dtb="$dtbf"
- dtb_ext=${dtb##*.}
- dtb_base_name=`basename $dtb .$dtb_ext`
- dtb_dir=`dirname $dtb`
- install -d ${DEPLOYDIR}
- install -m 0644 ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext ${DEPLOYDIR}/$dtb_base_name.$dtb_ext
- done
-}
-
do_shared_workdir:prepend() {
cd ${B}
echo >> Module.symvers
@@ -19,21 +19,6 @@ PV = "6.1.0-rc1+git${SRCPV}"
SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git;protocol=https;branch=master"
-def list_dtbs(dts_dir, dts_subdir):
- import os
- import fnmatch
- matches = []
-
- for root,dirnames,filenames in os.walk(os.path.join(dts_dir, dts_subdir)):
- for filename in fnmatch.filter(filenames, '*.dtb'):
- matches.append(os.path.join(dts_subdir, filename))
- for filename in fnmatch.filter(filenames, '*.dtbo'):
- matches.append(os.path.join(dts_subdir, filename))
- return ' '.join(matches)
-
-DTS_SUBDIR = ""
-DTS_SUBDIR:k3 = "ti"
-KERNEL_DEVICETREE = "${@list_dtbs('${B}/arch/${ARCH}/boot/dts', '${DTS_SUBDIR}')}"
DEFCONFIG_NAME = "multi_v7_defconfig"
DEFCONFIG_NAME:k3 = "defconfig"
KERNEL_CONFIG_COMMAND = "oe_runmake -C ${S} O=${B} ${DEFCONFIG_NAME}"
@@ -9,6 +9,7 @@ DEFCONFIG_BUILDER = "${S}/ti_config_fragments/defconfig_builder.sh"
require recipes-kernel/linux/setup-defconfig.inc
require recipes-kernel/linux/kernel-rdepends.inc
require recipes-kernel/linux/ti-kernel.inc
+include ${@ 'recipes-kernel/linux/ti-kernel-devicetree-prefix.inc' if d.getVar('KERNEL_DEVICETREE_PREFIX') else ''}
DEPENDS += "gmp-native libmpc-native"
new file mode 100644
@@ -0,0 +1,21 @@
+
+def get_dtbs_from_kernel(dts_dir, dts_prefix):
+ import os
+ import glob
+ matches = []
+
+ for prefix in dts_prefix.split():
+ filenames = glob.glob(dts_dir + prefix + '*.dts')
+ filenames += glob.glob(dts_dir + prefix + '*.dtso')
+ for filename in filenames:
+ # Before v6.2 kernels DTB Overlays shared the same name as DTB files
+ # so we need to search the file to find the type
+ with open(filename) as f:
+ file_postfix = '.dtbo' if '/plugin/;' in f.read() else '.dtb'
+ filename = os.path.split(filename)[1]
+ filename = os.path.splitext(filename)[0] + file_postfix
+ filename = os.path.join(os.path.split(prefix)[0], filename)
+ matches.append(filename)
+ return ' '.join(matches)
+
+KERNEL_DEVICETREE = "${@get_dtbs_from_kernel('${S}/arch/${ARCH}/boot/dts/', '${KERNEL_DEVICETREE_PREFIX}')}"