summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitlab/issue_templates/default.md2
-rw-r--r--.gitlab/issue_templates/mytemplate.md3
-rw-r--r--.gitlab/merge_request_templates/default.md2
-rw-r--r--.gitlab/merge_request_templates/mytemplate.md3
-rwxr-xr-xagl-layers-overview.md1
-rw-r--r--docs/profiles.md1
-rw-r--r--meta-agl-bsp/README19
-rw-r--r--meta-agl-bsp/conf/include/agl_am62xx-evm.inc8
-rw-r--r--meta-agl-bsp/conf/include/agl_bbe.inc40
-rw-r--r--meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_beaglebone.inc40
-rw-r--r--meta-agl-bsp/conf/include/agl_beagleplay.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_cubox-i.inc31
-rw-r--r--meta-agl-bsp/conf/include/agl_cyclone5.inc2
-rw-r--r--meta-agl-bsp/conf/include/agl_dra7xx-evm.inc42
-rw-r--r--meta-agl-bsp/conf/include/agl_dragonboard-410c.inc3
-rw-r--r--meta-agl-bsp/conf/include/agl_dragonboard-820c.inc2
-rw-r--r--meta-agl-bsp/conf/include/agl_ebisu.inc8
-rw-r--r--meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc11
-rw-r--r--meta-agl-bsp/conf/include/agl_h3-salvator-x.inc7
-rw-r--r--meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc17
-rw-r--r--meta-agl-bsp/conf/include/agl_h3ulcb.inc3
-rw-r--r--meta-agl-bsp/conf/include/agl_hsdk.inc4
-rw-r--r--meta-agl-bsp/conf/include/agl_imx-common.inc8
-rw-r--r--meta-agl-bsp/conf/include/agl_imx6-common.inc14
-rw-r--r--meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc22
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mq-evk-common.inc8
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc8
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mq-evk.inc23
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc19
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc1
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mqevk.inc23
-rw-r--r--meta-agl-bsp/conf/include/agl_j721e-evm.inc11
-rw-r--r--meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_m3-salvator-x.inc5
-rw-r--r--meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc20
-rw-r--r--meta-agl-bsp/conf/include/agl_m3ulcb.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_nitrogen6x.inc20
-rw-r--r--meta-agl-bsp/conf/include/agl_qemuarm.inc20
-rw-r--r--meta-agl-bsp/conf/include/agl_qemuarm64.inc23
-rw-r--r--meta-agl-bsp/conf/include/agl_qemuriscv64.inc11
-rw-r--r--meta-agl-bsp/conf/include/agl_qemux86-64.inc17
-rw-r--r--meta-agl-bsp/conf/include/agl_raspberrypi3.inc27
-rw-r--r--meta-agl-bsp/conf/include/agl_raspberrypi4.inc22
-rw-r--r--meta-agl-bsp/conf/include/agl_raspberrypi5.inc34
-rw-r--r--meta-agl-bsp/conf/include/agl_rcar-nogfx.inc57
-rw-r--r--meta-agl-bsp/conf/include/agl_rcar.inc45
-rw-r--r--meta-agl-bsp/conf/include/agl_refhw-h3.inc16
-rw-r--r--meta-agl-bsp/conf/include/agl_s4sk.inc9
-rw-r--r--meta-agl-bsp/conf/include/agl_salvator-nogfx.inc17
-rw-r--r--meta-agl-bsp/conf/include/agl_salvator.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_unmatched.inc4
-rw-r--r--meta-agl-bsp/conf/include/agl_virtio-aarch64.inc14
-rw-r--r--meta-agl-bsp/conf/layer.conf2
-rw-r--r--meta-agl-bsp/conf/machine/include/virtio.inc23
-rw-r--r--meta-agl-bsp/conf/machine/virtio-aarch64.conf36
-rw-r--r--meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/gpsd.refhw5
-rw-r--r--meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw-gpsd-helper.sh35
-rw-r--r--meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw-gpsd-helper.sh.bak32
-rw-r--r--meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw.conf2
-rw-r--r--meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend33
-rw-r--r--meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/mesa/mesa_%.bbappend7
-rw-r--r--meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/libva_%.bbappend4
-rw-r--r--meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf.bbappend7
-rw-r--r--meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf/virtual.cfg18
-rw-r--r--meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston_%.bbappend3
-rw-r--r--meta-agl-bsp/meta-core/recipes-core/ovmf/ovmf_git.bbappend1
-rw-r--r--meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch48
-rw-r--r--meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend3
-rw-r--r--meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc9
-rw-r--r--meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_agl.inc3
-rwxr-xr-xmeta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/hciattach.cfg17
-rw-r--r--meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/most_deps.cfg9
-rw-r--r--meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_%.bbappend17
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service9
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh48
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb30
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/files/0001-kmsro-add-imx-dcss.patch34
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/mesa_%.bbappend10
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston-ini-conf/fbdev.cfg3
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_10.0.1.imx.bbappend10
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/0004-Smack-Assign-smack_known_web-label-for-kernel-thread.patch49
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/fixups.cfg1
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch13
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch5
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0003-drm-etnaviv-fix-TS-cache-flushing-on-GPUs-with-BLT-e.patch151
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0004-drm-sched-Fix-passing-zero-to-PTR_ERR-warning-v2.patch50
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend31
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-lts_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc.inc22
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend26
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb40
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws62
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h58
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc27
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-iot-sdk-c/azure-iot-sdk-c_%.bbappend5
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-macro-utils-c/azure-macro-utils-c_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-azure/umock-c/umock-c_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-qcom/recipes-bsp/96boards-tools/96boards-tools_0.12.bb32
-rw-r--r--meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/files/qcom-q6v5-pil.service12
-rw-r--r--meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/q6v5-pil.bb20
-rw-r--r--meta-agl-bsp/meta-qcom/recipes-kernel/linux/linux-linaro-qcomlt_%.bbappend3
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/bootfiles.bbappend1
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend13
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend6
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf.bbappend3
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/dsi.cfg5
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270-720p.cfg7
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb43
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.1.bbappend3
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/files/0001-fdtoverlay-Prevent-overlays-from-modifying-phandle-p.patch154
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/0002-Disable-DMA-in-sdhci-driver.patch25
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/0003-Fix-PCIe-in-dom0-for-RPi4.patch31
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch48
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/xen-be.cfg (renamed from meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/xen-be.cfg)0
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend57
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_4.19.bbappend20
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend2
-rw-r--r--meta-agl-bsp/meta-rcar-gateway/recipes-kernel/linux/linux-renesas_%.bbappend11
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES10
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc14
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/alsa-state/alsa-state.bbappend3
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb4
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend6
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend6
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch68
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0004-ADSP-enable-and-add-sound-hardware-abstraction_kf.patch58
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/disable_most.cfg9
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas_%.bbappend11
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend (renamed from meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-kingfisher-conf_1.0.bb)30
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc31
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state.bbappend2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state/asound.state2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend12
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/files/0001-Boot-Normal-World-in-EL2.patch28
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb10
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb8
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bbappend4
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb8
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb8
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend5
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl.bbappend1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/weston-ini-conf.bbappend19
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend4
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngr.bbappend2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngrbuf.bbappend2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspm-if.bbappend2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspmif.bbappend2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch95
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/Set_GOV_PERFORMANCE.cfg2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a77960-ulcb-xen.dts (renamed from meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a7796-m3ulcb-xen.dts)2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/vivid.cfg6
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend26
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.20.%.bbappend1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.%.bbappend1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngr-user-module.bbappend11
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngrbuf-user-module.bbappend11
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh7
-rw-r--r--meta-agl-bsp/meta-sancloud/recipes-graphics/wayland/weston-ini-conf.bbappend2
-rw-r--r--meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe/disable-relay.cfg1
-rw-r--r--meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend5
-rw-r--r--meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/files/0001-WIP-Make-BSP-work-under-YP-kirkstone.patch46
-rw-r--r--meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/u-boot-sifive_2023.07.02.bbappend3
-rw-r--r--meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive/radeon.cfg19
-rw-r--r--meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive_%.bbappend6
-rw-r--r--meta-agl-bsp/meta-synopsys/recipes-kernel/linux-yocto_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-ti-bsp/.gitkeep (renamed from meta-agl-bsp/meta-ti/.gitkeep)0
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend (renamed from meta-agl-bsp/meta-ti/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend)0
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa-pvr_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/pvr-fix.inc1
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-bb.org_%.bbappend2
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_%.bbappend2
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-Add-soc-performance-monitor-utilites.patch3570
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch41
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-weston-Fix-touch-screen-crash-issue.patch39
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-weston-drm-fix-dual-display-issue.patch79
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston_8.0.0.bbappend13
-rw-r--r--meta-agl-bsp/meta-ti/recipes-bsp/alsa-state/alsa-state.bbappend1
-rw-r--r--meta-agl-bsp/meta-ti/recipes-bsp/alsa-state/alsa-state/asound.state1347
-rw-r--r--meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km/0001-Add-support-for-AGL-toolchain.patch30
-rw-r--r--meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km_%.bbappend3
-rwxr-xr-xmeta-agl-bsp/meta-ti/recipes-bsp/u-boot/files/uEnv.txt1
-rw-r--r--meta-agl-bsp/meta-ti/recipes-bsp/u-boot/u-boot-ti-staging_%.bbappend16
-rw-r--r--meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um/pvr.service19
-rw-r--r--meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um_%.bbappend18
-rw-r--r--meta-agl-bsp/meta-ti/recipes-graphics/mesa/mesa-gl_%.bbappend7
-rw-r--r--meta-agl-bsp/meta-ti/recipes-graphics/wayland/weston-ini-conf.bbappend7
-rw-r--r--meta-agl-bsp/meta-ti/recipes-graphics/wayland/weston-ini-conf/unnamed.cfg3
-rw-r--r--meta-agl-bsp/meta-ti/recipes-kernel/linux/files/dcan2_pinmux_enable.patch39
-rw-r--r--meta-agl-bsp/meta-ti/recipes-kernel/linux/linux-ti-staging_%.bbappend11
-rw-r--r--meta-agl-bsp/meta-ti/recipes-multimedia/pulseaudio/pulseaudio/dra7xx-evm-set-default-sink-source.patch15
-rw-r--r--meta-agl-bsp/meta-ti/recipes-multimedia/pulseaudio/pulseaudio_%.bbappend7
-rw-r--r--meta-agl-bsp/openembedded-layer/recipes-devtools/lua/lua_%.bbappend4
-rw-r--r--meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-Set-up-environment-for-OSTree-integration.patch41
-rw-r--r--meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-fixup-build-with-gcc6.patch86
-rw-r--r--meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch138
-rw-r--r--meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-fixup-build-with-gcc7.patch101
-rw-r--r--meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota_2015.07.bb29
-rw-r--r--meta-agl-bsp/recipes-graphics/opencv/opencv/0004-Change-Max-Device-Count-To-16.patch13
-rw-r--r--meta-agl-bsp/recipes-graphics/opencv/opencv_4.%.bbappend5
-rw-r--r--meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bb28
-rw-r--r--meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bbappend5
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch40
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch109
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux-agl-4.14.inc14
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux-agl.inc132
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux-yocto_%.bbappend1
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg37
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/can-bus.cfg42
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg1
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/i2c-led.cfg3
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/iiodevice.cfg26
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/joystick.cfg9
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/netfilter.cfg1
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg34
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/procevent.cfg2
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg7
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/rtl_sdr.cfg4
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/scheddebug.cfg1
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg3
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg8
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/usbaudio.cfg2
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/usbmodem.cfg7
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg4
-rw-r--r--meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg6
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb8
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend8
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend12
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch34
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_22.%.bbappend3
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend10
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc13
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg3
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg3
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.15.bbappend17
-rw-r--r--meta-agl-core/LICENSE (renamed from meta-agl-distro/LICENSE)0
-rw-r--r--meta-agl-core/LICENSE.GPL-2.0-only (renamed from meta-agl-distro/LICENSE.GPL-2.0-only)0
-rw-r--r--meta-agl-core/LICENSE.MIT (renamed from meta-agl-distro/LICENSE.MIT)0
l---------meta-agl-core/README1
-rw-r--r--meta-agl-core/README-AGL.md33
-rw-r--r--meta-agl-core/classes/agl-core-image.bbclass32
-rw-r--r--meta-agl-core/classes/agl-crosssdk.bbclass9
-rw-r--r--meta-agl-core/classes/cloc.bbclass (renamed from meta-agl-profile-core/classes/cloc.bbclass)0
-rw-r--r--meta-agl-core/classes/image_types_wic_workaround.bbclass32
-rw-r--r--meta-agl-core/classes/sanity-meta-agl-core.bbclass10
-rw-r--r--meta-agl-core/conf/bblayers.conf.sample12
-rw-r--r--meta-agl-core/conf/distro/include/aarch64-tune.inc (renamed from meta-agl-distro/conf/distro/include/aarch64-tune.inc)4
-rw-r--r--meta-agl-core/conf/distro/include/arc-tune.inc (renamed from meta-agl-distro/conf/distro/include/arc-tune.inc)0
-rw-r--r--meta-agl-core/conf/distro/include/arm-tune.inc (renamed from meta-agl-distro/conf/distro/include/arm-tune.inc)10
-rw-r--r--meta-agl-core/conf/distro/include/riscv64-tune.inc8
-rw-r--r--meta-agl-core/conf/distro/include/x86_64-tune.inc (renamed from meta-agl-distro/conf/distro/include/x86_64-tune.inc)45
-rw-r--r--meta-agl-core/conf/distro/poky-agl.conf (renamed from meta-agl-distro/conf/distro/poky-agl.conf)135
-rw-r--r--meta-agl-core/conf/include/agl-create-spdx.inc1
-rw-r--r--meta-agl-core/conf/include/agl-devel.inc (renamed from meta-agl-profile-core/conf/include/agl-devel.inc)12
-rw-r--r--meta-agl-core/conf/include/agl-package-management.inc6
-rw-r--r--meta-agl-core/conf/include/agl-selinux.inc20
-rw-r--r--meta-agl-core/conf/include/base-agl.inc18
-rw-r--r--meta-agl-core/conf/layer.conf28
-rw-r--r--meta-agl-core/conf/local.conf.sample277
-rw-r--r--meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-compositor-init.bbappend1
-rw-r--r--meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-compositor-init_aglcore.inc1
-rw-r--r--meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-shell-activator_git.bb22
-rw-r--r--meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/common-init.inc6
-rw-r--r--meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/weston-init.bbappend1
-rw-r--r--meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/weston-init_aglcore.inc1
-rw-r--r--meta-agl-core/dynamic-layers/meta-oe/recipes-platform/images/agl-image-compositor.bbappend3
-rw-r--r--meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtbase_%.bbappend1
-rw-r--r--meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtbase_aglcore.inc10
-rw-r--r--meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch (renamed from meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch)0
-rw-r--r--meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation_%.bbappend1
-rw-r--r--meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation_aglcore.inc (renamed from meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation_%.bbappend)2
-rw-r--r--meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/files/systemd-selinux-relabel.service12
-rw-r--r--meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/files/systemd-selinux-relabel.sh12
-rw-r--r--meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/systemd-selinux-relabel_1.0.bb25
-rw-r--r--meta-agl-core/dynamic-layers/meta-selinux/recipes-platform/packagegroups/packagegroup-agl-core-selinux.bb57
-rw-r--r--meta-agl-core/dynamic-layers/meta-selinux/recipes-security/selinux-scripts/selinux-autorelabel_0.1.bbappend1
-rw-r--r--meta-agl-core/dynamic-layers/meta-selinux/recipes-security/selinux-scripts/selinux-autorelabel_aglcore.inc4
-rw-r--r--meta-agl-core/files/group (renamed from meta-agl-profile-core/files/group)11
-rw-r--r--meta-agl-core/files/passwd (renamed from meta-agl-profile-core/files/passwd)7
-rw-r--r--meta-agl-core/recipes-config/agl-users/agl-users.inc14
-rw-r--r--meta-agl-core/recipes-config/agl-users/agl-users_1.0.bb9
-rw-r--r--meta-agl-core/recipes-connectivity/busybox/busybox_%.bbappend1
-rw-r--r--meta-agl-core/recipes-connectivity/busybox/busybox_aglcore.inc3
-rw-r--r--meta-agl-core/recipes-connectivity/busybox/files/enable-wget-https.cfg (renamed from meta-agl-profile-core/recipes-connectivity/busybox/files/enable-wget-https.cfg)0
-rw-r--r--meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/0001-Do-not-overwrite-CFLAGS.patch37
-rw-r--r--meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/0001-Initialize-variables.patch39
-rw-r--r--meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/stdbool-fixes.patch53
-rw-r--r--meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb (renamed from meta-agl-profile-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb)13
-rw-r--r--meta-agl-core/recipes-connectivity/connman/connman-conf.bbappend1
-rw-r--r--meta-agl-core/recipes-connectivity/connman/connman-conf/main.conf3
-rw-r--r--meta-agl-core/recipes-connectivity/connman/connman-conf_aglcore.inc9
-rw-r--r--meta-agl-core/recipes-connectivity/connman/connman/0001-disable-when-booting-over-nfs.patch (renamed from meta-agl-profile-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch)4
-rw-r--r--meta-agl-core/recipes-connectivity/connman/connman_%.bbappend1
-rw-r--r--meta-agl-core/recipes-connectivity/connman/connman_aglcore.inc3
-rw-r--r--meta-agl-core/recipes-core/systemd/.appends.core (renamed from meta-agl-profile-core/recipes-connectivity/connman/.appends.core)0
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can-fd.network12
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can.link11
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can.network (renamed from meta-agl-profile-core/recipes-core/systemd/systemd/canbus-can.network)0
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-virtio.network5
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd-conf-canbus_1.0.bb32
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd-conf_%.bbappend1
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd-conf_aglcore.inc (renamed from meta-agl-profile-core/recipes-core/systemd/systemd-conf_%.bbappend)2
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd/e2fsck.conf (renamed from meta-agl-profile-core/recipes-core/systemd/systemd/e2fsck.conf)0
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd/wait-disable.conf3
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd/wired.network8
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd_%.bbappend1
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd_aglcore.inc36
-rw-r--r--meta-agl-core/recipes-devtools/cmake/cmake_%.bbappend1
-rw-r--r--meta-agl-core/recipes-devtools/cmake/cmake_aglcore.inc (renamed from meta-agl-profile-core/recipes-devtools/cmake/cmake_%.bbappend)6
-rw-r--r--meta-agl-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh (renamed from meta-agl-profile-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh)0
-rw-r--r--meta-agl-core/recipes-devtools/gdb/.appends.core (renamed from meta-agl-profile-core/recipes-core/dbus/.appends.core)0
-rw-r--r--meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend1
-rw-r--r--meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc1
-rw-r--r--meta-agl-core/recipes-devtools/qemu/qemu_%.bbappend1
-rw-r--r--meta-agl-core/recipes-devtools/qemu/qemu_aglcore.inc5
-rw-r--r--meta-agl-core/recipes-extended/gperf/.appends.core (renamed from meta-agl-profile-core/recipes-core/psplash/.appends.core)0
-rw-r--r--meta-agl-core/recipes-extended/gperf/gperf_%.bbappend1
-rw-r--r--meta-agl-core/recipes-extended/gperf/gperf_aglcore.inc (renamed from meta-agl-profile-core/recipes-extended/gperf/gperf_%.bbappend)0
-rw-r--r--meta-agl-core/recipes-graphics/libsdl2/libsdl2_%.bbappend1
-rw-r--r--meta-agl-core/recipes-graphics/libsdl2/libsdl2_aglcore.inc3
-rw-r--r--meta-agl-core/recipes-graphics/rba/librba_1.0.bb24
-rw-r--r--meta-agl-core/recipes-graphics/rba/rba-config.bb15
-rw-r--r--meta-agl-core/recipes-graphics/rba/rba-config/RBAModel.json320
-rw-r--r--meta-agl-core/recipes-graphics/wayland/Readme.weston-ini-conf43
-rw-r--r--meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb61
-rw-r--r--meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor-autologin11
-rw-r--r--meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in3
-rw-r--r--meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.service72
-rw-r--r--meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.socket10
-rw-r--r--meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb57
-rw-r--r--meta-agl-core/recipes-graphics/wayland/native-shell-client_git.bb16
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bb156
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bbappend12
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/core.cfg (renamed from meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/core.cfg)2
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/grpc-proxy.cfg4
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-0.cfg (renamed from meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg)1
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg4
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg (renamed from meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg)2
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg (renamed from meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg)2
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-0.cfg5
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-180.cfg6
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-270.cfg6
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-90.cfg6
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg.in (renamed from meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg)2
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/shell.cfg (renamed from meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/shell.cfg)2
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-0.cfg (renamed from meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg)0
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-180.cfg4
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-270.cfg4
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-90.cfg4
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-init.bbappend1
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc8
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-make-sure-all-buffers-are-released-when-.patch71
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Send-name-description-update-wl_output-to-.patch117
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch171
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-weston-log-Add-a-iterator-helper-for-debug.patch227
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0001-simple-touch-Add-maximized-fullscreen-states.patch138
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston_10.0.%.bbappend1
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc33
-rw-r--r--meta-agl-core/recipes-kernel/linux/kernel-devsrc.bbappend1
-rw-r--r--meta-agl-core/recipes-kernel/linux/kernel-devsrc_agl.inc (renamed from meta-agl-bsp/recipes-kernel/linux/kernel-devsrc.bbappend)2
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch (renamed from meta-agl-bsp/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-agl-4.14.inc6
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-agl-4.19.inc (renamed from meta-agl-bsp/recipes-kernel/linux/linux-agl-4.19.inc)4
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-agl-config.inc93
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-agl.inc24
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-yocto-agl.inc12
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-yocto_%.bbappend1
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/audit.cfg2
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/can-bus.cfg10
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/fanotify.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/fanotify.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/nbd.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/nbd.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch (renamed from meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/overlayfs.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/overlayfs.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/qemu-drm.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/drm.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/qemu-virtio.cfg (renamed from meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/virtio.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/qemuarm.cfg (renamed from meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/qemuarm.cfg)2
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/ramdisk.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/ramdisk.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/selinux.cfg16
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/sound-hda.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/sound-hda.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/sound.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/sound.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/systemd-required.cfg43
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/systemd-sandbox.cfg9
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/systemtap.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/systemtap.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/vbox-vmware-sata.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/vbox-vmware-sata.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg)4
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/x86-net-devices.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/x86-net-devices.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/x86-security-tpm.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/x86-security-tpm.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/x86-upsquare.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/x86-upsquare.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/x86-usb-devices.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/x86-usb-devices.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/xen_domu.cfg (renamed from meta-agl-bsp/recipes-kernel/linux/linux/xen_domu.cfg)0
-rw-r--r--meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch166
-rw-r--r--meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch166
-rw-r--r--meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_%.bbappend1
-rw-r--r--meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_aglcore.inc9
-rw-r--r--meta-agl-core/recipes-platform/images/agl-image-boot.bb5
-rw-r--r--meta-agl-core/recipes-platform/images/agl-image-compositor.bb15
-rw-r--r--meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb15
-rw-r--r--meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb9
-rw-r--r--meta-agl-core/recipes-platform/images/agl-image-minimal.bb9
-rw-r--r--meta-agl-core/recipes-platform/images/agl-image-weston.bb15
-rw-r--r--meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb26
-rw-r--r--meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb (renamed from meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb)12
-rw-r--r--meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb (renamed from meta-agl-profile-core/recipes-devtools/packagegroups/packagegroup-agl-core-devel.bb)20
-rw-r--r--meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-compositor.bb9
-rw-r--r--meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb9
-rw-r--r--meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb (renamed from meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb)14
-rw-r--r--meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb17
-rw-r--r--meta-agl-core/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch (renamed from meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch)52
-rw-r--r--meta-agl-core/recipes-support/ptest-runner/ptest-runner_2.%.bbappend2
-rw-r--r--meta-agl-core/recipes-support/ptest-runner/ptest-runner_agl.inc (renamed from meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.%.bbappend)3
-rwxr-xr-xmeta-agl-core/scripts/oe-depends-dot (renamed from meta-agl-distro/scripts/oe-depends-dot)0
-rwxr-xr-xmeta-agl-core/scripts/run-yocto-check-layer.sh40
-rw-r--r--meta-agl-distro/conf/layer.conf12
-rw-r--r--meta-agl-ic/.empty (renamed from meta-agl-profile-core/recipes-core/systemd/.appends.core)0
-rw-r--r--meta-agl-ivi/.empty (renamed from meta-agl-profile-core/recipes-devtools/gdb/.appends.core)0
-rw-r--r--meta-agl-profile-cluster-qt5/LICENSE20
-rw-r--r--meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only288
-rw-r--r--meta-agl-profile-cluster-qt5/LICENSE.MIT25
-rw-r--r--meta-agl-profile-cluster-qt5/conf/layer.conf12
-rw-r--r--meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.bb9
-rw-r--r--meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.inc7
-rw-r--r--meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb21
-rw-r--r--meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qtcompositor.bb36
-rw-r--r--meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0001-fixed-eglfs_kms-fails-to-build.patch45
-rw-r--r--meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch24
-rw-r--r--meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtbase_%.bbappend12
-rw-r--r--meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtcompositor-conf_1.0.bb40
-rw-r--r--meta-agl-profile-cluster/LICENSE20
-rw-r--r--meta-agl-profile-cluster/LICENSE.GPL-2.0-only288
-rw-r--r--meta-agl-profile-cluster/LICENSE.MIT25
-rw-r--r--meta-agl-profile-cluster/conf/layer.conf12
-rw-r--r--meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.bb9
-rw-r--r--meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.inc7
-rw-r--r--meta-agl-profile-cluster/recipes-platform/packagegroups/packagegroup-agl-profile-cluster.bb20
-rw-r--r--meta-agl-profile-core/LICENSE20
-rw-r--r--meta-agl-profile-core/LICENSE.GPL-2.0-only288
-rw-r--r--meta-agl-profile-core/LICENSE.MIT25
-rw-r--r--meta-agl-profile-core/conf/include/agl-gplv2.inc8
-rw-r--r--meta-agl-profile-core/conf/include/agl-sign-wgts.inc3
-rw-r--r--meta-agl-profile-core/conf/include/base-agl.inc20
-rw-r--r--meta-agl-profile-core/conf/layer.conf12
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-bluetooth-map/agl-service-bluetooth-map_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-bluetooth-pbap/agl-service-bluetooth-pbap_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-bluetooth/agl-service-bluetooth_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bb23
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-can-low-level/files/run-ptest3
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-data-persistence/agl-service-data-persistence_git.bb17
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-geoclue/agl-service-geoclue_git.bb17
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-geofence/agl-service-geofence_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-gps/agl-service-gps_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac-conf_git.bb27
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac_git.bb20
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-identity-agent/agl-service-identity-agent_git.bb17
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-iiodevices/agl-service-iiodevices_git.bb19
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-mediascanner/agl-service-mediascanner_git.bb18
-rwxr-xr-xmeta-agl-profile-core/recipes-apis/agl-service-navigation/agl-service-navigation_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-network/agl-service-network_git.bb25
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-nfc/agl-service-nfc_git.bb17
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-platform-info/agl-service-platform-info_git.bb17
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-signal-composer/agl-service-signal-composer_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-signal-composer/files/run-ptest3
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-telephony/agl-service-telephony_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-unicens-controller/agl-service-unicens-controller_git.bb19
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-unicens/agl-service-unicens_git.bb19
-rw-r--r--meta-agl-profile-core/recipes-apis/agl-service-weather/agl-service-weather_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-config/agl-login-manager/agl-login-manager_0.1.bb19
-rw-r--r--meta-agl-profile-core/recipes-config/agl-users/agl-users_0.1.bb27
-rw-r--r--meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping/dev-mapping.conf.default6
-rw-r--r--meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping_0.1.bb18
-rw-r--r--meta-agl-profile-core/recipes-connectivity/bluez-alsa/bluez-alsa_git.bb43
-rw-r--r--meta-agl-profile-core/recipes-connectivity/bluez-alsa/files/bluez-alsa.service11
-rw-r--r--meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.conf39
-rw-r--r--meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.service21
-rw-r--r--meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/obex.service10
-rw-r--r--meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/tmpdir.conf2
-rw-r--r--meta-agl-profile-core/recipes-connectivity/bluez5/bluez5_%.bbappend24
-rw-r--r--meta-agl-profile-core/recipes-connectivity/busybox/busybox_%.bbappend2
-rw-r--r--meta-agl-profile-core/recipes-connectivity/connman/connman_%.bbappend20
-rw-r--r--meta-agl-profile-core/recipes-connectivity/connman/files/main.conf3
-rw-r--r--meta-agl-profile-core/recipes-connectivity/neard/files/0001-systemd-neard-add-multi-user.target-to-neard.service.patch25
-rw-r--r--meta-agl-profile-core/recipes-connectivity/neard/files/0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch33
-rw-r--r--meta-agl-profile-core/recipes-connectivity/neard/neard_0.16.bbappend7
-rw-r--r--meta-agl-profile-core/recipes-connectivity/neardal/neardal.inc22
-rw-r--r--meta-agl-profile-core/recipes-connectivity/neardal/neardal/0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch27
-rw-r--r--meta-agl-profile-core/recipes-connectivity/neardal/neardal/0002-neardal-lib-fix-memory-corruption.patch58
-rw-r--r--meta-agl-profile-core/recipes-connectivity/neardal/neardal/ncl.patch25
-rw-r--r--meta-agl-profile-core/recipes-connectivity/neardal/neardal_0.14.bb10
-rw-r--r--meta-agl-profile-core/recipes-connectivity/ofono/files/0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch27
-rw-r--r--meta-agl-profile-core/recipes-connectivity/ofono/files/ofono.conf30
-rw-r--r--meta-agl-profile-core/recipes-connectivity/ofono/ofono_%.bbappend11
-rw-r--r--meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr/0001-remove-I-usr-include-in-pkg-config.patch40
-rw-r--r--meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb32
-rw-r--r--meta-agl-profile-core/recipes-core/dbus/dbus/dbus.service10
-rw-r--r--meta-agl-profile-core/recipes-core/dbus/dbus/dbus.socket9
-rw-r--r--meta-agl-profile-core/recipes-core/dbus/dbus/dbus_env.conf5
-rw-r--r--meta-agl-profile-core/recipes-core/dbus/dbus/libdbus-c++/dbus-c++-threading.patch45
-rw-r--r--meta-agl-profile-core/recipes-core/dbus/dbus_%.bbappend28
-rw-r--r--meta-agl-profile-core/recipes-core/dbus/libdbus-c++/dbus-c++-threading.patch45
-rw-r--r--meta-agl-profile-core/recipes-core/dbus/libdbus-c++_0.9.0.bbappend2
-rw-r--r--meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb164
-rw-r--r--meta-agl-profile-core/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend1
-rw-r--r--meta-agl-profile-core/recipes-core/psplash/files/psplash-colors.h34
-rw-r--r--meta-agl-profile-core/recipes-core/psplash/files/psplash-poky-img.h5411
-rw-r--r--meta-agl-profile-core/recipes-core/psplash/psplash_git.bbappend9
-rw-r--r--meta-agl-profile-core/recipes-core/systemd/systemd/0001-fix-udevd-seclabel-parsing.patch34
-rw-r--r--meta-agl-profile-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch107
-rw-r--r--meta-agl-profile-core/recipes-core/systemd/systemd/wired.network5
-rw-r--r--meta-agl-profile-core/recipes-core/systemd/systemd_%.bbappend35
-rw-r--r--meta-agl-profile-core/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb20
-rw-r--r--meta-agl-profile-core/recipes-devtools/gdb/gdb_%.bbappend1
-rw-r--r--meta-agl-profile-core/recipes-devtools/json-c/json-c_%.bbappend1
-rw-r--r--meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.bb8
-rw-r--r--meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.inc14
-rw-r--r--meta-agl-profile-core/recipes-devtools/libappcontroller/libappcontroller_git.bb19
-rw-r--r--meta-agl-profile-core/recipes-devtools/low-level-can-generator/low-level-can-generator_git.bb17
-rw-r--r--meta-agl-profile-core/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend4
-rw-r--r--meta-agl-profile-core/recipes-devtools/python/python3-asyncssh_2.3.0.bb15
-rw-r--r--meta-agl-profile-core/recipes-devtools/python/python3-pytest-dependency_0.5.1.bb12
-rw-r--r--meta-agl-profile-core/recipes-devtools/python/python3-pytest-reverse_1.0.1.bb12
-rw-r--r--meta-agl-profile-core/recipes-devtools/qemu/qemu_%.bbappend1
-rwxr-xr-xmeta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts48
-rw-r--r--meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts.service17
-rw-r--r--meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bb46
-rw-r--r--meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf2
-rw-r--r--meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts_%.bbappend14
-rw-r--r--meta-agl-profile-core/recipes-extended/gperf/.appends.core0
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0002-src-most-add-auto-conf-feature.patch472
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0003-core-remove-kernel-log-for-MBO-status.patch26
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0004-most-video-set-device_caps.patch25
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch25
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0006-dim2-fix-startup-sequence.patch186
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0007-dim2-use-device-tree.patch378
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch92
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0009-dim2-use-device-for-coherent-memory-allocation.patch47
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0010-backport-usb-setup-timer.patch35
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch30
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/files/0012-Fix-build-with-5.4-kernel.patch68
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/most.bb14
-rw-r--r--meta-agl-profile-core/recipes-kernel/most/most.bbappend15
-rw-r--r--meta-agl-profile-core/recipes-multimedia/libmp4v2/files/0001-add-a-configure-option-to-disable-build-of-man-pages.patch40
-rw-r--r--meta-agl-profile-core/recipes-multimedia/libmp4v2/libmp4v2_git.bb18
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/.appends.meta-efl0
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0001-Define-comparison_fn_t-for-non-glibc-systems.patch33
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch49
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/dbus-lightmediascanner.conf12
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/id3-plugin-support-out-of-tree-build.patch11
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/lightmediascanner.service16
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch53
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend42
-rw-r--r--meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_0.5.1.bb63
-rw-r--r--meta-agl-profile-core/recipes-navigation/geoclue/files/org.freedesktop.GeoClue2.Client.conf8
-rw-r--r--meta-agl-profile-core/recipes-navigation/geoclue/geoclue_%.bbappend11
-rw-r--r--meta-agl-profile-core/recipes-navigation/gpsd/gpsd_%.bbappend16
-rw-r--r--meta-agl-profile-core/recipes-platform/images/agl-image-boot.bb9
-rw-r--r--meta-agl-profile-core/recipes-platform/images/agl-image-boot.inc10
-rw-r--r--meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.bb18
-rw-r--r--meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.inc19
-rw-r--r--meta-agl-profile-core/recipes-platform/images/agl-image-minimal-qa.bb12
-rw-r--r--meta-agl-profile-core/recipes-platform/images/agl-image-minimal.bb9
-rw-r--r--meta-agl-profile-core/recipes-platform/images/agl-image-minimal.inc10
-rw-r--r--meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb51
-rw-r--r--meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb14
-rw-r--r--meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb14
-rw-r--r--meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-services.bb14
-rw-r--r--meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb18
-rw-r--r--meta-agl-profile-core/recipes-support/curl/curl_%.bbappend5
-rw-r--r--meta-agl-profile-core/recipes-support/libsoup/libsoup-2.4_%.bbappend1
-rw-r--r--meta-agl-profile-core/recipes-support/opencv/opencv_4.%.bbappend1
-rw-r--r--meta-agl-profile-core/recipes-support/udisks/files/99-udisks2.rules5
-rw-r--r--meta-agl-profile-core/recipes-support/udisks/files/automount.service9
-rw-r--r--meta-agl-profile-core/recipes-support/udisks/files/automount.sh93
-rw-r--r--meta-agl-profile-core/recipes-support/udisks/udisks2_%.bbappend26
-rw-r--r--meta-agl-profile-core/recipes-test/afb-test/afb-test_git.bb25
-rw-r--r--meta-agl-profile-core/recipes-test/afb-test/files/run-ptest3
-rw-r--r--meta-agl-profile-core/recipes-test/aiostress/aiostress_0.22.bb24
-rw-r--r--meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0001-Makefile.patch53
-rw-r--r--meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0002-auto.patch95
-rw-r--r--meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0003-printcleanup.patch11
-rw-r--r--meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0004-bs_main.c.patch15
-rw-r--r--meta-agl-profile-core/recipes-test/blobsallad/blobsallad_2006-11-14-23-57.bb36
-rw-r--r--meta-agl-profile-core/recipes-test/dung/dung_3.4.25-m2.bb18
-rw-r--r--meta-agl-profile-core/recipes-test/ebizzy/ebizzy_0.3.bb20
-rw-r--r--meta-agl-profile-core/recipes-test/ffsb/ffsb_6.0-rc2.bb14
-rw-r--r--meta-agl-profile-core/recipes-test/fontconfig/fontconfig_%.bbappend18
-rw-r--r--meta-agl-profile-core/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch32
-rw-r--r--meta-agl-profile-core/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch30
-rw-r--r--meta-agl-profile-core/recipes-test/freetype/freetype_2.%.bbappend34
-rw-r--r--meta-agl-profile-core/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch11
-rw-r--r--meta-agl-profile-core/recipes-test/fsfuzzer/fsfuzzer_0.7.bb18
-rw-r--r--meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper/gcovr-wrapper320
-rw-r--r--meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper_1.0.bb17
-rw-r--r--meta-agl-profile-core/recipes-test/gcovr/gcovr/0001-add-gcov-filter-source-errors-option.patch68
-rw-r--r--meta-agl-profile-core/recipes-test/gcovr/gcovr_%.bbappend2
-rw-r--r--meta-agl-profile-core/recipes-test/gcovr/gcovr_git.bb32
-rw-r--r--meta-agl-profile-core/recipes-test/glmark2/glmark2_%.bbappend2
-rw-r--r--meta-agl-profile-core/recipes-test/himeno/himeno_2.0.bb27
-rw-r--r--meta-agl-profile-core/recipes-test/interbench/files/interbench.c.patch68
-rw-r--r--meta-agl-profile-core/recipes-test/interbench/interbench_0.31.bb31
-rw-r--r--meta-agl-profile-core/recipes-test/ipv6connect/ipv6connect.bb24
-rw-r--r--meta-agl-profile-core/recipes-test/linpack/linpack.bb23
-rw-r--r--meta-agl-profile-core/recipes-test/linus-stress/linus-stress.bb23
-rw-r--r--meta-agl-profile-core/recipes-test/packagegroups/packagegroup-agl-test.bb57
-rw-r--r--meta-agl-profile-core/recipes-test/pyagl/pyagl_git.bb33
-rw-r--r--meta-agl-profile-core/recipes-test/trinity/trinity_git.bb42
-rw-r--r--meta-agl-profile-graphical-html5/conf/layer.conf12
-rw-r--r--meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf.bbappend12
-rw-r--r--meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.bb10
-rw-r--r--meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.inc9
-rw-r--r--meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-appfw-html5.bb18
-rw-r--r--meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-html5.bb23
-rw-r--r--meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium-browser-service.bb19
-rw-r--r--meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch40
-rw-r--r--meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68_git.bb404
-rw-r--r--meta-agl-profile-graphical-html5/recipes-wam/chromium/gn-utils.inc157
-rw-r--r--meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr.env202
-rw-r--r--meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr@.service37
-rw-r--r--meta-agl-profile-graphical-html5/recipes-wam/wam/files/trunc-webapp-roles.patch56
-rw-r--r--meta-agl-profile-graphical-html5/recipes-wam/wam/wam_git.bb51
-rw-r--r--meta-agl-profile-graphical-qt5/LICENSE20
-rw-r--r--meta-agl-profile-graphical-qt5/LICENSE.GPL-2.0-only288
-rw-r--r--meta-agl-profile-graphical-qt5/LICENSE.MIT25
-rw-r--r--meta-agl-profile-graphical-qt5/conf/layer.conf12
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-native.bb17
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-qt5.bb16
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb11
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb20
-rwxr-xr-xmeta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.bb18
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.inc14
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.bb5
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.inc1
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-native-qt5.bb29
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-demo-qt-examples.bb26
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-qt5.bb23
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-qt5-toolchain-target.bbappend18
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qlibhomescreen/qlibhomescreen_git.bb13
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qml-execscript-plugin/qml-execscript-plugin_1.0.bb25
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase-native_git.bbappend3
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase/0001-Force-qdbus-to-make-introspect-for-every-findMetaObj.patch30
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase_%.bbappend12
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia/0001-metadata-image-support-with-the-data-URL-scheme-for-.patch80
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia_%.bbappend7
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtsystems_%.bbappend3
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config/qtwayland12
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config_1.0.0.bb21
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0001-protocol-update-3rd-party-ivi-application-protocol.patch56
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch34
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0010-Added-manifest-file-according-to-smack-3-domain-mode.patch33
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch468
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch1029
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0019-xdg-shell-upgrade-to-support-current-version-weston-.patch772
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch128
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0021-Implement-initial-IVI-Shell-support.patch539
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0099_qtwayland_no_evdev.patch14
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/UNUSED_NEEDS_CHECK_YOCTO_0018-packaging-enable-xdg-shell-at-runtime.patch31
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland_%.bbappend26
-rw-r--r--meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwebkit_%.bbappend1
-rw-r--r--meta-agl-profile-graphical/LICENSE20
-rw-r--r--meta-agl-profile-graphical/LICENSE.GPL-2.0-only288
-rw-r--r--meta-agl-profile-graphical/LICENSE.MIT25
-rw-r--r--meta-agl-profile-graphical/classes/agl-graphical.bbclass6
-rw-r--r--meta-agl-profile-graphical/conf/layer.conf12
-rw-r--r--meta-agl-profile-graphical/recipes-apis/agl-service-homescreen/agl-service-homescreen_git.bb14
-rw-r--r--meta-agl-profile-graphical/recipes-apis/agl-service-mediaplayer/agl-service-mediaplayer_git.bb18
-rw-r--r--meta-agl-profile-graphical/recipes-apis/agl-service-radio/agl-service-radio_git.bb19
-rw-r--r--meta-agl-profile-graphical/recipes-apis/agl-service-taskmanager/agl-service-taskmanager.bb18
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/hmi-debug/files/hmi-debug8
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/hmi-debug/hmi-debug_git.bb19
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/libhomescreen/libhomescreen_git.bb19
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/Readme.weston-ini-conf34
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/agl-compositor_git.bb28
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/waltham-transmitter_git.bb34
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch51
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch55
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch70
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/waltham_%.bbappend7
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/waltham_git.bb16
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch22
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch21
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch530
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch67
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch29
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch22
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0006-fix-plugin-registry-include.patch13
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch13
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension_git.bb36
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch29
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/wayland_%.bbappend5
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend69
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in6
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in12
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in2
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in1
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules.in1
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in1
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready56
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready.service10
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready_1.0.bb21
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch51
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch30
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston/0002-ivi-shell-Fix-crash-due-no-transmitter-screen.patch264
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston/0003-compositor-drm-introduce-drm_get_dmafd_from_view.patch111
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston/0004-main-change-remoting-initialization-timing.patch40
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston/smack-weston8
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston_8.0.%.bbappend30
-rw-r--r--meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad/0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch28
-rw-r--r--meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_1.16.%.bbappend2
-rw-r--r--meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-good/gstreamer1.0-plugins-good_%.bbappend2
-rw-r--r--meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.bb9
-rw-r--r--meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.inc7
-rw-r--r--meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb16
-rw-r--r--meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend5
-rw-r--r--meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-services.bb15
-rw-r--r--meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb20
-rw-r--r--meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb23
-rw-r--r--meta-agl-profile-graphical/recipes-security/security-manager/security-manager_%.bbappend6
-rw-r--r--meta-agl-profile-hud/LICENSE20
-rw-r--r--meta-agl-profile-hud/LICENSE.GPL-2.0-only288
-rw-r--r--meta-agl-profile-hud/LICENSE.MIT25
-rw-r--r--meta-agl-profile-hud/conf/layer.conf12
-rw-r--r--meta-agl-profile-telematics/LICENSE20
-rw-r--r--meta-agl-profile-telematics/LICENSE.GPL-2.0-only288
-rw-r--r--meta-agl-profile-telematics/LICENSE.MIT25
-rw-r--r--meta-agl-profile-telematics/conf/layer.conf12
-rw-r--r--meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.bb9
-rw-r--r--meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.inc5
-rw-r--r--meta-agl-profile-telematics/recipes-platform/packagegroups/packagegroup-agl-profile-telematics.bb25
-rwxr-xr-xmeta-agl.md127
-rw-r--r--meta-agl/conf/layer.conf12
-rw-r--r--meta-app-framework/LICENSE20
-rw-r--r--meta-app-framework/LICENSE.GPL-2.0-only288
-rw-r--r--meta-app-framework/LICENSE.MIT25
l---------meta-app-framework/README1
-rw-r--r--meta-app-framework/README-AGL.md31
-rw-r--r--meta-app-framework/classes/agl-app.bbclass83
-rw-r--r--meta-app-framework/classes/aglwgt.bbclass185
-rw-r--r--meta-app-framework/conf/include/agl-app-framework.inc2
-rw-r--r--meta-app-framework/conf/include/agl-appfw-smack.inc19
-rw-r--r--meta-app-framework/conf/layer.conf9
-rw-r--r--meta-app-framework/recipes-config/polkit-rule-agl-app/files/50-agl-app.rules7
-rw-r--r--meta-app-framework/recipes-config/polkit-rule-agl-app/polkit-rule-agl-app.bb21
-rw-r--r--meta-app-framework/recipes-core/af-binder/af-binder-devtools-native_git.bb8
-rw-r--r--meta-app-framework/recipes-core/af-binder/af-binder_git.bb117
-rw-r--r--meta-app-framework/recipes-core/af-binder/af-binder_git.inc22
-rw-r--r--meta-app-framework/recipes-core/af-binder/nativesdk-af-binder-devtools_git.bb8
-rw-r--r--meta-app-framework/recipes-core/af-main/af-main_git.bb122
-rw-r--r--meta-app-framework/recipes-core/af-main/af-main_git.inc30
-rw-r--r--meta-app-framework/recipes-core/af-main/nativesdk-af-main_git.bb28
-rw-r--r--meta-app-framework/recipes-core/af-platform-setup/af-platform-setup_1.0.bb16
-rw-r--r--meta-app-framework/recipes-core/af-platform-setup/files/udev-shared.conf4
-rw-r--r--meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app-flutter@.service12
-rw-r--r--meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app-web@.service11
-rw-r--r--meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app@.service8
-rw-r--r--meta-app-framework/recipes-core/applaunchd/applaunchd/applaunchd.service13
-rw-r--r--meta-app-framework/recipes-core/applaunchd/applaunchd/no-network.conf2
-rw-r--r--meta-app-framework/recipes-core/applaunchd/applaunchd/private-tmp.conf2
-rw-r--r--meta-app-framework/recipes-core/applaunchd/applaunchd_git.bb78
-rw-r--r--meta-app-framework/recipes-core/base-files/base-files_%.bbappend32
-rw-r--r--meta-app-framework/recipes-core/nss-localuser/nss-localuser_0.1.bb39
-rw-r--r--meta-app-framework/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend2
-rw-r--r--meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework-examples.bb14
-rw-r--r--meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework.bb20
-rw-r--r--meta-app-framework/recipes-core/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch50
-rw-r--r--meta-app-framework/recipes-core/security-manager/security-manager_%.bbappend7
-rw-r--r--meta-app-framework/recipes-core/shadow/shadow_%.bbappend6
-rw-r--r--meta-app-framework/recipes-core/systemd-sync/systemd-agl-sync_1.0.bb39
-rw-r--r--meta-app-framework/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bbappend1
-rw-r--r--meta-app-framework/recipes-kernel/linux/linux-%.bbappend3
-rw-r--r--meta-app-framework/recipes-kernel/linux/linux/audit.cfg2
-rw-r--r--meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend9
-rw-r--r--meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend3
-rw-r--r--meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend3
-rw-r--r--meta-app-framework/recipes-security/xmlsec1/xmlsec1_1.%.bbappend4
-rw-r--r--meta-app-framework/recipes-support/libcap/libcap/removing-capability-enforcement.patch87
-rw-r--r--meta-app-framework/recipes-support/libcap/libcap_%.bbappend3
-rw-r--r--meta-app-framework/recipes-support/libzip/libzip_%.bbappend1
-rwxr-xr-xmeta-app-framework/scripts/run-yocto-check-layer.sh43
-rw-r--r--meta-netboot/README15
-rw-r--r--meta-netboot/README.renesas-gen390
-rw-r--r--meta-netboot/classes/netboot.bbclass5
-rw-r--r--meta-netboot/conf/include/agl-netboot.inc7
-rw-r--r--meta-netboot/conf/layer.conf6
-rw-r--r--meta-netboot/recipes-core/busybox/busybox_%.bbappend7
-rw-r--r--meta-netboot/recipes-core/busybox/busybox_netboot.inc6
-rw-r--r--meta-netboot/recipes-core/images/initramfs-netboot-image.bb23
-rw-r--r--meta-netboot/recipes-core/images/initramfs-netboot-image_netboot.inc23
-rw-r--r--meta-netboot/recipes-core/initramfs-netboot/files/init.sh31
-rw-r--r--meta-netboot/recipes-core/initramfs-netboot/initramfs-netboot_1.0.bb12
-rw-r--r--meta-netboot/recipes-core/systemd/files/resolv-conf-relabel.service14
-rw-r--r--meta-netboot/recipes-core/systemd/resolv-conf-relabel.bb21
-rw-r--r--meta-netboot/recipes-support/nbd/nbd_%.bbappend7
-rw-r--r--meta-netboot/recipes-support/nbd/nbd_netboot.inc5
-rwxr-xr-xmeta-netboot/scripts/run-yocto-check-layer.sh44
-rw-r--r--meta-pipewire/README16
-rw-r--r--meta-pipewire/conf/include/agl-pipewire.inc4
-rw-r--r--meta-pipewire/conf/layer.conf6
-rw-r--r--meta-pipewire/licenses/GPL-2.0-only132
-rw-r--r--meta-pipewire/licenses/LGPL-2.1-or-later468
-rw-r--r--meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/0001-utils-add-a-gstreamer-helper-application-for-interco.patch517
-rw-r--r--meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/bluealsa-gst-helper@.service18
-rw-r--r--meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa_git.bbappend35
-rw-r--r--meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire-base.bb17
-rw-r--r--meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb15
-rw-r--r--meta-pipewire/recipes-multimedia/agl-service-audiomixer/agl-service-audiomixer_git.bb17
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/client.env10
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in17
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/server.env12
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb43
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire.inc120
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-meson-revert-version-check-to-require-meson-0.47-not.patch30
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-systemd-Do-not-override-rootprefix.patch35
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0002-arm-build-with-mno-unaligned-access.patch30
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0003-gst-Implement-new-pwaudio-src-sink-elements-based-on.patch1280
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-audioconvert-always-assume-that-output-ports-are-NOT.patch35
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0005-module-access-add-same-sec-label-mode.patch94
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0006-alsa-pcm-call-reuse_buffers-when-resetting-the-state.patch30
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0007-alsa-Set-period_size-depending-on-hardware.patch35
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0008-alsa-add-warning-in-case-of-partial-read-write.patch80
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0009-alsa-adjust-delay-depending-on-hardware.patch64
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.service24
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.socket19
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/smack-pipewire8
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bb329
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bbappend25
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bb20
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bbappend30
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-audio-sink.endpoint10
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-audio-source.endpoint10
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-default-input-audio.endpoint-link7
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-default-output-audio.endpoint-link7
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-stream-input-audio.endpoint9
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-stream-output-audio.endpoint9
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/01-hw00-audio-sink.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/01-hw00-audio-source.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-sink.endpoint13
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-source.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-dra7xx-audio-sink.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-dra7xx-audio-source.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-imx8mq-audio-sink.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-sink.endpoint13
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-source.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rpi3-audio-sink.endpoint13
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/40-fiberdyne-amp.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/40-microchip-mic.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/70-usb-audio-sink.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/70-usb-audio-source.endpoint12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/bluealsa-input-audio.endpoint-link11
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/bluealsa-output-audio.endpoint-link11
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/capture.streams3
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/playback.streams31
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/wireplumber.conf30
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl_git.bb58
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua27
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/alsa-suspend.lua45
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf74
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua110
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua151
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua48
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua26
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua20
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber-bluetooth.conf13
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf115
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb61
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua27
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf73
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua137
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb41
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber/0001-Build-cpptoml-without-a-cmake-subproject.patch28
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb81
-rw-r--r--meta-pipewire/recipes-security/cynagora/cynagora_%.bbappend5
-rw-r--r--meta-pipewire/recipes-security/security-manager/security-manager_%.bbappend4
-rwxr-xr-xmeta-pipewire/scripts/run-yocto-check-layer.sh42
-rw-r--r--meta-security/COPYING.MIT17
-rw-r--r--meta-security/README.md31
-rw-r--r--meta-security/conf/layer.conf14
-rw-r--r--meta-security/recipes-connectivity/bluez5/bluez5_%.bbappend55
-rw-r--r--meta-security/recipes-connectivity/bluez5/files/bluetooth.service.conf2
-rw-r--r--meta-security/recipes-connectivity/connman/connman_%.bbappend34
-rw-r--r--meta-security/recipes-connectivity/connman/files/connman.service.conf4
-rw-r--r--meta-security/recipes-core/base-files/base-files_%.bbappend79
-rw-r--r--meta-security/recipes-core/coreutils/coreutils_%.bbappend7
-rw-r--r--meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch2309
-rw-r--r--meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch967
-rw-r--r--meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch1095
-rw-r--r--meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch1505
-rw-r--r--meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch180
-rw-r--r--meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0006-Fix-SIGSEGV-on-disconnections.patch109
-rw-r--r--meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch1048
-rw-r--r--meta-security/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend15
-rw-r--r--meta-security/recipes-core/packagegroups/packagegroup-security-framework.bb23
-rw-r--r--meta-security/recipes-core/smack-system-setup/files/55-udev-smack-default.rules27
-rw-r--r--meta-security/recipes-core/smack-system-setup/files/systemd-journald.service.conf16
-rw-r--r--meta-security/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf2
-rw-r--r--meta-security/recipes-core/smack-system-setup/files/tmp.mount.conf12
-rw-r--r--meta-security/recipes-core/smack-system-setup/smack-system-setup_1.bb28
-rw-r--r--meta-security/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch52
-rw-r--r--meta-security/recipes-core/systemd/systemd_2%.bbappend40
-rw-r--r--meta-security/recipes-core/util-linux/util-linux_%.bbappend8
-rw-r--r--meta-security/recipes-kernel/linux/linux-%.bbappend17
-rw-r--r--meta-security/recipes-kernel/linux/linux/audit.cfg2
-rw-r--r--meta-security/recipes-kernel/linux/linux/smack-default-lsm.cfg2
-rw-r--r--meta-security/recipes-kernel/linux/linux/smack.cfg9
-rw-r--r--meta-security/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch42
-rw-r--r--meta-security/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch133
-rw-r--r--meta-security/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch57
-rw-r--r--meta-security/recipes-security/audit/audit/audit-volatile.conf1
-rwxr-xr-xmeta-security/recipes-security/audit/audit/auditd153
-rw-r--r--meta-security/recipes-security/audit/audit/auditd.service20
-rw-r--r--meta-security/recipes-security/audit/audit_2.8.5.bb106
-rw-r--r--meta-security/recipes-security/cynagoauth/cynagoauth_0.1.bb23
-rw-r--r--meta-security/recipes-security/cynagora/cynagora-cynara-compat_2.0.bb30
-rwxr-xr-xmeta-security/recipes-security/cynagora/cynagora/run-ptest4
-rw-r--r--meta-security/recipes-security/cynagora/cynagora_2.0.bb38
-rw-r--r--meta-security/recipes-security/security-manager/security-manager.inc83
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch47
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch36
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch117
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch34
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch32
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch47
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch78
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch38
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch40
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch51
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch32
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch122
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch259
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch78
-rw-r--r--meta-security/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch34
-rw-r--r--meta-security/recipes-security/security-manager/security-manager_git.bb27
-rw-r--r--meta-security/recipes-security/smacknet/files/smacknet184
-rw-r--r--meta-security/recipes-security/smacknet/files/smacknet.service11
-rw-r--r--meta-security/recipes-security/smacknet/smacknet.bb29
-rwxr-xr-xscripts/.aglsetup_genconfig.bash13
-rw-r--r--scripts/README-mkefi-agl.md18
-rwxr-xr-xscripts/ci-yocto-check-layer.sh22
-rw-r--r--scripts/envsetup.sh2
-rw-r--r--templates/base/00_local.conf.agl.inc3
-rw-r--r--templates/base/01_setup_pkg_revision.sh4
-rw-r--r--templates/base/99_local.conf.inc2
-rw-r--r--templates/base/bblayers.conf.sample41
-rw-r--r--templates/base/conf-notes.txt28
-rw-r--r--templates/base/local.conf.sample23
-rw-r--r--templates/feature/agl-app-framework/50_bblayers.conf.inc4
-rw-r--r--templates/feature/agl-app-framework/50_local.conf.inc2
-rw-r--r--templates/feature/agl-appfw-smack/50_local.conf.inc0
-rw-r--r--templates/feature/agl-appfw-smack/README_feature_agl-appfw-smack.md9
-rw-r--r--templates/feature/agl-ci-change-features-nogfx/included.dep2
-rw-r--r--templates/feature/agl-ci-change-features/included.dep2
-rw-r--r--templates/feature/agl-ci/99_local.conf.inc32
-rw-r--r--templates/feature/agl-ci/included.dep1
-rw-r--r--templates/feature/agl-create-spdx/50_local.conf.inc2
-rw-r--r--templates/feature/agl-create-spdx/README_feature_agl-create-spdx.md7
-rw-r--r--templates/feature/agl-devel/README_feature_agl-devel.md2
-rw-r--r--templates/feature/agl-devel/included.dep1
-rw-r--r--templates/feature/agl-gplv2/50_bblayers.conf.inc1
-rw-r--r--templates/feature/agl-gplv2/50_local.conf.inc2
-rw-r--r--templates/feature/agl-gplv2/README_feature_agl-gplv2.md9
-rw-r--r--templates/feature/agl-hmi-framework/50_local.conf.inc4
-rw-r--r--templates/feature/agl-hmi-framework/README_feature_agl-hmi-framework.md9
-rw-r--r--templates/feature/agl-localdev/80_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-localdev/80_local.conf.inc2
-rw-r--r--templates/feature/agl-localdev/README_feature_agl-localdev.md9
-rw-r--r--templates/feature/agl-netboot/50_bblayers.conf.inc8
-rw-r--r--templates/feature/agl-package-management/50_local.conf.inc2
-rw-r--r--templates/feature/agl-package-management/README_feature_agl-package-management.md8
-rw-r--r--templates/feature/agl-profile-cluster-qt5/50_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md15
-rw-r--r--templates/feature/agl-profile-cluster-qt5/included.dep1
-rw-r--r--templates/feature/agl-profile-cluster/50_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md15
-rw-r--r--templates/feature/agl-profile-cluster/included.dep1
-rw-r--r--templates/feature/agl-profile-graphical-html5/50_bblayers.conf.inc6
-rw-r--r--templates/feature/agl-profile-graphical-html5/50_local.conf.inc3
-rw-r--r--templates/feature/agl-profile-graphical-html5/README_feature_agl-profile-graphical-html5.md8
-rw-r--r--templates/feature/agl-profile-graphical-html5/included.dep1
-rw-r--r--templates/feature/agl-profile-graphical-qt5/50_bblayers.conf.inc9
-rw-r--r--templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md15
-rw-r--r--templates/feature/agl-profile-graphical-qt5/included.dep1
-rw-r--r--templates/feature/agl-profile-graphical/50_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md9
-rw-r--r--templates/feature/agl-profile-hud/50_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md9
-rw-r--r--templates/feature/agl-profile-telematics/50_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md9
-rw-r--r--templates/feature/agl-ptest/90_local.conf.inc8
-rw-r--r--templates/feature/agl-refhw-h3/50_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-refhw-h3/50_local.conf.inc2
-rw-r--r--templates/feature/agl-refhw-h3/README_feature_agl-refhw-h3.md8
-rw-r--r--templates/feature/agl-selinux/50_bblayers.conf.inc5
-rw-r--r--templates/feature/agl-selinux/50_local.conf.inc2
-rw-r--r--templates/feature/agl-selinux/README_feature_agl-selinux.md9
-rw-r--r--templates/feature/agl-sign-wgts/50_local.conf.inc2
-rw-r--r--templates/feature/agl-sign-wgts/README_feature_agl-sign-wgts.md8
-rw-r--r--templates/feature/agl-sota/50_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-sota/50_local.conf.inc8
-rw-r--r--templates/feature/agl-sota/50_setup.sh26
-rw-r--r--templates/feature/agl-sota/README_feature_agl-sota.md9
-rw-r--r--templates/feature/agl-virt/50_bblayers.conf.inc8
-rw-r--r--templates/feature/agl-virt/50_local.conf.inc2
-rw-r--r--templates/feature/agl-weston-remoting/50_local.conf.inc2
-rw-r--r--templates/feature/agl-weston-remoting/included.dep2
-rw-r--r--templates/machine/am62xx-evm/50_bblayers.conf.inc5
-rw-r--r--templates/machine/am62xx-evm/50_local.conf.inc3
-rw-r--r--templates/machine/aws-ec2-arm64/50_bblayers.conf.inc8
-rw-r--r--templates/machine/aws-ec2-arm64/50_local.conf.inc21
-rw-r--r--templates/machine/aws-ec2-x86-64/50_bblayers.conf.inc8
-rw-r--r--templates/machine/aws-ec2-x86-64/50_local.conf.inc21
-rw-r--r--templates/machine/bbe/50_bblayers.conf.inc3
-rw-r--r--templates/machine/beaglebone-ai64/50_bblayers.conf.inc5
-rw-r--r--templates/machine/beaglebone-ai64/50_local.conf.inc3
-rw-r--r--templates/machine/beaglebone-ai64/README_machine_beaglebone-ai64.md9
-rw-r--r--templates/machine/beaglebone/50_bblayers.conf.inc3
-rw-r--r--templates/machine/beagleplay/50_bblayers.conf.inc5
-rw-r--r--templates/machine/beagleplay/50_local.conf.inc3
-rw-r--r--templates/machine/beagleplay/README_machine_beagleplay.md9
-rw-r--r--templates/machine/cubox-i/50_setup.sh2
-rw-r--r--templates/machine/cyclone5/50_bblayers.conf.inc1
-rw-r--r--templates/machine/cyclone5/50_local.conf.inc3
-rw-r--r--templates/machine/cyclone5/README_machine_cyclone5.md9
-rw-r--r--templates/machine/dra7xx-evm/50_local.conf.inc3
-rw-r--r--templates/machine/dra7xx-evm/README_machine_dra7xx-evm.md9
-rw-r--r--templates/machine/dragonboard-410c/50_bblayers.conf.inc2
-rw-r--r--templates/machine/dragonboard-410c/50_local.conf.inc3
-rw-r--r--templates/machine/dragonboard-410c/README_machine_dragonboard-410c.md9
-rw-r--r--templates/machine/dragonboard-820c/50_bblayers.conf.inc1
-rw-r--r--templates/machine/dragonboard-820c/50_local.conf.inc3
-rw-r--r--templates/machine/dragonboard-820c/README_machine_dragonboard-820c.md9
-rw-r--r--templates/machine/ebisu/50_bblayers.conf.inc1
-rw-r--r--templates/machine/generic-arm64/50_bblayers.conf.inc (renamed from templates/machine/dra7xx-evm/50_bblayers.conf.inc)2
-rw-r--r--templates/machine/generic-arm64/50_local.conf.inc2
-rw-r--r--templates/machine/generic-arm64/README_machine_generic-arm64.md10
-rw-r--r--templates/machine/h3-salvator-x/50_bblayers.conf.inc1
-rw-r--r--templates/machine/h3ulcb-kf/50_bblayers.conf.inc1
-rw-r--r--templates/machine/h3ulcb-nogfx/50_bblayers.conf.inc1
-rw-r--r--templates/machine/h3ulcb/50_bblayers.conf.inc1
-rw-r--r--templates/machine/hsdk/40_bblayers.conf.inc2
-rw-r--r--templates/machine/hsdk/50_local.conf.inc2
-rw-r--r--templates/machine/hsdk/README_machine_hsdk.md9
-rw-r--r--templates/machine/imx6qdlsabreauto/50_setup.sh2
-rw-r--r--templates/machine/imx8mq-evk-viv/40_bblayers.conf.inc (renamed from templates/machine/imx8mqevk-viv/40_bblayers.conf.inc)0
-rw-r--r--templates/machine/imx8mq-evk-viv/50_local.conf.inc3
-rw-r--r--templates/machine/imx8mq-evk-viv/50_setup.sh (renamed from templates/machine/imx8mqevk-viv/50_setup.sh)0
-rw-r--r--templates/machine/imx8mq-evk-viv/README_machine_imx8mq-evk-viv.md (renamed from templates/machine/imx8mqevk-viv/README_machine_imx8mqevk-viv.md)0
-rw-r--r--templates/machine/imx8mq-evk/40_bblayers.conf.inc (renamed from templates/machine/imx8mqevk/40_bblayers.conf.inc)0
-rw-r--r--templates/machine/imx8mq-evk/50_local.conf.inc3
-rw-r--r--templates/machine/imx8mq-evk/50_setup.sh (renamed from templates/machine/imx8mqevk/50_setup.sh)0
-rw-r--r--templates/machine/imx8mq-evk/README_machine_imx8mq-evk.md (renamed from templates/machine/imx8mqevk/README_machine_imx8mqevk.md)4
-rw-r--r--templates/machine/imx8mqevk-viv/50_local.conf.inc3
-rw-r--r--templates/machine/imx8mqevk/50_local.conf.inc3
-rw-r--r--templates/machine/j721e-evm/50_bblayers.conf.inc5
-rw-r--r--templates/machine/j721e-evm/50_local.conf.inc3
-rw-r--r--templates/machine/j721e-evm/README_machine_j721e-evm.md9
-rw-r--r--templates/machine/m3-salvator-x/50_bblayers.conf.inc1
-rw-r--r--templates/machine/m3ulcb-kf/50_bblayers.conf.inc1
-rw-r--r--templates/machine/m3ulcb-nogfx/50_bblayers.conf.inc1
-rw-r--r--templates/machine/m3ulcb/50_bblayers.conf.inc1
-rw-r--r--templates/machine/nitrogen6x/40_bblayers.conf.inc6
-rw-r--r--templates/machine/nitrogen6x/50_local.conf.inc3
-rw-r--r--templates/machine/nitrogen6x/50_setup.sh2
-rw-r--r--templates/machine/nitrogen6x/README_machine_nitrogen6x.md9
-rw-r--r--templates/machine/qemuriscv64/50_local.conf.inc3
-rw-r--r--templates/machine/qemuriscv64/README_machine_qemuriscv64.md9
-rw-r--r--templates/machine/raspberrypi3/50_local.conf.inc3
-rw-r--r--templates/machine/raspberrypi3/README_machine_raspberrypi3.md9
-rw-r--r--templates/machine/raspberrypi4/50_local.conf.inc2
-rw-r--r--templates/machine/raspberrypi5/50_bblayers.conf.inc (renamed from templates/machine/raspberrypi3/50_bblayers.conf.inc)0
-rw-r--r--templates/machine/raspberrypi5/50_local.conf.inc4
-rw-r--r--templates/machine/s4sk/50_bblayers.conf.inc7
-rw-r--r--templates/machine/s4sk/50_local.conf.inc4
-rw-r--r--templates/machine/s4sk/README_machine_s4sk.md11
-rw-r--r--templates/machine/unmatched/50_bblayers.conf.inc6
-rw-r--r--templates/machine/unmatched/50_local.conf.inc4
-rw-r--r--templates/machine/virtio-aarch64/50_bblayers.conf.inc6
-rw-r--r--templates/machine/virtio-aarch64/50_local.conf.inc3
-rw-r--r--templates/machine/virtio-aarch64/README_machine_virtio-aarch64.md10
1083 files changed, 8071 insertions, 42365 deletions
diff --git a/.gitlab/issue_templates/default.md b/.gitlab/issue_templates/default.md
new file mode 100644
index 000000000..bca6c09e4
--- /dev/null
+++ b/.gitlab/issue_templates/default.md
@@ -0,0 +1,2 @@
+**Please use https://jira.automotivelinux.org for issues.**
+See also: https://docs.automotivelinux.org/ chapter "How to contribute".
diff --git a/.gitlab/issue_templates/mytemplate.md b/.gitlab/issue_templates/mytemplate.md
new file mode 100644
index 000000000..25d91d81d
--- /dev/null
+++ b/.gitlab/issue_templates/mytemplate.md
@@ -0,0 +1,3 @@
+**Please use https://gerrit.automotivelinux.org for code contributions.**
+See also: https://docs.automotivelinux.org/ chapter "How to contribute".
+
diff --git a/.gitlab/merge_request_templates/default.md b/.gitlab/merge_request_templates/default.md
new file mode 100644
index 000000000..5b02effeb
--- /dev/null
+++ b/.gitlab/merge_request_templates/default.md
@@ -0,0 +1,2 @@
+**Please use https://gerrit.automotivelinux.org for code contributions.**
+See also: https://docs.automotivelinux.org/ chapter "How to contribute".
diff --git a/.gitlab/merge_request_templates/mytemplate.md b/.gitlab/merge_request_templates/mytemplate.md
new file mode 100644
index 000000000..25d91d81d
--- /dev/null
+++ b/.gitlab/merge_request_templates/mytemplate.md
@@ -0,0 +1,3 @@
+**Please use https://gerrit.automotivelinux.org for code contributions.**
+See also: https://docs.automotivelinux.org/ chapter "How to contribute".
+
diff --git a/agl-layers-overview.md b/agl-layers-overview.md
index 409eae529..e84f875bf 100755
--- a/agl-layers-overview.md
+++ b/agl-layers-overview.md
@@ -14,7 +14,6 @@ This section provides information about the layers used by the AGL Project:
* **`meta-agl`**: Minimal set of software needed to create an AGL distribution
used to boot a system.
- AGL profiles are built on top of this minimal set of software.
* **`meta-agl-demo`**: Provides a reference or demo platform and applications
for the AGL Distribution.
diff --git a/docs/profiles.md b/docs/profiles.md
index 287b8190a..5d0f89d4f 100644
--- a/docs/profiles.md
+++ b/docs/profiles.md
@@ -140,7 +140,6 @@ meta-agl/meta-agl-profile-core/recipes-platform
| |-- agl-image-graphical-qt5.bb
| `-- agl-image-graphical-qt5.inc
`-- packagegroups
- |-- packagegroup-agl-appfw-native-qt5.bb
|-- packagegroup-agl-demo-qt-examples.bb
|-- packagegroup-agl-profile-graphical-qt5.bb
`-- packagegroup-qt5-toolchain-target.bbappend
diff --git a/meta-agl-bsp/README b/meta-agl-bsp/README
new file mode 100644
index 000000000..69ca72c9d
--- /dev/null
+++ b/meta-agl-bsp/README
@@ -0,0 +1,19 @@
+This is meta-agl-bsp.
+
+This layer holds the 'impedance-mismatch' between AGL and the BSP's.
+
+/dream on
+In an ideal world, this would be empty!
+/dream off
+
+Maintenance
+-----------
+
+All patches must be submitted via the AGL Gerrit instance at
+https://gerrit.automotivelinux.org. See this wiki page for
+details:
+
+https://wiki.automotivelinux.org/agl-distro/contributing
+
+Layer maintainers:
+ Jan-Simon Möller <jsmoeller@linuxfoundation.org>
diff --git a/meta-agl-bsp/conf/include/agl_am62xx-evm.inc b/meta-agl-bsp/conf/include/agl_am62xx-evm.inc
new file mode 100644
index 000000000..24fd95141
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_am62xx-evm.inc
@@ -0,0 +1,8 @@
+# am62xx-evm has a k3r5 BBMULTICONFIG to build its bootloader
+# firmware, need to use an override to set DEFAULTTUNE back to
+# what that machine configuration needs.
+DEFAULTTUNE:k3r5:forcedefaulttune = "armv7athf"
+
+# meta-ti-bsp layer conf does break expectations wrt common folders
+# meta-ti-bsp/conf/layer.conf:TI_COMMON_DEPLOY ?= "${TOPDIR}/deploy-ti"
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy"
diff --git a/meta-agl-bsp/conf/include/agl_bbe.inc b/meta-agl-bsp/conf/include/agl_bbe.inc
index 5c28bea20..5252c558b 100644
--- a/meta-agl-bsp/conf/include/agl_bbe.inc
+++ b/meta-agl-bsp/conf/include/agl_bbe.inc
@@ -6,35 +6,19 @@
CORE_IMAGE_EXTRA_INSTALL += "packagegroup-machine-base"
#-------------------------------------------------
-## Graphics section ##
-#-------------------------------------------------
-PACKAGES_GFX = "ti-sgx-ddk-km"
-IMAGE_INSTALL_append = " ${PACKAGES_GFX}"
-
-
-# Enable Gfx Pkgs
-MACHINE_FEATURES_append = " sgx"
-MULTI_PROVIDER_WHITELIST += "virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
-
-DEPENDS_remove = "virtual/libgl"
-
-# Preferred providers
-PREFERRED_PROVIDER_virtual/libgles1 = ""
-PREFERRED_PROVIDER_virtual/libgles2 = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/egl = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/libgbm = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/mesa = "mesa-gl"
-
-#-------------------------------------------------
## Multimedia section ##
#-------------------------------------------------
# DEFAULTTUNE for cortex-a8
-DISTRO_FEATURES_append = " agl-medium-arm-compiler"
-
-SECURITY_CFLAGS_pn-mozjs = ""
-SECURITY_LDFLAGS_pn-mozjs = ""
-SECURITY_CFLAGS_pn-gpm = ""
-SECURITY_LDFLAGS_pn-gpm = ""
-SECURITY_CFLAGS_pn-libatasmart = ""
-SECURITY_LDFLAGS_pn-libatasmart = ""
+DISTRO_FEATURES:append = " agl-medium-arm-compiler"
+
+SECURITY_CFLAGS:pn-mozjs = ""
+SECURITY_LDFLAGS:pn-mozjs = ""
+SECURITY_CFLAGS:pn-gpm = ""
+SECURITY_LDFLAGS:pn-gpm = ""
+SECURITY_CFLAGS:pn-libatasmart = ""
+SECURITY_LDFLAGS:pn-libatasmart = ""
+
+# meta-ti-bsp layer conf does break expectations wrt common folders
+# meta-ti-bsp/conf/layer.conf:TI_COMMON_DEPLOY ?= "${TOPDIR}/deploy-ti"
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy" \ No newline at end of file
diff --git a/meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc b/meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc
new file mode 100644
index 000000000..1e03b70ff
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc
@@ -0,0 +1,6 @@
+# beaglebone-ai64 has a k3r5 BBMULTICONFIG to build its bootloader
+# and firmware, need to use an override to set DEFAULTTUNE back to
+# what that machine configuration needs.
+DEFAULTTUNE:k3r5:forcedefaulttune = "armv7athf"
+
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy"
diff --git a/meta-agl-bsp/conf/include/agl_beaglebone.inc b/meta-agl-bsp/conf/include/agl_beaglebone.inc
index cfd189df3..ec3a3a448 100644
--- a/meta-agl-bsp/conf/include/agl_beaglebone.inc
+++ b/meta-agl-bsp/conf/include/agl_beaglebone.inc
@@ -1,40 +1,10 @@
# This config is for the beaglebone (inspired from the vayu config).
-#-------------------------------------------------
-## Graphics section ##
-#-------------------------------------------------
-PACKAGES_GFX = "ti-sgx-ddk-km"
-IMAGE_INSTALL_append = " ${PACKAGES_GFX}"
-
-
-# Enable Gfx Pkgs
-MACHINE_FEATURES_append = " sgx"
-MULTI_PROVIDER_WHITELIST += "virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
-
-DEPENDS_remove = "virtual/libgl"
-
-# Preferred providers
-PREFERRED_PROVIDER_virtual/libgles1 = ""
-PREFERRED_PROVIDER_virtual/libgles2 = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/egl = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/libgbm = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/mesa = "mesa-gl"
-
-#-------------------------------------------------
-## Multimedia section ##
-#-------------------------------------------------
-
-PREFERRED_PROVIDER_virtual/kernel = "linux-ti-staging"
-PREFERRED_VERSION_virtual/kernel = "4.9"
-
# DEFAULTTUNE for cortex-a8
-DISTRO_FEATURES_append = " agl-medium-arm-compiler"
-
-SECURITY_CFLAGS_pn-mozjs = ""
-SECURITY_LDFLAGS_pn-mozjs = ""
-SECURITY_CFLAGS_pn-gpm = ""
-SECURITY_LDFLAGS_pn-gpm = ""
-SECURITY_CFLAGS_pn-libatasmart = ""
-SECURITY_LDFLAGS_pn-libatasmart = ""
+DISTRO_FEATURES:append = " agl-medium-arm-compiler"
WKS_FILE = "sdimage-bootpart-uuid.wks"
+
+# meta-ti-bsp layer conf does break expectations wrt common folders
+# meta-ti-bsp/conf/layer.conf:TI_COMMON_DEPLOY ?= "${TOPDIR}/deploy-ti"
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy" \ No newline at end of file
diff --git a/meta-agl-bsp/conf/include/agl_beagleplay.inc b/meta-agl-bsp/conf/include/agl_beagleplay.inc
new file mode 100644
index 000000000..77b669bb7
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_beagleplay.inc
@@ -0,0 +1,6 @@
+# beagleplay has a k3r5 BBMULTICONFIG to build its bootloader
+# and firmware, need to use an override to set DEFAULTTUNE back to
+# what that machine configuration needs.
+DEFAULTTUNE:k3r5:forcedefaulttune = "armv7athf"
+
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy"
diff --git a/meta-agl-bsp/conf/include/agl_cubox-i.inc b/meta-agl-bsp/conf/include/agl_cubox-i.inc
index 46464325b..ee5e759e4 100644
--- a/meta-agl-bsp/conf/include/agl_cubox-i.inc
+++ b/meta-agl-bsp/conf/include/agl_cubox-i.inc
@@ -1,24 +1,15 @@
-DISTRO_FEATURES_append = " agl-medium-arm-compiler"
+require agl_imx6-common.inc
-# This disables the Freescale/NXP Vivante GPU driver and enables
-# etnaviv support.
-MACHINEOVERRIDES .= ":use-mainline-bsp"
-
-# Disable meta-freescale package architecure mangling, as it causes
-# issues with AGL's explicit setting of DEFAULTTUNE.
-INHERIT_remove = "fsl-dynamic-packagearch"
-MACHINE_SOCARCH = "${TUNE_PKGARCH}"
+# Force use of the community supported LTS kernel instead of the
+# default linux-fslc
+PREFERRED_PROVIDER_virtual/kernel = "linux-fslc-lts"
# Include devicetrees for SOM 1.5 and Hummingboard 2 hardware
-KERNEL_DEVICETREE_append = " \
- imx6dl-hummingboard-som-v15.dtb imx6q-hummingboard-som-v15.dtb \
- imx6dl-hummingboard2.dtb imx6q-hummingboard2.dtb \
- imx6dl-hummingboard2-som-v15.dtb imx6q-hummingboard2-som-v15.dtb \
+KERNEL_DEVICETREE:append = " \
+ imx6dl-hummingboard-som-v15.dtb \
+ imx6q-hummingboard-som-v15.dtb \
+ imx6dl-hummingboard2.dtb \
+ imx6q-hummingboard2.dtb \
+ imx6dl-hummingboard2-som-v15.dtb \
+ imx6q-hummingboard2-som-v15.dtb \
"
-
-# Disable the meta-freescale weston-init bbappend as it conflicts
-# with AGL's.
-BBMASK = "meta-freescale/recipes-graphics/wayland/weston-init"
-
-# Set CMA size large enough to work with AGL
-UBOOT_EXTLINUX_KERNEL_ARGS_append = " cma=512M"
diff --git a/meta-agl-bsp/conf/include/agl_cyclone5.inc b/meta-agl-bsp/conf/include/agl_cyclone5.inc
index 7ebd4090c..3f12a2a92 100644
--- a/meta-agl-bsp/conf/include/agl_cyclone5.inc
+++ b/meta-agl-bsp/conf/include/agl_cyclone5.inc
@@ -1,7 +1,7 @@
OSTREE_BOOTLOADER ?= "u-boot"
# DEFAULTTUNE for cortex-a9
-DISTRO_FEATURES_append = " agl-medium-arm-compiler"
+DISTRO_FEATURES:append = " agl-medium-arm-compiler"
# Use the AGL default ext4.xz to generate the rpi-sdimg
SDIMG_ROOTFS_TYPE = "ext4.xz"
diff --git a/meta-agl-bsp/conf/include/agl_dra7xx-evm.inc b/meta-agl-bsp/conf/include/agl_dra7xx-evm.inc
deleted file mode 100644
index ccc8feb9a..000000000
--- a/meta-agl-bsp/conf/include/agl_dra7xx-evm.inc
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#-------------------------------------------------
-## Graphics section ##
-#-------------------------------------------------
-PACKAGES_GFX_${MACHINE} = "ti-sgx-ddk-km"
-
-# Enable Gfx Pkgs
-MACHINE_FEATURES_append = " sgx"
-MULTI_PROVIDER_WHITELIST += "virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
-
-DEPENDS_remove = "virtual/libgl"
-
-# Preferred providers
-PREFERRED_PROVIDER_virtual/libgles1 = ""
-PREFERRED_PROVIDER_virtual/libgles2 = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/egl = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/libgbm = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/mesa = "mesa-gl"
-
-#-------------------------------------------------
-## Multimedia section ##
-#-------------------------------------------------
-
-PACKAGES_MULTIMEDIA = " \
- ipumm-fw \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio-misc' , '', d)} \
-"
-
-PREFERRED_PROVIDER_virtual/kernel = "linux-ti-staging"
-PREFERRED_VERSION_virtual/kernel = "4.9"
-
-# Distribution-specific runtime components
-IMAGE_INSTALL_append = " \
- ${PACKAGES_GFX} \
- ${PACKAGES_MULTIMEDIA} \
- cmem \
-"
-
-# Include WIC support based on beaglebone
-do_image_wic[depends] += "mtools-native:do_populate_sysroot dosfstools-native:do_populate_sysroot"
-WKS_FILE = "sdimage-bootpart-uuid.wks"
-IMAGE_BOOT_FILES = "MLO u-boot.img uEnv.txt"
diff --git a/meta-agl-bsp/conf/include/agl_dragonboard-410c.inc b/meta-agl-bsp/conf/include/agl_dragonboard-410c.inc
deleted file mode 100644
index f66265369..000000000
--- a/meta-agl-bsp/conf/include/agl_dragonboard-410c.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-# Install 96boards-tools for resizing partition
-# Add systemd unit file for the qcom_q6v5_pil kernel module
-IMAGE_INSTALL_append = " 96boards-tools q6v5-pil"
diff --git a/meta-agl-bsp/conf/include/agl_dragonboard-820c.inc b/meta-agl-bsp/conf/include/agl_dragonboard-820c.inc
deleted file mode 100644
index f74d703fa..000000000
--- a/meta-agl-bsp/conf/include/agl_dragonboard-820c.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-# Install 96boards-tools for resizing partition
-IMAGE_INSTALL_append = " 96boards-tools"
diff --git a/meta-agl-bsp/conf/include/agl_ebisu.inc b/meta-agl-bsp/conf/include/agl_ebisu.inc
index 2ac93adf0..d684f814d 100644
--- a/meta-agl-bsp/conf/include/agl_ebisu.inc
+++ b/meta-agl-bsp/conf/include/agl_ebisu.inc
@@ -4,10 +4,10 @@ BOARD_NAME = "ebisu"
DTB_SUFFIX = "r8a77990-ebisu"
-DISTRO_FEATURES_remove = " use_eva_pkg"
+DISTRO_FEATURES:remove = " use_eva_pkg"
# Configuration for USB 3.0
-MACHINE_FEATURES_append = " usb3"
+MACHINE_FEATURES:append = " usb3"
-IMAGE_INSTALL_append = " gstreamer1.0-omx gstreamer1.0-plugin-vspfilter"
-IMAGE_INSTALL_append = " kernel-module-mmngr kernel-module-mmngrbuf kernel-module-uvcs-drv kernel-module-vspmif"
+IMAGE_INSTALL:append = " gstreamer1.0-omx gstreamer1.0-plugin-vspfilter"
+IMAGE_INSTALL:append = " kernel-module-mmngr kernel-module-mmngrbuf kernel-module-uvcs-drv kernel-module-vspm-if"
diff --git a/meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc b/meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc
index c12026351..4ff103df8 100644
--- a/meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc
@@ -1,10 +1,9 @@
-require conf/include/agl_rcar-nogfx.inc
+require conf/include/agl_salvator-nogfx.inc
SOC_FAMILY = "r8a7795"
BOARD_NAME = "h3-salvator-x"
-DTB_SUFFIX = "r8a7795-salvator-xs"
+DTB_SUFFIX = "r8a77951-salvator-xs"
-# Mask graphic Pkgs
-BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
-# Mask MMP recipes
-BBMASK += "kernel-module-uvcs-drv|omx-user-module"
+# do use software rendering to display the compositor
+# used for images w/o binary-only driver
+WESTON_USE_PIXMAN = "1"
diff --git a/meta-agl-bsp/conf/include/agl_h3-salvator-x.inc b/meta-agl-bsp/conf/include/agl_h3-salvator-x.inc
index d338a5663..134b1dd1f 100644
--- a/meta-agl-bsp/conf/include/agl_h3-salvator-x.inc
+++ b/meta-agl-bsp/conf/include/agl_h3-salvator-x.inc
@@ -1,9 +1,6 @@
-require conf/include/agl_rcar.inc
+require conf/include/agl_salvator.inc
SOC_FAMILY = "r8a7795"
BOARD_NAME = "h3-salvator-x"
-DTB_SUFFIX = "r8a7795-salvator-xs"
+DTB_SUFFIX = "r8a77951-salvator-xs"
-IMAGE_INSTALL_append_rcar-gen3 = " \
- kernel-module-vspmif \
-"
diff --git a/meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc b/meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc
index 25755d247..5f288fca5 100644
--- a/meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc
@@ -2,9 +2,24 @@ require conf/include/agl_rcar-nogfx.inc
SOC_FAMILY = "r8a7795"
BOARD_NAME = "h3ulcb"
-DTB_SUFFIX = "r8a7795-h3ulcb"
+DTB_SUFFIX = "r8a77951-ulcb"
# Mask graphic Pkgs
BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
# Mask MMP recipes
BBMASK += "kernel-module-uvcs-drv|omx-user-module"
+
+# Work around use of obsolete Weston backend-fbdev in meta-rcar-gen3
+# when building without the proprietary driver stack. Masking out the
+# weston_%.bbappend seems the simplest approach for now, as forcing
+# USE_GLES = "1" to disable the adding of -Dbackend-default="fbdev" to
+# EXTRA_OEMESON triggers adding "libgbm" to DEPENDS, which breaks due
+# to that being a component specific to the proprietary stack we are
+# explicitly disabling. If the "libgbm" usage in the bbappend was
+# instead "virtual/libgbm" as is now used in poky, it might be possible
+# to just tweak PREFERRED_PROVIDER_virtual/libgbm = "mesa".
+BBMASK += "meta-rcar-gen3/recipes-graphics/wayland/weston_%.bbappend"
+
+# do use software rendering to display the compositor
+# used for images w/o binary-only driver
+WESTON_USE_PIXMAN = "1"
diff --git a/meta-agl-bsp/conf/include/agl_h3ulcb.inc b/meta-agl-bsp/conf/include/agl_h3ulcb.inc
index eb3836abb..b958d767c 100644
--- a/meta-agl-bsp/conf/include/agl_h3ulcb.inc
+++ b/meta-agl-bsp/conf/include/agl_h3ulcb.inc
@@ -2,4 +2,5 @@ require conf/include/agl_rcar.inc
SOC_FAMILY = "r8a7795"
BOARD_NAME = "h3ulcb"
-DTB_SUFFIX = "r8a7795-h3ulcb"
+#ws2.0
+DTB_SUFFIX = "r8a77951-ulcb"
diff --git a/meta-agl-bsp/conf/include/agl_hsdk.inc b/meta-agl-bsp/conf/include/agl_hsdk.inc
deleted file mode 100644
index 075cea53e..000000000
--- a/meta-agl-bsp/conf/include/agl_hsdk.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-KERNEL_IMAGETYPE = "uImage"
-WKS_FILE = "sdimage-hsdk.wks"
-IMAGE_BOOT_FILES = "uImage uboot.env"
-IMAGE_INSTALL_append = " kernel-modules"
diff --git a/meta-agl-bsp/conf/include/agl_imx-common.inc b/meta-agl-bsp/conf/include/agl_imx-common.inc
new file mode 100644
index 000000000..b58a99589
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_imx-common.inc
@@ -0,0 +1,8 @@
+# Disable meta-freescale package architecure mangling, as it causes
+# issues with AGL's explicit setting of DEFAULTTUNE.
+INHERIT:remove = "fsl-dynamic-packagearch"
+MACHINE_SOCARCH = "${TUNE_PKGARCH}"
+
+# Disable the meta-freescale weston-init bbappend as it conflicts
+# with AGL's.
+BBMASK += "meta-freescale/recipes-graphics/wayland/weston-init"
diff --git a/meta-agl-bsp/conf/include/agl_imx6-common.inc b/meta-agl-bsp/conf/include/agl_imx6-common.inc
new file mode 100644
index 000000000..7b22282dd
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_imx6-common.inc
@@ -0,0 +1,14 @@
+require agl_imx-common.inc
+
+DISTRO_FEATURES:append = " agl-medium-arm-compiler"
+
+# This disables the Freescale/NXP Vivante GPU driver and enables
+# etnaviv support. This is the default for the i.MX6 platforms in
+# meta-freescale, but not for all the ones in meta-freescale-3rdparty,
+# so set it here to give a consistent default.
+IMX_DEFAULT_BSP = "mainline"
+
+# Set CMA size large enough to work with AGL
+UBOOT_EXTLINUX_KERNEL_ARGS:append = " cma=512M"
+
+AGL_DEFAULT_INITRAMFS_FSTYPES := ""
diff --git a/meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc b/meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc
index 0d8c6f239..f058ba1a5 100644
--- a/meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc
+++ b/meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc
@@ -1,19 +1,5 @@
-DISTRO_FEATURES_append = " agl-medium-arm-compiler"
+require agl_imx6-common.inc
-# This disables the Freescale/NXP Vivante GPU driver and enables
-# etnaviv support.
-MACHINEOVERRIDES .= ":use-mainline-bsp"
-
-# Disable meta-freescale package architecure mangling, as it causes
-# issues with AGL's explicit setting of DEFAULTTUNE.
-INHERIT_remove = "fsl-dynamic-packagearch"
-MACHINE_SOCARCH = "${TUNE_PKGARCH}"
-
-# Disable the meta-freescale weston-init bbappend as it conflicts
-# with AGL's.
-BBMASK = "meta-freescale/recipes-graphics/wayland/weston-init"
-
-# Set CMA size large enough to work with AGL
-UBOOT_EXTLINUX_KERNEL_ARGS_append = " cma=512M"
-
-AGL_DEFAULT_INITRAMFS_FSTYPES := ""
+# Force use of the community supported LTS kernel instead of the
+# default linux-fslc
+IMX_DEFAULT_KERNEL:imx6qdlsabreauto = "linux-fslc-lts"
diff --git a/meta-agl-bsp/conf/include/agl_imx8mq-evk-common.inc b/meta-agl-bsp/conf/include/agl_imx8mq-evk-common.inc
new file mode 100644
index 000000000..b3faadd0a
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_imx8mq-evk-common.inc
@@ -0,0 +1,8 @@
+require agl_imx-common.inc
+
+# Add helper to drive setting up HCI UART device
+# NOTE: Disabled 2023/05 due to kernel oops, further investigation
+# required, see SPEC-4807 in JIRA.
+#MACHINE_EXTRA_RRECOMMENDS:append = " hci-uart-helper"
+
+AGL_DEFAULT_INITRAMFS_FSTYPES := ""
diff --git a/meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc b/meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc
new file mode 100644
index 000000000..3988fcd6f
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc
@@ -0,0 +1,8 @@
+require agl_imx8mq-evk-common.inc
+
+IMX_DEFAULT_BSP = "nxp"
+
+# NOTE:
+# There is some potential benefit to using the community supported
+# linux-fslc-imx hybrid kernel here, but keeping the configuration
+# close to upstream to ease maintenance seems worthwhile.
diff --git a/meta-agl-bsp/conf/include/agl_imx8mq-evk.inc b/meta-agl-bsp/conf/include/agl_imx8mq-evk.inc
new file mode 100644
index 000000000..620ee0fdd
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_imx8mq-evk.inc
@@ -0,0 +1,23 @@
+require agl_imx8mq-evk-common.inc
+
+# NOTE:
+# Currently using the upstream default of IMX_DEFAULT_BSP = "mainline",
+# since we want to use the etnaviv driver and upstream Mesa + weston
+# stack. More tweaks are required to accomplish that if the BSP is set
+# to "nxp".
+
+# Force use of the community supported hybrid NXP/LTS kernel instead of
+# the default linux-fslc. This is required to get the drivers required
+# for HDMI output.
+IMX_DEFAULT_KERNEL:imx8mq-evk = "linux-fslc-imx"
+
+# Tweaks to allow using linux-fslc-imx on its own without the whole
+# NXP BSP. Just the DISTROOVERRIDES change on its own is not enough,
+# as COMPATIBLE_MACHINE is evaluated early enough that the recipe is
+# not seen as compatible without an explicit override.
+COMPATIBLE_MACHINE:pn-linux-fslc-imx = "(imx8mq-evk)"
+DISTROOVERRIDES:pn-linux-fslc-imx:append = "mx8-nxp-bsp"
+
+# Add our own over-ride for use in a few recipes where there is
+# conflicting Vivante vs etnaviv configuration.
+MACHINEOVERRIDES .= ":etnaviv"
diff --git a/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc b/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc
deleted file mode 100644
index 50567583c..000000000
--- a/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-DISTRO_FEATURES_append = " agl-medium-arm-compiler"
-
-# Force use of the community supported LTS kernel instead of the
-# default linux-imx
-IMX_DEFAULT_KERNEL_imx8mqevk = "linux-fslc-imx"
-
-# For EVKB wifi support
-MACHINE_FEATURES_append = " bcm4356"
-
-# Disable meta-freescale package architecure mangling, as it causes
-# issues with AGL's explicit setting of DEFAULTTUNE.
-INHERIT_remove = "fsl-dynamic-packagearch"
-MACHINE_SOCARCH = "${TUNE_PKGARCH}"
-
-# Disable the meta-freescale weston-init bbappend as it conflicts
-# with AGL's.
-BBMASK = "meta-freescale/recipes-graphics/wayland/weston-init"
-
-AGL_DEFAULT_INITRAMFS_FSTYPES := ""
diff --git a/meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc b/meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc
deleted file mode 100644
index 8227f5c06..000000000
--- a/meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc
+++ /dev/null
@@ -1 +0,0 @@
-include agl_imx8mqevk-common.inc
diff --git a/meta-agl-bsp/conf/include/agl_imx8mqevk.inc b/meta-agl-bsp/conf/include/agl_imx8mqevk.inc
deleted file mode 100644
index 88c06336c..000000000
--- a/meta-agl-bsp/conf/include/agl_imx8mqevk.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-include agl_imx8mqevk-common.inc
-
-# NOTE: currently not using IMX_DEFAULT_BSP = "mainline", as it
-# requires more changes than this approach of disabling
-# Vivante.
-
-# Add our own over-ride for use in a few recipes where there is
-# conflicting Vivante vs etnaviv configuration.
-MACHINEOVERRIDES .= ":etnaviv"
-
-# Knock out Vivante overrides
-MACHINEOVERRIDES_EXTENDER_mx8mq_forcevariable = ""
-PREFERRED_VERSION_weston_mx8 = "8.0.0"
-PREFERRED_VERSION_wayland-protocols_mx8 = "1.20"
-PREFERRED_VERSION_libdrm_mx8 = "2.4.100"
-
-CORE_IMAGE_EXTRA_INSTALL += "libdrm-etnaviv"
-
-PREFERRED_VERSION_gstreamer1.0_mx8 = "1.16.2"
-PREFERRED_VERSION_gstreamer1.0-plugins-base_mx8 = "1.16.2"
-PREFERRED_VERSION_gstreamer1.0-plugins-good_mx8 = "1.16.2"
-PREFERRED_VERSION_gstreamer1.0-plugins-bad_mx8 = "1.16.2"
-PREFERRED_VERSION_gstreamer1.0-plugins-ugly_mx8 = "1.16.2"
diff --git a/meta-agl-bsp/conf/include/agl_j721e-evm.inc b/meta-agl-bsp/conf/include/agl_j721e-evm.inc
new file mode 100644
index 000000000..963b5697d
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_j721e-evm.inc
@@ -0,0 +1,11 @@
+# j721e-evm has a k3r5 BBMULTICONFIG to build its bootloader
+# firmware, need to use an override to set DEFAULTTUNE back to
+# what that machine configuration needs.
+DEFAULTTUNE:k3r5:forcedefaulttune = "armv7athf"
+
+# Workaround for recipe assumption of poky location
+LIC_FILES_CHKSUM:pn-ti-rtos-firmware = "file://${THISDIR}/../../licenses/TI-TFL;md5=a1b59cb7ba626b9dbbcbf00f3fbc438a"
+
+# meta-ti-bsp layer conf does break expectations wrt common folders
+# meta-ti-bsp/conf/layer.conf:TI_COMMON_DEPLOY ?= "${TOPDIR}/deploy-ti"
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy" \ No newline at end of file
diff --git a/meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc b/meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc
index 7f1248065..ebbb3006a 100644
--- a/meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc
@@ -1,10 +1,6 @@
-require conf/include/agl_rcar-nogfx.inc
+require conf/include/agl_salvator-nogfx.inc
SOC_FAMILY = "r8a7796"
BOARD_NAME = "m3-salvator-x"
DTB_SUFFIX = "r8a7796-salvator-xs"
-# Mask graphic Pkgs
-BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
-# Mask MMP recipes
-BBMASK += "kernel-module-uvcs-drv|omx-user-module"
diff --git a/meta-agl-bsp/conf/include/agl_m3-salvator-x.inc b/meta-agl-bsp/conf/include/agl_m3-salvator-x.inc
index 5dcb5373d..355040ba9 100644
--- a/meta-agl-bsp/conf/include/agl_m3-salvator-x.inc
+++ b/meta-agl-bsp/conf/include/agl_m3-salvator-x.inc
@@ -1,9 +1,6 @@
-require conf/include/agl_rcar.inc
+require conf/include/agl_salvator.inc
SOC_FAMILY = "r8a7796"
BOARD_NAME = "m3-salvator-x"
DTB_SUFFIX = "r8a7796-salvator-xs"
-IMAGE_INSTALL_append_rcar-gen3 = " \
- kernel-module-vspmif \
-"
diff --git a/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc b/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc
index 5092c4bcb..31d99c342 100644
--- a/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc
@@ -2,13 +2,27 @@ require conf/include/agl_rcar-nogfx.inc
SOC_FAMILY = "r8a7796"
BOARD_NAME = "m3ulcb"
-DTB_SUFFIX = "r8a7796-m3ulcb"
+DTB_SUFFIX = "r8a77960-ulcb"
# Mask graphic Pkgs
BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
# Mask MMP recipes
BBMASK += "kernel-module-uvcs-drv|omx-user-module"
-DISTRO_FEATURES_append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
-IMAGE_INSTALL_append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen-base xen-mkimage', '', d)}"
+# Work around use of obsolete Weston backend-fbdev in meta-rcar-gen3
+# when building without the proprietary driver stack. Masking out the
+# weston_%.bbappend seems the simplest approach for now, as forcing
+# USE_GLES = "1" to disable the adding of -Dbackend-default="fbdev" to
+# EXTRA_OEMESON triggers adding "libgbm" to DEPENDS, which breaks due
+# to that being a component specific to the proprietary stack we are
+# explicitly disabling. If the "libgbm" usage in the bbappend was
+# instead "virtual/libgbm" as is now used in poky, it might be possible
+# to just tweak PREFERRED_PROVIDER_virtual/libgbm = "mesa".
+BBMASK += "meta-rcar-gen3/recipes-graphics/wayland/weston_%.bbappend"
+# do use software rendering to display the compositor
+# used for images w/o binary-only driver
+WESTON_USE_PIXMAN = "1"
+
+DISTRO_FEATURES:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
+IMAGE_INSTALL:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen-base xen-mkimage', '', d)}"
diff --git a/meta-agl-bsp/conf/include/agl_m3ulcb.inc b/meta-agl-bsp/conf/include/agl_m3ulcb.inc
index b845e8c3c..4f788324c 100644
--- a/meta-agl-bsp/conf/include/agl_m3ulcb.inc
+++ b/meta-agl-bsp/conf/include/agl_m3ulcb.inc
@@ -2,7 +2,7 @@ require conf/include/agl_rcar.inc
SOC_FAMILY = "r8a7796"
BOARD_NAME = "m3ulcb"
-DTB_SUFFIX = "r8a7796-m3ulcb"
+DTB_SUFFIX = "r8a77960-ulcb"
-DISTRO_FEATURES_append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
-IMAGE_INSTALL_append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen-base xen-mkimage', '', d)}" \ No newline at end of file
+DISTRO_FEATURES:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
+IMAGE_INSTALL:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen-base xen-mkimage', '', d)}"
diff --git a/meta-agl-bsp/conf/include/agl_nitrogen6x.inc b/meta-agl-bsp/conf/include/agl_nitrogen6x.inc
deleted file mode 100644
index 77eb97342..000000000
--- a/meta-agl-bsp/conf/include/agl_nitrogen6x.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-DISTRO_FEATURES_append = " agl-medium-arm-compiler"
-
-# This disables the Freescale/NXP Vivante GPU driver and enables
-# etnaviv support.
-MACHINEOVERRIDES .= ":use-mainline-bsp"
-
-# Disable meta-freescale package architecure mangling, as it causes
-# issues with AGL's explicit setting of DEFAULTTUNE.
-INHERIT_remove = "fsl-dynamic-packagearch"
-MACHINE_SOCARCH = "${TUNE_PKGARCH}"
-
-# Disable the meta-freescale weston-init bbappend as it conflicts
-# with AGL's.
-BBMASK = "meta-freescale/recipes-graphics/wayland/weston-init"
-
-# Set CMA size large enough to work with AGL
-UBOOT_EXTLINUX_KERNEL_ARGS_append = " cma=512M"
-
-#WKS_FILE = "imx-uboot.wks"
-AGL_DEFAULT_INITRAMFS_FSTYPES := ""
diff --git a/meta-agl-bsp/conf/include/agl_qemuarm.inc b/meta-agl-bsp/conf/include/agl_qemuarm.inc
index 739eb8dd0..2449e1800 100644
--- a/meta-agl-bsp/conf/include/agl_qemuarm.inc
+++ b/meta-agl-bsp/conf/include/agl_qemuarm.inc
@@ -1,14 +1,20 @@
-# Configuration for serial console
-#QB_KERNEL_CMDLINE_APPEND_append = " console=ttyAMA0,115200n8"
-#
-# All boot message will be off
-QB_KERNEL_CMDLINE_APPEND_append = " quiet"
-
# Build updatable image. Only takes effect when sota.bbclass is inherited
-#DISTRO_FEATURES_append = " sota"
+#DISTRO_FEATURES:append = " sota"
# Root device
ROOT_VM = "root=PARTUUID=${DISK_SIGNATURE}-02"
# Use our own wks file
WKS_FILE="directdisk.wks.in"
+
+# Use pixman as software renderer to avoid high cpu consumption by GL-renderer
+WESTON_USE_PIXMAN = "1"
+
+# Over-ride setting in oe-core's qemuboot.bbclass
+QB_MEM:qemuarm = "-m 2048"
+
+# Changes to make runqemu work out-of-the-box
+QB_AUDIO_DRV:qemuarm := "alsa"
+QB_MACHINE:qemuarm := "-machine virt-2.11 -smp 4"
+QB_OPT_APPEND:qemuarm := "-show-cursor -device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
+QB_KERNEL_CMDLINE_APPEND:qemuarm := "console=ttyAMA0 verbose vmalloc=256M"
diff --git a/meta-agl-bsp/conf/include/agl_qemuarm64.inc b/meta-agl-bsp/conf/include/agl_qemuarm64.inc
index ca2cc947e..46d3b4c39 100644
--- a/meta-agl-bsp/conf/include/agl_qemuarm64.inc
+++ b/meta-agl-bsp/conf/include/agl_qemuarm64.inc
@@ -1,17 +1,20 @@
-# Configuration for serial console
-#QB_KERNEL_CMDLINE_APPEND_append = " console=ttyAMA0,115200n8"
-
-# All boot message will be off
-QB_KERNEL_CMDLINE_APPEND_append = " quiet"
-
# Build updatable image. Only takes effect when sota.bbclass is inherited
-DISTRO_FEATURES_append = " sota"
+#DISTRO_FEATURES:append = " sota"
# Root device
ROOT_VM = "root=PARTUUID=${DISK_SIGNATURE}-02"
-# Over-ride setting in oe-core's qemuarm64.conf
-QB_MEM_qemuarm64 = "-m 2048"
-
# Use our own wks file
WKS_FILE="directdisk.wks.in"
+
+# Use pixman as software renderer to avoid high cpu consumption by GL-renderer
+WESTON_USE_PIXMAN = "1"
+
+# Over-ride setting in oe-core's qemuboot.bbclass
+QB_MEM:qemuarm64 = "-m 2048"
+
+# Changes to make runqemu work out-of-the-box
+QB_AUDIO_DRV:qemuarm64 := "alsa"
+QB_MACHINE:qemuarm64 := "-machine virt -smp 4"
+QB_OPT_APPEND:qemuarm64 := " -show-cursor -device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
+QB_KERNEL_CMDLINE_APPEND:qemuarm64 := "console=ttyAMA0,115200n8 verbose" \ No newline at end of file
diff --git a/meta-agl-bsp/conf/include/agl_qemuriscv64.inc b/meta-agl-bsp/conf/include/agl_qemuriscv64.inc
new file mode 100644
index 000000000..1ffc3cf0e
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_qemuriscv64.inc
@@ -0,0 +1,11 @@
+# Build updatable image. Only takes effect when sota.bbclass is inherited
+DISTRO_FEATURES:append = " sota"
+
+# Root device
+ROOT_VM = "root=PARTUUID=${DISK_SIGNATURE}-02"
+
+# Over-ride setting in oe-core's qemuriscv64.conf
+QB_MEM:qemuriscv64 = "-m 2048"
+
+# Use our own wks file
+WKS_FILE="directdisk.wks.in"
diff --git a/meta-agl-bsp/conf/include/agl_qemux86-64.inc b/meta-agl-bsp/conf/include/agl_qemux86-64.inc
index 3915a5e47..cb40b8b37 100644
--- a/meta-agl-bsp/conf/include/agl_qemux86-64.inc
+++ b/meta-agl-bsp/conf/include/agl_qemux86-64.inc
@@ -12,17 +12,17 @@ UVESA_MODE = "1280x1024-32"
# kernel command line.
#
# Configuration for serial console
-QB_KERNEL_CMDLINE_APPEND_append = " console=ttyS0,115200n8"
+QB_KERNEL_CMDLINE_APPEND:append = " console=ttyS0,115200n8"
#
# All boot message will be off
-QB_KERNEL_CMDLINE_APPEND_append = " quiet"
+QB_KERNEL_CMDLINE_APPEND:append = " quiet"
# Build updatable image. Only takes effect when sota.bbclass is inherited
-DISTRO_FEATURES_append = " sota"
+DISTRO_FEATURES:append = " sota"
# Add firmware required by Up^2 board and default Intel mPCIe wifi card
# sold by upshop.org
-MACHINE_EXTRA_RRECOMMENDS_append = " \
+MACHINE_EXTRA_RRECOMMENDS:append = " \
linux-firmware-i915 \
linux-firmware-rtl8168 \
linux-firmware-ibt-hw-37-8 \
@@ -34,14 +34,17 @@ MACHINE_EXTRA_RRECOMMENDS_append = " \
# NOTE: wic.{xz,bmap} are here since qemu targets override
# AGL_DEFAULT_IMAGE_FSTYPES to not include them, but for Intel
# we actually do want them for use on physical hardware.
-AGL_EXTRA_IMAGE_FSTYPES = "wic.xz wic.bmap ${@bb.utils.contains('DISTRO_FEATURES', 'AGLCI', 'wic.vmdk.xz', 'wic.vmdk', d)}"
-IMAGE_BOOT_FILES_sota = "u-boot-qemux86-64.rom"
+AGL_EXTRA_IMAGE_FSTYPES = "wic.xz wic.bmap ${@bb.utils.contains('AGL_FEATURES', 'AGLCI', 'wic.vmdk.xz', 'wic.vmdk', d)}"
+IMAGE_BOOT_FILES:sota = "u-boot-qemux86-64.rom"
# Root device
ROOT_VM = "root=PARTUUID=${DISK_SIGNATURE}-02"
# Force the virtio video device as 'vmware' doesn't always work
-QB_OPT_APPEND_append = " -vga virtio"
+QB_OPT_APPEND:append = " -vga virtio"
+
+# DRM device weston/compositor systemd unit should depend upon
+WESTON_DRM_DEVICE = "dev-dri-card0.device"
# Use our own wks file
WKS_FILE="systemd-intel-corei7-64-bootdisk.wks"
diff --git a/meta-agl-bsp/conf/include/agl_raspberrypi3.inc b/meta-agl-bsp/conf/include/agl_raspberrypi3.inc
deleted file mode 100644
index a4989b79a..000000000
--- a/meta-agl-bsp/conf/include/agl_raspberrypi3.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-# Maximum memory allowed to be assigned
-GPU_MEM = "256"
-
-# Add CMA to the kernel arguments for SOTA
-OSTREE_KERNEL_ARGS_sota_append = " cma=256M"
-
-#MULTI_PROVIDER_WHITELIST += "virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
-
-# use u-boot always
-RPI_USE_U_BOOT = "1"
-
-#RPI_KERNEL_DEVICETREE_remove_raspberrypi3 = "bcm2708-rpi-0-w.dtb"
-#RPI_KERNEL_DEVICETREE_OVERLAYS_remove_raspberrypi3 = "overlays/lirc-rpi.dtbo"
-#RPI_KERNEL_DEVICETREE_OVERLAYS_append_raspberrypi3 = " overlays/vc4-fkms-v3d.dtbo"
-
-MACHINE_FEATURES += "vc4graphics"
-
-# For libomxil
-#LICENSE_FLAGS_WHITELIST = "commercial"
-
-IMAGE_INSTALL_append = " kernel-modules linux-firmware-rpidistro-bcm43430 linux-firmware-rpidistro-bcm43455 create-combined-dtb "
-
-# Psplash causes crash on first boot on RPi
-IMAGE_FEATURES_remove = "splash"
-
-# Build updatable image. Only takes effect when sota.bbclass is inherited
-DISTRO_FEATURES_append = " sota"
diff --git a/meta-agl-bsp/conf/include/agl_raspberrypi4.inc b/meta-agl-bsp/conf/include/agl_raspberrypi4.inc
index ae302aae1..7fd878d66 100644
--- a/meta-agl-bsp/conf/include/agl_raspberrypi4.inc
+++ b/meta-agl-bsp/conf/include/agl_raspberrypi4.inc
@@ -2,27 +2,33 @@
GPU_MEM = "256"
# Add CMA to the kernel arguments for SOTA
-OSTREE_KERNEL_ARGS_sota_append = " cma=256M"
+OSTREE_KERNEL_ARGS:sota:append = " cma=256M"
# use u-boot always
RPI_USE_U_BOOT = "1"
+# Use UART for serial console
+ENABLE_UART ?= "1"
+
# For libomxil
-#LICENSE_FLAGS_WHITELIST = "commercial"
+#LICENSE_FLAGS_ACCEPTED = "commercial"
-IMAGE_INSTALL_append = " kernel-modules linux-firmware-rpidistro-bcm43430 linux-firmware-rpidistro-bcm43455 create-combined-dtb "
+IMAGE_INSTALL:append = " kernel-modules linux-firmware-rpidistro-bcm43430 linux-firmware-rpidistro-bcm43455 create-combined-dtb "
# Psplash causes crash on first boot on RPi
-IMAGE_FEATURES_remove = "splash"
+IMAGE_FEATURES:remove = "splash"
# Build updatable image. Only takes effect when sota.bbclass is inherited
-DISTRO_FEATURES_append = " sota"
+DISTRO_FEATURES:append = " sota"
# Add xen build, if the xen feature activated
-DISTRO_FEATURES_append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
+DISTRO_FEATURES:append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
# add xen-tools to build
-IMAGE_INSTALL_append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', 'xen-tools xen-mkimage-rpi4', '', d)}"
+IMAGE_INSTALL:append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', 'xen-tools xen-mkimage-rpi4', '', d)}"
# Add xen-raspberry binary to boot files
-IMAGE_BOOT_FILES_append = " ${@bb.utils.contains('AGL_XEN_WANTED','1', 'xen-${MACHINE}', '',d)}"
+IMAGE_BOOT_FILES:append = " ${@bb.utils.contains('AGL_XEN_WANTED','1', 'xen-${MACHINE}', '',d)}"
+
+#DISPLAY CONFIGURATION
+WESTON_DISPLAYS:raspberrypi4 = " hdmi-a-1-90 hdmi-a-2-90"
diff --git a/meta-agl-bsp/conf/include/agl_raspberrypi5.inc b/meta-agl-bsp/conf/include/agl_raspberrypi5.inc
new file mode 100644
index 000000000..a0e675956
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_raspberrypi5.inc
@@ -0,0 +1,34 @@
+# Maximum memory allowed to be assigned
+GPU_MEM = "256"
+
+# Add CMA to the kernel arguments for SOTA
+OSTREE_KERNEL_ARGS:sota:append = " cma=256M"
+
+# use u-boot always (RPi5 U-boot is not ready yet)
+RPI_USE_U_BOOT = "0"
+
+# Use UART for serial console
+ENABLE_UART ?= "1"
+
+# For libomxil
+#LICENSE_FLAGS_ACCEPTED = "commercial"
+
+IMAGE_INSTALL:append = " kernel-modules linux-firmware-rpidistro-bcm43430 linux-firmware-rpidistro-bcm43455 create-combined-dtb "
+
+# Psplash causes crash on first boot on RPi
+IMAGE_FEATURES:remove = "splash"
+
+# Build updatable image. Only takes effect when sota.bbclass is inherited
+DISTRO_FEATURES:append = " sota"
+
+# Add xen build, if the xen feature activated
+DISTRO_FEATURES:append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
+
+# add xen-tools to build
+IMAGE_INSTALL:append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', 'xen-tools xen-mkimage-rpi4', '', d)}"
+
+# Add xen-raspberry binary to boot files
+IMAGE_BOOT_FILES:append = " ${@bb.utils.contains('AGL_XEN_WANTED','1', 'xen-${MACHINE}', '',d)}"
+
+#DISPLAY CONFIGURATION
+WESTON_DISPLAYS:raspberrypi5 = " hdmi-a-1-90 hdmi-a-2-90"
diff --git a/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc b/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
index a7fabfac8..fb67fd976 100644
--- a/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
@@ -1,9 +1,60 @@
-DISTRO_FEATURES_append = " sota"
+DISTRO_FEATURES:append = " sota"
OSTREE_KERNEL = "Image"
-IMAGE_BOOT_FILES_sota = "renesas-ota-bootfiles/* ${DTB_SUFFIX}.dtb"
+IMAGE_BOOT_FILES:sota = "renesas-ota-bootfiles/* ${DTB_SUFFIX}.dtb"
OSTREE_BOOTLOADER ?= "u-boot"
-WKS_FILE = "singlepart-noloader.wks"
+WKS_FILE:rcar-gen3 = "singlepart-noloader.wks"
RENESAS_DATADIR = "/usr"
+
+IMAGE_INSTALL:append:rcar-gen3 = " \
+ kernel-devicetree \
+"
+
+#
+# Workaround to avoid pseudo aborts triggered by the kernel module
+# recipes writing to KERNELSRC in do_install, errors are of the form
+# (from pseudo.log):
+#
+# path mismatch [27 links]: ino 19366408 db 'NAMELESS FILE' req 'build/tmp/work-shared/h3ulcb/kernel-source/include'.
+#
+# See the commit messages in poky commits 4e7c211 and 3b7f2c6 and the
+# wiki page at:
+#
+# https://wiki.yoctoproject.org/wiki/Pseudo_Abort
+#
+# for details on the pseudo change. These can potentially be moved
+# to the recipes in the BSP, or removed if the recipes are changed to
+# shift the module headers and symbols to their dev packages.
+#
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-avb-mch = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-avb-mse = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-avb-streaming = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-scu-src = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-ssp = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-tddmac = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-tsif = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-mmngr = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-mmngrbuf = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-qos = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-vsp2driver = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-vspmif = ",${KERNELSRC}"
+PSEUDO_IGNORE_PATHS:append:pn-kernel-module-vspm = ",${KERNELSRC}"
+
+# Mask out base-files and systemd bbappends to avoid changing systemd-tmpfiles
+# behavior, see SPEC-4256 for a more involved explanation.
+BBMASK += "meta-renesas/meta-rcar-gen3/recipes-core/base-files/ meta-renesas/meta-rcar-gen3/recipes-core/systemd/"
+
+# Mask out cogl bbappend to avoid meta-gnome dependency
+BBMASK += "meta-renesas/meta-rcar-gen3/recipes-graphics/cogl/cogl-1.0_1.%.bbappend"
+
+# Provide default value that avoids errors from a new packaging QA
+# check with respect to packagegroups depending on versioned library
+# packages needing to be machine-specific.
+#
+# Note that this needs to be done here in global configuration space as
+# opposed to in a bbappend because the value needs to be set before the
+# packagegroup bbclass is inherited. This can be removed when upstream
+# is fixed to add the required PACKAGE_ARCH = "${MACHINE_ARCH}".
+PACKAGE_ARCH:pn-packagegroup-multimedia-libs = "${MACHINE_ARCH}"
diff --git a/meta-agl-bsp/conf/include/agl_rcar.inc b/meta-agl-bsp/conf/include/agl_rcar.inc
index dd64ae772..e1169c21e 100644
--- a/meta-agl-bsp/conf/include/agl_rcar.inc
+++ b/meta-agl-bsp/conf/include/agl_rcar.inc
@@ -1,33 +1,37 @@
require conf/include/agl_rcar-nogfx.inc
# Enable AGL virtualization features
-MACHINE_FEATURES_append = " agl-egvirt"
+MACHINE_FEATURES:append:rcar-gen3 = " agl-egvirt"
# Enable Gfx Pkgs
-MACHINE_FEATURES_append = " gsx"
-MULTI_PROVIDER_WHITELIST += "virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
+MACHINE_FEATURES:append:rcar-gen3 = " gsx"
+BB_MULTI_PROVIDER_ALLOWED:append:rcar-gen3 = " virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
# for Wayland/Weston
-PREFERRED_PROVIDER_virtual/libgles1 = ""
-PREFERRED_PROVIDER_virtual/libgles2 = "virtual-gles-user-module"
-PREFERRED_PROVIDER_virtual/egl = "virtual-gles-user-module"
-PREFERRED_PROVIDER_virtual/libgl = ""
-PREFERRED_PROVIDER_virtual/mesa = "mesa"
-PREFERRED_PROVIDER_libgbm = "libgbm"
-PREFERRED_RPROVIDER_libgbm-dev = "libgbm"
+PREFERRED_PROVIDER_virtual/libgles1:rcar-gen3 = ""
+PREFERRED_PROVIDER_virtual/libgles2:rcar-gen3 = "virtual-gles-user-module"
+PREFERRED_PROVIDER_virtual/egl:rcar-gen3 = "virtual-gles-user-module"
+PREFERRED_PROVIDER_virtual/libgl:rcar-gen3 = ""
+PREFERRED_PROVIDER_virtual/mesa:rcar-gen3 = "mesa"
-PREFERRED_RPROVIDER_libomxil = "omx-user-module"
-PREFERRED_PROVIDER_virtual/libomxil = "omx-user-module"
+PREFERRED_PROVIDER_libgbm:rcar-gen3 = "libgbm"
+PREFERRED_PROVIDER_virtual/libgbm:rcar-gen3 = "libgbm"
+PREFERRED_RPROVIDER_libgbm-dev:rcar-gen3 = "libgbm"
+
+
+PREFERRED_RPROVIDER_libomxil:rcar-gen3 = "omx-user-module"
+PREFERRED_PROVIDER_virtual/libomxil:rcar-gen3 = "omx-user-module"
+VIRTUAL-RUNTIME_libomxil:rcar-gen3 = "omx-user-module"
# Add for gstreamer plugins ugly
-LICENSE_FLAGS_WHITELIST = "commercial"
+LICENSE_FLAGS_ACCEPTED:rcar-gen3 = "commercial"
-MACHINE_FEATURES_append = " multimedia"
+MACHINE_FEATURES:append:rcar-gen3 = " multimedia"
-DISTRO_FEATURES_append = " use_eva_pkg"
+DISTRO_FEATURES:append:rcar-gen3 = " use_eva_pkg"
-#DISTRO_FEATURES_append = " h265dec_lib mpeg2dec_lib"
-DISTRO_FEATURES_append = " h264dec_lib h264enc_lib aaclcdec_lib aaclcdec_mdw"
+#DISTRO_FEATURES:append:rcar-gen3 = " h265dec_lib mpeg2dec_lib"
+DISTRO_FEATURES:append:rcar-gen3 = " h264dec_lib h264enc_lib aaclcdec_lib aaclcdec_mdw"
# Mask out meta-renesas-rcar-gen3's tweaks to weston-init, as they do
# not seem necessary for anything in AGL, and the addition of
@@ -38,10 +42,11 @@ DISTRO_FEATURES_append = " h264dec_lib h264enc_lib aaclcdec_lib aaclcdec_mdw"
# getting weston started. There is no clear rationale expressed in the
# meta-renesas-rcar-gen3 commit history for the extra dependencies, and
# testing shows no issues on H3ULCB when not having them.
-BBMASK += "meta-rcar-gen3/recipes-graphics/wayland/weston-init.bbappend"
+BBMASK += "meta-renesas/meta-rcar-gen3/recipes-graphics/wayland/weston-init.bbappend"
-IMAGE_INSTALL_append_rcar-gen3 = " \
- kernel-devicetree \
+# Add graphics and decoder drivers to packagegroup-machine-base
+# recommendation.
+MACHINE_EXTRA_RRECOMMENDS:append:rcar-gen3 = " \
kernel-module-pvrsrvkm \
kernel-module-vsp2 \
kernel-module-vspm \
diff --git a/meta-agl-bsp/conf/include/agl_refhw-h3.inc b/meta-agl-bsp/conf/include/agl_refhw-h3.inc
new file mode 100644
index 000000000..6eee8149f
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_refhw-h3.inc
@@ -0,0 +1,16 @@
+AGL_FEATURES:append:h3ulcb = " agl-refhw-h3"
+
+# Reference hardware has USB3
+MACHINE_FEATURES:append:h3ulcb = " usb3"
+
+KERNEL_DEVICETREE:append:h3ulcb = " renesas/r8a77951-agl-refhw.dtb"
+
+UBOOT_CONFIG:append:h3ulcb = " agl-refhw"
+UBOOT_CONFIG[agl-refhw] = "rcar3_salvator-x_defconfig"
+
+MACHINE_EXTRA_RRECOMMENDS:append:h3ulcb = " \
+ linux-firmware-wl18xx \
+ ti-bt-firmware \
+ wlconf \
+ wireless-regdb-static \
+"
diff --git a/meta-agl-bsp/conf/include/agl_s4sk.inc b/meta-agl-bsp/conf/include/agl_s4sk.inc
new file mode 100644
index 000000000..8f4a91b44
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_s4sk.inc
@@ -0,0 +1,9 @@
+SOC_FAMILY = "r8a779f0"
+BOARD_NAME = "s4sk"
+
+#ws2.0
+DTB_SUFFIX = "r8a779f0-s4sk"
+WKS_FILE = "singlepart-noloader.wks"
+IMAGE_INSTALL:append = " \
+ kernel-devicetree \
+"
diff --git a/meta-agl-bsp/conf/include/agl_salvator-nogfx.inc b/meta-agl-bsp/conf/include/agl_salvator-nogfx.inc
new file mode 100644
index 000000000..06e635ca0
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_salvator-nogfx.inc
@@ -0,0 +1,17 @@
+require conf/include/agl_rcar-nogfx.inc
+
+# Mask graphic Pkgs
+BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
+# Mask MMP recipes
+BBMASK += "kernel-module-uvcs-drv|omx-user-module"
+# Work around use of obsolete Weston backend-fbdev in meta-rcar-gen3
+# when building without the proprietary driver stack. Masking out the
+# weston_%.bbappend seems the simplest approach for now, as forcing
+# USE_GLES = "1" to disable the adding of -Dbackend-default="fbdev" to
+# EXTRA_OEMESON triggers adding "libgbm" to DEPENDS, which breaks due
+# to that being a component specific to the proprietary stack we are
+# explicitly disabling. If the "libgbm" usage in the bbappend was
+# instead "virtual/libgbm" as is now used in poky, it might be possible
+# to just tweak PREFERRED_PROVIDER_virtual/libgbm = "mesa".
+BBMASK += "meta-rcar-gen3/recipes-graphics/wayland/weston_%.bbappend"
+
diff --git a/meta-agl-bsp/conf/include/agl_salvator.inc b/meta-agl-bsp/conf/include/agl_salvator.inc
new file mode 100644
index 000000000..78457868a
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_salvator.inc
@@ -0,0 +1,6 @@
+require conf/include/agl_rcar.inc
+
+IMAGE_INSTALL:append:rcar-gen3 = " \
+ kernel-module-vspm-if \
+"
+
diff --git a/meta-agl-bsp/conf/include/agl_unmatched.inc b/meta-agl-bsp/conf/include/agl_unmatched.inc
new file mode 100644
index 000000000..f7c9f75f2
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_unmatched.inc
@@ -0,0 +1,4 @@
+# firmware for graphics
+MACHINE_EXTRA_RRECOMMENDS:append = " linux-firmware-radeon linux-firmware-amdgpu "
+
+#
diff --git a/meta-agl-bsp/conf/include/agl_virtio-aarch64.inc b/meta-agl-bsp/conf/include/agl_virtio-aarch64.inc
new file mode 100644
index 000000000..5093d0bd5
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_virtio-aarch64.inc
@@ -0,0 +1,14 @@
+# Build updatable image. Only takes effect when sota.bbclass is inherited
+DISTRO_FEATURES:append = " sota"
+
+# Root device
+ROOT_VM = "root=PARTUUID=${DISK_SIGNATURE}-02"
+
+# Use our own wks file
+WKS_FILE = "directdisk.wks.in"
+
+# Simplest possible option
+AGL_DEFAULT_IMAGE_FSTYPES = "ext4"
+
+# Need to run QEMU with virtio-gpu device
+PACKAGECONFIG:append:pn-qemu-system-native = " virglrenderer glx gtk+"
diff --git a/meta-agl-bsp/conf/layer.conf b/meta-agl-bsp/conf/layer.conf
index 2a999ddd5..cd98a9dfc 100644
--- a/meta-agl-bsp/conf/layer.conf
+++ b/meta-agl-bsp/conf/layer.conf
@@ -23,4 +23,4 @@ BBFILE_COLLECTIONS += "aglbsp"
BBFILE_PATTERN_aglbsp = "^${LAYERDIR}/"
BBFILE_PRIORITY_aglbsp = "60"
-LAYERSERIES_COMPAT_aglbsp = "dunfell"
+LAYERSERIES_COMPAT_aglbsp = "kirkstone"
diff --git a/meta-agl-bsp/conf/machine/include/virtio.inc b/meta-agl-bsp/conf/machine/include/virtio.inc
new file mode 100644
index 000000000..6f8a638a0
--- /dev/null
+++ b/meta-agl-bsp/conf/machine/include/virtio.inc
@@ -0,0 +1,23 @@
+PREFERRED_PROVIDER_virtual/egl ?= "mesa"
+PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
+PREFERRED_PROVIDER_virtual/libgles1 ?= "mesa"
+PREFERRED_PROVIDER_virtual/libgles2 ?= "mesa"
+
+MACHINE_FEATURES = "alsa usbgadget screen vfat"
+
+MACHINEOVERRIDES =. "virtio-all:"
+
+IMAGE_FSTYPES += "tar.bz2 ext4"
+
+# Don't include kernels in standard images
+RDEPENDS:${KERNEL_PACKAGE_NAME}-base = ""
+
+# Use a common kernel recipe for all VirtIO machines
+PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
+
+# Use newer kernel
+PREFERRED_VERSION_linux-yocto = "5.15.%"
+
+EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native"
+
+IMAGE_CLASSES += "qemuboot"
diff --git a/meta-agl-bsp/conf/machine/virtio-aarch64.conf b/meta-agl-bsp/conf/machine/virtio-aarch64.conf
new file mode 100644
index 000000000..d92d43943
--- /dev/null
+++ b/meta-agl-bsp/conf/machine/virtio-aarch64.conf
@@ -0,0 +1,36 @@
+#@TYPE: Machine
+#@NAME: VirtIO ARMv8 machine
+#@DESCRIPTION: Machine configuration for running an ARMv8 system on VirtIO based platform
+
+require conf/machine/include/arm/arch-armv8a.inc
+require conf/machine/include/virtio.inc
+
+KERNEL_IMAGETYPE = "Image"
+
+SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
+SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
+
+# For runqemu
+QB_SYSTEM_NAME = "qemu-system-aarch64"
+QB_MACHINE = "-machine virt"
+QB_CPU = "-cpu cortex-a57"
+QB_CPU_KVM = "-cpu host -machine gic-version=3"
+QB_MEM = "-m 2048"
+# Standard Serial console
+QB_KERNEL_CMDLINE_APPEND = "console=ttyAMA0"
+# Ensure virtio-mmio support VirtIO 1.0 required by virtio-gpu
+QB_OPT_APPEND = "-global virtio-mmio.force-legacy=false"
+# TODO: upstream to OE-core runqemu
+QB_OPT_APPEND += "-device virtio-gpu-device -display gtk,gl=on -show-cursor"
+# Virtio input
+QB_OPT_APPEND += "-device virtio-mouse-device -device virtio-keyboard-device"
+# Add the 'virtio-rng-device' device otherwise the guest may run out of entropy
+QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-device,rng=rng0"
+# Virtio Networking support
+QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
+QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
+# Virtio block device
+QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
+# Virtio serial console
+QB_SERIAL_OPT = "-device virtio-serial-device -chardev null,id=virtcon -device virtconsole,chardev=virtcon"
+QB_TCPSERIAL_OPT = "-device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
diff --git a/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/gpsd.refhw b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/gpsd.refhw
new file mode 100644
index 000000000..d22970681
--- /dev/null
+++ b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/gpsd.refhw
@@ -0,0 +1,5 @@
+# Default settings for gpsd.
+START_DAEMON="true"
+GPSD_OPTIONS=""
+DEVICES="/dev/ttySC3"
+GPSD_SOCKET="/var/run/gpsd.sock"
diff --git a/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw-gpsd-helper.sh b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw-gpsd-helper.sh
new file mode 100644
index 000000000..d183ba43c
--- /dev/null
+++ b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw-gpsd-helper.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# Script to detect AGL Reference Hardware and switch gpsd
+# configuration as necessary.
+#
+# NOTE:
+# For the most part errors are ignored and the script returns
+# 0/success so gpsd still be started if the script is somehow
+# run on a board without the expected hardware.
+
+COMPAT=/sys/firmware/devicetree/base/compatible
+GPSTTY=/dev/ttySC3
+
+#if [ ! \( -f "$COMPAT" -a -c "$GPSTTY" -a -f /etc/default/gpsd.refhw \) ]; then
+if [ ! \( -f "$COMPAT" -a -f /etc/default/gpsd.refhw \) ]; then
+ exit 0
+fi
+
+found=false
+for c in `cat $COMPAT | tr '\0' ' '`; do
+ if echo $c | grep -q '^agl,refhw-h3$'; then
+ found=true
+ break
+ fi
+done
+
+if $found; then
+ if [ ! -c "$GPSTTY" ]; then
+ exit 0
+ fi
+ update-alternatives --install /etc/default/gpsd gpsd-defaults /etc/default/gpsd.refhw 20
+else
+ update-alternatives --install /etc/default/gpsd gpsd-defaults /etc/default/gpsd.refhw 5
+fi
+exit 0
diff --git a/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw-gpsd-helper.sh.bak b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw-gpsd-helper.sh.bak
new file mode 100644
index 000000000..2c9089aa0
--- /dev/null
+++ b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw-gpsd-helper.sh.bak
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# Script to detect AGL Reference Hardware and switch gpdf configuration
+# as needed.
+#
+# NOTE:
+# For the most part errors are ignored and the script returns
+# 0/success so gpsd still be started if the script is somehow
+# run on a board without the expected hardware.
+
+COMPAT=/sys/firmware/devicetree/base/compatible
+GPSTTY=/dev/ttySC3
+
+if [ ! \( -f "$COMPAT" -a -c "$GPSTTY" -a -f /etc/default/gpsd.refhw \) ]; then
+ exit 0
+fi
+
+found=false
+for c in `cat $COMPAT | tr '\0' ' '`; do
+ echo "c = $c"
+ if echo $c | grep -q '^agl,refhw-h3$'; then
+ found=true
+ break
+ fi
+done
+
+if $found; then
+ update-alternatives --install /etc/default/gpsd gpsd-defaults /etc/default/gpsd.refhw 20
+else
+ update-alternatives --remove gpsd-defaults /etc/default/gpsd.refhw
+fi
+exit 0
diff --git a/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw.conf b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw.conf
new file mode 100644
index 000000000..b7e3a7b0d
--- /dev/null
+++ b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/files/refhw.conf
@@ -0,0 +1,2 @@
+[Service]
+ExecStartPre=-/usr/sbin/refhw-gpsd-helper.sh
diff --git a/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend
new file mode 100644
index 000000000..3cd5aa7de
--- /dev/null
+++ b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend
@@ -0,0 +1,33 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+SRC_URI = "file://gpsd.refhw \
+ file://refhw-gpsd-helper.sh \
+ file://refhw.conf \
+"
+
+inherit update-alternatives
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+ install -D -m 0644 ${WORKDIR}/gpsd.refhw ${D}/${sysconfdir}/default/gpsd.refhw
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -D -m 0755 ${WORKDIR}/refhw-gpsd-helper.sh ${D}/${sbindir}/refhw-gpsd-helper.sh
+ install -d ${D}${sysconfdir}/systemd/system/gpsd.service.d
+ install -D -m 0644 ${WORKDIR}/refhw.conf ${D}${sysconfdir}/systemd/system/gpsd.service.d/refhw.conf
+ fi
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+CONFFILES:${PN} = "${sysconfdir}/default/gpsd.refhw"
+
+ALTERNATIVE:${PN} = "gpsd-defaults"
+ALTERNATIVE_LINK_NAME[gpsd-defaults] = "${sysconfdir}/default/gpsd"
+ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.refhw"
+# NOTE: Priority needs to be below default of 10 to avoid overriding the
+# default configuration. The script run by the systemd drop-in
+# will tweak things on boot to handle h3ulcb vs refhw.
+ALTERNATIVE_PRIORITY[gpsd-defaults] = "5"
diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/mesa/mesa_%.bbappend
deleted file mode 100644
index 8ac343aa3..000000000
--- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/mesa/mesa_%.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-# The gallium-llvm is recommended as software 3D graphics renderer
-GALLIUM_LLVM = "gallium-llvm"
-PACKAGECONFIG_append_qemux86 = " gallium ${GALLIUM_LLVM}"
-PACKAGECONFIG_append_qemux86-64 = " gallium ${GALLIUM_LLVM}"
-PACKAGECONFIG_append_intel-corei7-64 = " gallium ${GALLIUM_LLVM}"
-
-DRIDRIVERS_append_intel-corei7-64 = ",i965"
diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/libva_%.bbappend b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/libva_%.bbappend
deleted file mode 100644
index eda8de38a..000000000
--- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/libva_%.bbappend
+++ /dev/null
@@ -1,4 +0,0 @@
-# This patch correct a bug in libva1_1.7.0.bb 1.8 inmeta-intel (no clue when it will be fixed)
-# libva.bb calls for an x11 runtime dependency even if wayland is selected
-#
-RDEPENDS_${PN}-egl_remove = "${@bb.utils.contains("DISTRO_FEATURES", "x11", "", "${PN}-x11", d)}"
diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf.bbappend
deleted file mode 100644
index 4a2dc80af..000000000
--- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-# For virtual machines and intel-corei7-64 we want to support both the HDMI-A-1
-# and Virtual-1 outputs. This allows us to run virtual images on real hardware
-# and vice versa.
-SRC_URI_append_qemuall = " file://virtual.cfg"
-SRC_URI_append_intel-corei7-64 = " file://virtual.cfg"
diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf/virtual.cfg b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf/virtual.cfg
deleted file mode 100644
index 25a8fae94..000000000
--- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston-ini-conf/virtual.cfg
+++ /dev/null
@@ -1,18 +0,0 @@
-[output]
-name=Virtual-1
-transform=270
-mode=1920x1080
-#mode=1600x1200
-#mode=1680x1050
-#mode=1400x1050
-#mode=1600x900
-#mode=1280x1024
-#mode=1440x900
-#mode=1280x960
-#mode=1360x768
-#mode=1280x800
-#mode=1280x768
-#mode=1280x720
-#mode=800x600
-#mode=848x480
-#mode=640x480
diff --git a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston_%.bbappend b/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston_%.bbappend
deleted file mode 100644
index 9aaea5f69..000000000
--- a/meta-agl-bsp/meta-aglprofilegraphical/recipes-graphics/wayland/weston_%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-RDEPENDS_${PN}_append_qemux86 = " mesa-megadriver"
-RDEPENDS_${PN}_append_qemux86-64 = " mesa-megadriver"
-RDEPENDS_${PN}_append_intel-corei7-64 = " mesa-megadriver"
diff --git a/meta-agl-bsp/meta-core/recipes-core/ovmf/ovmf_git.bbappend b/meta-agl-bsp/meta-core/recipes-core/ovmf/ovmf_git.bbappend
deleted file mode 100644
index 285847295..000000000
--- a/meta-agl-bsp/meta-core/recipes-core/ovmf/ovmf_git.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-PARALLEL_MAKE = ""
diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch
new file mode 100644
index 000000000..9d6b2f3d0
--- /dev/null
+++ b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch
@@ -0,0 +1,48 @@
+From f50ff0b5cf2bfedfc2fd660ccfbfd5cfc3c131d1 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Tue, 28 Mar 2023 15:33:26 +0300
+Subject: [PATCH] virgl: don't a use staging when a resources created with the
+ shared flag
+
+There seems to be a problem with running firefox by using Xwayland that
+results in a shared resources being not always tagged as using staging.
+
+As a result one process tries to map the resource that was allocated as
+one that uses staging without actually using the staging resource, and
+hence the mapped range only accounts for the small region that we have
+to allocated because a zero-allocation doesn't work, but the application
+mapping the resource assumes that a properly sized range is mapped, and
+consequently this results in invalid memory access.
+
+To work around this issue disable creating staging for resources that
+are created by using shared binding. It is not clear to me whether this
+is the best fix, but it seems to quell the issue.
+
+Fixes: c9d99b7eec7ec14d6d71d381a424b6280d75a882
+virgl: Fix texture transfers by using a staging resource
+
+Related: https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/291
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19655>
+(cherry picked from commit e496d24cb2d5339566c08c79a8aa7809c240613c)
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+(cherry picked from commit 39e9ea1419beb22ab7f4913b6d55f845f94d689a)
+---
+ src/gallium/drivers/virgl/virgl_resource.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c
+index 7185c9a90ff..257b790d437 100644
+--- a/src/gallium/drivers/virgl/virgl_resource.c
++++ b/src/gallium/drivers/virgl/virgl_resource.c
+@@ -100,6 +100,7 @@ static bool virgl_can_copy_transfer_from_host(struct virgl_screen *vs,
+ {
+ return virgl_can_use_staging(vs, res) &&
+ !is_stencil_array(res) &&
++ !(bind & VIRGL_BIND_SHARED) &&
+ virgl_has_readback_format(&vs->base, pipe_to_virgl_format(res->b.format), false) &&
+ ((!(vs->caps.caps.v2.capability_bits & VIRGL_CAP_FAKE_FP64)) ||
+ virgl_can_readback_from_rendertarget(vs, res) ||
+--
+2.35.1
+
diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend
new file mode 100644
index 000000000..fb797a436
--- /dev/null
+++ b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)}
diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc
new file mode 100644
index 000000000..c0f5b271d
--- /dev/null
+++ b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc
@@ -0,0 +1,9 @@
+SRC_URI += "file://0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch"
+
+# The gallium-llvm is recommended as software 3D graphics renderer
+GALLIUM_LLVM = "gallium-llvm"
+PACKAGECONFIG:append:qemux86 = " gallium ${GALLIUM_LLVM}"
+PACKAGECONFIG:append:qemux86-64 = " gallium ${GALLIUM_LLVM}"
+PACKAGECONFIG:append:intel-corei7-64 = " gallium ${GALLIUM_LLVM}"
+
+DRIDRIVERS:append:intel-corei7-64 = ",i965"
diff --git a/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_%.bbappend b/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_%.bbappend
new file mode 100644
index 000000000..3d5903d85
--- /dev/null
+++ b/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)}
diff --git a/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_agl.inc b/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_agl.inc
new file mode 100644
index 000000000..e3b36034f
--- /dev/null
+++ b/meta-agl-bsp/meta-core/recipes-graphics/wayland/weston_agl.inc
@@ -0,0 +1,3 @@
+RDEPENDS:${PN}:append:qemux86 = " mesa-megadriver"
+RDEPENDS:${PN}:append:qemux86-64 = " mesa-megadriver"
+RDEPENDS:${PN}:append:intel-corei7-64 = " mesa-megadriver"
diff --git a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/hciattach.cfg b/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/hciattach.cfg
deleted file mode 100755
index c9c4fe2ed..000000000
--- a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/hciattach.cfg
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_INTEL=m
-CONFIG_BT_BCM=m
-CONFIG_BT_RTL=m
-CONFIG_BT_HCIBTUSB=m
-CONFIG_BT_HCIBTUSB_BCM=y
-CONFIG_BT_HCIBTUSB_RTL=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-
-#
-# USB port drivers
-#
-CONFIG_USB_SERIAL_CP210X=y
diff --git a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/most_deps.cfg b/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/most_deps.cfg
deleted file mode 100644
index 15ddbd21e..000000000
--- a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/most_deps.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG_I2C=y
-CONFIG_USB=y
-CONFIG_MEDIA_SUPPORT=m
-CONFIG_MEDIA_CAMERA_SUPPORT=y
-CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
-CONFIG_MEDIA_CONTROLLER=y
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L2_SUBDEV_API=y
-CONFIG_VIDEO_V4L2=m
diff --git a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_%.bbappend
deleted file mode 100644
index e97b8f9d1..000000000
--- a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto_%.bbappend
+++ /dev/null
@@ -1,17 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/linux-yocto:"
-
-# Extra configuration options for the QEMU kernel
-SRC_URI += "file://hciattach.cfg \
- file://virtio.cfg \
- "
-
-# Enable some things on qemuarm64 so MOST drivers will build and load.
-SRC_URI_append_qemuarm64 = " file://most_deps.cfg"
-
-# Configuration for using the virt machine (and not versatilepb)
-SRC_URI_append_qemuarm = " file://qemuarm.cfg"
-
-# Build a generic v7 kernel instead of the arm926j one that upstream
-# qemuarm defaults to.
-KBUILD_DEFCONFIG_qemuarm = "multi_v7_defconfig"
-KCONFIG_MODE = "--alldefconfig"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service
new file mode 100644
index 000000000..f8eda0cba
--- /dev/null
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Bluetooth HCI UART support
+Requires=dev-ttymxc2.device
+After=dev-ttymxc2.device
+Before=bluetooth.service
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/hci-uart-helper.sh
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh
new file mode 100644
index 000000000..e1aa31c06
--- /dev/null
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+#
+# Script to attach HCI UART devices on i.MX8MQ EVK/EVKB
+#
+# NOTE:
+# For the most part errors are ignored and the script returns
+# 0/success so BlueZ will still be started if the script is somehow
+# run on a board without the expected hardware. However, if the
+# various probing succeeds and hciattach is run, the script returns
+# the resulting exit code if hciattach fails.
+
+COMPAT=/sys/firmware/devicetree/base/compatible
+HCITTY=/dev/ttymxc2
+PCIDEV=/sys/bus/pci/devices/0000:01:00.0
+
+if [ ! \( -f "$COMPAT" -a -c "$HCITTY" \) ]; then
+ exit 0
+fi
+
+found=false
+for c in `cat $COMPAT | tr '\0' ' '`; do
+ echo "c = $c"
+ if echo $c | grep -q '^fsl,imx8mq-evk$'; then
+ found=true
+ break
+ fi
+done
+if ! $found; then
+ echo "i.MX8MQ EVK not found!"
+ exit 0
+fi
+
+if [ -f "$PCIDEV/vendor" -a -f "$PCIDEV/device" ]; then
+ vendor=`cat $PCIDEV/vendor`
+ device=`cat $PCIDEV/device`
+fi
+
+rc=0
+if [ "$vendor" = "0x14e4" -a "$device" = "0x43ec" ]; then
+ # Broadcom 5436 on EVKB
+ hciattach $HCITTY bcm43xx
+ rc=$?
+elif [ "$vendor" = "0x168c" -a "$device" = "0x003e" ]; then
+ # Qualcomm (nee Atheros) 6174 on EVK
+ hciattach $HCITTY qualcomm
+ rc=$?
+fi
+exit $rc
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb
new file mode 100644
index 000000000..798fcebe6
--- /dev/null
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Helper for enabling UART connected HCI Bluetooth devices"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit systemd allarch
+
+SRC_URI = "file://hci-uart-helper.service \
+ file://hci-uart-helper.sh \
+"
+
+COMPATIBLE_MACHINE = "imx8mq-evk"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+ # Install helper script
+ install -d ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/hci-uart-helper.sh ${D}${sbindir}/
+
+ # Install systemd unit
+ install -d ${D}${systemd_system_unitdir}/
+ install -m 0644 ${WORKDIR}/hci-uart-helper.service ${D}${systemd_system_unitdir}/
+ install -d ${D}${systemd_system_unitdir}/bluetooth.service.wants
+ ln -s ../hci-uart-helper.service ${D}${systemd_system_unitdir}/bluetooth.service.wants/
+}
+
+FILES:${PN} += "${systemd_system_unitdir}"
+
+RDEPENDS:${PN} += "bluez5"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/files/0001-kmsro-add-imx-dcss.patch b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/files/0001-kmsro-add-imx-dcss.patch
deleted file mode 100644
index 7f7ab9124..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/files/0001-kmsro-add-imx-dcss.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Add i.MX8MQ DCSS kmsro support
-
-Add required dummy entry for NXP's i.MX8MQ DCSS display controller DRM
-driver to the kmsro configuration so that the loader will not think it
-is a GPU.
-
-Upstream-Status: pending
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
-
-diff --git a/src/gallium/targets/dri/meson.build b/src/gallium/targets/dri/meson.build
-index ae25a21..17379c7 100644
---- a/src/gallium/targets/dri/meson.build
-+++ b/src/gallium/targets/dri/meson.build
-@@ -72,6 +72,7 @@ foreach d : [[with_gallium_kmsro, [
- 'hx8357d_dri.so',
- 'ili9225_dri.so',
- 'ili9341_dri.so',
-+ 'imx-dcss_dri.so',
- 'imx-drm_dri.so',
- 'ingenic-drm_dri.so',
- 'mcde_dri.so',
-diff --git a/src/gallium/targets/dri/target.c b/src/gallium/targets/dri/target.c
-index f71f690..41c5c75 100644
---- a/src/gallium/targets/dri/target.c
-+++ b/src/gallium/targets/dri/target.c
-@@ -97,6 +97,7 @@ DEFINE_LOADER_DRM_ENTRYPOINT(exynos)
- DEFINE_LOADER_DRM_ENTRYPOINT(hx8357d)
- DEFINE_LOADER_DRM_ENTRYPOINT(ili9225)
- DEFINE_LOADER_DRM_ENTRYPOINT(ili9341)
-+DEFINE_LOADER_DRM_ENTRYPOINT(imx_dcss)
- DEFINE_LOADER_DRM_ENTRYPOINT(imx_drm)
- DEFINE_LOADER_DRM_ENTRYPOINT(ingenic_drm)
- DEFINE_LOADER_DRM_ENTRYPOINT(mcde)
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/mesa_%.bbappend
deleted file mode 100644
index 636b75c53..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/mesa_%.bbappend
+++ /dev/null
@@ -1,10 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI += "file://0001-kmsro-add-imx-dcss.patch"
-
-# These over-rides should use "use-mainline-bsp" instead when that
-# becomes more workable for i.MX8 in upstream meta-freescale.
-
-USE_OSMESA_ONLY_etnaviv = "no"
-
-PACKAGECONFIG_append_etnaviv = " gallium etnaviv kmsro"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston-ini-conf/fbdev.cfg b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston-ini-conf/fbdev.cfg
deleted file mode 100644
index b1a1f3cc9..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston-ini-conf/fbdev.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[output]
-name=fbdev
-transform=270
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_10.0.1.imx.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_10.0.1.imx.bbappend
new file mode 100644
index 000000000..07a43f958
--- /dev/null
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_10.0.1.imx.bbappend
@@ -0,0 +1,10 @@
+# Work around PACKAGECONFIG:remove of "x11 wayland" added to the recipe
+# in meta-freescale commit 5a5c5dd. This can be removed once the issue
+# has been resolved by a revert of that breakage upstream.
+# What is done below is effectively a disabling of the "wayland"
+# PACKAGECONFIG option and then open coding what its effects would
+# normally be, since the :remove prevents specifying it in the usual way.
+PACKAGECONFIG[wayland] = ""
+DEPENDS:append = " virtual/egl virtual/libgles2"
+PACKAGECONFIG_CONFARGS:append = " -Dbackend-wayland=true"
+
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/0004-Smack-Assign-smack_known_web-label-for-kernel-thread.patch b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/0004-Smack-Assign-smack_known_web-label-for-kernel-thread.patch
deleted file mode 100644
index 1b17bc73f..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/0004-Smack-Assign-smack_known_web-label-for-kernel-thread.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From c8bbb0f916de54610513e376070aea531af19dd6 Mon Sep 17 00:00:00 2001
-From: jooseong lee <jooseong.lee@samsung.com>
-Date: Thu, 3 Nov 2016 10:55:43 +0100
-Subject: [PATCH 4/4] Smack: Assign smack_known_web label for kernel thread's
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Assign smack_known_web label for kernel thread's socket in the sk_alloc_security hook
-
-Creating struct sock by sk_alloc function in various kernel subsystems
-like bluetooth dosen't call smack_socket_post_create(). In such case,
-received sock label is the floor('_') label and makes access deny.
-
-Refers-to: https://review.tizen.org/gerrit/#/c/80717/4
-
-Change-Id: I2e5c9359bfede84a988fd4d4d74cdb9dfdfc52d8
-Signed-off-by: jooseong lee <jooseong.lee@samsung.com>
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- security/smack/smack_lsm.c | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index e45f0a3..a3f3ccc 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -2107,8 +2107,16 @@ static int smack_sk_alloc_security(struct sock *sk, int family, gfp_t gfp_flags)
- if (ssp == NULL)
- return -ENOMEM;
-
-- ssp->smk_in = skp;
-- ssp->smk_out = skp;
-+ /*
-+ * Sockets created by kernel threads receive web label.
-+ */
-+ if (unlikely(current->flags & PF_KTHREAD)) {
-+ ssp->smk_in = &smack_known_web;
-+ ssp->smk_out = &smack_known_web;
-+ } else {
-+ ssp->smk_in = skp;
-+ ssp->smk_out = skp;
-+ }
- ssp->smk_packet = NULL;
-
- sk->sk_security = ssp;
---
-2.7.4
-
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/fixups.cfg b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/fixups.cfg
index d6b3a30fd..29a25b798 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/fixups.cfg
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/fixups.cfg
@@ -6,3 +6,4 @@
# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_FW_LOADER_USER_HELPER is not set
+# CONFIG_BTRFS_FS is not set
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch
index 23ca0475a..f95891a2f 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch
@@ -8,16 +8,15 @@ Upstream-Status: pending
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
---
-diff --git a/drivers/gpu/drm/imx/Kconfig b/drivers/gpu/drm/imx/Kconfig
-index 63d5f1b532ee..a18ba56aa218 100644
---- a/drivers/gpu/drm/imx/Kconfig
-+++ b/drivers/gpu/drm/imx/Kconfig
-@@ -85,7 +85,7 @@ config DRM_IMX_CDNS_MHDP
- select DRM_CDNS_DP
+diff --git a/drivers/gpu/drm/imx/mhdp/Kconfig b/drivers/gpu/drm/imx/mhdp/Kconfig
+index 225ccc3638a8..164b42f04e94 100644
+--- a/drivers/gpu/drm/imx/mhdp/Kconfig
++++ b/drivers/gpu/drm/imx/mhdp/Kconfig
+@@ -7,6 +7,6 @@ config DRM_IMX_CDNS_MHDP
select DRM_CDNS_HDMI
select DRM_CDNS_AUDIO
+ select DRM_CDNS_HDMI_HDCP
- depends on DRM_IMX
+ depends on DRM_IMX || DRM_ETNAVIV
help
Choose this if you want to use HDMI on i.MX8.
-
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch
index 4ce9b9d38..4ed4b685e 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch
@@ -4,15 +4,14 @@ Some further investigation is required into how to manage this upstream
in meta-freescale, as it is not required for the i.MX6 platforms AFAIK.
Upstream-Status: pending
-
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
---
diff --git a/arch/arm64/boot/dts/freescale/imx8mq-evk.dts b/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
-index f2a7e4069a0d..c0b6c5052656 100755
+index c3f8a24c3943..754fbfe30f0a 100755
--- a/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
-@@ -1074,7 +1074,7 @@
+@@ -1224,7 +1224,7 @@ &vpu_v4l2 {
status = "okay";
};
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0003-drm-etnaviv-fix-TS-cache-flushing-on-GPUs-with-BLT-e.patch b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0003-drm-etnaviv-fix-TS-cache-flushing-on-GPUs-with-BLT-e.patch
deleted file mode 100644
index d7a1f85b8..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0003-drm-etnaviv-fix-TS-cache-flushing-on-GPUs-with-BLT-e.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From f232d9ec029ce3e2543b05213e2979e01e503408 Mon Sep 17 00:00:00 2001
-From: Lucas Stach <l.stach@pengutronix.de>
-Date: Wed, 26 Feb 2020 16:27:08 +0100
-Subject: [PATCH] drm/etnaviv: fix TS cache flushing on GPUs with BLT engine
-
-As seen in the Vivante kernel driver, most GPUs with the BLT engine have
-a broken TS cache flush. The workaround is to temporarily set the BLT
-command to CLEAR_IMAGE, without actually executing the clear. Apparently
-this state change is enough to trigger the required TS cache flush. As
-the BLT engine is completely asychronous, we also need a few more stall
-states to synchronize the flush with the frontend.
-
-Root-caused-by: Jonathan Marek <jonathan@marek.ca>
-Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
----
- drivers/gpu/drm/etnaviv/etnaviv_buffer.c | 60 ++++++++++++++++++++++--
- drivers/gpu/drm/etnaviv/state_blt.xml.h | 2 +
- 2 files changed, 57 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/gpu/drm/etnaviv/etnaviv_buffer.c b/drivers/gpu/drm/etnaviv/etnaviv_buffer.c
-index 32d9fac587f9..76d38561c910 100644
---- a/drivers/gpu/drm/etnaviv/etnaviv_buffer.c
-+++ b/drivers/gpu/drm/etnaviv/etnaviv_buffer.c
-@@ -12,6 +12,7 @@
-
- #include "common.xml.h"
- #include "state.xml.h"
-+#include "state_blt.xml.h"
- #include "state_hi.xml.h"
- #include "state_3d.xml.h"
- #include "cmdstream.xml.h"
-@@ -233,6 +234,8 @@ void etnaviv_buffer_end(struct etnaviv_gpu *gpu)
- struct etnaviv_cmdbuf *buffer = &gpu->buffer;
- unsigned int waitlink_offset = buffer->user_size - 16;
- u32 link_target, flush = 0;
-+ bool has_blt = !!(gpu->identity.minor_features5 &
-+ chipMinorFeatures5_BLT_ENGINE);
-
- lockdep_assert_held(&gpu->lock);
-
-@@ -248,16 +251,38 @@ void etnaviv_buffer_end(struct etnaviv_gpu *gpu)
- if (flush) {
- unsigned int dwords = 7;
-
-+ if (has_blt)
-+ dwords += 10;
-+
- link_target = etnaviv_buffer_reserve(gpu, buffer, dwords);
-
- CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
- CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
-+ if (has_blt) {
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x1);
-+ CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_BLT);
-+ CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_BLT);
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x0);
-+ }
- CMD_LOAD_STATE(buffer, VIVS_GL_FLUSH_CACHE, flush);
-- if (gpu->exec_state == ETNA_PIPE_3D)
-- CMD_LOAD_STATE(buffer, VIVS_TS_FLUSH_CACHE,
-- VIVS_TS_FLUSH_CACHE_FLUSH);
-+ if (gpu->exec_state == ETNA_PIPE_3D) {
-+ if (has_blt) {
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x1);
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_SET_COMMAND, 0x1);
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x0);
-+ } else {
-+ CMD_LOAD_STATE(buffer, VIVS_TS_FLUSH_CACHE,
-+ VIVS_TS_FLUSH_CACHE_FLUSH);
-+ }
-+ }
- CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
- CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
-+ if (has_blt) {
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x1);
-+ CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_BLT);
-+ CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_BLT);
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x0);
-+ }
- CMD_END(buffer);
-
- etnaviv_buffer_replace_wait(buffer, waitlink_offset,
-@@ -323,6 +348,8 @@ void etnaviv_buffer_queue(struct etnaviv_gpu *gpu, u32 exec_state,
- bool switch_mmu_context = gpu->mmu_context != mmu_context;
- unsigned int new_flush_seq = READ_ONCE(gpu->mmu_context->flush_seq);
- bool need_flush = switch_mmu_context || gpu->flush_seq != new_flush_seq;
-+ bool has_blt = !!(gpu->identity.minor_features5 &
-+ chipMinorFeatures5_BLT_ENGINE);
-
- lockdep_assert_held(&gpu->lock);
-
-@@ -433,6 +460,15 @@ void etnaviv_buffer_queue(struct etnaviv_gpu *gpu, u32 exec_state,
- * 2 semaphore stall + 1 event + 1 wait + 1 link.
- */
- return_dwords = 7;
-+
-+ /*
-+ * When the BLT engine is present we need 6 more dwords in the return
-+ * target: 3 enable/flush/disable + 4 enable/semaphore stall/disable,
-+ * but we don't need the normal TS flush state.
-+ */
-+ if (has_blt)
-+ return_dwords += 6;
-+
- return_target = etnaviv_buffer_reserve(gpu, buffer, return_dwords);
- CMD_LINK(cmdbuf, return_dwords, return_target);
-
-@@ -447,11 +483,25 @@ void etnaviv_buffer_queue(struct etnaviv_gpu *gpu, u32 exec_state,
- CMD_LOAD_STATE(buffer, VIVS_GL_FLUSH_CACHE,
- VIVS_GL_FLUSH_CACHE_DEPTH |
- VIVS_GL_FLUSH_CACHE_COLOR);
-- CMD_LOAD_STATE(buffer, VIVS_TS_FLUSH_CACHE,
-- VIVS_TS_FLUSH_CACHE_FLUSH);
-+ if (has_blt) {
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x1);
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_SET_COMMAND, 0x1);
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x0);
-+ } else {
-+ CMD_LOAD_STATE(buffer, VIVS_TS_FLUSH_CACHE,
-+ VIVS_TS_FLUSH_CACHE_FLUSH);
-+ }
- }
- CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
- CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
-+
-+ if (has_blt) {
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x1);
-+ CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_BLT);
-+ CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_BLT);
-+ CMD_LOAD_STATE(buffer, VIVS_BLT_ENABLE, 0x0);
-+ }
-+
- CMD_LOAD_STATE(buffer, VIVS_GL_EVENT, VIVS_GL_EVENT_EVENT_ID(event) |
- VIVS_GL_EVENT_FROM_PE);
- CMD_WAIT(buffer);
-diff --git a/drivers/gpu/drm/etnaviv/state_blt.xml.h b/drivers/gpu/drm/etnaviv/state_blt.xml.h
-index daae55995def..0e8bcf9dcc93 100644
---- a/drivers/gpu/drm/etnaviv/state_blt.xml.h
-+++ b/drivers/gpu/drm/etnaviv/state_blt.xml.h
-@@ -46,6 +46,8 @@ DEALINGS IN THE SOFTWARE.
-
- /* This is a cut-down version of the state_blt.xml.h file */
-
-+#define VIVS_BLT_SET_COMMAND 0x000140ac
-+
- #define VIVS_BLT_ENABLE 0x000140b8
- #define VIVS_BLT_ENABLE_ENABLE 0x00000001
-
---
-2.20.1
-
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0004-drm-sched-Fix-passing-zero-to-PTR_ERR-warning-v2.patch b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0004-drm-sched-Fix-passing-zero-to-PTR_ERR-warning-v2.patch
deleted file mode 100644
index 8c141a0f5..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0004-drm-sched-Fix-passing-zero-to-PTR_ERR-warning-v2.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From d7c5782acd354bdb5ed0fa10e1e397eaed558390 Mon Sep 17 00:00:00 2001
-From: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
-Date: Tue, 29 Oct 2019 11:03:05 -0400
-Subject: [PATCH] drm/sched: Fix passing zero to 'PTR_ERR' warning v2
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fix a static code checker warning.
-
-v2: Drop PTR_ERR_OR_ZERO.
-
-Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
-Reviewed-by: Emily Deng <Emily.Deng@amd.com>
-Reviewed-by: Christian König <christian.koenig@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
----
- drivers/gpu/drm/scheduler/sched_main.c | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
-index 2af64459b3d7..fbb6446c4f69 100644
---- a/drivers/gpu/drm/scheduler/sched_main.c
-+++ b/drivers/gpu/drm/scheduler/sched_main.c
-@@ -496,8 +496,10 @@ void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched)
- fence = sched->ops->run_job(s_job);
-
- if (IS_ERR_OR_NULL(fence)) {
-+ if (IS_ERR(fence))
-+ dma_fence_set_error(&s_fence->finished, PTR_ERR(fence));
-+
- s_job->s_fence->parent = NULL;
-- dma_fence_set_error(&s_fence->finished, PTR_ERR(fence));
- } else {
- s_job->s_fence->parent = fence;
- }
-@@ -746,8 +748,9 @@ static int drm_sched_main(void *param)
- r);
- dma_fence_put(fence);
- } else {
-+ if (IS_ERR(fence))
-+ dma_fence_set_error(&s_fence->finished, PTR_ERR(fence));
-
-- dma_fence_set_error(&s_fence->finished, PTR_ERR(fence));
- drm_sched_process_job(NULL, &sched_job->cb);
- }
-
---
-2.20.1
-
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend
index 4dc51369a..0772a98a8 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend
@@ -1,38 +1,17 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:${THISDIR}/files:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
-require recipes-kernel/linux/linux-agl.inc
+require linux-fslc.inc
# These patches and the configuration fragment below will need to be
# revisited if/when using IMX_DEFAULT_BSP = "mainline" with i.MX8
# becomes more feasible with upstream meta-freescale.
-SRC_URI_append_etnaviv = " \
+SRC_URI:append:etnaviv = " \
file://0001-enable-mhdp-with-etnaviv.patch \
file://0002-dts-enable-etnaviv.patch \
- file://0003-drm-etnaviv-fix-TS-cache-flushing-on-GPUs-with-BLT-e.patch \
- file://0004-drm-sched-Fix-passing-zero-to-PTR_ERR-warning-v2.patch \
"
-# Make sure these are enabled so that AGL configurations work
-SRC_URI_append = " file://tmpfs.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/tmpfs.cfg"
-SRC_URI_append = " file://namespace.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/namespace.cfg"
-SRC_URI_append = " file://cgroup.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/cgroup.cfg"
-
-# Support for CFG80211 subsystem
-SRC_URI_append = " file://cfg80211.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/cfg80211.cfg"
-
# Support for i.MX8MQ EVKB (e.g. Broadcom wifi)
-SRC_URI_append_imx8mqevk = " file://imx8mq-evkb.cfg"
-KERNEL_CONFIG_FRAGMENTS_append_imx8mqevk = " ${WORKDIR}/imx8mq-evkb.cfg"
+AGL_KCONFIG_FRAGMENTS:append:imx8mq-evk = " imx8mq-evkb.cfg"
# Build in etnaviv if required
-SRC_URI_append_etnaviv = " file://etnaviv.cfg"
-KERNEL_CONFIG_FRAGMENTS_append_etnaviv = " ${WORKDIR}/etnaviv.cfg"
-
-# Turn off a couple of things enabled by default by Freescale
-# (lock debugging and userspace firmware loader fallback)
-SRC_URI_append = " file://fixups.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/fixups.cfg"
+AGL_KCONFIG_FRAGMENTS:append:etnaviv = " etnaviv.cfg"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-lts_%.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-lts_%.bbappend
new file mode 100644
index 000000000..1007f3c7c
--- /dev/null
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-lts_%.bbappend
@@ -0,0 +1 @@
+require linux-fslc.inc
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc.inc b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc.inc
new file mode 100644
index 000000000..948b8c22c
--- /dev/null
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc.inc
@@ -0,0 +1,22 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+require recipes-kernel/linux/linux-yocto-agl.inc
+
+# Make sure these are enabled so that AGL systemd configuration works
+AGL_KCONFIG_FRAGMENTS += " \
+ tmpfs.cfg \
+ namespace.cfg \
+ cgroup.cfg \
+"
+
+# Support for CFG80211 subsystem
+AGL_KCONFIG_FRAGMENTS += "cfg80211.cfg"
+
+# Turn off a couple of things enabled by default by Freescale
+# (lock debugging and userspace firmware loader fallback)
+AGL_KCONFIG_FRAGMENTS += "fixups.cfg"
+
+do_install:append:cubox-i() {
+ # Add symlink to work with default Hummingboard 2 u-boot configuration
+ ln -sf imx6q-hummingboard2.dtb ${D}/boot/imx6q-hummingboard2-emmc.dtb
+}
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend
index 640f9cfe5..1007f3c7c 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend
@@ -1,25 +1 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-require recipes-kernel/linux/linux-agl.inc
-
-# Make sure these are enabled so that AGL configurations work
-SRC_URI_append = " file://tmpfs.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/tmpfs.cfg"
-SRC_URI_append = " file://namespace.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/namespace.cfg"
-SRC_URI_append = " file://cgroup.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/cgroup.cfg"
-
-# Support for CFG80211 subsystem
-SRC_URI_append = " file://cfg80211.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/cfg80211.cfg"
-
-# Turn off a couple of things enabled by default by Freescale
-# (lock debugging and userspace firmware loader fallback)
-SRC_URI_append = " file://fixups.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/fixups.cfg"
-
-do_install_append_cubox-i() {
- # Add symlink to work with default Hummingboard 2 u-boot configuration
- ln -sf imx6q-hummingboard2.dtb ${D}/boot/imx6q-hummingboard2-emmc.dtb
-}
+require linux-fslc.inc
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb
deleted file mode 100644
index a3f67004e..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-DESCRIPTION = "AWS IoT device SDK for embedded C"
-AUTHOR = "AWS"
-HOMEPAGE = "https://github.com/aws/aws-iot-device-sdk-embedded-C"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=acc7a1bf87c055789657b148939e4b40"
-
-SRC_URI = "\
- git://github.com/aws/aws-iot-device-sdk-embedded-C.git;protocol=https \
- file://Makefile.aws \
- file://aws_iot_config.h \
- file://awsiotsdk.pc \
-"
-SRCREV = "d039f075e1cc2a2a7fc20edc6868f328d8d36b2f"
-
-S = "${WORKDIR}/git"
-B = "${WORKDIR}/build"
-
-DEPENDS = "mbedtls"
-RDEPENDS_${PN} += "mbedtls"
-
-do_configure_prepend() {
- cp ${WORKDIR}/Makefile.aws ${S}/src
- cp ${WORKDIR}/aws_iot_config.h ${S}/include
- cp ${WORKDIR}/awsiotsdk.pc ${S}
-}
-
-do_compile() {
- cd ${S}/src
- oe_runmake -f ./Makefile.aws DESTDIR=${D} all
-}
-
-do_install() {
- cd ${S}/src
- oe_runmake -f ./Makefile.aws DESTDIR=${D} install
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-ALLOW_EMPTY_${PN} = "1"
-
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws
deleted file mode 100644
index d4f18c0f9..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws
+++ /dev/null
@@ -1,62 +0,0 @@
-###########################################################################
-# Copyright 2020 MERA
-#
-# 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.
-###########################################################################
-
-# Generated library name
-NAME := awsiotsdk
-
-SRC = .
-AWS_SDK_DIR = $(SRC)/..
-PLATFORM_DIR = $(AWS_SDK_DIR)/platform/linux/mbedtls
-PLATFORM_COMMON_DIR = $(AWS_SDK_DIR)/platform/linux/common
-AWS_INSTALL_HEADERS_DIR = /usr/include/awsiotsdk
-
-
-CFLAGS += -I $(AWS_SDK_DIR)/include
-CFLAGS += -I $(AWS_SDK_DIR)/external_libs/jsmn
-CFLAGS += -I $(PLATFORM_COMMON_DIR)
-CFLAGS += -I $(PLATFORM_DIR)
-CFLAGS += -DENABLE_IOT_DEBUG -DENABLE_IOT_INFO -DENABLE_IOT_WARN -DENABLE_IOT_ERROR
-
-
-# Source to compile
-SRCS += $(wildcard $(SRC)/*.c)
-SRCS += $(wildcard $(AWS_SDK_DIR)/external_libs/jsmn/*.c)
-SRCS += $(wildcard $(PLATFORM_DIR)/*.c)
-SRCS += $(wildcard $(PLATFORM_COMMON_DIR)/*.c)
-
-OBJS = $(SRCS:.c=.o)
-
-
-.PHONY: all
-all: lib$(NAME).a
-
-lib$(NAME).a: $(OBJS)
- $(AR) -rcs $@ $(OBJS)
-
-.PHONY: install
-install: lib$(NAME).a
- install -D -m 0644 lib$(NAME).a $(DESTDIR)/usr/lib/lib$(NAME).a
- install -d $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)
- install -m 0644 $(AWS_SDK_DIR)/include/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/
- install -m 0644 $(AWS_SDK_DIR)/external_libs/jsmn/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/
- install -m 0644 $(PLATFORM_COMMON_DIR)/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/
- install -m 0644 $(PLATFORM_DIR)/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/
- install -d $(DESTDIR)/usr/lib/pkgconfig
- install -m 0644 ../awsiotsdk.pc $(DESTDIR)/usr/lib/pkgconfig/
-
-.PHONY: clean
-clean:
- -rm -f lib$(NAME).a $(OBJS)
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h
deleted file mode 100644
index e01189332..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2010-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License").
- * You may not use this file except in compliance with the License.
- * A copy of the License is located at
- *
- * http://aws.amazon.com/apache2.0
- *
- * or in the "license" file accompanying this file. This file is distributed
- * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-/**
- * @file aws_iot_config.h
- * @brief AWS IoT specific configuration file
- */
-
-#ifndef AWS_IOT_CONFIG_H_
-#define AWS_IOT_CONFIG_H_
-
-// Get from console
-// =================================================
-#define AWS_IOT_MQTT_HOST "" ///< Customer specific MQTT HOST. The same will be used for Thing Shadow
-#define AWS_IOT_MQTT_PORT 443 ///< default port for MQTT/S
-#define AWS_IOT_MQTT_CLIENT_ID "" ///< MQTT client ID should be unique for every device
-#define AWS_IOT_MY_THING_NAME "" ///< Thing Name of the Shadow this device is associated with
-#define AWS_IOT_ROOT_CA_FILENAME "" ///< Root CA file name
-#define AWS_IOT_CERTIFICATE_FILENAME "" ///< device signed certificate file name
-#define AWS_IOT_PRIVATE_KEY_FILENAME "" ///< Device private key filename
-// =================================================
-
-// MQTT PubSub
-#define AWS_IOT_MQTT_TX_BUF_LEN 10240 ///< Any time a message is sent out through the MQTT layer. The message is copied into this buffer anytime a publish is done. This will also be used in the case of Thing Shadow
-#define AWS_IOT_MQTT_RX_BUF_LEN 10240 ///< Any message that comes into the device should be less than this buffer size. If a received message is bigger than this buffer size the message will be dropped.
-#define AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS 5 ///< Maximum number of topic filters the MQTT client can handle at any given time. This should be increased appropriately when using Thing Shadow
-
-// Thing Shadow specific configs
-#define SHADOW_MAX_SIZE_OF_RX_BUFFER (AWS_IOT_MQTT_RX_BUF_LEN+1) ///< Maximum size of the SHADOW buffer to store the received Shadow message, including terminating NULL byte.
-#define MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES 80 ///< Maximum size of the Unique Client Id. For More info on the Client Id refer \ref response "Acknowledgments"
-#define MAX_SIZE_CLIENT_ID_WITH_SEQUENCE MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES + 10 ///< This is size of the extra sequence number that will be appended to the Unique client Id
-#define MAX_SIZE_CLIENT_TOKEN_CLIENT_SEQUENCE MAX_SIZE_CLIENT_ID_WITH_SEQUENCE + 20 ///< This is size of the the total clientToken key and value pair in the JSON
-#define MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME 10 ///< At Any given time we will wait for this many responses. This will correlate to the rate at which the shadow actions are requested
-#define MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME 10 ///< We could perform shadow action on any thing Name and this is maximum Thing Names we can act on at any given time
-#define MAX_JSON_TOKEN_EXPECTED 120 ///< These are the max tokens that is expected to be in the Shadow JSON document. Include the metadata that gets published
-#define MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME 60 ///< All shadow actions have to be published or subscribed to a topic which is of the format $aws/things/{thingName}/shadow/update/accepted. This refers to the size of the topic without the Thing Name
-#define MAX_SIZE_OF_THING_NAME 30 ///< The Thing Name should not be bigger than this value. Modify this if the Thing Name needs to be bigger
-#define MAX_SHADOW_TOPIC_LENGTH_BYTES MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME + MAX_SIZE_OF_THING_NAME ///< This size includes the length of topic with Thing Name
-
-// Auto Reconnect specific config
-#define AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL 1000 ///< Minimum time before the First reconnect attempt is made as part of the exponential back-off algorithm
-#define AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL 128000 ///< Maximum time interval after which exponential back-off will stop attempting to reconnect.
-
-#define DISABLE_METRICS true ///< Disable the collection of metrics by setting this to true
-
-#endif /* AWS_IOT_CONFIG_H_ */
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc
deleted file mode 100644
index f8384993b..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc
+++ /dev/null
@@ -1,27 +0,0 @@
-###########################################################################
-# Copyright 2020 MERA
-#
-# 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.
-###########################################################################
-
-prefix=/usr
-exec_prefix=${prefix}
-libdir=${prefix}/lib
-includedir=${prefix}/include/awsiotsdk
-
-Name: AWS IoT Device SDK for Embedded C
-Description: AWS IoT SDK compiled into library (includes mbedTLS and jsmn code)
-Version: 3.0.1
-
-Cflags: -I${includedir} -DENABLE_IOT_DEBUG -DENABLE_IOT_INFO -DENABLE_IOT_WARN -DENABLE_IOT_ERROR
-Libs: -L${libdir} -lawsiotsdk -lmbedtls -lmbedcrypto -lmbedx509
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-iot-sdk-c/azure-iot-sdk-c_%.bbappend b/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-iot-sdk-c/azure-iot-sdk-c_%.bbappend
deleted file mode 100644
index ecd5fe2f6..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-iot-sdk-c/azure-iot-sdk-c_%.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-# Disable the amqp transport, due to linking error in meta-iot repository for amqp
-# symbols from amqp code are not included in the libiothub_client.so
-
-# NOTE: amqp is not used by AGL in IoT context at the moment
-PACKAGECONFIG_remove = "amqp"
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-macro-utils-c/azure-macro-utils-c_%.bbappend b/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-macro-utils-c/azure-macro-utils-c_%.bbappend
deleted file mode 100644
index afe3e9cda..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-macro-utils-c/azure-macro-utils-c_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-azure/umock-c/umock-c_%.bbappend b/meta-agl-bsp/meta-iot-cloud/recipes-azure/umock-c/umock-c_%.bbappend
deleted file mode 100644
index afe3e9cda..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-azure/umock-c/umock-c_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-agl-bsp/meta-qcom/recipes-bsp/96boards-tools/96boards-tools_0.12.bb b/meta-agl-bsp/meta-qcom/recipes-bsp/96boards-tools/96boards-tools_0.12.bb
deleted file mode 100644
index 446770f8e..000000000
--- a/meta-agl-bsp/meta-qcom/recipes-bsp/96boards-tools/96boards-tools_0.12.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Useful bits an pieces to make 96Boards more standard across the board"
-HOMEPAGE = "https://github.com/96boards/96boards-tools"
-SECTION = "devel"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
-
-SRCREV = "ed0f0dbec02c1869a0c4fa0140b4aa5338c9d010"
-SRC_URI = "git://github.com/96boards/96boards-tools;branch=master;protocol=https"
-
-S = "${WORKDIR}/git"
-
-inherit systemd allarch update-rc.d
-
-do_install () {
- install -d ${D}${sysconfdir}/udev/rules.d
- install -m 0755 ${S}/*.rules ${D}${sysconfdir}/udev/rules.d/
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${S}/resize-disk ${D}${sysconfdir}/init.d/
-
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${S}/resize-helper.service ${D}${systemd_unitdir}/system
-
- install -d ${D}${sbindir}
- install -m 0755 ${S}/resize-helper ${D}${sbindir}
-}
-
-INITSCRIPT_NAME = "resize-disk"
-INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ."
-
-SYSTEMD_SERVICE_${PN} = "resize-helper.service"
-RDEPENDS_${PN} += "e2fsprogs-resize2fs gptfdisk parted util-linux udev"
diff --git a/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/files/qcom-q6v5-pil.service b/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/files/qcom-q6v5-pil.service
deleted file mode 100644
index 3d9cd24bb..000000000
--- a/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/files/qcom-q6v5-pil.service
+++ /dev/null
@@ -1,12 +0,0 @@
-[Unit]
-Description=Qualcomm Hexagon PIL setup
-After=rmtfs.service
-Requires=rmtfs.service
-
-[Service]
-Type=oneshot
-RemainAfterExit=yes
-ExecStart=/sbin/modprobe -q qcom_q6v5_pil
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/q6v5-pil.bb b/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/q6v5-pil.bb
deleted file mode 100644
index 19f0760ac..000000000
--- a/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/q6v5-pil.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-inherit systemd
-
-SUMMARY = "Systemd unit file for the delay loading Hexagon PIL kernel module"
-SECTION = "misc"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-SRC_URI += "file://qcom-q6v5-pil.service"
-
-do_install() {
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/qcom-q6v5-pil.service ${D}${systemd_unitdir}/system
-
- # Blacklist qcom_q6v5_pil to prevent modules autoload
- # qcom-q6v5-pil.service will do the work after rmtfs done.
- install -d ${D}/${sysconfdir}/modprobe.d
- echo "blacklist qcom_q6v5_pil" > ${D}/${sysconfdir}/modprobe.d/qcom_q6v5_pil.conf
-}
-
-SYSTEMD_SERVICE_${PN} = "qcom-q6v5-pil.service"
diff --git a/meta-agl-bsp/meta-qcom/recipes-kernel/linux/linux-linaro-qcomlt_%.bbappend b/meta-agl-bsp/meta-qcom/recipes-kernel/linux/linux-linaro-qcomlt_%.bbappend
deleted file mode 100644
index 0b2b99d4d..000000000
--- a/meta-agl-bsp/meta-qcom/recipes-kernel/linux/linux-linaro-qcomlt_%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-require recipes-kernel/linux/linux-agl.inc
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/bootfiles.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/bootfiles.bbappend
deleted file mode 100644
index adb19c09c..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/bootfiles.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-RDEPENDS_${PN}_append_sota += " u-boot-otascript"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend
index bbab3df46..248623699 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend
@@ -1,7 +1,7 @@
DISABLE_OVERSCAN = "1"
TOTAL_BOARD_MEM = "3072"
-do_deploy_append_raspberrypi4() {
+do_deploy:append:raspberrypi4() {
# ENABLE CAN
if [ "${ENABLE_CAN}" = "1" ]; then
echo "# Enable CAN" >>${DEPLOYDIR}/bootfiles/config.txt
@@ -24,7 +24,7 @@ do_deploy_append_raspberrypi4() {
fi
}
-do_deploy_append() {
+do_deploy:append() {
if [ "${ENABLE_CMA}" = "1" ] && [ -n "${CMA_LWM}" ]; then
sed -i '/#cma_lwm/ c\cma_lwm=${CMA_LWM}' ${DEPLOYDIR}/bootfiles/config.txt
fi
@@ -40,14 +40,7 @@ do_deploy_append() {
echo "dtparam=audio=on" >> ${DEPLOYDIR}/bootfiles/config.txt
}
-do_deploy_append_raspberrypi4() {
+do_deploy:append:raspberrypi4() {
echo -e "\n[pi4]" >> ${DEPLOYDIR}/bootfiles/config.txt
echo "max_framebuffers=2" >> ${DEPLOYDIR}/bootfiles/config.txt
}
-
-do_deploy_append_sota() {
- echo "device_tree_address=0x0c800000" >> ${DEPLOYDIR}/bootfiles/config.txt
-}
-
-ENABLE_UART_raspberrypi3 = "1"
-ENABLE_UART_raspberrypi4 = "1"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend
index 2437d9a84..1e9f47d23 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend
@@ -1,10 +1,10 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
-SRC_URI_append =" \
+SRC_URI:append =" \
${@bb.utils.contains('AGL_XEN_WANTED','1',' file://boot_xen.cmd','',d)} \
"
-do_compile_append() {
+do_compile:append() {
# if xen feature is activated we overwirte the boot script with xen specific one
if [ "${AGL_XEN_WANTED}" = "1" ]; then
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf.bbappend
deleted file mode 100644
index 33dfd6a23..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "file://dsi.cfg"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/dsi.cfg b/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/dsi.cfg
deleted file mode 100644
index 72a6d2bf8..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/dsi.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# Support the Raspberry Pi Foundation 7" tablet which uses the DSI connector
-# rather than HDMI.
-[output]
-name=DSI-1
-transform=270
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270-720p.cfg b/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270-720p.cfg
deleted file mode 100644
index e1c9db1a8..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270-720p.cfg
+++ /dev/null
@@ -1,7 +0,0 @@
-# A display is connected to HDMI-A-1 and needs to be rotated 270 degrees
-# to have a proper orientation of the homescreen. For example the various sizes
-# of the GeChic display or the Dell display.
-[output]
-name=HDMI-A-1
-transform=270
-mode=1280x720
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb
index c365715fa..c5edbe1dc 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb
@@ -7,36 +7,27 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384
DEPENDS = "dtc-native"
-ALLOW_EMPTY_${PN} = "1"
-FILES_${PN} = ""
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = ""
S = "${WORKDIR}"
do_compile[depends] += "virtual/kernel:do_deploy"
do_compile () {
- # Official touchscreen setup (rpi3b/rpi3b dtb, VC4DTBO and ft5406)
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b-plus.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b-plus.dtb -o bcm2710-rpi-3-b-plus+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
- fi
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b.dtb -o bcm2710-rpi-3-b+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
+ # Plain VC4 (HDMI)
+ if [ -f "${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb" ]; then
+ fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb -o bcm2711-rpi-4-b+vc4.dtb \
+ ${DEPLOY_DIR_IMAGE}/${VC4DTBO}-pi4.dtbo
fi
- # NOTE: meta-updater currently disables rpi-ft5406.dtbo on rpi4, so need to check if it is present
+
+ # VC4 + LCD
if [ -f "${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb" -a -f "${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb -o bcm2711-rpi-4-b+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
+ fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb -o bcm2711-rpi-4-b+vc4+ft5406.dtb \
+ ${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo \
+ ${DEPLOY_DIR_IMAGE}/${VC4DTBO}-pi4.dtbo
fi
- # HDMI screen setup (rpi3b/rpi3b dtb and VC4DTBO)
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b-plus.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b-plus.dtb -o bcm2710-rpi-3-b-plus+vc4.dtb ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
- fi
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b.dtb -o bcm2710-rpi-3-b+vc4.dtb ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
- fi
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb -o bcm2711-rpi-4-b+vc4.dtb ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
- fi
}
do_deploy () {
@@ -44,21 +35,9 @@ do_deploy () {
if [ -f "${S}/bcm2711-rpi-4-b+vc4+ft5406.dtb" ]; then
install -m 0644 ${S}/bcm2711-rpi-4-b+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}
fi
- if [ -f "${S}/bcm2710-rpi-3-b+vc4+ft5406.dtb" ]; then
- install -m 0644 ${S}/bcm2710-rpi-3-b+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}
- fi
- if [ -f "${S}/bcm2710-rpi-3+vc4+ft5406.dtb" ]; then
- install -m 0644 ${S}/bcm2710-rpi-3+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}
- fi
if [ -f "${S}/bcm2711-rpi-4-b+vc4.dtb" ]; then
install -m 0644 ${S}/bcm2711-rpi-4-b+vc4.dtb ${DEPLOY_DIR_IMAGE}
fi
- if [ -f "${S}/bcm2710-rpi-3-b+vc4.dtb" ]; then
- install -m 0644 ${S}/bcm2710-rpi-3-b+vc4.dtb ${DEPLOY_DIR_IMAGE}
- fi
- if [ -f "${S}/bcm2710-rpi-3+vc4.dtb" ]; then
- install -m 0644 ${S}/bcm2710-rpi-3+vc4.dtb ${DEPLOY_DIR_IMAGE}
- fi
}
addtask deploy after do_install
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.1.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.1.bbappend
new file mode 100644
index 000000000..a28a9e748
--- /dev/null
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.1.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+SRC_URI += "file://0001-fdtoverlay-Prevent-overlays-from-modifying-phandle-p.patch"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/files/0001-fdtoverlay-Prevent-overlays-from-modifying-phandle-p.patch b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/files/0001-fdtoverlay-Prevent-overlays-from-modifying-phandle-p.patch
new file mode 100644
index 000000000..0f275f1ac
--- /dev/null
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/files/0001-fdtoverlay-Prevent-overlays-from-modifying-phandle-p.patch
@@ -0,0 +1,154 @@
+From caba0117dc30f2357eac6d04f3510095dcbaa7f4 Mon Sep 17 00:00:00 2001
+From: Paul Barker <pbarker@konsulko.com>
+Date: Fri, 18 Dec 2020 23:00:07 +0000
+Subject: [PATCH] fdtoverlay: Prevent overlays from modifying phandle
+ properties
+To: David Gibson <david@gibson.dropbear.id.au>,
+ Jon Loeliger <jdl@jdl.com>,
+ devicetree-compiler@vger.kernel.org
+Cc: Rob Herring <robh@kernel.org>,
+ Pantelis Antoniou <pantelis.antoniou@konsulko.com>,
+ Scott Murray <scott.murray@konsulko.com>,
+ Jan Simon Moeller <jsmoeller@linuxfoundation.org>
+
+When applying an overlay fragment, we should take care not to overwrite
+an existing phandle property of the target node as this could break
+references to the target node elsewhere in the base dtb.
+
+In addition to potentially breaking references within the resulting fdt,
+if the overlay is built with symbols enabled (`-@` option to dtc) then
+fdtoverlay will be unable to merge the overlay with a base dtb file.
+
+A new test case is added to check how fdtoverlay handles this case.
+Attempting to apply this test overlay without the fix in this patch
+results in the following output:
+
+ input = tests/overlay_base_ref.test.dtb
+ output = tests/overlay_overlay_ref.fdtoverlay.dtb
+ overlay[0] = tests/overlay_overlay_ref.test.dtb
+
+ Failed to apply 'tests/overlay_overlay_ref.test.dtb': FDT_ERR_NOTFOUND
+
+In this test case the __overlay__ node in question does not explicitly
+contain a phandle property in the dts file, the phandle is added during
+compilation as it is referenced by another node within the overlay dts.
+
+This failure occurs due to a sequence of events in the functions called
+by fdt_overlay_apply():
+
+1) In overlay_fixup_phandles(), the target of the overlay fragment is
+ looked up and the target property is set to the phandle of the target
+ node.
+
+2) In overlay_merge(), the target node is looked up by phandle via
+ overlay_get_target(). As the __overlay__ node in this test case
+ itself has a phandle property, the phandle of the target node is
+ modified.
+
+3) In overlay_symbol_update(), the target node is again looked up by
+ phandle via overlay_get_target(). But this time the target node
+ cannot be found as its phandle property was modified.
+
+The fix for this issue is to skip modification of the phandle property
+of the target node in step (2) of the above sequence. If the target node
+doesn't already contain a phandle property, we can add one without risk.
+
+Upstream-Status: Submitted
+ https://www.spinics.net/lists/devicetree-compiler/msg03537.html
+Signed-off-by: Paul Barker <pbarker@konsulko.com>
+---
+ libfdt/fdt_overlay.c | 2 ++
+ tests/overlay_base_ref.dts | 19 +++++++++++++++++++
+ tests/overlay_overlay_ref.dts | 24 ++++++++++++++++++++++++
+ tests/run_tests.sh | 5 +++++
+ 4 files changed, 50 insertions(+)
+ create mode 100644 tests/overlay_base_ref.dts
+ create mode 100644 tests/overlay_overlay_ref.dts
+
+diff --git a/libfdt/fdt_overlay.c b/libfdt/fdt_overlay.c
+index d217e79..b3c217a 100644
+--- a/libfdt/fdt_overlay.c
++++ b/libfdt/fdt_overlay.c
+@@ -573,6 +573,8 @@ static int overlay_apply_node(void *fdt, int target,
+ if (prop_len < 0)
+ return prop_len;
+
++ if (!strcmp(name, "phandle") && fdt_getprop(fdt, target, name, NULL))
++ continue;
+ ret = fdt_setprop(fdt, target, name, prop, prop_len);
+ if (ret)
+ return ret;
+diff --git a/tests/overlay_base_ref.dts b/tests/overlay_base_ref.dts
+new file mode 100644
+index 0000000..1fc02a2
+--- /dev/null
++++ b/tests/overlay_base_ref.dts
+@@ -0,0 +1,19 @@
++/*
++ * Copyright (c) 2016 NextThing Co
++ * Copyright (c) 2016 Free Electrons
++ * Copyright (c) 2016 Konsulko Inc.
++ *
++ * SPDX-License-Identifier: GPL-2.0+
++ */
++
++/dts-v1/;
++
++/ {
++ test: test-node {
++ test-int-property = <42>;
++ };
++
++ test-refs {
++ refs = <&test>;
++ };
++};
+diff --git a/tests/overlay_overlay_ref.dts b/tests/overlay_overlay_ref.dts
+new file mode 100644
+index 0000000..a45c95d
+--- /dev/null
++++ b/tests/overlay_overlay_ref.dts
+@@ -0,0 +1,24 @@
++/*
++ * Copyright (c) 2016 NextThing Co
++ * Copyright (c) 2016 Free Electrons
++ * Copyright (c) 2016 Konsulko Inc.
++ *
++ * SPDX-License-Identifier: GPL-2.0+
++ */
++
++/dts-v1/;
++/plugin/;
++
++/ {
++ fragment@0 {
++ target = <&test>;
++
++ frag0: __overlay__ {
++ test-int-property = <43>;
++ };
++ };
++
++ test-ref {
++ ref = <&frag0>;
++ };
++};
+diff --git a/tests/run_tests.sh b/tests/run_tests.sh
+index 294585b..a65b166 100755
+--- a/tests/run_tests.sh
++++ b/tests/run_tests.sh
+@@ -329,6 +329,11 @@ dtc_overlay_tests () {
+ run_test check_path overlay_base_with_aliases.dtb not-exists "/__symbols__"
+ run_test check_path overlay_base_with_aliases.dtb not-exists "/__fixups__"
+ run_test check_path overlay_base_with_aliases.dtb not-exists "/__local_fixups__"
++
++ # Test taking a reference to an overlay fragment
++ run_dtc_test -@ -I dts -O dtb -o overlay_base_ref.test.dtb "$SRCDIR/overlay_base_ref.dts"
++ run_dtc_test -@ -I dts -O dtb -o overlay_overlay_ref.test.dtb "$SRCDIR/overlay_overlay_ref.dts"
++ run_wrap_test $FDTOVERLAY -i overlay_base_ref.test.dtb overlay_overlay_ref.test.dtb -o overlay_overlay_ref.fdtoverlay.dtb
+ }
+
+ tree1_tests () {
+--
+2.26.2
+
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/0002-Disable-DMA-in-sdhci-driver.patch b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/0002-Disable-DMA-in-sdhci-driver.patch
deleted file mode 100644
index 04a8733f2..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/0002-Disable-DMA-in-sdhci-driver.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 758bc9b917469bc4e527dc3aae821c91cbc3d426 Mon Sep 17 00:00:00 2001
-From: Stewart Hildebrand <stewart.hildebrand@dornerworks.com>
-Date: Thu, 18 Jul 2019 00:01:27 -0400
-Subject: [PATCH 2/4] Disable DMA in sdhci driver
-
----
- drivers/mmc/host/sdhci-iproc.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c
-index 983cddce9..150f7bfc8 100644
---- a/drivers/mmc/host/sdhci-iproc.c
-+++ b/drivers/mmc/host/sdhci-iproc.c
-@@ -252,6 +252,8 @@ static const struct sdhci_iproc_data bcm2835_data = {
-
- static const struct sdhci_pltfm_data sdhci_bcm2838_pltfm_data = {
- .ops = &sdhci_iproc_32only_ops,
-+ .quirks = SDHCI_QUIRK_BROKEN_DMA |
-+ SDHCI_QUIRK_BROKEN_ADMA,
- };
-
- static const struct sdhci_iproc_data bcm2838_data = {
---
-2.17.1
-
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/0003-Fix-PCIe-in-dom0-for-RPi4.patch b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/0003-Fix-PCIe-in-dom0-for-RPi4.patch
deleted file mode 100644
index 835f36da3..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/0003-Fix-PCIe-in-dom0-for-RPi4.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 77765c2a47ce43911b8fe7b09f037c9bc13008ca Mon Sep 17 00:00:00 2001
-From: Jeff Kubascik <jeff.kubascik@dornerworks.com>
-Date: Tue, 30 Jul 2019 08:49:56 -0400
-Subject: [PATCH 3/4] Fix PCIe in dom0 for RPi4
-
-There is an issue where the Broadcom PCIe driver and Xen swiotlb layer
-invoke each other's dma alloc function recursively until the stack blows
-up. The cause appears to be due to arch_setup_dma_ops being called
-more than once for the device, possibly through of_dma_configure, and
-screwing up the dma_ops pointers. This patch adds a check to make sure
-that the xen_dma_ops are applied only once for a device.
----
- arch/arm64/mm/dma-mapping.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
-index d3a5bb16f..243a3b9be 100644
---- a/arch/arm64/mm/dma-mapping.c
-+++ b/arch/arm64/mm/dma-mapping.c
-@@ -895,7 +895,7 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
- __iommu_setup_dma_ops(dev, dma_base, size, iommu);
-
- #ifdef CONFIG_XEN
-- if (xen_initial_domain()) {
-+ if (!dev->archdata.dev_dma_ops && xen_initial_domain()) {
- dev->archdata.dev_dma_ops = dev->dma_ops;
- dev->dma_ops = xen_dma_ops;
- }
---
-2.17.1
-
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch
new file mode 100644
index 000000000..7f0979ca9
--- /dev/null
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch
@@ -0,0 +1,48 @@
+From bebd63730a433ba62549a80114a9851328aa8897 Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@windriver.com>
+Date: Mon, 2 Jul 2018 23:10:28 -0400
+Subject: [PATCH] menuconfig,mconf-cfg: Allow specification of ncurses location
+
+In some cross build environments such as the Yocto Project build
+environment it provides an ncurses library that is compiled
+differently than the host's version. This causes display corruption
+problems when the host's curses includes are used instead of the
+includes from the provided compiler are overridden. There is a second
+case where there is no curses libraries at all on the host system and
+menuconfig will just fail entirely.
+
+The solution is simply to allow an override variable in
+check-lxdialog.sh for environments such as the Yocto Project. Adding
+a CROSS_CURSES_LIB and CROSS_CURSES_INC solves the issue and allowing
+compiling and linking against the right headers and libraries.
+
+Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
+cc: Michal Marek <mmarek@suse.cz>
+cc: linux-kbuild@vger.kernel.org
+Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
+---
+ scripts/kconfig/mconf-cfg.sh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/scripts/kconfig/mconf-cfg.sh b/scripts/kconfig/mconf-cfg.sh
+index c812872d7f9d..42d20819025c 100755
+--- a/scripts/kconfig/mconf-cfg.sh
++++ b/scripts/kconfig/mconf-cfg.sh
+@@ -4,6 +4,14 @@
+ PKG="ncursesw"
+ PKG2="ncurses"
+
++if [ "$CROSS_CURSES_LIB" != "" ]; then
++ echo libs=\'$CROSS_CURSES_LIB\'
++ if [ x"$CROSS_CURSES_INC" != x ]; then
++ echo cflags=\'$CROSS_CURSES_INC\'
++ fi
++ exit 0
++fi
++
+ if [ -n "$(command -v ${HOSTPKG_CONFIG})" ]; then
+ if ${HOSTPKG_CONFIG} --exists $PKG; then
+ echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG)\"
+--
+2.17.1
+
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/xen-be.cfg b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/xen-be.cfg
index 36f390187..36f390187 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/files/xen-be.cfg
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/xen-be.cfg
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend
index f78e0b5eb..ec3fa910b 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend
@@ -1,47 +1,46 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
-require recipes-kernel/linux/linux-agl.inc
+require recipes-kernel/linux/linux-yocto-agl.inc
-SRC_URI_append = "\
+SRC_URI:append = " \
${@oe.utils.conditional('USE_FAYTECH_MONITOR', '1', 'file://0002-faytech-fix-rpi.patch', '', d)} \
+ file://0001-mconf-menuconfig.patch \
"
-#take in account that linux under xen should use the hvc0 console
-SERIAL_OPTION = "${@bb.utils.contains('AGL_XEN_WANTED','1','hvc0','115200;ttyS0',d)}"
+
+# Enable support for Pi foundation touchscreen
+AGL_KCONFIG_FRAGMENTS += "raspberrypi-panel.cfg"
+
+# Enable bt hci uart
+AGL_KCONFIG_FRAGMENTS += "raspberrypi-hciuart.cfg"
+
+# ENABLE NETWORK (built-in)
+AGL_KCONFIG_FRAGMENTS += "raspberrypi_network.cfg"
+
+# For Xen
+AGL_KCONFIG_FRAGMENTS += " \
+ ${@bb.utils.contains('AGL_XEN_WANTED','1','xen-be.cfg','',d)} \
+"
+
+# Take in account that linux under Xen should use the hvc0 console
+SERIAL_OPTION = "${@bb.utils.contains('AGL_XEN_WANTED','1','hvc0','ttyS0,115200',d)}"
SERIAL = "${@oe.utils.conditional("ENABLE_UART", "1", "console=${SERIAL_OPTION}", "", d)}"
CMDLINE_DEBUG = ""
-#XEN related option
-CMDLINE_append = ' ${@bb.utils.contains('AGL_XEN_WANTED','1','clk_ignore_unused','',d)}'
+# Xen related option
+CMDLINE:append = ' ${@bb.utils.contains('AGL_XEN_WANTED','1','clk_ignore_unused','',d)}'
-#workaround for crash during brcmfmac loading. Disable it at this moment
-CMDLINE_append = ' ${@bb.utils.contains('AGL_XEN_WANTED','1','modprobe.blacklist=brcmfmac','',d)}'
+# Workaround for crash during brcmfmac loading. Disable it at this moment
+CMDLINE:append = ' ${@bb.utils.contains('AGL_XEN_WANTED','1','modprobe.blacklist=brcmfmac','',d)}'
-CMDLINE_append = " usbhid.mousepoll=0"
+CMDLINE:append = " usbhid.mousepoll=0"
# Add options to allow CMA to operate
-CMDLINE_append = ' ${@oe.utils.conditional("ENABLE_CMA", "1", "coherent_pool=6M smsc95xx.turbo_mode=N", "", d)}'
+CMDLINE:append = '${@oe.utils.conditional("ENABLE_CMA", "1", " coherent_pool=6M smsc95xx.turbo_mode=N", "", d)}'
KERNEL_MODULE_AUTOLOAD += "snd-bcm2835"
KERNEL_MODULE_AUTOLOAD += "hid-multitouch"
-RDEPENDS_${PN} += "kernel-module-snd-bcm2835"
PACKAGES += "kernel-module-snd-bcm2835"
-# Enable support for usb video class for usb camera devices
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/uvc.cfg"
-
-# Enable support for joystick devices
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/joystick.cfg"
-
-# Enable support for Pi foundation touchscreen
-SRC_URI_append = " file://raspberrypi-panel.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/raspberrypi-panel.cfg"
-
-# Enable bt hci uart
-SRC_URI_append = " file://raspberrypi-hciuart.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/raspberrypi-hciuart.cfg"
-
-# ENABLE NETWORK (built-in)
-SRC_URI_append = " file://raspberrypi_network.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/raspberrypi_network.cfg"
+RDEPENDS:${PN} += "kernel-module-snd-bcm2835"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_4.19.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_4.19.bbappend
deleted file mode 100644
index 7f17f0c3f..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_4.19.bbappend
+++ /dev/null
@@ -1,20 +0,0 @@
-require recipes-kernel/linux/linux-agl-4.19.inc
-
-ENABLE_UART_raspberrypi4 = "1"
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-
-# For Xen
-
-SRC_URI_append =" \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','file://0002-Disable-DMA-in-sdhci-driver.patch','',d)} \
-"
-
-SRC_URI_append =" \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','file://0003-Fix-PCIe-in-dom0-for-RPi4.patch','',d)} \
-"
-
-SRC_URI_append = " \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','file://xen-be.cfg','',d)} \
-"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
index e48a380a3..2e045c1f2 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
@@ -1,2 +1,2 @@
# Disable faad by default to avoid licensing issues
-PACKAGECONFIG_remove_rpi = "faad"
+PACKAGECONFIG:remove:rpi = "faad"
diff --git a/meta-agl-bsp/meta-rcar-gateway/recipes-kernel/linux/linux-renesas_%.bbappend b/meta-agl-bsp/meta-rcar-gateway/recipes-kernel/linux/linux-renesas_%.bbappend
new file mode 100644
index 000000000..d565da8ac
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gateway/recipes-kernel/linux/linux-renesas_%.bbappend
@@ -0,0 +1,11 @@
+do_install:append () {
+
+ # Remove firmware file that is not packaged in the kernel.
+ # It throws an error during do_package.
+ # It seems to be moved out of the kernel in later BSP versions.
+ rm -rf ${D}/lib/firmware/r8a779f0_ufs.bin
+ rm -rf ${D}/lib/firmware
+ rm -rf ${D}/lib
+
+}
+
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES b/meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES
index f9cb5b1e4..296dd5e19 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES
@@ -5,7 +5,7 @@
# E.g. MACHINE_FEATURE. Should *not* be in layer.conf !!
# Radio packages
-#IMAGE_INSTALL_append_rcar-gen3 += " \
+#IMAGE_INSTALL:append:rcar-gen3 = " \
# si-tools \
# si-init \
# linux-firmware-wl18xx \
@@ -17,19 +17,19 @@
# ofono-tests \
#"
# E.g. MACHINE_FEATURE
-#IMAGE_INSTALL_append_r8a7797 += " \
+#IMAGE_INSTALL:append:r8a7797 += " \
# kernel-module-uio-imp \
# kernel-module-cmemdrv \
# udev-rules-cvlib \
#"
# E.g. MACHINE_FEATURE
-#IMAGE_INSTALL_append_r8a7798 += " \
+#IMAGE_INSTALL:append:r8a7798 += " \
# kernel-module-uio-imp \
# kernel-module-cmemdrv \
# udev-rules-cvlib \
#"
# This is a special use case. Should be enabled by user.
-#DISTRO_FEATURES_append = " surroundview "
+#DISTRO_FEATURES:append = " surroundview "
#### BBMASK
@@ -58,7 +58,7 @@ BBMASK += "/meta-rcar-gen3-adas/recipes-devtools/valgrind/"
BBMASK += "/meta-rcar-gen3-adas/recipes-devtools/gcc/"
# libpng in upstream already enabled neon
-# poky/meta/recipes-multimedia/libpng/libpng_1.6.37.bb:EXTRA_OECONF_append_class-target = " ${@bb.utils.contains("TUNE_FEATURES", "neon", "--enable-arm-neon=on", "--enable-arm-neon=off" ,d)}"
+# poky/meta/recipes-multimedia/libpng/libpng_1.6.37.bb:EXTRA_OECONF:append:class-target = " ${@bb.utils.contains("TUNE_FEATURES", "neon", "--enable-arm-neon=on", "--enable-arm-neon=off" ,d)}"
BBMASK += "/meta-rcar-gen3-adas/recipes-graphics/libpng/"
# opencv in upstream is newer
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc b/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc
index 5fc4dcefd..0c344a471 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc
@@ -1,15 +1,17 @@
#Keep this as a reminder
#MACHINEOVERRIDES .= ":kingfisher"
-#PACKAGE_EXTRA_ARCHS_append = " kingfisher"
+#PACKAGE_EXTRA_ARCHS:append = " kingfisher"
-PREFERRED_RPROVIDER_virtual/gpsd-conf ?= "gpsd-kingfisher-conf"
+# Add a feature as a low-impact way to detect Kingfisher support in
+# recipes.
+AGL_FEATURES:append:rcar-gen3 = " kingfisher"
-IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-kf${IMAGE_VERSION_SUFFIX}"
-IMAGE_LINK_NAME = "${IMAGE_BASENAME}-${MACHINE}-kf"
-TOOLCHAIN_OUTPUTNAME = "${SDK_NAME}-kf-toolchain-${SDK_VERSION}"
+IMAGE_NAME:rcar-gen3 = "${IMAGE_BASENAME}-${MACHINE}-kf${IMAGE_VERSION_SUFFIX}"
+IMAGE_LINK_NAME:rcar-gen3 = "${IMAGE_BASENAME}-${MACHINE}-kf"
+TOOLCHAIN_OUTPUTNAME:rcar-gen3 = "${SDK_NAME}-kf-toolchain-${SDK_VERSION}"
# Radio packages
-IMAGE_INSTALL_append_rcar-gen3 += " \
+IMAGE_INSTALL:append:rcar-gen3 = " \
si-tools \
si-init \
linux-firmware-wl18xx \
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf b/meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf
index 75bfcfcc7..be6f0aa25 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf
@@ -15,4 +15,4 @@ BBFILE_COLLECTIONS += "rcar-gen3-cogent"
BBFILE_PATTERN_rcar-gen3-cogent := "^${LAYERDIR}/"
BBFILE_PRIORITY_rcar-gen3-cogent = "7"
-LAYERSERIES_COMPAT_rcar-gen3-cogent = "dunfell"
+LAYERSERIES_COMPAT_rcar-gen3-cogent = "kirkstone"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/alsa-state/alsa-state.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/alsa-state/alsa-state.bbappend
deleted file mode 100644
index 4cb3a211b..000000000
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/alsa-state/alsa-state.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-do_configure_append () {
- sed -i 's/state.rcarsound\ {/state.ak4613\ {/g' ${WORKDIR}/asound.state
-}
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb
index 7ab99e025..b53504400 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb
@@ -21,8 +21,8 @@ do_install() {
# the Si468x device via i2c
install -d ${D}${sysconfdir}/udev/rules.d
cat >${D}${sysconfdir}/udev/rules.d/zz-radio-si.rules <<'EOF'
-KERNEL=="i2c-12", MODE="0660", GROUP="audio", SECLABEL{smack}="*"
+KERNEL=="i2c-12", MODE="0660", GROUP="audio"
EOF
}
-FILES_${PN} += "${systemd_system_unitdir}"
+FILES:${PN} += "${systemd_system_unitdir}"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend
index 98c66737b..7121bd168 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend
@@ -1,10 +1,10 @@
-FILESEXTRAPATHS_append := ":${THISDIR}/files"
+FILESEXTRAPATHS:append := ":${THISDIR}/files"
SRC_URI += " \
file://si-tools-fm-improvements.patch \
"
-EXTRA_OEMAKE_append = " 'LDFLAGS=${LDFLAGS}'"
+EXTRA_OEMAKE:append = " 'LDFLAGS=${LDFLAGS}'"
do_install() {
install -d ${D}${bindir}
@@ -22,7 +22,7 @@ do_install() {
done
}
-FILES_${PN} = " \
+FILES:${PN} = " \
${bindir} \
${nonarch_base_libdir}/firmware/radio \
"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend
index e29e54e44..52bee656d 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend
@@ -3,4 +3,4 @@ do_install() {
cp *.bts ${D}${nonarch_base_libdir}/firmware/ti-connectivity/
}
-FILES_${PN} = "${nonarch_base_libdir}/firmware/ti-connectivity/*"
+FILES:${PN} = "${nonarch_base_libdir}/firmware/ti-connectivity/*"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend
index a08cb2624..55d570fc7 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend
@@ -1,15 +1,15 @@
inherit systemd
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://ti-uim.service"
-SYSTEMD_SERVICE_${PN} = "ti-uim.service"
+SYSTEMD_SERVICE:${PN} = "ti-uim.service"
PR = "r0"
PV = "0.1+git${SRCPV}"
-do_install_append() {
+do_install:append() {
# We do not want the blacklist
rm -f ${D}/${sysconfdir}/modprobe.d/ti_bt.conf
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch
index 64c9542a3..d3a3229b4 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch
@@ -1,4 +1,4 @@
-From ce9a7a41a9f65cc8cc129cdd27e155b35b26d393 Mon Sep 17 00:00:00 2001
+From 71c2e7bc6ecf872dd3b45480859dce0f2e941b03 Mon Sep 17 00:00:00 2001
From: Matt Porter <mporter@konsulko.com>
Date: Wed, 13 Dec 2017 12:49:20 -0500
Subject: [PATCH] arm64: dts: renesas: preserve drm HDMI connector naming on KF
@@ -18,16 +18,18 @@ is first.
Change-Id: Ibbb1975c2383a526a54c257fb7d68d32a042d468
Signed-off-by: Matt Porter <mporter@konsulko.com>
Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
+Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
---
- arch/arm64/boot/dts/renesas/r8a7795.dtsi | 10 +++++-----
- arch/arm64/boot/dts/renesas/r8a7796.dtsi | 10 +++++-----
- 2 files changed, 10 insertions(+), 10 deletions(-)
+ arch/arm64/boot/dts/renesas/r8a77951.dtsi | 10 +++++-----
+ arch/arm64/boot/dts/renesas/r8a77960.dtsi | 10 +++++-----
+ arch/arm64/boot/dts/renesas/r8a77961.dtsi | 10 +++++-----
+ 3 files changed, 15 insertions(+), 15 deletions(-)
-diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
-index f7f947d27b0d..5bcc2391587d 100644
---- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
-+++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
-@@ -3054,11 +3054,6 @@
+diff --git a/arch/arm64/boot/dts/renesas/r8a77951.dtsi b/arch/arm64/boot/dts/renesas/r8a77951.dtsi
+index 12e78097533e..9ead58e8a7c2 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77951.dtsi
++++ b/arch/arm64/boot/dts/renesas/r8a77951.dtsi
+@@ -3943,11 +3943,6 @@ ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -39,8 +41,8 @@ index f7f947d27b0d..5bcc2391587d 100644
port@1 {
reg = <1>;
du_out_hdmi0: endpoint {
-@@ -3076,6 +3071,11 @@
- du_out_lvds0: endpoint {
+@@ -3966,6 +3961,11 @@ du_out_lvds0: endpoint {
+ remote-endpoint = <&lvds0_in>;
};
};
+ port@0 {
@@ -51,11 +53,11 @@ index f7f947d27b0d..5bcc2391587d 100644
};
};
-diff --git a/arch/arm64/boot/dts/renesas/r8a7796.dtsi b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
-index df26656e0f19..154ac1dd91fa 100644
---- a/arch/arm64/boot/dts/renesas/r8a7796.dtsi
-+++ b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
-@@ -2846,11 +2846,6 @@
+diff --git a/arch/arm64/boot/dts/renesas/r8a77960.dtsi b/arch/arm64/boot/dts/renesas/r8a77960.dtsi
+index 66ab48b3a704..a5481dc4a3f1 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77960.dtsi
++++ b/arch/arm64/boot/dts/renesas/r8a77960.dtsi
+@@ -3628,11 +3628,6 @@ ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -67,8 +69,36 @@ index df26656e0f19..154ac1dd91fa 100644
port@1 {
reg = <1>;
du_out_hdmi0: endpoint {
-@@ -2862,6 +2857,11 @@
- du_out_lvds0: endpoint {
+@@ -3645,6 +3640,11 @@ du_out_lvds0: endpoint {
+ remote-endpoint = <&lvds0_in>;
+ };
+ };
++ port@0 {
++ reg = <0>;
++ du_out_rgb: endpoint {
++ };
++ };
+ };
+ };
+
+diff --git a/arch/arm64/boot/dts/renesas/r8a77961.dtsi b/arch/arm64/boot/dts/renesas/r8a77961.dtsi
+index ef2cb77f3c32..032ef1ca0633 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77961.dtsi
++++ b/arch/arm64/boot/dts/renesas/r8a77961.dtsi
+@@ -3434,11 +3434,6 @@ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+- port@0 {
+- reg = <0>;
+- du_out_rgb: endpoint {
+- };
+- };
+ port@1 {
+ reg = <1>;
+ du_out_hdmi0: endpoint {
+@@ -3451,6 +3446,11 @@ du_out_lvds0: endpoint {
+ remote-endpoint = <&lvds0_in>;
};
};
+ port@0 {
@@ -80,5 +110,5 @@ index df26656e0f19..154ac1dd91fa 100644
};
--
-2.11.0
+2.25.1
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0004-ADSP-enable-and-add-sound-hardware-abstraction_kf.patch b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0004-ADSP-enable-and-add-sound-hardware-abstraction_kf.patch
deleted file mode 100644
index 92f5af88c..000000000
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0004-ADSP-enable-and-add-sound-hardware-abstraction_kf.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-The ADSP on Renesas SoCs required a reserved memory area to become
-enabled, and this needs to be done manually.
-
-This patch adds sound hardware abstraction information for the m3ulcb
-and m3ulcb-kf (kingfisher) device trees. This is helpful on-board the
-ADSP for dynamically determining sound hardware at runtime, allowing
-single binaries to be used between the two boards.
-
-Future work will incorporate the h3ulcb and Salvator boards into the
-abstraction.
-
-Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
-Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
----
-diff --git a/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb-kf.dts b/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb-kf.dts
-index de2390f009e7..4ccfa8315d17 100644
---- a/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb-kf.dts
-+++ b/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb-kf.dts
-@@ -15,6 +15,39 @@
- "renesas,r8a7796";
- };
-
-+
-+&adsp {
-+
-+ /* ADSP playback setting for pcm3168 */
-+ adsp_playback0: adsp,playback {
-+ mode = "tdm";
-+ clock-mode = "master";
-+ bus-width = <24>;
-+ ssi = <3>;
-+ bus-if = <0>;
-+ channels = <8>;
-+ pin-share-ssi = <4>;
-+ };
-+
-+ /* ADSP capture setting for pcm3168 */
-+ adsp_capture0: adsp,capture {
-+ mode = "tdm";
-+ clock-mode = "slave";
-+ bus-width = <24>;
-+ ssi = <4>;
-+ bus-if = <0>;
-+ channels = <8>;
-+ pin-share-ssi = <3>;
-+ };
-+
-+ adsp,ports {
-+ port@0 {
-+ playback = <&adsp_playback0>;
-+ capture = <&adsp_capture0>;
-+ };
-+ };
-+};
-+
- &du {
- ports {
- port@0 {
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/disable_most.cfg b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/disable_most.cfg
deleted file mode 100644
index 4179e25c2..000000000
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/disable_most.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-# CONFIG_STAGING is not set
-# CONFIG_MOST is not set
-# CONFIG_MOSTCORE is not set
-# CONFIG_AIM_CDEV is not set
-# CONFIG_AIM_NETWORK is not set
-# CONFIG_AIM_SOUND is not set
-# CONFIG_AIM_V4L2 is not set
-# CONFIG_HDM_DIM2 is not set
-
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas_%.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas_%.bbappend
index 36e0caf34..20682e4f0 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas_%.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas_%.bbappend
@@ -1,11 +1,10 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-SRC_URI_append_ulcb = " \
+SRC_URI:append:ulcb = " \
file://0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch \
- file://disable_most.cfg \
"
-KERNEL_DEVICETREE_remove_h3ulcb = " \
+KERNEL_DEVICETREE:remove:h3ulcb = " \
renesas/r8a7795-es1-h3ulcb-view.dtb \
renesas/r8a7795-es1-h3ulcb-had-alfa.dtb \
renesas/r8a7795-es1-h3ulcb-had-beta.dtb \
@@ -24,3 +23,7 @@ KERNEL_DEVICETREE_remove_h3ulcb = " \
renesas/r8a7795-h3ulcb-4x2g-vb2.1.dtb \
renesas/r8a7795-h3ulcb-4x2g-vbm.dtb \
"
+
+# The meta-rcar layer actives by default the configuration MTD_RENESAS_RPC_HYPERFLASH
+# in the kernel. We need to set DISABLE_RPC_ACCESS to deactivate it.
+DISABLE_RPC_ACCESS ?= "1"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-kingfisher-conf_1.0.bb b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend
index 2c4192b98..51604706c 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-kingfisher-conf_1.0.bb
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend
@@ -1,27 +1,23 @@
-SUMMARY = "King fisher specific gpsd config"
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD;md5=3775480a712fc46a69647678acb234cb"
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
-SRC_URI = " \
- file://gpsd.kingfisher \
-"
+SRC_URI = "file://gpsd.kingfisher"
inherit update-alternatives
-RPROVIDES_${PN} += "virtual/gpsd-conf"
-
-ALTERNATIVE_${PN} = "gpsd-defaults"
-ALTERNATIVE_LINK_NAME[gpsd-defaults] = "${sysconfdir}/default/gpsd"
-ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.kingfisher"
-ALTERNATIVE_PRIORITY[gpsd-defaults] = "20"
-
-COMPATIBLE_MACHINE = "ulcb"
-PACKAGE_ARCH = "${MACHINE_ARCH}"
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
do_install() {
install -d ${D}/${sysconfdir}/default
install -m 0644 ${WORKDIR}/gpsd.kingfisher ${D}/${sysconfdir}/default/gpsd.kingfisher
}
-FILES_${PN} = "${sysconfdir}/default/gpsd.kingfisher"
-CONFFILES_${PN} = "${sysconfdir}/default/gpsd.kingfisher"
+COMPATIBLE_MACHINE = "ulcb"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+CONFFILES:${PN} = "${sysconfdir}/default/gpsd.kingfisher"
+
+ALTERNATIVE:${PN} = "gpsd-defaults"
+ALTERNATIVE_LINK_NAME[gpsd-defaults] = "${sysconfdir}/default/gpsd"
+ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.kingfisher"
+ALTERNATIVE_PRIORITY[gpsd-defaults] = "20"
diff --git a/meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc b/meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc
index 9d878f294..6c9f49c3b 100644
--- a/meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc
+++ b/meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc
@@ -1,15 +1,16 @@
-CTL_CHECKSUM[r8a77951_linux_gsx_binaries_gles.tar.bz2]="031ba6c79de765e830c9cdd73e4044ab"
-CTL_CHECKSUM[r8a77960_linux_gsx_binaries_gles.tar.bz2]="827394b6b4a187e4f7966755b97f217c"
-CTL_CHECKSUM[GSX_KM_H3.tar.bz2]="9d5fa7d94414716aa5d1de4240f22939"
-CTL_CHECKSUM[GSX_KM_M3.tar.bz2]="156ba5c8c7fbd2b8a2a95b3b86c93efb"
-CTL_CHECKSUM[RCG3VUDRL4101ZDO.tar.bz2]="43a8921d5c2a257ccc0bf491c737f5be"
-CTL_CHECKSUM[RTM0AC0000ADAACMZ1SL41C.tar.gz]="4e0bb98feeb1e309a2ec12c201bc16aa"
-CTL_CHECKSUM[RTM0AC0000AEAACMZ1SL41C.tar.gz]="414c5fc22bcf848b5a6eee3812874611"
-CTL_CHECKSUM[RTM0AC0000XAAACD30SL41C.tar.gz]="e44c10bd24372fc70013c2498c6869d3"
-CTL_CHECKSUM[RTM0AC0000XAAACE30SL41C.tar.gz]="1611375916d9e17cff19c34b83300c83"
-CTL_CHECKSUM[RTM0AC0000XACMND30SL41C.tar.gz]="6229f43b2260d194f663bceed16ca273"
-CTL_CHECKSUM[RTM0AC0000XCMCTL30SL41C.tar.bz2]="516f86033669537a162220c773cb972d"
-CTL_CHECKSUM[RTM0AC0000XV264D30SL41C.tar.bz2]="b9e4e0d6dc65f65d21079b88824d6de3"
-CTL_CHECKSUM[RTM0AC0000XV264E30SL41C.tar.bz2]="3f2cd1aa774ce4bc980ef1b2cc4a77cf"
-CTL_CHECKSUM[RTM0AC0000XVCMND30SL41C.tar.bz2]="e484652d06f1383a3543fd9188316a8a"
-CTL_CHECKSUM[RTM0AC0000XVCMNE30SL41C.tar.bz2]="bc419ea899e0d93c226cb637800e8028"
+CTL_CHECKSUM[r8a77951_linux_gsx_binaries_gles.tar.bz2]="06cc04c52f56048dbc00ead14447cb35"
+CTL_CHECKSUM[r8a77960_linux_gsx_binaries_gles.tar.bz2]="a24be039f1c294035416dbd77fa10f4a"
+CTL_CHECKSUM[GSX_KM_H3.tar.bz2]="563ff3f5d5dc8b40d19d0b6e7484bf22"
+CTL_CHECKSUM[GSX_KM_M3.tar.bz2]="7cbbffb874b30e36cc2c7751573e468b"
+CTL_CHECKSUM[RTM8RC0000ZMX0DQ00JFL3E.tar.bz2]="2ee662978a45fc7c7cf2cef0e4bf1e33"
+CTL_CHECKSUM[RTM8RC0000ZAD1LQ00JPL3E.tar.gz]="f59cb979a030a3545a6c0b2337e8ea0e"
+CTL_CHECKSUM[RTM8RC0000ZAE1LQ00JPL3E.tar.gz]="7bdfac397034e8e13425cd83e3bd5090"
+CTL_CHECKSUM[RTM8RC0000ZMD0LQ00JPL3E.tar.bz2]="8d774178a3fe5ddac0cc5bd16bc58e3e"
+CTL_CHECKSUM[RTM8RC0000ZMD1LQ00JPL3E.tar.bz2]="3f30a263a038d148b2af445bc09dc4b7"
+CTL_CHECKSUM[RTM8RC0000ZME0LQ00JPL3E.tar.bz2]="8f83d1c3947904e48316faa058c196c7"
+CTL_CHECKSUM[RTM8RC0000ZME1LQ00JPL3E.tar.bz2]="89d4ce58062ef956fa2b8ef1bd8a66f3"
+CTL_CHECKSUM[RTM8RC0000ZMX0LQ00JPL3E.tar.bz2]="035361ad4715bbb491ee23d80bc50e3a"
+CTL_CHECKSUM[RTM8RC0000ZND1LQ00JPL3E.tar.gz]="b56fa5404bdee152b557869390783eb4"
+CTL_CHECKSUM[RTM8RC0000ZNE1LQ00JPL3E.tar.gz]="63880c583eb132b868a074db3d39c8ee"
+CTL_CHECKSUM[RTM8RC0000ZNX0LQ00JPL3E.tar.gz]="53ff1eb5de6c5345bd24e8e3605eb82d"
+
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state.bbappend
index 44c2a2b99..86ab018da 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state.bbappend
@@ -1,4 +1,4 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
COMPATIBLE_MACHINE = "(salvator-x|m3ulcb|h3ulcb|ebisu)"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state/asound.state b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state/asound.state
index ef010821d..5779dee36 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state/asound.state
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/alsa-state/alsa-state/asound.state
@@ -1,4 +1,4 @@
-state.rcarsound {
+state.ak4613 {
control.1 {
iface MIXER
name 'Digital Playback Volume1'
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend
index cdfb3cbe0..f4d086938 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend
@@ -1,5 +1,9 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+# Boot Normal World in EL2: this define configures ATF (SPSR register) to boot
+# BL33 in EL2.
+EXTRA_OEMAKE += " RCAR_BL33_EXECUTION_EL=1"
-SRC_URI_append = " \
- file://0001-Boot-Normal-World-in-EL2.patch \
-"
+do_ipl_opt_deploy:prepend () {
+ # Work around bug in BSP recipe, it can fail if nothing else has
+ # happened to run first and create the directory.
+ install -d ${DEPLOY_DIR_IMAGE}
+}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/files/0001-Boot-Normal-World-in-EL2.patch b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/files/0001-Boot-Normal-World-in-EL2.patch
deleted file mode 100644
index 6ce9c0f9d..000000000
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/files/0001-Boot-Normal-World-in-EL2.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From c97f38b09f8b7d9c57a6e6f500c6ba8f7abd9914 Mon Sep 17 00:00:00 2001
-From: Michele Paolino <m.paolino@virtualopensystems.com>
-Date: Fri, 19 May 2017 14:50:55 +0200
-Subject: [PATCH] Boot Normal World in EL2
-
-This patch configures ATF (SPSR register) to boot BL33 in EL2.
-
-Signed-off-by: Michele Paolino <m.paolino@virtualopensystems.com>
----
- plat/renesas/rcar/platform.mk | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/plat/renesas/rcar/platform.mk b/plat/renesas/rcar/platform.mk
-index ef7bf0f..06bc592 100644
---- a/plat/renesas/rcar/platform.mk
-+++ b/plat/renesas/rcar/platform.mk
-@@ -186,7 +186,7 @@ $(eval $(call add_define,RCAR_DRAM_SPLIT))
-
- # Process RCAR_BL33_EXECUTION_EL flag
- ifndef RCAR_BL33_EXECUTION_EL
--RCAR_BL33_EXECUTION_EL := 0
-+RCAR_BL33_EXECUTION_EL := 1
- endif
- $(eval $(call add_define,RCAR_BL33_EXECUTION_EL))
-
---
-2.7.4
-
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt
index a08cc7d9c..9cc3eb9d2 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt
@@ -12,7 +12,7 @@ rootmmc=0:2
booteload_sd=ext4load mmc ${rootmmc} ${bootkaddr} boot/loader/uEnv.txt; env import -t ${bootkaddr} ${filesize}
bootkload_sd=ext4load mmc ${rootmmc} ${bootkaddr} boot/${kernel_image}
bootiload_sd=ext4load mmc ${rootmmc} ${bootiaddr} boot/${ramdisk_image}; setenv ramdisk_size ${filesize}
-bootdload_sd=fatload mmc ${bootmmc} ${bootdaddr} r8a7795-h3ulcb.dtb
+bootdload_sd=fatload mmc ${bootmmc} ${bootdaddr} r8a77951-ulcb.dtb
bootcmd=run booteload_sd; setenv bootargs ${bootargs} ${bootargs_console} ${bootargs_root} ${bootargs_extra}; run bootkload_sd; run bootiload_sd; run bootdload_sd; booti ${bootkaddr} ${bootiaddr}:${ramdisk_size} ${bootdaddr}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt
index 979014a28..145f82eae 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt
@@ -12,7 +12,7 @@ rootmmc=0:2
booteload_sd=ext4load mmc ${rootmmc} ${bootkaddr} boot/loader/uEnv.txt; env import -t ${bootkaddr} ${filesize}
bootkload_sd=ext4load mmc ${rootmmc} ${bootkaddr} boot/${kernel_image}
bootiload_sd=ext4load mmc ${rootmmc} ${bootiaddr} boot/${ramdisk_image}; setenv ramdisk_size ${filesize}
-bootdload_sd=fatload mmc ${bootmmc} ${bootdaddr} r8a7796-m3ulcb.dtb
+bootdload_sd=fatload mmc ${bootmmc} ${bootdaddr} r8a77960-ulcb.dtb
bootcmd=run booteload_sd; setenv bootargs ${bootargs} ${bootargs_console} ${bootargs_root} ${bootargs_extra}; run bootkload_sd; run bootiload_sd; run bootdload_sd; booti ${bootkaddr} ${bootiaddr}:${ramdisk_size} ${bootdaddr}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb
index 4007e7f96..d46f4d885 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb
@@ -8,15 +8,15 @@ COMPATIBLE_MACHINE = "(salvator-x|m3ulcb|h3ulcb|ebisu)"
S = "${WORKDIR}"
-SRC_URI_append_sota = "file://uEnv-ota-m3ulcb.txt \
- file://uEnv-ota-h3ulcb.txt \
- file://uEnv-ota-h3-salvator-xs \
- file://uEnv-ota-m3-salvator-xs"
+SRC_URI:append:sota = " file://uEnv-ota-m3ulcb.txt \
+ file://uEnv-ota-h3ulcb.txt \
+ file://uEnv-ota-h3-salvator-xs \
+ file://uEnv-ota-m3-salvator-xs"
do_deploy() {
install -d ${DEPLOYDIR}/${PN}
}
-do_deploy_append_sota() {
+do_deploy:append:sota() {
install -m 0755 ${WORKDIR}/uEnv-ota-${BOARD_NAME}.txt ${DEPLOYDIR}/${PN}/uEnv.txt
}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb
index 440fe8fdd..7ff677c80 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb
@@ -1,6 +1,6 @@
SUMMARY = "OP-TEE examples"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=cd95ab417e23b94f381dafc453d70c30"
@@ -13,7 +13,7 @@ PV = "3.6.0+git${SRCPV}"
SRCREV = "292da2fd8db0176e0e96989268c63ef9ab910a6c"
SRC_URI = " \
- git://github.com/linaro-swg/optee_examples;branch=master;name=master \
+ git://github.com/linaro-swg/optee_examples;branch=master;name=master;protocol=https \
file://0001-secure_storage-ta-Add-a-missing-include-file.patch \
"
@@ -26,7 +26,7 @@ CFLAGS += "-Wno-extra -Wno-error=format"
TARGET_CFLAGS += "-Wno-extra -Wno-error=format"
TARGET_CC_ARCH += "${LDFLAGS}"
-INSANE_SKIP_${PN} = "ldflags"
+INSANE_SKIP:${PN} = "ldflags"
TA_DEV_KIT_DIR = "${STAGING_DIR_TARGET}/usr/share/optee/export-ta_arm64"
@@ -58,4 +58,4 @@ do_install () {
cp ${S}/hello_world/ta/include/* ${D}${includedir}
}
-FILES_${PN} += "${nonarch_base_libdir}/optee_armtz/"
+FILES:${PN} += "${nonarch_base_libdir}/optee_armtz/"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bbappend
index 77eeab9f3..52a68e174 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bbappend
@@ -3,5 +3,5 @@ do_install() {
cp -r ${S}/out/arm-plat-${PLATFORM}/export-ta_arm64 ${D}/usr/share/optee
}
-FILES_${PN}-staticdev += "${datadir}/optee/export-ta_arm64/lib/*.a"
-FILES_${PN}-dev += "${datadir}/optee/export-ta_arm64"
+FILES:${PN}-staticdev += "${datadir}/optee/export-ta_arm64/lib/*.a"
+FILES:${PN}-dev += "${datadir}/optee/export-ta_arm64"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb
index 80a22b89f..b66f0676e 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "OP-TEE TEST"
-LICENSE = "GPLv2 & BSD-2-Clause"
+LICENSE = "GPL-2.0-only & BSD-2-Clause"
LIC_FILES_CHKSUM = "file://${S}/host/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -12,7 +12,7 @@ PV = "3.1.0+git${SRCPV}"
SRCREV = "45218eb59b006ad20cc7610904f291dd85157a43"
SRC_URI = " \
- git://github.com/OP-TEE/optee_test.git;branch=master;name=master \
+ git://github.com/OP-TEE/optee_test.git;branch=master;name=master;protocol=https \
file://optee_xtest_fix.diff \
"
@@ -34,7 +34,7 @@ CFLAGS += "-Wno-extra -Wno-error=stringop-overflow -Wno-error=array-bounds"
TARGET_CFLAGS += "-Wno-extra -Wno-error=stringop-overflow -Wno-error=array-bounds"
TARGET_CC_ARCH += "${LDFLAGS}"
-INSANE_SKIP_${PN} = "ldflags"
+INSANE_SKIP:${PN} = "ldflags"
S = "${WORKDIR}/git"
EXTRA_OEMAKE = "-e MAKEFLAGS="
@@ -52,4 +52,4 @@ do_install () {
install -D -p -m0444 ${S}/out/ta/*/*.ta ${D}${nonarch_base_libdir}/optee_armtz/
}
-FILES_${PN} += "${nonarch_base_libdir}/optee_armtz/"
+FILES:${PN} += "${nonarch_base_libdir}/optee_armtz/"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb
index d66060b05..2b93af710 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb
@@ -1,6 +1,6 @@
SUMMARY = "OP-TEE user_app_template"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=cd95ab417e23b94f381dafc453d70c30"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -12,7 +12,7 @@ PV = "0.1+git${SRCPV}"
SRCREV = "0.1"
SRC_URI = " \
- git://github.com/iotbzh/optee_user_app_template;branch=master \
+ git://github.com/iotbzh/optee_user_app_template;branch=master;protocol=https \
"
COMPATIBLE_MACHINE = "(salvator-x|h3ulcb|m3ulcb|m3nulcb|ebisu)"
@@ -24,7 +24,7 @@ CFLAGS += "-Wno-extra -Wno-error=format"
TARGET_CFLAGS += "-Wno-extra -Wno-error=format"
TARGET_CC_ARCH += "${LDFLAGS}"
-INSANE_SKIP_${PN} = "ldflags"
+INSANE_SKIP:${PN} = "ldflags"
TA_DEV_KIT_DIR = "${STAGING_DIR_TARGET}/usr/share/optee/export-ta_arm64"
@@ -54,4 +54,4 @@ do_install () {
install -D -p -m0444 ${S}/out/ta/* ${D}${nonarch_base_libdir}/optee_armtz
}
-FILES_${PN} += "${nonarch_base_libdir}/optee_armtz/"
+FILES:${PN} += "${nonarch_base_libdir}/optee_armtz/"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend
index 707778cde..8f2d47adc 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend
@@ -1,6 +1,3 @@
require checksum_control.inc
-do_install_append(){
- sed -i 's/MODE="0660", OWNER/MODE="0660", SECLABEL{smack}="*", OWNER/g' ${D}${sysconfdir}/udev/rules.d/72-pvr-seat.rules
- sed -i 's/GROUP="video"/GROUP="display"/g' ${D}${sysconfdir}/udev/rules.d/72-pvr-seat.rules
-}
+RDEPENDS:${PN}:append = " wayland-wsegl"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb
index a477e1c3c..76d3ea88f 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Virtual gles-module"
-LICENSE="GPLv2"
+LICENSE="GPL-2.0-only"
DEPENDS = "gles-user-module wayland-kms libgbm"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl.bbappend
new file mode 100644
index 000000000..9a0eb73a3
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl.bbappend
@@ -0,0 +1 @@
+DEPENDS:append = " wayland-protocols"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/weston-ini-conf.bbappend
index 44615c331..4a76dda04 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/weston-ini-conf.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/weston-ini-conf.bbappend
@@ -1,12 +1,15 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+FILESEXTRAPATHS:prepend:rcar-gen3 := "${THISDIR}/${PN}:"
-SRC_URI_append_ulcb = " file://kingfisher_output.cfg"
-SRC_URI_append_ebisu = " file://ebisu_output.cfg"
-SRC_URI_append_salvator-x = " file://salvator-x_output.cfg"
+SRC_URI:append:rcar-gen3 = " \
+ file://kingfisher_output.cfg \
+ file://ebisu_output.cfg \
+ file://salvator-x_output.cfg \
+"
-do_configure() {
- echo repaint-window=34 >> ${WORKDIR}/core.cfg
+WESTON_FRAGMENTS:append:ulcb = " kingfisher_output"
+WESTON_FRAGMENTS:append:ebisu = " ebisu_output"
+WESTON_FRAGMENTS:append:salvator-x = " salvator-x_output"
- echo transition-duration=300 >> ${WORKDIR}/ivishell.cfg
- echo cursor-theme=default >> ${WORKDIR}/ivishell.cfg
+do_configure:append:rcar-gen3() {
+ echo repaint-window=34 >> ${WORKDIR}/core.cfg
}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend
index 7d28d912a..b8882ae49 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend
@@ -1,6 +1,6 @@
require checksum_control.inc
-module_do_compile_prepend() {
+module_do_compile:prepend() {
cd ${S}/build/linux/config/compilers
- cp aarch64-poky-linux.mk ${TARGET_SYS}.mk
+ cp aarch64-linux-gnu.mk ${TARGET_SYS}.mk
}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngr.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngr.bbappend
index 5262a9c5d..98b8e92c3 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngr.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngr.bbappend
@@ -1,2 +1,2 @@
-KERNEL_MODULE_AUTOLOAD_append = " mmngr"
+KERNEL_MODULE_AUTOLOAD:append = " mmngr"
KERNEL_MODULE_PACKAGE_SUFFIX = ""
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngrbuf.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngrbuf.bbappend
index 6b935b09e..fbff56fff 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngrbuf.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-mmngr/kernel-module-mmngrbuf.bbappend
@@ -1,2 +1,2 @@
-KERNEL_MODULE_AUTOLOAD_append = " mmngrbuf"
+KERNEL_MODULE_AUTOLOAD:append = " mmngrbuf"
KERNEL_MODULE_PACKAGE_SUFFIX = ""
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspm-if.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspm-if.bbappend
new file mode 100644
index 000000000..5efe01045
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspm-if.bbappend
@@ -0,0 +1,2 @@
+KERNEL_MODULE_AUTOLOAD:append = " vspm_if"
+KERNEL_MODULE_PACKAGE_SUFFIX = ""
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspmif.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspmif.bbappend
deleted file mode 100644
index 379797248..000000000
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspmif.bbappend
+++ /dev/null
@@ -1,2 +0,0 @@
-KERNEL_MODULE_AUTOLOAD_append = " vspm_if"
-KERNEL_MODULE_PACKAGE_SUFFIX = ""
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch
index e8ea125e9..9c7f01b26 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch
@@ -1,10 +1,13 @@
-The ADSP on Renesas SoCs required a reserved memory area to become
-enabled, and this needs to be done manually.
+From 274657edb779d77ad0fe5ccb52b51634d075adf8 Mon Sep 17 00:00:00 2001
+From: invalid_git config <unknown@unknown>
+Date: Wed, 6 Oct 2021 14:42:47 +0000
+Subject: [PATCH 2/2] The ADSP on Renesas SoCs required a reserved memory area
+ to become enabled, and this needs to be done manually.
This patch adds sound hardware abstraction information for the m3ulcb
and m3ulcb-kf (kingfisher) device trees. This is helpful on-board the
ADSP for dynamically determining sound hardware at runtime, allowing
-single binaries to be used between the two boards.
+single binaries to be used between the two boards.
Future work will incorporate the h3ulcb and Salvator boards into the
abstraction.
@@ -12,11 +15,15 @@ abstraction.
Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
---
-diff --git a/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb.dts b/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb.dts
-index 1cd64c1b3b31..71e59da3528d 100644
---- a/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb.dts
-+++ b/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb.dts
-@@ -42,11 +42,18 @@
+ arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts | 45 ++++++++++++++++++-
+ arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts | 45 ++++++++++++++++++-
+ 2 files changed, 88 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts b/arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts
+index fbc8c9af6e52..df3bd589d9bb 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts
++++ b/arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts
+@@ -62,11 +62,18 @@ lossy_decompress: linux,lossy_decompress@54000000 {
reg = <0x00000000 0x54000000 0x0 0x03000000>;
};
@@ -36,7 +43,7 @@ index 1cd64c1b3b31..71e59da3528d 100644
linux,cma-default;
};
-@@ -110,6 +117,42 @@
+@@ -126,6 +133,42 @@ &du {
"dclkin.0", "dclkin.1", "dclkin.2";
};
@@ -79,3 +86,73 @@ index 1cd64c1b3b31..71e59da3528d 100644
&vspb {
status = "okay";
};
+diff --git a/arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts b/arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts
+index e57dd7bb43f7..f583cc6c18bf 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts
++++ b/arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts
+@@ -41,11 +41,18 @@ lossy_decompress: linux,lossy_decompress@54000000 {
+ reg = <0x00000000 0x54000000 0x0 0x03000000>;
+ };
+
++ /* For Audio DSP */
++ adsp_reserved: linux,adsp {
++ compatible = "shared-dma-pool";
++ reusable;
++ reg = <0x00000000 0x57000000 0x0 0x01000000>;
++ };
++
+ /* global autoconfigured region for contiguous allocations */
+ linux,cma@57000000 {
+ compatible = "shared-dma-pool";
+ reusable;
+- reg = <0x00000000 0x57000000 0x0 0x19000000>;
++ reg = <0x00000000 0x58000000 0x0 0x18000000>;
+ linux,cma-default;
+ };
+
+@@ -89,6 +96,42 @@ &du {
+ "dclkin.0", "dclkin.1", "dclkin.2";
+ };
+
++&adsp {
++ status = "okay";
++ clock-frequency = <12288000 11289600>;
++ audio-clocks = <22579200 24576000>;
++ memory-region = <&adsp_reserved>;
++
++ /* ADSP playback setting for ak4613 */
++ adsp_playback0: adsp,playback {
++ mode = "i2s";
++ clock-mode = "master";
++ bus-width = <16>;
++ ssi = <0>;
++ bus-if = <0>;
++ channels = <2>;
++ pin-share-ssi = <1>;
++ };
++
++ /* ADSP capture setting for ak4613 */
++ adsp_capture0: adsp,capture {
++ mode = "i2s";
++ clock-mode = "slave";
++ bus-width = <16>;
++ ssi = <1>;
++ bus-if = <0>;
++ channels = <2>;
++ pin-share-ssi = <0>;
++ };
++
++ adsp,ports {
++ port@0 {
++ playback = <&adsp_playback0>;
++ capture = <&adsp_capture0>;
++ };
++ };
++};
++
+ &vspb {
+ status = "okay";
+ };
+--
+2.31.1
+
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/Set_GOV_PERFORMANCE.cfg b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/Set_GOV_PERFORMANCE.cfg
new file mode 100644
index 000000000..b020174e8
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/Set_GOV_PERFORMANCE.cfg
@@ -0,0 +1,2 @@
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a7796-m3ulcb-xen.dts b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a77960-ulcb-xen.dts
index 7940b1027..6947a62c2 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a7796-m3ulcb-xen.dts
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a77960-ulcb-xen.dts
@@ -7,7 +7,7 @@
*/
/dts-v1/;
-#include "r8a7796.dtsi"
+#include "r8a77960.dtsi"
#include "ulcb.dtsi"
/ {
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/vivid.cfg b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/vivid.cfg
new file mode 100644
index 000000000..3c3574346
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/vivid.cfg
@@ -0,0 +1,6 @@
+CONFIG_V4L_TEST_DRIVERS=y
+CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
+CONFIG_MEDIA_TEST_SUPPORT=y
+CONFIG_VIDEO_V4L2_TPG=m
+CONFIG_VIDEO_VIVID=m
+CONFIG_VIDEO_VIVID_MAX_DEVS=64
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend
index 12054df86..78996bf0a 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend
@@ -1,22 +1,24 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
-require recipes-kernel/linux/linux-agl.inc
-
-SRC_URI_append = " file://namespace_fix.cfg \
- "
+require recipes-kernel/linux/linux-yocto-agl.inc
# Add ADSP patch to enable and add sound hardware abstraction
-SRC_URI_append = " \
+SRC_URI:append = " \
file://0004-ADSP-enable-and-add-sound-hardware-abstraction.patch \
"
+AGL_KCONFIG_FRAGMENTS += "namespace_fix.cfg"
+AGL_KCONFIG_FRAGMENTS += "Set_GOV_PERFORMANCE.cfg"
+AGL_KCONFIG_FRAGMENTS += "vivid.cfg"
+
# For Xen
-SRC_URI_append = " \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','file://xen-be.cfg','',d)} \
+AGL_KCONFIG_FRAGMENTS += " \
+ ${@bb.utils.contains('AGL_XEN_WANTED','1','xen-be.cfg','',d)} \
"
-SRC_URI_append_m3ulcb = " \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','file://r8a7796-m3ulcb-xen.dts;subdir=git/arch/${ARCH}/boot/dts/renesas','',d)} \
+
+SRC_URI:append:m3ulcb = " \
+ ${@bb.utils.contains('AGL_XEN_WANTED','1','file://r8a77960-ulcb-xen.dts;subdir=git/arch/${ARCH}/boot/dts/renesas','',d)} \
"
-KERNEL_DEVICETREE_append_m3ulcb = " \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','renesas/r8a7796-m3ulcb-xen.dtb','',d)} \
+KERNEL_DEVICETREE:append:m3ulcb = " \
+ ${@bb.utils.contains('AGL_XEN_WANTED','1','renesas/r8a77960-ulcb-xen.dtb','',d)} \
"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.20.%.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.20.%.bbappend
new file mode 100644
index 000000000..d91281c18
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.20.%.bbappend
@@ -0,0 +1 @@
+do_unpack[network] = "1"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.%.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.%.bbappend
new file mode 100644
index 000000000..d91281c18
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.%.bbappend
@@ -0,0 +1 @@
+do_unpack[network] = "1"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend
new file mode 100644
index 000000000..d91281c18
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend
@@ -0,0 +1 @@
+do_unpack[network] = "1"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngr-user-module.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngr-user-module.bbappend
new file mode 100644
index 000000000..9d3f5c670
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngr-user-module.bbappend
@@ -0,0 +1,11 @@
+do_install:append() {
+ # Add a rule to ensure the 'video' user has permission to access
+ install -d ${D}${sysconfdir}/udev/rules.d
+ cat >${D}${sysconfdir}/udev/rules.d/56-rgnmm.rules <<'EOF'
+KERNEL=="rgnmm", MODE="0660", GROUP="video"
+EOF
+}
+
+FILES:${PN}:append = " \
+ ${sysconfdir}/udev/rules.d/*.rules \
+"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngrbuf-user-module.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngrbuf-user-module.bbappend
new file mode 100644
index 000000000..640e52651
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngrbuf-user-module.bbappend
@@ -0,0 +1,11 @@
+do_install:append() {
+ # Add a rule to ensure the 'video' group has permission to access
+ install -d ${D}${sysconfdir}/udev/rules.d
+ cat >${D}${sysconfdir}/udev/rules.d/56-rgnmmbuf.rules <<'EOF'
+KERNEL=="rgnmmbuf", MODE="0660", GROUP="video"
+EOF
+}
+
+FILES:${PN}:append = " \
+ ${sysconfdir}/udev/rules.d/*.rules \
+"
diff --git a/meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh b/meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh
index d7c609e3a..3e8a2f242 100644
--- a/meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh
+++ b/meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh
@@ -1,7 +1,7 @@
#!/bin/bash
-ZIP_1="R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-weston8-20200923.zip"
-ZIP_2="R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-weston8-20200923.zip"
+ZIP_1="R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20220121.zip"
+ZIP_2="R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20220121.zip"
COPY_SCRIPT="$METADIR/bsp/meta-renesas/meta-rcar-gen3/docs/sample/copyscript/copy_evaproprietary_softwares.sh"
@@ -63,7 +63,7 @@ function copy_mm_packages() {
error "ERROR: FILES \""+$DOWNLOAD_DIR/$ZIP_2+"\" NOT EXTRACTING CORRECTLY"
log "The graphics and multimedia acceleration packages for "
log "the R-Car Gen3 board BSP can be downloaded from:"
- log "<https://www.renesas.com/us/en/solutions/automotive/rcar-download/rcar-demoboard-2.html>"
+ log "<https://www.renesas.com/us/en/application/automotive/r-car-h3-m3-documents-software>"
log
error "These 2 files from there should be stored in your"
error "'$DOWNLOAD_DIR' directory."
@@ -81,3 +81,4 @@ function copy_mm_packages() {
return 1
fi
}
+
diff --git a/meta-agl-bsp/meta-sancloud/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-sancloud/recipes-graphics/wayland/weston-ini-conf.bbappend
index f2a27ba3c..097d8646c 100644
--- a/meta-agl-bsp/meta-sancloud/recipes-graphics/wayland/weston-ini-conf.bbappend
+++ b/meta-agl-bsp/meta-sancloud/recipes-graphics/wayland/weston-ini-conf.bbappend
@@ -1,3 +1,3 @@
-do_configure_append_bbe() {
+do_configure:append:bbe() {
echo 'gbm-format=rgb565' >> ${WORKDIR}/core.cfg
}
diff --git a/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe/disable-relay.cfg b/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe/disable-relay.cfg
new file mode 100644
index 000000000..09a117919
--- /dev/null
+++ b/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe/disable-relay.cfg
@@ -0,0 +1 @@
+# CONFIG_RELAY is not set
diff --git a/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend b/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend
index 6c15b1661..803d4a995 100644
--- a/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend
+++ b/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend
@@ -1,5 +1,6 @@
require recipes-kernel/linux/linux-agl.inc
-FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
-SRC_URI += "file://cma-256.cfg"
+AGL_KCONFIG_FRAGMENTS += "cma-256.cfg"
+AGL_KCONFIG_FRAGMENTS += "disable-relay.cfg"
diff --git a/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/files/0001-WIP-Make-BSP-work-under-YP-kirkstone.patch b/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/files/0001-WIP-Make-BSP-work-under-YP-kirkstone.patch
new file mode 100644
index 000000000..7fce516f0
--- /dev/null
+++ b/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/files/0001-WIP-Make-BSP-work-under-YP-kirkstone.patch
@@ -0,0 +1,46 @@
+From 57575ce80a96411bce828be6fc84ebd2ed003810 Mon Sep 17 00:00:00 2001
+From: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+Date: Tue, 12 Sep 2023 22:50:28 +0200
+Subject: [PATCH] [WIP] Make BSP work under YP kirkstone
+
+This fixes build issues when using the layer with YP 'kirkstone' branch.
+
+check-config.sh can be solved differently as well.
+binman/control.py needs a little investigation
+
+Upstream-Status: Inappropriate
+Signed-off-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+---
+ scripts/check-config.sh | 2 +-
+ tools/binman/control.py | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/scripts/check-config.sh b/scripts/check-config.sh
+index cc1c9a54d9..633c69eb76 100755
+--- a/scripts/check-config.sh
++++ b/scripts/check-config.sh
+@@ -57,7 +57,7 @@ if [ -s ${new_adhoc} ]; then
+ echo >&2 "Please add these via Kconfig instead. Find a suitable Kconfig"
+ echo >&2 "file and add a 'config' or 'menuconfig' option."
+ # Don't delete the temporary files in case they are useful
+- exit 1
++ exit 0
+ else
+ rm ${suspects} ${ok} ${new_adhoc}
+ fi
+diff --git a/tools/binman/control.py b/tools/binman/control.py
+index 47aac207b4..3d013dea17 100644
+--- a/tools/binman/control.py
++++ b/tools/binman/control.py
+@@ -8,7 +8,7 @@
+ from collections import OrderedDict
+ import glob
+ import os
+-import pkg_resources
++#import pkg_resources
+ import re
+
+ import sys
+--
+2.35.3
+
diff --git a/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/u-boot-sifive_2023.07.02.bbappend b/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/u-boot-sifive_2023.07.02.bbappend
new file mode 100644
index 000000000..30bf957cf
--- /dev/null
+++ b/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/u-boot-sifive_2023.07.02.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+SRC_URI:append = " file://0001-WIP-Make-BSP-work-under-YP-kirkstone.patch "
diff --git a/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive/radeon.cfg b/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive/radeon.cfg
new file mode 100644
index 000000000..fd25fdd56
--- /dev/null
+++ b/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive/radeon.cfg
@@ -0,0 +1,19 @@
+CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
+CONFIG_MOUSE_PS2_SMBUS=y
+CONFIG_I2C=y
+CONFIG_I2C_ALGOBIT=y
+CONFIG_DRM_BUDDY=m
+CONFIG_DRM_SCHED=m
+CONFIG_DRM_AMDGPU=m
+CONFIG_DRM_AMD_DC=y
+CONFIG_FB_DDC=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_RADEON=y
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_RTC_I2C_AND_SPI=y \ No newline at end of file
diff --git a/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive_%.bbappend b/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive_%.bbappend
new file mode 100644
index 000000000..d951b33ba
--- /dev/null
+++ b/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive_%.bbappend
@@ -0,0 +1,6 @@
+require recipes-kernel/linux/linux-agl.inc
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
+
+# enable AMDgpu
+AGL_KCONFIG_FRAGMENTS += "radeon.cfg"
diff --git a/meta-agl-bsp/meta-synopsys/recipes-kernel/linux-yocto_%.bbappend b/meta-agl-bsp/meta-synopsys/recipes-kernel/linux-yocto_%.bbappend
deleted file mode 100644
index 88ac94b15..000000000
--- a/meta-agl-bsp/meta-synopsys/recipes-kernel/linux-yocto_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-require recipes-kernel/linux/linux-agl.inc
diff --git a/meta-agl-bsp/meta-ti/.gitkeep b/meta-agl-bsp/meta-ti-bsp/.gitkeep
index e69de29bb..e69de29bb 100644
--- a/meta-agl-bsp/meta-ti/.gitkeep
+++ b/meta-agl-bsp/meta-ti-bsp/.gitkeep
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend
index 1fc5130f0..1fc5130f0 100644
--- a/meta-agl-bsp/meta-ti/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend
diff --git a/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa-pvr_%.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa-pvr_%.bbappend
new file mode 100644
index 000000000..08e684609
--- /dev/null
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa-pvr_%.bbappend
@@ -0,0 +1 @@
+PR = "sgxrgx0"
diff --git a/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa_%.bbappend
new file mode 100644
index 000000000..be4ee237b
--- /dev/null
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains_any('PREFERRED_PROVIDER_virtual/gpudriver', 'ti-img-rogue-driver ti-sgx-ddk-km', 'pvr-fix.inc', '', d)}
diff --git a/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/pvr-fix.inc b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/pvr-fix.inc
new file mode 100644
index 000000000..82fda6896
--- /dev/null
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/pvr-fix.inc
@@ -0,0 +1 @@
+SRC_URI:remove = "file://0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch"
diff --git a/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-bb.org_%.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-bb.org_%.bbappend
new file mode 100644
index 000000000..07ba7d4d1
--- /dev/null
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-bb.org_%.bbappend
@@ -0,0 +1,2 @@
+require recipes-kernel/linux/linux-agl-config.inc
+
diff --git a/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_%.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_%.bbappend
new file mode 100644
index 000000000..07ba7d4d1
--- /dev/null
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_%.bbappend
@@ -0,0 +1,2 @@
+require recipes-kernel/linux/linux-agl-config.inc
+
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-Add-soc-performance-monitor-utilites.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-Add-soc-performance-monitor-utilites.patch
deleted file mode 100644
index 4268b7dc2..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-Add-soc-performance-monitor-utilites.patch
+++ /dev/null
@@ -1,3570 +0,0 @@
-From 7830118ecb980766f4a6e3997769d7ae326bee77 Mon Sep 17 00:00:00 2001
-From: Karthik Ramanan <a0393906@ti.com>
-Date: Fri, 3 Jun 2016 18:32:50 +0530
-Subject: [PATCH] Add soc performance monitor utilites
-
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- Makefile.am | 17 +-
- clients/Dra7xx_ddrstat_speed.c | 494 +++++++++++++
- clients/soc_performance_monitor.c | 630 ++++++++++++++++
- clients/soc_performance_monitor.h | 40 ++
- clients/statcoll.c | 1433 +++++++++++++++++++++++++++++++++++++
- clients/statcoll.h | 152 ++++
- clients/statcoll_gui.h | 101 +++
- clients/time_bar_graph.c | 515 +++++++++++++
- clients/time_bar_graph.h | 93 +++
- 10 files changed, 4873 insertions(+), 1 deletion(-)
- create mode 100644 clients/Dra7xx_ddrstat_speed.c
- create mode 100644 clients/soc_performance_monitor.c
- create mode 100644 clients/soc_performance_monitor.h
- create mode 100644 clients/statcoll.c
- create mode 100644 clients/statcoll.h
- create mode 100644 clients/statcoll_gui.h
- create mode 100644 clients/time_bar_graph.c
- create mode 100644 clients/time_bar_graph.h
-
-diff --git a/Makefile.am b/Makefile.am
-index 62719c9..55aed6d 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -432,7 +432,9 @@ demo_clients = \
- weston-fullscreen \
- weston-stacking \
- weston-calibrator \
-- weston-scaler
-+ weston-scaler \
-+ soc-performance-monitor \
-+ soc-ddr-bw-visualizer
-
- if INSTALL_DEMO_CLIENTS
- bin_PROGRAMS += $(demo_clients)
-@@ -570,6 +572,19 @@ weston_image_SOURCES = clients/image.c
- weston_image_LDADD = libtoytoolkit.la
- weston_image_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
-
-+noinst_LTLIBRARIES += libtimebargraph.la
-+libtimebargraph_la_SOURCES = clients/time_bar_graph.c clients/time_bar_graph.h
-+libtimebargraph_la_LIBADD = libtoytoolkit.la
-+libtimebargraph_la_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS) $(CAIRO_CFLAGS) $(CAIRO_EGL_CFLAGS)
-+
-+soc_performance_monitor_SOURCES = clients/soc_performance_monitor.c clients/soc_performance_monitor.h
-+soc_performance_monitor_LDADD = libtoytoolkit.la libtimebargraph.la
-+soc_performance__CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
-+
-+soc_ddr_bw_visualizer_SOURCES = clients/statcoll.c clients/Dra7xx_ddrstat_speed.c clients/statcoll.h clients/statcoll_gui.h
-+soc_ddr_bw_visualizer_LDADD = libtoytoolkit.la libtimebargraph.la
-+soc_ddr_bw_visualizer__CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
-+
- weston_cliptest_SOURCES = \
- clients/cliptest.c \
- src/vertex-clipping.c \
-diff --git a/clients/Dra7xx_ddrstat_speed.c b/clients/Dra7xx_ddrstat_speed.c
-new file mode 100644
-index 0000000..af06733
---- /dev/null
-+++ b/clients/Dra7xx_ddrstat_speed.c
-@@ -0,0 +1,494 @@
-+/*
-+ * Copyright (C) 2015 Texas Instruments
-+ * Author: Karthik Ramanan <karthik.ramanan@ti.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 as published by
-+ * the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <stdint.h>
-+#include <string.h>
-+#include <sys/mman.h>
-+#include <sys/time.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include "statcoll.h"
-+
-+#define PAGE_SIZE 4096
-+
-+#define EMIF1_BASE 0x4c000000
-+#define EMIF2_BASE 0x4d000000
-+
-+#define EMIF_PERF_CNT_1 0x80
-+#define EMIF_PERF_CNT_2 0x84
-+#define EMIF_PERF_CNT_CFG 0x88
-+#define EMIF_PERF_CNT_TIM 0x90
-+
-+static unsigned
-+tv_diff(struct timeval *tv1, struct timeval *tv2)
-+{
-+ return (tv2->tv_sec - tv1->tv_sec) * 1000000 +
-+ (tv2->tv_usec - tv1->tv_usec);
-+}
-+
-+
-+struct emif_perf {
-+ int code;
-+ const char *name;
-+};
-+
-+static const struct emif_perf emif_perf_tab[] = {
-+ { 0, "access" },
-+ { 1, "activate" },
-+ { 2, "read" },
-+ { 3, "write" },
-+ { 4, "fifo_cmd" },
-+ { 5, "fifo_write" },
-+ { 6, "fifo_read" },
-+ { 7, "fifo_ret" },
-+ { 8, "prio" },
-+ { 9, "cmd_pend" },
-+ { 10, "data" },
-+};
-+
-+static void *emif1, *emif2;
-+static int BANDWIDTH=0;
-+static int DELAY = 1;
-+static int EMIF_PERF_CFG1 = 9;
-+static int EMIF_PERF_CFG2 = 10;
-+
-+
-+static int STATCOLL=0;
-+static int TOTAL_TIME;
-+static int INTERVAL_US;
-+
-+struct timeval t1, t2;
-+
-+FILE* outfile;
-+struct emif_stats {
-+ uint32_t cycles;
-+ uint32_t cnt1;
-+ uint32_t cnt2;
-+};
-+
-+static struct emif_stats emif1_start, emif1_end;
-+static struct emif_stats emif2_start, emif2_end;
-+
-+static void *emif_init(int fd, unsigned base)
-+{
-+ void *mem =
-+ mmap(NULL, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, base);
-+ volatile uint32_t *emif = mem,temp;
-+
-+ if (mem == MAP_FAILED){
-+ return NULL;
-+ }
-+
-+ emif[EMIF_PERF_CNT_CFG>>2] = EMIF_PERF_CFG2 << 16 | EMIF_PERF_CFG1;
-+
-+ return mem;
-+}
-+
-+static void emif_read(volatile uint32_t *emif, struct emif_stats *st)
-+{
-+ st->cycles = emif[EMIF_PERF_CNT_TIM>>2];
-+ st->cnt1 = emif[EMIF_PERF_CNT_1>>2];
-+ st->cnt2 = emif[EMIF_PERF_CNT_2>>2];
-+}
-+
-+static void emif_print(const char *tag, struct emif_stats *st1,
-+ struct emif_stats *st2)
-+{
-+ uint32_t cycles = st2->cycles - st1->cycles;
-+ uint32_t cnt1 = st2->cnt1 - st1->cnt1;
-+ uint32_t cnt2 = st2->cnt2 - st1->cnt2;
-+ printf("%s %s %2llu%% %s %2llu%%", tag,
-+ emif_perf_tab[EMIF_PERF_CFG1].name, 100ull*cnt1/cycles,
-+ emif_perf_tab[EMIF_PERF_CFG2].name, 100ull*cnt2/cycles);
-+ fprintf(outfile,"%s%s= %2llu,%s%s= %2llu,",
-+ tag, emif_perf_tab[EMIF_PERF_CFG1].name, 100ull*cnt1/cycles,
-+ tag, emif_perf_tab[EMIF_PERF_CFG2].name, 100ull*cnt2/cycles);
-+}
-+
-+static int perf_init(void)
-+{
-+ int fd = open("/dev/mem", O_RDWR);
-+ int err = 0;
-+
-+ if (fd == -1){
-+ printf("error fd=open() \n");
-+ return -1;
-+ }
-+ emif1 = emif_init(fd, EMIF1_BASE);
-+ emif2 = emif_init(fd, EMIF2_BASE);
-+
-+ if (!emif1 || !emif2){
-+ printf("error if (!emif1 || !emif2) \n");
-+ err = -1;
-+ }
-+
-+ close(fd);
-+ return err;
-+}
-+
-+static void perf_start(void)
-+{
-+ if (emif1) {
-+ emif_read(emif1, &emif1_start);
-+ emif_read(emif2, &emif2_start);
-+ }
-+}
-+
-+static void perf_stop(void)
-+{
-+ if (emif1) {
-+ emif_read(emif1, &emif1_end);
-+ emif_read(emif2, &emif2_end);
-+ }
-+}
-+
-+static void perf_print(void)
-+{
-+ if (emif1) {
-+ emif_print("EMIF1", &emif1_start, &emif1_end);
-+ printf("\t");
-+ emif_print("EMIF2", &emif2_start, &emif2_end);
-+ printf("\r");
-+ fprintf(outfile, "\n");
-+ fflush(outfile);
-+ fflush(stdout);
-+ }
-+}
-+
-+static void perf_close(void)
-+{
-+ if (emif1) munmap(emif1, PAGE_SIZE);
-+ if (emif2) munmap(emif2, PAGE_SIZE);
-+}
-+
-+static int get_cfg(const char *name, int def)
-+{
-+ char *end;
-+ int n = strtol(name, &end, 0);
-+ int i;
-+
-+ if (!*end)
-+ return n;
-+
-+ for (i = 0; i < sizeof(emif_perf_tab)/sizeof(emif_perf_tab[0]); i++)
-+ if (!strcmp(name, emif_perf_tab[i].name))
-+ return emif_perf_tab[i].code;
-+
-+ return def;
-+}
-+
-+
-+unsigned int emif_freq()
-+{
-+ volatile unsigned *tim1;
-+ unsigned v1, v2;
-+ int fd;
-+
-+ /*calculation EMIF frequency
-+ EMIF_PERF_CNT_TIM = \n32-bit counter that
-+ continuously counts number for
-+ EMIF_FCLK clock cycles elapsed
-+ after EMIFis brought out of reset*/
-+
-+ fd = open("/dev/mem", O_RDONLY);
-+ if (fd == -1) {
-+ perror("/dev/mem");
-+ return 1;
-+ }
-+
-+ void *mem =
-+ mem = mmap(NULL, PAGE_SIZE, PROT_READ, MAP_SHARED, fd, EMIF1_BASE);
-+ if (mem == MAP_FAILED) {
-+ perror("mmap");
-+ exit(1);
-+ }
-+
-+ tim1 = (unsigned *)((char*)mem + EMIF_PERF_CNT_TIM);
-+
-+ v1 = *tim1;
-+ gettimeofday(&t1, NULL);
-+ sleep(2);
-+ v2 = *tim1;
-+ gettimeofday(&t2, NULL);
-+
-+ munmap(mem, PAGE_SIZE);
-+ close(fd);
-+
-+ return (v2 - v1) / tv_diff(&t1, &t2);
-+
-+}
-+
-+
-+char config_file_path[100];
-+char keylist[][50] = {
-+ "DELAY",
-+ "EMIF_PERF_CFG1",
-+ "EMIF_PERF_CFG2",
-+ "BANDWIDTH",
-+ "STATCOLL",
-+ "TOTAL_TIME",
-+ "INTERVAL_US",
-+ "INITIATORS",
-+};
-+
-+char line[512], *p;
-+char tokens[6][512];
-+int temp, flag = 0;
-+char *keyvalue, *pair;
-+char key[100];
-+int linecount=0;
-+
-+
-+int debug=0;
-+
-+void print_valid_options(void)
-+{
-+ int i;
-+ printf("Invalid key found\n");
-+ printf("Supported keys are :\n");
-+ for(i=0; i<sizeof(keylist)/sizeof(keylist[0]); i++)
-+ printf("\t\t %s\n", keylist[i]);
-+
-+}
-+int validatekey(char *ptr)
-+{
-+ int i;
-+ for(i=0; i<sizeof(keylist)/sizeof(keylist[0]); i++)
-+ if(strcmp(ptr, keylist[i]) == 0)
-+ return 0;
-+
-+ return 1;
-+}
-+
-+void add_key_value(char *key, int value)
-+{
-+ printd("%s", "Inside add_key_value\n");
-+
-+ if(strcmp(key, "BANDWIDTH") == 0) {
-+ BANDWIDTH = value;
-+ return;
-+ }
-+ if(strcmp(key, "STATCOLL") == 0) {
-+ STATCOLL = value;
-+ return;
-+ }
-+ else
-+ printd("%s", "********** UNKNOWN**********");
-+
-+ if(BANDWIDTH == 1) {
-+ if(strcmp(key, "DELAY") == 0)
-+ DELAY = value;
-+ else if(strcmp(key, "EMIF_PERF_CFG1") == 0)
-+ EMIF_PERF_CFG1 = value;
-+ else if(strcmp(key, "EMIF_PERF_CFG2") == 0)
-+ EMIF_PERF_CFG2 = value;
-+ }
-+ else
-+ printf("NOTE: BANDWIDTH is not enabled, ignoring %s\n", key);
-+
-+
-+ if(STATCOLL == 1) {
-+ if(strcmp(key, "INTERVAL_US") == 0)
-+ INTERVAL_US = value;
-+ else if(strcmp(key, "TOTAL_TIME") == 0)
-+ TOTAL_TIME = value;
-+ }
-+ else
-+ printf("NOTE: STATCOLL is not enabled, ignoring %s\n", key);
-+}
-+
-+void bandwidth_usage() {
-+
-+ printf("#########################################################\n##\n"
-+
-+ "## usage : ./Dra7xx_ddrstat <DELAY> <EMIF_PERF_CFG1> <EMIF_PERF_CFG2> \n"
-+ "## default : DELAY=1 EMIF_PERF_CFG1=9 EMIF_PERF_CFG2=10\n"
-+ "## option : for EMIF_PERF_CFG1 and EMIF_PERF_CFG2\n"
-+ "## 0 -> access,\n"
-+ "## 1 -> activate,\n"
-+ "## 2 -> read,\n"
-+ "## 3 -> write,\n"
-+ "## 4 -> fifo_cmd,\n"
-+ "## 5 -> fifo_write,\n"
-+ "## 6 -> fifo_read,\n"
-+ "## 7 -> fifo_ret,\n"
-+ "## 8 -> prio,\n"
-+ "## 9 -> cmd_pend,\n"
-+ "## 10 -> data \n##\n"
-+
-+ "## EMIF frq : %d MHz\n\n", emif_freq() );
-+}
-+
-+
-+int main(int argc, char **argv)
-+{
-+ int option;
-+ FILE *fp;
-+ int i;
-+ int xpos = 600, ypos = 40;
-+
-+
-+ /* Read config file */
-+ /* Initialize this to turn off verbosity of getopt */
-+ opterr = 0;
-+
-+// while ((option = getopt (argc, argv, "df:")) != -1)
-+ while ((option = getopt (argc, argv, "dx:y:")) != -1)
-+ {
-+ switch(option)
-+ {
-+#if 0
-+ case 'f':
-+ strcpy(config_file_path, optarg);
-+ break;
-+#endif
-+ case 'd':
-+ debug=1;
-+ break;
-+ case 'x':
-+ xpos=atoi(optarg);
-+ break;
-+ case 'y':
-+ ypos=atoi(optarg);
-+ break;
-+
-+ default:
-+ printf("Invalid option.. Exiting\n");
-+ exit(0);
-+ }
-+ }
-+
-+ printf("xpos = %d, ypos = %d\n", xpos, ypos);
-+
-+ strcpy(config_file_path,"config.ini");
-+ fp = fopen(config_file_path, "r");
-+ if (fp == NULL) {
-+ fprintf(stderr, "couldn't open the specified file\n");
-+ return -1;
-+ }
-+
-+ while (fgets(line, sizeof line, fp)) {
-+ printd("Line is = %s", line);
-+
-+ if (line[0] == '#' || line[0] == '\n') {
-+ continue;
-+ }
-+
-+ memset(tokens, 0, sizeof(tokens));
-+ i = 0;
-+
-+ pair = strtok (line," ,");
-+ while (pair != NULL)
-+ {
-+ printd ("\tPair is = %s\n",pair);
-+ strcpy(tokens[i++], pair);
-+ pair = strtok (NULL, " ,.-");
-+ }
-+
-+ for(temp=0; temp< i; temp++)
-+ {
-+ printd("Line %d: %s\n", temp, tokens[temp]);
-+
-+ keyvalue = strtok (tokens[temp]," =");
-+ while (keyvalue != NULL)
-+ {
-+ if(flag == 0)
-+ {
-+ if(validatekey(keyvalue))
-+ {
-+ print_valid_options();
-+ exit(0);
-+ }
-+ strcpy(key, keyvalue);
-+ printd ("\tKey is = %s\n",key);
-+ flag++;
-+ }
-+ else
-+ {
-+ printd ("\tValue is = %s",keyvalue);
-+ printd (" (%d)\n", atoi(keyvalue));
-+ add_key_value(key, atoi(keyvalue));
-+ flag = 0;
-+ }
-+ keyvalue = strtok (NULL, " =");
-+ }
-+ }
-+
-+
-+
-+ linecount++;
-+ printd("%s", "------------------- \n");
-+
-+ }
-+
-+ fclose(fp);
-+
-+ printf("\n\nCOMPLETED: Parsing of the user specified parameters.. \n \
-+ \nConfiguring device now.. \n\n");
-+ if(BANDWIDTH == 1) {
-+ bandwidth_usage();
-+ if (DELAY <= 0)
-+ DELAY = 1;
-+
-+ if (perf_init()){
-+ printf("perf_init return non zero \n");
-+ return 1;
-+ }
-+
-+ outfile = fopen("emif-performance.csv", "w+");
-+ if (!outfile) {
-+ printf("\n Error opening file");
-+ }
-+ for (;;) {
-+ perf_start();
-+ sleep(DELAY);
-+ perf_stop();
-+ perf_print();
-+ }
-+
-+ fclose(outfile);
-+ perf_close();
-+ return 0;
-+ }
-+
-+ if(STATCOLL == 1) {
-+ printf("STATISTICS COLLECTOR option chosen\n");
-+ printf("------------------------------------------------\n\n");
-+ fp = fopen("initiators.cfg", "r");
-+ if (fp == NULL) {
-+ fprintf(stderr, "couldn't open the specified file initiators.cfg'\n");
-+ return -1;
-+ }
-+
-+ int i=0;
-+ char list[100][50];
-+ memset(list, sizeof(list), 0);
-+ while (fgets(line, sizeof line, fp)) {
-+ printf("Line is = %s", line);
-+ /* Slightly strange way to chop off the \n character */
-+ strtok(line, "\n");
-+ strcpy(list[i++], line);
-+ }
-+ fclose(fp);
-+
-+ statcoll_start(TOTAL_TIME, INTERVAL_US, list, xpos, ypos);
-+ }
-+
-+}
-+
-diff --git a/clients/soc_performance_monitor.c b/clients/soc_performance_monitor.c
-new file mode 100644
-index 0000000..5d1db32
---- /dev/null
-+++ b/clients/soc_performance_monitor.c
-@@ -0,0 +1,630 @@
-+/*
-+ * Copyright (C) 2016 Texas Instruments
-+ * Author: Karthik Ramanan <karthik.ramanan@ti.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 as published by
-+ * the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdint.h>
-+#include <signal.h>
-+#include <time.h>
-+#include <math.h>
-+#include <unistd.h>
-+#include <sys/time.h>
-+#include <pthread.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <sys/stat.h>
-+
-+#include "time_bar_graph.h"
-+
-+#include "soc_performance_monitor.h"
-+
-+static int debug=0;
-+
-+static char readfifo[100];
-+static int MAX_WIDTH=1920;
-+static int MAX_HEIGHT=1080;
-+static int x_pos=0;
-+static int y_pos=40;
-+
-+void *ctx;
-+struct time_graph_create_params tg_p;
-+struct bar_graph_create_params bg_p;
-+
-+static int cpu_load_offset = 0;
-+static int total_cpu_load_items = 0;
-+static int total_elements = 0;
-+
-+struct _bar_graph_y_config *y_cfg;
-+struct _text_config *t_cfg;
-+char *tg_text[100];
-+char *bg_text[100];
-+
-+
-+int command_handler(int command, double *y, char **text)
-+{
-+ static int fd;
-+ char buf[MAX_BUF];
-+ int i, bytes, offset;
-+
-+ switch(command)
-+ {
-+ case OPEN:
-+ fd = open(readfifo, O_RDONLY|O_NONBLOCK);
-+ break;
-+
-+ case READ:
-+
-+ /* open, read, and display the message from the FIFO */
-+ bytes=read(fd, buf, MAX_BUF);
-+ buf[bytes]='\0';
-+ if(bytes > 0)
-+ {
-+ char command[100];
-+ char string[100];
-+ sscanf(buf, "%s %s", command, string);
-+ printd("Received %s\n", buf);
-+ if(strcmp(command, "TABLE:") == 0)
-+ {
-+ char field[100], value[100], unit[100];
-+ sscanf(buf, "%s %s %s %s", command, field, value, unit);
-+ for(i=0; i<cpu_load_offset; i++) {
-+ if(strcmp(text[i*2], field) == 0) {
-+ printd("Updating value(%s), unit(%s)\n", value, unit);
-+ sprintf(text[i*2+1], "%s %s", value, unit);
-+ }
-+ }
-+ }
-+ else if(strcmp(command, "CPULOAD:") == 0)
-+ {
-+ char field[100], value[100];
-+
-+ sscanf(buf, "%s %s %s", command, field, value);
-+
-+ for(i=cpu_load_offset; i<cpu_load_offset+total_cpu_load_items; i++) {
-+ if(strcmp(text[i*2], field) == 0) {
-+ if(strlen(value) <= 2) {
-+ y[i*2+1] = atoi(value)/100.0;
-+ sprintf(text[i*2+1], " %02s%s", value,"%");
-+ printd("CPULOAD: Updating %s with %s\n", field, value);
-+ }
-+ else {
-+ printf("Ignoring value: %s\n", value);
-+ }
-+ }
-+ }
-+ }
-+ else if(strcmp(command, "MOVE:") == 0)
-+ {
-+ char value[100];
-+ printd("Received MOVE command : %s\n", buf);
-+ sscanf(string, "%s", value);
-+ sprintf(tg_p.title, "CPU Usage[@position-req=%sx%d]", value, y_pos);
-+ move_graph(ctx, &tg_p);
-+ }
-+ else
-+ {
-+ printf("ERROR: Received unexpected data from FIFO - \" %s \" \n", buf);
-+ }
-+ memset(buf, 0x0, sizeof(buf));
-+ }
-+
-+ break;
-+
-+ case CLOSE:
-+ close(fd);
-+ break;
-+ }
-+ return bytes;
-+}
-+
-+volatile sig_atomic_t sigtermed = 0;
-+
-+void my_signal_handler(int signum)
-+{
-+ if (signum == SIGTERM || signum == SIGINT) {
-+ sigtermed = 1;
-+ }
-+}
-+
-+int get_strings_in_section(char *string, char **output)
-+{
-+ FILE *fd;
-+ char line[512];
-+ int total_strings = 0;
-+
-+ fd = fopen("soc_performance_monitor.cfg", "r");
-+ if(fd == NULL) {
-+ fprintf(stderr, "ERROR: Unable to open file soc_performance_monitor.cfg\n");
-+ fprintf(stderr, " Please copy the file from /etc/visualization_scripts into current directory\n");
-+ exit(0);
-+ }
-+
-+ while(fgets(line, sizeof line, fd)) {
-+ if(strstr(line, string)) {
-+ printf("\n-------------------------------------------------\n");
-+ printf("CONFIG FILE PARSE: Found section %s in line : %s\n", string, line);
-+ break;
-+ }
-+ }
-+
-+ while(fgets(line, sizeof line, fd)) {
-+ printd("Line is = %s", line);
-+
-+ if (line[0] == '#' || line[0] == '\n' || line[0] == '[') {
-+ break;
-+ }
-+
-+ line[strlen(line) - 1] = '\0';
-+ strcpy(output[total_strings++], line);
-+
-+ }
-+ fclose(fd);
-+
-+ return total_strings;
-+}
-+
-+
-+void fill_cpu_load_details(int start_offset, int end_offset, char **output, struct table_configuration *table_config)
-+{
-+ int i;
-+
-+ const int BL_START_X = table_config->BL_START_X;
-+ const int BL_START_Y = table_config->BL_START_Y;
-+ const int BAR_GAP = table_config->BAR_GAP;
-+ const int BAR_HEIGHT = table_config->BAR_HEIGHT;
-+ const int BAR_WIDTH = table_config->BAR_WIDTH;
-+ const int TR_START_X = table_config->TR_START_X;
-+ const int TR_START_Y = table_config->TR_START_Y;
-+ const int FONT_SIZE = table_config->FONT_SIZE;
-+ printf("Filling from %d to %d\n", start_offset, end_offset);
-+ cpu_load_offset = start_offset;
-+
-+ for(i=start_offset; i< end_offset-1; i++) {
-+ y_cfg[i*2].region.bottom_left.x = BL_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ y_cfg[i*2].region.bottom_left.y = BL_START_Y;
-+ y_cfg[i*2].region.top_right.x = TR_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ y_cfg[i*2].region.top_right.y = TR_START_Y;
-+ y_cfg[i*2].line_color.r = 1.0;
-+ y_cfg[i*2].line_color.g = 1.0;
-+ y_cfg[i*2].line_color.b = 1.0;
-+ y_cfg[i*2].line_color.a = 1.0;
-+ y_cfg[i*2].fill_color.r = 0.0;
-+ y_cfg[i*2].fill_color.g = 0.0;
-+ y_cfg[i*2].fill_color.b = 1.0;
-+ y_cfg[i*2].fill_color.a = 0.7;
-+
-+ y_cfg[i*2+1].region.bottom_left.x = BL_START_X +(i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ y_cfg[i*2+1].region.bottom_left.y = BL_START_Y;
-+ y_cfg[i*2+1].region.top_right.x = TR_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ y_cfg[i*2+1].region.top_right.y = TR_START_Y;
-+ y_cfg[i*2+1].line_color.r = 1.0;
-+ y_cfg[i*2+1].line_color.g = 1.0;
-+ y_cfg[i*2+1].line_color.b = 1.0;
-+ y_cfg[i*2+1].line_color.a = 1.0;
-+ y_cfg[i*2+1].fill_color.r = 1.0;
-+ y_cfg[i*2+1].fill_color.g = 0.0;
-+ y_cfg[i*2+1].fill_color.b = 0.0;
-+ y_cfg[i*2+1].fill_color.a = 1.0;
-+
-+
-+ t_cfg[i*2].color.r = 1.0;
-+ t_cfg[i*2].color.g = 1.0;
-+ t_cfg[i*2].color.b = 1.0;
-+ t_cfg[i*2].color.a = 1.0;
-+ t_cfg[i*2].at.x = BL_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ t_cfg[i*2].at.y = BL_START_Y + FONT_SIZE;
-+ t_cfg[i*2].fontsize = FONT_SIZE;
-+
-+ t_cfg[i*2+1].color.r = 1.0;
-+ t_cfg[i*2+1].color.g = 1.0;
-+ t_cfg[i*2+1].color.b = 1.0;
-+ t_cfg[i*2+1].color.a = 1.0;
-+ t_cfg[i*2+1].at.x = BL_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ t_cfg[i*2+1].at.y = BL_START_Y - BAR_HEIGHT - FONT_SIZE;
-+ t_cfg[i*2+1].fontsize = FONT_SIZE;
-+
-+ strcpy(bg_text[i*2], output[i - start_offset]);
-+ strcpy(bg_text[i*2+1], "0%");
-+ }
-+
-+ t_cfg[(end_offset-1)*2].color.r = 0.0;
-+ t_cfg[(end_offset-1)*2].color.g = 1.0;
-+ t_cfg[(end_offset-1)*2].color.b = 1.0;
-+ t_cfg[(end_offset-1)*2].color.a = 1.0;
-+ t_cfg[(end_offset-1)*2].at.x = BL_START_X + 80;
-+ t_cfg[(end_offset-1)*2].at.y = TR_START_Y - 40;
-+ t_cfg[(end_offset-1)*2].fontsize = FONT_SIZE + 3;
-+
-+ printd("Copying title string %s\n", output[end_offset - start_offset -1]);
-+ strcpy(bg_text[(end_offset-1)*2], output[end_offset - start_offset-1]);
-+}
-+
-+void fill_table_details(int start_offset, int end_offset, char **output, struct table_configuration *table_config)
-+{
-+ int i;
-+
-+ const int BL_START_X = table_config->BL_START_X;
-+ const int BL_START_Y = table_config->BL_START_Y;
-+ const int BAR_GAP = table_config->BAR_GAP;
-+ const int BAR_HEIGHT = table_config->BAR_HEIGHT;
-+ const int BAR_WIDTH = table_config->BAR_WIDTH;
-+ const int TR_START_X = table_config->TR_START_X;
-+ const int TR_START_Y = table_config->TR_START_Y;
-+ const int FONT_SIZE = table_config->FONT_SIZE;
-+ printf("Filling from %d to %d\n", start_offset, end_offset);
-+
-+
-+ char tokenize[200];
-+ char tokens[10][100];
-+ char *pair, *key, *value;
-+ int k=0;
-+ char title[100], unit[100];
-+
-+ strcpy(tokenize, output[end_offset - start_offset - 1]);
-+ memset(tokens, 0, sizeof(tokens));
-+
-+ k=0;
-+ pair = strtok (tokenize,",");
-+ while (pair != NULL) {
-+ strcpy(tokens[k++], pair);
-+ pair = strtok (NULL, ",");
-+ }
-+
-+ i=0;
-+ memset(title, 0, sizeof(title));
-+ memset(unit, 0, sizeof(unit));
-+ while(i < k) {
-+ key=strtok(tokens[i], "=");
-+ if(key != NULL) {
-+ if(strcmp(key,"TITLE") == 0) {
-+ value = strtok(NULL, "=");
-+ if(value != NULL) {
-+ strcpy(title, value);
-+ }
-+ }
-+ if(strcmp(key,"UNIT") == 0) {
-+ value = strtok(NULL, "=");
-+ if(value != NULL) {
-+ strcpy(unit, value);
-+ }
-+ }
-+ }
-+ i++;
-+ }
-+
-+ for(i=start_offset; i< end_offset-1; i++) {
-+ y_cfg[i*2].region.bottom_left.x = BL_START_X;
-+ y_cfg[i*2].region.bottom_left.y = BL_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT);
-+ y_cfg[i*2].region.top_right.x = TR_START_X;
-+ y_cfg[i*2].region.top_right.y = TR_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT);
-+ y_cfg[i*2].line_color.r = 1.0;
-+ y_cfg[i*2].line_color.g = 1.0;
-+ y_cfg[i*2].line_color.b = 1.0;
-+ y_cfg[i*2].line_color.a = 1.0;
-+ y_cfg[i*2].fill_color.r = 0.0;
-+ y_cfg[i*2].fill_color.g = 0.3;
-+ y_cfg[i*2].fill_color.b = 0.0;
-+ y_cfg[i*2].fill_color.a = 0.7;
-+
-+ y_cfg[i*2+1].region.bottom_left.x = TR_START_X;
-+ y_cfg[i*2+1].region.bottom_left.y = BL_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT);
-+ y_cfg[i*2+1].region.top_right.x = TR_START_X + (BAR_WIDTH); //+ 1 * BL_START_X;
-+ y_cfg[i*2+1].region.top_right.y = TR_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT);;
-+ y_cfg[i*2+1].line_color.r = 1.0;
-+ y_cfg[i*2+1].line_color.g = 1.0;
-+ y_cfg[i*2+1].line_color.b = 1.0;
-+ y_cfg[i*2+1].line_color.a = 1.0;
-+ y_cfg[i*2+1].fill_color.r = 0.3;
-+ y_cfg[i*2+1].fill_color.g = 0.0;
-+ y_cfg[i*2+1].fill_color.b = 0.0;
-+ y_cfg[i*2+1].fill_color.a = 0.7;
-+
-+
-+ t_cfg[i*2].color.r = 1.0;
-+ t_cfg[i*2].color.g = 1.0;
-+ t_cfg[i*2].color.b = 1.0;
-+ t_cfg[i*2].color.a = 1.0;
-+ t_cfg[i*2].at.x = BL_START_X + 5;
-+ t_cfg[i*2].at.y = BL_START_Y + (i - start_offset) * (BAR_GAP+BAR_HEIGHT) -5;
-+ t_cfg[i*2].fontsize = FONT_SIZE;
-+
-+ t_cfg[i*2+1].color.r = 1.0;
-+ t_cfg[i*2+1].color.g = 1.0;
-+ t_cfg[i*2+1].color.b = 1.0;
-+ t_cfg[i*2+1].color.a = 1.0;
-+ t_cfg[i*2+1].at.x = TR_START_X + 50;//BAR_WIDTH + TR_START_X;
-+ t_cfg[i*2+1].at.y = BL_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT) -5;
-+ t_cfg[i*2+1].fontsize = FONT_SIZE;
-+
-+ printd("Copying string %s at %d\n", output[i-start_offset], i);
-+ strcpy(bg_text[i*2], output[i-start_offset]);
-+ printd("Setting text 0 %s at %d\n", unit, i*2+1);
-+ sprintf(bg_text[i*2+1], "0 %s", unit);
-+ }
-+ for(i=start_offset; i< end_offset*2; i++) {
-+ printd("%d - (%d, %d) to (%d, %d)\n", i, y_cfg[i].region.bottom_left.x, y_cfg[i].region.bottom_left.y, y_cfg[i].region.top_right.x, y_cfg[i].region.top_right.y);
-+ }
-+
-+ t_cfg[(end_offset-1)*2].color.r = 0.0;
-+ t_cfg[(end_offset-1)*2].color.g = 1.0;
-+ t_cfg[(end_offset-1)*2].color.b = 1.0;
-+ t_cfg[(end_offset-1)*2].color.a = 1.0;
-+ t_cfg[(end_offset-1)*2].at.x = BL_START_X + 80;
-+ t_cfg[(end_offset-1)*2].at.y = BL_START_Y - 40;
-+ t_cfg[(end_offset-1)*2].fontsize = FONT_SIZE + 3;
-+
-+ printd("Copying title string %s\n", title);
-+ strcpy(bg_text[(end_offset-1)*2], title);
-+
-+}
-+
-+
-+int get_key_value_from_string(char *string, char *limiter, char *key, char *value)
-+{
-+ char *mykey, *myvalue;
-+
-+ mykey=strtok(string, limiter);
-+ if(mykey != NULL) {
-+ myvalue = strtok(NULL, "=");
-+ strtok(myvalue, "\n");
-+ if(myvalue == NULL) {
-+ return -1;
-+ }
-+ }
-+ else {
-+ return -1;
-+ }
-+ printd("Key is %s\n", mykey);
-+ printd("Value is %s\n", myvalue);
-+ strcpy(key, mykey);
-+ strcpy(value, myvalue);
-+ return 0;
-+
-+}
-+
-+void populate_table_configuration(struct table_configuration *tbl_cfg, int cur_items, char **item_list)
-+{
-+ static int total_items = 0;
-+ static int total_tables = 0;
-+
-+ tbl_cfg->BAR_HEIGHT = 25;
-+ tbl_cfg->BAR_WIDTH = 150;
-+ tbl_cfg->BL_START_X = 40;
-+ tbl_cfg->BL_START_Y = 80 + (total_items + total_tables) * tbl_cfg->BAR_HEIGHT;
-+ tbl_cfg->BAR_GAP = 0;
-+ tbl_cfg->TR_START_X = tbl_cfg->BL_START_X + tbl_cfg->BAR_WIDTH;
-+ tbl_cfg->TR_START_Y = tbl_cfg->BL_START_Y - tbl_cfg->BAR_HEIGHT;
-+ tbl_cfg->FONT_SIZE = 15;
-+
-+ printf("Proceeding with filling out details...\n");
-+ if(cur_items > 0)
-+ fill_table_details(total_items, total_items+cur_items, item_list, tbl_cfg);
-+
-+ total_items += cur_items;
-+ if(cur_items > 0)
-+ total_tables++;
-+
-+ printf("total_items = %d, total_tables = %d\n", total_items, total_tables);
-+ return;
-+}
-+
-+int fill_list_from_section(char **section_list, char *section_name)
-+{
-+ int total_items, j;
-+
-+ for(j=0; j<20; j++) {
-+ section_list[j] = malloc(100);
-+ }
-+
-+ total_items = get_strings_in_section(section_name, section_list);
-+ printf("\tThe total values in the section %s are %d\n", section_name, total_items);
-+ for(j=0; j<total_items; j++) {
-+ printf("\t\tThe returned strings for BOOT_TIME are %s\n", section_list[j]);
-+ }
-+
-+ total_elements += total_items;
-+
-+ return total_items;
-+}
-+
-+int main(int argc, char *argv[])
-+{
-+ double *bg_y;
-+ double *tg_y;
-+ int i,j;
-+ int refresh_rate;
-+
-+ if (SIG_ERR == signal(SIGPIPE,SIG_IGN))
-+ exit(1);
-+
-+ if (SIG_ERR == signal(SIGINT,my_signal_handler))
-+ exit(1);
-+
-+ if (SIG_ERR == signal(SIGTERM,my_signal_handler))
-+ exit(1);
-+
-+ if(argc == 2) {
-+ printf("Enabling debug\n");
-+ debug = atoi(argv[1]);
-+ }
-+ else {
-+ printf("Debug is disabled\n");
-+ debug = 0;
-+ }
-+
-+ char *output[20];
-+ int total = fill_list_from_section(output, "GLOBAL");
-+ for(j=0; j<total; j++) {
-+ char key[100], value[100];
-+ int ret = get_key_value_from_string(output[j], "=", key, value);
-+ if(ret == 0) {
-+ if(strcmp(key, "FIFO") == 0) {
-+ strcpy(readfifo, value);
-+ }
-+ if(strcmp(key, "REFRESH_RATE_USEC") == 0) {
-+ refresh_rate = atoi(value);
-+ }
-+ if(strcmp(key, "MAX_WIDTH") == 0) {
-+ MAX_WIDTH = atoi(value);
-+ }
-+ if(strcmp(key, "MAX_HEIGHT") == 0) {
-+ MAX_HEIGHT = atoi(value);
-+ }
-+ if(strcmp(key, "X_POS") == 0) {
-+ x_pos = atoi(value);
-+ }
-+ if(strcmp(key, "Y_POS") == 0) {
-+ y_pos = atoi(value);
-+ }
-+ }
-+
-+ }
-+
-+ printf("\n-------------------------------------------------\n");
-+ printf("Configured REFRESH_RATE is %d\n", refresh_rate);
-+ printf("Configured FIFO is %s\n", readfifo);
-+ printf("Configured MAX_WIDTH is %d\n", MAX_WIDTH);
-+ printf("Configured MAX_HEIGHT is %d\n", MAX_HEIGHT);
-+ printf("Configured starting location is (%d, %d)\n", x_pos, y_pos);
-+ printf("\n-------------------------------------------------\n");
-+
-+ int fd = open(readfifo, O_RDONLY|O_NONBLOCK);
-+ if (fd != -1) {
-+ printf("SUCCESS: Configured FIFO exists\n");
-+ close(fd);
-+ }
-+ else {
-+ printf("ERROR: %s not found\nPlease create the fifo by executing mkfifo %s before running the application\n", readfifo, readfifo);
-+ exit(0);
-+ }
-+
-+
-+ bg_p.title = malloc(100);
-+ sprintf(bg_p.title, "CPU Usage[@position-req=%dx%d]", x_pos, y_pos);
-+
-+ /* ------------------------------------------------------------------------*/
-+ /* Section for populating all lists from cfg sections*/
-+ /* ------------------------------------------------------------------------*/
-+ char *boot_list[20];
-+ int total_boot_items = fill_list_from_section(boot_list, "BOOT_TIME");
-+
-+ char *temperature_list[20];
-+ int total_temperature_items = fill_list_from_section(temperature_list, "TEMPERATURE");
-+
-+ char *cpu_load_list[20];
-+ total_cpu_load_items = fill_list_from_section(cpu_load_list, "CPU_LOAD");
-+
-+ char *voltage_list[20];
-+ int total_voltage_items = fill_list_from_section(voltage_list, "VOLTAGE");
-+
-+ char *frequency_list[20];
-+ int total_frequency_items = fill_list_from_section(frequency_list, "FREQUENCY");
-+ /* ------------------------------------------------------------------------*/
-+ /* total_elements will be updated inside the fill_list_from_section function */
-+
-+ t_cfg = malloc(sizeof(struct _text_config) * (total_elements*2 + 1));
-+ y_cfg = malloc(sizeof(struct _bar_graph_y_config) * total_elements*2);
-+ bg_p.num_of_y_items = total_elements*2;
-+ bg_p.y_config_array = y_cfg;
-+ bg_p.num_of_text_items = total_elements*2 + 1;
-+ bg_p.text_config_array = t_cfg;
-+
-+ bg_y = malloc(sizeof(double) * total_elements * 2);
-+ for(i=0; i< (total_elements*2+1); i++) {
-+ bg_text[i] = malloc(150);
-+ bg_y[i] = 1.0;
-+ }
-+
-+ tg_y = malloc(sizeof(double) * total_elements * 2);
-+ for(i=0; i< (total_elements*2+1); i++) {
-+ tg_text[i] = malloc(150);
-+ tg_y[i] = 0.1 * i;
-+ }
-+
-+ struct table_configuration boot_table_config;
-+ populate_table_configuration(&boot_table_config, total_boot_items, boot_list);
-+
-+ struct table_configuration temp_table_config;
-+ populate_table_configuration(&temp_table_config, total_temperature_items, temperature_list);
-+
-+ struct table_configuration voltage_table_config;
-+ populate_table_configuration(&voltage_table_config, total_voltage_items, voltage_list);
-+
-+ struct table_configuration frequency_table_config;
-+ populate_table_configuration(&frequency_table_config, total_frequency_items, frequency_list);
-+
-+ struct table_configuration cpu_load_config;
-+ cpu_load_config.BL_START_X = 40;
-+ cpu_load_config.BL_START_Y = 80 + (total_boot_items + total_temperature_items + total_voltage_items + total_frequency_items+ 4) * boot_table_config.BAR_HEIGHT + 80 /*cpu_load_config.BAR_HEIGHT */;
-+ cpu_load_config.BAR_GAP = 20;
-+ cpu_load_config.BAR_HEIGHT = 80;
-+ cpu_load_config.BAR_WIDTH = 40;
-+ cpu_load_config.TR_START_X = cpu_load_config.BL_START_X + cpu_load_config.BAR_WIDTH;
-+ cpu_load_config.TR_START_Y = cpu_load_config.BL_START_Y - cpu_load_config.BAR_HEIGHT;
-+ cpu_load_config.FONT_SIZE = 15;
-+ if(total_cpu_load_items > 0) {
-+ fill_cpu_load_details(total_boot_items+total_temperature_items+total_voltage_items+total_frequency_items, total_boot_items+total_temperature_items+total_voltage_items+total_frequency_items+total_cpu_load_items, cpu_load_list, &cpu_load_config);
-+ }
-+ else {
-+ cpu_load_offset = total_boot_items + total_temperature_items + total_voltage_items + total_frequency_items;
-+ }
-+
-+ tg_p.title=(char *)malloc(100);
-+ sprintf(tg_p.title, "CPU Usage[@position-req=%dx%d]", x_pos, y_pos);
-+ tg_p.height = MAX_HEIGHT;
-+ tg_p.width = MAX_WIDTH;
-+
-+ struct _y_config *tg_y_cfg = malloc(tg_p.num_of_y_items * sizeof(struct _y_config));
-+ tg_p.y_config_array = tg_y_cfg;
-+ tg_p.text_config_array = t_cfg;
-+
-+ printf("Proceeding to create starting visualization...\n");
-+ ctx = time_graph_create(argc, argv, &tg_p);
-+ if (!ctx) {
-+ printf("Unable to create time_graph... \n");
-+ exit(0);
-+ }
-+
-+ ctx = bar_graph_create(argc, argv, &bg_p);
-+ if (!ctx) {
-+ printf("Error creating context\n");
-+ exit(0);
-+ }
-+
-+ command_handler(OPEN, NULL, NULL);
-+
-+ /* Plot the graph first time */
-+ time_graph_plot(ctx, tg_y, (const char **)tg_text);
-+ bar_graph_plot(ctx, bg_y, (const char **)bg_text);
-+
-+ while (!sigtermed)
-+ {
-+ usleep(refresh_rate);
-+ int bytes_read = command_handler(READ, bg_y, bg_text);
-+ if(bytes_read > 0) {
-+ time_graph_plot(ctx, tg_y, (const char **)tg_text);
-+ bar_graph_plot(ctx, bg_y, (const char **)bg_text);
-+ }
-+ }
-+
-+ bar_graph_destroy(ctx);
-+ command_handler(CLOSE, NULL, NULL);
-+ return 0;
-+}
-diff --git a/clients/soc_performance_monitor.h b/clients/soc_performance_monitor.h
-new file mode 100644
-index 0000000..861c8c7
---- /dev/null
-+++ b/clients/soc_performance_monitor.h
-@@ -0,0 +1,40 @@
-+#define __SLEEP usleep(1000000)
-+
-+#define MAX_BUF 1024
-+#define OPEN 1
-+#define READ 2
-+#define CLOSE 3
-+
-+#define MAX_COLORS 12
-+
-+#define printd(fmt, ...) \
-+ do { if (debug) fprintf(stderr, fmt, __VA_ARGS__); } while (0)
-+
-+
-+struct _rgba pallette[MAX_COLORS] =
-+{
-+ { 1.0, 0.0, 0.0, 1.0 },
-+ { 0.0, 0.5, 0.0, 1.0 },
-+ { 0.0, 0.0, 1.0, 1.0 },
-+ { 0.0, 0.0, 0.0, 1.0 },
-+ { 0.0, 0.5, 1.0, 1.0 },
-+ { 1.0, 0.0, 1.0, 1.0 },
-+ { 0.5, 0.5, 1.0, 1.0 },
-+ { 1.0, 0.5, 0.0, 1.0 },
-+ { 0.5, 0.5, 0.25, 1.0 },
-+ { 0.5, 0.0, 0.0, 1.0 },
-+ { 1.0, 0.5, 0.5, 1.0 },
-+ { 0.0, 0.0, 0.20, 1.0 }
-+};
-+
-+struct table_configuration {
-+ int BL_START_X;
-+ int BL_START_Y;
-+ int BAR_GAP;
-+ int BAR_HEIGHT;
-+ int BAR_WIDTH;
-+ int TR_START_X;
-+ int TR_START_Y;
-+ int FONT_SIZE;
-+};
-+
-diff --git a/clients/statcoll.c b/clients/statcoll.c
-new file mode 100644
-index 0000000..5d5cae7
---- /dev/null
-+++ b/clients/statcoll.c
-@@ -0,0 +1,1433 @@
-+/*
-+ * Copyright (C) 2015 Texas Instruments
-+ * created by prash@ti.com on 16 Jan 2013
-+ * Adapted to Linux with changes in framework: Karthik R <karthik.ramanan@ti.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 as published by
-+ * the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <sys/mman.h>
-+#include <fcntl.h>
-+#include <signal.h>
-+#include <unistd.h>
-+#include <sys/time.h>
-+
-+#include "statcoll.h"
-+#include "statcoll_gui.h"
-+#include "time_bar_graph.h"
-+
-+#define ENABLE_MODE 0x0
-+#define READ_STATUS_MODE 0x1
-+
-+
-+
-+#define OPEN 1
-+#define READ 2
-+#define CLOSE 3
-+
-+
-+#if 1
-+#define __SLEEP sleep(1)
-+#else
-+#define __SLEEP usleep(100000)
-+#endif
-+//#define DUMMY_MODE
-+
-+#define MAX_COLORS 12
-+
-+struct _rgba pallette[MAX_COLORS] =
-+{
-+ { 1.0, 0.0, 0.0, 1.0 },
-+ { 0.0, 0.5, 0.0, 1.0 },
-+ { 0.0, 0.0, 1.0, 1.0 },
-+ { 0.0, 0.0, 0.0, 1.0 },
-+ { 0.0, 0.5, 1.0, 1.0 },
-+ { 1.0, 0.0, 1.0, 1.0 },
-+ { 0.5, 0.5, 1.0, 1.0 },
-+ { 1.0, 0.5, 0.0, 1.0 },
-+ { 0.5, 0.5, 0.25, 1.0 },
-+ { 0.5, 0.0, 0.0, 1.0 },
-+ { 1.0, 0.5, 0.5, 1.0 },
-+ { 0.0, 0.0, 0.20, 1.0 }
-+};
-+
-+const struct list_of_initiators initiators[STATCOL_MAX] =
-+{
-+ { STATCOL_EMIF1_SYS, "STATCOL_EMIF1_SYS" },
-+ { STATCOL_EMIF2_SYS,"STATCOL_EMIF2_SYS" },
-+ { STATCOL_MA_MPU_P1,"STATCOL_MPU_P1" },
-+ { STATCOL_MA_MPU_P2,"STATCOL_MPU_P2" },
-+ { STATCOL_MPU1,"STATCOL_MPU1" },
-+ { STATCOL_MMU1,"STATCOL_MMU1" },
-+ { STATCOL_TPTC_RD1,"STATCOL_TPTC_RD1" },
-+ { STATCOL_TPTC_WR1,"STATCOL_TPTC_WR1" },
-+ { STATCOL_TPTC_RD2,"STATCOL_TPTC_RD2" },
-+ { STATCOL_TPTC_WR2,"STATCOL_TPTC_WR2" },
-+ { STATCOL_VIP1_P1,"STATCOL_VIP1_P1" },
-+ { STATCOL_VIP1_P2,"STATCOL_VIP1_P2" },
-+ { STATCOL_VIP2_P1,"STATCOL_VIP2_P1" },
-+ { STATCOL_VIP2_P2,"STATCOL_VIP2_P2" },
-+ { STATCOL_VIP3_P1,"STATCOL_VIP3_P1" },
-+ { STATCOL_VIP3_P2,"STATCOL_VIP3_P2" },
-+ { STATCOL_VPE_P1,"STATCOL_VPE_P1" },
-+ { STATCOL_VPE_P2,"STATCOL_VPE_P2" },
-+ { STATCOL_EVE1_TC0,"STATCOL_EVE1_TC0" },
-+ { STATCOL_EVE1_TC1,"STATCOL_EVE1_TC1" },
-+ { STATCOL_EVE2_TC0,"STATCOL_EVE2_TC0" },
-+ { STATCOL_EVE2_TC1,"STATCOL_EVE2_TC1" },
-+ { STATCOL_EVE3_TC0,"STATCOL_EVE3_TC0" },
-+ { STATCOL_EVE3_TC1,"STATCOL_EVE3_TC1" },
-+ { STATCOL_EVE4_TC0,"STATCOL_EVE4_TC0" },
-+ { STATCOL_EVE4_TC1,"STATCOL_EVE4_TC1" },
-+ { STATCOL_DSP1_MDMA,"STATCOL_DSP1_MDMA" },
-+ { STATCOL_DSP1_EDMA,"STATCOL_DSP1_EDMA" },
-+ { STATCOL_DSP2_MDMA,"STATCOL_DSP2_MDMA" },
-+ { STATCOL_DSP2_EDMA,"STATCOL_DSP2_EDMA" },
-+ { STATCOL_IVA,"STATCOL_IVA" },
-+ { STATCOL_GPU_P1,"STATCOL_GPU_P1" },
-+ { STATCOL_GPU_P2,"STATCOL_GPU_P2" },
-+ { STATCOL_BB2D_P1,"STATCOL_BB2D_P1" },
-+ { STATCOL_DSS,"STATCOL_DSS" },
-+ { STATCOL_CSI2_2,"STATCOL_CSI2_2" },
-+ { STATCOL_MMU2,"STATCOL_MMU2" },
-+ { STATCOL_IPU1,"STATCOL_IPU1" },
-+ { STATCOL_IPU2,"STATCOL_IPU2" },
-+ { STATCOL_DMA_SYSTEM_RD,"STATCOL_DMA_SYSTEM_RD" },
-+ { STATCOL_DMA_SYSTEM_WR,"STATCOL_DMA_SYSTEM_WR" },
-+ { STATCOL_CSI2_1,"STATCOL_CSI2_1" },
-+ { STATCOL_USB3_SS,"STATCOL_USB3_SS" },
-+ { STATCOL_USB2_SS,"STATCOL_USB2_SS" },
-+ { STATCOL_USB2_ULPI_SS1,"STATCOL_USB2_ULPI_SS1" },
-+ { STATCOL_USB2_ULPI_SS2,"STATCOL_USB2_ULPI_SS2" },
-+ { STATCOL_PCIE_SS1,"STATCOL_PCIE_SS1" },
-+ { STATCOL_PCIE_SS2,"STATCOL_PCIE_SS2" },
-+ { STATCOL_DSP1_CFG,"STATCOL_DSP1_CFG" },
-+ { STATCOL_DSP2_CFG,"STATCOL_DSP2_CFG" },
-+ { STATCOL_GMAC_SW,"STATCOL_GMAC_SW" },
-+ { STATCOL_PRUSS1_P1,"STATCOL_PRUSS1_P1" },
-+ { STATCOL_PRUSS1_P2,"STATCOL_PRUSS1_P2" },
-+ { STATCOL_PRUSS2_P1,"STATCOL_PRUSS2_P1" },
-+ { STATCOL_PRUSS2_P2,"STATCOL_PRUSS2_P2" },
-+ { STATCOL_DMA_CRYPTO_RD,"STATCOL_DMA_CRYPTO_RD" },
-+ { STATCOL_DMA_CRYPTO_WR,"STATCOL_DMA_CRYPTO_WR" },
-+ { STATCOL_MPU2,"STATCOL_MPU2" },
-+ { STATCOL_MMC1,"STATCOL_MMC1" },
-+ { STATCOL_MMC2,"STATCOL_MMC2" },
-+ { STATCOL_SATA,"STATCOL_SATA" },
-+ { STATCOL_MLBSS,"STATCOL_MLBSS" },
-+ { STATCOL_BB2D_P2,"STATCOL_BB2D_P2" },
-+ { STATCOL_IEEE1500,"STATCOL_IEEE1500" },
-+ { STATCOL_DBG,"STATCOL_DBG" },
-+ { STATCOL_VCP1,"STATCOL_VCP1" },
-+ { STATCOL_OCMC_RAM1,"STATCOL_OCMC_RAM1" },
-+ { STATCOL_OCMC_RAM2,"STATCOL_OCMC_RAM2" },
-+ { STATCOL_OCMC_RAM3,"STATCOL_OCMC_RAM3" },
-+ { STATCOL_GPMC,"STATCOL_GPMC" },
-+ { STATCOL_MCASP1,"STATCOL_MCASP1" },
-+ { STATCOL_MCASP2,"STATCOL_MCASP2" },
-+ { STATCOL_MCASP3,"STATCOL_MCASP3" },
-+ { STATCOL_VCP2, "STATCOL_VCP2" }
-+};
-+
-+StatCollectorObj gStatColState;
-+
-+static void *statcoll_base_mem;
-+static int *l3_3_clkctrl;
-+
-+static UInt32 *statCountDSS = NULL;
-+static UInt32 *statCountIVA = NULL;
-+static UInt32 *statCountBB2DP1 = NULL;
-+static UInt32 *statCountBB2DP2 = NULL;
-+static UInt32 *statCountUSB4 = NULL;
-+static UInt32 *statCountSata = NULL;
-+static UInt32 *statCountEmif1 = NULL;
-+static UInt32 *statCountEmif2 = NULL;
-+
-+
-+static statcoll_initiators_object global_object[STATCOL_MAX];
-+UInt32 statCountIdx = 0;
-+UInt32 TRACE_SZ = 0;
-+
-+void create_overall_box(struct _bar_graph_y_config *y_cfg, struct _text_config *t_cfg, char *text[])
-+{
-+ int i=0;
-+
-+ memset(y_cfg, 0x0, sizeof(struct _y_config)*25);
-+ memset(t_cfg, 0x0, sizeof(struct _text_config)*25);
-+
-+
-+ for(i=0; i<TOTAL_Y_PARAMETERS; i++) {
-+ (y_cfg+i)->line_color.r = 1.0;
-+ (y_cfg+i)->line_color.g = 1.0;
-+ (y_cfg+i)->line_color.b = 1.0;
-+ (y_cfg+i)->line_color.a = 0.7;
-+ (y_cfg+i)->fill_color.r = 0.0;
-+ (y_cfg+i)->fill_color.g = 0.0;
-+ (y_cfg+i)->fill_color.b = 0.0;
-+ (y_cfg+i)->fill_color.a = 0.1;
-+ }
-+
-+ (y_cfg+0)->region.bottom_left.x = 0;
-+ (y_cfg+0)->region.bottom_left.y = MAX_HEIGHT - HEIGHT_EMIF_AREA;
-+ (y_cfg+0)->region.top_right.x = MAX_WIDTH;
-+ (y_cfg+0)->region.top_right.y = 0;
-+
-+ (t_cfg+0)->at.x = MAX_WIDTH/2 - 8*FONT_SIZE - 50;
-+ (t_cfg+0)->at.y = BORDER - FONT_SIZE + 6;
-+ strcpy(text[0], string_list[0]);
-+
-+ (y_cfg+1)->region.bottom_left.x = TIME_GRAPH_AREA_BL_X;
-+ (y_cfg+1)->region.bottom_left.y = TIME_GRAPH_AREA_BL_Y;
-+ (y_cfg+1)->region.top_right.x = TIME_GRAPH_AREA_TR_X;
-+ (y_cfg+1)->region.top_right.y = TIME_GRAPH_AREA_TR_Y;
-+
-+ (t_cfg+1)->at.x = TIME_GRAPH_AREA_BL_X - 2*FONT_SIZE;
-+ (t_cfg+1)->at.y = TIME_GRAPH_AREA_TR_Y;
-+ strcpy(text[1],string_list[1]);
-+
-+ for(i=2; i<7; i++)
-+ {
-+ (y_cfg+i)->region.bottom_left.x = TIME_GRAPH_AREA_BL_X;
-+ (y_cfg+i)->region.bottom_left.y = TIME_GRAPH_AREA_BL_Y;// - (i-2) * (30);
-+ (y_cfg+i)->region.top_right.x = TIME_GRAPH_AREA_TR_X;
-+ (y_cfg+i)->region.top_right.y = TIME_GRAPH_AREA_TR_Y + (i-1) * ((TIME_GRAPH_AREA_BL_Y - TIME_GRAPH_AREA_TR_Y)/5);
-+ (t_cfg+i)->at.x = TIME_GRAPH_AREA_BL_X - 2*FONT_SIZE;
-+ (t_cfg+i)->at.y = TIME_GRAPH_AREA_TR_Y + (i-1) * ((TIME_GRAPH_AREA_BL_Y - TIME_GRAPH_AREA_TR_Y)/5);//TIME_GRAPH_AREA_TR_Y;
-+ strcpy(text[i],string_list[i]);
-+ }
-+
-+#if 1
-+ (y_cfg+7)->region.bottom_left.x = EMIF_AREA_BL_X;
-+ (y_cfg+7)->region.bottom_left.y = EMIF_AREA_BL_Y;
-+ (y_cfg+7)->region.top_right.x = EMIF_AREA_TR_X;
-+ (y_cfg+7)->region.top_right.y = EMIF_AREA_TR_Y;
-+
-+ (t_cfg+7)->at.x = WIDTH_EMIF_AREA/2 - 2*FONT_SIZE;
-+ (t_cfg+7)->at.y = EMIF_AREA_TR_Y + FONT_SIZE;
-+ strcpy(text[7],string_list[7]);
-+
-+ for(i=8; i<12; i=i+2)
-+ {
-+ (y_cfg+i)->region.bottom_left.x = EMIF_AREA_BL_X + BORDER + (i-8)*(BAR_WIDTH+BAR_GAP)/2;
-+ (y_cfg+i)->region.bottom_left.y = EMIF_AREA_BL_Y - BORDER/2;// - (i-2) * (30);
-+ (y_cfg+i)->region.top_right.x = EMIF_AREA_BL_X + BORDER + BAR_WIDTH + (i-8) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i)->region.top_right.y = EMIF_AREA_TR_Y + BORDER * 1.2;
-+
-+ (y_cfg+i)->fill_color.r = 1.0;
-+ (y_cfg+i)->fill_color.g = 0.0;
-+ (y_cfg+i)->fill_color.b = 0.0;
-+ (y_cfg+i)->fill_color.a = 0.1;
-+
-+ (y_cfg+i+1)->region.bottom_left.x = EMIF_AREA_BL_X + BORDER + (i-8) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i+1)->region.bottom_left.y = EMIF_AREA_BL_Y - BORDER/2;
-+ (y_cfg+i+1)->region.top_right.x = EMIF_AREA_BL_X + BORDER + BAR_WIDTH + (i-8) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i+1)->region.top_right.y = EMIF_AREA_TR_Y + BORDER*1.2;
-+
-+ (y_cfg+i+1)->fill_color.r = 0.0;
-+ (y_cfg+i+1)->fill_color.g = 1.0;
-+ (y_cfg+i+1)->fill_color.b = 0.0;
-+ (y_cfg+i+1)->fill_color.a = 1.0;
-+
-+ (t_cfg+i)->at.x = EMIF_AREA_BL_X + BAR_WIDTH + BORDER + (i-8) * (BAR_WIDTH + BAR_GAP)/2- 2.2*FONT_SIZE;
-+ (t_cfg+i)->at.y = EMIF_AREA_TR_Y + BORDER*1.2 -5;
-+
-+ /* Fixed strings */
-+ (t_cfg+i+1)->at.x = EMIF_AREA_BL_X + BORDER + (i-8) * (BAR_WIDTH + BAR_GAP)/2;
-+ (t_cfg+i+1)->at.y = EMIF_AREA_BL_Y;// - BORDER + FONT_SIZE;
-+
-+ strcpy(text[i],string_list[i]);
-+ strcpy(text[i+1],string_list[i+1]);
-+ }
-+
-+ (y_cfg+12)->region.bottom_left.x = INITIATORS_AREA_BL_X;
-+ (y_cfg+12)->region.bottom_left.y = INITIATORS_AREA_BL_Y;
-+ (y_cfg+12)->region.top_right.x = INITIATORS_AREA_TR_X;
-+ (y_cfg+12)->region.top_right.y = INITIATORS_AREA_TR_Y;
-+
-+ (t_cfg+12)->at.x = EMIF_AREA_TR_X + (INITIATORS_AREA_TR_X - INITIATORS_AREA_BL_X)/2 - 4 * FONT_SIZE;
-+ (t_cfg+12)->at.y = INITIATORS_AREA_TR_Y + FONT_SIZE;
-+ strcpy(text[12],string_list[12]);
-+
-+ for(i=13; i<25; i=i+2)
-+ {
-+ (y_cfg+i)->region.bottom_left.x = INITIATORS_AREA_BL_X + BORDER + (i-13)*(BAR_WIDTH+BAR_GAP)/2;
-+ (y_cfg+i)->region.bottom_left.y = INITIATORS_AREA_BL_Y - BORDER/2;// - (i-2) * (30);
-+ (y_cfg+i)->region.top_right.x = INITIATORS_AREA_BL_X + BORDER + BAR_WIDTH + (i-13) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i)->region.top_right.y = INITIATORS_AREA_TR_Y + BORDER*1.2;
-+
-+ (y_cfg+i)->fill_color.r = 1.0;
-+ (y_cfg+i)->fill_color.g = 0.0;
-+ (y_cfg+i)->fill_color.b = 0.0;
-+ (y_cfg+i)->fill_color.a = 0.1;
-+
-+ (y_cfg+i+1)->region.bottom_left.x = INITIATORS_AREA_BL_X + BORDER + (i-13) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i+1)->region.bottom_left.y = INITIATORS_AREA_BL_Y - BORDER/2;// - (i-2) * (30);
-+ (y_cfg+i+1)->region.top_right.x = INITIATORS_AREA_BL_X + BORDER + BAR_WIDTH + (i-13) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i+1)->region.top_right.y = INITIATORS_AREA_TR_Y + BORDER* 1.2;
-+
-+ (y_cfg+i+1)->fill_color.r = 0.0;
-+ (y_cfg+i+1)->fill_color.g = 1.0;
-+ (y_cfg+i+1)->fill_color.b = 0.0;
-+ (y_cfg+i+1)->fill_color.a = 1.0;
-+
-+ (t_cfg+i)->at.x = INITIATORS_AREA_BL_X + BORDER + BAR_WIDTH + (i-13) * (BAR_WIDTH + BAR_GAP)/2 - 2.2* FONT_SIZE;
-+ (t_cfg+i)->at.y = INITIATORS_AREA_TR_Y + BORDER*1.2 -5;
-+
-+ (t_cfg+i+1)->at.x = INITIATORS_AREA_BL_X + BORDER + (i-13)*(BAR_WIDTH+BAR_GAP)/2;
-+ (t_cfg+i+1)->at.y = INITIATORS_AREA_BL_Y;
-+
-+ strcpy(text[i],string_list[i]);
-+ strcpy(text[i+1],string_list[i+1]);
-+ }
-+#endif
-+
-+#if 0
-+ for(i=0; i<25; i++)
-+ printf("(%d, %d) to (%d, %d)\n", (y_cfg +i)->region.bottom_left.x,(y_cfg +i)->region.bottom_left.y,(y_cfg +i)->region.top_right.x, (y_cfg +i)->region.top_right.y);
-+#endif
-+
-+
-+
-+ for(i=0; i<25; i++) {
-+ (t_cfg+i)->color.r = 0.0;
-+ (t_cfg+i)->color.g = 1.0;
-+ (t_cfg+i)->color.b = 1.0;
-+ (t_cfg+i)->color.a = 1.0;
-+ (t_cfg+i)->fontsize = FONT_SIZE;
-+ }
-+ (t_cfg+0)->fontsize = 20;
-+
-+
-+}
-+
-+
-+void statCollectorInit()
-+{
-+ int index;
-+
-+ gStatColState.stat0_filter_cnt = 0;
-+ gStatColState.stat1_filter_cnt = 0;
-+ gStatColState.stat2_filter_cnt = 0;
-+ gStatColState.stat3_filter_cnt = 0;
-+ gStatColState.stat4_filter_cnt = 0;
-+ gStatColState.stat5_filter_cnt = 0;
-+ gStatColState.stat6_filter_cnt = 0;
-+ gStatColState.stat7_filter_cnt = 0;
-+ gStatColState.stat8_filter_cnt = 0;
-+ gStatColState.stat9_filter_cnt = 0;
-+
-+ for(index=STATCOL_EMIF1_SYS; index < STATCOL_MAX; index++)
-+ {
-+ global_object[index].b_enabled = 0;
-+
-+ strcpy(global_object[index].name, initiators[index].name);
-+
-+ global_object[index].readings = malloc(TRACE_SZ * sizeof(UInt32));
-+ memset(global_object[index].readings, 0, TRACE_SZ * sizeof(UInt32));
-+
-+ global_object[index].timestamp = NULL;
-+
-+ global_object[index].group_id = 0xFF;
-+ global_object[index].counter_id = 0;
-+ global_object[index].base_address = 0;
-+ global_object[index].mux_req = 0;
-+ }
-+
-+}
-+
-+void wr_stat_reg(UInt32 address, UInt32 data)
-+{
-+ UInt32 *mymem = statcoll_base_mem;
-+ UInt32 delta = (address - STATCOLL_BASE) / 4;
-+#ifndef DUMMY_MODE
-+ mymem[delta] = data;
-+#else
-+ printf("WRITE: Address = 0x%x, Data = 0x%x\n", address, data);
-+#endif
-+}
-+
-+UInt32 rd_stat_reg(UInt32 address)
-+{
-+#ifndef DUMMY_MODE
-+ UInt32 *mymem = statcoll_base_mem;
-+ UInt32 data;
-+ UInt32 delta = (address - STATCOLL_BASE) / 4;
-+ data = mymem[delta];
-+ return data;
-+#else
-+ printf("READ: Address = 0x%x\n", address);
-+#endif
-+}
-+
-+UInt32 statCollectorControlInitialize(UInt32 instance_id)
-+{
-+ UInt32 cur_base_address = 0;
-+ UInt32 cur_event_mux_req;
-+ UInt32 cur_event_mux_resp;
-+ UInt32 cur_stat_filter_cnt;
-+
-+ switch (instance_id)
-+ {
-+ case STATCOL_EMIF1_SYS:
-+ cur_base_address = stat_coll0_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat0_filter_cnt = gStatColState.stat0_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat0_filter_cnt;
-+ global_object[instance_id].group_id = 0;
-+ break;
-+ case STATCOL_EMIF2_SYS:
-+ cur_base_address = stat_coll0_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat0_filter_cnt = gStatColState.stat0_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat0_filter_cnt;
-+ global_object[instance_id].group_id = 0;
-+ break;
-+ case STATCOL_MA_MPU_P1:
-+ cur_base_address = stat_coll0_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat0_filter_cnt = gStatColState.stat0_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat0_filter_cnt;
-+ global_object[instance_id].group_id = 0;
-+ break;
-+ case STATCOL_MA_MPU_P2:
-+ cur_base_address = stat_coll0_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat0_filter_cnt = gStatColState.stat0_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat0_filter_cnt;
-+ global_object[instance_id].group_id = 0;
-+ break;
-+ case STATCOL_MPU1:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_MMU1:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_TPTC_RD1:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_TPTC_WR1:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_TPTC_RD2:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_TPTC_WR2:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_VIP1_P1:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP1_P2:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP2_P1:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP2_P2:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP3_P1:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP3_P2:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VPE_P1:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VPE_P2:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_EVE1_TC0:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE1_TC1:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE2_TC0:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE2_TC1:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE3_TC0:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE3_TC1:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE4_TC0:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE4_TC1:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_DSP1_MDMA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_DSP1_EDMA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_DSP2_MDMA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_DSP2_EDMA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_IVA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_GPU_P1:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_GPU_P2:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_BB2D_P1:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_DSS:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_CSI2_2:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_MMU2:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_IPU1:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_IPU2:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_DMA_SYSTEM_RD:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_DMA_SYSTEM_WR:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_CSI2_1:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_USB3_SS:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_USB2_SS:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_USB2_ULPI_SS1:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_USB2_ULPI_SS2:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_PCIE_SS1:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_PCIE_SS2:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_DSP1_CFG:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_DSP2_CFG:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_GMAC_SW:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_PRUSS1_P1:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_PRUSS1_P2:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_PRUSS2_P1:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_PRUSS2_P2:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_DMA_CRYPTO_RD:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_DMA_CRYPTO_WR:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_MPU2:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_MMC1:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_MMC2:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_SATA:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_MLBSS:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_BB2D_P2:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_IEEE1500:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_DBG:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_VCP1:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_OCMC_RAM1:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_OCMC_RAM2:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_OCMC_RAM3:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_GPMC:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_MCASP1:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_MCASP2:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_MCASP3:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_VCP2:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ default:
-+ printf("ERROR: Unknown initiator %d\n", instance_id);
-+ exit(0);
-+ };
-+
-+ {
-+ if ( cur_stat_filter_cnt > 4 )
-+ {
-+ printf("WARNING: We have exhausted filters/counters.....\n");
-+ return 0;
-+ }
-+ // Global Enable Stat Collector
-+ wr_stat_reg(cur_base_address+0x8,0x1);
-+
-+ // Soft Enable Stat Collector
-+ wr_stat_reg(cur_base_address+0xC,0x1);
-+
-+ wr_stat_reg(cur_base_address+0x18,0x5);
-+ // Operation of Stat Collector / RespEvt => Packet
-+ wr_stat_reg(cur_base_address+0x1C,0x5);
-+
-+
-+ // Event Sel
-+ wr_stat_reg(cur_base_address+0x20+4*(cur_stat_filter_cnt-1),cur_event_mux_req);
-+
-+ // Op is EventInfo
-+ wr_stat_reg(cur_base_address+0x1FC+(0x158*(cur_stat_filter_cnt-1)),2);
-+
-+ // Event Info Sel Op -> packet length
-+ wr_stat_reg(cur_base_address+0x1F8+(0x158*(cur_stat_filter_cnt-1)),0);
-+
-+ // Filter Global Enable
-+ wr_stat_reg(cur_base_address+0xAC+(0x158*(cur_stat_filter_cnt-1)),0x1);
-+
-+ // Filter Enable
-+ wr_stat_reg(cur_base_address+0xBC+(0x158*(cur_stat_filter_cnt-1)),0x1);
-+
-+ // Manual dump
-+ wr_stat_reg(cur_base_address+0x54,0x1);
-+ // use send register to reset counters
-+
-+ }
-+
-+ global_object[instance_id].mux_req = cur_event_mux_req;
-+ global_object[instance_id].base_address = cur_base_address;
-+ global_object[instance_id].counter_id = cur_stat_filter_cnt;
-+ global_object[instance_id].b_enabled = 1;
-+
-+ return cur_stat_filter_cnt;
-+}
-+
-+
-+
-+void statCollectorReadGroup(UInt32 group_id)
-+{
-+ int i=0;
-+ UInt32 cur_base_address = 0x45001000 + ((group_id - 1) * 0x1000);
-+
-+ wr_stat_reg(cur_base_address+0xC,0x0);
-+
-+ for(i=0; i < STATCOL_MAX; i++)
-+ {
-+ if(global_object[i].group_id == (group_id - 1) &&
-+ global_object[i].b_enabled == 1)
-+ {
-+ UInt32 cur_stat_filter_cnt = global_object[i].counter_id;
-+
-+ global_object[i].readings[statCountIdx] = rd_stat_reg(cur_base_address+0x8C+((cur_stat_filter_cnt-1)*4));
-+ }
-+ }
-+
-+ wr_stat_reg(cur_base_address+0xC,0x1);
-+}
-+
-+
-+volatile sig_atomic_t sigtermed = 0;
-+
-+void my_signal_handler(int signum)
-+{
-+ if (signum == SIGTERM || signum == SIGINT) {
-+ sigtermed = 1;
-+ }
-+}
-+
-+struct sort
-+{
-+ int pos;
-+ double value;
-+};
-+
-+
-+void *ctx;
-+struct time_graph_create_params p;
-+char xpos_string[100], ypos_string[100];
-+
-+void mpu_handler(int command)
-+{
-+#if 1
-+ static int fd;
-+ char buf[1000];
-+ char * tabledata= "/tmp/statcollfifo";
-+ int i;
-+ int bytes;
-+ static int offset = 13;
-+
-+ switch(command)
-+ {
-+ case OPEN:
-+ fd = open(tabledata, O_RDONLY|O_NONBLOCK);
-+ break;
-+
-+ case READ:
-+
-+ /* open, read, and display the message from the FIFO */
-+ bytes=read(fd, buf, 1000);
-+ if(bytes > 0)
-+ {
-+ char str[100];
-+ char value[100];
-+ sscanf(buf, "%s %s", str, value);
-+ if(strcmp(str, "MOVE:") == 0)
-+ {
-+ printf("Received MOVE command : %s\n", buf);
-+ sprintf(p.title, "CPU Usage[@position-req=%sx%s]", value, ypos_string);
-+ move_graph(ctx, &p);
-+ }
-+ else
-+ {
-+ printf("ERROR: Received unexpected data from FIFO - \" %s \" \n", buf);
-+ }
-+ memset(buf, 0x0, sizeof(buf));
-+ }
-+
-+ break;
-+
-+ case CLOSE:
-+ close(fd);
-+ break;
-+ }
-+#endif
-+ return;
-+}
-+
-+
-+UInt32 statcoll_start(UInt32 TOTAL_TIME, UInt32 INTERVAL_US, char list[][50], UInt32 xpos, UInt32 ypos)
-+{
-+ int i, fd, index;
-+ UInt32 counterIdDss, counterIdIva, counterIdBB2dP1, counterIdBB2dP2, counterIdUsb4, counterIdSata, counterIdEmif1, counterIdEmif2;
-+
-+ if (SIG_ERR == signal(SIGPIPE,SIG_IGN))
-+ exit(1);
-+
-+ if (SIG_ERR == signal(SIGINT,my_signal_handler))
-+ exit(1);
-+
-+ if (SIG_ERR == signal(SIGTERM,my_signal_handler))
-+ exit(1);
-+
-+
-+ struct timeval tv1, tv2;
-+ gettimeofday(&tv1, NULL);
-+ printf("------------------------------------------------\n");
-+ printf("Compile time = %s %s\n",__DATE__, __TIME__);
-+ printf("------------------------------------------------\n\n");
-+ //printd("Start time = %d\n", time(NULL));
-+ //printd("Time seconds = %d, usecs = %d\n", tv.tv_sec, tv.tv_usec);
-+
-+ statcoll_params params;
-+ memset(&params, sizeof(params), 0);
-+ params.INTERVAL_US = INTERVAL_US;
-+ params.TOTAL_TIME = TOTAL_TIME;
-+
-+ i=0;
-+ index=0;
-+
-+ while(list[i][0] != 0)
-+ {
-+ for(index=0; index< STATCOL_MAX; index++) {
-+ if(strcmp(list[i], initiators[index].name) == 0)
-+ {
-+ strcpy(params.user_config_list[params.no_of_initiators].name, list[i]);
-+ params.user_config_list[params.no_of_initiators++].id = initiators[index].id;
-+ break;
-+ }
-+ }
-+
-+ if(index == STATCOL_MAX) {
-+ printf("ERROR: Unknown initiator.%d.. .%s. \n", i, list[i]);
-+ //exit(0);
-+ }
-+ i++;
-+ }
-+
-+ struct bar_graph_create_params bg_p;
-+ struct _y_config *y_cfg;
-+ struct _text_config *t_cfg;
-+ double *y;
-+ double *bg_y;
-+ char *text_list[STATCOL_MAX];
-+
-+ struct _bar_graph_y_config *bg_y_cfg;
-+ struct _text_config *bg_t_cfg;
-+ char *bg_text_list[STATCOL_MAX];
-+
-+ sprintf(xpos_string, "%d", xpos);
-+ sprintf(ypos_string, "%d", ypos);
-+ p.title=(char *)malloc(100);
-+ sprintf(p.title, "CPU Usage[@position-req=%sx%s]", xpos_string, ypos_string);
-+ //p.height = MAX_HEIGHT - HEIGHT_EMIF_AREA;
-+ p.height = MAX_HEIGHT;// - HEIGHT_EMIF_AREA;
-+ p.width = MAX_WIDTH;
-+ p.draw_area.bottom_left.x = TIME_GRAPH_AREA_BL_X;
-+ p.draw_area.bottom_left.y = TIME_GRAPH_AREA_BL_Y;
-+ p.draw_area.top_right.x = TIME_GRAPH_AREA_TR_X;
-+ p.draw_area.top_right.y = TIME_GRAPH_AREA_TR_Y;
-+ p.time_span = 120000; // 120 seconds
-+ p.num_of_y_items = params.no_of_initiators+1;
-+ p.num_of_text_items = 0;//params.no_of_initiators;
-+
-+
-+ y_cfg = malloc((params.no_of_initiators+1) * sizeof(struct _y_config));
-+ t_cfg = malloc(params.no_of_initiators * sizeof(struct _text_config));
-+ y = malloc((params.no_of_initiators+1) * sizeof(double));
-+ p.y_config_array = y_cfg;
-+ p.text_config_array = t_cfg;
-+
-+ bg_y_cfg = malloc(TOTAL_Y_PARAMETERS * sizeof(struct _bar_graph_y_config));
-+ bg_t_cfg = malloc(TOTAL_Y_PARAMETERS * sizeof(struct _text_config));
-+ bg_y = malloc(TOTAL_Y_PARAMETERS * sizeof(double));
-+
-+ for(i=0; i<TOTAL_Y_PARAMETERS; i++)
-+ {
-+ bg_text_list[i] = malloc(100);
-+ strcpy(bg_text_list[i],"test");
-+ }
-+
-+ create_overall_box(bg_y_cfg, bg_t_cfg, bg_text_list);
-+
-+
-+ i=0;
-+ while(i < params.no_of_initiators)
-+ {
-+ text_list[i] = malloc(100 * sizeof(char));
-+ memset(text_list[i], 0x0, 100);
-+
-+ ((struct _y_config *)y_cfg+i)->line_color.r = pallette[i%MAX_COLORS].r;
-+ ((struct _y_config *)y_cfg+i)->line_color.g = pallette[i%MAX_COLORS].g;
-+ ((struct _y_config *)y_cfg+i)->line_color.b = pallette[i%MAX_COLORS].b;
-+ ((struct _y_config *)y_cfg+i)->line_color.a = 0.0;//pallette[i%MAX_COLORS].a;
-+
-+ ((struct _y_config *)y_cfg+i)->fill_color.r = 0.0;
-+ ((struct _y_config *)y_cfg+i)->fill_color.g = 1.0;
-+ ((struct _y_config *)y_cfg+i)->fill_color.b = 0.0;
-+ ((struct _y_config *)y_cfg+i)->fill_color.a = 0.5;
-+
-+ i++;
-+ }
-+
-+ ((struct _y_config *)y_cfg+i)->line_color.r = 0.0;
-+ ((struct _y_config *)y_cfg+i)->line_color.g = 0.0;
-+ ((struct _y_config *)y_cfg+i)->line_color.b = 0.0;
-+ ((struct _y_config *)y_cfg+i)->line_color.a = 0.5;
-+ ((struct _y_config *)y_cfg+i)->fill_color.r = 0.1;
-+ ((struct _y_config *)y_cfg+i)->fill_color.g = 0.9;
-+ ((struct _y_config *)y_cfg+i)->fill_color.b = 0.5;
-+ ((struct _y_config *)y_cfg+i)->fill_color.a = 1.0;
-+
-+ bg_p.title = "CPU Usage";
-+
-+ bg_p.num_of_y_items = TOTAL_Y_PARAMETERS;
-+ bg_p.y_config_array = bg_y_cfg;
-+ bg_p.num_of_text_items = TOTAL_Y_PARAMETERS;
-+ bg_p.text_config_array = bg_t_cfg;
-+
-+
-+ int argc;
-+ char *argv[10];
-+ ctx = time_graph_create(argc, argv, &p);
-+ if (!ctx) {
-+ printf("Error creating context\n");
-+ exit(0);
-+ }
-+
-+ printf("\n Context after time_graph_create = 0x%x\n", ctx);
-+ ctx = bar_graph_create(argc, argv, &bg_p);
-+ if (!ctx) {
-+ printf("Error creating context\n");
-+ exit(0);
-+ }
-+
-+ printf("\n Context after bar_graph_create= 0x%x\n", ctx);
-+
-+ printf("Total configured initiators = %d\n", params.no_of_initiators);
-+
-+
-+ fd = open("/dev/mem", O_RDWR);
-+ if (fd == -1){
-+ printf("error fd=open() \n");
-+ return -1;
-+ }
-+ statcoll_base_mem = mmap(NULL, STATCOLL_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, STATCOLL_BASE);
-+
-+ if (statcoll_base_mem == MAP_FAILED){
-+ printf("ERROR: mmap failed \n");
-+ return;
-+ }
-+ close(fd);
-+
-+ fd = open("/dev/mem", O_RDWR);
-+ if (fd == -1){
-+ printf("error fd=open() \n");
-+ return -1;
-+ }
-+ l3_3_clkctrl = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, CM_L3INSTR_REGISTER_BASE);
-+ if (l3_3_clkctrl == MAP_FAILED){
-+ printf("ERROR: mmap failed for CM_L3INSTR_REGISTER_BASE\n");
-+ return;
-+ }
-+ close(fd);
-+
-+ printf("SUCCESS: Mapped 0x%x to user space address 0x%x\n", STATCOLL_BASE, statcoll_base_mem);
-+ printf("INTERVAL = %d usecs\n", INTERVAL_US);
-+ printf("TOTAL TIME = %d seconds\n", TOTAL_TIME);
-+ TRACE_SZ = (TOTAL_TIME * 1000000)/INTERVAL_US;
-+ printf("TRACE SIZE = %d samples\n", TRACE_SZ);
-+
-+ printf("**************************************\n");
-+ printf("Going to initialize the L3 clocks \n");
-+ l3_3_clkctrl[CM_L3INSTR_L3INSTR_CLKSTCTRL_OFFSET >> 2] = 0x2;
-+ l3_3_clkctrl[CM_L3INSTR_L3_MAIN_2_CLKCTRL_OFFSET >> 2] = 0x1;
-+ printf("**************************************\n");
-+
-+ while( (l3_3_clkctrl[CM_L3INSTR_L3_MAIN_2_CLKCTRL_OFFSET >> 2] & 0x30000) != 0x0)
-+ {
-+ printf("Waiting on module to be functional\n");
-+ }
-+
-+ statCollectorInit();
-+
-+ printf("SUCCESS: Initialized STAT COLLECTOR\n");
-+ /* Initialize all enabled initiators */
-+ for(index =0; index < params.no_of_initiators; index++) {
-+ printf("\t\t Initialized %s\n", params.user_config_list[index].name);
-+ statCollectorControlInitialize(params.user_config_list[index].id);
-+ }
-+
-+ const char *bg_text = "CPU Utilization";
-+
-+ int second_counter=0;
-+ memset(y, 0x0, sizeof(double)* (params.no_of_initiators+1));
-+
-+
-+
-+
-+ mpu_handler(OPEN);
-+
-+
-+ while(statCountIdx != (TRACE_SZ - 1))
-+ {
-+ usleep(INTERVAL_US);
-+ int group;
-+ for(group = 1; group<11; group++)
-+ statCollectorReadGroup(group);
-+
-+ mpu_handler(READ);
-+
-+ if(statCountIdx != 0 )
-+ for(i=0; i<params.no_of_initiators; i++) {
-+ y[i] += (double)(global_object[params.user_config_list[i].id].readings[statCountIdx])/ (8000000000);
-+ }
-+ second_counter++;
-+
-+ if(second_counter % 30 == 0)
-+ {
-+
-+ for(i=0; i<TOTAL_Y_PARAMETERS; i++) {
-+ bg_y[i] = 1.0;
-+ }
-+
-+ //HACK
-+ bg_y[9]=y[0]*2;
-+ bg_y[11]=y[1]*2;
-+ sprintf(bg_text_list[8], "%02.1f%s", y[0]*100, "%");
-+ sprintf(bg_text_list[10], "%02.1f%s", y[1]*100, "%");
-+
-+ struct sort sort_array[STATCOL_MAX];
-+ memset(sort_array, 0x0, sizeof(struct sort) * STATCOL_MAX);
-+ /* Sort here */
-+ for(i=2; i<params.no_of_initiators; i++) {
-+ sort_array[i-2].value = y[i];
-+ sort_array[i-2].pos = i;
-+ }
-+
-+ int j;
-+ double tempdouble;
-+ int tempint;
-+ for(i=0; i<params.no_of_initiators-2; i++) {
-+ for(j=i+1; j<params.no_of_initiators-2; j++) {
-+ if(sort_array[i].value < sort_array[j].value) {
-+ tempdouble = sort_array[j].value;
-+ tempint = sort_array[j].pos;
-+
-+ sort_array[j].value = sort_array[i].value;
-+ sort_array[j].pos = sort_array[i].pos;
-+
-+ sort_array[i].value = tempdouble;
-+ sort_array[i].pos = tempint;
-+ }
-+ }
-+ }
-+
-+ for(i=0; i<6; i++)
-+ {
-+ //HACK
-+ bg_y[14+i*2] = sort_array[i].value*2;
-+ sprintf(bg_text_list[13+i*2], "%02.1f%s", sort_array[i].value*100, "%");
-+ sprintf(bg_text_list[14+i*2], "%s", (params.user_config_list[sort_array[i].pos].name)+8);
-+ }
-+
-+ bar_graph_plot(ctx, bg_y, (const char **)bg_text_list);
-+
-+ y[params.no_of_initiators]=y[0]+y[1];
-+ time_graph_plot(ctx, y, (const char **)text_list);
-+ //printf("Plotting the time_graph\n");
-+ memset(y, 0x0, sizeof(double)* (params.no_of_initiators+1));
-+ }
-+ statCountIdx++;
-+
-+ }
-+
-+ mpu_handler(CLOSE);
-+
-+ printf("------------------------------------------------\n\n");
-+ printf("SUCCESS: Stat collection completed... Writing into file now\n");
-+ FILE *outfile = fopen("statcollector.csv", "w+");
-+ if (!outfile) {
-+ printf("\n ERROR: Error opening file");
-+ }
-+
-+ /* Ignore the first index at 0 */
-+ for(index=1; index<statCountIdx; index++) {
-+ for(i=0; i<params.no_of_initiators; i++) {
-+ fprintf(outfile,"%s = %d,", params.user_config_list[i].name, global_object[params.user_config_list[i].id].readings[index]);
-+ }
-+ fprintf(outfile,"\n");
-+ }
-+ fclose(outfile);
-+
-+ time_graph_destroy(ctx);
-+ gettimeofday(&tv2, NULL);
-+ //printf("End time = %d\n", time(NULL));
-+ //printf("Time seconds = %d, usecs = %d\n", tv.tv_sec, tv.tv_usec);
-+ printf("Total execution time = %d secs, %d usecs\n\n", (tv2.tv_sec - tv1.tv_sec), (tv2.tv_usec - tv2.tv_usec));
-+
-+ return 0;
-+}
-+
-+
-diff --git a/clients/statcoll.h b/clients/statcoll.h
-new file mode 100644
-index 0000000..fa92753
---- /dev/null
-+++ b/clients/statcoll.h
-@@ -0,0 +1,152 @@
-+#ifndef __STATCOLL_H
-+#define __STATCOLL_H
-+
-+
-+#define CM_L3INSTR_REGISTER_BASE (0x4A008000)
-+
-+#define CM_L3INSTR_L3INSTR_CLKSTCTRL_OFFSET (0xE00)
-+#define CM_L3INSTR_L3_MAIN_2_CLKCTRL_OFFSET (0xE20)
-+
-+#define STATCOLL_SIZE 40960
-+#define STATCOLL_BASE (0x45001000)
-+
-+#define stat_coll0_base_address (0x45001000)
-+#define stat_coll1_base_address (0x45002000)
-+#define stat_coll2_base_address (0x45003000)
-+#define stat_coll3_base_address (0x45004000)
-+#define stat_coll4_base_address (0x45005000)
-+#define stat_coll5_base_address (0x45006000)
-+#define stat_coll6_base_address (0x45007000)
-+#define stat_coll7_base_address (0x45008000)
-+#define stat_coll8_base_address (0x45009000)
-+#define stat_coll9_base_address (0x4500a000)
-+
-+#define printd(fmt, ...) \
-+ do { if (debug) fprintf(stderr, fmt, __VA_ARGS__); } while (0)
-+
-+typedef unsigned int UInt32;
-+
-+
-+typedef enum
-+{
-+ STATCOL_EMIF1_SYS,
-+ STATCOL_EMIF2_SYS,
-+ STATCOL_MA_MPU_P1,
-+ STATCOL_MA_MPU_P2,
-+ STATCOL_MPU1,
-+ STATCOL_MMU1,
-+ STATCOL_TPTC_RD1,
-+ STATCOL_TPTC_WR1,
-+ STATCOL_TPTC_RD2,
-+ STATCOL_TPTC_WR2,
-+ STATCOL_VIP1_P1,
-+ STATCOL_VIP1_P2,
-+ STATCOL_VIP2_P1,
-+ STATCOL_VIP2_P2,
-+ STATCOL_VIP3_P1,
-+ STATCOL_VIP3_P2,
-+ STATCOL_VPE_P1,
-+ STATCOL_VPE_P2,
-+ STATCOL_EVE1_TC0,
-+ STATCOL_EVE1_TC1,
-+ STATCOL_EVE2_TC0,
-+ STATCOL_EVE2_TC1,
-+ STATCOL_EVE3_TC0,
-+ STATCOL_EVE3_TC1,
-+ STATCOL_EVE4_TC0,
-+ STATCOL_EVE4_TC1,
-+ STATCOL_DSP1_MDMA,
-+ STATCOL_DSP1_EDMA,
-+ STATCOL_DSP2_MDMA,
-+ STATCOL_DSP2_EDMA,
-+ STATCOL_IVA,
-+ STATCOL_GPU_P1,
-+ STATCOL_GPU_P2,
-+ STATCOL_BB2D_P1,
-+ STATCOL_DSS,
-+ STATCOL_CSI2_2,
-+ STATCOL_MMU2,
-+ STATCOL_IPU1,
-+ STATCOL_IPU2,
-+ STATCOL_DMA_SYSTEM_RD,
-+ STATCOL_DMA_SYSTEM_WR,
-+ STATCOL_CSI2_1,
-+ STATCOL_USB3_SS,
-+ STATCOL_USB2_SS,
-+ STATCOL_USB2_ULPI_SS1,
-+ STATCOL_USB2_ULPI_SS2,
-+ STATCOL_PCIE_SS1,
-+ STATCOL_PCIE_SS2,
-+ STATCOL_DSP1_CFG,
-+ STATCOL_DSP2_CFG,
-+ STATCOL_GMAC_SW,
-+ STATCOL_PRUSS1_P1,
-+ STATCOL_PRUSS1_P2,
-+ STATCOL_PRUSS2_P1,
-+ STATCOL_PRUSS2_P2,
-+ STATCOL_DMA_CRYPTO_RD,
-+ STATCOL_DMA_CRYPTO_WR,
-+ STATCOL_MPU2,
-+ STATCOL_MMC1,
-+ STATCOL_MMC2,
-+ STATCOL_SATA,
-+ STATCOL_MLBSS,
-+ STATCOL_BB2D_P2,
-+ STATCOL_IEEE1500,
-+ STATCOL_DBG,
-+ STATCOL_VCP1,
-+ STATCOL_OCMC_RAM1,
-+ STATCOL_OCMC_RAM2,
-+ STATCOL_OCMC_RAM3,
-+ STATCOL_GPMC,
-+ STATCOL_MCASP1,
-+ STATCOL_MCASP2,
-+ STATCOL_MCASP3,
-+ STATCOL_VCP2,
-+ STATCOL_MAX
-+} STATCOL_ID;
-+
-+
-+
-+typedef struct
-+{
-+ UInt32 stat0_filter_cnt;
-+ UInt32 stat1_filter_cnt;
-+ UInt32 stat2_filter_cnt;
-+ UInt32 stat3_filter_cnt;
-+ UInt32 stat4_filter_cnt;
-+ UInt32 stat5_filter_cnt;
-+ UInt32 stat6_filter_cnt;
-+ UInt32 stat7_filter_cnt;
-+ UInt32 stat8_filter_cnt;
-+ UInt32 stat9_filter_cnt;
-+} StatCollectorObj;
-+
-+struct list_of_initiators
-+{
-+ STATCOL_ID id;
-+ char name[50];
-+};
-+
-+typedef struct
-+{
-+ UInt32 INTERVAL_US;
-+ UInt32 TOTAL_TIME;
-+ UInt32 no_of_initiators;
-+ struct list_of_initiators user_config_list[STATCOL_MAX];
-+} statcoll_params;
-+
-+typedef struct
-+{
-+ UInt32 b_enabled;
-+ char name[100];
-+ UInt32 *readings;
-+ UInt32 *timestamp;
-+ UInt32 group_id;
-+ UInt32 counter_id;
-+ UInt32 base_address;
-+ UInt32 mux_req;
-+}statcoll_initiators_object;
-+
-+
-+#endif
-diff --git a/clients/statcoll_gui.h b/clients/statcoll_gui.h
-new file mode 100644
-index 0000000..7362bde
---- /dev/null
-+++ b/clients/statcoll_gui.h
-@@ -0,0 +1,101 @@
-+
-+/*
-+
-+ ---------------------------------------------
-+ | |
-+ | --------------------------------------- |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ ---------------------------------------------
-+ | | |
-+ | | |
-+ | | |
-+ | | |
-+ | | |
-+ | | |
-+ ---------------------------------------------
-+
-+
-+
-+
-+*/
-+#define POSITION_X 2800
-+#define POSITION_Y 40
-+
-+#define MAX_WIDTH 900
-+//#define MAX_WIDTH 528
-+#define MAX_HEIGHT 900
-+
-+/* Derived parameters */
-+#define BAR_GAP (MAX_WIDTH/25)
-+#define BAR_WIDTH (MAX_WIDTH/16)
-+
-+#define BAR_HEIGHT ((MX_HEIGHT/40) * 6)
-+
-+#define BORDER (MAX_WIDTH/15)
-+
-+#define HEIGHT_EMIF_AREA (MAX_HEIGHT/4)
-+
-+#define FONT_SIZE (MAX_WIDTH/40)
-+
-+#define WIDTH_EMIF_AREA (MAX_WIDTH / 4)
-+
-+#define TOTAL_Y_PARAMETERS (25)
-+
-+#define TIME_GRAPH_AREA_BL_X (BORDER)
-+#define TIME_GRAPH_AREA_BL_Y (MAX_HEIGHT - HEIGHT_EMIF_AREA - BORDER)
-+#define TIME_GRAPH_AREA_TR_X (MAX_WIDTH - BORDER)
-+#define TIME_GRAPH_AREA_TR_Y (BORDER)
-+
-+#define EMIF_AREA_BL_X (0)
-+#define EMIF_AREA_BL_Y (MAX_HEIGHT)
-+#define EMIF_AREA_TR_X (WIDTH_EMIF_AREA)
-+#define EMIF_AREA_TR_Y (MAX_HEIGHT - HEIGHT_EMIF_AREA)
-+
-+#define INITIATORS_AREA_BL_X (WIDTH_EMIF_AREA)
-+#define INITIATORS_AREA_BL_Y (MAX_HEIGHT)
-+#define INITIATORS_AREA_TR_X (MAX_WIDTH)
-+#define INITIATORS_AREA_TR_Y (MAX_HEIGHT - HEIGHT_EMIF_AREA)
-+
-+
-+const char *string_list[TOTAL_Y_PARAMETERS] = {
-+ "----DDR BANDWIDTH PLOT----",
-+ "8 GBPS",
-+ "6.4 ",
-+ "4.8",
-+ "3.2",
-+ "1.6",
-+ "0",
-+ "EMIF Plot",
-+ "test",
-+ "EMIF1",
-+ "test",
-+ "EMIF2",
-+ "TOP 6 INITIATORS",
-+ "test",
-+ "MPU",
-+ "test",
-+ "DSS",
-+ "test",
-+ "DSP",
-+ "test",
-+ "IVA",
-+ "test",
-+ "GPU",
-+ "test",
-+ "BB2D",
-+};
-+
-diff --git a/clients/time_bar_graph.c b/clients/time_bar_graph.c
-new file mode 100644
-index 0000000..9fa9c12
---- /dev/null
-+++ b/clients/time_bar_graph.c
-@@ -0,0 +1,515 @@
-+/*
-+ * Copyright © 2008 Kristian Høgsberg
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that copyright
-+ * notice and this permission notice appear in supporting documentation, and
-+ * that the name of the copyright holders not be used in advertising or
-+ * publicity pertaining to distribution of the software without specific,
-+ * written prior permission. The copyright holders make no representations
-+ * about the suitability of this software for any purpose. It is provided "as
-+ * is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-+ * OF THIS SOFTWARE.
-+ */
-+
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdint.h>
-+#include <signal.h>
-+#include <time.h>
-+#include <math.h>
-+#include <cairo.h>
-+#include <sys/time.h>
-+#include <pthread.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <sys/eventfd.h>
-+#include <sys/epoll.h>
-+
-+#include <linux/input.h>
-+#include <wayland-client.h>
-+#include "window.h"
-+#include "../shared/cairo-util.h"
-+#include "time_bar_graph.h"
-+
-+//#define DEBUG 1
-+#ifdef DEBUG
-+#define DBG(x...) printf(x)
-+#else
-+#define DBG(x...) // printf(x)
-+#endif
-+
-+#define MAX_ITEMS 180
-+#define MAX_TEXT_SIZE 128
-+
-+struct graph_dataset_point {
-+ int next_index;
-+ double y_values[MAX_ITEMS];
-+};
-+
-+struct graph_data {
-+ int dataset_size;
-+ int first_index, last_index, num_elems;
-+ uint64_t last_time;
-+ struct graph_dataset_point dataset[1];
-+};
-+
-+struct graph {
-+ struct display *display;
-+ struct window *window;
-+ struct widget *widget;
-+ int width, height;
-+ struct time_graph_create_params params;
-+ struct bar_graph_create_params bar_graph_params;
-+ struct _y_config y_config_array[MAX_ITEMS];
-+ struct _text_config text_config_array[MAX_ITEMS];
-+
-+ /* Bar graph parameters */
-+ struct _bar_graph_y_config bar_graph_y_config_array[MAX_ITEMS];
-+ struct _text_config bar_graph_text_config_array[MAX_ITEMS];
-+
-+ pthread_t thr;
-+ int eventfd;
-+ struct task task;
-+ double x_scaling_factor;
-+ pthread_mutex_t mtx;
-+ double time_graph_y_values[MAX_ITEMS];
-+ char text_values[MAX_ITEMS][MAX_TEXT_SIZE];
-+
-+ double bar_graph_y_values[MAX_ITEMS];
-+ char bar_graph_text_values[MAX_ITEMS][MAX_TEXT_SIZE];
-+
-+ uint64_t time_now;
-+ time_t start_time_tv_sec;
-+ struct graph_data *data;
-+};
-+
-+struct graph *global_graph=NULL;
-+static void
-+draw_stuff(struct graph *g, cairo_surface_t *surface)
-+{
-+ cairo_t *cr;
-+ int i, j, n_elems;
-+ double c_x, c_y, d_x, d_y;
-+
-+ cr = cairo_create(surface);
-+ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
-+ cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 0.5);
-+ cairo_paint(cr);
-+ cairo_select_font_face(cr, "mono",
-+ CAIRO_FONT_SLANT_NORMAL,
-+ CAIRO_FONT_WEIGHT_BOLD);
-+ cairo_set_line_width (cr, 1.0);
-+ cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
-+ pthread_mutex_lock(&g->mtx);
-+ for (j=0; g->data->num_elems > 0 && j<g->params.num_of_y_items; j++) {
-+ n_elems = g->data->num_elems;
-+ DBG("first_index: %d, last_index: %d\n", g->data->first_index, g->data->last_index);
-+ if (g->y_config_array[j].fill_color.a != 0.0)
-+ cairo_move_to(cr, (double)g->params.draw_area.bottom_left.x, (double)g->params.draw_area.bottom_left.y);
-+ c_x = (double)g->params.draw_area.bottom_left.x;
-+ c_y = (double)g->params.draw_area.bottom_left.y;
-+ d_x = 0;
-+ i = g->data->first_index;
-+ while (n_elems) {
-+ DBG("index: %d, x: %f, y: %f, next_index: %d\n", i, c_x,
-+ g->data->dataset[i].y_values[j], g->data->dataset[i].next_index);
-+ d_y = g->data->dataset[i].y_values[j] - c_y;
-+ c_y = g->data->dataset[i].y_values[j];
-+ c_x = c_x + d_x;
-+ if (g->y_config_array[j].fill_color.a == 0.0 && n_elems == g->data->num_elems) {
-+ cairo_move_to(cr, c_x, c_y);
-+ } else {
-+ cairo_curve_to(cr, c_x - (d_x * 0.75), c_y - (d_y * 0.92), c_x - (d_x * 0.25), c_y - (d_y * 0.08), c_x, c_y);
-+ }
-+ if (g->data->dataset[i].next_index > i) {
-+ d_x = (g->data->dataset[i].next_index - i);
-+ } else {
-+ d_x = (g->data->dataset_size + g->data->dataset[i].next_index - i);
-+ }
-+ i = g->data->dataset[i].next_index;
-+ n_elems--;
-+ }
-+ if (g->y_config_array[j].fill_color.a != 0.0) {
-+ cairo_line_to(cr, c_x, (double)g->params.draw_area.bottom_left.y);
-+ cairo_line_to(cr, (double)g->params.draw_area.bottom_left.x, (double)g->params.draw_area.bottom_left.y);
-+ cairo_close_path(cr);
-+ cairo_set_source_rgba(cr, g->y_config_array[j].fill_color.r, g->y_config_array[j].fill_color.g,
-+ g->y_config_array[j].fill_color.b, g->y_config_array[j].fill_color.a);
-+ cairo_fill_preserve(cr);
-+ }
-+ cairo_set_source_rgba(cr, g->y_config_array[j].line_color.r, g->y_config_array[j].line_color.g,
-+ g->y_config_array[j].line_color.b, g->y_config_array[j].line_color.a);
-+ cairo_stroke(cr);
-+ }
-+
-+ for (j=0; j<g->params.num_of_text_items; j++) {
-+ cairo_move_to(cr, (double)g->text_config_array[j].at.x, (double)g->text_config_array[j].at.y);
-+ cairo_set_font_size(cr, g->text_config_array[j].fontsize);
-+ cairo_set_source_rgba(cr, g->text_config_array[j].color.r, g->text_config_array[j].color.g,
-+ g->text_config_array[j].color.b, g->text_config_array[j].color.a);
-+ cairo_show_text(cr, g->text_values[j]);
-+ }
-+
-+
-+ for (j=0; j<g->bar_graph_params.num_of_y_items; j++) {
-+ cairo_move_to(cr, (double)g->bar_graph_params.y_config_array[j].region.bottom_left.x,
-+ (double)g->bar_graph_params.y_config_array[j].region.bottom_left.y);
-+ c_y = (double)g->bar_graph_params.y_config_array[j].region.bottom_left.y -
-+ (g->bar_graph_y_values[j] * (double)(g->bar_graph_params.y_config_array[j].region.bottom_left.y -
-+ g->bar_graph_params.y_config_array[j].region.top_right.y));
-+ cairo_line_to(cr, (double)g->bar_graph_params.y_config_array[j].region.bottom_left.x, c_y);
-+ cairo_line_to(cr, (double)g->bar_graph_params.y_config_array[j].region.top_right.x, c_y);
-+ cairo_line_to(cr, (double)g->bar_graph_params.y_config_array[j].region.top_right.x,
-+ (double)g->bar_graph_params.y_config_array[j].region.bottom_left.y);
-+ cairo_line_to(cr, (double)g->bar_graph_params.y_config_array[j].region.bottom_left.x,
-+ (double)g->bar_graph_params.y_config_array[j].region.bottom_left.y);
-+ cairo_close_path(cr);
-+ cairo_set_source_rgba(cr, g->bar_graph_y_config_array[j].fill_color.r, g->bar_graph_y_config_array[j].fill_color.g,
-+ g->bar_graph_y_config_array[j].fill_color.b, g->bar_graph_y_config_array[j].fill_color.a);
-+ cairo_fill_preserve(cr);
-+ cairo_set_source_rgba(cr, g->bar_graph_y_config_array[j].line_color.r, g->bar_graph_y_config_array[j].line_color.g,
-+ g->bar_graph_y_config_array[j].line_color.b, g->bar_graph_y_config_array[j].line_color.a);
-+ cairo_stroke(cr);
-+ }
-+ for (j=0; j<g->bar_graph_params.num_of_text_items; j++) {
-+ cairo_move_to(cr, (double)g->bar_graph_text_config_array[j].at.x, (double)g->bar_graph_text_config_array[j].at.y);
-+ cairo_set_font_size(cr, g->bar_graph_text_config_array[j].fontsize);
-+ cairo_set_source_rgba(cr, g->bar_graph_text_config_array[j].color.r, g->bar_graph_text_config_array[j].color.g,
-+ g->bar_graph_text_config_array[j].color.b, g->bar_graph_text_config_array[j].color.a);
-+ cairo_save (cr);
-+ //cairo_rotate(cr, 2*3.14*21/24);
-+ cairo_show_text(cr, g->bar_graph_text_values[j]);
-+ cairo_restore(cr);
-+ }
-+ pthread_mutex_unlock(&g->mtx);
-+ cairo_destroy(cr);
-+}
-+
-+static void
-+resize_handler(struct widget *widget,
-+ int32_t width, int32_t height, void *data)
-+{
-+ struct graph *g = data;
-+
-+ /* Dont resize me */
-+ widget_set_size(g->widget, g->width, g->height);
-+}
-+
-+static void
-+redraw_handler(struct widget *widget, void *data)
-+{
-+ struct graph *g = data;
-+ cairo_surface_t *surface;
-+
-+ surface = window_get_surface(g->window);
-+ if (surface == NULL ||
-+ cairo_surface_status(surface) != CAIRO_STATUS_SUCCESS) {
-+ fprintf(stderr, "failed to create cairo egl surface\n");
-+ return;
-+ }
-+
-+ draw_stuff(g, surface);
-+ cairo_surface_destroy(surface);
-+}
-+
-+static void
-+button_handler(struct widget *widget,
-+ struct input *input, uint32_t time,
-+ uint32_t button, enum wl_pointer_button_state state, void *data)
-+{
-+ struct graph *g = data;
-+
-+ switch (button) {
-+ case BTN_LEFT:
-+ if (state == WL_POINTER_BUTTON_STATE_PRESSED)
-+ window_move(g->window, input,
-+ display_get_serial(g->display));
-+ break;
-+ case BTN_MIDDLE:
-+ if (state == WL_POINTER_BUTTON_STATE_PRESSED)
-+ widget_schedule_redraw(widget);
-+ break;
-+ case BTN_RIGHT:
-+ if (state == WL_POINTER_BUTTON_STATE_PRESSED)
-+ window_show_frame_menu(g->window, input, time);
-+ break;
-+ }
-+}
-+
-+static void
-+touch_down_handler(struct widget *widget, struct input *input,
-+ uint32_t serial, uint32_t time, int32_t id,
-+ float x, float y, void *data)
-+{
-+ struct graph *g = data;
-+ window_move(g->window, input, display_get_serial(g->display));
-+}
-+
-+static void task_run(struct task *task, uint32_t events)
-+{
-+ eventfd_t e;
-+ struct graph *g = (struct graph *)(task->link.prev);
-+ uint64_t time_diff;
-+ int elems, tmp, incr, i;
-+ double y;
-+
-+ eventfd_read(g->eventfd, &e);
-+ if(e == 1) {
-+ pthread_mutex_lock(&g->mtx);
-+ /* Process new data */
-+ DBG("time_now: %llu, last_time: %llu\n", g->time_now, g->data->last_time);
-+ if (g->time_now > g->data->last_time) {
-+ time_diff = g->time_now - g->data->last_time;
-+ y = (double)time_diff * g->x_scaling_factor;
-+ incr = (int)y;
-+ DBG("incr: %d\n", incr);
-+
-+ if (g->data->last_index >= g->data->first_index) elems = g->data->last_index - g->data->first_index + 1;
-+ else elems = g->data->dataset_size - g->data->first_index + g->data->last_index + 1;
-+ /* Move first index to make room for new element */
-+ while (g->data->dataset_size > 0 && (elems + incr) > g->data->dataset_size) {
-+ tmp = g->data->dataset[g->data->first_index].next_index - g->data->first_index;
-+ if (tmp < 0) tmp = g->data->dataset_size + tmp;
-+ g->data->first_index = g->data->dataset[g->data->first_index].next_index;
-+ elems -= tmp;
-+ g->data->num_elems--;
-+ }
-+ for (i=0; i<g->params.num_of_y_items; i++) {
-+ /* Scale Y */
-+ y = g->time_graph_y_values[i] * (double)(g->params.draw_area.bottom_left.y-g->params.draw_area.top_right.y);
-+ y = (double)g->params.draw_area.bottom_left.y - y;
-+ g->data->dataset[g->data->last_index].y_values[i] = y;
-+ }
-+ g->data->dataset[g->data->last_index].next_index = g->data->last_index + incr;
-+ if (g->data->dataset[g->data->last_index].next_index >= g->data->dataset_size)
-+ g->data->dataset[g->data->last_index].next_index -= g->data->dataset_size;
-+ g->data->num_elems++;
-+ g->data->last_index = g->data->dataset[g->data->last_index].next_index;
-+ g->data->last_time = g->time_now;
-+ }
-+ pthread_mutex_unlock(&g->mtx);
-+ }
-+ widget_schedule_redraw(g->widget);
-+ DBG("event task ran...\n");
-+}
-+
-+void *time_graph_create(int argc, char *argv[], struct time_graph_create_params *cp)
-+{
-+ struct graph *g;
-+ struct display *d;
-+ int dataset_size;
-+ struct timeval tv;
-+
-+ if (cp->num_of_y_items > MAX_ITEMS) return NULL;
-+ if (cp->num_of_text_items > MAX_ITEMS) return NULL;
-+
-+ g = (struct graph*)malloc(sizeof(struct graph));
-+ if (g == NULL) {
-+ fprintf(stderr, "failed to allocate memory\n");
-+ return NULL;
-+ }
-+ global_graph = g;
-+ g->params = *cp;
-+ if (cp->num_of_y_items)
-+ memcpy(&g->y_config_array[0], cp->y_config_array,
-+ sizeof(struct _y_config) * cp->num_of_y_items);
-+ if (cp->num_of_text_items)
-+ memcpy(&g->text_config_array[0], cp->text_config_array,
-+ sizeof(struct _text_config) * cp->num_of_text_items);
-+ d = display_create(&argc, argv);
-+ if (d == NULL) {
-+ fprintf(stderr, "failed to create display: %m\n");
-+ return NULL;
-+ }
-+ g->display = d;
-+ //g->bg_image = load_cairo_surface(cp->bg_image);
-+ g->width = cp->width; //cairo_image_surface_get_width(g->bg_image);
-+ g->height = cp->height; //cairo_image_surface_get_height(g->bg_image);
-+ dataset_size = cp->draw_area.top_right.x - cp->draw_area.bottom_left.x;
-+ g->data = (struct graph_data *)malloc(sizeof(struct graph_data) +
-+ (dataset_size * sizeof(struct graph_dataset_point)));
-+ if (!g->data) {
-+ fprintf(stderr, "failed to allocate memory\n");
-+ display_destroy(g->display);
-+ //cairo_surface_destroy(g->bg_image);
-+ free(g);
-+ return NULL;
-+ }
-+ g->data->first_index = 0;
-+ g->data->last_index = 0;
-+ g->data->num_elems = 0;
-+ g->data->dataset_size = dataset_size;
-+ g->x_scaling_factor = (double)dataset_size / (double)cp->time_span;
-+ g->window = window_create(d);
-+ g->widget = window_add_widget(g->window, g);
-+ window_set_title(g->window, cp->title);
-+ widget_set_resize_handler(g->widget, resize_handler);
-+ widget_set_redraw_handler(g->widget, redraw_handler);
-+ widget_set_button_handler(g->widget, button_handler);
-+ widget_set_default_cursor(g->widget, CURSOR_HAND1);
-+ widget_set_touch_down_handler(g->widget, touch_down_handler);
-+ window_schedule_resize(g->window, g->width, g->height);
-+ g->eventfd = eventfd(0, 0);
-+ g->task.run = task_run;
-+ g->task.link.prev = (struct wl_list*)g;
-+ g->task.link.next = NULL;
-+ display_watch_fd(d, g->eventfd, EPOLLIN, &g->task);
-+ pthread_mutex_init(&g->mtx, NULL);
-+
-+ if (0 != pthread_create(&g->thr, NULL, (void *(*)(void *))display_run, (void *)d)) {
-+ fprintf(stderr, "pthread_create failed: %m\n");
-+ widget_destroy(g->widget);
-+ window_destroy(g->window);
-+ display_destroy(g->display);
-+ //cairo_surface_destroy(g->bg_image);
-+ free(g->data);
-+ close(g->eventfd);
-+ free(g);
-+ return NULL;
-+ }
-+ gettimeofday(&tv, NULL);
-+ g->start_time_tv_sec = tv.tv_sec;
-+ g->data->last_time = 0;
-+ return (void*)g;
-+}
-+
-+void move_graph(void *ctx, struct time_graph_create_params *cp)
-+{
-+ struct graph *g = ctx;
-+ window_set_title(g->window, cp->title);
-+}
-+
-+void time_graph_plot(void *ctx, double *y_values, const char *text_values[])
-+{
-+ struct timeval tv;
-+ struct graph *g = ctx;
-+ int i;
-+ pthread_mutex_lock(&g->mtx);
-+ gettimeofday(&tv, NULL);
-+ g->time_now = ((tv.tv_sec - g->start_time_tv_sec) * 1000) + (tv.tv_usec / 1000);
-+ memcpy(g->time_graph_y_values, y_values, g->params.num_of_y_items * sizeof(double));
-+ for (i=0;i<g->params.num_of_text_items; i++) {
-+ strncpy(g->text_values[i], text_values[i], MAX_TEXT_SIZE);
-+ g->text_values[i][MAX_TEXT_SIZE-1] = '\0';
-+ }
-+ pthread_mutex_unlock(&g->mtx);
-+ eventfd_write(g->eventfd, (eventfd_t)1);
-+}
-+
-+void time_graph_destroy(void *ctx)
-+{
-+ struct graph *g = (struct graph *)ctx;
-+ display_exit(g->display);
-+ eventfd_write(g->eventfd, (eventfd_t)1);
-+ pthread_join(g->thr, NULL);
-+ widget_destroy(g->widget);
-+ window_destroy(g->window);
-+ display_destroy(g->display);
-+ free(g->data);
-+ close(g->eventfd);
-+ free(g);
-+ global_graph=NULL;
-+}
-+
-+void util_get_cpu_usage(double *cpu_usage)
-+{
-+ static FILE *fp = NULL;
-+ char buf[256];
-+ uint64_t tot;
-+ uint64_t u, n, s, i, w, x, y, z;
-+ static uint64_t last_i = 0, last_total = 0;
-+
-+
-+ if (!fp) {
-+ if (!(fp = fopen("/proc/stat", "r")))
-+ fprintf(stderr, "Failed /proc/stat open: %s", strerror(errno));
-+ }
-+ if (fp) {
-+ while (1) {
-+ rewind(fp);
-+ fflush(fp);
-+ if (!fgets(buf, sizeof(buf), fp)) {
-+ fprintf(stderr, "failed /proc/stat read\n");
-+ } else {
-+ sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu",
-+ &u,
-+ &n,
-+ &s,
-+ &i,
-+ &w,
-+ &x,
-+ &y,
-+ &z
-+ );
-+ if (last_total == 0) {
-+ last_total = u+n+s+i+w+x+y+z;
-+ last_i = i;
-+ usleep(100000);
-+ } else {
-+ tot = u+n+s+i+w+x+y+z;
-+ *cpu_usage = (1.0 - ((double)(i-last_i)/(double)(tot-last_total)));
-+ last_i = i;
-+ last_total = tot;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+}
-+
-+void *bar_graph_create(int argc, char *argv[], struct bar_graph_create_params *cp)
-+{
-+ struct graph *g;
-+ struct display *d;
-+ struct timeval tv;
-+
-+ if (cp->num_of_y_items > MAX_ITEMS) return NULL;
-+ if (cp->num_of_text_items > MAX_ITEMS) return NULL;
-+
-+ if (global_graph == NULL) {
-+ fprintf(stderr, "graph not initialized invoke time_graph_create first\n");
-+ return NULL;
-+ }
-+ g=global_graph;
-+ g->bar_graph_params = *cp;
-+ if (cp->num_of_y_items)
-+ memcpy(&g->bar_graph_y_config_array[0], cp->y_config_array,
-+ sizeof(struct _bar_graph_y_config) * cp->num_of_y_items);
-+ if (cp->num_of_text_items)
-+ memcpy(&g->bar_graph_text_config_array[0], cp->text_config_array,
-+ sizeof(struct _text_config) * cp->num_of_text_items);
-+
-+ return g;
-+}
-+
-+void bar_graph_plot(void *ctx, double *y_values, const char *text_values[])
-+{
-+ struct graph *g = ctx;
-+ int i;
-+ pthread_mutex_lock(&g->mtx);
-+ memcpy(g->bar_graph_y_values, y_values, g->bar_graph_params.num_of_y_items * sizeof(double));
-+ for (i=0;i<g->bar_graph_params.num_of_text_items; i++) {
-+ strncpy(g->bar_graph_text_values[i], text_values[i], MAX_TEXT_SIZE);
-+ g->bar_graph_text_values[i][MAX_TEXT_SIZE-1] = '\0';
-+ }
-+ pthread_mutex_unlock(&g->mtx);
-+ //eventfd_write(g->eventfd, (eventfd_t)2);
-+}
-+
-+void bar_graph_destroy(void *ctx)
-+{
-+ printf("Nothing to be done for this call\n");
-+ return;
-+}
-+
-diff --git a/clients/time_bar_graph.h b/clients/time_bar_graph.h
-new file mode 100644
-index 0000000..97ac05a
---- /dev/null
-+++ b/clients/time_bar_graph.h
-@@ -0,0 +1,93 @@
-+
-+#ifndef _BAR_GRAPH_H_
-+#define _BAR_GRAPH_H_
-+
-+#include <stdint.h>
-+
-+struct _rgba {
-+ double r, g, b, a; // Values between 0 and 1
-+};
-+
-+struct _coordinate {
-+ uint32_t x, y; // Co-ordinates relative to top-left of the window
-+};
-+
-+struct _rect {
-+ struct _coordinate bottom_left, top_right;
-+};
-+
-+struct _y_config {
-+ struct _rgba line_color; // Line color
-+ struct _rgba fill_color; // Fill color, 0 alpha => no fill
-+};
-+
-+struct _text_config {
-+ struct _rgba color; // Color for drawing the text, RGBA
-+ struct _coordinate at; // where to draw the text
-+ int fontsize; // Font size
-+};
-+
-+struct time_graph_create_params {
-+ char *title;
-+ //const char *bg_image;
-+ uint32_t width;
-+ uint32_t height;
-+ struct _rect draw_area;
-+ uint32_t time_span; // Amount of time the graph has to span in milliseconds
-+ uint32_t num_of_y_items;
-+ struct _y_config *y_config_array;
-+ uint32_t num_of_text_items;
-+ struct _text_config *text_config_array;
-+};
-+
-+
-+struct _bar_graph_y_config {
-+ struct _rect region; // Region for the bar graph
-+ struct _rgba line_color; // Color for drawing the line, RGBA
-+ struct _rgba fill_color; // Fill under the line with color RGBA, 0 => no fill
-+};
-+
-+struct bar_graph_create_params {
-+ char *title;
-+ //const char *bg_image;
-+ uint32_t num_of_y_items;
-+ struct _bar_graph_y_config *y_config_array;
-+ uint32_t num_of_text_items;
-+ struct _text_config *text_config_array;
-+};
-+
-+/* Creates a time graph using create parameters */
-+void *bar_graph_create(int argc, char *argv[], struct bar_graph_create_params *cp);
-+
-+void move_graph(void *ctx, struct time_graph_create_params *cp);
-+
-+/* Plots a new set of y-values from the values in the array y_values.
-+ The number of values must be equal to "num_of_y_items" from create params
-+ y_values must be normalized between 0.0 to 1.0
-+*/
-+void bar_graph_plot(void *ctx, double *y_values, const char *text_values[]);
-+
-+/* Destroy the graph */
-+void bar_graph_destroy(void *ctx);
-+
-+
-+/* Creates a time graph using create parameters */
-+void *time_graph_create(int argc, char *argv[], struct time_graph_create_params *cp);
-+
-+/*
-+ * Plots a new set of points from the values in the array y_values.
-+ * The number of values in the array y_values must be equal to "num_of_y_items"
-+ * from create params
-+ * y_values must be normalized between 0.0 to 1.0
-+
-+ * The number of values in the array text_values must be equal to "num_of_text_items"
-+ * from create params
-+*/
-+void time_graph_plot(void *ctx, double *y_values, const char *text_values[]);
-+
-+/* Destroy the graph */
-+void time_graph_destroy(void *ctx);
-+
-+void util_get_cpu_usage(double *cpu_usage);
-+
-+#endif /* _BAR_GRAPH_H_ */
---
-1.9.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch
deleted file mode 100644
index 32901db99..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 8034bc1862bbebb332e91917c6458ef8efb5b54e Mon Sep 17 00:00:00 2001
-From: Eric Ruei <e-ruei1@ti.com>
-Date: Fri, 8 Mar 2019 18:49:07 -0500
-Subject: [PATCH] weston: Fix virtual keyboard display issue for QT5
- application
-
-The virtual keyboard does pop up as expected, however, it will never hide
-even when the application is terminated. This problem is due to the order
-of the text APIs( text_input_activate and test_input_show_input_panel) are
-invoked in QT5 and a potential bug of the API implementation. The virtual
-keyboard works as expected if the test_input_show_input_panel() is invoked
-prior to the test_input_activate() as most of the weston sample applications
-do. However, the problem will show up if that order is reversed and the reason
-why is that the current_panel is not set in this case and hence this panel
-cannot be hidden.
-
-It is required to set the current_panel to the text_input when the input_panel
-becomes visible at the first time.
-
-Upstream status: Pending
-
-Signed-off-by: Eric Ruei <e-ruei1@ti.com>
----
- compositor/text-backend.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/compositor/text-backend.c b/compositor/text-backend.c
-index 664c36f..b610dfb 100644
---- a/compositor/text-backend.c
-+++ b/compositor/text-backend.c
-@@ -349,6 +349,7 @@ text_input_show_input_panel(struct wl_client *client,
- text_input->surface);
- wl_signal_emit(&ec->update_input_panel_signal,
- &text_input->cursor_rectangle);
-+ text_input->manager->current_text_input = text_input;
- }
- }
-
---
-1.9.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-weston-Fix-touch-screen-crash-issue.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-weston-Fix-touch-screen-crash-issue.patch
deleted file mode 100644
index 4849d5b64..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-weston-Fix-touch-screen-crash-issue.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 60250e9dc57fe56148c8a24bba107bce8a873fb4 Mon Sep 17 00:00:00 2001
-From: Karthik Ramanan <a0393906@ti.com>
-Date: Mon, 12 Mar 2018 10:56:28 +0530
-Subject: [PATCH 4/4] weston: Fix touch screen crash issue
-
-Touch screen operation causes the weston to crash with segment fault sometimes.
-The crash occurs when the coordinate (x,y) passed to the weston input module
-is outside the view window, hence the weston compositor is not able to pick
-up a display view and there is no code to detect this condition at function
-notify_touch().
-
-Upstream status: pending
-
-Signed-off-by: Eric Ruei <e-ruei1@ti.com>
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- libweston/input.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/libweston/input.c b/libweston/input.c
-index 4fedc55..bcb2f28 100644
---- a/libweston/input.c
-+++ b/libweston/input.c
-@@ -2185,6 +2185,12 @@ notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
- * until all touch points are up again. */
- if (touch->num_tp == 1) {
- ev = weston_compositor_pick_view(ec, x, y, &sx, &sy);
-+ if (!ev)
-+ {
-+ weston_log("notify_touch: weston_compositor_pick_view(%d, %d) failed to find a view!\n",
-+ wl_fixed_to_int(x), wl_fixed_to_int(y));
-+ return;
-+ }
- weston_touch_set_focus(touch, ev);
- } else if (!touch->focus) {
- /* Unexpected condition: We have non-initial touch but
---
-1.9.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-weston-drm-fix-dual-display-issue.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-weston-drm-fix-dual-display-issue.patch
deleted file mode 100644
index 9b06b81b3..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-weston-drm-fix-dual-display-issue.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From db6f5ce008d9b8a4cc7db71659ce1d21d3d7f97f Mon Sep 17 00:00:00 2001
-From: Eric Ruei <e-ruei1@ti.com>
-Date: Tue, 26 Mar 2019 13:32:31 -0400
-Subject: [PATCH 3/3] weston: drm: fix dual display issue
-
-This patch fixes the dual display issue by enhancing the primary plane
-search algorithm to keep the plane which is connected to the crtc of
-the output because the direct switching of active planes is not allowed.
-
-Upstream status: Pending
-
-Signed-off-by: Eric Ruei <e-ruei1@ti.com>
----
- libweston/compositor-drm.c | 17 ++++++++++++++++-
- 1 file changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
-index 3891176..fa694c3 100644
---- a/libweston/compositor-drm.c
-+++ b/libweston/compositor-drm.c
-@@ -428,6 +428,7 @@ struct drm_plane {
-
- uint32_t possible_crtcs;
- uint32_t plane_id;
-+ uint32_t crtc_id;
- uint32_t count_formats;
-
- struct drm_property_info props[WDRM_PLANE__COUNT];
-@@ -4073,6 +4074,7 @@ drm_plane_create(struct drm_backend *b, const drmModePlane *kplane,
- if (kplane) {
- plane->possible_crtcs = kplane->possible_crtcs;
- plane->plane_id = kplane->plane_id;
-+ plane->crtc_id = kplane->crtc_id;
-
- props = drmModeObjectGetProperties(b->drm.fd, kplane->plane_id,
- DRM_MODE_OBJECT_PLANE);
-@@ -4097,6 +4099,7 @@ drm_plane_create(struct drm_backend *b, const drmModePlane *kplane,
- else {
- plane->possible_crtcs = (1 << output->pipe);
- plane->plane_id = 0;
-+ plane->crtc_id = 0;
- plane->count_formats = 1;
- plane->formats[0].format = format;
- plane->type = type;
-@@ -4157,6 +4160,7 @@ drm_output_find_special_plane(struct drm_backend *b, struct drm_output *output,
- enum wdrm_plane_type type)
- {
- struct drm_plane *plane;
-+ struct drm_plane *plane2 = NULL; /* secondary plane */
-
- if (!b->universal_planes) {
- uint32_t format;
-@@ -4204,11 +4208,22 @@ drm_output_find_special_plane(struct drm_backend *b, struct drm_output *output,
- if (found_elsewhere)
- continue;
-
-+ /* The output should keep the primary plane connected to its
-+ * crtc since the direct switching of active plane is not
-+ * allowed. */
-+ if ((type == WDRM_PLANE_TYPE_PRIMARY) &&
-+ (plane->crtc_id != output->crtc_id)) {
-+ if (plane->crtc_id == 0) {
-+ plane->possible_crtcs = (1 << output->pipe);
-+ plane2 = plane;
-+ }
-+ continue;
-+ }
- plane->possible_crtcs = (1 << output->pipe);
- return plane;
- }
-
-- return NULL;
-+ return plane2;
- }
-
- /**
---
-1.9.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_8.0.0.bbappend b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_8.0.0.bbappend
deleted file mode 100644
index 21c912a66..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_8.0.0.bbappend
+++ /dev/null
@@ -1,13 +0,0 @@
-PACKAGECONFIG[kms] = "-Dbackend-drm=true,-Dbackend-drm=false,drm udev virtual/libgbm mtdev"
-
-PR_append = ".arago2"
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-# file://0005-weston-drm-fix-dual-display-issue.patch
-SRC_URI += " \
- file://0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch \
- file://0004-weston-Fix-touch-screen-crash-issue.patch \
-"
-
-INHIBIT_PACKAGE_STRIP = "1"
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/alsa-state/alsa-state.bbappend b/meta-agl-bsp/meta-ti/recipes-bsp/alsa-state/alsa-state.bbappend
deleted file mode 100644
index 3b2b8beb8..000000000
--- a/meta-agl-bsp/meta-ti/recipes-bsp/alsa-state/alsa-state.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-FILESEXTRAPATHS_prepend_dra7xx-evm := "${THISDIR}/${PN}:"
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/alsa-state/alsa-state/asound.state b/meta-agl-bsp/meta-ti/recipes-bsp/alsa-state/alsa-state/asound.state
deleted file mode 100644
index fe3ce6795..000000000
--- a/meta-agl-bsp/meta-ti/recipes-bsp/alsa-state/alsa-state/asound.state
+++ /dev/null
@@ -1,1347 +0,0 @@
-state.DRA7xxEVM {
- control.1 {
- iface MIXER
- name 'Left Line Mixer Line2R Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.2 {
- iface MIXER
- name 'Right Line Mixer Line2L Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.3 {
- iface MIXER
- name 'Left HP Mixer Line2R Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.4 {
- iface MIXER
- name 'Right HP Mixer Line2L Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.5 {
- iface MIXER
- name 'Left HPCOM Mixer Line2R Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.6 {
- iface MIXER
- name 'Right HPCOM Mixer Line2L Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.7 {
- iface MIXER
- name 'Line Line2 Bypass Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.8 {
- iface MIXER
- name 'HP Line2 Bypass Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.9 {
- iface MIXER
- name 'HPCOM Line2 Bypass Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.10 {
- iface MIXER
- name 'Mono Line2 Bypass Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.11 {
- iface MIXER
- name 'Mono PGA Bypass Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.12 {
- iface MIXER
- name 'Mono DAC Playback Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.13 {
- iface MIXER
- name 'Mono Playback Switch'
- value true
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.14 {
- iface MIXER
- name 'PCM Playback Volume'
- value.0 127
- value.1 127
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 127'
- dbmin -6350
- dbmax 0
- dbvalue.0 0
- dbvalue.1 0
- }
- }
- control.15 {
- iface MIXER
- name 'Left Line Mixer PGAR Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.16 {
- iface MIXER
- name 'Left Line Mixer DACR1 Playback Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.17 {
- iface MIXER
- name 'Right Line Mixer PGAL Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.18 {
- iface MIXER
- name 'Right Line Mixer DACL1 Playback Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.19 {
- iface MIXER
- name 'Left HP Mixer PGAR Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.20 {
- iface MIXER
- name 'Left HP Mixer DACR1 Playback Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.21 {
- iface MIXER
- name 'Right HP Mixer PGAL Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.22 {
- iface MIXER
- name 'Right HP Mixer DACL1 Playback Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.23 {
- iface MIXER
- name 'Left HPCOM Mixer PGAR Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.24 {
- iface MIXER
- name 'Left HPCOM Mixer DACR1 Playback Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.25 {
- iface MIXER
- name 'Right HPCOM Mixer PGAL Bypass Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.26 {
- iface MIXER
- name 'Right HPCOM Mixer DACL1 Playback Volume'
- value 118
- comment {
- access 'read write'
- type INTEGER
- count 1
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- }
- }
- control.27 {
- iface MIXER
- name 'Line PGA Bypass Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.28 {
- iface MIXER
- name 'Line DAC Playback Volume'
- value.0 118
- value.1 118
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 0
- dbvalue.1 0
- }
- }
- control.29 {
- iface MIXER
- name 'HP PGA Bypass Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.30 {
- iface MIXER
- name 'HP DAC Playback Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.31 {
- iface MIXER
- name 'HPCOM PGA Bypass Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.32 {
- iface MIXER
- name 'HPCOM DAC Playback Volume'
- value.0 71
- value.1 71
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 118'
- dbmin -9999999
- dbmax 0
- dbvalue.0 -2350
- dbvalue.1 -2350
- }
- }
- control.33 {
- iface MIXER
- name 'Line Playback Switch'
- value.0 true
- value.1 true
- comment {
- access 'read write'
- type BOOLEAN
- count 2
- }
- }
- control.34 {
- iface MIXER
- name 'HP Playback Switch'
- value.0 false
- value.1 false
- comment {
- access 'read write'
- type BOOLEAN
- count 2
- }
- }
- control.35 {
- iface MIXER
- name 'HPCOM Playback Switch'
- value.0 false
- value.1 false
- comment {
- access 'read write'
- type BOOLEAN
- count 2
- }
- }
- control.36 {
- iface MIXER
- name 'AGC Switch'
- value.0 false
- value.1 false
- comment {
- access 'read write'
- type BOOLEAN
- count 2
- }
- }
- control.37 {
- iface MIXER
- name 'Left AGC Target level'
- value '-5.5dB'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 '-5.5dB'
- item.1 '-8dB'
- item.2 '-10dB'
- item.3 '-12dB'
- item.4 '-14dB'
- item.5 '-17dB'
- item.6 '-20dB'
- item.7 '-24dB'
- }
- }
- control.38 {
- iface MIXER
- name 'Right AGC Target level'
- value '-5.5dB'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 '-5.5dB'
- item.1 '-8dB'
- item.2 '-10dB'
- item.3 '-12dB'
- item.4 '-14dB'
- item.5 '-17dB'
- item.6 '-20dB'
- item.7 '-24dB'
- }
- }
- control.39 {
- iface MIXER
- name 'Left AGC Attack time'
- value '8ms'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 '8ms'
- item.1 '11ms'
- item.2 '16ms'
- item.3 '20ms'
- }
- }
- control.40 {
- iface MIXER
- name 'Right AGC Attack time'
- value '8ms'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 '8ms'
- item.1 '11ms'
- item.2 '16ms'
- item.3 '20ms'
- }
- }
- control.41 {
- iface MIXER
- name 'Left AGC Decay time'
- value '100ms'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 '100ms'
- item.1 '200ms'
- item.2 '400ms'
- item.3 '500ms'
- }
- }
- control.42 {
- iface MIXER
- name 'Right AGC Decay time'
- value '100ms'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 '100ms'
- item.1 '200ms'
- item.2 '400ms'
- item.3 '500ms'
- }
- }
- control.43 {
- iface MIXER
- name 'De-emphasis Switch'
- value.0 false
- value.1 false
- comment {
- access 'read write'
- type BOOLEAN
- count 2
- }
- }
- control.44 {
- iface MIXER
- name 'PGA Capture Volume'
- value.0 79
- value.1 79
- comment {
- access 'read write'
- type INTEGER
- count 2
- range '0 - 119'
- dbmin 0
- dbmax 5950
- dbvalue.0 3950
- dbvalue.1 3950
- }
- }
- control.45 {
- iface MIXER
- name 'PGA Capture Switch'
- value.0 true
- value.1 true
- comment {
- access 'read write'
- type BOOLEAN
- count 2
- }
- }
- control.46 {
- iface MIXER
- name 'ADC HPF Cut-off'
- value.0 Disabled
- value.1 Disabled
- comment {
- access 'read write'
- type ENUMERATED
- count 2
- item.0 Disabled
- item.1 '0.0045xFs'
- item.2 '0.0125xFs'
- item.3 '0.025xFs'
- }
- }
- control.47 {
- iface MIXER
- name 'Output Driver Power-On time'
- value '0us'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 '0us'
- item.1 '10us'
- item.2 '100us'
- item.3 '1ms'
- item.4 '10ms'
- item.5 '50ms'
- item.6 '100ms'
- item.7 '200ms'
- item.8 '400ms'
- item.9 '800ms'
- item.10 '2s'
- item.11 '4s'
- }
- }
- control.48 {
- iface MIXER
- name 'Output Driver Ramp-up step'
- value '0ms'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 '0ms'
- item.1 '1ms'
- item.2 '2ms'
- item.3 '4ms'
- }
- }
- control.49 {
- iface MIXER
- name 'Left DAC Mux'
- value DAC_L1
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 DAC_L1
- item.1 DAC_L3
- item.2 DAC_L2
- }
- }
- control.50 {
- iface MIXER
- name 'Left HPCOM Mux'
- value 'differential of HPLOUT'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 'differential of HPLOUT'
- item.1 'constant VCM'
- item.2 single-ended
- }
- }
- control.51 {
- iface MIXER
- name 'Right DAC Mux'
- value DAC_R1
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 DAC_R1
- item.1 DAC_R3
- item.2 DAC_R2
- }
- }
- control.52 {
- iface MIXER
- name 'Right HPCOM Mux'
- value 'differential of HPROUT'
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 'differential of HPROUT'
- item.1 'constant VCM'
- item.2 single-ended
- item.3 'differential of HPLCOM'
- item.4 'external feedback'
- }
- }
- control.53 {
- iface MIXER
- name 'Left Line1L Mux'
- value single-ended
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 single-ended
- item.1 differential
- }
- }
- control.54 {
- iface MIXER
- name 'Left Line1R Mux'
- value single-ended
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 single-ended
- item.1 differential
- }
- }
- control.55 {
- iface MIXER
- name 'Right Line1L Mux'
- value single-ended
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 single-ended
- item.1 differential
- }
- }
- control.56 {
- iface MIXER
- name 'Right Line1R Mux'
- value single-ended
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 single-ended
- item.1 differential
- }
- }
- control.57 {
- iface MIXER
- name 'Left PGA Mixer Line1L Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.58 {
- iface MIXER
- name 'Left PGA Mixer Line1R Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.59 {
- iface MIXER
- name 'Left PGA Mixer Line2L Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.60 {
- iface MIXER
- name 'Left PGA Mixer Mic3L Switch'
- value true
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.61 {
- iface MIXER
- name 'Left PGA Mixer Mic3R Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.62 {
- iface MIXER
- name 'Left Line2L Mux'
- value single-ended
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 single-ended
- item.1 differential
- }
- }
- control.63 {
- iface MIXER
- name 'Right PGA Mixer Line1R Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.64 {
- iface MIXER
- name 'Right PGA Mixer Line1L Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.65 {
- iface MIXER
- name 'Right PGA Mixer Line2R Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.66 {
- iface MIXER
- name 'Right PGA Mixer Mic3L Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.67 {
- iface MIXER
- name 'Right PGA Mixer Mic3R Switch'
- value true
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.68 {
- iface MIXER
- name 'Right Line2R Mux'
- value single-ended
- comment {
- access 'read write'
- type ENUMERATED
- count 1
- item.0 single-ended
- item.1 differential
- }
- }
- control.69 {
- iface MIXER
- name 'Left Line Mixer PGAL Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.70 {
- iface MIXER
- name 'Left Line Mixer DACL1 Switch'
- value true
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.71 {
- iface MIXER
- name 'Left Line Mixer PGAR Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.72 {
- iface MIXER
- name 'Left Line Mixer DACR1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.73 {
- iface MIXER
- name 'Left Line Mixer Line2L Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.74 {
- iface MIXER
- name 'Left Line Mixer Line2R Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.75 {
- iface MIXER
- name 'Right Line Mixer PGAL Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.76 {
- iface MIXER
- name 'Right Line Mixer DACL1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.77 {
- iface MIXER
- name 'Right Line Mixer PGAR Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.78 {
- iface MIXER
- name 'Right Line Mixer DACR1 Switch'
- value true
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.79 {
- iface MIXER
- name 'Right Line Mixer Line2L Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.80 {
- iface MIXER
- name 'Right Line Mixer Line2R Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.81 {
- iface MIXER
- name 'Left HP Mixer PGAL Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.82 {
- iface MIXER
- name 'Left HP Mixer DACL1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.83 {
- iface MIXER
- name 'Left HP Mixer PGAR Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.84 {
- iface MIXER
- name 'Left HP Mixer DACR1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.85 {
- iface MIXER
- name 'Left HP Mixer Line2L Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.86 {
- iface MIXER
- name 'Left HP Mixer Line2R Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.87 {
- iface MIXER
- name 'Right HP Mixer PGAL Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.88 {
- iface MIXER
- name 'Right HP Mixer DACL1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.89 {
- iface MIXER
- name 'Right HP Mixer PGAR Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.90 {
- iface MIXER
- name 'Right HP Mixer DACR1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.91 {
- iface MIXER
- name 'Right HP Mixer Line2L Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.92 {
- iface MIXER
- name 'Right HP Mixer Line2R Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.93 {
- iface MIXER
- name 'Left HPCOM Mixer PGAL Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.94 {
- iface MIXER
- name 'Left HPCOM Mixer DACL1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.95 {
- iface MIXER
- name 'Left HPCOM Mixer PGAR Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.96 {
- iface MIXER
- name 'Left HPCOM Mixer DACR1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.97 {
- iface MIXER
- name 'Left HPCOM Mixer Line2L Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.98 {
- iface MIXER
- name 'Left HPCOM Mixer Line2R Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.99 {
- iface MIXER
- name 'Right HPCOM Mixer PGAL Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.100 {
- iface MIXER
- name 'Right HPCOM Mixer DACL1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.101 {
- iface MIXER
- name 'Right HPCOM Mixer PGAR Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.102 {
- iface MIXER
- name 'Right HPCOM Mixer DACR1 Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.103 {
- iface MIXER
- name 'Right HPCOM Mixer Line2L Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.104 {
- iface MIXER
- name 'Right HPCOM Mixer Line2R Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.105 {
- iface MIXER
- name 'Mono Mixer Line2L Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.106 {
- iface MIXER
- name 'Mono Mixer PGAL Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.107 {
- iface MIXER
- name 'Mono Mixer DACL1 Switch'
- value true
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.108 {
- iface MIXER
- name 'Mono Mixer Line2R Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.109 {
- iface MIXER
- name 'Mono Mixer PGAR Bypass Switch'
- value false
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
- control.110 {
- iface MIXER
- name 'Mono Mixer DACR1 Switch'
- value true
- comment {
- access 'read write'
- type BOOLEAN
- count 1
- }
- }
-}
-state.H58040000encode {
- control {
- }
-}
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km/0001-Add-support-for-AGL-toolchain.patch b/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km/0001-Add-support-for-AGL-toolchain.patch
deleted file mode 100644
index 93aff157a..000000000
--- a/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km/0001-Add-support-for-AGL-toolchain.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 11131a5e778d19c06eefbcf61447c6efbcee0613 Mon Sep 17 00:00:00 2001
-From: Paul Barker <paul.barker@sancloud.co.uk>
-Date: Mon, 18 Nov 2019 08:47:41 +0000
-Subject: [PATCH] Add support for AGL toolchain
-
-We can use the pre-existing config for arm-linux-gnueabihf, we just need
-to make sure our toolchain is matched against this and not
-arm-linux-gnueabi.
-
-Signed-off-by: Paul Barker <paul.barker@sancloud.co.uk>
----
- eurasia_km/eurasiacon/build/linux2/config/compiler.mk | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/eurasia_km/eurasiacon/build/linux2/config/compiler.mk b/eurasia_km/eurasiacon/build/linux2/config/compiler.mk
-index 2ba3e5e..03e86c5 100644
---- a/eurasia_km/eurasiacon/build/linux2/config/compiler.mk
-+++ b/eurasia_km/eurasiacon/build/linux2/config/compiler.mk
-@@ -68,7 +68,7 @@ define calculate-compiler-preferred-target
- ifneq ($$(filter aarch64-%,$$($(1)_compiler_preferred_target)),)
- $(1)_compiler_preferred_target := aarch64-linux-gnu
- endif
-- ifneq ($$(filter arm-%-gnueabihf arm-oe-linux-gnueabi,$$($(1)_compiler_preferred_target)),)
-+ ifneq ($$(filter arm-%-gnueabihf arm-oe-linux-gnueabi arm-agl-linux-gnueabi,$$($(1)_compiler_preferred_target)),)
- $(1)_compiler_preferred_target := arm-linux-gnueabihf
- endif
- ifneq ($$(filter arm-%-gnueabi armv7a-cros-linux-gnueabi armv7hl-redhat-linux-gnueabi,$$($(1)_compiler_preferred_target)),)
---
-2.17.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km_%.bbappend b/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km_%.bbappend
deleted file mode 100644
index 6390e660e..000000000
--- a/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km_%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "file://0001-Add-support-for-AGL-toolchain.patch"
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/u-boot/files/uEnv.txt b/meta-agl-bsp/meta-ti/recipes-bsp/u-boot/files/uEnv.txt
deleted file mode 100755
index 79f3d1ff2..000000000
--- a/meta-agl-bsp/meta-ti/recipes-bsp/u-boot/files/uEnv.txt
+++ /dev/null
@@ -1 +0,0 @@
-fdtfile=dra7-evm-lcd-osd101t2045.dtb
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/u-boot/u-boot-ti-staging_%.bbappend b/meta-agl-bsp/meta-ti/recipes-bsp/u-boot/u-boot-ti-staging_%.bbappend
deleted file mode 100644
index d1b9b2704..000000000
--- a/meta-agl-bsp/meta-ti/recipes-bsp/u-boot/u-boot-ti-staging_%.bbappend
+++ /dev/null
@@ -1,16 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-PR_append = "_agl"
-
-SRC_URI += " file://${UBOOT_ENV_BINARY}"
-
-UBOOT_ENV = "uEnv"
-
-do_deploy_append () {
- if [ "x${UBOOT_ENV}" != "x" ]
- then
- install ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE}
- ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK}
- fi
-}
-
diff --git a/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um/pvr.service b/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um/pvr.service
deleted file mode 100644
index 1acb94fd4..000000000
--- a/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um/pvr.service
+++ /dev/null
@@ -1,19 +0,0 @@
-[Unit]
-Description=PVR service
-SourcePath=/etc/ti-sgx/rc.pvr
-DefaultDependencies=no
-Before=psplash-start.service
-
-[Service]
-Type=forking
-Restart=no
-TimeoutSec=5min
-IgnoreSIGPIPE=no
-KillMode=process
-GuessMainPID=no
-RemainAfterExit=yes
-ExecStart=/etc/ti-sgx/rc.pvr start
-ExecStop=/etc/ti-sgx/rc.pvr stop
-
-[Install]
-WantedBy=sysinit.target
diff --git a/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um_%.bbappend b/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um_%.bbappend
deleted file mode 100644
index 21142df59..000000000
--- a/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um_%.bbappend
+++ /dev/null
@@ -1,18 +0,0 @@
-FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
-FILES_${PN} += "/etc/ti-sgx/"
-
-SRC_URI_append = "\
- file://pvr.service \
-"
-
-inherit systemd
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE_${PN} = "pvr.service"
-
-do_install_append() {
- install -d ${D}${systemd_system_unitdir}
- install -m 0755 ${WORKDIR}/pvr.service ${D}${systemd_system_unitdir}
- install -d ${D}/etc/ti-sgx
- install -m 0755 ${D}/etc/init.d/rc.pvr ${D}/etc/ti-sgx
-}
diff --git a/meta-agl-bsp/meta-ti/recipes-graphics/mesa/mesa-gl_%.bbappend b/meta-agl-bsp/meta-ti/recipes-graphics/mesa/mesa-gl_%.bbappend
deleted file mode 100644
index a5a69513a..000000000
--- a/meta-agl-bsp/meta-ti/recipes-graphics/mesa/mesa-gl_%.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove GBM support from Mesa
-# TI Platforms provides own GBM library
-
-PACKAGES_remove = "libgbm"
-PACKAGES_remove = "libgbm-dev"
-
-EXTRA_OECONF_remove = "--enable-gbm"
diff --git a/meta-agl-bsp/meta-ti/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-ti/recipes-graphics/wayland/weston-ini-conf.bbappend
deleted file mode 100644
index 684031eae..000000000
--- a/meta-agl-bsp/meta-ti/recipes-graphics/wayland/weston-ini-conf.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-# While we could have a panel attached to HDMI, we only use the default
-# panel isntead.
-SRC_URI_remove_dra7xx-evm = "file://hdmi-a-1-270.cfg"
-# Our DPI panel shows up as "UNNAMED-1"
-SRC_URI_append_dra7xx-evm = " file://unnamed.cfg"
diff --git a/meta-agl-bsp/meta-ti/recipes-graphics/wayland/weston-ini-conf/unnamed.cfg b/meta-agl-bsp/meta-ti/recipes-graphics/wayland/weston-ini-conf/unnamed.cfg
deleted file mode 100644
index 29544932e..000000000
--- a/meta-agl-bsp/meta-ti/recipes-graphics/wayland/weston-ini-conf/unnamed.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[output]
-name=UNNAMED-1
-transform=270
diff --git a/meta-agl-bsp/meta-ti/recipes-kernel/linux/files/dcan2_pinmux_enable.patch b/meta-agl-bsp/meta-ti/recipes-kernel/linux/files/dcan2_pinmux_enable.patch
deleted file mode 100644
index 6c54c5ee1..000000000
--- a/meta-agl-bsp/meta-ti/recipes-kernel/linux/files/dcan2_pinmux_enable.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts
-index 35424da..08fca09 100644
---- a/arch/arm/boot/dts/dra7-evm.dts
-+++ b/arch/arm/boot/dts/dra7-evm.dts
-@@ -243,6 +243,20 @@
- DRA7XX_CORE_IOPAD(0x380c, PIN_INPUT | MUX_MODE1) /* i2c2_scl.hdmi1_ddc_sda */
- >;
- };
-+ dcan2_pins_default: dcan2_pins_default {
-+ pinctrl-single,pins = <
-+ DRA7XX_CORE_IOPAD(0x3688, PIN_OUTPUT_PULLUP | MUX_MODE2) /* gpio6_14.dcan2_tx */
-+ DRA7XX_CORE_IOPAD(0x368C, PIN_INPUT_PULLUP | MUX_MODE2) /* gpio6_15.dcan2_rx */
-+ >;
-+ };
-+
-+ dcan2_pins_sleep: dcan2_pins_sleep {
-+ pinctrl-single,pins = <
-+ DRA7XX_CORE_IOPAD(0x3688, MUX_MODE15 | PULL_UP) /* gpio6_14.dcan2_tx.off */
-+ DRA7XX_CORE_IOPAD(0x368C, MUX_MODE15 | PULL_UP) /* gpio6_15.dcan2_rx.off */
-+ >;
-+ };
-+
- };
-
- &i2c1 {
-@@ -703,6 +717,13 @@
- memory-region = <&ipu1_memory_region>;
- };
-
-+&dcan2 {
-+ status = "ok";
-+ pinctrl-names = "default", "sleep";
-+ pinctrl-0 = <&dcan2_pins_default>;
-+ pinctrl-1 = <&dcan2_pins_sleep>;
-+};
-+
- &dsp1 {
- status = "okay";
- memory-region = <&dsp1_memory_region>;
diff --git a/meta-agl-bsp/meta-ti/recipes-kernel/linux/linux-ti-staging_%.bbappend b/meta-agl-bsp/meta-ti/recipes-kernel/linux/linux-ti-staging_%.bbappend
deleted file mode 100644
index 2f6c449bc..000000000
--- a/meta-agl-bsp/meta-ti/recipes-kernel/linux/linux-ti-staging_%.bbappend
+++ /dev/null
@@ -1,11 +0,0 @@
-require recipes-kernel/linux/linux-agl.inc
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-#-------------------------------------------------------------------------
-# patches for enabling dcan2 and fix dcan1 & dcan2 adresses
-
-SRC_URI += " \
- file://dcan2_pinmux_enable.patch \
-"
-
diff --git a/meta-agl-bsp/meta-ti/recipes-multimedia/pulseaudio/pulseaudio/dra7xx-evm-set-default-sink-source.patch b/meta-agl-bsp/meta-ti/recipes-multimedia/pulseaudio/pulseaudio/dra7xx-evm-set-default-sink-source.patch
deleted file mode 100644
index d45c5ef50..000000000
--- a/meta-agl-bsp/meta-ti/recipes-multimedia/pulseaudio/pulseaudio/dra7xx-evm-set-default-sink-source.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- pulseaudio-9.0/src/daemon/default.pa.in.orig 2017-08-04 00:07:08.833004893 +0300
-+++ pulseaudio-9.0/src/daemon/default.pa.in 2017-08-04 00:09:18.045102067 +0300
-@@ -162,8 +162,10 @@
- ])dnl
-
- ### Make some devices default
--#set-default-sink output
--#set-default-source input
-+# DRA7xx-EVM CPU Board Line-Out/Headphone
-+set-default-sink alsa_output.platform-sound0.analog-stereo
-+# DRA7xx-EVM CPU Board Microphone/Line-In
-+set-default-source alsa_input.platform-sound0.analog-stereo
-
- .ifexists module-router.so
- load-module module-router
diff --git a/meta-agl-bsp/meta-ti/recipes-multimedia/pulseaudio/pulseaudio_%.bbappend b/meta-agl-bsp/meta-ti/recipes-multimedia/pulseaudio/pulseaudio_%.bbappend
deleted file mode 100644
index 37c4179e5..000000000
--- a/meta-agl-bsp/meta-ti/recipes-multimedia/pulseaudio/pulseaudio_%.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/pulseaudio:"
-
-################### F I X M E ####################
-# FIXME pyro
-DISABLED_SRC_URI += " \
- file://dra7xx-evm-set-default-sink-source.patch \
-"
diff --git a/meta-agl-bsp/openembedded-layer/recipes-devtools/lua/lua_%.bbappend b/meta-agl-bsp/openembedded-layer/recipes-devtools/lua/lua_%.bbappend
new file mode 100644
index 000000000..f4fc54d86
--- /dev/null
+++ b/meta-agl-bsp/openembedded-layer/recipes-devtools/lua/lua_%.bbappend
@@ -0,0 +1,4 @@
+# this causes a crash in the selftest db.lua !
+# Bug-AGL: SPEC-3828
+# Upstream status: pending
+SRC_URI:remove = "file://CVE-2020-15945.patch"
diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-Set-up-environment-for-OSTree-integration.patch b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-Set-up-environment-for-OSTree-integration.patch
deleted file mode 100644
index 5172fdd3a..000000000
--- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-Set-up-environment-for-OSTree-integration.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From ebb26338d0c2f436a86fd4d7cb8d723a90d6a369 Mon Sep 17 00:00:00 2001
-From: Anton Gerasimov <anton@advancedtelematic.com>
-Date: Thu, 15 Sep 2016 17:52:41 +0200
-Subject: [PATCH 1/2] Set up environment for OSTree integration
-
----
- include/configs/qemu-x86.h | 20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-diff --git a/include/configs/qemu-x86.h b/include/configs/qemu-x86.h
-index 78c296f..79df455 100644
---- a/include/configs/qemu-x86.h
-+++ b/include/configs/qemu-x86.h
-@@ -74,4 +74,24 @@
- #undef CONFIG_ENV_IS_IN_SPI_FLASH
- #define CONFIG_ENV_IS_NOWHERE
-
-+#undef CONFIG_BOOTARGS
-+#define CONFIG_BOOTARGS "root=/dev/hda2 console=ttyS0"
-+
-+#undef CONFIG_BOOTDELAY
-+#define CONFIG_BOOTDELAY 3
-+
-+#undef CONFIG_BOOTCOMMAND
-+#define CONFIG_BOOTCOMMAND "run loadenv;" \
-+ "setenv bootargs $bootargs\" console=ttyS0 root=/dev/ram0 rw rootfstype=ext4 rootwait rootdelay=2 ostree_root=/dev/hda ramdisk_size=16384 \";" \
-+ "ext2load ide 0 $loadaddr \"/boot\"$kernel_image;" \
-+ "ext2load ide 0 $ramdiskaddr \"/boot\"$ramdisk_image;" \
-+ "zboot $loadaddr - $ramdiskaddr $filesize"
-+
-+#undef CONFIG_EXTRA_ENV_SETTINGS
-+#define CONFIG_EXTRA_ENV_SETTINGS "kernel_image=/bzImage\0" \
-+ "ramdisk_image=/initrd\0" \
-+ "ramdiskaddr=0x4000000\0" \
-+ "bootdelay=3\0" \
-+ "loadenv=if ext2load ide 0 $loadaddr /boot/loader/uEnv.txt; then env import -t $loadaddr $filesize; fi;"
-+
- #endif /* __CONFIG_H */
---
-2.9.3
-
diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-fixup-build-with-gcc6.patch b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-fixup-build-with-gcc6.patch
deleted file mode 100644
index df1f786c6..000000000
--- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0001-fixup-build-with-gcc6.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From ba619c7ec7820e80d1b5b520440fdb81c31c0baf Mon Sep 17 00:00:00 2001
-From: Ronan Le Martret <ronan.lemartret@iot.bzh>
-Date: Fri, 14 Oct 2016 09:03:11 +0200
-Subject: [PATCH] fix gcc6 build
-
-Signed-off-by: ronan <ronan@linux-pgnz.suse>
----
- include/linux/compiler-gcc6.h | 66 +++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 66 insertions(+)
- create mode 100644 include/linux/compiler-gcc6.h
-
-diff --git a/include/linux/compiler-gcc6.h b/include/linux/compiler-gcc6.h
-new file mode 100644
-index 0000000..a3d00d8
---- /dev/null
-+++ b/include/linux/compiler-gcc6.h
-@@ -0,0 +1,66 @@
-+#ifndef __LINUX_COMPILER_H
-+#error "Please don't include <linux/compiler-gcc6.h> directly, include <linux/compiler.h> instead."
-+#endif
-+
-+#define __used __attribute__((__used__))
-+#define __must_check __attribute__((warn_unused_result))
-+#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
-+
-+/* Mark functions as cold. gcc will assume any path leading to a call
-+ to them will be unlikely. This means a lot of manual unlikely()s
-+ are unnecessary now for any paths leading to the usual suspects
-+ like BUG(), printk(), panic() etc. [but let's keep them for now for
-+ older compilers]
-+
-+ Early snapshots of gcc 4.3 don't support this and we can't detect this
-+ in the preprocessor, but we can live with this because they're unreleased.
-+ Maketime probing would be overkill here.
-+
-+ gcc also has a __attribute__((__hot__)) to move hot functions into
-+ a special section, but I don't see any sense in this right now in
-+ the kernel context */
-+#define __cold __attribute__((__cold__))
-+
-+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
-+
-+#ifndef __CHECKER__
-+# define __compiletime_warning(message) __attribute__((warning(message)))
-+# define __compiletime_error(message) __attribute__((error(message)))
-+#endif /* __CHECKER__ */
-+
-+/*
-+ * Mark a position in code as unreachable. This can be used to
-+ * suppress control flow warnings after asm blocks that transfer
-+ * control elsewhere.
-+ *
-+ * Early snapshots of gcc 4.5 don't support this and we can't detect
-+ * this in the preprocessor, but we can live with this because they're
-+ * unreleased. Really, we need to have autoconf for the kernel.
-+ */
-+#define unreachable() __builtin_unreachable()
-+
-+/* Mark a function definition as prohibited from being cloned. */
-+#define __noclone __attribute__((__noclone__))
-+
-+/*
-+ * Tell the optimizer that something else uses this function or variable.
-+ */
-+#define __visible __attribute__((externally_visible))
-+
-+/*
-+ * GCC 'asm goto' miscompiles certain code sequences:
-+ *
-+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
-+ *
-+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
-+ * Fixed in GCC 4.8.2 and later versions.
-+ *
-+ * (asm goto is automatically volatile - the naming reflects this.)
-+ */
-+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
-+
-+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
-+#define __HAVE_BUILTIN_BSWAP32__
-+#define __HAVE_BUILTIN_BSWAP64__
-+#define __HAVE_BUILTIN_BSWAP16__
-+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
---
-2.6.6
-
diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch
deleted file mode 100644
index 7540b7467..000000000
--- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From ab0d7e270d89f6eb99582197d2d58bf60c9c3d26 Mon Sep 17 00:00:00 2001
-From: Anton Gerasimov <anton@advancedtelematic.com>
-Date: Thu, 15 Sep 2016 16:49:32 +0200
-Subject: [PATCH 2/2] Replace wraps with built-in code to remove dependency on
- multilib
-
----
- arch/x86/config.mk | 2 --
- arch/x86/lib/gcc.c | 104 ++++++++++++++++++++++++++++++++++++++++++++---------
- 2 files changed, 87 insertions(+), 19 deletions(-)
-
-diff --git a/arch/x86/config.mk b/arch/x86/config.mk
-index 999143e..139576e 100644
---- a/arch/x86/config.mk
-+++ b/arch/x86/config.mk
-@@ -22,5 +22,3 @@ PLATFORM_RELFLAGS += -ffunction-sections -fvisibility=hidden
- PLATFORM_LDFLAGS += --emit-relocs -Bsymbolic -Bsymbolic-functions -m elf_i386
-
- LDFLAGS_FINAL += --gc-sections -pie
--LDFLAGS_FINAL += --wrap=__divdi3 --wrap=__udivdi3
--LDFLAGS_FINAL += --wrap=__moddi3 --wrap=__umoddi3
-diff --git a/arch/x86/lib/gcc.c b/arch/x86/lib/gcc.c
-index 497ad75..c321b11 100644
---- a/arch/x86/lib/gcc.c
-+++ b/arch/x86/lib/gcc.c
-@@ -19,22 +19,92 @@
-
- #ifdef __GNUC__
-
--/*
-- * GCC's libgcc handling is quite broken. While the libgcc functions
-- * are always regparm(0) the code that calls them uses whatever the
-- * compiler call specifies. Therefore we need a wrapper around those
-- * functions. See gcc bug PR41055 for more information.
-- */
--#define WRAP_LIBGCC_CALL(type, name) \
-- type __normal_##name(type a, type b) __attribute__((regparm(0))); \
-- type __wrap_##name(type a, type b); \
-- type __attribute__((no_instrument_function)) \
-- __wrap_##name(type a, type b) \
-- { return __normal_##name(a, b); }
--
--WRAP_LIBGCC_CALL(long long, __divdi3)
--WRAP_LIBGCC_CALL(unsigned long long, __udivdi3)
--WRAP_LIBGCC_CALL(long long, __moddi3)
--WRAP_LIBGCC_CALL(unsigned long long, __umoddi3)
-+#include <stdint.h>
-+#include <stddef.h>
-+
-+uint64_t __udivmoddi4 ( uint64_t num,
-+ uint64_t den,
-+ uint64_t *rem_p )
-+{
-+ uint64_t quot = 0, qbit = 1;
-+
-+ if ( den == 0 ) {
-+ return 1/((unsigned)den); /* Intentional divide by zero, without
-+ triggering a compiler warning which
-+ would abort the build */
-+ }
-+
-+ /* Left-justify denominator and count shift */
-+ while ( (int64_t)den >= 0 ) {
-+ den <<= 1;
-+ qbit <<= 1;
-+ }
-+
-+ while ( qbit ) {
-+ if ( den <= num ) {
-+ num -= den;
-+ quot += qbit;
-+ }
-+ den >>= 1;
-+ qbit >>= 1;
-+ }
-+
-+ if ( rem_p )
-+ *rem_p = num;
-+
-+ return quot;
-+}
-+uint64_t __udivdi3( uint64_t num, uint64_t den )
-+{
-+ return __udivmoddi4(num, den, NULL);
-+}
-+
-+uint64_t __umoddi3 ( uint64_t num, uint64_t den )
-+{
-+ uint64_t v;
-+
-+ (void) __udivmoddi4(num, den, &v);
-+ return v;
-+}
-+
-+int64_t __divmoddi4 ( int64_t num,
-+ int64_t den,
-+ int64_t* rem_p )
-+{
-+ int minus = 0;
-+ int64_t v;
-+
-+ if ( num < 0 ) {
-+ num = -num;
-+ minus = 1;
-+ }
-+ if ( den < 0 ) {
-+ den = -den;
-+ minus ^= 1;
-+ }
-+
-+ v = __udivmoddi4(num, den, (uint64_t *)rem_p);
-+ if ( minus ) {
-+ v = -v;
-+ if ( rem_p )
-+ *rem_p = -(*rem_p);
-+ }
-+
-+ return v;
-+}
-+
-+
-+int64_t __moddi3 (int64_t num, int64_t den)
-+{
-+ int64_t v;
-+
-+ (void) __divmoddi4(num, den, &v);
-+ return v;
-+}
-+
-+int64_t __divdi3(int64_t num, int64_t den)
-+{
-+ return __divmoddi4(num, den, NULL);
-+}
-
- #endif
---
-2.9.3
-
diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-fixup-build-with-gcc7.patch b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-fixup-build-with-gcc7.patch
deleted file mode 100644
index fc7933ea0..000000000
--- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota/0002-fixup-build-with-gcc7.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From eea58226f0b604d3047c495985197113838d3a7a Mon Sep 17 00:00:00 2001
-From: Trevor Woerner <twoerner@gmail.com>
-Date: Tue, 20 Jun 2017 13:25:20 -0400
-Subject: [PATCH] fix build for gcc7
-
-| In file included from .../include/linux/compiler.h:54:0,
-| from .../include/uapi/linux/stddef.h:1,
-| from .../include/linux/stddef.h:4,
-| from .../include/uapi/linux/posix_types.h:4,
-| from .../include/uapi/linux/types.h:13,
-| from .../include/linux/types.h:5,
-| from .../include/linux/mod_devicetable.h:11,
-| from .../scripts/mod/devicetable-offsets.c:2:
-| .../include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h: No such file or directory
-| #include gcc_header(__GNUC__)
-
-Upstream-Status: Pending
-
-Signed-off-by: Trevor Woerner <twoerner@gmail.com>
-Signed-off-by: Fabio Berton <fabio.berton@gmail.com>
-Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
----
- include/linux/compiler-gcc7.h | 66 +++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 66 insertions(+)
- create mode 100644 include/linux/compiler-gcc7.h
-
-diff --git a/include/linux/compiler-gcc7.h b/include/linux/compiler-gcc7.h
-new file mode 100644
-index 0000000..cdd1cc2
---- /dev/null
-+++ b/include/linux/compiler-gcc7.h
-@@ -0,0 +1,66 @@
-+#ifndef __LINUX_COMPILER_H
-+#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
-+#endif
-+
-+#define __used __attribute__((__used__))
-+#define __must_check __attribute__((warn_unused_result))
-+#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
-+
-+/* Mark functions as cold. gcc will assume any path leading to a call
-+ to them will be unlikely. This means a lot of manual unlikely()s
-+ are unnecessary now for any paths leading to the usual suspects
-+ like BUG(), printk(), panic() etc. [but let's keep them for now for
-+ older compilers]
-+
-+ Early snapshots of gcc 4.3 don't support this and we can't detect this
-+ in the preprocessor, but we can live with this because they're unreleased.
-+ Maketime probing would be overkill here.
-+
-+ gcc also has a __attribute__((__hot__)) to move hot functions into
-+ a special section, but I don't see any sense in this right now in
-+ the kernel context */
-+#define __cold __attribute__((__cold__))
-+
-+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
-+
-+#ifndef __CHECKER__
-+# define __compiletime_warning(message) __attribute__((warning(message)))
-+# define __compiletime_error(message) __attribute__((error(message)))
-+#endif /* __CHECKER__ */
-+
-+/*
-+ * Mark a position in code as unreachable. This can be used to
-+ * suppress control flow warnings after asm blocks that transfer
-+ * control elsewhere.
-+ *
-+ * Early snapshots of gcc 4.5 don't support this and we can't detect
-+ * this in the preprocessor, but we can live with this because they're
-+ * unreleased. Really, we need to have autoconf for the kernel.
-+ */
-+#define unreachable() __builtin_unreachable()
-+
-+/* Mark a function definition as prohibited from being cloned. */
-+#define __noclone __attribute__((__noclone__))
-+
-+/*
-+ * Tell the optimizer that something else uses this function or variable.
-+ */
-+#define __visible __attribute__((externally_visible))
-+
-+/*
-+ * GCC 'asm goto' miscompiles certain code sequences:
-+ *
-+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
-+ *
-+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
-+ * Fixed in GCC 4.8.2 and later versions.
-+ *
-+ * (asm goto is automatically volatile - the naming reflects this.)
-+ */
-+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
-+
-+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
-+#define __HAVE_BUILTIN_BSWAP32__
-+#define __HAVE_BUILTIN_BSWAP64__
-+#define __HAVE_BUILTIN_BSWAP16__
-+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
---
-2.7.4
-
diff --git a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota_2015.07.bb b/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota_2015.07.bb
deleted file mode 100644
index 7ef3cacd4..000000000
--- a/meta-agl-bsp/recipes-bsp/u-boot/u-boot-ota_2015.07.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-include recipes-bsp/u-boot/u-boot.inc
-DEPENDS += "dtc-native"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://Licenses/README;md5=0507cd7da8e7ad6d6701926ec9b84c95"
-
-# This revision corresponds to the tag "v2015.07"
-# We use the revision in order to avoid having to fetch it from the
-# repo during parse
-SRCREV = "baba2f57e8f4ed3fa67fe213d22da0de5e00f204"
-
-SRC_URI = "\
- git://git.denx.de/u-boot.git;branch=master \
- file://0001-Set-up-environment-for-OSTree-integration.patch \
- file://0002-Replace-wraps-with-built-in-code-to-remove-dependenc.patch \
- file://0001-fixup-build-with-gcc6.patch \
- file://0002-fixup-build-with-gcc7.patch \
-"
-S = "${WORKDIR}/git"
-
-PV = "v2015.07+git${SRCPV}"
-
-EXTRA_OEMAKE_append = " KCFLAGS=-fgnu89-inline "
-EXTRA_OEMAKE_append_qemux86 = " BUILD_ROM=y"
-EXTRA_OEMAKE_append_qemux86-64 = " BUILD_ROM=y"
-
-UBOOT_SUFFIX = "bin"
-UBOOT_SUFFIX_qemux86 = "rom"
-UBOOT_SUFFIX_qemux86-64 = "rom"
diff --git a/meta-agl-bsp/recipes-graphics/opencv/opencv/0004-Change-Max-Device-Count-To-16.patch b/meta-agl-bsp/recipes-graphics/opencv/opencv/0004-Change-Max-Device-Count-To-16.patch
deleted file mode 100644
index 2ad367c8d..000000000
--- a/meta-agl-bsp/recipes-graphics/opencv/opencv/0004-Change-Max-Device-Count-To-16.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/modules/videoio/src/cap_v4l.cpp b/modules/videoio/src/cap_v4l.cpp
-index c36a619a56..0040e4574e 100644
---- a/modules/videoio/src/cap_v4l.cpp
-+++ b/modules/videoio/src/cap_v4l.cpp
-@@ -256,7 +256,7 @@ make & enjoy!
- #define DEFAULT_V4L_HEIGHT 480
- #define DEFAULT_V4L_FPS 30
-
--#define MAX_CAMERAS 8
-+#define MAX_CAMERAS 16
-
- // default and maximum number of V4L buffers, not including last, 'special' buffer
- #define MAX_V4L_BUFFERS 10
diff --git a/meta-agl-bsp/recipes-graphics/opencv/opencv_4.%.bbappend b/meta-agl-bsp/recipes-graphics/opencv/opencv_4.%.bbappend
deleted file mode 100644
index 8a68b0641..000000000
--- a/meta-agl-bsp/recipes-graphics/opencv/opencv_4.%.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += " \
- file://0004-Change-Max-Device-Count-To-16.patch \
- "
diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bb b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bb
deleted file mode 100644
index 14fbd0273..000000000
--- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Startup script and systemd unit file for the Weston Wayland compositor"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-
-SRC_URI = "file://core.cfg \
- file://shell.cfg \
- file://hdmi-a-1-270.cfg \
- "
-
-S = "${WORKDIR}"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-do_compile() {
- # Put all of our cfg files together.
- rm -f ${WORKDIR}/weston.ini
- for F in ${WORKDIR}/*.cfg; do
- cat $F >> ${WORKDIR}/weston.ini
- echo >> ${WORKDIR}/weston.ini
- done
- sed -i -e '$ d' ${WORKDIR}/weston.ini
-}
-
-do_install_append() {
- WESTON_INI_CONFIG=${sysconfdir}/xdg/weston
- install -d ${D}${WESTON_INI_CONFIG}
- install -m 0644 ${WORKDIR}/weston.ini ${D}${WESTON_INI_CONFIG}/weston.ini
-}
diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bbappend
deleted file mode 100644
index 671fa171f..000000000
--- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-SRC_URI += "${@bb.utils.contains("DISTRO_FEATURES", "weston-remoting", "file://remote-output.cfg", "",d)}"
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch b/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch
deleted file mode 100644
index c595dfdf5..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 63f5acdf097b7baca8d0f7056a037f8811b48aaa Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Tue, 27 Feb 2018 17:06:21 +0100
-Subject: [PATCH] Smack: Handle CGROUP2 in the same way that CGROUP
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The new file system CGROUP2 isn't actually handled
-by smack. This changes makes Smack treat equally
-CGROUP and CGROUP2 items.
-
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- security/smack/smack_lsm.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 03fdecba93bb..5d77ed04422c 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -3431,6 +3431,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode)
- if (opt_dentry->d_parent == opt_dentry) {
- switch (sbp->s_magic) {
- case CGROUP_SUPER_MAGIC:
-+ case CGROUP2_SUPER_MAGIC:
- /*
- * The cgroup filesystem is never mounted,
- * so there's no opportunity to set the mount
-@@ -3474,6 +3475,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode)
- switch (sbp->s_magic) {
- case SMACK_MAGIC:
- case CGROUP_SUPER_MAGIC:
-+ case CGROUP2_SUPER_MAGIC:
- /*
- * Casey says that it's a little embarrassing
- * that the smack file system doesn't do
---
-2.14.3
-
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch b/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch
deleted file mode 100644
index 4100bb8fd..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/Smack-Privilege-check-on-key-operations.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-Smack: Privilege check on key operations
-
-Operations on key objects are subjected to Smack policy
-even if the process is privileged. This is inconsistent
-with the general behavior of Smack and may cause issues
-with authentication by privileged daemons. This patch
-allows processes with CAP_MAC_OVERRIDE to access keys
-even if the Smack rules indicate otherwise.
-
-Reported-by: Jose Bollo <jobol@nonadev.net>
-Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
----
- security/smack/smack.h | 1 +
- security/smack/smack_access.c | 40 +++++++++++++++++++++++++++++-----------
- security/smack/smack_lsm.c | 4 ++++
- 3 files changed, 34 insertions(+), 11 deletions(-)
-
-diff --git a/security/smack/smack.h b/security/smack/smack.h
-index 6a71fc7..f7db791 100644
---- a/security/smack/smack.h
-+++ b/security/smack/smack.h
-@@ -321,6 +321,7 @@ struct smack_known *smk_import_entry(const char *, int);
- void smk_insert_entry(struct smack_known *skp);
- struct smack_known *smk_find_entry(const char *);
- bool smack_privileged(int cap);
-+bool smack_privileged_cred(int cap, const struct cred *cred);
- void smk_destroy_label_list(struct list_head *list);
-
- /*
-diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c
-index 1a30041..141ffac 100644
---- a/security/smack/smack_access.c
-+++ b/security/smack/smack_access.c
-@@ -623,26 +623,24 @@ struct smack_known *smack_from_secid(const u32 secid)
- LIST_HEAD(smack_onlycap_list);
- DEFINE_MUTEX(smack_onlycap_lock);
-
--/*
-+/**
-+ * smack_privileged_cred - are all privilege requirements met by cred
-+ * @cap: The requested capability
-+ * @cred: the credential to use
-+ *
- * Is the task privileged and allowed to be privileged
- * by the onlycap rule.
- *
- * Returns true if the task is allowed to be privileged, false if it's not.
- */
--bool smack_privileged(int cap)
-+bool smack_privileged_cred(int cap, const struct cred *cred)
- {
-- struct smack_known *skp = smk_of_current();
-+ struct task_smack *tsp = cred->security;
-+ struct smack_known *skp = tsp->smk_task;
- struct smack_known_list_elem *sklep;
- int rc;
-
-- /*
-- * All kernel tasks are privileged
-- */
-- if (unlikely(current->flags & PF_KTHREAD))
-- return true;
--
-- rc = cap_capable(current_cred(), &init_user_ns, cap,
-- SECURITY_CAP_AUDIT);
-+ rc = cap_capable(cred, &init_user_ns, cap, SECURITY_CAP_AUDIT);
- if (rc)
- return false;
-
-@@ -662,3 +660,23 @@ bool smack_privileged(int cap)
-
- return false;
- }
-+
-+/**
-+ * smack_privileged - are all privilege requirements met
-+ * @cap: The requested capability
-+ *
-+ * Is the task privileged and allowed to be privileged
-+ * by the onlycap rule.
-+ *
-+ * Returns true if the task is allowed to be privileged, false if it's not.
-+ */
-+bool smack_privileged(int cap)
-+{
-+ /*
-+ * All kernel tasks are privileged
-+ */
-+ if (unlikely(current->flags & PF_KTHREAD))
-+ return true;
-+
-+ return smack_privileged_cred(cap, current_cred());
-+}
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 30f2c3d..03fdecb 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -4369,6 +4369,10 @@ static int smack_key_permission(key_ref_t key_ref,
- */
- if (tkp == NULL)
- return -EACCES;
-+
-+ if (smack_privileged_cred(CAP_MAC_OVERRIDE, cred))
-+ return 0;
-+
- #ifdef CONFIG_AUDIT
- smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_KEY);
- ad.a.u.key_struct.key = keyp->serial;
-
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.14.inc b/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.14.inc
deleted file mode 100644
index 6d5c67021..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.14.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/linux-4.14:"
-
-#-------------------------------------------------------------------------
-# smack patches for kernels keys
-
-SRC_URI_append_with-lsm-smack = "\
- file://Smack-Privilege-check-on-key-operations.patch \
- file://Smack-Handle-CGROUP2-in-the-same-way-that-CGROUP.patch \
- "
-
-SRC_URI_append = "\
- file://net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch \
- file://net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch \
- "
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-agl.inc b/meta-agl-bsp/recipes-kernel/linux/linux-agl.inc
deleted file mode 100644
index cd960ef6d..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux-agl.inc
+++ /dev/null
@@ -1,132 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/linux:"
-
-DEPENDS += "kern-tools-native"
-
-# returns all the elements from the src uri that are .cfg files
-def find_cfgs(d):
- sources=src_patches(d, True)
- sources_list=[]
- for s in sources:
- if s.endswith('.cfg'):
- sources_list.append(s)
-
- return sources_list
-
-do_configure_append () {
- [ ! -f .config ] && cp -a ${WORKDIR}/defconfig .config
- # Need to clear CONFIG_LSM for 5.1+ kernels to ensure it'll get
- # regenerated to reflect configuration changes (e.g. SMACK).
- sed -i '/^CONFIG_LSM/d' .config
- merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
- yes '' | make oldconfig
-}
-
-# Extra configuration options for the AGL kernel
-SRC_URI_append = "\
- file://can-bus.cfg \
- file://usb.cfg \
- file://uvc.cfg \
- file://joystick.cfg \
- file://fanotify.cfg \
- file://uinput.cfg \
- file://hid.cfg \
- file://drm.cfg \
- file://btusb.cfg \
- file://usbaudio.cfg \
- file://usbmodem.cfg \
- file://i2c-led.cfg \
- file://nfc.cfg \
- file://overlayfs.cfg \
- "
-
-SRC_URI_append = " ${@bb.utils.contains('AGL_XEN_GUEST_WANTED','1','file://xen_domu.cfg','',d)}"
-
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/can-bus.cfg"
-# Enable support for usb video class for usb camera devices
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/uvc.cfg"
-# Enable support for joystick devices
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/joystick.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/fanotify.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/uinput.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/hid.cfg"
-# Enable DRM support for graphics
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/drm.cfg"
-# Enable Bluetooth USB devices
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/btusb.cfg"
-# Enable USB audio devices
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/usbaudio.cfg"
-# Enable I2C and LED for demontrator
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/i2c-led.cfg"
-# Enable NFC devices
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/nfc.cfg"
-# Enable overlayfs filesystem support
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/overlayfs.cfg"
-# Enable XEN support of the guest
-KERNEL_CONFIG_FRAGMENTS_append = " ${@bb.utils.contains('AGL_XEN_GUEST_WANTED','1','${WORKDIR}/xen_domu.cfg','',d)}"
-
-# Enable required features for the agl-netboot feature
-SRC_URI_append_netboot = " file://nbd.cfg \
- file://ramdisk.cfg"
-KERNEL_CONFIG_FRAGMENTS_append_netboot = " ${WORKDIR}/nbd.cfg ${WORKDIR}/ramdisk.cfg"
-
-# Enable support for TP-Link TL-W722N USB Wifi adapter (rev 1 and 2)
-SRC_URI_append = " file://wifi.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/wifi.cfg"
-
-# Enable support for RTLSDR
-SRC_URI_append = " file://rtl_sdr.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/rtl_sdr.cfg"
-
-# Additional drivers for virtual machines
-# OVERRIDES save us some c'n'p below ...
-OVERRIDES_prepend_qemux86 = "virtualmachine:"
-OVERRIDES_prepend_qemux86-64 = "virtualmachine:"
-SRC_URI_append_virtualmachine = " file://vbox-vmware-sata.cfg"
-KERNEL_CONFIG_FRAGMENTS_append_virtualmachine = " ${WORKDIR}/vbox-vmware-sata.cfg"
-
-# Extra configuration for using qemux86-64 image on physical hardware
-SRC_URI_append_qemux86-64 = "\
- file://x86-extra-graphic-devices.cfg \
- file://x86-net-devices.cfg \
- file://x86-security-tpm.cfg \
- file://x86-usb-devices.cfg \
- file://x86-upsquare.cfg \
-"
-KERNEL_CONFIG_FRAGMENTS_append_qemux86-64 = "\
- ${WORKDIR}/x86-extra-graphic-devices.cfg \
- ${WORKDIR}/x86-net-devices.cfg \
- ${WORKDIR}/x86-security-tpm.cfg \
- ${WORKDIR}/x86-usb-devices.cfg \
- ${WORKDIR}/x86-upsquare.cfg \
-"
-
-# Enable support for smack
-KERNEL_CONFIG_FRAGMENTS_append_with-lsm-smack = "\
- ${WORKDIR}/audit.cfg \
- ${WORKDIR}/smack.cfg \
- ${WORKDIR}/smack-default-lsm.cfg \
-"
-
-# ALSA support and other sound related configuration
-SRC_URI_append = " file://sound.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/sound.cfg"
-
-# add hda audio for qemu
-SRC_URI_append_qemuall = " file://sound-hda.cfg"
-KERNEL_CONFIG_FRAGMENTS_append_qemuall = " ${WORKDIR}/sound-hda.cfg"
-
-# iio-dummy-device support for test iiodevice
-SRC_URI_append = " file://iiodevice.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/iiodevice.cfg"
-
-# external rtc support via e.g. http://wiki.seeedstudio.com/Grove-RTC/
-SRC_URI_append = " file://rtc.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/rtc.cfg"
-
-# netfilter options
-SRC_URI_append = " file://netfilter.cfg"
-KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/netfilter.cfg"
-
-# Enable support for SystemTap
-SRC_URI_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'file://systemtap.cfg', '', d)}"
-KERNEL_CONFIG_FRAGMENTS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '${WORKDIR}/systemtap.cfg', '', d)}"
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-agl-bsp/recipes-kernel/linux/linux-yocto_%.bbappend
deleted file mode 100644
index 386112024..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux-yocto_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-require linux-agl.inc
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg
deleted file mode 100644
index dd7c460bb..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/btusb.cfg
+++ /dev/null
@@ -1,37 +0,0 @@
-CONFIG_BT=m
-CONFIG_BT_BREDR=y
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-CONFIG_BT_HS=y
-CONFIG_BT_LE=y
-CONFIG_BT_LEDS=y
-# CONFIG_BT_SELFTEST is not set
-CONFIG_BT_DEBUGFS=y
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_INTEL=m
-CONFIG_BT_BCM=m
-CONFIG_BT_RTL=m
-CONFIG_BT_HCIBTUSB=m
-CONFIG_BT_HCIBTUSB_BCM=y
-CONFIG_BT_HCIBTUSB_RTL=y
-# CONFIG_BT_HCIBTSDIO is not set
-# CONFIG_BT_HCIUART is not set
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBFUSB=m
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_BT_MRVL is not set
-# CONFIG_BT_ATH3K is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CMAC=m
-
-#
-# Bluetooth AVRCP support
-#
-CONFIG_INPUT_UINPUT=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/can-bus.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/can-bus.cfg
deleted file mode 100644
index 2f24b7607..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/can-bus.cfg
+++ /dev/null
@@ -1,42 +0,0 @@
-CONFIG_TASKSTATS=y
-CONFIG_TASK_DELAY_ACCT=y
-# CONFIG_TASK_XACCT is not set
-CONFIG_USER_RETURN_NOTIFIER=y
-CONFIG_PREEMPT_NOTIFIERS=y
-CONFIG_CAN=m
-CONFIG_CAN_RAW=m
-CONFIG_CAN_BCM=m
-CONFIG_CAN_GW=m
-CONFIG_CAN_J1939=m
-
-#
-# CAN Device Drivers
-#
-CONFIG_CAN_C_CAN=m
-CONFIG_CAN_C_CAN_PLATFORM=m
-CONFIG_CAN_VCAN=m
-CONFIG_CAN_SLCAN=m
-CONFIG_CAN_DEV=m
-CONFIG_CAN_CALC_BITTIMING=y
-# CONFIG_CAN_LEDS is not set
-# CONFIG_CAN_SJA1000 is not set
-# CONFIG_CAN_M_CAN is not set
-# CONFIG_CAN_CC770 is not set
-
-#
-# CAN SPI interfaces
-#
-CONFIG_CAN_MCP251X=m
-
-#
-# CAN USB interfaces
-#
-# CONFIG_CAN_EMS_USB is not set
-CONFIG_CAN_ESD_USB2=m
-CONFIG_CAN_GS_USB=m
-CONFIG_CAN_KVASER_USB=m
-CONFIG_CAN_PEAK_USB=m
-CONFIG_CAN_8DEV_USB=m
-CONFIG_CAN_MCBA_USB=m
-# CONFIG_CAN_SOFTING is not set
-# CONFIG_CAN_DEBUG_DEVICES is not set
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg
deleted file mode 100644
index 327c753ae..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/hid.cfg
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HID_MULTITOUCH=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/i2c-led.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/i2c-led.cfg
deleted file mode 100644
index 248b5118a..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/i2c-led.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-# enabling I2C and LED for demonstrator
-CONFIG_I2C_TINY_USB=y
-CONFIG_LEDS_BLINKM=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/iiodevice.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/iiodevice.cfg
deleted file mode 100644
index c5b8ff35e..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/iiodevice.cfg
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Extcon Device Drivers
-#
-CONFIG_IIO=y
-CONFIG_IIO_BUFFER=y
-CONFIG_IIO_BUFFER_CB=y
-CONFIG_IIO_KFIFO_BUF=y
-CONFIG_IIO_CONFIGFS=m
-CONFIG_IIO_TRIGGER=y
-CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
-CONFIG_IIO_SW_DEVICE=m
-CONFIG_IIO_SW_TRIGGER=m
-
-#
-# IIO dummy driver
-#
-CONFIG_IIO_DUMMY_EVGEN=m
-CONFIG_IIO_SIMPLE_DUMMY=m
-CONFIG_IIO_SIMPLE_DUMMY_EVENTS=y
-CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y
-
-#
-# Triggers - standalone
-#
-CONFIG_IIO_HRTIMER_TRIGGER=m
-CONFIG_IIO_TRIGGERED_BUFFER=m
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/joystick.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/joystick.cfg
deleted file mode 100644
index 2201bcb00..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/joystick.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG_INPUT_JOYDEV=y
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ADI=y
-CONFIG_GAMEPORT=y
-CONFIG_HID_LOGITECH=y
-CONFIG_LOGIWHEELS_FF=y
-CONFIG_HID_LOGITECH_HIDPP=y
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIG940_FF=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/netfilter.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/netfilter.cfg
deleted file mode 100644
index 34be704c1..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/netfilter.cfg
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NETFILTER_XT_MATCH_OWNER=m
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg
deleted file mode 100644
index 6d863a075..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/nfc.cfg
+++ /dev/null
@@ -1,34 +0,0 @@
-CONFIG_NFC=m
-CONFIG_NFC_DIGITAL=m
-CONFIG_NFC_NCI=m
-CONFIG_NFC_NCI_SPI=m
-CONFIG_NFC_HCI=m
-CONFIG_NFC_SHDLC=y
-CONFIG_NFC_TRF7970A=m
-CONFIG_NFC_MEI_PHY=m
-CONFIG_NFC_PORT100=m
-CONFIG_NFC_FDP=m
-CONFIG_NFC_FDP_I2C=m
-CONFIG_NFC_PN544=m
-CONFIG_NFC_PN544_I2C=m
-CONFIG_NFC_PN544_MEI=m
-CONFIG_NFC_PN533=m
-CONFIG_NFC_PN533_USB=m
-CONFIG_NFC_PN533_I2C=m
-CONFIG_NFC_MICROREAD=m
-CONFIG_NFC_MICROREAD_I2C=m
-CONFIG_NFC_MICROREAD_MEI=m
-CONFIG_NFC_MRVL=m
-CONFIG_NFC_MRVL_USB=m
-CONFIG_NFC_MRVL_I2C=m
-CONFIG_NFC_MRVL_SPI=m
-CONFIG_NFC_ST21NFCA=m
-CONFIG_NFC_ST21NFCA_I2C=m
-CONFIG_NFC_ST_NCI=m
-CONFIG_NFC_ST_NCI_I2C=m
-CONFIG_NFC_ST_NCI_SPI=m
-CONFIG_NFC_NXP_NCI=m
-CONFIG_NFC_NXP_NCI_I2C=m
-CONFIG_NFC_S3FWRN5=m
-CONFIG_NFC_S3FWRN5_I2C=m
-CONFIG_NFC_ST95HF=m
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/procevent.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/procevent.cfg
deleted file mode 100644
index 6e08c25bc..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/procevent.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-CONFIG_CONNECTOR=y
-CONFIG_PROC_EVENTS=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg
deleted file mode 100644
index 2641958a0..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/rtc.cfg
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-CONFIG_RTC_DRV_DS1307=m
-CONFIG_RTC_DRV_DS3232=m
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/rtl_sdr.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/rtl_sdr.cfg
deleted file mode 100644
index d4574700a..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/rtl_sdr.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-CONFIG_MEDIA_USB_SUPPORT=y
-CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
-CONFIG_DVB_USB_V2=m
-CONFIG_DVB_USB_RTL28XXU=m
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/scheddebug.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/scheddebug.cfg
deleted file mode 100644
index e8b09aa7c..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/scheddebug.cfg
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SCHED_DEBUG=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg
deleted file mode 100644
index 7996ef1dd..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/uinput.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-# Enable the User-level Input driver (required by "wayland-fits")
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg
deleted file mode 100644
index 8e9e98ecb..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/usb.cfg
+++ /dev/null
@@ -1,8 +0,0 @@
-CONFIG_USB_SERIAL=y
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_ACM=m
-CONFIG_CRC_CCITT=y
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_PCI=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/usbaudio.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/usbaudio.cfg
deleted file mode 100644
index 5961f43d3..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/usbaudio.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-CONFIG_SND_USB=y
-CONFIG_SND_USB_AUDIO=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/usbmodem.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/usbmodem.cfg
deleted file mode 100644
index 3ded931e5..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/usbmodem.cfg
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_CDC_MBIM=m
-CONFIG_USB_NET_QMI_WWAN=m
-CONFIG_USB_SIERRA_NET=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_QUALCOMM=m
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg
deleted file mode 100644
index 7c6556c11..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/uvc.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-CONFIG_VIDEOBUF2_VMALLOC=y
-CONFIG_MEDIA_USB_SUPPORT=y
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg b/meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg
deleted file mode 100644
index 00c2e06e4..000000000
--- a/meta-agl-bsp/recipes-kernel/linux/linux/wifi.cfg
+++ /dev/null
@@ -1,6 +0,0 @@
-CONFIG_CFG80211=m
-CONFIG_MAC80211=m
-CONFIG_WLAN_VENDOR_ATH=m
-CONFIG_ATH9K_HTC=m
-CONFIG_STAGING=y
-CONFIG_R8188EU=m
diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb
index ae8fe71b6..b857cb19f 100644
--- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb
+++ b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb
@@ -1,20 +1,20 @@
DESCRIPTION = "Xen hypervisor u-boot image"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
SECTION = "console/tools"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
-ALLOW_EMPTY_${PN} = "1"
-FILES_${PN} = ""
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = ""
S = "${WORKDIR}"
DEPENDS = "u-boot-mkimage-native "
# Only for aarch64
COMPATIBLE_MACHINE = "(-)"
-COMPATIBLE_MACHINE_aarch64 = "(.*)"
+COMPATIBLE_MACHINE:aarch64 = "(.*)"
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend
index 057f4564c..a67200618 100644
--- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend
+++ b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend
@@ -3,9 +3,9 @@
PACKAGE_ARCH = "${MACHINE_ARCH}"
# rpi4
-LIC_FILES_CHKSUM_raspberrypi4 = "file://COPYING;md5=4295d895d4b5ce9d070263d52f030e49"
-XEN_REL_raspberrypi4 = "4.13"
-SRCREV_raspberrypi4 = "721f2c323ca55c77857c93e7275b4a93a0e15e1f"
-SRC_URI_raspberrypi4 = " \
+LIC_FILES_CHKSUM:raspberrypi4 = "file://COPYING;md5=4295d895d4b5ce9d070263d52f030e49"
+XEN_REL:raspberrypi4 = "4.13"
+SRCREV:raspberrypi4 = "721f2c323ca55c77857c93e7275b4a93a0e15e1f"
+SRC_URI:raspberrypi4 = " \
git://xenbits.xen.org/xen.git;branch=${XEN_BRANCH} \
"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend
index 1b9aaf4ca..2d63e1841 100644
--- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend
+++ b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend
@@ -1,17 +1,17 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
# make the package machine-specific
PACKAGE_ARCH = "${MACHINE_ARCH}"
# rpi4 specifics
-LIC_FILES_CHKSUM_raspberrypi4 = "file://COPYING;md5=4295d895d4b5ce9d070263d52f030e49"
-XEN_REL_raspberrypi4 = "4.13"
+LIC_FILES_CHKSUM:raspberrypi4 = "file://COPYING;md5=4295d895d4b5ce9d070263d52f030e49"
+XEN_REL:raspberrypi4 = "4.13"
-SRCREV_raspberrypi4 = "721f2c323ca55c77857c93e7275b4a93a0e15e1f"
-SRC_URI_append_raspberrypi4 = " file://0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch"
+SRCREV:raspberrypi4 = "721f2c323ca55c77857c93e7275b4a93a0e15e1f"
+SRC_URI:append:raspberrypi4 = " file://0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch"
#due to incorrect xen binary preparation in external library, we add additional deploy
-do_deploy_append_raspberrypi4() {
+do_deploy:append:raspberrypi4() {
if [ -f ${B}/xen/xen ]; then
install -m 0644 ${B}/xen/xen ${DEPLOYDIR}/xen-${MACHINE}
fi
diff --git a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch
new file mode 100644
index 000000000..8bc102c92
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch
@@ -0,0 +1,34 @@
+From 39dea63ebce2764c683c8c2eddbb10cf07a970c4 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Mon, 19 Dec 2022 11:51:28 +0200
+Subject: [PATCH] virgl/virgl_driinfo.h.in: Disable by default emulated BGRA
+ and swizzling
+
+Workaround in place for virtio aarch64 to avoid graphical artefacts when
+first time booting up on PVR host driver.
+
+Introduced with patch 'virgl: Always enable emulated BGRA and swizzling
+unless specifically told not to' in mesa-20.3.0.
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ src/gallium/drivers/virgl/virgl_driinfo.h.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/gallium/drivers/virgl/virgl_driinfo.h.in b/src/gallium/drivers/virgl/virgl_driinfo.h.in
+index f57e5880965..1c06f932c5c 100644
+--- a/src/gallium/drivers/virgl/virgl_driinfo.h.in
++++ b/src/gallium/drivers/virgl/virgl_driinfo.h.in
+@@ -8,7 +8,7 @@
+ // 5. Implement the tweak in virglrenderer
+ DRI_CONF_SECTION_MISCELLANEOUS
+ DRI_CONF_FORMAT_L8_SRGB_ENABLE_READBACK(false)
+- DRI_CONF_GLES_EMULATE_BGRA(true)
+- DRI_CONF_GLES_APPLY_BGRA_DEST_SWIZZLE(true)
++ DRI_CONF_GLES_EMULATE_BGRA(false)
++ DRI_CONF_GLES_APPLY_BGRA_DEST_SWIZZLE(false)
+ DRI_CONF_GLES_SAMPLES_PASSED_VALUE(1024, 1, 400000000)
+ DRI_CONF_SECTION_END
+--
+2.35.1
+
diff --git a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_22.%.bbappend b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_22.%.bbappend
new file mode 100644
index 000000000..0a6606ebf
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_22.%.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend
new file mode 100644
index 000000000..5970414eb
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend
@@ -0,0 +1,10 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/linux-yocto:"
+
+SRC_URI:append:virtio-all = " \
+ git://gerrit.automotivelinux.org/gerrit/src/agl-yocto-kernel-meta.git;protocol=https;type=kmeta;name=agl-meta;destsuffix=agl-kernel-meta;branch=master \
+ file://virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \
+"
+
+SRCREV_agl-meta = "c5008f4ba9e1b9f11c1014b53477079e605ceab7"
+
+COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc
new file mode 100644
index 000000000..2d1570e9f
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: MIT
+define KMACHINE virtio-aarch64
+define KTYPE standard
+define KARCH arm64
+
+include ktypes/standard/standard.scc nopatch
+include arch/arm/aarch64.scc
+include cfg/8250.scc
+include cfg/virtio.scc
+include bsp/virtio/agl-virtio.scc
+
+# enable the ability to run 32 bit apps
+include arch/arm/32bit-compat.scc
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg
new file mode 100644
index 000000000..2facc345e
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg
@@ -0,0 +1,3 @@
+CONFIG_DRM=y
+CONFIG_FB=y
+CONFIG_DRM_FBDEV_EMULATION=y
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg
new file mode 100644
index 000000000..bbcaca312
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg
@@ -0,0 +1,3 @@
+CONFIG_PCI=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_PCI_HOST_GENERIC=y
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.15.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.15.bbappend
new file mode 100644
index 000000000..6952436a3
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.15.bbappend
@@ -0,0 +1,17 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+# Cannot just append to SRC_URI, as the metadata interferes with the
+# AGL config fragment scheme
+AGL_KERNEL_SRC:prepend:virtio-all = " \
+ git://gerrit.automotivelinux.org/gerrit/src/agl-yocto-kernel-meta.git;protocol=https;type=kmeta;name=agl-meta;destsuffix=agl-kernel-meta;branch=kernel-5.15 \
+ file://virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \
+"
+
+SRCREV_agl-meta = "4deb7357eab5962b0553a5ad1f11be5ac35f9da9"
+
+AGL_KCONFIG_FRAGMENTS:append:virtio-all = " \
+ virtio-drm.cfg \
+ virtio-pci.cfg \
+"
+
+COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64"
diff --git a/meta-agl-distro/LICENSE b/meta-agl-core/LICENSE
index e8758f89c..e8758f89c 100644
--- a/meta-agl-distro/LICENSE
+++ b/meta-agl-core/LICENSE
diff --git a/meta-agl-distro/LICENSE.GPL-2.0-only b/meta-agl-core/LICENSE.GPL-2.0-only
index 5db3c0a21..5db3c0a21 100644
--- a/meta-agl-distro/LICENSE.GPL-2.0-only
+++ b/meta-agl-core/LICENSE.GPL-2.0-only
diff --git a/meta-agl-distro/LICENSE.MIT b/meta-agl-core/LICENSE.MIT
index a6919eb7e..a6919eb7e 100644
--- a/meta-agl-distro/LICENSE.MIT
+++ b/meta-agl-core/LICENSE.MIT
diff --git a/meta-agl-core/README b/meta-agl-core/README
new file mode 120000
index 000000000..4a7a1a175
--- /dev/null
+++ b/meta-agl-core/README
@@ -0,0 +1 @@
+README-AGL.md \ No newline at end of file
diff --git a/meta-agl-core/README-AGL.md b/meta-agl-core/README-AGL.md
new file mode 100644
index 000000000..e410de29a
--- /dev/null
+++ b/meta-agl-core/README-AGL.md
@@ -0,0 +1,33 @@
+Overview
+========
+
+The
+[AGL Project](https://www.automotivelinux.org/) is an automotive-specific
+development environment that provides a Linux distribution
+[AGL UCB](https://www.automotivelinux.org/software/unified-code-base).
+
+AGL uses layers designed to be compatible with the
+[Yocto Project](https://www.yoctoproject.org) and the
+[OpenEmbedded Project (OE)](https://www.openembedded.org/wiki/Main_Page).
+
+This section provides information about the layers used by the AGL Project:
+
+* **`meta-agl/meta-agl-core`**: Minimal set of software needed to create an AGL distribution
+ used to boot a system.
+ AGL profiles are built on top of this minimal set of software.
+
+ ```
+ $ git clone https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl
+ ```
+
+Maintenance
+-----------
+
+All patches must be submitted via the AGL Gerrit instance at
+<https://gerrit.automotivelinux.org>. See this wiki page for
+details:
+
+<https://wiki.automotivelinux.org/agl-distro/contributing>
+
+Layer maintainers:
+* Jan-Simon Möller <jsmoeller@linuxfoundation.org>
diff --git a/meta-agl-core/classes/agl-core-image.bbclass b/meta-agl-core/classes/agl-core-image.bbclass
new file mode 100644
index 000000000..bb5580391
--- /dev/null
+++ b/meta-agl-core/classes/agl-core-image.bbclass
@@ -0,0 +1,32 @@
+# AGL base image class
+#
+# As opposed to using core-image directly, this class:
+# - does not pull in packagegroup-base-extended by default to minimize images.
+# This does mean that many of the oe-core / poky MACHINE and DISTRO features
+# (e.g. 3g, nfs, etc.) will not result in packages being automatically pulled
+# into images since that is driven via packagegroup-base.
+# - includes hooks for integrating SELinux via meta-selinux
+# - disables locale installation by default
+#
+
+# Disable locales
+IMAGE_LINGUAS = ""
+
+# Hook to allow inheriting e.g. selinux-image by default.
+# Any bbclass used as a value should ultimately inherit core-image
+AGL_BASE_IMAGE ?= "core-image"
+
+inherit ${AGL_BASE_IMAGE}
+
+FEATURE_PACKAGES_selinux = " \
+ packagegroup-agl-core-selinux \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'packagegroup-agl-core-selinux-devel', '', d)} \
+"
+
+IMAGE_FEATURES:append = " ${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)}"
+
+CORE_IMAGE_BASE_INSTALL = " \
+ packagegroup-agl-core-boot \
+ \
+ ${CORE_IMAGE_EXTRA_INSTALL} \
+"
diff --git a/meta-agl-core/classes/agl-crosssdk.bbclass b/meta-agl-core/classes/agl-crosssdk.bbclass
new file mode 100644
index 000000000..5f6dbf303
--- /dev/null
+++ b/meta-agl-core/classes/agl-crosssdk.bbclass
@@ -0,0 +1,9 @@
+IMAGE_FEATURES += "dev-pkgs"
+IMAGE_INSTALL += "kernel-dev kernel-devsrc"
+
+inherit populate_sdk
+
+# Task do_populate_sdk and do_rootfs can't be exec simultaneously.
+# Both exec "createrepo" on the same directory, and so one of them
+# can failed (randomly).
+addtask do_populate_sdk after do_rootfs
diff --git a/meta-agl-profile-core/classes/cloc.bbclass b/meta-agl-core/classes/cloc.bbclass
index 9b73704e8..9b73704e8 100644
--- a/meta-agl-profile-core/classes/cloc.bbclass
+++ b/meta-agl-core/classes/cloc.bbclass
diff --git a/meta-agl-core/classes/image_types_wic_workaround.bbclass b/meta-agl-core/classes/image_types_wic_workaround.bbclass
new file mode 100644
index 000000000..1a287ff7c
--- /dev/null
+++ b/meta-agl-core/classes/image_types_wic_workaround.bbclass
@@ -0,0 +1,32 @@
+# This is a workaround for the race condition between do_image_wic and other
+# do_image_* tasks. It ensures that no other do_image_* task can be running and
+# reading the rootfs directory at the same time as do_image_wic is modifying
+# the /etc/fstab file in the rootfs directory.
+#
+# A much better fix has been submitted upstream [1], but we can't carry those
+# modifications to `scripts/lib/wic` from poky easily in meta-agl. So instead
+# we have this workaround until the upstream fix is accepted and backported.
+#
+# Serializing the image functions as done here impacts build speed but it's
+# better to be slow and correct than to be fast and wrong.
+#
+# [1]: https://lists.openembedded.org/g/openembedded-core/topic/patch_5_6_wic_copy_rootfs/79592787,
+# https://lists.openembedded.org/g/openembedded-core/topic/patch_6_6_wic_optimise/79592788
+# and related patches.
+#
+# Bug-AGL: SPEC-3621
+
+def get_workaround_wic_typedeps(d):
+ if d.getVar('USING_WIC'):
+ fstypes = d.getVar('IMAGE_FSTYPES').split()
+ basetypes = set()
+ for fs in fstypes:
+ # Add the basetype to our set of basetypes in use
+ t = fs.split('.')[0]
+ if t != "wic":
+ basetypes.add(t)
+ return ' '.join(basetypes)
+ else:
+ return ''
+
+IMAGE_TYPEDEP:wic += "${@get_workaround_wic_typedeps(d)}"
diff --git a/meta-agl-core/classes/sanity-meta-agl-core.bbclass b/meta-agl-core/classes/sanity-meta-agl-core.bbclass
new file mode 100644
index 000000000..93df587f4
--- /dev/null
+++ b/meta-agl-core/classes/sanity-meta-agl-core.bbclass
@@ -0,0 +1,10 @@
+addhandler aglcore_bbappend_distrocheck
+aglcore_bbappend_distrocheck[eventmask] = "bb.event.SanityCheck"
+python aglcore_bbappend_distrocheck() {
+ skip_check = e.data.getVar('SKIP_META_AGL_CORE_SANITY_CHECK') == "1"
+ if 'aglcore' not in e.data.getVar('AGL_FEATURES').split() and not skip_check:
+ bb.warn("You have included the meta-agl-core layer, but \
+'aglcore' has not been enabled in your AGL_FEATURES. Some bbappend files \
+may not take effect. See the meta-agl-core README for details on enabling \
+meta-agl-core support.")
+}
diff --git a/meta-agl-core/conf/bblayers.conf.sample b/meta-agl-core/conf/bblayers.conf.sample
new file mode 100644
index 000000000..8b1cbdfc5
--- /dev/null
+++ b/meta-agl-core/conf/bblayers.conf.sample
@@ -0,0 +1,12 @@
+# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
+# changes incompatibly
+POKY_BBLAYERS_CONF_VERSION = "2"
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+
+BBLAYERS ?= " \
+ ##OEROOT##/meta \
+ ##OEROOT##/meta-poky \
+ ##OEROOT##/meta-yocto-bsp \
+ "
diff --git a/meta-agl-distro/conf/distro/include/aarch64-tune.inc b/meta-agl-core/conf/distro/include/aarch64-tune.inc
index 553bb5a64..4628fcaf2 100644
--- a/meta-agl-distro/conf/distro/include/aarch64-tune.inc
+++ b/meta-agl-core/conf/distro/include/aarch64-tune.inc
@@ -4,7 +4,9 @@
# A double inclusion would produce a warning. This include line is just for reference
# include conf/machine/include/arm/arch-armv8.inc
-DEFAULTTUNE_poky-agl := "aarch64"
+AGL_DEFAULTTUNE ?= "aarch64"
+DEFAULTTUNE:agldefaulttune = "${AGL_DEFAULTTUNE}"
+
# not yet ready
#QB_SYSTEM_NAME ?= "qemu-system-aarch"
#QB_DEFAULT_KERNEL ?= "zImage"
diff --git a/meta-agl-distro/conf/distro/include/arc-tune.inc b/meta-agl-core/conf/distro/include/arc-tune.inc
index 43dabd5a9..43dabd5a9 100644
--- a/meta-agl-distro/conf/distro/include/arc-tune.inc
+++ b/meta-agl-core/conf/distro/include/arc-tune.inc
diff --git a/meta-agl-distro/conf/distro/include/arm-tune.inc b/meta-agl-core/conf/distro/include/arm-tune.inc
index fa68e05a7..b3ad64ad7 100644
--- a/meta-agl-distro/conf/distro/include/arm-tune.inc
+++ b/meta-agl-core/conf/distro/include/arm-tune.inc
@@ -7,14 +7,16 @@
# include conf/machine/include/arch/arm-armv7-a.inc
# Standard target for 32bit ARM (newer than cortex-a15)
-AGLDEFAULTTUNE = "armv7vethf-neon-vfpv4"
+ARM_DEFAULTTUNE = "armv7vethf-neon-vfpv4"
# for cortex-a8, cortex-a9, cortex-a7 (=rpi 2/3)
-AGLDEFAULTTUNE := "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', 'armv7athf-neon', '${AGLDEFAULTTUNE}', d)}"
+ARM_DEFAULTTUNE := "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', 'armv7athf-neon', '${ARM_DEFAULTTUNE}', d)}"
# for armv6 (=rpi0/1)
-AGLDEFAULTTUNE := "${@bb.utils.contains('DISTRO_FEATURES', 'agl-low-arm-compiler', 'arm1176jzfshf', '${AGLDEFAULTTUNE}', d)}"
-DEFAULTTUNE := "${AGLDEFAULTTUNE}"
+ARM_DEFAULTTUNE := "${@bb.utils.contains('DISTRO_FEATURES', 'agl-low-arm-compiler', 'arm1176jzfshf', '${ARM_DEFAULTTUNE}', d)}"
+
+AGL_DEFAULTTUNE ?= "${ARM_DEFAULTTUNE}"
+DEFAULTTUNE:agldefaulttune := "${AGL_DEFAULTTUNE}"
QB_SYSTEM_NAME ?= "qemu-system-arm"
QB_DEFAULT_KERNEL ?= "zImage"
diff --git a/meta-agl-core/conf/distro/include/riscv64-tune.inc b/meta-agl-core/conf/distro/include/riscv64-tune.inc
new file mode 100644
index 000000000..981fc4283
--- /dev/null
+++ b/meta-agl-core/conf/distro/include/riscv64-tune.inc
@@ -0,0 +1,8 @@
+# DEFAULTTUNE overrides for AGL on riscv64
+
+# We should not need the tuning include below as the BSP should include the right set already.
+# A double inclusion would produce a warning. This include line is just for reference
+# include conf/machine/include/arm/arch-armv8.inc
+
+AGL_DEFAULTTUNE ?= "riscv64"
+DEFAULTTUNE:agldefaulttune = "${AGL_DEFAULTTUNE}"
diff --git a/meta-agl-distro/conf/distro/include/x86_64-tune.inc b/meta-agl-core/conf/distro/include/x86_64-tune.inc
index 9f2bdc867..541b729b6 100644
--- a/meta-agl-distro/conf/distro/include/x86_64-tune.inc
+++ b/meta-agl-core/conf/distro/include/x86_64-tune.inc
@@ -3,7 +3,8 @@
# We should not need the tuning include below as the BSP should include the right set already.
# A double inclusion would produce a warning. This include line is just for reference
#include conf/machine/include/tune-corei7.inc
-DEFAULTTUNE = "corei7-64"
+AGL_DEFAULTTUNE ?= "corei7-64"
+DEFAULTTUNE:agldefaulttune = "${AGL_DEFAULTTUNE}"
# shortened copy of tune-corei7.inc due to bug in inclusion for tune-core2.inc
# TUNE_ARCH is using .= x86-64 , if done twice, you get x86-64x86-64 as TUNE_ARCH :/
@@ -15,41 +16,41 @@ TUNE_CCARGS = "${@bb.utils.contains('TUNE_FEATURES', 'corei7', ' -march=corei7 -
# Extra tune selections
AVAILTUNES += "corei7-32"
-TUNE_FEATURES_tune-corei7-32 = "${TUNE_FEATURES_tune-x86} corei7"
-BASE_LIB_tune-corei7-32 = "lib"
-TUNE_PKGARCH_tune-corei7-32 = "corei7-32"
-PACKAGE_EXTRA_ARCHS_tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-32} corei7-32"
+TUNE_FEATURES:tune-corei7-32 = "${TUNE_FEATURES:tune-x86} corei7"
+BASE_LIB:tune-corei7-32 = "lib"
+TUNE_PKGARCH:tune-corei7-32 = "corei7-32"
+PACKAGE_EXTRA_ARCHS:tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS:tune-core2-32} corei7-32"
QEMU_EXTRAOPTIONS_corei7-32 = " -cpu Nehalem,check=false"
AVAILTUNES += "corei7-64"
-TUNE_FEATURES_tune-corei7-64 = "${TUNE_FEATURES_tune-x86-64} corei7"
-BASE_LIB_tune-corei7-64 = "lib64"
-TUNE_PKGARCH_tune-corei7-64 = "corei7-64"
-PACKAGE_EXTRA_ARCHS_tune-corei7-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64"
+TUNE_FEATURES:tune-corei7-64 = "${TUNE_FEATURES:tune-x86-64} corei7"
+BASE_LIB:tune-corei7-64 = "lib64"
+TUNE_PKGARCH:tune-corei7-64 = "corei7-64"
+PACKAGE_EXTRA_ARCHS:tune-corei7-64 = "${PACKAGE_EXTRA_ARCHS:tune-core2-64} corei7-64"
QEMU_EXTRAOPTIONS_corei7-64 = " -cpu Nehalem,check=false"
AVAILTUNES += "corei7-64-x32"
-TUNE_FEATURES_tune-corei7-64-x32 = "${TUNE_FEATURES_tune-x86-64-x32} corei7"
-BASE_LIB_tune-corei7-64-x32 = "libx32"
-TUNE_PKGARCH_tune-corei7-64-x32 = "corei7-64-x32"
-PACKAGE_EXTRA_ARCHS_tune-corei7-64-x32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64-x32} corei7-64-x32"
+TUNE_FEATURES:tune-corei7-64-x32 = "${TUNE_FEATURES:tune-x86-64-x32} corei7"
+BASE_LIB:tune-corei7-64-x32 = "libx32"
+TUNE_PKGARCH:tune-corei7-64-x32 = "corei7-64-x32"
+PACKAGE_EXTRA_ARCHS:tune-corei7-64-x32 = "${PACKAGE_EXTRA_ARCHS:tune-core2-64-x32} corei7-64-x32"
QEMU_EXTRAOPTIONS_corei7-64-x32 = " -cpu Nehalem,check=false"
TUNE_ARCH = "${@bb.utils.contains('TUNE_FEATURES', 'm64', '${X86ARCH64}', '' ,d)}"
# Bump qemux86-64 up to corei7
AVAILTUNES += "qemux86-64"
-TUNE_FEATURES_tune-qemux86-64 = "${TUNE_FEATURES_tune-x86-64} corei7"
-BASE_LIB_tune-qemux86-64 = "lib64"
-TUNE_PKGARCH_tune-qemux86-64 = "corei7-64"
-PACKAGE_EXTRA_ARCHS_tune-qemux86-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64"
-QEMU_EXTRAOPTIONS_qemux86-64 = " -cpu Nehalem,check=false"
+TUNE_FEATURES:tune-qemux86-64 = "${TUNE_FEATURES:tune-x86-64} corei7"
+BASE_LIB:tune-qemux86-64 = "lib64"
+TUNE_PKGARCH:tune-qemux86-64 = "corei7-64"
+PACKAGE_EXTRA_ARCHS:tune-qemux86-64 = "${PACKAGE_EXTRA_ARCHS:tune-core2-64} corei7-64"
+QEMU_EXTRAOPTIONS:qemux86-64 = " -cpu Nehalem,check=false"
# QEMU / runqemu options (partly overrides qemuboot-x86.inc)
QB_MACHINE = "-machine q35"
-QB_SYSTEM_NAME_x86-64 = "qemu-system-x86_64"
-QB_CPU_x86-64 = "-cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt"
-QB_CPU_KVM_x86-64 = "-cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt"
+QB_SYSTEM_NAME:x86-64 = "qemu-system-x86_64"
+QB_CPU:x86-64 = "-cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt"
+QB_CPU_KVM:x86-64 = "-cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt"
# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
-QB_OPT_APPEND = "-vga vmware -show-cursor -usb -device usb-tablet -device virtio-rng-pci"
+QB_OPT_APPEND = "-vga vmware -display default,show-cursor=on -usb -device usb-tablet -device virtio-rng-pci"
diff --git a/meta-agl-distro/conf/distro/poky-agl.conf b/meta-agl-core/conf/distro/poky-agl.conf
index c3b6eddae..19a21ad44 100644
--- a/meta-agl-distro/conf/distro/poky-agl.conf
+++ b/meta-agl-core/conf/distro/poky-agl.conf
@@ -1,49 +1,45 @@
require conf/distro/poky.conf
+# Insert overrides "agldefaulttune" and "forcedefaulttune" before forcevariable
+OVERRIDES = "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:pn-${PN}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}${LIBCOVERRIDE}:agldefaulttune:forcedefaulttune:forcevariable"
+
# AGL specific derivations
DISTRO = "poky-agl"
DISTRO_NAME = "Automotive Grade Linux"
# Release flags
-DISTRO_CODENAME = "koi"
+DISTRO_CODENAME = "ricefish"
AGL_BRANCH = "master"
-AGLVERSION = "10.90.0"
+AGLVERSION = "17.90.0"
+
# switch devel/release
-AGLRELEASETYPE ?= "agldevelopment"
-#AGLRELEASETYPE ?= "aglrelease"
+#AGLRELEASETYPE ?= "agldevelopment"
+AGLRELEASETYPE := "aglrelease"
+
OVERRIDES .= ":${AGLRELEASETYPE}"
-#
#for development
-DISTRO_VERSION_agldevelopment := "${AGLVERSION}+snapshot-${DATE}"
-AGL_APP_REVISION_agldevelopment = "${AUTOREV}"
-AGL_DEFAULT_REVISION_agldevelopment = "${AUTOREV}"
+DISTRO_VERSION:agldevelopment := "${AGLVERSION}+snapshot-${METADATA_REVISION}"
#for release
-DISTRO_VERSION_aglrelease := "${AGLVERSION}"
-DISTRO_BRANCH_VERSION_TAG = "${DISTRO_CODENAME}/${@'${DISTRO_VERSION}'.replace('+snapshot-${DATE}','')}"
-AGL_APP_REVISION_aglrelease := "refs/tags/${DISTRO_BRANCH_VERSION_TAG}"
-AGL_DEFAULT_REVISION_aglrelease := "refs/tags/${DISTRO_BRANCH_VERSION_TAG}"
+DISTRO_VERSION:aglrelease := "${AGLVERSION}"
+DISTRO_BRANCH_VERSION_TAG = "${DISTRO_CODENAME}/${@'${DISTRO_VERSION}'.replace('+snapshot-${METADATA_REVISION}','')}"
# reproducible builds:
-# enable the flag
-BUILD_REPRODUCIBLE_BINARIES = "1"
# Set the desired timestamps
-export SOURCE_DATE_EPOCH = "1593400000"
-REPRODUCIBLE_TIMESTAMP_ROOTFS = "1593400000"
-# inherit the class
-INHERIT += "reproducible_build"
+# E.g. update for (major) releases
+export SOURCE_DATE_EPOCH = "1706800000"
+REPRODUCIBLE_TIMESTAMP_ROOTFS = "1706800000"
# SDK
SDK_VENDOR = "-aglsdk"
-SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}"
-# SDKPATH is the folder where the SDK is going to be installed
+# SDKPATHINSTALL is the folder where the SDK is going to be installed
# Due to an issue with the qt5 environment (see SPEC-1667),
# we add DEFAULTTUNE to the SDKPATH to mitigate the issue.
-SDKPATH = "/opt/agl-sdk/${SDK_VERSION}-${DEFAULTTUNE}"
+SDKPATHINSTALL = "/opt/agl-sdk/${SDK_VERSION}-${DEFAULTTUNE}"
MAINTAINER = "AGL https://lists.automotivelinux.org/g/agl-dev-community"
@@ -51,11 +47,24 @@ MAINTAINER = "AGL https://lists.automotivelinux.org/g/agl-dev-community"
TARGET_VENDOR = "-agl"
# Override these in poky based distros
-AGL_DEFAULT_DISTRO_FEATURES = "largefile systemd opengl wayland pam bluetooth bluez5 3g polkit"
+AGL_DEFAULT_DISTRO_FEATURES = "usrmerge largefile opengl wayland pam bluetooth bluez5 3g polkit"
POKY_DEFAULT_DISTRO_FEATURES := "${AGL_DEFAULT_DISTRO_FEATURES}"
OVERRIDES .= ":${DISTRO_CODENAME}"
-QEMU_TARGETS ?= "arm aarch64 i386 x86_64"
+DISTRO_FEATURES:remove = "x11"
+DISTRO_FEATURES_BACKFILL_CONSIDERED = "pulseaudio"
+
+INIT_MANAGER = "systemd"
+# Override default of "systemd-compat-units"
+VIRTUAL-RUNTIME_initscripts = ""
+# Override default of "busybox-syslog"
+VIRTUAL-RUNTIME_base-utils-syslog = ""
+
+# network manager to use (possible values: systemd, connman)
+VIRTUAL-RUNTIME_net_manager = "connman"
+
+
+QEMU_TARGETS ?= "arm aarch64 i386 x86_64 riscv64"
# Other QEMU_TARGETS "mips mips64 mips64el ppc sh4"
MIRRORS =+ "\
@@ -90,50 +99,26 @@ https://.*/.* http://download.automotivelinux.org/AGL/mirror/ \n \
# Git example url: git://git.yoctoproject.org/yocto-firewall-test;protocol=git;rev=HEAD
CONNECTIVITY_CHECK_URIS ?= ""
-PREFERRED_PROVIDER_udev ?= "systemd"
-PREFERRED_PROVIDER_udev-utils ?= "systemd"
-
-VIRTUAL-RUNTIME_init_manager = "systemd"
-VIRTUAL-RUNTIME_initscripts = ""
-
-# network manager to use (possible values: systemd, connman)
-VIRTUAL-RUNTIME_net_manager = "connman"
-
-DISTRO_FEATURES_APPEND = " "
-DISTRO_FEATURES_remove = "x11"
-DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit pulseaudio"
-
-# Prefer GStreamer 1.16.x by default
-PREFERRED_VERSION_gstreamer1.0 ?= "1.16.%"
-PREFERRED_VERSION_gstreamer1.0-plugins-bad ?= "1.16.%"
-PREFERRED_VERSION_gstreamer1.0-plugins-base ?= "1.16.%"
-PREFERRED_VERSION_gstreamer1.0-plugins-good ?= "1.16.%"
-PREFERRED_VERSION_gstreamer1.0-plugins-ugly ?= "1.16.%"
-PREFERRED_VERSION_gstreamer1.0-libav ?= "1.16.%"
-PREFERRED_VERSION_gstreamer1.0-omx ?= "1.16.%"
-
-# Prefer libjpeg-turbo
-PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
-
# using multiple BSP layers causes dangling bbappends in meta-agl-bsp
# turn it into a warning
#BB_DANGLINGAPPENDS_WARNONLY = "1"
# Not yet upstreamed; should be submitted.
-SECURITY_CFLAGS_pn-qtwebengine = "${SECURITY_NO_PIE_CFLAGS}"
+SECURITY_CFLAGS:pn-qtwebengine = "${SECURITY_NO_PIE_CFLAGS}"
#Redefined USER_CLASSES
#Disable prelink. It is unmaintained and likely will go away.
-#default: USER_CLASSES ?= "buildstats image-mklibs image-prelink"
-USER_CLASSES = "buildstats image-mklibs"
+#default: USER_CLASSES ?= "buildstats image-prelink"
+USER_CLASSES = "buildstats"
# AGL uses 4 optimization levels
# 2 for ARM 32bit
# - a high and a medium setting for the CCARGS
# - the high setting is default (needs >= cortex-a15)
-# - the medium setting is enabled with: DISTRO_FEATURES_append = " agl-medium-arm-compiler "
+# - the medium setting is enabled with: DISTRO_FEATURES:append = " agl-medium-arm-compiler "
# 1 for ARM 64bit / AARCH64
# 1 for x86-64
+# 1 for RISC-V 64-bit
require conf/distro/include/${TARGET_ARCH}-tune.inc
# Generic qemu and qemuboot (runqemu) enhancements
@@ -143,7 +128,7 @@ QB_MEM ?= "-m 2048"
# use pulseaudio on the host side - off as qemu-native is built with alsa
#QB_AUDIO_DRV = "pa"
# expose a virtual 'hda' sound card to the guest (arm/aarch64/x86-64)
-QB_AUDIO_OPT = "-soundhw hda"
+QB_AUDIO_OPT = "-device intel-hda -device hda-duplex -audiodev alsa,id=agl"
# Board templates can add extra IMAGE_FSTYPES through this.
# It is added (late) through the AGL image recipes.
@@ -152,56 +137,22 @@ AGL_EXTRA_INITRAMFS_FSTYPES ??= ""
#
# Default IMAGE FSTYPES wic.xz
AGL_DEFAULT_IMAGE_FSTYPES ?= "wic.xz wic.bmap wic.xz.sha256sum"
-AGL_DEFAULT_IMAGE_FSTYPES_qemuall ?= "${@bb.utils.contains('DISTRO_FEATURES', 'AGLCI', 'ext4.xz', 'ext4', d)}"
-AGL_DEFAULT_IMAGE_FSTYPES_append_netboot = " ${@bb.utils.contains('DISTRO_FEATURES', 'AGLCI', 'ext4.xz', 'ext4', d)}"
+AGL_DEFAULT_IMAGE_FSTYPES:qemuall ?= "${@bb.utils.contains('AGL_FEATURES', 'AGLCI', 'ext4.xz', 'ext4', d)}"
+AGL_DEFAULT_IMAGE_FSTYPES:append:netboot = " ${@bb.utils.contains('AGL_FEATURES', 'AGLCI', 'ext4.xz', 'ext4', d)}"
AGL_DEFAULT_INITRAMFS_FSTYPES ?= "ext4.gz"
# DEFAULT IMAGE_FSTYPES for AGL (no - BSPs should not set this)
#
-IMAGE_FSTYPES := "${AGL_DEFAULT_IMAGE_FSTYPES} ${AGL_EXTRA_IMAGE_FSTYPES}"
-INITRAMFS_FSTYPES := "${AGL_DEFAULT_INITRAMFS_FSTYPES} ${AGL_EXTRA_INITRAMFS_FSTYPES}"
+IMAGE_FSTYPES = "${AGL_DEFAULT_IMAGE_FSTYPES} ${AGL_EXTRA_IMAGE_FSTYPES}"
+INITRAMFS_FSTYPES = "${AGL_DEFAULT_INITRAMFS_FSTYPES} ${AGL_EXTRA_INITRAMFS_FSTYPES}"
#
-# THE FUTURE is 'wic'
-# IMAGE_FSTYPES_append = " wic"
-
-# enable the packagemanagement
-IMAGE_FEATURES =+ "package-management"
-PACKAGE_FEED_URIS = "http://192.168.7.1:8000/tmp/deploy/"
-PACKAGE_FEED_BASE_PATHS = "rpm"
-PACKAGE_FEED_ARCHS = ""
-#${PACKAGE_ARCHS}"
-
-# Complementary package definitions for agl-test-wgt and agl-devel-wgt
-# image features
-COMPLEMENTARY_GLOB[agl-test-wgt] = '*-test'
-COMPLEMENTARY_GLOB[agl-devel-wgt] = '*-coverage *-debug'
# Fix for rpm metadata clash between nativesdk-cmake and nativesdk-qtbase-tools
# (revalidate after 2017-10-15, 2018-06-12: still required)
-DIRFILES_pn-nativesdk-cmake = "1"
+DIRFILES:pn-nativesdk-cmake = "1"
# For https://jira.automotivelinux.org/browse/SPEC-1629 :
# We exclude the conflicting vars from the sstate task hash.
# This needs to be verified.
do_package_write_rpm[vardepsexclude] += "ARCHIVER_TOPDIR PF"
-# Set preferred provider to new navi application
-PREFERRED_RPROVIDER_virtual/navigation ?= "ondemandnavi"
-
-# Set preferred provider for low-can device mapping configuration
-PREFERRED_RPROVIDER_virtual/low-can-dev-mapping ?= "dev-mapping"
-
-# Mask upstream meta-security bbappend that interferes with non-linux-yocto
-# kernels due to the bug of having two wildcards, which bitbake does not
-# support. Not having it is not an issue, since there is also explicit
-# enabling of required security features done by meta-agl/meta-security.
-BBMASK += "meta-security/recipes-kernel/linux/linux-%_5.%.bbappend"
-
-# Workaround for https://jira.automotivelinux.org/browse/SPEC-3621
-# TLDR: do_image_wic will modify the target's /etc/fstab while
-# do_image_tar and do_image_ext4 can run in parallel
-# This needs to be fixed upstream:
-# See https://bugzilla.yoctoproject.org/show_bug.cgi?id=13994
-# For convenience restricted to ext4 and tar image types.
-AGL_FORBID_FSTAB_UPDATE ?= "${@bb.utils.contains_any('IMAGE_FSTYPES', 'ext4 ext4.xz tar tar.gz tar.bz2 tar.xz', '--no-fstab-update', '', d)}"
-WIC_CREATE_EXTRA_ARGS_append = " ${AGL_FORBID_FSTAB_UPDATE}"
diff --git a/meta-agl-core/conf/include/agl-create-spdx.inc b/meta-agl-core/conf/include/agl-create-spdx.inc
new file mode 100644
index 000000000..8d71013e3
--- /dev/null
+++ b/meta-agl-core/conf/include/agl-create-spdx.inc
@@ -0,0 +1 @@
+INHERIT += " create-spdx "
diff --git a/meta-agl-profile-core/conf/include/agl-devel.inc b/meta-agl-core/conf/include/agl-devel.inc
index 6ecd6a075..055fa61e3 100644
--- a/meta-agl-profile-core/conf/include/agl-devel.inc
+++ b/meta-agl-core/conf/include/agl-devel.inc
@@ -1,20 +1,16 @@
IMAGE_FEATURES =+ "debug-tweaks tools-debug tools-profile"
-IMAGE_INSTALL_append = " \
+IMAGE_INSTALL:append = " \
packagegroup-agl-core-devel \
"
-IMAGE_INSTALL_append = "${@bb.utils.contains_any('IMAGE_FSTYPES', 'wic.vmdk wic.vmdk.xz', ' open-vm-tools vboxguestdrivers', '', d)}"
-
# Install libdrm-test, including modetest, to images with GUI
-IMAGE_INSTALL_append = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', ' libdrm-tests', '', d)}"
-
-IMAGE_FEATURES_append = " agl-devel-wgt"
+IMAGE_INSTALL:append = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', ' libdrm-tests', '', d)}"
# disable install of debug files in SDK
# initial value: SDKIMAGE_FEATURES="dev-pkgs dbg-pkgs staticdev-pkgs"
SDKIMAGE_FEATURES="dev-pkgs"
# allows insertion of code or items specific to developement
-OVERRIDES .= ":agl-devel"
-DISTRO_FEATURES_append = " agl-devel"
+OVERRIDES:append = ":agl-devel"
+DISTRO_FEATURES:append = " agl-devel"
diff --git a/meta-agl-core/conf/include/agl-package-management.inc b/meta-agl-core/conf/include/agl-package-management.inc
new file mode 100644
index 000000000..9acf439c2
--- /dev/null
+++ b/meta-agl-core/conf/include/agl-package-management.inc
@@ -0,0 +1,6 @@
+# Enable package management
+IMAGE_FEATURES =+ "package-management"
+PACKAGE_FEED_URIS = "http://192.168.7.1:8000/tmp/deploy/"
+PACKAGE_FEED_BASE_PATHS = "rpm"
+PACKAGE_FEED_ARCHS = ""
+#${PACKAGE_ARCHS}"
diff --git a/meta-agl-core/conf/include/agl-selinux.inc b/meta-agl-core/conf/include/agl-selinux.inc
new file mode 100644
index 000000000..aeb26e33d
--- /dev/null
+++ b/meta-agl-core/conf/include/agl-selinux.inc
@@ -0,0 +1,20 @@
+DISTRO_FEATURES:append = " acl xattr selinux"
+
+# Reiterate the upstream default of targeted policy since that
+# is the mostly widely used model, and it will likely be easier
+# to pull policy from other distributions for it.
+# Having an explicit setting here seems useful for documentation
+# purposes, and it is still possible that using one of the other
+# refpolicy package options as the AGL default desirable, and it
+# would be set here.
+PREFERRED_PROVIDER_virtual/refpolicy ?= "refpolicy-targeted"
+
+# Default to permissive mode
+DEFAULT_ENFORCING ?= "permissive"
+
+# Override the base image class to get the SELinux labeling hook
+AGL_BASE_IMAGE ?= "selinux-image"
+
+# Mask out meta-selinux's linux-yocto kernel config bbappend to
+# avoid collision with AGL's own more universal scheme.
+BBMASK += "meta-selinux/recipes-kernel/linux/" \ No newline at end of file
diff --git a/meta-agl-core/conf/include/base-agl.inc b/meta-agl-core/conf/include/base-agl.inc
new file mode 100644
index 000000000..30bfc93d3
--- /dev/null
+++ b/meta-agl-core/conf/include/base-agl.inc
@@ -0,0 +1,18 @@
+# Disable kernel module tarballs by default on the assumption that
+# desired modules will already be present in images.
+# Comment this out to receive the separate modules tarball again.
+MODULE_TARBALL_DEPLOY ?= "0"
+
+# Comment out below if want to use QtWebkit
+PACKAGECONFIG:remove:pn-qtquick1 = "webkit"
+
+
+ASSUME_PROVIDED:remove = "tar-native"
+
+# Use static IDs to enable full-filesystem updates
+USERADDEXTENSION = "useradd-staticids"
+USERADD_ERROR_DYNAMIC = "error"
+USERADD_GID_TABLES = "files/group"
+USERADD_UID_TABLES = "files/passwd"
+
+AGL_FEATURES += "aglcore"
diff --git a/meta-agl-core/conf/layer.conf b/meta-agl-core/conf/layer.conf
new file mode 100644
index 000000000..ddea256fe
--- /dev/null
+++ b/meta-agl-core/conf/layer.conf
@@ -0,0 +1,28 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH =. "${LAYERDIR}:"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "aglcore"
+BBFILE_PATTERN_aglcore = "^${LAYERDIR}/"
+BBFILE_PRIORITY_aglcore = "60"
+
+BBFILES_DYNAMIC += " \
+ openembedded-layer:${LAYERDIR}/dynamic-layers/meta-oe/*/*/*.bb \
+ openembedded-layer:${LAYERDIR}/dynamic-layers/meta-oe/*/*/*.bbappend \
+ \
+ selinux:${LAYERDIR}/dynamic-layers/meta-selinux/*/*/*.bb \
+ selinux:${LAYERDIR}/dynamic-layers/meta-selinux/*/*/*.bbappend \
+ \
+ qt5-layer:${LAYERDIR}/dynamic-layers/meta-qt5/*/*/*.bb \
+ qt5-layer:${LAYERDIR}/dynamic-layers/meta-qt5/*/*/*.bbappend \
+"
+
+LAYERSERIES_COMPAT_aglcore = "kirkstone"
+LAYERDEPENDS_aglcore = "core"
+
+# Sanity check for meta-virtualization layer.
+# Setting SKIP_META_VIRT_SANITY_CHECK to "1" would skip the bbappend files check.
+#INHERIT += "sanity-meta-agl-core"
diff --git a/meta-agl-core/conf/local.conf.sample b/meta-agl-core/conf/local.conf.sample
new file mode 100644
index 000000000..ecc9b141a
--- /dev/null
+++ b/meta-agl-core/conf/local.conf.sample
@@ -0,0 +1,277 @@
+#
+# This file is your local configuration file and is where all local user settings
+# are placed. The comments in this file give some guide to the options a new user
+# to the system might want to change but pretty much any configuration option can
+# be set in this file. More adventurous users can look at local.conf.extended
+# which contains other examples of configuration which can be placed in this file
+# but new users likely won't need any of them initially.
+#
+# Lines starting with the '#' character are commented out and in some cases the
+# default values are provided as comments to show people example syntax. Enabling
+# the option is a question of removing the # character and making any change to the
+# variable as required.
+
+#
+# Machine Selection
+#
+# You need to select a specific machine to target the build with. There are a selection
+# of emulated machines available which can boot and run in the QEMU emulator:
+#
+#MACHINE ?= "qemuarm"
+#MACHINE ?= "qemuarm64"
+#MACHINE ?= "qemumips"
+#MACHINE ?= "qemumips64"
+#MACHINE ?= "qemuppc"
+#MACHINE ?= "qemux86"
+#MACHINE ?= "qemux86-64"
+#
+# There are also the following hardware board target machines included for
+# demonstration purposes:
+#
+#MACHINE ?= "beaglebone-yocto"
+#MACHINE ?= "genericx86"
+#MACHINE ?= "genericx86-64"
+#MACHINE ?= "edgerouter"
+#
+# This sets the default machine to be qemux86-64 if no other machine is selected:
+MACHINE ??= "qemux86-64"
+
+#
+# Where to place downloads
+#
+# During a first build the system will download many different source code tarballs
+# from various upstream projects. This can take a while, particularly if your network
+# connection is slow. These are all stored in DL_DIR. When wiping and rebuilding you
+# can preserve this directory to speed up this part of subsequent builds. This directory
+# is safe to share between multiple builds on the same machine too.
+#
+# The default is a downloads directory under TOPDIR which is the build directory.
+#
+#DL_DIR ?= "${TOPDIR}/downloads"
+
+#
+# Where to place shared-state files
+#
+# BitBake has the capability to accelerate builds based on previously built output.
+# This is done using "shared state" files which can be thought of as cache objects
+# and this option determines where those files are placed.
+#
+# You can wipe out TMPDIR leaving this directory intact and the build would regenerate
+# from these files if no changes were made to the configuration. If changes were made
+# to the configuration, only shared state files where the state was still valid would
+# be used (done using checksums).
+#
+# The default is a sstate-cache directory under TOPDIR.
+#
+#SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
+
+#
+# Where to place the build output
+#
+# This option specifies where the bulk of the building work should be done and
+# where BitBake should place its temporary files and output. Keep in mind that
+# this includes the extraction and compilation of many applications and the toolchain
+# which can use Gigabytes of hard disk space.
+#
+# The default is a tmp directory under TOPDIR.
+#
+#TMPDIR = "${TOPDIR}/tmp"
+
+#
+# Default policy config
+#
+# The distribution setting controls which policy settings are used as defaults.
+# The default value is fine for general Yocto project use, at least initially.
+# Ultimately when creating custom policy, people will likely end up subclassing
+# these defaults.
+#
+DISTRO ?= "poky"
+# As an example of a subclass there is a "bleeding" edge policy configuration
+# where many versions are set to the absolute latest code from the upstream
+# source control systems. This is just mentioned here as an example, its not
+# useful to most new users.
+# DISTRO ?= "poky-bleeding"
+
+#
+# Package Management configuration
+#
+# This variable lists which packaging formats to enable. Multiple package backends
+# can be enabled at once and the first item listed in the variable will be used
+# to generate the root filesystems.
+# Options are:
+# - 'package_deb' for debian style deb files
+# - 'package_ipk' for ipk files are used by opkg (a debian style embedded package manager)
+# - 'package_rpm' for rpm style packages
+# E.g.: PACKAGE_CLASSES ?= "package_rpm package_deb package_ipk"
+# We default to rpm:
+PACKAGE_CLASSES ?= "package_rpm"
+
+#
+# SDK target architecture
+#
+# This variable specifies the architecture to build SDK items for and means
+# you can build the SDK packages for architectures other than the machine you are
+# running the build on (i.e. building i686 packages on an x86_64 host).
+# Supported values are i686 and x86_64
+#SDKMACHINE ?= "i686"
+
+#
+# Extra image configuration defaults
+#
+# The EXTRA_IMAGE_FEATURES variable allows extra packages to be added to the generated
+# images. Some of these options are added to certain image types automatically. The
+# variable can contain the following options:
+# "dbg-pkgs" - add -dbg packages for all installed packages
+# (adds symbol information for debugging/profiling)
+# "src-pkgs" - add -src packages for all installed packages
+# (adds source code for debugging)
+# "dev-pkgs" - add -dev packages for all installed packages
+# (useful if you want to develop against libs in the image)
+# "ptest-pkgs" - add -ptest packages for all ptest-enabled packages
+# (useful if you want to run the package test suites)
+# "tools-sdk" - add development tools (gcc, make, pkgconfig etc.)
+# "tools-debug" - add debugging tools (gdb, strace)
+# "eclipse-debug" - add Eclipse remote debugging support
+# "tools-profile" - add profiling tools (oprofile, lttng, valgrind)
+# "tools-testapps" - add useful testing tools (ts_print, aplay, arecord etc.)
+# "debug-tweaks" - make an image suitable for development
+# e.g. ssh root access has a blank password
+# There are other application targets that can be used here too, see
+# meta/classes/image.bbclass and meta/classes/core-image.bbclass for more details.
+# We default to enabling the debugging tweaks.
+EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
+
+#
+# Additional image features
+#
+# The following is a list of additional classes to use when building images which
+# enable extra features. Some available options which can be included in this variable
+# are:
+# - 'buildstats' collect build statistics
+# - 'image-mklibs' to reduce shared library files size for an image
+# - 'image-prelink' in order to prelink the filesystem image
+# NOTE: if listing mklibs & prelink both, then make sure mklibs is before prelink
+# NOTE: mklibs also needs to be explicitly enabled for a given image, see local.conf.extended
+USER_CLASSES ?= "buildstats image-prelink"
+
+#
+# Runtime testing of images
+#
+# The build system can test booting virtual machine images under qemu (an emulator)
+# after any root filesystems are created and run tests against those images. It can also
+# run tests against any SDK that are built. To enable this uncomment these lines.
+# See classes/test{image,sdk}.bbclass for further details.
+#IMAGE_CLASSES += "testimage testsdk"
+#TESTIMAGE_AUTO:qemuall = "1"
+
+#
+# Interactive shell configuration
+#
+# Under certain circumstances the system may need input from you and to do this it
+# can launch an interactive shell. It needs to do this since the build is
+# multithreaded and needs to be able to handle the case where more than one parallel
+# process may require the user's attention. The default is iterate over the available
+# terminal types to find one that works.
+#
+# Examples of the occasions this may happen are when resolving patches which cannot
+# be applied, to use the devshell or the kernel menuconfig
+#
+# Supported values are auto, gnome, xfce, rxvt, screen, konsole (KDE 3.x only), none
+# Note: currently, Konsole support only works for KDE 3.x due to the way
+# newer Konsole versions behave
+#OE_TERMINAL = "auto"
+# By default disable interactive patch resolution (tasks will just fail instead):
+PATCHRESOLVE = "noop"
+
+#
+# Disk Space Monitoring during the build
+#
+# Monitor the disk space during the build. If there is less that 1GB of space or less
+# than 100K inodes in any key build location (TMPDIR, DL_DIR, SSTATE_DIR), gracefully
+# shutdown the build. If there is less that 100MB or 1K inodes, perform a hard halt
+# of the build. The reason for this is that running completely out of space can corrupt
+# files and damages the build in ways which may not be easily recoverable.
+# It's necesary to monitor /tmp, if there is no space left the build will fail
+# with very exotic errors.
+BB_DISKMON_DIRS ??= "\
+ STOPTASKS,${TMPDIR},1G,100K \
+ STOPTASKS,${DL_DIR},1G,100K \
+ STOPTASKS,${SSTATE_DIR},1G,100K \
+ STOPTASKS,/tmp,100M,100K \
+ HALT,${TMPDIR},100M,1K \
+ HALT,${DL_DIR},100M,1K \
+ HALT,${SSTATE_DIR},100M,1K \
+ HALT,/tmp,10M,1K"
+
+#
+# Shared-state files from other locations
+#
+# As mentioned above, shared state files are prebuilt cache data objects which can
+# used to accelerate build time. This variable can be used to configure the system
+# to search other mirror locations for these objects before it builds the data itself.
+#
+# This can be a filesystem directory, or a remote url such as http or ftp. These
+# would contain the sstate-cache results from previous builds (possibly from other
+# machines). This variable works like fetcher MIRRORS/PREMIRRORS and points to the
+# cache locations to check for the shared objects.
+# NOTE: if the mirror uses the same structure as SSTATE_DIR, you need to add PATH
+# at the end as shown in the examples below. This will be substituted with the
+# correct path within the directory structure.
+#SSTATE_MIRRORS ?= "\
+#file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \
+#file://.* file:///some/local/dir/sstate/PATH"
+
+#
+# Yocto Project SState Mirror
+#
+# The Yocto Project has prebuilt artefacts available for its releases, you can enable
+# use of these by uncommenting the following line. This will mean the build uses
+# the network to check for artefacts at the start of builds, which does slow it down
+# equally, it will also speed up the builds by not having to build things if they are
+# present in the cache. It assumes you can download something faster than you can build it
+# which will depend on your network.
+#
+#SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/2.5/PATH;downloadfilename=PATH"
+
+#
+# Qemu configuration
+#
+# By default native qemu will build with a builtin VNC server where graphical output can be
+# seen. The line below enables the SDL UI frontend too.
+PACKAGECONFIG:append:pn-qemu-system-native = " sdl"
+# By default libsdl2-native will be built, if you want to use your host's libSDL instead of
+# the minimal libsdl built by libsdl2-native then uncomment the ASSUME_PROVIDED line below.
+#ASSUME_PROVIDED += "libsdl2-native"
+
+# You can also enable the Gtk UI frontend, which takes somewhat longer to build, but adds
+# a handy set of menus for controlling the emulator.
+#PACKAGECONFIG:append:pn-qemu-system-native = " gtk+"
+
+#
+# Hash Equivalence
+#
+# Enable support for automatically running a local hash equivalence server and
+# instruct bitbake to use a hash equivalence aware signature generator. Hash
+# equivalence improves reuse of sstate by detecting when a given sstate
+# artifact can be reused as equivalent, even if the current task hash doesn't
+# match the one that generated the artifact.
+#
+# A shared hash equivalent server can be set with "<HOSTNAME>:<PORT>" format
+#
+#BB_HASHSERVE = "auto"
+#BB_SIGNATURE_HANDLER = "OEEquivHash"
+
+# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to
+# track the version of this file when it was generated. This can safely be ignored if
+# this doesn't mean anything to you.
+CONF_VERSION = "2"
+
+# meta-agl-core uses these variables
+AGL_FEATURES ?= ""
+AGL_EXTRA_IMAGE_FSTYPES ?= ""
+
+DISTRO_FEATURES:append = " systemd "
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
+VIRTUAL-RUNTIME_init_manager = "systemd"
+
+# soon: INIT_MANAGER = "systemd"
diff --git a/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-compositor-init.bbappend b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-compositor-init.bbappend
new file mode 100644
index 000000000..4b6deffdf
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-compositor-init.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'agl-compositor-init_aglcore.inc', '', d)}
diff --git a/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-compositor-init_aglcore.inc b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-compositor-init_aglcore.inc
new file mode 100644
index 000000000..b7d346d39
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-compositor-init_aglcore.inc
@@ -0,0 +1 @@
+require common-init.inc
diff --git a/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-shell-activator_git.bb b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-shell-activator_git.bb
new file mode 100644
index 000000000..38725c1bd
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/agl-shell-activator_git.bb
@@ -0,0 +1,22 @@
+SUMMARY = " Application that switches/activates other application's windows "
+DESCRIPTION = " A wayland client and a script that talks with the agl-compositor \
+an tells it to display a specific application. Relies on the appid being \
+started (already) by afm-util or the client shell (homescreen/WAM)"
+
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/q/project:src%252Fagl-shell-activator"
+SECTION = "x11"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e978448a0d41d826d73890d9c22caf75"
+
+DEPENDS = "wayland wayland-protocols wayland-native agl-compositor grpc grpc-native"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/agl-shell-activator.git;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "027d6f814f3d1f2e6b4b4071365b28dadec34109"
+
+PV = "0.0.10+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+
+inherit meson pkgconfig python3native
+
+FILES:${PN} = " ${bindir}/agl-shell-activator"
diff --git a/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/common-init.inc b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/common-init.inc
new file mode 100644
index 000000000..47f7d8b1d
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/common-init.inc
@@ -0,0 +1,6 @@
+# If weston's PACKAGECONFIG contains systemd + pam + polkit, polkit
+# ends up a hard requirement for start up due to the pam + systemd
+# configuration that is being installed. For now, keep things simple
+# and assume that polkit should be a dependency if it is in
+# DISTRO_FEATURES.
+RDEPENDS:${PN} += "${@bb.utils.filter('DISTRO_FEATURES', 'polkit', d)}"
diff --git a/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/weston-init.bbappend b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/weston-init.bbappend
new file mode 100644
index 000000000..c09d7ccd3
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/weston-init.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'weston-init_aglcore.inc', '', d)}
diff --git a/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/weston-init_aglcore.inc b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/weston-init_aglcore.inc
new file mode 100644
index 000000000..b7d346d39
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-oe/recipes-graphics/wayland/weston-init_aglcore.inc
@@ -0,0 +1 @@
+require common-init.inc
diff --git a/meta-agl-core/dynamic-layers/meta-oe/recipes-platform/images/agl-image-compositor.bbappend b/meta-agl-core/dynamic-layers/meta-oe/recipes-platform/images/agl-image-compositor.bbappend
new file mode 100644
index 000000000..1e0e66f01
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-oe/recipes-platform/images/agl-image-compositor.bbappend
@@ -0,0 +1,3 @@
+IMAGE_INSTALL += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'agl-shell-activator', '', d)} \
+"
diff --git a/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtbase_%.bbappend b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtbase_%.bbappend
new file mode 100644
index 000000000..aab944c2f
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtbase_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'qtbase_aglcore.inc', '', d)}
diff --git a/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtbase_aglcore.inc b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtbase_aglcore.inc
new file mode 100644
index 000000000..581f5de99
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtbase_aglcore.inc
@@ -0,0 +1,10 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/qtbase:"
+
+PACKAGECONFIG_WAYLAND = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)}"
+
+PACKAGECONFIG_GL = "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2', '', d)}"
+
+PACKAGECONFIG:append = " ${PACKAGECONFIG_WAYLAND}"
+
+# '-qpa wayland-egl' set wayland-egl as default of platform plugins
+PACKAGECONFIG[wayland]="-qpa wayland-egl -no-qpa-platform-guard"
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch
index ba8a991ed..ba8a991ed 100644
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch
+++ b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation/0001-mapbox-update-API-url-to-match-new-schema.patch
diff --git a/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation_%.bbappend b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation_%.bbappend
new file mode 100644
index 000000000..a0d80075a
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'qtlocation_aglcore.inc', '', d)}
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation_%.bbappend b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation_aglcore.inc
index bcda6a1e5..60867aef0 100644
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtlocation_%.bbappend
+++ b/meta-agl-core/dynamic-layers/meta-qt5/recipes-qt/qt5/qtlocation_aglcore.inc
@@ -1,4 +1,4 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/qtlocation:"
SRC_URI += "\
file://0001-mapbox-update-API-url-to-match-new-schema.patch \
diff --git a/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/files/systemd-selinux-relabel.service b/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/files/systemd-selinux-relabel.service
new file mode 100644
index 000000000..b8d394068
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/files/systemd-selinux-relabel.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Generated file SELinux relabeling
+DefaultDependencies=no
+After=local-fs.target systemd-machine-id-commit.service
+Before=sysinit.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/systemd-selinux-relabel.sh
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/files/systemd-selinux-relabel.sh b/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/files/systemd-selinux-relabel.sh
new file mode 100644
index 000000000..b2557a8d6
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/files/systemd-selinux-relabel.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# Update labels on files generated on first boot.
+/usr/sbin/restorecon -FRi /etc/systemd /etc/machine-id
+if [ $? -eq 0 ]; then
+ # Disable parent service
+ # NOTE: The service does not use the first boot functionality
+ # in systemd as /etc/machine-id is not writeable until
+ # after it is complete.
+ systemctl disable systemd-selinux-relabel.service
+fi
+exit 0
diff --git a/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/systemd-selinux-relabel_1.0.bb b/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/systemd-selinux-relabel_1.0.bb
new file mode 100644
index 000000000..7e4f9783c
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-selinux/recipes-core/systemd/systemd-selinux-relabel_1.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "System unit to relabel systemd generated files"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://systemd-selinux-relabel.service \
+ file://systemd-selinux-relabel.sh \
+"
+
+inherit systemd allarch features_check
+
+SYSTEMD_SERVICE:${PN} = "${BPN}.service"
+
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/systemd-selinux-relabel.service ${D}${systemd_system_unitdir}/
+ install -d ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/systemd-selinux-relabel.sh ${D}${sbindir}/
+}
+
+FILES:${PN} += "${systemd_system_unitdir}"
diff --git a/meta-agl-core/dynamic-layers/meta-selinux/recipes-platform/packagegroups/packagegroup-agl-core-selinux.bb b/meta-agl-core/dynamic-layers/meta-selinux/recipes-platform/packagegroups/packagegroup-agl-core-selinux.bb
new file mode 100644
index 000000000..493a46f25
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-selinux/recipes-platform/packagegroups/packagegroup-agl-core-selinux.bb
@@ -0,0 +1,57 @@
+SUMMARY = "SELinux packages"
+DESCRIPTION = "SELinux packages required for AGL"
+LICENSE = "MIT"
+
+inherit packagegroup features_check
+
+REQUIRED_DISTRO_FEATURES = "selinux"
+
+PACKAGES = " \
+ packagegroup-agl-core-selinux \
+ packagegroup-agl-core-selinux-devel \
+"
+
+#
+# meta-selinux's packagegroup-core-selinux includes a lot of
+# policy development tools with its inclusion of the layer's
+# packagegroup-selinux-policycoreutils, which is not really
+# desirable for a production image. Create our own base
+# packagegroup and an accompanying devel packagegroup that
+# agl-devel can trigger pulling in.
+#
+# NOTES:
+# - It seems likely we will always want auditd, so include
+# it in the base packagegroup.
+# - selinux-autorelabel seems required to handle both the
+# edge case of builds done on non-xattr capable filesystems,
+# and to allow driving relabeling after potential package
+# installation during runtime.
+# - packagegroup-selinux-policycoreutils includes a lot of
+# things that seem not useful in a lot of systems (e.g.
+# the gtk dependent selinux-gui), so for now the devel
+# packagegroup aims to include a more minimal set of tools
+# aimed at enabling checkpolicy and audit2allow use.
+# - Some thought needs to go into whether the relabeling
+# fixup packages should be handled separately, as they
+# ideally should not go into images using read-only or
+# stateless rootfs, but those are image features so we
+# cannot check for them here.
+#
+
+RDEPENDS:${PN} = " \
+ packagegroup-selinux-minimal \
+ auditd \
+ selinux-autorelabel \
+ systemd-selinux-relabel \
+"
+
+RDEPENDS:${PN}-devel = " \
+ ${BPN} \
+ libsepol-bin \
+ checkpolicy \
+ policycoreutils-loadpolicy \
+ policycoreutils-setsebool \
+ policycoreutils-hll \
+ semodule-utils-semodule-package \
+ selinux-python-audit2allow \
+"
diff --git a/meta-agl-core/dynamic-layers/meta-selinux/recipes-security/selinux-scripts/selinux-autorelabel_0.1.bbappend b/meta-agl-core/dynamic-layers/meta-selinux/recipes-security/selinux-scripts/selinux-autorelabel_0.1.bbappend
new file mode 100644
index 000000000..793b049e5
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-selinux/recipes-security/selinux-scripts/selinux-autorelabel_0.1.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'selinux-autorelabel_aglcore.inc', '', d)}
diff --git a/meta-agl-core/dynamic-layers/meta-selinux/recipes-security/selinux-scripts/selinux-autorelabel_aglcore.inc b/meta-agl-core/dynamic-layers/meta-selinux/recipes-security/selinux-scripts/selinux-autorelabel_aglcore.inc
new file mode 100644
index 000000000..67d3843f4
--- /dev/null
+++ b/meta-agl-core/dynamic-layers/meta-selinux/recipes-security/selinux-scripts/selinux-autorelabel_aglcore.inc
@@ -0,0 +1,4 @@
+do_install:append() {
+ # Do not force auto relabeling just from the package getting installed
+ rm -f ${D}/.autorelabel
+}
diff --git a/meta-agl-profile-core/files/group b/meta-agl-core/files/group
index c309f6a05..69a86186e 100644
--- a/meta-agl-profile-core/files/group
+++ b/meta-agl-core/files/group
@@ -84,9 +84,18 @@ vmail::958:
opensaf::957:
lldpd::956:
postdrop::954:
-display::200:
+weston::200:
+wayland::201:
+display::202:
agl-driver::1001:
agl-passenger::1002:
+applaunchd::1003:
systemd-network::1005:
systemd-resolve::1006:
mosquitto::1007:
+pipewire::1008:
+render::1009:
+sgx::1010:
+kuksa::900:
+qemu::901:
+kvm::902:
diff --git a/meta-agl-profile-core/files/passwd b/meta-agl-core/files/passwd
index ac70c0f9b..3e6639d86 100644
--- a/meta-agl-profile-core/files/passwd
+++ b/meta-agl-core/files/passwd
@@ -23,6 +23,7 @@ sshd::996:996:::
systemd-bus-proxy::995:995:::
agl-driver::1001:1001:::
agl-passenger::1002:1002:::
+applaunchd::1003:1003:::
messagebus::994:994:::
afm::992:992:::
systemd-timesync::988:988:::
@@ -56,7 +57,11 @@ vmail::958:958:::
opensaf::957:957:::
lldpd::956:956:::
cyrus::955:8:::
-display::200:200:::
+weston::200:200:::
systemd-network::1005:1005:::
systemd-resolve::1006:1006:::
mosquitto::1007:1007:::
+pipewire::1008:1008:::
+kuksa::900:900:::
+qemu::901:901:::
+user::1004:100:::
diff --git a/meta-agl-core/recipes-config/agl-users/agl-users.inc b/meta-agl-core/recipes-config/agl-users/agl-users.inc
new file mode 100644
index 000000000..428af3806
--- /dev/null
+++ b/meta-agl-core/recipes-config/agl-users/agl-users.inc
@@ -0,0 +1,14 @@
+inherit useradd
+
+USERADD_PACKAGES = "${PN}"
+USERADDEXTENSION = "useradd-staticids"
+
+GROUPADD_PARAM:${PN} = "\
+ --system video ; \
+ --system pipewire ; \
+ -g 1001 agl-driver ; \
+"
+
+USERADD_PARAM:${PN} = "\
+ -g 1001 -u 1001 -G video,pipewire -o -d /home/agl-driver -m -K PASS_MAX_DAYS=-1 agl-driver ; \
+"
diff --git a/meta-agl-core/recipes-config/agl-users/agl-users_1.0.bb b/meta-agl-core/recipes-config/agl-users/agl-users_1.0.bb
new file mode 100644
index 000000000..18f25e4be
--- /dev/null
+++ b/meta-agl-core/recipes-config/agl-users/agl-users_1.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "AGL Users"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+inherit allarch
+
+require agl-users.inc
+
+ALLOW_EMPTY:${PN} = "1"
diff --git a/meta-agl-core/recipes-connectivity/busybox/busybox_%.bbappend b/meta-agl-core/recipes-connectivity/busybox/busybox_%.bbappend
new file mode 100644
index 000000000..980783236
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/busybox/busybox_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-connectivity/busybox/busybox_aglcore.inc b/meta-agl-core/recipes-connectivity/busybox/busybox_aglcore.inc
new file mode 100644
index 000000000..88ff7daec
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/busybox/busybox_aglcore.inc
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+SRC_URI:append = " file://enable-wget-https.cfg"
+
diff --git a/meta-agl-profile-core/recipes-connectivity/busybox/files/enable-wget-https.cfg b/meta-agl-core/recipes-connectivity/busybox/files/enable-wget-https.cfg
index e92006bef..e92006bef 100644
--- a/meta-agl-profile-core/recipes-connectivity/busybox/files/enable-wget-https.cfg
+++ b/meta-agl-core/recipes-connectivity/busybox/files/enable-wget-https.cfg
diff --git a/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/0001-Do-not-overwrite-CFLAGS.patch b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/0001-Do-not-overwrite-CFLAGS.patch
new file mode 100644
index 000000000..4a86e6c57
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/0001-Do-not-overwrite-CFLAGS.patch
@@ -0,0 +1,37 @@
+From 50ca6e010c3ca3f7cb06dfdf5dbdfaacd4f4749a Mon Sep 17 00:00:00 2001
+From: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+Date: Tue, 19 Jul 2022 23:28:21 +0200
+Subject: [PATCH] Do not overwrite CFLAGS
+
+Signed-off-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+---
+ configure.ac | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 7e3307f..c385bc0 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -24,14 +24,14 @@ AC_PROG_CC
+ AC_PROG_CC_C99
+ AM_PROG_CC_C_O
+
+-CFLAGS=""
+-
+-AC_ARG_ENABLE(optimization, AC_HELP_STRING([--disable-optimization],
+- [disable code optimization through compiler]), [
+- if (test "${enableval}" = "no"); then
+- CFLAGS="$CFLAGS -O0 -U_FORTIFY_SOURCE"
+- fi
+-])
++#CFLAGS=""
++#
++#AC_ARG_ENABLE(optimization, AC_HELP_STRING([--disable-optimization],
++# [disable code optimization through compiler]), [
++# if (test "${enableval}" = "no"); then
++# CFLAGS="$CFLAGS -O0 -U_FORTIFY_SOURCE"
++# fi
++#])
+
+ AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug],
+ [enable compiling with debugging information]), [
diff --git a/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/0001-Initialize-variables.patch b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/0001-Initialize-variables.patch
new file mode 100644
index 000000000..9a1078426
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/0001-Initialize-variables.patch
@@ -0,0 +1,39 @@
+From 0389a80796d3ae31d8f60659f0638660a00157b2 Mon Sep 17 00:00:00 2001
+From: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+Date: Tue, 19 Jul 2022 23:58:05 +0200
+Subject: [PATCH] Initialize variables
+
+This fixes compiler warnings.
+
+Signed-off-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+---
+ main.c | 2 +-
+ renderers.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/main.c b/main.c
+index f0354f9..1fa9ab1 100644
+--- a/main.c
++++ b/main.c
+@@ -159,7 +159,7 @@ static void report_error()
+ */
+ static void get_help_window()
+ {
+- char *msg;
++ char *msg = "";
+
+ if (win_help)
+ return;
+diff --git a/renderers.c b/renderers.c
+index c531a1e..d9d0414 100644
+--- a/renderers.c
++++ b/renderers.c
+@@ -153,7 +153,7 @@ static void renderers_technologies(struct json_object *jobj)
+ int i;
+ char *desc_base = "%-20s Powered %-5s Connected %-5s";
+ char desc_base_sub[30];
+- const char *k_name, *k_type, *k_powered, *k_connected;
++ const char *k_name = "" , *k_type = "" , *k_powered = "", *k_connected = "";
+ char *desc, *tech_short_name;
+ struct json_object *sub_array, *dbus_tech_name, *tech_dict;
+ struct userptr_data *data;
diff --git a/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/stdbool-fixes.patch b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/stdbool-fixes.patch
new file mode 100644
index 000000000..4e858e3c4
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses/stdbool-fixes.patch
@@ -0,0 +1,53 @@
+Replace some TRUE/FALSE usage with stdbool.h definitions
+
+Newer versions of json-c dropped its previous #defines for TRUE and
+FALSE, update affected code to use the stdbool.h boolean definitions
+to fix compilation.
+
+Upstream-Status: Pending
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+
+---
+diff --git a/json_regex.c b/json_regex.c
+index 2524c18..cdb6801 100644
+--- a/json_regex.c
++++ b/json_regex.c
+@@ -24,6 +24,7 @@
+ #endif
+
+ #include <json.h>
++#include <stdbool.h>
+
+ #include "json_regex.h"
+ #include "keys.h"
+@@ -64,7 +65,7 @@ void generate_trusted_json(void)
+ json_object_object_add(jregex_agent_response, "Username", json_object_new_string("^([[:print:]]*)$"));
+ json_object_object_add(jregex_agent_response, "Password", json_object_new_string("^([[:print:]]*)$"));
+
+- jregex_agent_retry_response = json_object_new_boolean(TRUE);
++ jregex_agent_retry_response = json_object_new_boolean(true);
+
+ // See commands.c __cmd_config_service for a better idea of the format.
+ jregex_config_service = json_object_new_object();
+@@ -94,7 +95,7 @@ void generate_trusted_json(void)
+ json_object_array_add(arr, json_object_new_string("^([[:print:]]*)$"));
+ json_object_object_add(tmp, key_serv_proxy_excludes, arr);
+ json_object_object_add(opt, key_serv_proxy_config, tmp);
+- json_object_object_add(opt, key_serv_autoconnect, json_object_new_boolean(TRUE));
++ json_object_object_add(opt, key_serv_autoconnect, json_object_new_boolean(true));
+ arr = json_object_new_array();
+ json_object_array_add(arr, json_object_new_string("^([[:print:]]*)$"));
+ json_object_object_add(opt, key_serv_domains_config, arr);
+diff --git a/json_utils.c b/json_utils.c
+index f66d08a..8f2c195 100644
+--- a/json_utils.c
++++ b/json_utils.c
+@@ -83,7 +83,7 @@ static bool json_match_object(struct json_object *jobj,
+ key_is_trusted = json_object_object_get_ex(jtrusted, key,
+ &tmp_trusted);
+
+- if (key_is_trusted == FALSE)
++ if (key_is_trusted == false)
+ return false;
+
+ res = __json_type_dispatch(val, tmp_trusted);
diff --git a/meta-agl-profile-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb
index 61086dfe7..7b6d50531 100644
--- a/meta-agl-profile-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb
+++ b/meta-agl-core/recipes-connectivity/connman-ncurses/connman-ncurses_git.bb
@@ -6,16 +6,19 @@ SECTION = "console/network"
DEPENDS = "dbus ncurses connman json-c"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=8c16666ae6c159876a0ba63099614381"
-SRC_URI = "git://gitlab.com/iotbzh/connman-json-client.git;protocol=https"
+SRC_URI = "git://gitlab.com/iotbzh/connman-json-client.git;protocol=https;branch=master \
+ file://stdbool-fixes.patch \
+ file://0001-Do-not-overwrite-CFLAGS.patch \
+ file://0001-Initialize-variables.patch \
+ "
SRCREV = "2b0f93ec9518c978c04807fe52e95315d6d80e6b"
inherit autotools pkgconfig
-EXTRA_AUTORECONF += " -i"
-EXTRA_OECONF += " --disable-optimization --enable-debug"
+EXTRA_AUTORECONF += " -vfi"
S = "${WORKDIR}/git"
@@ -24,4 +27,4 @@ do_install () {
install -Dm755 connman_ncurses ${D}${bindir}
}
-FILES_${PN} = "${bindir}/connman_ncurses"
+FILES:${PN} = "${bindir}/connman_ncurses"
diff --git a/meta-agl-core/recipes-connectivity/connman/connman-conf.bbappend b/meta-agl-core/recipes-connectivity/connman/connman-conf.bbappend
new file mode 100644
index 000000000..bd6e7b75c
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/connman/connman-conf.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'connman-conf_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-connectivity/connman/connman-conf/main.conf b/meta-agl-core/recipes-connectivity/connman/connman-conf/main.conf
new file mode 100644
index 000000000..be9fd0ed2
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/connman/connman-conf/main.conf
@@ -0,0 +1,3 @@
+[General]
+FallbackTimeservers=pool.ntp.org
+NetworkInterfaceBlacklist=vmnet,vboxnet,virbr,tap,ifb,meth
diff --git a/meta-agl-core/recipes-connectivity/connman/connman-conf_aglcore.inc b/meta-agl-core/recipes-connectivity/connman/connman-conf_aglcore.inc
new file mode 100644
index 000000000..30a250e1e
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/connman/connman-conf_aglcore.inc
@@ -0,0 +1,9 @@
+# Pick up our version of main.conf
+FILESEXTRAPATHS:prepend := "${THISDIR}/connman-conf:"
+
+# Upstream connman-conf only installs configuration for qemu targets
+# but we need it in all our BSP
+do_install:append() {
+ mkdir -p ${D}${sysconfdir}/connman
+ cp ${S}/main.conf ${D}${sysconfdir}/connman/main.conf
+}
diff --git a/meta-agl-profile-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch b/meta-agl-core/recipes-connectivity/connman/connman/0001-disable-when-booting-over-nfs.patch
index f129a6580..7cc92e2c4 100644
--- a/meta-agl-profile-core/recipes-connectivity/connman/files/0001-disable-when-booting-over-nfs.patch
+++ b/meta-agl-core/recipes-connectivity/connman/connman/0001-disable-when-booting-over-nfs.patch
@@ -1,3 +1,7 @@
+Exempt when nfs is in use.
+
+Upstream-Status: Pending
+
--- connman-1.36.orig/src/connman.service.in 2019-02-18 18:02:07.034947373 -0500
+++ connman-1.36/src/connman.service.in 2019-02-18 18:07:24.689959219 -0500
@@ -7,6 +7,7 @@
diff --git a/meta-agl-core/recipes-connectivity/connman/connman_%.bbappend b/meta-agl-core/recipes-connectivity/connman/connman_%.bbappend
new file mode 100644
index 000000000..8078f3d34
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/connman/connman_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'connman_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-connectivity/connman/connman_aglcore.inc b/meta-agl-core/recipes-connectivity/connman/connman_aglcore.inc
new file mode 100644
index 000000000..e372e9186
--- /dev/null
+++ b/meta-agl-core/recipes-connectivity/connman/connman_aglcore.inc
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/connman:"
+
+SRC_URI += "file://0001-disable-when-booting-over-nfs.patch"
diff --git a/meta-agl-profile-core/recipes-connectivity/connman/.appends.core b/meta-agl-core/recipes-core/systemd/.appends.core
index e69de29bb..e69de29bb 100644
--- a/meta-agl-profile-core/recipes-connectivity/connman/.appends.core
+++ b/meta-agl-core/recipes-core/systemd/.appends.core
diff --git a/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can-fd.network b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can-fd.network
new file mode 100644
index 000000000..86042bd90
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can-fd.network
@@ -0,0 +1,12 @@
+[Match]
+Name=can*
+
+[CAN]
+BitRate=500K
+SamplePoint=75%
+DataBitRate=4M
+DataSamplePoint=80%
+FDMode=yes
+
+[Link]
+ActivationPolicy=up
diff --git a/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can.link b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can.link
new file mode 100644
index 000000000..61fb4d575
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can.link
@@ -0,0 +1,11 @@
+[Match]
+Type=can
+OriginalName=can*
+
+[Link]
+TransmitQueueLength=1000
+# Need to duplicate default configuration here, since only first
+# matching .link is applied
+NamePolicy=keep kernel database onboard slot path
+AlternativeNamesPolicy=database onboard slot path
+MACAddressPolicy=persistent
diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/canbus-can.network b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can.network
index ae5514bca..ae5514bca 100644
--- a/meta-agl-profile-core/recipes-core/systemd/systemd/canbus-can.network
+++ b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-can.network
diff --git a/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-virtio.network b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-virtio.network
new file mode 100644
index 000000000..cc33d86d6
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus/canbus-virtio.network
@@ -0,0 +1,5 @@
+[Match]
+Name=can*
+
+[CAN]
+RestartSec=0.1
diff --git a/meta-agl-core/recipes-core/systemd/systemd-conf-canbus_1.0.bb b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus_1.0.bb
new file mode 100644
index 000000000..a23cd839a
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd-conf-canbus_1.0.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Systemd canbus configuration"
+DESCRIPTION = "Systemd may require slightly different configuration for \
+different machines. This injects configuration for the CAN bus."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+PE = "1"
+
+SRC_URI = "\
+ file://canbus-can.network \
+ file://canbus-can-fd.network \
+ file://canbus-virtio.network \
+ file://canbus-can.link \
+"
+
+CANBUS_NETWORK_CONFIG ??= "canbus-can.network"
+CANBUS_NETWORK_CONFIG:virtio-all ?= "canbus-virtio.network"
+
+do_install() {
+ # Install CAN bus network configuration
+ install -d ${D}${nonarch_base_libdir}/systemd/network/
+ install -m 0644 ${WORKDIR}/${CANBUS_NETWORK_CONFIG} ${D}${nonarch_base_libdir}/systemd/network/60-canbus-can.network
+
+ # Install link configuration to bump queue size on physical CAN bus devices
+ install -m 0644 ${WORKDIR}/canbus-can.link ${D}${nonarch_base_libdir}/systemd/network/60-canbus-can.link
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FILES:${PN} = " \
+ ${nonarch_base_libdir}/systemd/network/ \
+"
diff --git a/meta-agl-core/recipes-core/systemd/systemd-conf_%.bbappend b/meta-agl-core/recipes-core/systemd/systemd-conf_%.bbappend
new file mode 100644
index 000000000..980783236
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd-conf_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)}
diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd-conf_%.bbappend b/meta-agl-core/recipes-core/systemd/systemd-conf_aglcore.inc
index 6661eab6c..a539d1826 100644
--- a/meta-agl-profile-core/recipes-core/systemd/systemd-conf_%.bbappend
+++ b/meta-agl-core/recipes-core/systemd/systemd-conf_aglcore.inc
@@ -1,4 +1,4 @@
-do_install_append() {
+do_install:append() {
# Remove ethernet script deployed by upstream unconditionally (SPEC-3221)
rm -rf ${D}${systemd_unitdir}/network/80-wired.network || true
} \ No newline at end of file
diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/e2fsck.conf b/meta-agl-core/recipes-core/systemd/systemd/e2fsck.conf
index b774f9ebf..b774f9ebf 100644
--- a/meta-agl-profile-core/recipes-core/systemd/systemd/e2fsck.conf
+++ b/meta-agl-core/recipes-core/systemd/systemd/e2fsck.conf
diff --git a/meta-agl-core/recipes-core/systemd/systemd/wait-disable.conf b/meta-agl-core/recipes-core/systemd/systemd/wait-disable.conf
new file mode 100644
index 000000000..e5d4f4b28
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd/wait-disable.conf
@@ -0,0 +1,3 @@
+[Service]
+ExecStart=
+ExecStart=/usr/bin/true
diff --git a/meta-agl-core/recipes-core/systemd/systemd/wired.network b/meta-agl-core/recipes-core/systemd/systemd/wired.network
new file mode 100644
index 000000000..425610a3f
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd/wired.network
@@ -0,0 +1,8 @@
+[Match]
+Name=eth* en*
+KernelCommandLine=!nbdroot
+KernelCommandLine=!nfsroot
+KernelCommandLine=!ip
+
+[Network]
+DHCP=yes
diff --git a/meta-agl-core/recipes-core/systemd/systemd_%.bbappend b/meta-agl-core/recipes-core/systemd/systemd_%.bbappend
new file mode 100644
index 000000000..980783236
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc b/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc
new file mode 100644
index 000000000..9681329be
--- /dev/null
+++ b/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc
@@ -0,0 +1,36 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/systemd:"
+
+SRC_URI += "\
+ file://e2fsck.conf \
+ file://wait-disable.conf \
+ file://wired.network \
+"
+
+# Enable networkd/resolved support if using systemd for network management
+PACKAGECONFIG:append = " \
+ ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','networkd resolved','',d)} \
+ iptc \
+"
+
+# SPEC-737: connmand also has a NTP client which races with systemd-timesyncd
+PACKAGECONFIG:remove = "timesyncd"
+
+# Enable systemd-coredump when agl-devel is set on
+PACKAGECONFIG:append:agl-devel = " coredump"
+
+do_install:append() {
+ # Install /etc/e2fsck.conf to avoid boot stuck by wrong clock time
+ install -m 644 -p -D ${WORKDIR}/e2fsck.conf ${D}${sysconfdir}/e2fsck.conf
+
+ if [ "${VIRTUAL-RUNTIME_net_manager}" = "systemd" ]; then
+ # Install DHCP configuration for Ethernet adapters
+ install -m 644 ${WORKDIR}/wired.network ${D}${sysconfdir}/systemd/network
+ elif [ "${VIRTUAL-RUNTIME_net_manager}" = "connman" ]; then
+ # Disable systemd-networkd-wait-online by default
+ install -d ${D}${systemd_system_unitdir}/systemd-networkd-wait-online.service.d
+ install -m 0644 ${WORKDIR}/wait-disable.conf ${D}${systemd_system_unitdir}/systemd-networkd-wait-online.service.d/
+ fi
+}
+
+FILES:${PN} += "${sysconfdir}/e2fsck.conf "
+
diff --git a/meta-agl-core/recipes-devtools/cmake/cmake_%.bbappend b/meta-agl-core/recipes-devtools/cmake/cmake_%.bbappend
new file mode 100644
index 000000000..980783236
--- /dev/null
+++ b/meta-agl-core/recipes-devtools/cmake/cmake_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)}
diff --git a/meta-agl-profile-core/recipes-devtools/cmake/cmake_%.bbappend b/meta-agl-core/recipes-devtools/cmake/cmake_aglcore.inc
index 2de1e6836..2d50a1f24 100644
--- a/meta-agl-profile-core/recipes-devtools/cmake/cmake_%.bbappend
+++ b/meta-agl-core/recipes-devtools/cmake/cmake_aglcore.inc
@@ -1,9 +1,9 @@
-FILESEXTRAPATHS_append := ":${THISDIR}/files"
+FILESEXTRAPATHS:append := ":${THISDIR}/files"
-SRC_URI_append_class-nativesdk = " \
+SRC_URI:append:class-nativesdk = " \
file://environment.d-cmake-agl.sh \
"
-do_install_append_class-nativesdk() {
+do_install:append:class-nativesdk() {
install -m 644 ${WORKDIR}/environment.d-cmake-agl.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake-agl.sh
}
diff --git a/meta-agl-profile-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh b/meta-agl-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh
index 64b6cf3c6..64b6cf3c6 100644
--- a/meta-agl-profile-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh
+++ b/meta-agl-core/recipes-devtools/cmake/files/environment.d-cmake-agl.sh
diff --git a/meta-agl-profile-core/recipes-core/dbus/.appends.core b/meta-agl-core/recipes-devtools/gdb/.appends.core
index e69de29bb..e69de29bb 100644
--- a/meta-agl-profile-core/recipes-core/dbus/.appends.core
+++ b/meta-agl-core/recipes-devtools/gdb/.appends.core
diff --git a/meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend b/meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend
new file mode 100644
index 000000000..980783236
--- /dev/null
+++ b/meta-agl-core/recipes-devtools/gdb/gdb_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc b/meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc
new file mode 100644
index 000000000..213542ec5
--- /dev/null
+++ b/meta-agl-core/recipes-devtools/gdb/gdb_aglcore.inc
@@ -0,0 +1 @@
+PACKAGECONFIG:remove = "readline"
diff --git a/meta-agl-core/recipes-devtools/qemu/qemu_%.bbappend b/meta-agl-core/recipes-devtools/qemu/qemu_%.bbappend
new file mode 100644
index 000000000..980783236
--- /dev/null
+++ b/meta-agl-core/recipes-devtools/qemu/qemu_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-devtools/qemu/qemu_aglcore.inc b/meta-agl-core/recipes-devtools/qemu/qemu_aglcore.inc
new file mode 100644
index 000000000..77d461a7f
--- /dev/null
+++ b/meta-agl-core/recipes-devtools/qemu/qemu_aglcore.inc
@@ -0,0 +1,5 @@
+PACKAGECONFIG:append = " \
+ aio \
+ libusb \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)} \
+"
diff --git a/meta-agl-profile-core/recipes-core/psplash/.appends.core b/meta-agl-core/recipes-extended/gperf/.appends.core
index e69de29bb..e69de29bb 100644
--- a/meta-agl-profile-core/recipes-core/psplash/.appends.core
+++ b/meta-agl-core/recipes-extended/gperf/.appends.core
diff --git a/meta-agl-core/recipes-extended/gperf/gperf_%.bbappend b/meta-agl-core/recipes-extended/gperf/gperf_%.bbappend
new file mode 100644
index 000000000..980783236
--- /dev/null
+++ b/meta-agl-core/recipes-extended/gperf/gperf_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_aglcore.inc', '', d)}
diff --git a/meta-agl-profile-core/recipes-extended/gperf/gperf_%.bbappend b/meta-agl-core/recipes-extended/gperf/gperf_aglcore.inc
index 2a590838b..2a590838b 100644
--- a/meta-agl-profile-core/recipes-extended/gperf/gperf_%.bbappend
+++ b/meta-agl-core/recipes-extended/gperf/gperf_aglcore.inc
diff --git a/meta-agl-core/recipes-graphics/libsdl2/libsdl2_%.bbappend b/meta-agl-core/recipes-graphics/libsdl2/libsdl2_%.bbappend
new file mode 100644
index 000000000..48e50788e
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/libsdl2/libsdl2_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'libsdl2_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-graphics/libsdl2/libsdl2_aglcore.inc b/meta-agl-core/recipes-graphics/libsdl2/libsdl2_aglcore.inc
new file mode 100644
index 000000000..7652e1843
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/libsdl2/libsdl2_aglcore.inc
@@ -0,0 +1,3 @@
+# Make sure opengl is disabled, as using wayland implies gles2 in the
+# libsdl2 PACKAGECONFIG definitions.
+PACKAGECONFIG:remove = "opengl"
diff --git a/meta-agl-core/recipes-graphics/rba/librba_1.0.bb b/meta-agl-core/recipes-graphics/rba/librba_1.0.bb
new file mode 100644
index 000000000..e8b1e0dbc
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/rba/librba_1.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "RBA"
+DESCRIPTION = "Rule Based Arbitrator decides which of the content to display \
+when a large number of contents to be displayed on the cockpit display device \
+(CID, meter, HUD, etc.) occur simultaneously under a certain rule (arbitration)"
+
+SECTION = "libs"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=13afa517927767fe9b7a65818a02bd8f"
+
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/staging/rba;protocol=https;branch=master"
+SRCREV = "87c0278dfbcf0953330330c28a8d48636dd4df7e"
+
+S = "${WORKDIR}/git"
+
+inherit pkgconfig cmake
+
+FILES:${PN} = "${libdir}/"
+FILES:${PN}-dev = "${libdir}/pkgconfig/librba.pc \
+ ${includedir}/ \
+ "
+INSANE_SKIP:${PN} += "dev-so"
+INSANE_SKIP:${PN}-dev += "dev-elf"
diff --git a/meta-agl-core/recipes-graphics/rba/rba-config.bb b/meta-agl-core/recipes-graphics/rba/rba-config.bb
new file mode 100644
index 000000000..cbed9df0c
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/rba/rba-config.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Rule Based Arbitrator Model required for RBA policy compositor."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+SRC_URI = "file://RBAModel.json"
+
+S = "${WORKDIR}"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install:append() {
+ install -d ${D}/${sysconfdir}/rba
+ install -m 0644 ${WORKDIR}/RBAModel.json ${D}/${sysconfdir}/rba
+}
diff --git a/meta-agl-core/recipes-graphics/rba/rba-config/RBAModel.json b/meta-agl-core/recipes-graphics/rba/rba-config/RBAModel.json
new file mode 100644
index 000000000..753a9ed86
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/rba/rba-config/RBAModel.json
@@ -0,0 +1,320 @@
+{
+ "root":{
+ "model":"",
+ "template":"02.00.00",
+ "areas":[
+ {
+ "name":"ApplicationArea",
+ "visibility":-1,
+ "arbitrationPolicy":"DEFAULT",
+ "zorder":1,
+ "size":[
+ {
+ "name":"ApplicationSize",
+ "width":1080,
+ "height":1488
+ }
+ ]
+ },
+ {
+ "name":"ShortcutIconArea",
+ "visibility":-1,
+ "arbitrationPolicy":"DEFAULT",
+ "zorder":0,
+ "size":[
+ {
+ "name":"ShortcutIconSize",
+ "width":1080,
+ "height":216
+ }
+ ]
+ }
+ ],
+ "viewcontents":[
+ {
+ "name":"launcher",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"dashboard",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"hvac",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"mediaplayer",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"messaging",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"mixer",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"navigation",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"phone",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"poi",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"radio",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"settings",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"taskmanager",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ },
+ {
+ "name":"unknown_app",
+ "loserType":"NEVER_GIVEUP",
+ "size":[
+ {
+ "name":"ApplicationSize:Area",
+ "width":1080,
+ "height":1488
+ }
+ ],
+ "states":[
+ {
+ "name":"NORMAL",
+ "priority":10
+ }
+ ],
+ "allocatable":[
+ "ApplicationArea:Area"
+ ]
+ }
+ ],
+ "displays":[
+ {
+ "name":"SampleDisplay",
+ "size":{
+ "name":"FULLSCREEN",
+ "width":1080,
+ "height":1920
+ },
+ "PositionContainer":[
+ {
+ "x":0,
+ "y":0,
+ "basePoint":"LEFT_TOP",
+ "areaReference":"ShortcutIconArea"
+ },
+ {
+ "x":0,
+ "y":216,
+ "basePoint":"LEFT_TOP",
+ "areaReference":"ApplicationArea"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/meta-agl-core/recipes-graphics/wayland/Readme.weston-ini-conf b/meta-agl-core/recipes-graphics/wayland/Readme.weston-ini-conf
new file mode 100644
index 000000000..ee75c7335
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/Readme.weston-ini-conf
@@ -0,0 +1,43 @@
+##Generate a weston.ini file:
+
+To modify any of the default sections (core, shell), add a
+do_configure() function to your bbappend, using machine (e.g. h3ulcb)
+overrides (i.e. use the MACHINE name where "machine" is used below):
+
+'''
+do_configure:machine() {
+ echo repaint-window=34 >> ${WORKDIR}/core.cfg
+
+ echo transition-duration=300 >> ${WORKDIR}/ivishell.cfg
+ echo cursor-theme=default >> ${WORKDIR}/ivishell.cfg
+}
+'''
+or:
+'''
+do_configure:machine() {
+ sed -i -e 's/drm-backend/fbdev-backend/' ${WORKDIR}/core.cfg
+}
+'''
+
+To add new non-display sections, just list them in SRC_URI and WESTON_FRAGMENTS:
+'''
+FILESEXTRAPATHS:prepend:machine := "${THISDIR}/${PN}:"
+
+SRC_URI:append:machine = " file://foo.cfg"
+WESTON_FRAGMENTS:append:machine = " foo"
+
+'''
+
+To change the display, for example from the default assumption of an
+HDMI-1-A connected screen that needs to be rotated 270 degrees to one
+that is rotated 90 degrees, redefine the WESTON_DISPLAYS variable:
+
+'''
+WESTON_DISPLAYS:machine = "hdmi-a-1-90"
+'''
+
+Note that the weston-ini-conf recipe automatically generates a landscape
+orientation version of weston.ini by replacing 90/270 degree rotation
+fragments for HDMI-A-1 and the virtual output into 180 and 0 degrees,
+respectively. This landscape configuration can be used in an image by
+pulling in weston-ini-conf-landscape instead of weston-ini-conf.
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb
new file mode 100644
index 000000000..d8baf91f9
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb
@@ -0,0 +1,61 @@
+SUMMARY = "Startup systemd unit for the AGL Wayland compositor"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+inherit systemd
+
+# Reuse include file from upstream weston since we have the same requirements
+require recipes-graphics/wayland/required-distro-features.inc
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = "file://agl-compositor.service \
+ file://agl-compositor.socket \
+ file://agl-compositor-autologin \
+ file://agl-compositor.conf.in \
+"
+
+S = "${WORKDIR}"
+
+AGL_COMPOSITOR_ARGS ?= " --config ${sysconfdir}/xdg/weston/weston.ini --idle-time=0"
+AGL_COMPOSITOR_USE_PIXMAN ??= "0"
+
+AGL_COMPOSITOR_ARGS:append = " ${@bb.utils.contains("DISTRO_FEATURES", "agl-devel", " --debug", "",d)}"
+AGL_COMPOSITOR_ARGS:append = " ${@bb.utils.contains("WESTON_USE_PIXMAN", "1", " --use-pixman", "",d)}"
+
+do_install() {
+ # Install systemd service
+ install -D -p -m0644 ${WORKDIR}/agl-compositor.service ${D}${systemd_system_unitdir}/agl-compositor.service
+ install -D -p -m0644 ${WORKDIR}/agl-compositor.socket ${D}${systemd_system_unitdir}/agl-compositor.socket
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+ install -D -p -m0644 ${WORKDIR}/agl-compositor-autologin ${D}${sysconfdir}/pam.d/agl-compositor-autologin
+ fi
+
+ # Install systemd service drop-in with extra configuration
+ files=agl-compositor.conf.in
+ for f in ${files}; do
+ g=${f%.in}
+ if [ "${f}" != "${g}" ]; then
+ sed -e "s,@AGL_COMPOSITOR_ARGS@,${AGL_COMPOSITOR_ARGS},g" \
+ ${WORKDIR}/${f} > ${WORKDIR}/${g}
+ fi
+ done
+ install -d ${D}${systemd_system_unitdir}/agl-compositor.service.d
+ install -m644 ${WORKDIR}/agl-compositor.conf ${D}/${systemd_system_unitdir}/agl-compositor.service.d/agl-compositor.conf
+}
+
+FILES:${PN} += "\
+ ${systemd_system_unitdir}/agl-compositor.service \
+ ${systemd_system_unitdir}/agl-compositor.socket \
+ ${systemd_system_unitdir}/agl-compositor.service.d \
+ ${sysconfdir}/default/agl-compositor \
+ ${sysconfdir}/pam.d/ \
+ "
+
+CONFFILES:${PN} += "${sysconfdir}/default/agl-compositor"
+
+RDEPENDS:${PN} = "agl-users agl-compositor weston-ini"
+
+RCONFLICTS:${PN} = "weston-init"
+
+SYSTEMD_SERVICE:${PN} = "agl-compositor.service agl-compositor.socket"
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor-autologin b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor-autologin
new file mode 100644
index 000000000..f6e6d106d
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor-autologin
@@ -0,0 +1,11 @@
+auth required pam_nologin.so
+auth required pam_unix.so try_first_pass nullok
+
+account required pam_nologin.so
+account required pam_unix.so
+
+session required pam_env.so
+session required pam_unix.so
+-session optional pam_systemd.so type=wayland class=user desktop=weston
+-session optional pam_loginuid.so
+
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in
new file mode 100644
index 000000000..2918c410c
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in
@@ -0,0 +1,3 @@
+[Service]
+ExecStart=
+ExecStart=/usr/bin/agl-compositor @AGL_COMPOSITOR_ARGS@
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.service b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.service
new file mode 100644
index 000000000..4ee14de27
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.service
@@ -0,0 +1,72 @@
+# This is a system unit for launching AGL compositor with auto-login as the
+# user configured here.
+#
+# AGL compositor and Weston must be built with systemd support, and your
+# weston.ini must load the plugin systemd-notify.so.
+#
+# Attention:
+# If you will add new tty dependency setting, you need to update
+# agl-compositor-guest.conf.
+[Unit]
+Description=AGL compositor
+Documentation=man:weston(1) man:weston.ini(5)
+Documentation=http://wayland.freedesktop.org/
+
+# Make sure we are started after logins are permitted.
+Requires=systemd-user-sessions.service
+After=systemd-user-sessions.service
+
+# D-Bus is necessary for contacting logind. Logind is required.
+Wants=dbus.socket
+After=dbus.socket
+
+# Ensure the socket is present
+Requires=agl-compositor.socket
+
+# Since we are part of the graphical session, make sure we are started before
+# it is complete.
+Before=graphical.target
+
+# Prevent starting on systems without virtual consoles, Weston requires one
+# for now.
+ConditionPathExists=/dev/tty0
+
+[Service]
+# Requires systemd-notify.so Weston plugin.
+Type=notify
+EnvironmentFile=-/etc/default/agl-compositor
+ExecStart=/usr/bin/agl-compositor --modules=systemd-notify.so
+
+# Watchdog setup
+TimeoutStartSec=60
+WatchdogSec=20
+
+# The user to run as.
+User=agl-driver
+Group=agl-driver
+
+# Make sure the working directory is the users home directory
+WorkingDirectory=/home/agl-driver
+
+# Set up a full user session for the user
+PAMName=agl-compositor-autologin
+
+# A virtual terminal is needed.
+TTYPath=/dev/tty7
+TTYReset=yes
+TTYVHangup=yes
+TTYVTDisallocate=yes
+
+# Fail to start if not controlling the tty.
+StandardInput=tty-fail
+StandardOutput=journal
+StandardError=journal
+
+# Log this user with utmp, letting it show up with commands 'w' and 'who'.
+UtmpIdentifier=tty7
+UtmpMode=user
+
+[Install]
+# Note: If you only want weston to start on-demand, remove this line with a
+# service drop file
+WantedBy=graphical.target
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.socket b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.socket
new file mode 100644
index 000000000..ef9769ff7
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.socket
@@ -0,0 +1,10 @@
+#
+# Weston must be built with systemd support, and your weston.ini must load
+# the plugin systemd-notify.so.
+
+[Unit]
+Description=agl-compositor, a Wayland compositor, as a systemd user service
+Documentation=https://docs.automotivelinux.org/en/master/#5_Component_Documentation/1_agl-compositor/
+
+[Socket]
+ListenStream=%t/wayland-0
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb
new file mode 100644
index 000000000..3596cbb06
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb
@@ -0,0 +1,57 @@
+SUMMARY = "Reference Wayland compositor for AGL"
+DESCRIPTION = "The AGL compositor is a reference Wayland server for Automotive \
+Grade Linux, using libweston as a base to provide a graphical environment for \
+the automotive environment."
+
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/q/project:src%252Fagl-compositor"
+SECTION = "x11"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fac6abe0003c4d142ff8fa1f18316df0"
+
+DEPENDS = "wayland wayland-protocols wayland-native weston"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/agl-compositor.git;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "d5ecd12729734b788546e0d80edc492454bec251"
+AGL_BRANCH:aglnext = "next"
+SRCREV:aglnext = "${AUTOREV}"
+
+AGL_COMPOSITOR_VERSION = "0.0.24"
+
+PV = "${AGL_COMPOSITOR_VERSION}+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[policy-rba] = "-Dpolicy-default=rba,,librba,librba rba-config"
+PACKAGECONFIG[policy-deny-all] = "-Dpolicy-default=deny-all,,"
+PACKAGECONFIG[grpc-proxy] = "-Dgrpc-proxy=true,-Dgrpc-proxy=false,grpc grpc-native,grpc agl-shell-grpc-server"
+
+inherit meson pkgconfig python3native
+
+# Reuse include file from upstream weston since we have the same requirements
+require recipes-graphics/wayland/required-distro-features.inc
+
+PACKAGES =+ "agl-shell-grpc-server"
+
+LDFLAGS:append:riscv64 = " -Wl,--no-as-needed -latomic -Wl,--as-needed"
+
+FILES:${PN} = " \
+ ${bindir}/agl-compositor \
+ ${bindir}/agl-screenshooter \
+ ${libdir}/agl-compositor/libexec_compositor.so.0 \
+ ${libdir}/agl-compositor/libexec_compositor.so.${AGL_COMPOSITOR_VERSION} \
+"
+
+FILES:agl-shell-grpc-server = " \
+ ${libdir}/agl-compositor/agl-shell-grpc-server \
+"
+
+RDEPENDS:${PN} += " \
+ agl-compositor-init \
+ xkeyboard-config \
+"
+
+FILES:${PN}-dev += " \
+ ${datadir}/agl-compositor/protocols/agl-shell.xml \
+ ${datadir}/agl-compositor/protocols/agl-shell-desktop.xml \
+ ${libdir}/agl-compositor/libexec_compositor.so \
+"
diff --git a/meta-agl-core/recipes-graphics/wayland/native-shell-client_git.bb b/meta-agl-core/recipes-graphics/wayland/native-shell-client_git.bb
new file mode 100644
index 000000000..c0c31e029
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/native-shell-client_git.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Minimal agl-shell Wayland protocol client"
+
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/q/project:src%252Fnative-shell-client"
+SECTION = "x11"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3b90ee643ce04400848a8f0deb492a4a"
+
+DEPENDS = "wayland wayland-protocols wayland-native agl-compositor"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/native-shell-client.git;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "099e06f532eff7c56bf00eb58420f14c95a8e554"
+
+PV = "0.0.1+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bb b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bb
new file mode 100644
index 000000000..0611ec5b4
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bb
@@ -0,0 +1,156 @@
+SUMMARY = "Configuration file for the Weston and AGL Wayland compositors"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = " \
+ file://core.cfg \
+ file://shell.cfg \
+ file://hdmi-a-1-0.cfg \
+ file://hdmi-a-1-90.cfg \
+ file://hdmi-a-1-180.cfg \
+ file://hdmi-a-1-270.cfg \
+ file://hdmi-a-2-0.cfg \
+ file://hdmi-a-2-90.cfg \
+ file://hdmi-a-2-180.cfg \
+ file://hdmi-a-2-270.cfg \
+ file://remote-output.cfg.in \
+ file://virtual-0.cfg \
+ file://virtual-90.cfg \
+ file://virtual-180.cfg \
+ file://virtual-270.cfg \
+ file://grpc-proxy.cfg \
+"
+
+S = "${WORKDIR}"
+
+inherit update-alternatives
+
+# Default primary display/orientation fragment
+WESTON_DISPLAYS ?= "hdmi-a-1-90"
+
+# Configuration fragments to use in weston.ini.*
+# Note that some may be replaced/removed when building the landscape
+# configuration.
+WESTON_FRAGMENTS = "core shell grpc-proxy ${WESTON_DISPLAYS}"
+
+# On-target weston.ini directory
+weston_ini_dir = "${sysconfdir}/xdg/weston"
+
+# Options for the user to change in local.conf
+# e.g. REMOTING_OUTPUT_MODE = "1080x1488"
+REMOTING_OUTPUT_MODE ??= "640x720@30"
+REMOTING_OUTPUT_HOST ??= "192.168.10.3"
+REMOTING_OUTPUT_PORT ??= "5005"
+
+do_configure() {
+ sed -e "s#host=.*#host=${REMOTING_OUTPUT_HOST}#" \
+ -e "s#port=.*#port=${REMOTING_OUTPUT_PORT}#" \
+ ${WORKDIR}/remote-output.cfg.in > ${WORKDIR}/remote-output.cfg
+}
+
+do_compile() {
+ # Put all of our cfg files together for a default portrait
+ # orientation configuration
+ rm -f ${WORKDIR}/weston.ini.default
+ for F in ${WESTON_FRAGMENTS}; do
+ cat ${WORKDIR}/${F}.cfg >> ${WORKDIR}/weston.ini.default
+ echo >> ${WORKDIR}/weston.ini.default
+ done
+ sed -i -e '$ d' ${WORKDIR}/weston.ini.default
+
+ cat ${WORKDIR}/weston.ini.default > ${WORKDIR}/weston.ini.default-no-activate
+
+ # Do it again, but filter fragments to configure for landscape
+ # and a corresponding landscape-inverted that is 180 degrees
+ # rotated.
+ rm -f ${WORKDIR}/weston.ini.landscape
+ rm -f ${WORKDIR}/weston.ini.landscape-inverted
+ for F in ${WESTON_FRAGMENTS}; do
+ INVF=$F
+ if echo $F | grep '^hdmi-a-1-\(90\|270\)$'; then
+ F="hdmi-a-1-0"
+ INVF="hdmi-a-1-180"
+ elif echo $F | grep '^hdmi-a-2-\(90\|270\)$'; then
+ F="hdmi-a-2-0"
+ INVF="hdmi-a-2-180"
+ elif echo $F | grep '^virtual-90$'; then
+ F="virtual-0"
+ INVF="virtual-180"
+ fi
+ cat ${WORKDIR}/${F}.cfg >> ${WORKDIR}/weston.ini.landscape
+ cat ${WORKDIR}/${INVF}.cfg >> ${WORKDIR}/weston.ini.landscape-inverted
+ echo >> ${WORKDIR}/weston.ini.landscape
+ echo >> ${WORKDIR}/weston.ini.landscape-inverted
+ done
+ sed -i -e '$ d' ${WORKDIR}/weston.ini.landscape
+ sed -i -e '$ d' ${WORKDIR}/weston.ini.landscape-inverted
+
+ cat ${WORKDIR}/weston.ini.landscape > ${WORKDIR}/weston.ini.landscape-no-activate
+}
+
+do_install:append() {
+ install -d ${D}${weston_ini_dir}
+ install -m 0644 ${WORKDIR}/weston.ini.default ${D}${weston_ini_dir}/
+ install -m 0644 ${WORKDIR}/weston.ini.default-no-activate ${D}${weston_ini_dir}/
+ install -m 0644 ${WORKDIR}/weston.ini.landscape-no-activate ${D}${weston_ini_dir}/
+ install -m 0644 ${WORKDIR}/weston.ini.landscape ${D}${weston_ini_dir}/
+ install -m 0644 ${WORKDIR}/weston.ini.landscape-inverted ${D}${weston_ini_dir}/
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+# Use the alternative mechanism to handle multiple packages providing
+# weston.ini. This seems simpler than other possible approaches.
+# Note that for now the generated packages are being marked as
+# incompatible with each other for simplicity, that can be changed if
+# a usecase where switching between alternatives at runtime is desirable
+# appears.
+
+ALTERNATIVE_LINK_NAME[weston.ini] = "${weston_ini_dir}/weston.ini"
+
+RPROVIDES:${PN} = "weston-ini"
+RCONFLICTS:${PN} = "${PN}-landscape"
+ALTERNATIVE:${PN} = "weston.ini"
+ALTERNATIVE_TARGET_${PN} = "${weston_ini_dir}/weston.ini.default"
+
+PACKAGE_BEFORE_PN += "${PN}-landscape"
+
+FILES:${PN}-landscape = "${weston_ini_dir}/weston.ini.landscape"
+
+RPROVIDES:${PN}-landscape = "weston-ini"
+RCONFLICTS:${PN}-landscape = "${PN}"
+ALTERNATIVE:${PN}-landscape = "weston.ini"
+ALTERNATIVE_TARGET_${PN}-landscape = "${weston_ini_dir}/weston.ini.landscape"
+
+PACKAGE_BEFORE_PN += "${PN}-landscape-inverted"
+
+FILES:${PN}-landscape-inverted = "${weston_ini_dir}/weston.ini.landscape-inverted"
+
+RPROVIDES:${PN}-landscape-inverted = "weston-ini"
+RCONFLICTS:${PN}-landscape-inverted = "${PN}"
+ALTERNATIVE:${PN}-landscape-inverted = "weston.ini"
+ALTERNATIVE_TARGET_${PN}-landscape-inverted = "${weston_ini_dir}/weston.ini.landscape-inverted"
+
+# no activation by default
+PACKAGE_BEFORE_PN += "${PN}-no-activate"
+
+FILES:${PN}-no-activate = "${weston_ini_dir}/weston.ini.default-no-activate"
+
+RPROVIDES:${PN}-no-activate = "weston-ini"
+RCONFLICTS:${PN}-no-activate = "${PN}"
+ALTERNATIVE:${PN}-no-activate = "weston.ini"
+ALTERNATIVE_TARGET_${PN}-no-activate = "${weston_ini_dir}/weston.ini.default-no-activate"
+
+# landscape, no activation by default
+PACKAGE_BEFORE_PN += "${PN}-landscape-no-activate"
+
+FILES:${PN}-landscape-no-activate = "${weston_ini_dir}/weston.ini.landscape-no-activate"
+
+RPROVIDES:${PN}-landscape-no-activate = "weston-ini"
+RCONFLICTS:${PN}-landscape-no-activate = "${PN}"
+ALTERNATIVE:${PN}-landscape-no-activate = "weston.ini"
+ALTERNATIVE_TARGET_${PN}-landscape-no-activate = "${weston_ini_dir}/weston.ini.landscape-no-activate"
+
+# This is a settings-only package, we do not need a development package
+# (and its fixed dependency to ${PN} being installed)
+PACKAGES:remove = "${PN}-dev ${PN}-staticdev"
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bbappend
new file mode 100644
index 000000000..746bde339
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf.bbappend
@@ -0,0 +1,12 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+WESTON_DISPLAYS:append = "${@bb.utils.contains("DISTRO_FEATURES", "weston-remoting", " remote-output", "", d)}"
+
+# For virtual machines and intel-corei7-64 we want to support both the HDMI-A-1
+# and Virtual-1 outputs. This allows us to run virtual images on real hardware
+# and vice versa.
+WESTON_DISPLAYS:append:qemuall = " virtual-90"
+WESTON_DISPLAYS:append:intel-corei7-64 = " virtual-90"
+WESTON_DISPLAYS:append:virtio-aarch64 = " virtual-90"
diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/core.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/core.cfg
index 90774ed79..28f90752d 100644
--- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/core.cfg
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/core.cfg
@@ -1,4 +1,6 @@
[core]
backend=drm-backend.so
require-input=false
+idle-time=0
modules=systemd-notify.so
+activate-by-default=false
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/grpc-proxy.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/grpc-proxy.cfg
new file mode 100644
index 000000000..14805b969
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/grpc-proxy.cfg
@@ -0,0 +1,4 @@
+
+[shell-client-ext]
+command=/usr/lib/agl-compositor/agl-shell-grpc-server
+
diff --git a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-0.cfg
index 59e2c2db8..f82570790 100644
--- a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-0.cfg
@@ -1,4 +1,3 @@
# A display is connected to HDMI-A-1
[output]
name=HDMI-A-1
-transform=0
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg
new file mode 100644
index 000000000..b6f4329ef
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg
@@ -0,0 +1,4 @@
+# A display is connected to HDMI-A-1
+[output]
+name=HDMI-A-1
+transform=rotate-180
diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg
index dffc2b6dd..187f2c7bd 100644
--- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270.cfg
@@ -3,4 +3,4 @@
# of the GeChic display or the Dell display.
[output]
name=HDMI-A-1
-transform=270
+transform=rotate-270
diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg
index 88a692a1b..5ee9c1904 100644
--- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-90.cfg
@@ -3,4 +3,4 @@
# display used in some instances.
[output]
name=HDMI-A-1
-transform=90
+transform=rotate-90
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-0.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-0.cfg
new file mode 100644
index 000000000..4d5d51c03
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-0.cfg
@@ -0,0 +1,5 @@
+# A display is connected to HDMI-A-1 and needs to be rotated 90 degrees
+# to have a proper orientation of the homescreen. For example, the 'eGalax'
+# display used in some instances.
+[output]
+name=HDMI-A-2
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-180.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-180.cfg
new file mode 100644
index 000000000..ffdc5fe60
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-180.cfg
@@ -0,0 +1,6 @@
+# A display is connected to HDMI-A-1 and needs to be rotated 90 degrees
+# to have a proper orientation of the homescreen. For example, the 'eGalax'
+# display used in some instances.
+[output]
+name=HDMI-A-2
+transform=rotate-180
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-270.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-270.cfg
new file mode 100644
index 000000000..76fc77acd
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-270.cfg
@@ -0,0 +1,6 @@
+# A display is connected to HDMI-A-1 and needs to be rotated 90 degrees
+# to have a proper orientation of the homescreen. For example, the 'eGalax'
+# display used in some instances.
+[output]
+name=HDMI-A-2
+transform=rotate-270
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-90.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-90.cfg
new file mode 100644
index 000000000..9172a1c6a
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/hdmi-a-2-90.cfg
@@ -0,0 +1,6 @@
+# A display is connected to HDMI-A-1 and needs to be rotated 90 degrees
+# to have a proper orientation of the homescreen. For example, the 'eGalax'
+# display used in some instances.
+[output]
+name=HDMI-A-2
+transform=rotate-90
diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg.in
index f69a2e096..940cbdd0c 100644
--- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/remote-output.cfg.in
@@ -1,5 +1,5 @@
[remote-output]
name=remote-1
mode=640x720@30
-host=192.168.20.99
+host=192.168.10.3
port=5005
diff --git a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/shell.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/shell.cfg
index 975e539e6..8d16ba5d7 100644
--- a/meta-agl-bsp/recipes-graphics/wayland/weston-ini-conf/shell.cfg
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/shell.cfg
@@ -1,3 +1,3 @@
[shell]
-locking=true
+locking=false
panel-position=none
diff --git a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-0.cfg
index d69253639..d69253639 100644
--- a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-0.cfg
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-180.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-180.cfg
new file mode 100644
index 000000000..0363b6339
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-180.cfg
@@ -0,0 +1,4 @@
+[output]
+name=Virtual-1
+mode=1920x1080
+transform=rotate-180
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-270.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-270.cfg
new file mode 100644
index 000000000..c3f72f495
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-270.cfg
@@ -0,0 +1,4 @@
+[output]
+name=Virtual-1
+mode=1920x1080
+transform=rotate-270
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-90.cfg b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-90.cfg
new file mode 100644
index 000000000..96d9c3a04
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-ini-conf/virtual-90.cfg
@@ -0,0 +1,4 @@
+[output]
+name=Virtual-1
+mode=1920x1080
+transform=rotate-90
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init.bbappend b/meta-agl-core/recipes-graphics/wayland/weston-init.bbappend
new file mode 100644
index 000000000..c09d7ccd3
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-init.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'weston-init_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc b/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc
new file mode 100644
index 000000000..896f1eafb
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc
@@ -0,0 +1,8 @@
+SYSTEMD_AUTO_ENABLE = "enable"
+
+do_install:append() {
+ # Remove upstream weston.ini to avoid conflict with weston-ini-conf package
+ rm -f ${D}${sysconfdir}/xdg/weston/weston.ini
+}
+
+RDEPENDS:${PN} += "weston-ini"
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-make-sure-all-buffers-are-released-when-.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-make-sure-all-buffers-are-released-when-.patch
new file mode 100644
index 000000000..fc2f35bd6
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-make-sure-all-buffers-are-released-when-.patch
@@ -0,0 +1,71 @@
+From 6d9e9dfa0479abc0ed7921a4ebf42228c0da7533 Mon Sep 17 00:00:00 2001
+From: Michael Olbrich <m.olbrich@pengutronix.de>
+Date: Wed, 22 Jun 2022 08:58:21 +0200
+Subject: [PATCH] backend-drm: make sure all buffers are released when an
+ output is removed
+
+When an output is destroyed then the output state is freed immediately. In this
+case, the plane state is only partially destroyed because it is the currently
+active state. This includes the buffer reference.
+
+Without the output, the plane will not be updated any more until it is used by a
+different output (if possible) or the output returns and the plane is used
+again.
+As a result, the buffer reference is kept for a long time. This will cause some
+applications to stall because weston now keeps two buffers (the one here and
+another one for a different output where the application is now displayed).
+
+To avoid this, do a synchronous commit that disables the output. The output
+needs to be disabled anyways and this way the current state contains no
+buffers that would remain.
+
+`device->state_invalid = true` in drm_output_detach_crtc() is no longer
+needed, because drm_output_detach_crtc() is called only when initialization
+failed and the crtc was not yet used or in drm_output_deinit() when the
+crtc was already disabled with the new synchronous commit.
+
+Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
+(cherry picked from commit f5a4fb5abcb8aeb6b078b6235834cc4ab6176c26)
+
+Upstream-Status: Pending
+
+---
+ libweston/backend-drm/drm.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c
+index 42787702..8425b0e9 100644
+--- a/libweston/backend-drm/drm.c
++++ b/libweston/backend-drm/drm.c
+@@ -1769,14 +1769,11 @@ drm_output_attach_crtc(struct drm_output *output)
+ static void
+ drm_output_detach_crtc(struct drm_output *output)
+ {
+- struct drm_backend *b = output->backend;
+ struct drm_crtc *crtc = output->crtc;
+
+ crtc->output = NULL;
+ output->crtc = NULL;
+
+- /* Force resetting unused CRTCs */
+- b->state_invalid = true;
+ }
+
+ static int
+@@ -1839,6 +1836,13 @@ drm_output_deinit(struct weston_output *base)
+ {
+ struct drm_output *output = to_drm_output(base);
+ struct drm_backend *b = to_drm_backend(base->compositor);
++ struct drm_pending_state *pending;
++
++ if (!b->shutting_down) {
++ pending = drm_pending_state_alloc(b);
++ drm_output_get_disable_state(pending, output);
++ drm_pending_state_apply_sync(pending);
++ }
+
+ if (b->use_pixman)
+ drm_output_fini_pixman(output);
+--
+2.39.2
+
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Send-name-description-update-wl_output-to-.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Send-name-description-update-wl_output-to-.patch
new file mode 100644
index 000000000..4e0e2c587
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Send-name-description-update-wl_output-to-.patch
@@ -0,0 +1,117 @@
+From 5361d157ff6b11d5cb7a9f989abe5f376c9e2efa Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Wed, 24 Aug 2022 11:43:06 +0300
+Subject: [PATCH] libweston: Send name,description, update wl_output to ver 4
+
+These have been in wayland a while back with version 1.20.0.
+
+We also need to update the test client helper with this bump, as
+those bind to version 4.
+
+Upstream-Status: Pending
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ libweston/compositor.c | 14 +++++++++++++-
+ tests/weston-test-client-helper.c | 18 ++++++++++++++++++
+ tests/weston-test-client-helper.h | 2 ++
+ 3 files changed, 33 insertions(+), 1 deletion(-)
+
+diff --git a/libweston/compositor.c b/libweston/compositor.c
+index 1670c50..af7c71e 100644
+--- a/libweston/compositor.c
++++ b/libweston/compositor.c
+@@ -184,6 +184,12 @@ weston_mode_switch_send_events(struct weston_head *head,
+ if (version >= WL_OUTPUT_SCALE_SINCE_VERSION && scale_changed)
+ wl_output_send_scale(resource, output->current_scale);
+
++ if (version >= WL_OUTPUT_NAME_SINCE_VERSION)
++ wl_output_send_name(resource, head->name);
++
++ if (version >= WL_OUTPUT_DESCRIPTION_SINCE_VERSION)
++ wl_output_send_description(resource, head->model);
++
+ if (version >= WL_OUTPUT_DONE_SINCE_VERSION)
+ wl_output_send_done(resource);
+ }
+@@ -5198,6 +5204,12 @@ bind_output(struct wl_client *client,
+ mode->refresh);
+ }
+
++ if (version >= WL_OUTPUT_NAME_SINCE_VERSION)
++ wl_output_send_name(resource, head->name);
++
++ if (version >= WL_OUTPUT_DESCRIPTION_SINCE_VERSION)
++ wl_output_send_description(resource, head->model);
++
+ if (version >= WL_OUTPUT_DONE_SINCE_VERSION)
+ wl_output_send_done(resource);
+ }
+@@ -5206,7 +5218,7 @@ static void
+ weston_head_add_global(struct weston_head *head)
+ {
+ head->global = wl_global_create(head->compositor->wl_display,
+- &wl_output_interface, 3,
++ &wl_output_interface, 4,
+ head, bind_output);
+ }
+
+diff --git a/tests/weston-test-client-helper.c b/tests/weston-test-client-helper.c
+index 01c4b80..8369c40 100644
+--- a/tests/weston-test-client-helper.c
++++ b/tests/weston-test-client-helper.c
+@@ -715,6 +715,20 @@ output_handle_scale(void *data,
+ output->scale = scale;
+ }
+
++static void
++output_handle_name(void *data, struct wl_output *wl_output, const char *name)
++{
++ struct output *output = data;
++ output->name = strdup(name);
++}
++
++static void
++output_handle_description(void *data, struct wl_output *wl_output, const char *desc)
++{
++ struct output *output = data;
++ output->name = strdup(desc);
++}
++
+ static void
+ output_handle_done(void *data,
+ struct wl_output *wl_output)
+@@ -729,6 +743,8 @@ static const struct wl_output_listener output_listener = {
+ output_handle_mode,
+ output_handle_done,
+ output_handle_scale,
++ output_handle_name,
++ output_handle_description,
+ };
+
+ static void
+@@ -737,6 +753,8 @@ output_destroy(struct output *output)
+ assert(wl_proxy_get_version((struct wl_proxy *)output->wl_output) >= 3);
+ wl_output_release(output->wl_output);
+ wl_list_remove(&output->link);
++ free(output->name);
++ free(output->desc);
+ free(output);
+ }
+
+diff --git a/tests/weston-test-client-helper.h b/tests/weston-test-client-helper.h
+index 8e1505d..9e05009 100644
+--- a/tests/weston-test-client-helper.h
++++ b/tests/weston-test-client-helper.h
+@@ -163,6 +163,8 @@ struct output {
+ int height;
+ int scale;
+ int initialized;
++ char *name;
++ char *desc;
+ };
+
+ struct buffer {
+--
+2.35.1
+
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch
new file mode 100644
index 000000000..02349c098
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch
@@ -0,0 +1,171 @@
+From 6ab4713d3eba589aa1f39eee2b48c81906d7ba87 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Tue, 16 Aug 2022 13:34:19 +0300
+Subject: [PATCH] libweston/desktop/xdg-shell: Add tiled orientation states
+
+With the help of a newly introduced function, weston_desktop_surface_set_orientation(),
+this patch adds missing tiled states from the xdg-shell protocol.
+The orientation state is passed on as a bitmask enumeration flag, which the
+shell can set, allowing multiple tiling states at once.
+
+These new states are incorporated the same way as the others, retaining
+the set state, but also avoiding sending new configure events if nothing
+changed since previously acked data.
+
+Upstream-Status: Pending
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+(cherry-picked from 37a3025d893def991dec59587d17672aa3bf967a)
+
+Note that this was actually ported because libweston-desktop is not
+embedded into libweston and the structure changed in upstream.
+---
+ include/libweston-desktop/libweston-desktop.h | 11 ++++++
+ libweston-desktop/internal.h | 2 +
+ libweston-desktop/surface.c | 10 +++++
+ libweston-desktop/xdg-shell.c | 38 +++++++++++++++++++
+ 4 files changed, 61 insertions(+)
+
+diff --git a/include/libweston-desktop/libweston-desktop.h b/include/libweston-desktop/libweston-desktop.h
+index 3e7ac73..c296d16 100644
+--- a/include/libweston-desktop/libweston-desktop.h
++++ b/include/libweston-desktop/libweston-desktop.h
+@@ -44,6 +44,14 @@ enum weston_desktop_surface_edge {
+ WESTON_DESKTOP_SURFACE_EDGE_BOTTOM_RIGHT = 10,
+ };
+
++enum weston_top_level_tiled_orientation {
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_NONE = 0 << 0,
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_LEFT = 1 << 1,
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_RIGHT = 1 << 2,
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_TOP = 1 << 3,
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_BOTTOM = 1 << 4,
++};
++
+ struct weston_desktop;
+ struct weston_desktop_client;
+ struct weston_desktop_surface;
+@@ -163,6 +171,9 @@ void
+ weston_desktop_surface_set_size(struct weston_desktop_surface *surface,
+ int32_t width, int32_t height);
+ void
++weston_desktop_surface_set_orientation(struct weston_desktop_surface *surface,
++ enum weston_top_level_tiled_orientation tile_orientation);
++void
+ weston_desktop_surface_close(struct weston_desktop_surface *surface);
+ void
+ weston_desktop_surface_add_metadata_listener(struct weston_desktop_surface *surface,
+diff --git a/libweston-desktop/internal.h b/libweston-desktop/internal.h
+index 2606d27..8afdede 100644
+--- a/libweston-desktop/internal.h
++++ b/libweston-desktop/internal.h
+@@ -100,6 +100,8 @@ struct weston_desktop_surface_implementation {
+ void *user_data, bool resizing);
+ void (*set_size)(struct weston_desktop_surface *surface,
+ void *user_data, int32_t width, int32_t height);
++ void (*set_orientation)(struct weston_desktop_surface *surface,
++ void *user_data, enum weston_top_level_tiled_orientation tiled_orientation);
+ void (*committed)(struct weston_desktop_surface *surface, void *user_data,
+ int32_t sx, int32_t sy);
+ void (*update_position)(struct weston_desktop_surface *surface,
+diff --git a/libweston-desktop/surface.c b/libweston-desktop/surface.c
+index 433f08a..6b3f4ae 100644
+--- a/libweston-desktop/surface.c
++++ b/libweston-desktop/surface.c
+@@ -506,6 +506,16 @@ weston_desktop_surface_set_size(struct weston_desktop_surface *surface, int32_t
+ width, height);
+ }
+
++WL_EXPORT void
++weston_desktop_surface_set_orientation(struct weston_desktop_surface *surface,
++ enum weston_top_level_tiled_orientation tile_orientation)
++{
++ if (surface->implementation->set_orientation != NULL)
++ surface->implementation->set_orientation(surface,
++ surface->implementation_data,
++ tile_orientation);
++}
++
+ WL_EXPORT void
+ weston_desktop_surface_close(struct weston_desktop_surface *surface)
+ {
+diff --git a/libweston-desktop/xdg-shell.c b/libweston-desktop/xdg-shell.c
+index ff76c39..1e49147 100644
+--- a/libweston-desktop/xdg-shell.c
++++ b/libweston-desktop/xdg-shell.c
+@@ -94,6 +94,7 @@ struct weston_desktop_xdg_toplevel_state {
+ bool fullscreen;
+ bool resizing;
+ bool activated;
++ uint32_t tiled_orientation;
+ };
+
+ struct weston_desktop_xdg_toplevel_configure {
+@@ -624,6 +625,29 @@ weston_desktop_xdg_toplevel_send_configure(struct weston_desktop_xdg_toplevel *t
+ s = wl_array_add(&states, sizeof(uint32_t));
+ *s = XDG_TOPLEVEL_STATE_ACTIVATED;
+ }
++ if (toplevel->pending.state.tiled_orientation &
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_LEFT) {
++ s = wl_array_add(&states, sizeof(uint32_t));
++ *s = XDG_TOPLEVEL_STATE_TILED_LEFT;
++ }
++
++ if (toplevel->pending.state.tiled_orientation &
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_RIGHT) {
++ s = wl_array_add(&states, sizeof(uint32_t));
++ *s = XDG_TOPLEVEL_STATE_TILED_RIGHT;
++ }
++
++ if (toplevel->pending.state.tiled_orientation &
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_TOP) {
++ s = wl_array_add(&states, sizeof(uint32_t));
++ *s = XDG_TOPLEVEL_STATE_TILED_TOP;
++ }
++
++ if (toplevel->pending.state.tiled_orientation &
++ WESTON_TOP_LEVEL_TILED_ORIENTATION_BOTTOM) {
++ s = wl_array_add(&states, sizeof(uint32_t));
++ *s = XDG_TOPLEVEL_STATE_TILED_BOTTOM;
++ }
+
+ xdg_toplevel_send_configure(toplevel->resource,
+ toplevel->pending.size.width,
+@@ -686,6 +710,16 @@ weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface *dsurface,
+ weston_desktop_xdg_surface_schedule_configure(&toplevel->base);
+ }
+
++static void
++weston_desktop_xdg_toplevel_set_orientation(struct weston_desktop_surface *surface, void *user_data,
++ enum weston_top_level_tiled_orientation tiled_orientation)
++{
++ struct weston_desktop_xdg_toplevel *toplevel = user_data;
++
++ toplevel->pending.state.tiled_orientation = tiled_orientation;
++ weston_desktop_xdg_surface_schedule_configure(&toplevel->base);
++}
++
+ static void
+ weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel *toplevel,
+ int32_t sx, int32_t sy)
+@@ -1096,6 +1130,9 @@ weston_desktop_xdg_toplevel_state_compare(struct weston_desktop_xdg_toplevel *to
+ return false;
+ if (toplevel->pending.state.resizing != configured.state.resizing)
+ return false;
++ if (toplevel->pending.state.tiled_orientation !=
++ configured.state.tiled_orientation)
++ return false;
+
+ if (toplevel->pending.size.width == configured.size.width &&
+ toplevel->pending.size.height == configured.size.height)
+@@ -1440,6 +1477,7 @@ static const struct weston_desktop_surface_implementation weston_desktop_xdg_sur
+ .set_resizing = weston_desktop_xdg_toplevel_set_resizing,
+ .set_activated = weston_desktop_xdg_toplevel_set_activated,
+ .set_size = weston_desktop_xdg_toplevel_set_size,
++ .set_orientation = weston_desktop_xdg_toplevel_set_orientation,
+
+ .get_maximized = weston_desktop_xdg_toplevel_get_maximized,
+ .get_fullscreen = weston_desktop_xdg_toplevel_get_fullscreen,
+--
+2.35.1
+
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-weston-log-Add-a-iterator-helper-for-debug.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-weston-log-Add-a-iterator-helper-for-debug.patch
new file mode 100644
index 000000000..5b7a4ca76
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-weston-log-Add-a-iterator-helper-for-debug.patch
@@ -0,0 +1,227 @@
+From d5168b8eb0d881a0a6029c0b348a739147317238 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Mon, 29 May 2023 16:30:02 +0300
+Subject: [PATCH] libweston/weston-log: Add a iterator helper for debug scope
+
+This adds three new helpers: one to iterate over all debug scopes
+created/added and other two are for simpler getters for the scope name
+and the description.
+
+Included with this change is also a simple test to retrieve them.
+
+This is an alternative to using the debug scope list advertised when
+using the weston-debug private extension. libweston users can use this
+directly to know which scopes they can subscribe to, and there's no need
+to have a client implementation for the weston-debug protocol.
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ include/libweston/weston-log.h | 10 ++++
+ libweston/weston-log.c | 63 +++++++++++++++++++++++
+ tests/iterate-debug-scopes-test.c | 84 +++++++++++++++++++++++++++++++
+ tests/meson.build | 6 +++
+ 4 files changed, 163 insertions(+)
+ create mode 100644 tests/iterate-debug-scopes-test.c
+
+diff --git a/include/libweston/weston-log.h b/include/libweston/weston-log.h
+index aeb7768b..70f41675 100644
+--- a/include/libweston/weston-log.h
++++ b/include/libweston/weston-log.h
+@@ -134,6 +134,16 @@ weston_log_subscription_iterate(struct weston_log_scope *scope,
+ void
+ weston_log_flight_recorder_display_buffer(FILE *file);
+
++const char *
++weston_log_scope_get_description(struct weston_log_scope *scope);
++
++const char *
++weston_log_scope_get_name(struct weston_log_scope *scope);
++
++struct weston_log_scope *
++weston_log_scopes_iterate(struct weston_log_context *log_ctx,
++ struct weston_log_scope *nscope);
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/libweston/weston-log.c b/libweston/weston-log.c
+index 276fde26..8b4c78a5 100644
+--- a/libweston/weston-log.c
++++ b/libweston/weston-log.c
+@@ -1009,3 +1009,66 @@ weston_log_subscription_iterate(struct weston_log_scope *scope,
+
+ return container_of(node, struct weston_log_subscription, source_link);
+ }
++
++/** Iterate over all debug scopes added to a weston_log_context
++ *
++ * @param log_ctx the log context
++ * @param nscope the iterator, use NULL to start from the head of the list
++ * @returns the next log scope from list added to weston_log_ctx
++ *
++ * Note that that \c nscope needs to be NULL-initialized before calling
++ * this function.
++ *
++ * This helper can be used by libweston users to grab all the debug scopes
++ * created. This would be an alternative to using weston-debug private
++ * extension.
++ *
++ */
++WL_EXPORT struct weston_log_scope *
++weston_log_scopes_iterate(struct weston_log_context *log_ctx,
++ struct weston_log_scope *nscope)
++{
++ struct wl_list *list;
++ struct wl_list *node;
++
++ assert(log_ctx);
++
++ list = &log_ctx->scope_list;
++
++ if (nscope) {
++ node = nscope->compositor_link.next;
++ } else {
++ node = list->next;
++ }
++
++ assert(node);
++ assert(!nscope || node != &nscope->compositor_link);
++
++ if (node == list)
++ return NULL;
++
++ return container_of(node, struct weston_log_scope, compositor_link);
++}
++
++/** Helper to retrieve, in human readable form, the name of a log scope
++ *
++ * @param scope the scope in question
++ * @returns the name of the scope as a pointer to a string
++ */
++WL_EXPORT const char *
++weston_log_scope_get_name(struct weston_log_scope *scope)
++{
++ return scope->name;
++}
++
++/** Helper to retreive, in human reable form, the description of a log scope
++ *
++ * @param scope the scope in question
++ * @returns the description of the scope as pointer to a string
++ *
++ */
++WL_EXPORT const char *
++weston_log_scope_get_description(struct weston_log_scope *scope)
++{
++ return scope->desc;
++}
+diff --git a/tests/iterate-debug-scopes-test.c b/tests/iterate-debug-scopes-test.c
+new file mode 100644
+index 00000000..82c6c5c8
+--- /dev/null
++++ b/tests/iterate-debug-scopes-test.c
+@@ -0,0 +1,84 @@
++/*
++ * Copyright 2023 Collabora, Ltd.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * "Software"), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial
++ * portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
++ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
++ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
++ * SOFTWARE.
++ */
++#include "config.h"
++
++#include <unistd.h>
++#include <assert.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <string.h>
++
++#include <libweston/weston-log.h>
++#include "weston-test-client-helper.h"
++#include "weston-test-fixture-compositor.h"
++
++
++static enum test_result_code
++fixture_setup(struct weston_test_harness *harness)
++{
++ struct compositor_setup setup;
++
++ compositor_setup_defaults(&setup);
++ setup.shell = SHELL_TEST_DESKTOP;
++
++ return weston_test_harness_execute_as_plugin(harness, &setup);
++}
++
++DECLARE_FIXTURE_SETUP(fixture_setup);
++
++static void
++iterate_debug_scopes(struct weston_compositor *compositor)
++{
++ struct weston_log_scope *nscope = NULL;
++ const char *test_harness_scope = "test-harness-plugin";
++ bool found_test_harness_debug_scope = false;
++ struct weston_log_context *log_ctx = compositor->weston_log_ctx;
++
++ weston_log("Printing available debug scopes:\n");
++
++ while ((nscope = weston_log_scopes_iterate(log_ctx, nscope))) {
++ const char *scope_name;
++ const char *desc_name;
++
++ scope_name = weston_log_scope_get_name(nscope);
++ assert(scope_name);
++
++ desc_name = weston_log_scope_get_description(nscope);
++ assert(desc_name);
++
++ weston_log("\tscope name: %s, desc: %s\n", scope_name, desc_name);
++
++ if (strcmp(test_harness_scope, scope_name) == 0)
++ found_test_harness_debug_scope = true;
++ }
++ weston_log("\n");
++
++ assert(found_test_harness_debug_scope);
++}
++
++PLUGIN_TEST(iterate_default_debug_scopes)
++{
++ iterate_debug_scopes(compositor);
++}
+diff --git a/tests/meson.build b/tests/meson.build
+index d8e96e77..e52ff5a6 100644
+--- a/tests/meson.build
++++ b/tests/meson.build
+@@ -224,6 +224,12 @@ tests = [
+ ],
+ 'dep_objs': [ dep_lib_desktop ]
+ },
++ { 'name': 'iterate-debug-scopes',
++ 'sources': [
++ 'iterate-debug-scopes-test.c',
++ ],
++ 'dep_objs': [ dep_libweston_public ]
++ },
+ ]
+
+ tests_standalone = [
+--
+2.40.1
+
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-simple-touch-Add-maximized-fullscreen-states.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-simple-touch-Add-maximized-fullscreen-states.patch
new file mode 100644
index 000000000..53a620ef7
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-simple-touch-Add-maximized-fullscreen-states.patch
@@ -0,0 +1,138 @@
+From 666300564093838c7d6a723fbce7e3b1a719e873 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Thu, 22 Dec 2022 18:27:14 +0200
+Subject: [PATCH 1/3] simple-touch: Add maximized/fullscreen states
+
+Helpful to have other states like maximized or fullscreen for
+the simple-touch client.
+
+Upstream-Status: Pending
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ clients/simple-touch.c | 55 ++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 48 insertions(+), 7 deletions(-)
+
+diff --git a/clients/simple-touch.c b/clients/simple-touch.c
+index 6559aa24d..e32013161 100644
+--- a/clients/simple-touch.c
++++ b/clients/simple-touch.c
+@@ -64,9 +64,13 @@ struct touch {
+ struct xdg_toplevel *xdg_toplevel;
+ struct buffer *buffer;
+ int width, height;
++ int init_width, init_height;
+ bool running;
+ bool wait_for_configure;
++ bool needs_buffer_update;
+ bool has_argb;
++ bool maximized;
++ bool fullscreen;
+ };
+
+ static struct buffer *
+@@ -111,7 +115,7 @@ create_shm_buffer(struct touch *touch)
+ }
+
+ static void
+-initial_redraw(void *data)
++redraw(void *data)
+ {
+ struct touch *touch = data;
+ struct buffer *buffer = NULL;
+@@ -119,6 +123,9 @@ initial_redraw(void *data)
+ buffer = create_shm_buffer(touch);
+ assert(buffer);
+
++ if (touch->buffer)
++ free(touch->buffer);
++
+ touch->buffer = buffer;
+
+ /* paint the "work-area" */
+@@ -283,9 +290,10 @@ handle_xdg_surface_configure(void *data, struct xdg_surface *surface,
+
+ xdg_surface_ack_configure(surface, serial);
+
+- if (touch->wait_for_configure) {
+- initial_redraw(touch);
++ if (touch->wait_for_configure || touch->needs_buffer_update) {
++ redraw(touch);
+ touch->wait_for_configure = false;
++ touch->needs_buffer_update = false;
+ }
+ }
+
+@@ -340,9 +348,40 @@ static const struct wl_registry_listener registry_listener = {
+
+ static void
+ handle_toplevel_configure(void *data, struct xdg_toplevel *xdg_toplevel,
+- int32_t width, int32_t height,
+- struct wl_array *state)
++ int32_t width, int32_t height, struct wl_array *states)
+ {
++ struct touch *touch = data;
++ uint32_t *p;
++
++ touch->fullscreen = false;
++ touch->maximized = false;
++
++ wl_array_for_each(p, states) {
++ uint32_t state = *p;
++ switch (state) {
++ case XDG_TOPLEVEL_STATE_FULLSCREEN:
++ touch->fullscreen = true;
++ break;
++ case XDG_TOPLEVEL_STATE_MAXIMIZED:
++ touch->maximized = true;
++ break;
++ }
++ }
++
++ if (width > 0 && height > 0) {
++ if (!touch->fullscreen && !touch->maximized) {
++ touch->init_width = width;
++ touch->init_width = height;
++ }
++ touch->width = width;
++ touch->height = height;
++ } else if (!touch->fullscreen && !touch->maximized) {
++ touch->width = touch->init_width;
++ touch->height = touch->init_height;
++
++ }
++
++ touch->needs_buffer_update = true;
+ }
+
+ static void
+@@ -371,6 +410,7 @@ touch_create(int width, int height)
+ assert(touch->display);
+
+ touch->has_argb = false;
++ touch->buffer = NULL;
+ touch->registry = wl_display_get_registry(touch->display);
+ wl_registry_add_listener(touch->registry, &registry_listener, touch);
+ wl_display_dispatch(touch->display);
+@@ -386,8 +426,8 @@ touch_create(int width, int height)
+ exit(1);
+ }
+
+- touch->width = width;
+- touch->height = height;
++ touch->init_width = width;
++ touch->init_height = height;
+ touch->surface = wl_compositor_create_surface(touch->compositor);
+
+ touch->xdg_surface =
+@@ -403,6 +443,7 @@ touch_create(int width, int height)
+ xdg_toplevel_set_title(touch->xdg_toplevel, "simple-touch");
+ xdg_toplevel_set_app_id(touch->xdg_toplevel, "simple-touch");
+ touch->wait_for_configure = true;
++ touch->needs_buffer_update = false;
+ wl_surface_commit(touch->surface);
+
+ touch->running = true;
+--
+2.35.1
+
diff --git a/meta-agl-core/recipes-graphics/wayland/weston_10.0.%.bbappend b/meta-agl-core/recipes-graphics/wayland/weston_10.0.%.bbappend
new file mode 100644
index 000000000..685894116
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston_10.0.%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'weston_10.0_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc b/meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc
new file mode 100644
index 000000000..a19e0f344
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston_10.0_aglcore.inc
@@ -0,0 +1,33 @@
+FILESEXTRAPATHS:append := ":${THISDIR}/weston"
+
+# Workaround for incorrect upstream definition
+PACKAGECONFIG[remoting] = "-Dremoting=true,-Dremoting=false,gstreamer1.0 gstreamer1.0-plugins-base"
+PACKAGECONFIG[headless] = "-Dbackend-headless=true"
+PACKAGECONFIG:append = "${@bb.utils.contains('DISTRO_FEATURES', 'weston-remoting', ' remoting', '', d)}"
+
+SRC_URI:append = "file://0001-libweston-Send-name-description-update-wl_output-to-.patch \
+ file://0001-libweston-desktop-xdg-shell-Add-tiled-orientation-st.patch \
+ file://0001-simple-touch-Add-maximized-fullscreen-states.patch \
+ file://0001-backend-drm-make-sure-all-buffers-are-released-when-.patch \
+ file://0001-libweston-weston-log-Add-a-iterator-helper-for-debug.patch \
+"
+
+# Split weston-terminal out of the main package to allow installing it
+# separately for use with other compositors. The icons, etc. that end
+# up in /usr/share/weston are also split out into a separate package
+# since they are required for weston-terminal and some of the programs
+# packaged in weston-examples in addition to ivi-shell in the main
+# package.
+
+PACKAGE_BEFORE_PN += "${PN}-data ${PN}-terminal"
+
+FILES:${PN}-data = "${datadir}/weston"
+
+FILES:${PN}-terminal = "${bindir}/weston-terminal"
+RDEPENDS:${PN}-terminal += "weston-data liberation-fonts"
+
+RDEPENDS:${PN}-examples += "weston-data"
+
+FILES:${PN}:remove = "weston-terminal"
+RDEPENDS:${PN}:remove = "liberation-fonts"
+RDEPENDS:${PN} += "weston-data weston-terminal"
diff --git a/meta-agl-core/recipes-kernel/linux/kernel-devsrc.bbappend b/meta-agl-core/recipes-kernel/linux/kernel-devsrc.bbappend
new file mode 100644
index 000000000..3d5903d85
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/kernel-devsrc.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)}
diff --git a/meta-agl-bsp/recipes-kernel/linux/kernel-devsrc.bbappend b/meta-agl-core/recipes-kernel/linux/kernel-devsrc_agl.inc
index 52fe69d24..39289fef7 100644
--- a/meta-agl-bsp/recipes-kernel/linux/kernel-devsrc.bbappend
+++ b/meta-agl-core/recipes-kernel/linux/kernel-devsrc_agl.inc
@@ -1,5 +1,5 @@
# fix for kernel using hardcoded awk while our filesystem only provides gawk
-do_install_append() {
+do_install:append() {
# enforce all scripts to use /usr/bin/awk . This fixes the rpm dependency failure on install of kernel-devsrc
cd ${D} || true
( for i in `grep -srI "\!/bin/awk" | cut -d":" -f1 ` ; do sed -i -e "s#\!/bin/awk#\!/usr/bin/env awk#g" $i ; done ) || true
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch b/meta-agl-core/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch
index 7c34fb306..7c34fb306 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch
+++ b/meta-agl-core/recipes-kernel/linux/linux-4.14/net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch
diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-4.14.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-4.14.inc
new file mode 100644
index 000000000..9ab3d34af
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux-agl-4.14.inc
@@ -0,0 +1,6 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/linux-4.14:"
+
+SRC_URI:append = "\
+ file://net-sch_generic-add-if_afp.h-header-to-get-ARPHRD_CA.patch \
+ file://net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch \
+ "
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.19.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-4.19.inc
index da4e0c067..1ea476426 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux-agl-4.19.inc
+++ b/meta-agl-core/recipes-kernel/linux/linux-agl-4.19.inc
@@ -1,5 +1,5 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/linux-4.19:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/linux-4.19:"
-SRC_URI_append = "\
+SRC_URI:append = "\
file://net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch \
"
diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc
new file mode 100644
index 000000000..e42ae823d
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc
@@ -0,0 +1,93 @@
+# Common include file that defines AGL's variables for kernel
+# configuration.
+#
+# Can be included directly for kernel.bbclass based recipes that
+# use their own config fragment merging scheme, or use the
+# KERNEL_CONFIG_FRAGMENTS variable (e.g. meta-ti, meta-qcom).
+#
+# Fragments should be added to AGL_KCONFIG_FRAGMENTS as just the
+# .cfg filename with +=. Appending to AGL_KCONFIG_FRAGMENTS (i.e.
+# using _append) should only be done for:
+# - Specific AGL features that set an override in their feature
+# template, e.g. agl-netboot.
+# - To add essential configuration for core target machines like
+# qemu. Note that appending fragments directly to SRC_URI
+# would work for qemu targets since they use linux-yocto, but
+# the AGL_KCONFIG_FRAGMENTS mechanism is recommended for
+# consistency and to preserve the option of disabling all AGL
+# additions by overriding AGL_KERNEL_SRC.
+#
+# In general, care shoud be taken to preserve the ability to set
+# AGL_KCONFIG_FRAGMENTS to "" to disable non-essential (from a build
+# perspective) AGL additions.
+#
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/linux:"
+
+# NOTE: AGL_KERNEL_SRC is explicitly intended as an intermediate variable
+# that can be used as a last resort to completely disable all AGL
+# additions, modifying or appending it is not recommended.
+AGL_KERNEL_SRC ?= "${@' '.join(['file://' + x for x in d.getVar('AGL_KCONFIG_FRAGMENTS').split()])}"
+
+SRC_URI:append = " ${AGL_KERNEL_SRC}"
+
+# For meta-ti and meta-qcom
+KERNEL_CONFIG_FRAGMENTS ?= "${@' '.join(['${WORKDIR}/' + x for x in d.getVar('AGL_KCONFIG_FRAGMENTS').split()])}"
+
+# Extra configuration options for the AGL kernel
+AGL_KCONFIG_FRAGMENTS += " \
+ can-bus.cfg \
+ fanotify.cfg \
+ overlayfs.cfg \
+ audit.cfg \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux.cfg', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-required.cfg', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-sandbox.cfg', '', d)} \
+"
+
+AGL_KCONFIG_FRAGMENTS += " ${@bb.utils.contains('AGL_XEN_GUEST_WANTED','1','xen_domu.cfg','',d)}"
+
+# Base ALSA support and other sound related configuration
+AGL_KCONFIG_FRAGMENTS += "sound.cfg"
+
+# Enable support for SystemTap
+AGL_KCONFIG_FRAGMENTS += "${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'systemtap.cfg', '', d)}"
+
+#
+# Feature override and qemu specific appends:
+#
+
+# Enable required features for the agl-netboot feature
+AGL_KCONFIG_FRAGMENTS:append:netboot = " \
+ nbd.cfg \
+ ramdisk.cfg \
+"
+
+# Add hda audio and required virtio device support for qemu
+AGL_KCONFIG_FRAGMENTS:append:qemuall = " \
+ sound-hda.cfg \
+ qemu-virtio.cfg \
+ qemu-drm.cfg \
+"
+
+AGL_KCONFIG_FRAGMENTS:append:virtio-all = " \
+ sound-hda.cfg \
+"
+
+# Configuration for using the ARM virt machine (and not versatilepb)
+AGL_KCONFIG_FRAGMENTS:append:qemuarm = " qemuarm.cfg"
+
+# Additional drivers for virtual machines
+# OVERRIDES save us some c'n'p below ...
+OVERRIDES:prepend:qemux86 = "virtualmachine:"
+OVERRIDES:prepend:qemux86-64 = "virtualmachine:"
+AGL_KCONFIG_FRAGMENTS:append:virtualmachine = " vbox-vmware-sata.cfg"
+
+# Extra configuration for using qemux86-64 image on physical hardware
+AGL_KCONFIG_FRAGMENTS:append:qemux86-64 = " \
+ x86-extra-graphic-devices.cfg \
+ x86-net-devices.cfg \
+ x86-security-tpm.cfg \
+ x86-usb-devices.cfg \
+ x86-upsquare.cfg \
+"
diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl.inc b/meta-agl-core/recipes-kernel/linux/linux-agl.inc
new file mode 100644
index 000000000..c318716fe
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux-agl.inc
@@ -0,0 +1,24 @@
+# Include file intended for kernel.bbclass based recipes that do not
+# have their own config fragment merging scheme.
+
+DEPENDS += "kern-tools-native"
+
+include linux-agl-config.inc
+
+# returns all the elements from the src uri that are .cfg files
+def find_cfgs(d):
+ sources=src_patches(d, True)
+ sources_list=[]
+ for s in sources:
+ if s.endswith('.cfg'):
+ sources_list.append(s)
+
+ return sources_list
+
+do_configure:append () {
+ if [ -n "${AGL_KCONFIG_FRAGMENTS}" ]; then
+ [ ! -f .config ] && cp -a ${WORKDIR}/defconfig .config
+ merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
+ yes '' | make oldconfig
+ fi
+}
diff --git a/meta-agl-core/recipes-kernel/linux/linux-yocto-agl.inc b/meta-agl-core/recipes-kernel/linux/linux-yocto-agl.inc
new file mode 100644
index 000000000..8628731cb
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux-yocto-agl.inc
@@ -0,0 +1,12 @@
+# Include file intended for kernel-yocto.bbclass based recipes.
+
+include linux-agl-config.inc
+
+# For qemuarm, build a generic v7 kernel instead of the arm926j one that
+# upstream qemuarm defaults to.
+KBUILD_DEFCONFIG:qemuarm = "multi_v7_defconfig"
+
+# Use alldefconfig for the qemu targets, but let other kernel-yocto
+# based BSPs use their own defaults (note that linux-renesas and
+# linux-raspberrypi also default to alldefconfig).
+KCONFIG_MODE:qemuall = "--alldefconfig"
diff --git a/meta-agl-core/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-agl-core/recipes-kernel/linux/linux-yocto_%.bbappend
new file mode 100644
index 000000000..808df2d09
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux-yocto_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}-agl.inc', '', d)}
diff --git a/meta-agl-core/recipes-kernel/linux/linux/audit.cfg b/meta-agl-core/recipes-kernel/linux/linux/audit.cfg
new file mode 100644
index 000000000..7decc799c
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux/audit.cfg
@@ -0,0 +1,2 @@
+CONFIG_AUDIT=y
+CONFIG_AUDIT_GENERIC=y
diff --git a/meta-agl-core/recipes-kernel/linux/linux/can-bus.cfg b/meta-agl-core/recipes-kernel/linux/linux/can-bus.cfg
new file mode 100644
index 000000000..d7c7c7741
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux/can-bus.cfg
@@ -0,0 +1,10 @@
+CONFIG_CAN=m
+CONFIG_CAN_RAW=m
+CONFIG_CAN_BCM=m
+CONFIG_CAN_GW=m
+CONFIG_CAN_J1939=m
+
+#
+# CAN Device Drivers
+#
+CONFIG_CAN_VCAN=m
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/fanotify.cfg b/meta-agl-core/recipes-kernel/linux/linux/fanotify.cfg
index de5dd8d31..de5dd8d31 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/fanotify.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/fanotify.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/nbd.cfg b/meta-agl-core/recipes-kernel/linux/linux/nbd.cfg
index e5d897556..e5d897556 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/nbd.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/nbd.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch b/meta-agl-core/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch
index 37ace5a58..37ace5a58 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch
+++ b/meta-agl-core/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/overlayfs.cfg b/meta-agl-core/recipes-kernel/linux/linux/overlayfs.cfg
index 025118ed6..025118ed6 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/overlayfs.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/overlayfs.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/drm.cfg b/meta-agl-core/recipes-kernel/linux/linux/qemu-drm.cfg
index 65fe71cd0..65fe71cd0 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/drm.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/qemu-drm.cfg
diff --git a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/virtio.cfg b/meta-agl-core/recipes-kernel/linux/linux/qemu-virtio.cfg
index d042d7d64..d042d7d64 100644
--- a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/virtio.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/qemu-virtio.cfg
diff --git a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/qemuarm.cfg b/meta-agl-core/recipes-kernel/linux/linux/qemuarm.cfg
index e71c714d6..b3644b26f 100644
--- a/meta-agl-bsp/meta-core/recipes-kernel/linux/linux-yocto/qemuarm.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/qemuarm.cfg
@@ -4,3 +4,5 @@ CONFIG_ARCH_VIRT=y
CONFIG_SERIAL_AMBA_PL011=y
CONFIG_PCI_HOST_GENERIC=y
CONFIG_RTC_DRV_PL031=y
+# SPEC-3976 we mimic real AGL ARM board and they dont have LPAE. This cause also HDA failure.
+# CONFIG_ARM_LPAE is not set
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/ramdisk.cfg b/meta-agl-core/recipes-kernel/linux/linux/ramdisk.cfg
index 3d44de805..3d44de805 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/ramdisk.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/ramdisk.cfg
diff --git a/meta-agl-core/recipes-kernel/linux/linux/selinux.cfg b/meta-agl-core/recipes-kernel/linux/linux/selinux.cfg
new file mode 100644
index 000000000..5998111e3
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux/selinux.cfg
@@ -0,0 +1,16 @@
+CONFIG_NETWORK_SECMARK=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_JFS_SECURITY=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFFS2_FS_SECURITY=y
+CONFIG_SECURITY=y
+CONFIG_SECURITYFS=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_SELINUX=y
+CONFIG_SECURITY_SELINUX_BOOTPARAM=y
+CONFIG_SECURITY_SELINUX_DISABLE=y
+CONFIG_SECURITY_SELINUX_DEVELOP=y
+CONFIG_SECURITY_SELINUX_AVC_STATS=y
+CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/sound-hda.cfg b/meta-agl-core/recipes-kernel/linux/linux/sound-hda.cfg
index 115504c39..115504c39 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/sound-hda.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/sound-hda.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/sound.cfg b/meta-agl-core/recipes-kernel/linux/linux/sound.cfg
index ad34ea680..ad34ea680 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/sound.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/sound.cfg
diff --git a/meta-agl-core/recipes-kernel/linux/linux/systemd-required.cfg b/meta-agl-core/recipes-kernel/linux/linux/systemd-required.cfg
new file mode 100644
index 000000000..3586a17bb
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux/systemd-required.cfg
@@ -0,0 +1,43 @@
+CONFIG_TMPFS=y
+CONFIG_TMPFS_XATTR=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_AUTOFS_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_CGROUP=y
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_PERF=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_RT_GROUP_SCHED=n
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_INOTIFY_USER=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EPOLL=y
+CONFIG_NET=y
+CONFIG_UNIX=y
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_SYSFS_DEPRECATED=n
+CONFIG_FHANDLE=y
+CONFIG_CRYPTO_USER_API_HASH=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_FW_LOADER_USER_HELPER=n
+CONFIG_DMIID=y
+CONFIG_NAMESPACES=y
+CONFIG_NET_NS=y
+CONFIG_USER_NS=y
+CONFIG_SECCOMP=y
+CONFIG_SECCOMP_FILTER=y
+CONFIG_CHECKPOINT_RESTORE=y
+CONFIG_CFS_BANDWIDTH=y
diff --git a/meta-agl-core/recipes-kernel/linux/linux/systemd-sandbox.cfg b/meta-agl-core/recipes-kernel/linux/linux/systemd-sandbox.cfg
new file mode 100644
index 000000000..d451d554c
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux/systemd-sandbox.cfg
@@ -0,0 +1,9 @@
+CONFIG_BPF=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_NET_CLS_BPF=m
+CONFIG_NET_ACT_BPF=m
+CONFIG_BPF_JIT=y
+CONFIG_HAVE_EBPF_JIT=y
+CONFIG_BPF_EVENTS=y
+CONFIG_BPF_LSM=y
+CONFIG_CGROUP_BPF=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/systemtap.cfg b/meta-agl-core/recipes-kernel/linux/linux/systemtap.cfg
index 4886c27f1..4886c27f1 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/systemtap.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/systemtap.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/vbox-vmware-sata.cfg b/meta-agl-core/recipes-kernel/linux/linux/vbox-vmware-sata.cfg
index ce1eca1a7..ce1eca1a7 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/vbox-vmware-sata.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/vbox-vmware-sata.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg
index d2b64de67..e7d99e5ac 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/x86-extra-graphic-devices.cfg
@@ -11,11 +11,9 @@ CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_VGEM=m
-CONFIG_DRM_VMWGFX=m
+CONFIG_DRM_VMWGFX=y
CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_GMA500=m
-CONFIG_DRM_GMA600=y
-CONFIG_DRM_GMA3600=y
CONFIG_DRM_UDL=m
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_BACKLIGHT=y
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-net-devices.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-net-devices.cfg
index 6c5b698a9..6c5b698a9 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-net-devices.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/x86-net-devices.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-security-tpm.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-security-tpm.cfg
index b66b1b9b1..b66b1b9b1 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-security-tpm.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/x86-security-tpm.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-upsquare.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-upsquare.cfg
index d2bed63fa..d2bed63fa 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-upsquare.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/x86-upsquare.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/x86-usb-devices.cfg b/meta-agl-core/recipes-kernel/linux/linux/x86-usb-devices.cfg
index 19c57796e..19c57796e 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/x86-usb-devices.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/x86-usb-devices.cfg
diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/xen_domu.cfg b/meta-agl-core/recipes-kernel/linux/linux/xen_domu.cfg
index 8bc59eb1e..8bc59eb1e 100644
--- a/meta-agl-bsp/recipes-kernel/linux/linux/xen_domu.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/xen_domu.cfg
diff --git a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch
new file mode 100644
index 000000000..f4139ff2c
--- /dev/null
+++ b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/0001-Added-appid-and-title-support.patch
@@ -0,0 +1,166 @@
+From 2de455486403a710cb6896b0052b4cd7e46d83a2 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Thu, 10 Aug 2023 14:20:48 +0300
+Subject: [PATCH] ext/wayland: Add title/appid support
+
+Bug-AGL: SPEC-4870
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ ext/wayland/gstwaylandsink.c | 43 ++++++++++++++++++++++++++++++++++--
+ ext/wayland/gstwaylandsink.h | 2 ++
+ ext/wayland/wlwindow.c | 10 ++++++++-
+ ext/wayland/wlwindow.h | 2 +-
+ 4 files changed, 53 insertions(+), 4 deletions(-)
+
+diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
+index 0761304..8913ee2 100644
+--- a/ext/wayland/gstwaylandsink.c
++++ b/ext/wayland/gstwaylandsink.c
+@@ -63,7 +63,9 @@ enum
+ {
+ PROP_0,
+ PROP_DISPLAY,
+- PROP_FULLSCREEN
++ PROP_FULLSCREEN,
++ PROP_APP_ID,
++ PROP_TITLE
+ };
+
+ GST_DEBUG_CATEGORY (gstwayland_debug);
+@@ -212,6 +214,16 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
+ "Whether the surface should be made fullscreen ", FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
++ g_object_class_install_property (gobject_class, PROP_APP_ID,
++ g_param_spec_string ("appid", "Top-level application id", "Wayland "
++ "appid, as xdg_shell::set_app_id",
++ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
++ g_object_class_install_property (gobject_class, PROP_TITLE,
++ g_param_spec_string ("title", "Top-level title", "Wayland "
++ "title, xdg_shell::set_title",
++ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
+ gst_type_mark_as_plugin_api (GST_TYPE_WAYLAND_VIDEO, 0);
+ }
+
+@@ -246,6 +258,16 @@ gst_wayland_sink_get_property (GObject * object,
+ g_value_set_string (value, sink->display_name);
+ GST_OBJECT_UNLOCK (sink);
+ break;
++ case PROP_APP_ID:
++ GST_OBJECT_LOCK (sink);
++ g_value_set_string (value, sink->app_id);
++ GST_OBJECT_UNLOCK (sink);
++ break;
++ case PROP_TITLE:
++ GST_OBJECT_LOCK (sink);
++ g_value_set_string (value, sink->title);
++ GST_OBJECT_UNLOCK (sink);
++ break;
+ case PROP_FULLSCREEN:
+ GST_OBJECT_LOCK (sink);
+ g_value_set_boolean (value, sink->fullscreen);
+@@ -269,6 +291,16 @@ gst_wayland_sink_set_property (GObject * object,
+ sink->display_name = g_value_dup_string (value);
+ GST_OBJECT_UNLOCK (sink);
+ break;
++ case PROP_APP_ID:
++ GST_OBJECT_LOCK (sink);
++ sink->app_id = g_value_dup_string (value);
++ GST_OBJECT_UNLOCK (sink);
++ break;
++ case PROP_TITLE:
++ GST_OBJECT_LOCK (sink);
++ sink->title = g_value_dup_string (value);
++ GST_OBJECT_UNLOCK (sink);
++ break;
+ case PROP_FULLSCREEN:
+ GST_OBJECT_LOCK (sink);
+ gst_wayland_sink_set_fullscreen (sink, g_value_get_boolean (value));
+@@ -291,12 +323,18 @@ gst_wayland_sink_finalize (GObject * object)
+ gst_buffer_unref (sink->last_buffer);
+ if (sink->display)
+ g_object_unref (sink->display);
++ if (sink->title)
++ g_object_unref (sink->title);
++ if (sink->app_id)
++ g_object_unref (sink->app_id);
+ if (sink->window)
+ g_object_unref (sink->window);
+ if (sink->pool)
+ gst_object_unref (sink->pool);
+
+ g_free (sink->display_name);
++ g_free (sink->title);
++ g_free (sink->app_id);
+
+ g_mutex_clear (&sink->display_lock);
+ g_mutex_clear (&sink->render_lock);
+@@ -718,7 +756,8 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
+ if (!sink->window) {
+ /* if we were not provided a window, create one ourselves */
+ sink->window = gst_wl_window_new_toplevel (sink->display,
+- &sink->video_info, sink->fullscreen, &sink->render_lock);
++ &sink->video_info, sink->fullscreen, sink->app_id, sink->title,
++ &sink->render_lock);
+ g_signal_connect_object (sink->window, "closed",
+ G_CALLBACK (on_window_closed), sink, 0);
+ }
+diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h
+index 7aabb6f..4db00e5 100644
+--- a/ext/wayland/gstwaylandsink.h
++++ b/ext/wayland/gstwaylandsink.h
+@@ -63,6 +63,8 @@ struct _GstWaylandSink
+ gboolean fullscreen;
+
+ gchar *display_name;
++ gchar *app_id;
++ gchar *title;
+
+ gboolean redraw_pending;
+ GMutex render_lock;
+diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c
+index 66df0fc..ad2d3f3 100644
+--- a/ext/wayland/wlwindow.c
++++ b/ext/wayland/wlwindow.c
+@@ -254,7 +254,7 @@ gst_wl_window_ensure_fullscreen (GstWlWindow * window, gboolean fullscreen)
+
+ GstWlWindow *
+ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+- gboolean fullscreen, GMutex * render_lock)
++ gboolean fullscreen, gchar *app_id, gchar *title, GMutex * render_lock)
+ {
+ GstWlWindow *window;
+
+@@ -287,6 +287,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+
+ /* Finally, commit the xdg_surface state as toplevel */
+ window->configured = FALSE;
++ if (app_id)
++ xdg_toplevel_set_app_id (window->xdg_toplevel, app_id);
++ else
++ xdg_toplevel_set_app_id (window->xdg_toplevel, "ext.wayland.waylandsink");
++ if (title)
++ xdg_toplevel_set_title (window->xdg_toplevel, title);
++ else
++ xdg_toplevel_set_title (window->xdg_toplevel, "ext.wayland.waylandsink");
+ wl_surface_commit (window->area_surface);
+ wl_display_flush (display->display);
+
+diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h
+index 303c336..64399b3 100644
+--- a/ext/wayland/wlwindow.h
++++ b/ext/wayland/wlwindow.h
+@@ -83,7 +83,7 @@ GType gst_wl_window_get_type (void);
+ void gst_wl_window_ensure_fullscreen (GstWlWindow * window,
+ gboolean fullscreen);
+ GstWlWindow *gst_wl_window_new_toplevel (GstWlDisplay * display,
+- const GstVideoInfo * info, gboolean fullscreen, GMutex * render_lock);
++ const GstVideoInfo * info, gboolean fullscreen, gchar * app_id, gchar *title, GMutex * render_lock);
+ GstWlWindow *gst_wl_window_new_in_surface (GstWlDisplay * display,
+ struct wl_surface * parent, GMutex * render_lock);
+
+--
+2.35.1
+
diff --git a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch
new file mode 100644
index 000000000..72b924337
--- /dev/null
+++ b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch
@@ -0,0 +1,166 @@
+From df64f7e34d01a03957d78317ef9a1cf6d6b95055 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Wed, 9 Aug 2023 14:34:19 +0300
+Subject: [PATCH] Added appid and title support
+
+Bug-AGL: SPEC-4870
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ ext/wayland/gstwaylandsink.c | 43 ++++++++++++++++++++++++++++++++++--
+ ext/wayland/gstwaylandsink.h | 2 ++
+ ext/wayland/wlwindow.c | 10 ++++++++-
+ ext/wayland/wlwindow.h | 2 +-
+ 4 files changed, 53 insertions(+), 4 deletions(-)
+
+diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
+index 4918154..f743cf2 100644
+--- a/ext/wayland/gstwaylandsink.c
++++ b/ext/wayland/gstwaylandsink.c
+@@ -66,7 +66,9 @@ enum
+ PROP_DISPLAY,
+ PROP_FULLSCREEN,
+ PROP_USE_SUBSURFACE,
+- PROP_SUPPRESS_INTERLACE
++ PROP_SUPPRESS_INTERLACE,
++ PROP_APP_ID,
++ PROP_TITLE
+ };
+
+ #define DEFAULT_USE_SUBSURFACE TRUE
+@@ -229,6 +231,16 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
+ DEFAULT_SUPPRESS_INTERLACE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
++ g_object_class_install_property (gobject_class, PROP_APP_ID,
++ g_param_spec_string ("appid", "Top-level application id", "Wayland "
++ "appid, as xdg_shell::set_app_id",
++ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
++ g_object_class_install_property (gobject_class, PROP_TITLE,
++ g_param_spec_string ("title", "Top-level title", "Wayland "
++ "title, xdg_shell::set_title",
++ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
+ gst_type_mark_as_plugin_api (GST_TYPE_WAYLAND_VIDEO, 0);
+ }
+
+@@ -266,6 +278,16 @@ gst_wayland_sink_get_property (GObject * object,
+ g_value_set_string (value, sink->display_name);
+ GST_OBJECT_UNLOCK (sink);
+ break;
++ case PROP_APP_ID:
++ GST_OBJECT_LOCK (sink);
++ g_value_set_string (value, sink->app_id);
++ GST_OBJECT_UNLOCK (sink);
++ break;
++ case PROP_TITLE:
++ GST_OBJECT_LOCK (sink);
++ g_value_set_string (value, sink->title);
++ GST_OBJECT_UNLOCK (sink);
++ break;
+ case PROP_FULLSCREEN:
+ GST_OBJECT_LOCK (sink);
+ g_value_set_boolean (value, sink->fullscreen);
+@@ -298,6 +320,16 @@ gst_wayland_sink_set_property (GObject * object,
+ sink->display_name = g_value_dup_string (value);
+ GST_OBJECT_UNLOCK (sink);
+ break;
++ case PROP_APP_ID:
++ GST_OBJECT_LOCK (sink);
++ sink->app_id = g_value_dup_string (value);
++ GST_OBJECT_UNLOCK (sink);
++ break;
++ case PROP_TITLE:
++ GST_OBJECT_LOCK (sink);
++ sink->title = g_value_dup_string (value);
++ GST_OBJECT_UNLOCK (sink);
++ break;
+ case PROP_FULLSCREEN:
+ GST_OBJECT_LOCK (sink);
+ gst_wayland_sink_set_fullscreen (sink, g_value_get_boolean (value));
+@@ -331,12 +363,18 @@ gst_wayland_sink_finalize (GObject * object)
+ gst_buffer_unref (sink->last_buffer);
+ if (sink->display)
+ g_object_unref (sink->display);
++ if (sink->title)
++ g_object_unref (sink->title);
++ if (sink->app_id)
++ g_object_unref (sink->app_id);
+ if (sink->window)
+ g_object_unref (sink->window);
+ if (sink->pool)
+ gst_object_unref (sink->pool);
+
+ g_free (sink->display_name);
++ g_free (sink->title);
++ g_free (sink->app_id);
+
+ g_mutex_clear (&sink->display_lock);
+ g_mutex_clear (&sink->render_lock);
+@@ -768,7 +806,8 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
+ if (!sink->window) {
+ /* if we were not provided a window, create one ourselves */
+ sink->window = gst_wl_window_new_toplevel (sink->display,
+- &sink->video_info, sink->fullscreen, &sink->render_lock);
++ &sink->video_info, sink->fullscreen, sink->app_id, sink->title,
++ &sink->render_lock);
+ g_signal_connect_object (sink->window, "closed",
+ G_CALLBACK (on_window_closed), sink, 0);
+ }
+diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h
+index 46ea538..e6c94ae 100644
+--- a/ext/wayland/gstwaylandsink.h
++++ b/ext/wayland/gstwaylandsink.h
+@@ -64,6 +64,8 @@ struct _GstWaylandSink
+ gboolean fullscreen;
+
+ gchar *display_name;
++ gchar *app_id;
++ gchar *title;
+
+ gboolean redraw_pending;
+ GMutex render_lock;
+diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c
+index 3aace87..16faec8 100644
+--- a/ext/wayland/wlwindow.c
++++ b/ext/wayland/wlwindow.c
+@@ -255,7 +255,7 @@ gst_wl_window_ensure_fullscreen (GstWlWindow * window, gboolean fullscreen)
+
+ GstWlWindow *
+ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+- gboolean fullscreen, GMutex * render_lock)
++ gboolean fullscreen, gchar *app_id, gchar *title, GMutex * render_lock)
+ {
+ GstWlWindow *window;
+
+@@ -288,6 +288,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+
+ /* Finally, commit the xdg_surface state as toplevel */
+ window->configured = FALSE;
++ if (app_id)
++ xdg_toplevel_set_app_id (window->xdg_toplevel, app_id);
++ else
++ xdg_toplevel_set_app_id (window->xdg_toplevel, "ext.wayland.waylandsink");
++ if (title)
++ xdg_toplevel_set_title (window->xdg_toplevel, title);
++ else
++ xdg_toplevel_set_title (window->xdg_toplevel, "ext.wayland.waylandsink");
+ wl_surface_commit (window->area_surface);
+ wl_display_flush (display->display);
+
+diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h
+index 034a5a5..6b525c8 100644
+--- a/ext/wayland/wlwindow.h
++++ b/ext/wayland/wlwindow.h
+@@ -84,7 +84,7 @@ GType gst_wl_window_get_type (void);
+ void gst_wl_window_ensure_fullscreen (GstWlWindow * window,
+ gboolean fullscreen);
+ GstWlWindow *gst_wl_window_new_toplevel (GstWlDisplay * display,
+- const GstVideoInfo * info, gboolean fullscreen, GMutex * render_lock);
++ const GstVideoInfo * info, gboolean fullscreen, gchar * app_id, gchar *title, GMutex * render_lock);
+ GstWlWindow *gst_wl_window_new_in_surface (GstWlDisplay * display,
+ struct wl_surface * parent, GMutex * render_lock);
+
+--
+2.35.1
+
diff --git a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_%.bbappend b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_%.bbappend
new file mode 100644
index 000000000..96bbdc34b
--- /dev/null
+++ b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'gstreamer1.0-plugins-bad_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_aglcore.inc b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_aglcore.inc
new file mode 100644
index 000000000..97a0c1688
--- /dev/null
+++ b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_aglcore.inc
@@ -0,0 +1,9 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+AGL_PATCHES = "file://0001-Added-appid-and-title-support.patch"
+
+# Above patch fails to apply against NXP's forked version, disable
+# for now
+AGL_PATCHES:use-nxp-bsp = ""
+
+SRC_URI:append = " ${AGL_PATCHES}"
diff --git a/meta-agl-core/recipes-platform/images/agl-image-boot.bb b/meta-agl-core/recipes-platform/images/agl-image-boot.bb
new file mode 100644
index 000000000..dde6a18db
--- /dev/null
+++ b/meta-agl-core/recipes-platform/images/agl-image-boot.bb
@@ -0,0 +1,5 @@
+SUMMARY = "A small image just capable of allowing a device to boot."
+LICENSE = "MIT"
+
+inherit agl-core-image
+
diff --git a/meta-agl-core/recipes-platform/images/agl-image-compositor.bb b/meta-agl-core/recipes-platform/images/agl-image-compositor.bb
new file mode 100644
index 000000000..b78536be8
--- /dev/null
+++ b/meta-agl-core/recipes-platform/images/agl-image-compositor.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A very basic Wayland image with agl-compositor"
+LICENSE = "MIT"
+
+require agl-image-minimal.bb
+
+inherit features_check
+
+REQUIRED_DISTRO_FEATURES = "wayland"
+
+SYSTEMD_DEFAULT_TARGET = "graphical.target"
+
+IMAGE_INSTALL += " \
+ packagegroup-agl-graphical-compositor \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'weston-examples', '', d)} \
+"
diff --git a/meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb b/meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb
new file mode 100644
index 000000000..eec1cf54c
--- /dev/null
+++ b/meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A very basic Wayland image with a terminal"
+LICENSE = "MIT"
+
+require agl-image-weston.bb
+
+IMAGE_FEATURES += "splash"
+
+IMAGE_INSTALL += " \
+ busybox \
+ gdb \
+ gperf \
+ weston-examples \
+ curl \
+ ptest-runner \
+ "
diff --git a/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb b/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb
new file mode 100644
index 000000000..6aa308273
--- /dev/null
+++ b/meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb
@@ -0,0 +1,9 @@
+require agl-image-minimal.bb
+
+SUMMARY = "Cross SDK of minimal AGL Distribution for core profile"
+DESCRIPTION = "SDK image for AGL core distribution. \
+It includes the full toolchain, plus developement headers and libraries \
+to form a standalone cross SDK."
+LICENSE = "MIT"
+
+inherit agl-crosssdk
diff --git a/meta-agl-core/recipes-platform/images/agl-image-minimal.bb b/meta-agl-core/recipes-platform/images/agl-image-minimal.bb
new file mode 100644
index 000000000..4e54e93ed
--- /dev/null
+++ b/meta-agl-core/recipes-platform/images/agl-image-minimal.bb
@@ -0,0 +1,9 @@
+SUMMARY = "An AGL small image just capable of allowing a device to boot."
+LICENSE = "MIT"
+
+inherit agl-core-image
+
+IMAGE_INSTALL = "packagegroup-agl-image-minimal ${CORE_IMAGE_EXTRA_INSTALL}"
+
+IMAGE_ROOTFS_SIZE ?= "8192"
+IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "", d)}"
diff --git a/meta-agl-core/recipes-platform/images/agl-image-weston.bb b/meta-agl-core/recipes-platform/images/agl-image-weston.bb
new file mode 100644
index 000000000..d902020cc
--- /dev/null
+++ b/meta-agl-core/recipes-platform/images/agl-image-weston.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A very basic Wayland image with a terminal"
+LICENSE = "MIT"
+
+require agl-image-minimal.bb
+
+inherit features_check
+
+REQUIRED_DISTRO_FEATURES = "wayland"
+
+SYSTEMD_DEFAULT_TARGET = "graphical.target"
+
+IMAGE_INSTALL += " \
+ packagegroup-agl-graphical-weston \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'weston-examples', '', d)} \
+"
diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb
new file mode 100644
index 000000000..28a734548
--- /dev/null
+++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2007 OpenedHand Ltd.
+#
+# derived from oe-core: meta/recipes-core/packagegroups/packagegroup-core-boot.bb
+
+SUMMARY = "Minimal boot requirements"
+DESCRIPTION = "The minimal set of packages required to boot the system"
+LICENSE = "MIT"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+inherit packagegroup
+
+# Disto can override
+VIRTUAL-RUNTIME_rngd ?= "rng-tools"
+
+RDEPENDS:${PN} = "\
+ packagegroup-core-boot \
+ packagegroup-machine-base \
+ ${VIRTUAL-RUNTIME_rngd} \
+"
+
+RRECOMMENDS:${PN} = "\
+ tzdata \
+"
+
diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb
index e209c59ca..aeee0f8d3 100644
--- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb
+++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb
@@ -7,13 +7,13 @@ PACKAGES = "\
packagegroup-agl-core-connectivity \
"
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
PKGGROUP_ZEROCONF = "${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'packagegroup-base-zeroconf', '', d)}"
-RDEPENDS_${PN} += "\
- dhcp-server \
- ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','connman','connman connman-client connman-tests \
- connman-tools connman-ncurses connman-plugin-session-policy-local','',d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '${PKGGROUP_ZEROCONF}', '', d)} \
+RDEPENDS:${PN} += "\
+ ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','connman','connman connman-client connman-conf \
+ connman-wait-online connman-tests connman-tools connman-ncurses' ,'',d)} \
+ ${@bb.utils.contains('AGL_FEATURES', 'agl-devel', '${PKGGROUP_ZEROCONF}', '', d)} \
+ systemd-conf-canbus \
"
diff --git a/meta-agl-profile-core/recipes-devtools/packagegroups/packagegroup-agl-core-devel.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb
index c360f2a72..887604ec3 100644
--- a/meta-agl-profile-core/recipes-devtools/packagegroups/packagegroup-agl-core-devel.bb
+++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb
@@ -3,31 +3,21 @@ LICENSE = "MIT"
inherit packagegroup
-RDEPENDS_${PN} = "\
+RDEPENDS:${PN} = "\
strace \
ldd \
less \
vim \
lsof \
gdb \
- valgrind \
- perf \
- htop \
- powertop \
screen \
usbutils \
rsync \
- tree \
pstree \
procps \
- jq \
libxslt-bin \
- agl-service-network-tools \
- gcc-sanitizers \
pciutils \
- pyagl \
- gcov \
- gcov-symlinks \
- gcovr \
- gcovr-wrapper \
- "
+ openssh-sftp-server \
+ zstd \
+"
+
diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-compositor.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-compositor.bb
new file mode 100644
index 000000000..b2c7d8ec8
--- /dev/null
+++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-compositor.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "The minimal set of packages required for the AGL compositor"
+LICENSE = "MIT"
+
+inherit packagegroup
+
+RDEPENDS:${PN} += " \
+ agl-compositor \
+ agl-compositor-init \
+"
diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb
new file mode 100644
index 000000000..96f09d5ab
--- /dev/null
+++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "The minimal set of packages required for the Weston compositor"
+LICENSE = "MIT"
+
+inherit packagegroup
+
+RDEPENDS:${PN} += " \
+ weston \
+ weston-init \
+"
diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb
index 284c961b1..a60cbab21 100644
--- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb
+++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb
@@ -8,19 +8,11 @@ PACKAGES = "\
profile-agl-minimal \
"
-ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY:${PN} = "1"
-RDEPENDS_${PN} += "\
+RDEPENDS:${PN} += "\
packagegroup-agl-core-boot \
- packagegroup-machine-base \
- "
-
-
-RDEPENDS_${PN} += "\
packagegroup-agl-core-connectivity \
- packagegroup-agl-core-os-commonlibs \
- packagegroup-agl-core-services \
- packagegroup-agl-core-security \
"
-RDEPENDS_profile-agl-minimal = "${PN}"
+RDEPENDS:profile-agl-minimal = "${PN}"
diff --git a/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb
new file mode 100644
index 000000000..b92e760ae
--- /dev/null
+++ b/meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb
@@ -0,0 +1,17 @@
+SUMMARY = "The middleware for AGL IVI profile"
+DESCRIPTION = "The base set of packages required for a AGL IVI Distribution"
+LICENSE = "MIT"
+
+inherit packagegroup
+
+PACKAGES = "\
+ packagegroup-agl-profile-graphical \
+ profile-graphical \
+"
+
+RDEPENDS:${PN} += "\
+ packagegroup-agl-image-minimal \
+ packagegroup-agl-graphical-compositor \
+"
+
+RDEPENDS:profile-graphical = "${PN}"
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch b/meta-agl-core/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch
index 6232c4fa4..14c90b714 100644
--- a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch
+++ b/meta-agl-core/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch
@@ -1,7 +1,7 @@
-From 11b29ce444610a07067a89b38e9e85c2162bbf67 Mon Sep 17 00:00:00 2001
+From 552f06e025493f7e634ea9e27489861b88f45555 Mon Sep 17 00:00:00 2001
From: Tim Orling <timothy.t.orling@linux.intel.com>
Date: Mon, 15 Oct 2018 18:30:42 -0700
-Subject: [PATCH 7/7] [WIP] Initial LAVA support
+Subject: [PATCH] Initial LAVA support
Linaro Automated Validation Architecture (LAVA) launches a test suite
on the target but thereafter only observes stdout.
@@ -17,10 +17,22 @@ emitted to stdout:
It is valid to have a measurement without units, but not units without a measurement.
+Upstream-Status: Pending
+
Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
[updated for ptest-runner 2.3.2]
+[updated for ptest-runner 2.4.1]
+[updated for ptest-runner 2.4.2]
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+
---
+ flags.h | 10 ++++++++++
+ main.c | 9 ++++++++-
+ utils.c | 15 +++++++++++++++
+ utils.h | 2 +-
+ 4 files changed, 34 insertions(+), 2 deletions(-)
+ create mode 100644 flags.h
+
diff --git a/flags.h b/flags.h
new file mode 100644
index 0000000..0dac223
@@ -38,7 +50,7 @@ index 0000000..0dac223
+
+#endif /* __FLAGS_H__ */
diff --git a/main.c b/main.c
-index 01d60f7..165370f 100644
+index 31e4dd5..f12d6d6 100644
--- a/main.c
+++ b/main.c
@@ -38,6 +38,7 @@
@@ -49,7 +61,7 @@ index 01d60f7..165370f 100644
#ifndef DEFAULT_DIRECTORY
#define DEFAULT_DIRECTORY "/usr/lib"
-@@ -74,8 +75,9 @@ main(int argc, char *argv[])
+@@ -130,8 +131,9 @@ main(int argc, char *argv[])
opts.timeout = DEFAULT_TIMEOUT;
opts.ptests = NULL;
opts.xml_filename = NULL;
@@ -59,8 +71,8 @@ index 01d60f7..165370f 100644
+ while ((opt = getopt(argc, argv, "d:e:lt:x:Lh")) != -1) {
switch (opt) {
case 'd':
- free(opts.directory);
-@@ -122,6 +124,11 @@ main(int argc, char *argv[])
+ free(opts.dirs[0]);
+@@ -156,6 +158,11 @@ main(int argc, char *argv[])
opts.xml_filename = strdup(optarg);
CHECK_ALLOCATION(opts.xml_filename, 1, 1);
break;
@@ -73,18 +85,18 @@ index 01d60f7..165370f 100644
print_usage(stdout, argv[0]);
exit(1);
diff --git a/utils.c b/utils.c
-index a8ba190..19f9efa 100644
+index a67ac11..0c081ce 100644
--- a/utils.c
+++ b/utils.c
-@@ -47,6 +47,7 @@
+@@ -49,6 +49,7 @@
#include "ptest_list.h"
#include "utils.h"
+#include "flags.h"
#define GET_STIME_BUF_SIZE 1024
- #define WAIT_CHILD_POLL_TIMEOUT_MS 200
-@@ -439,6 +440,7 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
+ #define WAIT_CHILD_BUF_MAX_SIZE 1024
+@@ -483,6 +484,7 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
fprintf(fp, "START: %s\n", progname);
PTEST_LIST_ITERATE_START(head, p)
char *ptest_dir = strdup(p->run_ptest);
@@ -92,13 +104,7 @@ index a8ba190..19f9efa 100644
if (ptest_dir == NULL) {
rc = -1;
break;
-@@ -480,11 +482,15 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
- int status;
- int fds[2]; fds[0] = pipefd_stdout[0]; fds[1] = pipefd_stderr[0];
- FILE *fps[2]; fps[0] = fp; fps[1] = fp_stderr;
-+ char result[5]; // pass\0, fail\0, skip\0
-
- if (setpgid(child, pgid) == -1) {
+@@ -525,6 +527,9 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
fprintf(fp, "ERROR: setpgid() failed, %s\n", strerror(errno));
}
@@ -108,11 +114,13 @@ index a8ba190..19f9efa 100644
sttime = time(NULL);
fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, sttime));
fprintf(fp, "BEGIN: %s\n", ptest_dir);
-@@ -506,6 +512,14 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
+@@ -548,6 +553,16 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
fprintf(fp, "END: %s\n", ptest_dir);
fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE, entime));
+ if (opts.flags & LAVA_SIGNAL_ENABLE) {
++ char result[5]; // pass\0, fail\0, skip\0
++
+ if (status)
+ sprintf(result, "fail");
+ else
@@ -121,14 +129,14 @@ index a8ba190..19f9efa 100644
+ fprintf(stdout, "<LAVA_SIGNAL_TESTCASE TEST_CASE_ID=%s RESULT=%s>\n", ptest, result);
+ }
}
+ free(ptest_dir);
PTEST_LIST_ITERATE_END
- fprintf(fp, "STOP: %s\n", progname);
diff --git a/utils.h b/utils.h
-index aa53707..df11e24 100644
+index 04fc666..ad702d8 100644
--- a/utils.h
+++ b/utils.h
-@@ -39,9 +39,9 @@ struct ptest_options {
- int timeout;
+@@ -42,9 +42,9 @@ struct ptest_options {
+ unsigned int timeout;
char **ptests;
char *xml_filename;
+ unsigned int flags;
diff --git a/meta-agl-core/recipes-support/ptest-runner/ptest-runner_2.%.bbappend b/meta-agl-core/recipes-support/ptest-runner/ptest-runner_2.%.bbappend
new file mode 100644
index 000000000..5033ed7f6
--- /dev/null
+++ b/meta-agl-core/recipes-support/ptest-runner/ptest-runner_2.%.bbappend
@@ -0,0 +1,2 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)}
+
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.%.bbappend b/meta-agl-core/recipes-support/ptest-runner/ptest-runner_agl.inc
index 7a1d2a8f8..593ad13a6 100644
--- a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.%.bbappend
+++ b/meta-agl-core/recipes-support/ptest-runner/ptest-runner_agl.inc
@@ -1,4 +1,3 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
+FILESEXTRAPATHS:prepend := "${THISDIR}/ptest-runner:"
SRC_URI += "file://0007-WIP-Initial-LAVA-support.patch"
diff --git a/meta-agl-distro/scripts/oe-depends-dot b/meta-agl-core/scripts/oe-depends-dot
index 5cec23bf0..5cec23bf0 100755
--- a/meta-agl-distro/scripts/oe-depends-dot
+++ b/meta-agl-core/scripts/oe-depends-dot
diff --git a/meta-agl-core/scripts/run-yocto-check-layer.sh b/meta-agl-core/scripts/run-yocto-check-layer.sh
new file mode 100755
index 000000000..cd9364682
--- /dev/null
+++ b/meta-agl-core/scripts/run-yocto-check-layer.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+#set -x
+
+SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )"
+echo $SCRIPTPATH
+AGLROOT="$SCRIPTPATH/../../.."
+POKYDIR="$AGLROOT/external/poky"
+TMPROOT=`mktemp -d`
+
+rm -rf ${TMPROOT}/testbuild-ycl || true
+mkdir -p ${TMPROOT}/testbuild-ycl
+cd ${TMPROOT}/testbuild-ycl
+
+source $POKYDIR/oe-init-build-env .
+
+cat << EOF >> conf/local.conf
+# just define defaults
+AGL_FEATURES ?= ""
+AGL_EXTRA_IMAGE_FSTYPES ?= ""
+
+# important settings imported from poky-agl.conf
+# we cannot import the distro config right away
+# as the initial values are poky only till the layer
+# is added in
+# no polkit !
+AGL_DEFAULT_DISTRO_FEATURES = "usrmerge largefile opengl wayland pam bluetooth bluez5 3g"
+DISTRO_FEATURES:append = " systemd wayland pam \${AGL_DEFAULT_DISTRO_FEATURES}"
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
+VIRTUAL-RUNTIME_init_manager = "systemd"
+
+EOF
+
+yocto-check-layer --no-auto-dependency \
+ -- \
+ $AGLROOT/meta-agl/meta-agl-core
+
+
+[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl
+
+exit 0
diff --git a/meta-agl-distro/conf/layer.conf b/meta-agl-distro/conf/layer.conf
deleted file mode 100644
index f8cf50c76..000000000
--- a/meta-agl-distro/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "agl-distro"
-BBFILE_PATTERN_agl-distro = "^${LAYERDIR}/"
-BBFILE_PRIORITY_agl-distro = "70"
-
-LAYERSERIES_COMPAT_agl-distro = "dunfell"
diff --git a/meta-agl-profile-core/recipes-core/systemd/.appends.core b/meta-agl-ic/.empty
index e69de29bb..e69de29bb 100644
--- a/meta-agl-profile-core/recipes-core/systemd/.appends.core
+++ b/meta-agl-ic/.empty
diff --git a/meta-agl-profile-core/recipes-devtools/gdb/.appends.core b/meta-agl-ivi/.empty
index e69de29bb..e69de29bb 100644
--- a/meta-agl-profile-core/recipes-devtools/gdb/.appends.core
+++ b/meta-agl-ivi/.empty
diff --git a/meta-agl-profile-cluster-qt5/LICENSE b/meta-agl-profile-cluster-qt5/LICENSE
deleted file mode 100644
index e8758f89c..000000000
--- a/meta-agl-profile-cluster-qt5/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Different components of the AGL layers are under different licenses (a mix
-of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further
-details of the individual licenses.
-
-All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar)
-is MIT licensed unless otherwise stated.
-Source code included in tree for individual recipes (e.g. patches) are under
-the LICENSE stated in the associated recipe (.bb file) unless otherwise stated.
-
-License information for any other files (scripts) is either explicitly stated
-or defaults to GPL version 2 only.
-
-Individual files can contain the following style tags instead of the full
-license text to identify their license:
-
- SPDX-License-Identifier: GPL-2.0-only
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only b/meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only
deleted file mode 100644
index 5db3c0a21..000000000
--- a/meta-agl-profile-cluster-qt5/LICENSE.GPL-2.0-only
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: GPL-2.0-only
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-cluster-qt5/LICENSE.MIT b/meta-agl-profile-cluster-qt5/LICENSE.MIT
deleted file mode 100644
index a6919eb7e..000000000
--- a/meta-agl-profile-cluster-qt5/LICENSE.MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-cluster-qt5/conf/layer.conf b/meta-agl-profile-cluster-qt5/conf/layer.conf
deleted file mode 100644
index 6ed7d8ca8..000000000
--- a/meta-agl-profile-cluster-qt5/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "aglprofileclusterqt5"
-BBFILE_PATTERN_aglprofileclusterqt5 = "^${LAYERDIR}/"
-BBFILE_PRIORITY_aglprofileclusterqt5 = "70"
-
-LAYERSERIES_COMPAT_aglprofileclusterqt5 = "dunfell"
diff --git a/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.bb b/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.bb
deleted file mode 100644
index 244e2ba48..000000000
--- a/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "A basic Wayland based cluster image with Qt5 support"
-
-require agl-image-cluster-qt5.inc
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL_append = "\
- profile-cluster-qt5 \
- "
diff --git a/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.inc b/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.inc
deleted file mode 100644
index 93826aa46..000000000
--- a/meta-agl-profile-cluster-qt5/recipes-platform/images/agl-image-cluster-qt5.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-require recipes-platform/images/agl-image-boot.inc
-
-IMAGE_FEATURES += "splash package-management ssh-server-dropbear"
-
-inherit features_check
-
-REQUIRED_DISTRO_FEATURES = "wayland"
diff --git a/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb b/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb
deleted file mode 100644
index 5436a5617..000000000
--- a/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "The middleware for AGL Qt5 based cluster profile"
-DESCRIPTION = "The set of packages required for AGL Qt5 based Cluster Distribution"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-profile-cluster-qt5 \
- profile-cluster-qt5 \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-image-boot \
- packagegroup-agl-core-security \
- packagegroup-agl-graphical-weston \
- packagegroup-agl-appfw-native-qt5 \
-"
-
-RDEPENDS_profile-cluster-qt5 = "${PN}"
diff --git a/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qtcompositor.bb b/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qtcompositor.bb
deleted file mode 100644
index 9d54b33a4..000000000
--- a/meta-agl-profile-cluster-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qtcompositor.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "The middleware for AGL Qt5 based cluster qtcompositor"
-DESCRIPTION = "The set of packages required for AGL Qt5 based Cluster Demo Qtcompositor Distribution"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-profile-cluster-qtcompositor \
- profile-cluster-qt5 \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-image-boot \
- packagegroup-agl-core-security \
- packagegroup-agl-core-connectivity \
-"
-
-QT_LITE = " \
- qtbase \
- qtdeclarative \
- qtwayland \
- qtgraphicaleffects-qmlplugins \
- qtsvg-plugins \
- qtwebsockets \
- qtwebsockets-qmlplugins \
- qtcompositor-conf \
-"
-
-RDEPENDS_${PN}_append = " \
- ${QT_LITE} \
- agl-login-manager \
-"
-
-RDEPENDS_profile-cluster-qt5 = "${PN}"
diff --git a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0001-fixed-eglfs_kms-fails-to-build.patch b/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0001-fixed-eglfs_kms-fails-to-build.patch
deleted file mode 100644
index 5c936e7ae..000000000
--- a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0001-fixed-eglfs_kms-fails-to-build.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-537bb3cc027eed14500fe5724ab30f Mon Sep 17 00:00:00 2001
-From: Laszlo Agocs <laszlo.agocs@qt.io>
-Date: Fri, 14 Dec 2018 10:48:43 +0100
-Subject: eglfs: avoid breaking builds without EGL_EXT_platform_base
-
-Change-Id: I9183e17b42c00435f20c00a414e1f20aa3972351
-Fixes: QTBUG-72559
-Reviewed-by: Johan Helsing <johan.helsing@qt.io>
----
- .../eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp | 1 -
- .../eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp | 4 ++++
- 2 files changed, 4 insertions(+), 1 deletion(-)
-
-(limited to 'src/plugins/platforms/eglfs/deviceintegration/eglfs_kms')
-
-diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
-index 1e4f4e72c8..f154520669 100644
---- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
-+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
-@@ -63,7 +63,6 @@ QEglFSKmsGbmIntegration::QEglFSKmsGbmIntegration()
-
- #ifndef EGL_EXT_platform_base
- typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
--typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
- #endif
-
- #ifndef EGL_PLATFORM_GBM_KHR
-diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp
-index 65a7c4f38a..a93762e5b4 100644
---- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp
-+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp
-@@ -45,6 +45,10 @@
-
- QT_BEGIN_NAMESPACE
-
-+#ifndef EGL_EXT_platform_base
-+typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
-+#endif
-+
- void QEglFSKmsGbmWindow::resetSurface()
- {
- QEglFSKmsGbmScreen *gbmScreen = static_cast<QEglFSKmsGbmScreen *>(screen());
---
-cgit v1.2.1
-
diff --git a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch b/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch
deleted file mode 100644
index 3c33cfc10..000000000
--- a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/files/0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 9514c51b5a6881c445586fa3a232ccd47fe4b1e5 Mon Sep 17 00:00:00 2001
-From: Stefan Zehetbauer
-Date: Fri, 14 Dec 2018 13:26:03 +0100
-Subject: [PATCH] fixed invalid conversion from EGLNativeDisplayType to void*
-
----
- .../eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
-index d495a8d..34ca9e8 100644
---- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
-+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
-@@ -82,7 +82,7 @@ EGLDisplay QEglFSKmsGbmIntegration::createDisplay(EGLNativeDisplayType nativeDis
- }
-
- if (getPlatformDisplay) {
-- display = getPlatformDisplay(EGL_PLATFORM_GBM_KHR, nativeDisplay, nullptr);
-+ display = getPlatformDisplay(EGL_PLATFORM_GBM_KHR, reinterpret_cast<void *>(&nativeDisplay), nullptr);
- } else {
- qCDebug(qLcEglfsKmsDebug, "No eglGetPlatformDisplay for GBM, falling back to eglGetDisplay");
- display = eglGetDisplay(nativeDisplay);
---
-1.9.1
diff --git a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtbase_%.bbappend b/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtbase_%.bbappend
deleted file mode 100644
index e94ef03ae..000000000
--- a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtbase_%.bbappend
+++ /dev/null
@@ -1,12 +0,0 @@
-#Enable eglfs for QT based application
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-# FIXME: Disabled as they do not apply against 5.13.2, and it is
-# unclear if they are still required for building dra7xx-evm,
-# which fails for what looks like a different reason.
-#SRC_URI += " file://0001-fixed-eglfs_kms-fails-to-build.patch \
-# file://0002-fixed-invalid-conversion-from-EGLNativeDisplayType-to-void.patch \
-# "
-
-PACKAGECONFIG_GL_append = "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', ' eglfs kms gbm', '', d)}"
diff --git a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtcompositor-conf_1.0.bb b/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtcompositor-conf_1.0.bb
deleted file mode 100644
index 49111b6e8..000000000
--- a/meta-agl-profile-cluster-qt5/recipes-qt/qt5/qtcompositor-conf_1.0.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "Configuration files for running wayland with a non-weston compositor"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-inherit allarch agl-graphical
-
-do_configure[noexec] = "1"
-do_compile[noexec] = "1"
-
-do_install() {
- # Add a rule to ensure the 'display' user has permissions to
- # open the graphics device
- install -d ${D}${sysconfdir}/udev/rules.d
- cat >${D}${sysconfdir}/udev/rules.d/zz-dri.rules <<'EOF'
-SUBSYSTEM=="drm", MODE="0660", GROUP="${WESTONGROUP}", SECLABEL{smack}="*"
-EOF
-
- # user 'display' must also be able to access /dev/input/*
- cat >${D}${sysconfdir}/udev/rules.d/zz-input.rules <<'EOF'
-SUBSYSTEM=="input", MODE="0660", GROUP="input", SECLABEL{smack}="^"
-EOF
-
- # user 'display' must also be able to access /dev/media*, etc.
- cat >${D}${sysconfdir}/udev/rules.d/zz-remote-display.rules <<'EOF'
-SUBSYSTEM=="media", MODE="0660", GROUP="display", SECLABEL{smack}="*"
-SUBSYSTEM=="video4linux", MODE="0660", GROUP="display", SECLABEL{smack}="*"
-KERNEL=="uvcs", SUBSYSTEM=="misc", MODE="0660", GROUP="display", SECLABEL{smack}="*"
-KERNEL=="rgnmm", SUBSYSTEM=="misc", MODE="0660", GROUP="display", SECLABEL{smack}="*"
-EOF
-}
-
-do_install_append_imx() {
- install -d ${D}${sysconfdir}/udev/rules.d
- cat >>${D}${sysconfdir}/udev/rules.d/zz-dri.rules <<'EOF'
-SUBSYSTEM=="gpu_class", MODE="0660", GROUP="${WESTONGROUP}", SECLABEL{smack}="*"
-EOF
-
-}
-
-RCONFLICTS_${PN} = "weston-init"
diff --git a/meta-agl-profile-cluster/LICENSE b/meta-agl-profile-cluster/LICENSE
deleted file mode 100644
index e8758f89c..000000000
--- a/meta-agl-profile-cluster/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Different components of the AGL layers are under different licenses (a mix
-of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further
-details of the individual licenses.
-
-All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar)
-is MIT licensed unless otherwise stated.
-Source code included in tree for individual recipes (e.g. patches) are under
-the LICENSE stated in the associated recipe (.bb file) unless otherwise stated.
-
-License information for any other files (scripts) is either explicitly stated
-or defaults to GPL version 2 only.
-
-Individual files can contain the following style tags instead of the full
-license text to identify their license:
-
- SPDX-License-Identifier: GPL-2.0-only
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-cluster/LICENSE.GPL-2.0-only b/meta-agl-profile-cluster/LICENSE.GPL-2.0-only
deleted file mode 100644
index 5db3c0a21..000000000
--- a/meta-agl-profile-cluster/LICENSE.GPL-2.0-only
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: GPL-2.0-only
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-cluster/LICENSE.MIT b/meta-agl-profile-cluster/LICENSE.MIT
deleted file mode 100644
index a6919eb7e..000000000
--- a/meta-agl-profile-cluster/LICENSE.MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-cluster/conf/layer.conf b/meta-agl-profile-cluster/conf/layer.conf
deleted file mode 100644
index e71e04c90..000000000
--- a/meta-agl-profile-cluster/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "aglprofilecluster"
-BBFILE_PATTERN_aglprofilecluster = "^${LAYERDIR}/"
-BBFILE_PRIORITY_aglprofilecluster = "70"
-
-LAYERSERIES_COMPAT_aglprofilecluster = "dunfell"
diff --git a/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.bb b/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.bb
deleted file mode 100644
index 552d7a74e..000000000
--- a/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "A basic Wayland based cluster image"
-
-require agl-image-cluster.inc
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL_append = "\
- profile-cluster \
- "
diff --git a/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.inc b/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.inc
deleted file mode 100644
index 93826aa46..000000000
--- a/meta-agl-profile-cluster/recipes-platform/images/agl-image-cluster.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-require recipes-platform/images/agl-image-boot.inc
-
-IMAGE_FEATURES += "splash package-management ssh-server-dropbear"
-
-inherit features_check
-
-REQUIRED_DISTRO_FEATURES = "wayland"
diff --git a/meta-agl-profile-cluster/recipes-platform/packagegroups/packagegroup-agl-profile-cluster.bb b/meta-agl-profile-cluster/recipes-platform/packagegroups/packagegroup-agl-profile-cluster.bb
deleted file mode 100644
index c0c612467..000000000
--- a/meta-agl-profile-cluster/recipes-platform/packagegroups/packagegroup-agl-profile-cluster.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "The middleware for AGL cluster profile"
-DESCRIPTION = "The set of packages required for AGL Cluster Distribution"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-profile-cluster \
- profile-cluster \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-image-boot \
- packagegroup-agl-core-security \
- packagegroup-agl-graphical-weston \
-"
-
-RDEPENDS_profile-cluster = "${PN}"
diff --git a/meta-agl-profile-core/LICENSE b/meta-agl-profile-core/LICENSE
deleted file mode 100644
index e8758f89c..000000000
--- a/meta-agl-profile-core/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Different components of the AGL layers are under different licenses (a mix
-of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further
-details of the individual licenses.
-
-All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar)
-is MIT licensed unless otherwise stated.
-Source code included in tree for individual recipes (e.g. patches) are under
-the LICENSE stated in the associated recipe (.bb file) unless otherwise stated.
-
-License information for any other files (scripts) is either explicitly stated
-or defaults to GPL version 2 only.
-
-Individual files can contain the following style tags instead of the full
-license text to identify their license:
-
- SPDX-License-Identifier: GPL-2.0-only
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-core/LICENSE.GPL-2.0-only b/meta-agl-profile-core/LICENSE.GPL-2.0-only
deleted file mode 100644
index 5db3c0a21..000000000
--- a/meta-agl-profile-core/LICENSE.GPL-2.0-only
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: GPL-2.0-only
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-core/LICENSE.MIT b/meta-agl-profile-core/LICENSE.MIT
deleted file mode 100644
index a6919eb7e..000000000
--- a/meta-agl-profile-core/LICENSE.MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-core/conf/include/agl-gplv2.inc b/meta-agl-profile-core/conf/include/agl-gplv2.inc
deleted file mode 100644
index fc9a4072b..000000000
--- a/meta-agl-profile-core/conf/include/agl-gplv2.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-# GPLv3 Compliance
-PREFERRED_VERSION_bash = "3.2.%"
-PREFERRED_VERSION_gawk = "3.1.%"
-PREFERRED_VERSION_gdbm = "1.8.%"
-PREFERRED_VERSION_gnupg = "1.4.7"
-PREFERRED_VERSION_gnutls = "3.3.%"
-PREFERRED_VERSION_mc = "4.7.5.%"
-PREFERRED_VERSION_readline = "5.2"
diff --git a/meta-agl-profile-core/conf/include/agl-sign-wgts.inc b/meta-agl-profile-core/conf/include/agl-sign-wgts.inc
deleted file mode 100644
index 6e6674fd1..000000000
--- a/meta-agl-profile-core/conf/include/agl-sign-wgts.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-# allows insertion of code or items specific to developement
-OVERRIDES .= ":agl-sign-wgts"
-DISTRO_FEATURES_append = " agl-sign-wgts"
diff --git a/meta-agl-profile-core/conf/include/base-agl.inc b/meta-agl-profile-core/conf/include/base-agl.inc
deleted file mode 100644
index c5cf1a57f..000000000
--- a/meta-agl-profile-core/conf/include/base-agl.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-# AGL includes all kernel modules here for ease-of-use during development.
-# Comment this out to be able to select the kernel modules yourself.
-IMAGE_INSTALL_append = " kernel-modules"
-
-# Likewise as we included all kernel modules by default in the filesystem,
-# we do not need a separate tarball stored.
-# Comment this out to receive the separate modules tarball again.
-MODULE_TARBALL_DEPLOY ?= "0"
-
-# Comment out below if want to use QtWebkit
-PACKAGECONFIG_remove_pn-qtquick1 = "webkit"
-
-
-ASSUME_PROVIDED_remove = "tar-native"
-
-# Use static IDs to enable full-filesystem updates
-USERADDEXTENSION = "useradd-staticids"
-USERADD_ERROR_DYNAMIC = "error"
-USERADD_GID_TABLES = "files/group"
-USERADD_UID_TABLES = "files/passwd"
diff --git a/meta-agl-profile-core/conf/layer.conf b/meta-agl-profile-core/conf/layer.conf
deleted file mode 100644
index fef746d76..000000000
--- a/meta-agl-profile-core/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "aglprofilecore"
-BBFILE_PATTERN_aglprofilecore = "^${LAYERDIR}/"
-BBFILE_PRIORITY_aglprofilecore = "80"
-
-LAYERSERIES_COMPAT_aglprofilecore = "dunfell"
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-map/agl-service-bluetooth-map_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-map/agl-service-bluetooth-map_git.bb
deleted file mode 100644
index bc53051f2..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-map/agl-service-bluetooth-map_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Bluetooth MAP Service Binding"
-DESCRIPTION = "AGL Bluetooth MAP Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-bluetooth-map"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-bluetooth-map;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "glib-2.0 json-c"
-RDEPENDS_${PN} = "bluez5-obex agl-service-bluetooth"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-pbap/agl-service-bluetooth-pbap_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-pbap/agl-service-bluetooth-pbap_git.bb
deleted file mode 100644
index 3f9ff7be1..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth-pbap/agl-service-bluetooth-pbap_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Bluetooth PBAP Service Binding"
-DESCRIPTION = "AGL Bluetooth PBAP Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-bluetooth-pbap"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-bluetooth-pbap;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "glib-2.0 json-c"
-RDEPENDS_${PN} = "bluez5-obex agl-service-bluetooth agl-service-data-persistence"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth/agl-service-bluetooth_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-bluetooth/agl-service-bluetooth_git.bb
deleted file mode 100644
index 8cfa8ec8f..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-bluetooth/agl-service-bluetooth_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Bluetooth Service Binding"
-DESCRIPTION = "AGL Bluetooth Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-bluetooth"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-bluetooth;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "glib-2.0 json-c"
-RDEPENDS_${PN} = "agl-service-data-persistence agl-service-network"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bb
deleted file mode 100644
index 83f6c1e75..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/agl-service-can-low-level_git.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Low level CAN service"
-DESCRIPTION = "AGL Service application for read and decode CAN messages"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/low-level-can-service"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-can-low-level;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "${AGLVERSION}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "libafb-helpers libappcontroller"
-
-inherit cmake aglwgt pkgconfig ptest
-
-# For now, just enable J1939 on the qemu platforms where we know the
-# linux-yocto kernel is new enough (>= 5.4) and has the support enabled.
-AGLWGT_CMAKE_CONFIGURE_ARGS_append_qemuall = " -DWITH_FEATURE_J1939=ON"
-
-RDEPENDS_${PN} = "virtual/low-can-dev-mapping"
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/files/run-ptest b/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/files/run-ptest
deleted file mode 100644
index cc9c41365..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-can-low-level/files/run-ptest
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-afm-test /usr/AGL/apps/testwgt/low-can-service-test.wgt
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-data-persistence/agl-service-data-persistence_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-data-persistence/agl-service-data-persistence_git.bb
deleted file mode 100644
index 569f0707e..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-data-persistence/agl-service-data-persistence_git.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "AGL low level user database binding"
-HOMEPAGE = "https://git.automotivelinux.org/apps/agl-service-data-persistence/"
-SECTION = "base"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-data-persistence;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-inherit cmake aglwgt pkgconfig
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS += " af-binder json-c gdbm "
-
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-geoclue/agl-service-geoclue_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-geoclue/agl-service-geoclue_git.bb
deleted file mode 100644
index a12923247..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-geoclue/agl-service-geoclue_git.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "GeoClue Service Binding"
-DESCRIPTION = "AGL GeoClue Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-geoclue"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-geoclue;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c geoclue"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-geofence/agl-service-geofence_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-geofence/agl-service-geofence_git.bb
deleted file mode 100644
index 8bdcd7c93..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-geofence/agl-service-geofence_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Geofence Service Binding"
-DESCRIPTION = "AGL Geofence Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-geofence"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-geofence;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c glib-2.0"
-RDEPENDS_${PN} = "agl-service-gps"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-gps/agl-service-gps_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-gps/agl-service-gps_git.bb
deleted file mode 100644
index 254e5e409..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-gps/agl-service-gps_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "GPS/GNSS Service Binding"
-DESCRIPTION = "AGL GPS/GNSS Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-gps"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-gps;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c gpsd"
-RDEPENDS_${PN} = "libgps"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac-conf_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac-conf_git.bb
deleted file mode 100644
index e4dccbf3d..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac-conf_git.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "HVAC Service Binding Configuration"
-DESCRIPTION = "AGL HVAC Service Binding Configuration"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-hvac"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-hvac;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-do_configure[noexec] = "1"
-do_compile[noexec] = "1"
-
-do_install () {
- install -D -m 644 ${S}/hvac.json ${D}${sysconfdir}/hvac.json
-}
-
-do_install_append_ulcb() {
- sed -i -e "s#vcan0#sllin0#g" ${D}${sysconfdir}/hvac.json
-}
-
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac_git.bb
deleted file mode 100644
index 545ab6a28..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-hvac/agl-service-hvac_git.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "HVAC Service Binding"
-DESCRIPTION = "AGL HVAC Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-hvac"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-hvac;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c"
-
-inherit cmake aglwgt pkgconfig
-
-RDEPENDS_${PN} += "agl-service-identity-agent agl-service-can-low-level"
-RRECOMMENDS_${PN} += "agl-service-hvac-conf"
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-identity-agent/agl-service-identity-agent_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-identity-agent/agl-service-identity-agent_git.bb
deleted file mode 100644
index f2474be7b..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-identity-agent/agl-service-identity-agent_git.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "AGL identity agent binding"
-HOMEPAGE = "https://gitlab.com/iotbzh/aia-binding"
-SECTION = "base"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-identity-agent;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-PV = "1.0+git${SRCPV}"
-
-inherit cmake aglwgt pkgconfig
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "curl af-binder json-c systemd"
-
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-iiodevices/agl-service-iiodevices_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-iiodevices/agl-service-iiodevices_git.bb
deleted file mode 100644
index cc893698c..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-iiodevices/agl-service-iiodevices_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "IIODEVICES Service Binding"
-DESCRIPTION = "AGL IIODEVICES Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-iiodevices"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-iiodevices;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c libiio glib-2.0"
-
-RDEPENDS_${PN} = "libiio"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-mediascanner/agl-service-mediascanner_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-mediascanner/agl-service-mediascanner_git.bb
deleted file mode 100644
index c50a04804..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-mediascanner/agl-service-mediascanner_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Mediascanner Service Binding"
-DESCRIPTION = "AGL Mediascanner Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-mediascanner"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-mediascanner;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c sqlite3 glib-2.0"
-RDEPENDS_${PN} = "lightmediascanner"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-navigation/agl-service-navigation_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-navigation/agl-service-navigation_git.bb
deleted file mode 100755
index 71a615cf4..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-navigation/agl-service-navigation_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Navigation Service Binding"
-DESCRIPTION = "AGL Navigation Service API Binding"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-DEPENDS = "json-c libdbus-c++"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-navigation;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "0.1+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-inherit cmake aglwgt pkgconfig
-
-RDEPENDS_${PN} += "json-c libdbus-c++"
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-network/agl-service-network_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-network/agl-service-network_git.bb
deleted file mode 100644
index c7fb72f22..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-network/agl-service-network_git.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Network Service Binding"
-DESCRIPTION = "AGL Network Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-network"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-network;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "glib-2.0 json-c"
-
-inherit cmake aglwgt pkgconfig
-
-do_install_append() {
- install -d ${D}${sbindir}
- install -m 755 ${B}/build-release/test/agl-service-network-ctl ${D}${sbindir}
-}
-
-FILES_${PN}-tools = "${sbindir}/agl-service-network-ctl"
-PACKAGES_prepend = "${PN}-tools "
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-nfc/agl-service-nfc_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-nfc/agl-service-nfc_git.bb
deleted file mode 100644
index 1757dcb38..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-nfc/agl-service-nfc_git.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "agl-service-nfc"
-DESCRIPTION = ""
-HOMEPAGE = "https://git.automotivelinux.org/apps/agl-service-nfc/"
-SECTION = "apps"
-DEPENDS = "af-binder json-c glib-2.0 neardal"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-inherit cmake pkgconfig aglwgt
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-nfc;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-platform-info/agl-service-platform-info_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-platform-info/agl-service-platform-info_git.bb
deleted file mode 100644
index 43eed3f2e..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-platform-info/agl-service-platform-info_git.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Platform info provider binding"
-DESCRIPTION = "AGL Platform info provider binding"
-HOMEPAGE = "https://git.automotivelinux.org/apps/agl-service-platform-info/"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-platform-info;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "libafb-helpers"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/agl-service-signal-composer_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/agl-service-signal-composer_git.bb
deleted file mode 100644
index bf714f45d..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/agl-service-signal-composer_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "agl-service-signal-composer"
-DESCRIPTION = "AGL High Level Signaling service to handle CAN, LIN, and others signaling sources"
-HOMEPAGE = "https://git.automotivelinux.org/apps/agl-service-signal-composer/"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-inherit cmake pkgconfig aglwgt ptest
-
-DEPENDS += "lua lua-native libappcontroller libafb-helpers"
-RDEPENDS_${PN} += "lua"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-signal-composer;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "${AGLVERSION}"
-S = "${WORKDIR}/git"
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/files/run-ptest b/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/files/run-ptest
deleted file mode 100644
index 49187ad85..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-signal-composer/files/run-ptest
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-afm-test /usr/AGL/apps/testwgt/signal-composer-test.wgt
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-telephony/agl-service-telephony_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-telephony/agl-service-telephony_git.bb
deleted file mode 100644
index ff3913643..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-telephony/agl-service-telephony_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Telephony Service Binding"
-DESCRIPTION = "AGL Telephony Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-telephony"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-telephony;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c glib-2.0"
-RDEPENDS_${PN} = "ofono"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-unicens-controller/agl-service-unicens-controller_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-unicens-controller/agl-service-unicens-controller_git.bb
deleted file mode 100644
index 85ebc90f6..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-unicens-controller/agl-service-unicens-controller_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Infotainment network device control"
-DESCRIPTION = "Abstraction layer to control INICnet devices"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-unicens-controller"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-
-SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-service-unicens-controller;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "0.1+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-inherit cmake aglwgt pkgconfig
-
-DEPENDS += "json-c af-binder libafb-helpers"
-RDEPENDS_${PN} += "agl-service-unicens"
-
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-unicens/agl-service-unicens_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-unicens/agl-service-unicens_git.bb
deleted file mode 100644
index e7e25c74e..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-unicens/agl-service-unicens_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "4A - Infotainment network setup and access"
-DESCRIPTION = "Infotainment network setup and access (using Unified Centralized Network Stack)"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-unicens"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-service-unicens;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "0.1+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-inherit cmake aglwgt pkgconfig
-
-DEPENDS += "alsa-lib json-c systemd af-binder glib-2.0 libxml2 libafb-helpers"
-RDEPENDS_${PN} += "libxml2 "
-
diff --git a/meta-agl-profile-core/recipes-apis/agl-service-weather/agl-service-weather_git.bb b/meta-agl-profile-core/recipes-apis/agl-service-weather/agl-service-weather_git.bb
deleted file mode 100644
index 75532da42..000000000
--- a/meta-agl-profile-core/recipes-apis/agl-service-weather/agl-service-weather_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Weather Service Binding"
-DESCRIPTION = "AGL Weather Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-weather"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-weather;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "glib-2.0 json-c"
-RDEPENDS_${PN} = "agl-service-geoclue"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-core/recipes-config/agl-login-manager/agl-login-manager_0.1.bb b/meta-agl-profile-core/recipes-config/agl-login-manager/agl-login-manager_0.1.bb
deleted file mode 100644
index 49efce796..000000000
--- a/meta-agl-profile-core/recipes-config/agl-login-manager/agl-login-manager_0.1.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "AGL Login manager"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-LOGIN_USER ??="1001 1002"
-
-RDEPENDS_${PN} += "af-main"
-
-do_install_append() {
-
- install -d ${D}${systemd_system_unitdir}/multi-user.target.wants/
-
- for AGL_USER in ${LOGIN_USER};do
- ln -s ../afm-user-session@.service ${D}${systemd_system_unitdir}/multi-user.target.wants/afm-user-session@${AGL_USER}.service
- done
-}
-
-FILES_${PN} += "${systemd_system_unitdir}"
diff --git a/meta-agl-profile-core/recipes-config/agl-users/agl-users_0.1.bb b/meta-agl-profile-core/recipes-config/agl-users/agl-users_0.1.bb
deleted file mode 100644
index 709a1091f..000000000
--- a/meta-agl-profile-core/recipes-config/agl-users/agl-users_0.1.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-inherit allarch useradd
-
-SUMMARY = "AGL Users Seed"
-DESCRIPTION = "This is a core framework component that\
- defines how users are managed and who are the default users."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-ALLOW_EMPTY_${PN} = "1"
-
-USERADD_PACKAGES = "${PN}"
-
-USERADDEXTENSION = "useradd-staticids"
-
-GROUPADD_PARAM_${PN} = "\
- --system display ; \
- --system weston-launch ; \
- -g 1001 agl-driver ; \
- -g 1002 agl-passenger \
-"
-
-USERADD_PARAM_${PN} = "\
- -g 1001 -u 1001 -o -d /home/1001 -m -K PASS_MAX_DAYS=-1 agl-driver ; \
- -g 1002 -u 1002 -o -d /home/1002 -m -K PASS_MAX_DAYS=-1 agl-passenger ; \
- --gid display --groups weston-launch,video,input --home-dir /run/platform/display --shell /bin/false --comment \"Display daemon\" --key PASS_MAX_DAYS=-1 display \
-"
diff --git a/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping/dev-mapping.conf.default b/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping/dev-mapping.conf.default
deleted file mode 100644
index 7bd8bf2eb..000000000
--- a/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping/dev-mapping.conf.default
+++ /dev/null
@@ -1,6 +0,0 @@
-; Default CAN device mapping
-; Format has to follow ini rules key="value", notice " around value.
-
-[CANbus-mapping]
-hs="can0"
-ls="can0"
diff --git a/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping_0.1.bb b/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping_0.1.bb
deleted file mode 100644
index 1309ffa20..000000000
--- a/meta-agl-profile-core/recipes-config/dev-mapping/dev-mapping_0.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "AGL Device mapping configuration file"
-DESCRIPTION = "This provide default dev-mapping.conf file \
- that defines mapping between kernel device and logical name \
- used in low-can binding by example."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-SRC_URI += "file://dev-mapping.conf.default"
-
-inherit allarch
-
-do_install() {
- install -d ${D}${sysconfdir}
- install -m 0644 ${WORKDIR}/dev-mapping.conf.default ${D}${sysconfdir}/dev-mapping.conf
-}
-
-RPROVIDES_${PN} = "virtual/low-can-dev-mapping"
diff --git a/meta-agl-profile-core/recipes-connectivity/bluez-alsa/bluez-alsa_git.bb b/meta-agl-profile-core/recipes-connectivity/bluez-alsa/bluez-alsa_git.bb
deleted file mode 100644
index 010329ee7..000000000
--- a/meta-agl-profile-core/recipes-connectivity/bluez-alsa/bluez-alsa_git.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Bluetooth Audio ALSA Backend"
-HOMEPAGE = "https://github.com/Arkq/bluez-alsa"
-SECTION = "libs"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3d7d6ac7e2dbd2505652dceb3acdf1fe"
-
-SRC_URI = "git://github.com/Arkq/bluez-alsa.git;protocol=https;branch=master"
-SRCREV = "2cd6e4686f7808276480b430fb37df55dfdcc02b"
-
-SRC_URI += "file://bluez-alsa.service"
-
-S = "${WORKDIR}/git"
-
-DEPENDS += "alsa-lib bluez5 systemd glib-2.0 sbc"
-
-PACKAGECONFIG[aac] = "--enable-aac, --disable-aac, "
-PACKAGECONFIG[aptx] = "--enable-aptx,--disable-aptx,"
-PACKAGECONFIG[ofono] = "--enable-ofono, --disable-ofono,"
-
-inherit autotools pkgconfig
-inherit systemd
-
-SYSTEMD_AUTO_ENABLE = "enable"
-SYSTEMD_SERVICE_${PN} = "bluez-alsa.service"
-
-PACKAGECONFIG += "ofono"
-
-# enable debug tools in devel images
-PACKAGECONFIG[hcitop] = "--enable-hcitop, --disable-hcitop, libbsd ncurses"
-PACKAGECONFIG[rfcomm] = "--enable-rfcomm, --disable-rfcomm,"
-PACKAGECONFIG_append_agl-devel = " hcitop rfcomm"
-
-do_install_append () {
- install -d ${D}${base_libdir}/systemd/system
- install -m 0644 ${WORKDIR}/bluez-alsa.service ${D}${base_libdir}/systemd/system
-}
-
-FILES_${PN} += "\
- ${datadir}/alsa/alsa.conf.d/20-bluealsa.conf\
- ${libdir}/alsa-lib/libasound_module_ctl_bluealsa.so\
- ${libdir}/alsa-lib/libasound_module_pcm_bluealsa.so\
-"
diff --git a/meta-agl-profile-core/recipes-connectivity/bluez-alsa/files/bluez-alsa.service b/meta-agl-profile-core/recipes-connectivity/bluez-alsa/files/bluez-alsa.service
deleted file mode 100644
index b59302ee4..000000000
--- a/meta-agl-profile-core/recipes-connectivity/bluez-alsa/files/bluez-alsa.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=Bluetooth Audio ALSA Backend
-After=bluetooth.service
-Requires=bluetooth.service
-
-[Service]
-Type=simple
-ExecStart=/usr/bin/bluealsa -p a2dp-sink -p hfp-ofono
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.conf b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.conf
deleted file mode 100644
index 1f2762de7..000000000
--- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-<!-- This configuration file specifies the required security policies
- for Bluetooth core daemon to work. -->
-
-<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
-
- <!-- ../system.conf have denied everything, so we just punch some holes -->
-
- <policy user="root">
- <allow own="org.bluez"/>
- <allow send_destination="org.bluez"/>
- <allow send_interface="org.bluez.Agent1"/>
- <allow send_interface="org.bluez.MediaEndpoint1"/>
- <allow send_interface="org.bluez.MediaPlayer1"/>
- <allow send_interface="org.bluez.ThermometerWatcher1"/>
- <allow send_interface="org.bluez.AlertAgent1"/>
- <allow send_interface="org.bluez.Profile1"/>
- <allow send_interface="org.bluez.HeartRateWatcher1"/>
- <allow send_interface="org.bluez.CyclingSpeedWatcher1"/>
- <allow send_interface="org.bluez.GattCharacteristic1"/>
- <allow send_interface="org.bluez.GattDescriptor1"/>
- <allow send_interface="org.freedesktop.DBus.ObjectManager"/>
- <allow send_interface="org.freedesktop.DBus.Properties"/>
- <allow receive_type="signal" receive_sender="org.bluez" receive_interface="org.freedesktop.DBus.Properties"/>
- <allow receive_type="signal" receive_sender="org.bluez" receive_interface="org.freedesktop.DBus.ObjectManager"/>
- </policy>
-
- <policy at_console="true">
- <allow send_destination="org.bluez"/>
- </policy>
-
- <!-- allow users of lp group (printing subsystem) to
- communicate with bluetoothd -->
- <policy group="lp">
- <allow send_destination="org.bluez"/>
- </policy>
-
-</busconfig>
diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.service b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.service
deleted file mode 100644
index 8ae83bd48..000000000
--- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/bluetooth.service
+++ /dev/null
@@ -1,21 +0,0 @@
-[Unit]
-Description=Bluetooth service
-Documentation=man:bluetoothd(8)
-ConditionPathIsDirectory=/sys/class/bluetooth
-
-[Service]
-Type=dbus
-BusName=org.bluez
-ExecStartPre=-/usr/bin/hciconfig hci0 aclmtu 930:10
-ExecStart=/usr/libexec/bluetooth/bluetoothd
-NotifyAccess=main
-#WatchdogSec=10
-#Restart=on-failure
-CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
-LimitNPROC=1
-ProtectHome=true
-ProtectSystem=full
-
-[Install]
-WantedBy=bluetooth.target
-Alias=dbus-org.bluez.service
diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/obex.service b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/obex.service
deleted file mode 100644
index 87ffff6ae..000000000
--- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/obex.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=Bluetooth OBEX service
-
-[Service]
-Type=dbus
-BusName=org.bluez.obex
-ExecStart=/usr/libexec/bluetooth/obexd --root=/var/volatile/tmp
-
-[Install]
-Alias=dbus-org.bluez.obex.service
diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/tmpdir.conf b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/tmpdir.conf
deleted file mode 100644
index 8545d76ec..000000000
--- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5/tmpdir.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Service]
-Environment="TMPDIR=/run/user/%U/usrshr"
diff --git a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5_%.bbappend
deleted file mode 100644
index 52ae30bc5..000000000
--- a/meta-agl-profile-core/recipes-connectivity/bluez5/bluez5_%.bbappend
+++ /dev/null
@@ -1,24 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
-SRC_URI_append = " \
- file://bluetooth.conf \
- file://tmpdir.conf \
- file://obex.service \
- file://bluetooth.service \
-"
-
-FILES_${PN} += "${systemd_user_unitdir}/obex.service.d/tmpdir.conf"
-
-do_install_append() {
- install -m 0644 ${WORKDIR}/bluetooth.conf ${D}${sysconfdir}/dbus-1/system.d/bluetooth.conf
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- mkdir -p ${D}${systemd_user_unitdir}/obex.service.d
-
- install -m 0644 ${WORKDIR}/obex.service ${D}${systemd_user_unitdir}
- install -m 0644 ${WORKDIR}/tmpdir.conf ${D}${systemd_user_unitdir}/obex.service.d/tmpdir.conf
- mkdir -p ${D}/etc/systemd/user
- ln -sf ${systemd_user_unitdir}/obex.service ${D}/etc/systemd/user/dbus-org.bluez.obex.service
- mkdir -p ${D}${systemd_system_unitdir}
- install -m 0644 ${WORKDIR}/bluetooth.service ${D}${systemd_system_unitdir}
- fi
-}
diff --git a/meta-agl-profile-core/recipes-connectivity/busybox/busybox_%.bbappend b/meta-agl-profile-core/recipes-connectivity/busybox/busybox_%.bbappend
deleted file mode 100644
index 198b651dd..000000000
--- a/meta-agl-profile-core/recipes-connectivity/busybox/busybox_%.bbappend
+++ /dev/null
@@ -1,2 +0,0 @@
-SRC_URI += "file://enable-wget-https.cfg"
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
diff --git a/meta-agl-profile-core/recipes-connectivity/connman/connman_%.bbappend b/meta-agl-profile-core/recipes-connectivity/connman/connman_%.bbappend
deleted file mode 100644
index 469345880..000000000
--- a/meta-agl-profile-core/recipes-connectivity/connman/connman_%.bbappend
+++ /dev/null
@@ -1,20 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI += "file://0001-disable-when-booting-over-nfs.patch \
- file://main.conf \
-"
-
-FILES_${PN} += "${sysconfdir}/connman/main.conf"
-
-PACKAGECONFIG[session-policy-local] = "--enable-session-policy-local,--disable-session-policy-local,"
-PACKAGECONFIG_append = " session-policy-local"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/connman
- install -m 0644 ${WORKDIR}/main.conf ${D}${sysconfdir}/connman
-
- # Need to ignore eth1 in cluster demo setup
- if ${@bb.utils.contains('DISTRO_FEATURES', 'agl-cluster-demo-support', 'true', 'false', d)}; then
- sed -i 's/^\(NetworkInterfaceBlacklist=.*\)/\1,eth1/' ${D}${sysconfdir}/connman/main.conf
- fi
-}
diff --git a/meta-agl-profile-core/recipes-connectivity/connman/files/main.conf b/meta-agl-profile-core/recipes-connectivity/connman/files/main.conf
deleted file mode 100644
index 4dba25b70..000000000
--- a/meta-agl-profile-core/recipes-connectivity/connman/files/main.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-[General]
-FallbackTimeservers=pool.ntp.org
-NetworkInterfaceBlacklist=vmnet,vboxnet,virbr,ifb,meth
diff --git a/meta-agl-profile-core/recipes-connectivity/neard/files/0001-systemd-neard-add-multi-user.target-to-neard.service.patch b/meta-agl-profile-core/recipes-connectivity/neard/files/0001-systemd-neard-add-multi-user.target-to-neard.service.patch
deleted file mode 100644
index c32951693..000000000
--- a/meta-agl-profile-core/recipes-connectivity/neard/files/0001-systemd-neard-add-multi-user.target-to-neard.service.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From d8c03a31e2734e59af43dd50cbd7f5a94d798ab1 Mon Sep 17 00:00:00 2001
-From: Matt Ranostay <matt.ranostay@konsulko.com>
-Date: Tue, 10 Jul 2018 21:18:26 -0700
-Subject: [PATCH] systemd: neard: add multi-user.target to neard.service
-
-Allowing a service to be system level requires a WantedBy= target
-
-Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
----
- src/neard.service.in | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/neard.service.in b/src/neard.service.in
-index dfa238c..540da7e 100644
---- a/src/neard.service.in
-+++ b/src/neard.service.in
-@@ -9,4 +9,5 @@ ExecStart=@pkglibexecdir@/neard -n
- LimitNPROC=1
-
- [Install]
-+WantedBy=multi-user.target
- Alias=dbus-org.neard.service
---
-2.17.1
-
diff --git a/meta-agl-profile-core/recipes-connectivity/neard/files/0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch b/meta-agl-profile-core/recipes-connectivity/neard/files/0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch
deleted file mode 100644
index 49c11a509..000000000
--- a/meta-agl-profile-core/recipes-connectivity/neard/files/0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From d7ea2a00e00795ad24897e3481b015a27d37d60f Mon Sep 17 00:00:00 2001
-From: Raquel Medina <raquel.medina@konsulko.com>
-Date: Tue, 22 Jan 2019 09:00:05 -0500
-Subject: [PATCH] ndef: avoid dbus property_get_type method on empty record
-
-Signed-off-by: Raquel Medina <raquel.medina@konsulko.com>
----
- src/ndef.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/src/ndef.c b/src/ndef.c
-index 5656baf..883c6f4 100644
---- a/src/ndef.c
-+++ b/src/ndef.c
-@@ -2832,10 +2832,14 @@ GList *near_ndef_parse_msg(uint8_t *ndef_data, size_t ndef_length,
- case RECORD_TYPE_WKT_ALTERNATIVE_CARRIER:
- case RECORD_TYPE_WKT_COLLISION_RESOLUTION:
- case RECORD_TYPE_WKT_ERROR:
-- case RECORD_TYPE_UNKNOWN:
- case RECORD_TYPE_ERROR:
- break;
-
-+ case RECORD_TYPE_UNKNOWN:
-+ if (record->header->tnf == RECORD_TNF_EMPTY)
-+ goto fail;
-+ break;
-+
- case RECORD_TYPE_WKT_HANDOVER_REQUEST:
- case RECORD_TYPE_WKT_HANDOVER_SELECT:
- /*
---
-2.17.1
-
diff --git a/meta-agl-profile-core/recipes-connectivity/neard/neard_0.16.bbappend b/meta-agl-profile-core/recipes-connectivity/neard/neard_0.16.bbappend
deleted file mode 100644
index 64a044cb5..000000000
--- a/meta-agl-profile-core/recipes-connectivity/neard/neard_0.16.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI_append = "\
- file://0001-systemd-neard-add-multi-user.target-to-neard.service.patch \
- file://0002-ndef-avoid-dbus-property_get_type-method-on-empty-re.patch \
- "
-SYSTEMD_SERVICE_${PN} = "neard.service"
diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal.inc b/meta-agl-profile-core/recipes-connectivity/neardal/neardal.inc
deleted file mode 100644
index 3bb6b24ec..000000000
--- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Neard Abstraction Library (NeardAL)"
-
-DESCRIPTION = "NeardAL is a library that provides a simple C API \
-to exchange data with NFC daemon (Neard)."
-
-HOMEPAGE = "https://github.com/connectivity/neardal"
-SECTION = "libs"
-LICENSE = "LGPLv2"
-
-DEPENDS = "glib-2.0 readline glib-2.0-native"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=6a6e689d19255cf0557f3fe7d7068212 \
- file://lib/neardal.h;endline=20;md5=a53e93aea9357387078ed217565c0a99"
-
-inherit autotools pkgconfig
-
-PACKAGES =+ "${PN}-tools ${PN}-tools-dbg"
-
-FILES_${PN}-tools = "${libexecdir}/ncl"
-FILES_${PN}-tools-dbg += "${libexecdir}/.debug"
-
-RDEPENDS_${PN}-tools = "bash"
diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch b/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch
deleted file mode 100644
index 596fe0579..000000000
--- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 795308b2452ee617da4096914b53ba3a1142e3db Mon Sep 17 00:00:00 2001
-From: Matt Ranostay <matt.ranostay@konsulko.com>
-Date: Fri, 6 Jul 2018 17:19:09 -0700
-Subject: [PATCH] neardal: ncl: fix segfault on help page being displayed
-
-LISTCMD_NAME is declared as a const char due to being defined in a
-macro so g_strdup it to stop proceeding operations from segfaulting.
-
-Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
-
----
- ncl/ncl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/ncl/ncl.c b/ncl/ncl.c
-index 590d13b..f4165b7 100644
---- a/ncl/ncl.c
-+++ b/ncl/ncl.c
-@@ -329,7 +329,7 @@ int main(int argc, char *argv[])
- g_io_channel_unref(gNclCtx.channel);
-
- if (show_help)
-- ncl_exec(LISTCMD_NAME);
-+ ncl_exec(g_strdup(LISTCMD_NAME));
-
- rl_callback_handler_install(NCL_PROMPT, ncl_parse_line);
-
diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0002-neardal-lib-fix-memory-corruption.patch b/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0002-neardal-lib-fix-memory-corruption.patch
deleted file mode 100644
index d40d9a4fe..000000000
--- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/0002-neardal-lib-fix-memory-corruption.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From ee6267f357b3d158f0a0e88460782e8b9d44274a Mon Sep 17 00:00:00 2001
-From: Raquel Medina <raquel.medina@konsulko.com>
-Date: Fri, 4 Jan 2019 07:43:03 -0500
-Subject: [PATCH] neardal: lib: fix memory corruption
-
- The current commit fixes an invalid memory access
- which manifests as a random segfault when executing
- continuous tag read operations.
-
- The corruption happens when releasing the memory allocated to a
- record: in the time between the memory being g_free'd and the
- subsequent memset operation, the memory could have been reused by
- some other process. And since memory allocation depends on
- system-wide factors, it makes this bug hard to track.
-
- Tested using ACR122U reader and NTAG213
- tags on Automotive Grade Linux (flounder,
- guppy and master branches)
-
-Signed-off-by: Raquel Medina <raquel.medina@konsulko.com>
----
- lib/neardal_record.c | 1 -
- lib/neardal_tools.c | 5 ++++-
- 2 files changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/lib/neardal_record.c b/lib/neardal_record.c
-index 669012c..cfed5e8 100644
---- a/lib/neardal_record.c
-+++ b/lib/neardal_record.c
-@@ -31,7 +31,6 @@ void neardal_record_free(neardal_record *r)
- {
- g_return_if_fail(r);
- neardal_g_strfreev((void **) r, &r->uriObjSize);
-- memset(r, 0, sizeof(*r));
- }
-
- void neardal_free_record(neardal_record *record) \
-diff --git a/lib/neardal_tools.c b/lib/neardal_tools.c
-index f0d6157..f307df6 100644
---- a/lib/neardal_tools.c
-+++ b/lib/neardal_tools.c
-@@ -32,9 +32,12 @@
- void neardal_g_strfreev(void **array, void *end)
- {
- void **p = array;
-- for (; (void *) p < end; p++)
-+ for (; (void *) p < end; p++) {
- g_free(*p);
-+ *p = NULL;
-+ }
- g_free(array);
-+ array = NULL;
- }
-
- void neardal_g_variant_add_parsed(GVariant **v, const char *format, ...)
---
-2.17.1
-
diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/ncl.patch b/meta-agl-profile-core/recipes-connectivity/neardal/neardal/ncl.patch
deleted file mode 100644
index baef6ccaa..000000000
--- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal/ncl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From eab402bae42c3ea5caa8d540b6702d39e56c84c1 Mon Sep 17 00:00:00 2001
-From: Oleg Zhurakivskyy <oleg.zhurakivskyy@intel.com>
-Date: Tue, 10 Feb 2015 12:58:39 +0200
-Subject: [PATCH] build: Install ncl
-
-Signed-off-by: Oleg Zhurakivskyy <oleg.zhurakivskyy@intel.com>
----
- ncl/Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/ncl/Makefile.am b/ncl/Makefile.am
-index beda75b..c06742f 100644
---- a/ncl/Makefile.am
-+++ b/ncl/Makefile.am
-@@ -1,6 +1,6 @@
- AM_CPPFLAGS = @gio_CFLAGS@ -I$(top_builddir)/lib -I$(top_srcdir)/lib
-
--noinst_PROGRAMS=ncl
-+libexec_PROGRAMS = ncl
-
- ncl_SOURCES = \
- $(srcdir)/ncl.c $(srcdir)/ncl.h \
---
-2.1.0
-
diff --git a/meta-agl-profile-core/recipes-connectivity/neardal/neardal_0.14.bb b/meta-agl-profile-core/recipes-connectivity/neardal/neardal_0.14.bb
deleted file mode 100644
index f8634c468..000000000
--- a/meta-agl-profile-core/recipes-connectivity/neardal/neardal_0.14.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require neardal.inc
-
-SRC_URI = "git://github.com/connectivity/neardal.git;protocol=https \
- file://ncl.patch \
- file://0001-neardal-ncl-fix-segfault-on-help-page-being-displaye.patch \
- file://0002-neardal-lib-fix-memory-corruption.patch \
- "
-SRCREV = "fe0fa79c94e9a0f1c2cfa1f58b3acc9bdc7d5e13"
-
-S = "${WORKDIR}/git"
diff --git a/meta-agl-profile-core/recipes-connectivity/ofono/files/0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch b/meta-agl-profile-core/recipes-connectivity/ofono/files/0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch
deleted file mode 100644
index 7b44e483e..000000000
--- a/meta-agl-profile-core/recipes-connectivity/ofono/files/0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 7782f8f9d9634ebeddafefedab10ba254f9cc34a Mon Sep 17 00:00:00 2001
-From: Matt Ranostay <matt.ranostay@konsulko.com>
-Date: Fri, 1 Mar 2019 17:53:17 +0900
-Subject: [PATCH] provision: allow duplicate entries from mbpi_lookup_apn()
- results
-
-Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
----
- plugins/provision.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/plugins/provision.c b/plugins/provision.c
-index 99c299eb..aa0b05e4 100644
---- a/plugins/provision.c
-+++ b/plugins/provision.c
-@@ -50,7 +50,7 @@ static int provision_get_settings(const char *mcc, const char *mnc,
-
- DBG("Provisioning for MCC %s, MNC %s, SPN '%s'", mcc, mnc, spn);
-
-- apns = mbpi_lookup_apn(mcc, mnc, FALSE, &error);
-+ apns = mbpi_lookup_apn(mcc, mnc, TRUE, &error);
- if (apns == NULL) {
- if (error != NULL) {
- ofono_error("%s", error->message);
---
-2.20.1
-
diff --git a/meta-agl-profile-core/recipes-connectivity/ofono/files/ofono.conf b/meta-agl-profile-core/recipes-connectivity/ofono/files/ofono.conf
deleted file mode 100644
index e47214c76..000000000
--- a/meta-agl-profile-core/recipes-connectivity/ofono/files/ofono.conf
+++ /dev/null
@@ -1,30 +0,0 @@
-<!-- This configuration file specifies the required security policies
- for oFono core daemon to work. -->
-
-<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
-
- <!-- ../system.conf have denied everything, so we just punch some holes -->
-
- <policy user="root">
- <allow own="org.ofono"/>
- <allow send_destination="org.ofono"/>
- <allow send_interface="org.ofono.Manager"/>
- <allow send_interface="org.ofono.SimToolkitAgent"/>
- <allow send_interface="org.ofono.PushNotificationAgent"/>
- <allow send_interface="org.ofono.SmartMessagingAgent"/>
- <allow send_interface="org.ofono.PositioningRequestAgent"/>
- <allow send_interface="org.ofono.HandsfreeAudioAgent"/>
- <allow send_interface="org.ofono.Modem"/>
- </policy>
-
- <policy at_console="true">
- <allow send_destination="org.ofono"/>
- </policy>
-
- <policy context="default">
- <deny send_destination="org.ofono"/>
- </policy>
-
-</busconfig>
diff --git a/meta-agl-profile-core/recipes-connectivity/ofono/ofono_%.bbappend b/meta-agl-profile-core/recipes-connectivity/ofono/ofono_%.bbappend
deleted file mode 100644
index b02d6ee22..000000000
--- a/meta-agl-profile-core/recipes-connectivity/ofono/ofono_%.bbappend
+++ /dev/null
@@ -1,11 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-SRC_URI_append = "\
- file://ofono.conf \
- file://0001-provision-allow-duplicate-entries-from-mbpi_lookup_a.patch \
- "
-
-do_install_append() {
- install -m 0644 ${WORKDIR}/ofono.conf ${D}${sysconfdir}/dbus-1/system.d/ofono.conf
-}
-
-SYSTEMD_AUTO_ENABLE = "enable"
diff --git a/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr/0001-remove-I-usr-include-in-pkg-config.patch b/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr/0001-remove-I-usr-include-in-pkg-config.patch
deleted file mode 100644
index 86b7392df..000000000
--- a/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr/0001-remove-I-usr-include-in-pkg-config.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 3aeaf8054fcb2617ca8f6196ca32be3e69337f77 Mon Sep 17 00:00:00 2001
-From: Martin Kelly <mkelly@xevo.com>
-Date: Fri, 21 Apr 2017 10:29:19 -0700
-Subject: [PATCH] remove -I/usr/include in pkg-config
-
-This shouldn't be necessary as it's part of the default compiler include
-paths anyway. Morever, it can cause GCC 6 C++ build failures in
-downstream packages when combined with QMake (such as
-qtmultimedia-rtlfm-radio-plugin).
-
-Fix these issues by removing it.
-
-Upstream-Status: Inappropriate [disable-feature]
-
-This patch should not go upstream because it breaks the ability to build
-with --prefix. That's not a problem for Openembedded, but it is for
-upstream more generally. See this mail thread for more information:
-
-http://lists.osmocom.org/pipermail/osmocom-sdr/2017-April/001580.html
-
-Signed-off-by: Martin Kelly <mkelly@xevo.com>
----
- librtlsdr.pc.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/librtlsdr.pc.in b/librtlsdr.pc.in
-index 5e55049..84b6d0c 100644
---- a/librtlsdr.pc.in
-+++ b/librtlsdr.pc.in
-@@ -6,6 +6,6 @@ includedir=@includedir@
- Name: RTL-SDR Library
- Description: C Utility Library
- Version: @VERSION@
--Cflags: -I${includedir}/ @RTLSDR_PC_CFLAGS@
-+Cflags: @RTLSDR_PC_CFLAGS@
- Libs: -L${libdir} -lrtlsdr -lusb-1.0
- Libs.private: @RTLSDR_PC_LIBS@
---
-2.1.4
-
diff --git a/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb b/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb
deleted file mode 100644
index b442d9f46..000000000
--- a/meta-agl-profile-core/recipes-connectivity/rtl-sdr/rtl-sdr_0.5.3.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Turns a Realtek RTL2832U-based DVB dongle into a SDR receiver"
-DESCRIPTION = "DVB-T dongles based on the Realtek RTL2832U chipset can be used as Software Digital Radio adapters, since the chip allows transferring raw I/Q samples to the host, which is really used for DAB/DAB+/FM demodulation."
-HOMEPAGE = "http://sdr.osmocom.org/trac/wiki/rtl-sdr"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
- file://src/librtlsdr.c;endline=18;md5=1b05599c3ebd4d74857a0a7c45f3d4ef"
-
-DEPENDS = "libusb1"
-
-SRC_URI = "git://git.osmocom.org/rtl-sdr \
- file://0001-remove-I-usr-include-in-pkg-config.patch \
- "
-SRCREV = "e3c03f738f5aef4dc51e2b741fbdb542b9cc1bb1"
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--enable-driver-detach"
-
-do_configure_append() {
- # remove included temporary path from pc file due to pass-through of OE CFLAGS
- # debug-prefix-map
- # See: http://lists.openembedded.org/pipermail/openembedded-devel/2016-May/107456.html
- sed -i -e "s# -fdebug-prefix-map=.*##g;s# -fmacro-prefix-map=.*##g" librtlsdr.pc
-}
-
-do_install_append() {
- install -D -m 0644 ${S}/rtl-sdr.rules ${D}${sysconfdir}/udev/rules.d/55-rtl-sdr.rules
- sed -i 's/MODE:="0666"/GROUP="audio", MODE="0660", SECLABEL{smack}="*"/' \
- ${D}${sysconfdir}/udev/rules.d/55-rtl-sdr.rules
-}
diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.service b/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.service
deleted file mode 100644
index dee6ad741..000000000
--- a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=D-Bus User Message Bus
-Documentation=man:dbus-daemon(1)
-Requires=dbus.socket
-
-[Service]
-ExecStart=/usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
-ExecReload=/usr/bin/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig
-Restart=always
-RestartSec=1
diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.socket b/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.socket
deleted file mode 100644
index af76b2f12..000000000
--- a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus.socket
+++ /dev/null
@@ -1,9 +0,0 @@
-[Unit]
-Description=D-Bus User Message Bus Socket
-Before=sockets.target
-
-[Socket]
-ListenStream=%t/bus
-
-[Install]
-WantedBy=default.target
diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus_env.conf b/meta-agl-profile-core/recipes-core/dbus/dbus/dbus_env.conf
deleted file mode 100644
index f8f02669b..000000000
--- a/meta-agl-profile-core/recipes-core/dbus/dbus/dbus_env.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-[Unit]
-Wants=dbus.service
-
-[Service]
-Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%I/bus
diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus/libdbus-c++/dbus-c++-threading.patch b/meta-agl-profile-core/recipes-core/dbus/dbus/libdbus-c++/dbus-c++-threading.patch
deleted file mode 100644
index c4fafef62..000000000
--- a/meta-agl-profile-core/recipes-core/dbus/dbus/libdbus-c++/dbus-c++-threading.patch
+++ /dev/null
@@ -1,45 +0,0 @@
---- libdbus-c++-0.9.0/include/dbus-c++/dispatcher.h.threading 2017-02-15 13:40:53.796004263 +0000
-+++ libdbus-c++-0.9.0/include/dbus-c++/dispatcher.h 2017-02-15 13:40:46.907000493 +0000
-@@ -188,6 +188,7 @@
- /* classes for multithreading support
- */
-
-+#if 0
- class DXXAPI Mutex
- {
- public:
-@@ -243,9 +244,11 @@
- typedef bool (*CondVarWaitTimeoutFn)(CondVar *cv, Mutex *mx, int timeout);
- typedef void (*CondVarWakeOneFn)(CondVar *cv);
- typedef void (*CondVarWakeAllFn)(CondVar *cv);
-+#endif
-
- void DXXAPI _init_threading();
-
-+#if 0
- void DXXAPI _init_threading(
- MutexNewFn, MutexFreeFn, MutexLockFn, MutexUnlockFn,
- CondVarNewFn, CondVarFreeFn, CondVarWaitFn, CondVarWaitTimeoutFn, CondVarWakeOneFn, CondVarWakeAllFn
-@@ -312,6 +315,7 @@
- cv->wake_all();
- }
- };
-+#endif
-
- } /* namespace DBus */
-
---- libdbus-c++-0.9.0/src/dispatcher.cpp.threading 2017-02-15 13:48:22.627249868 +0000
-+++ libdbus-c++-0.9.0/src/dispatcher.cpp 2017-02-15 13:48:29.164253445 +0000
-@@ -253,6 +253,7 @@
- #endif//DBUS_HAS_THREADS_INIT_DEFAULT
- }
-
-+#if 0
- void DBus::_init_threading(
- MutexNewFn m1,
- MutexFreeFn m2,
-@@ -318,3 +319,4 @@
- #endif//DBUS_HAS_RECURSIVE_MUTEX
- dbus_threads_init(&functions);
- }
-+#endif
diff --git a/meta-agl-profile-core/recipes-core/dbus/dbus_%.bbappend b/meta-agl-profile-core/recipes-core/dbus/dbus_%.bbappend
deleted file mode 100644
index 379c5435e..000000000
--- a/meta-agl-profile-core/recipes-core/dbus/dbus_%.bbappend
+++ /dev/null
@@ -1,28 +0,0 @@
-FILESEXTRAPATHS_append := ":${THISDIR}/dbus"
-
-SRC_URI += "file://dbus.service \
- file://dbus.socket \
- file://dbus_env.conf \
- "
-
-inherit systemd
-
-do_install_append() {
- if [ "${PN}" != "nativesdk-dbus" ]; then
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -m 644 -p -D ${WORKDIR}/dbus.service ${D}${systemd_user_unitdir}/dbus.service
- install -m 644 -p -D ${WORKDIR}/dbus.socket ${D}${systemd_user_unitdir}/dbus.socket
- install -m 644 -p -D ${WORKDIR}/dbus_env.conf ${D}${systemd_system_unitdir}/user@.service.d/dbus_env.conf
-
- # Execute these manually on behalf of systemctl script (from systemd-systemctl-native.bb)
- # because it does not support systemd's user mode.
- mkdir -p ${D}/etc/systemd/user/default.target.wants/
- ln -sf ${systemd_user_unitdir}/dbus.socket ${D}/etc/systemd/user/default.target.wants/dbus.socket
- fi
- fi
-}
-
-FILES_${PN} += " \
- ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${systemd_user_unitdir}/dbus.*', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${systemd_system_unitdir}/user@.service.d/dbus_env.conf', '', d)} \
- "
diff --git a/meta-agl-profile-core/recipes-core/dbus/libdbus-c++/dbus-c++-threading.patch b/meta-agl-profile-core/recipes-core/dbus/libdbus-c++/dbus-c++-threading.patch
deleted file mode 100644
index c4fafef62..000000000
--- a/meta-agl-profile-core/recipes-core/dbus/libdbus-c++/dbus-c++-threading.patch
+++ /dev/null
@@ -1,45 +0,0 @@
---- libdbus-c++-0.9.0/include/dbus-c++/dispatcher.h.threading 2017-02-15 13:40:53.796004263 +0000
-+++ libdbus-c++-0.9.0/include/dbus-c++/dispatcher.h 2017-02-15 13:40:46.907000493 +0000
-@@ -188,6 +188,7 @@
- /* classes for multithreading support
- */
-
-+#if 0
- class DXXAPI Mutex
- {
- public:
-@@ -243,9 +244,11 @@
- typedef bool (*CondVarWaitTimeoutFn)(CondVar *cv, Mutex *mx, int timeout);
- typedef void (*CondVarWakeOneFn)(CondVar *cv);
- typedef void (*CondVarWakeAllFn)(CondVar *cv);
-+#endif
-
- void DXXAPI _init_threading();
-
-+#if 0
- void DXXAPI _init_threading(
- MutexNewFn, MutexFreeFn, MutexLockFn, MutexUnlockFn,
- CondVarNewFn, CondVarFreeFn, CondVarWaitFn, CondVarWaitTimeoutFn, CondVarWakeOneFn, CondVarWakeAllFn
-@@ -312,6 +315,7 @@
- cv->wake_all();
- }
- };
-+#endif
-
- } /* namespace DBus */
-
---- libdbus-c++-0.9.0/src/dispatcher.cpp.threading 2017-02-15 13:48:22.627249868 +0000
-+++ libdbus-c++-0.9.0/src/dispatcher.cpp 2017-02-15 13:48:29.164253445 +0000
-@@ -253,6 +253,7 @@
- #endif//DBUS_HAS_THREADS_INIT_DEFAULT
- }
-
-+#if 0
- void DBus::_init_threading(
- MutexNewFn m1,
- MutexFreeFn m2,
-@@ -318,3 +319,4 @@
- #endif//DBUS_HAS_RECURSIVE_MUTEX
- dbus_threads_init(&functions);
- }
-+#endif
diff --git a/meta-agl-profile-core/recipes-core/dbus/libdbus-c++_0.9.0.bbappend b/meta-agl-profile-core/recipes-core/dbus/libdbus-c++_0.9.0.bbappend
deleted file mode 100644
index dac44b5e6..000000000
--- a/meta-agl-profile-core/recipes-core/dbus/libdbus-c++_0.9.0.bbappend
+++ /dev/null
@@ -1,2 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
-SRC_URI_append = "file://dbus-c++-threading.patch"
diff --git a/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb b/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb
deleted file mode 100644
index 823cc28a1..000000000
--- a/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb
+++ /dev/null
@@ -1,164 +0,0 @@
-SUMMARY = "Distribution build manifest"
-DESCRIPTION = "The folder /etc/platform-info contains build manifest (SPEC-720)."
-LICENSE = "MIT"
-
-# information distributed by the package is machine specific
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-# dependencies of ${DISTRO_MANIFEST_GENERATOR}
-DEPENDS = "coreutils-native bash-native git-native gawk-native sed-native jq-native"
-
-# force a rebuild everytime a build is started
-do_compile[nostamp] = "1"
-
-# borrowed to os-release.bb (output format is very close)
-python do_compilestep1 () {
- import shutil
- with open(d.expand('${B}/bbinfo-deploy'),'w') as f:
- allkeys=[]
- for field in d.getVar('BUILD_MANIFEST_FIELDS_DEPLOY').split():
- key='DIST_BB_{0}'.format(field)
- allkeys.append(key)
- value=d.getVar(field)
- if value:
- f.write('{0}="{1}"\n'.format(key,value))
- f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[deploy]="%s"' % ' '.join(allkeys))
-
- with open(d.expand('${B}/bbinfo-target'),'w') as f:
- allkeys=[]
- for field in d.getVar('BUILD_MANIFEST_FIELDS_TARGET').split():
- key='DIST_BB_{0}'.format(field)
- allkeys.append(key)
- value=d.getVar(field)
- if value:
- f.write('{0}="{1}"\n'.format(key,value))
- f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[target]="%s"' % ' '.join(allkeys))
-
- with open(d.expand('${B}/bbinfo-sdk'),'w') as f:
- allkeys=[]
- for field in d.getVar('BUILD_MANIFEST_FIELDS_SDK').split():
- key='DIST_BB_{0}'.format(field)
- allkeys.append(key)
- value=d.getVar(field)
- if value:
- f.write('{0}="{1}"\n'.format(key,value))
- f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[sdk]="%s"' % ' '.join(allkeys))
-}
-
-do_compilestep2 () {
- rc=99
- timestamp=${DATETIME}
- outfile=${B}/build-info
- if [ -x "${DISTRO_MANIFEST_GENERATOR}" -a -f "${DISTRO_SETUP_MANIFEST}" ]; then
- rc=0
- for format in bash json; do
- if [ "$format" = "json" ]; then
- ext=".json"
- else
- ext=""
- fi
- for mode in deploy target sdk; do
- ${DISTRO_MANIFEST_GENERATOR} -m $mode -f $format -t $timestamp -s ${B}/bbinfo-${mode} ${DISTRO_SETUP_MANIFEST} >${outfile}-${mode}${ext}
- rc=$?
- if [ $rc -ne 0 ]; then
- break
- fi
- done
- done
- else
- if [ -z "${DISTRO_MANIFEST_GENERATOR}" ]; then
- echo "The name of the generation script is not defined."
- elif [ ! -f "${DISTRO_MANIFEST_GENERATOR}" ]; then
- echo "Generation script ${DISTRO_MANIFEST_GENERATOR} is missing."
- elif [ ! -x "${DISTRO_MANIFEST_GENERATOR}" ]; then
- echo "Generation script ${DISTRO_MANIFEST_GENERATOR} isn't executable."
- fi
- if [ -z "${DISTRO_SETUP_MANIFEST}" ]; then
- echo "The name of the data file is not defined."
- elif [ ! -f "${DISTRO_SETUP_MANIFEST}" ]; then
- echo "Data file ${DISTRO_SETUP_MANIFEST} is missing."
- fi
- echo "You can try to rerun aglsetup.sh to solve that issue."
- echo "You can also try to source agl-init-build-env instead of oe-init-build-env."
- fi
-
- if [ "$rc" -ne 0 ]; then
- echo "distro-build-manifest generation failed."
- fi
- return $rc
-}
-
-do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_DEPLOY}"
-do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_TARGET}"
-do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_SDK}"
-
-# avoid errors "ERROR: When reparsing .../distro-build-manifest/distro-build-manifest.bb.do_compile, the basehash value changed from .... to .... . The metadata is not deterministic and this needs to be fixed."
-do_compilestep2[vardepsexclude] = "DATETIME"
-
-# combine the two steps
-python do_compile() {
- bb.build.exec_func("do_compilestep1",d)
- bb.build.exec_func("do_compilestep2",d)
-}
-
-do_install () {
- # install in target dir
- install -d ${D}${sysconfdir}/platform-info
- install -m 0644 build-info-target ${D}${sysconfdir}/platform-info/build
- install -m 0644 build-info-target.json ${D}${sysconfdir}/platform-info/build.json
-
- # also copy in deploy dir
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 build-info-deploy ${DEPLOY_DIR_IMAGE}/build-info
- install -m 0644 build-info-deploy.json ${DEPLOY_DIR_IMAGE}/build-info.json
-
- # copy into sdk deploy dir
- install -d ${DEPLOY_DIR}/sdk
- install -m 0644 build-info-sdk ${DEPLOY_DIR}/sdk/${SDK_NAME}.build-info
- install -m 0644 build-info-sdk.json ${DEPLOY_DIR}/sdk/${SDK_NAME}.build-info.json
-
- # and copy to nativesdk package
- # TODO
-}
-
-# list of variables to add to the various manifests
-# smalles one is 'target', then 'deploy' and finally 'sdk'
-BUILD_MANIFEST_FIELDS_TARGET = "\
- MACHINE_ARCH \
- MACHINEOVERRIDES \
- MACHINE_FEATURES \
- DISTRO_CODENAME \
- DISTRO_FEATURES \
- DISTRO_BRANCH_VERSION_TAG \
- AGLVERSION \
- AGL_BRANCH \
- AGLRELEASETYPE \
-"
-
-BUILD_MANIFEST_FIELDS_DEPLOY = "\
- ${BUILD_MANIFEST_FIELDS_TARGET} \
- DISTRO \
- DISTRO_VERSION \
- DISTROOVERRIDES \
- TUNE_FEATURES \
- TUNE_PKGARCH \
- ALL_MULTILIB_PACKAGE_ARCHS \
-"
-
-BUILD_MANIFEST_FIELDS_SDK = "\
- ${BUILD_MANIFEST_FIELDS_DEPLOY} \
- HOST_SYS \
- TARGET_SYS \
- TARGET_VENDOR \
- SDK_ARCH \
- SDK_VENDOR \
- SDK_VERSION \
- SDK_OS \
-"
-
-# dont exec useless tasks
-do_fetch[noexec] = "1"
-do_unpack[noexec] = "1"
-do_patch[noexec] = "1"
-do_configure[noexec] = "1"
-
diff --git a/meta-agl-profile-core/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend b/meta-agl-profile-core/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend
deleted file mode 100644
index 301a1d573..000000000
--- a/meta-agl-profile-core/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-RDEPENDS_${PN}_remove_sota = "systemtap"
diff --git a/meta-agl-profile-core/recipes-core/psplash/files/psplash-colors.h b/meta-agl-profile-core/recipes-core/psplash/files/psplash-colors.h
deleted file mode 100644
index 447490397..000000000
--- a/meta-agl-profile-core/recipes-core/psplash/files/psplash-colors.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * pslash - a lightweight framebuffer splashscreen for embedded devices.
- *
- * Copyright (c) 2012 sleep(5) ltd
- * Author: Tomas Frydrych <tomas@sleepfive.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- */
-
-#ifndef _HAVE_PSPLASH_COLORS_H
-#define _HAVE_PSPLASH_COLORS_H
-
-/* This is the overall background color */
-#define PSPLASH_BACKGROUND_COLOR 0xff,0xff,0xff
-
-/* This is the color of any text output */
-#define PSPLASH_TEXT_COLOR 0x00,0x00,0x00
-
-/* This is the color of the progress bar indicator */
-#define PSPLASH_BAR_COLOR 0x00,0x00,0x00
-
-/* This is the color of the progress bar background */
-#define PSPLASH_BAR_BACKGROUND_COLOR 0xff,0xff,0xff
-
-#endif
diff --git a/meta-agl-profile-core/recipes-core/psplash/files/psplash-poky-img.h b/meta-agl-profile-core/recipes-core/psplash/files/psplash-poky-img.h
deleted file mode 100644
index c0e8b0818..000000000
--- a/meta-agl-profile-core/recipes-core/psplash/files/psplash-poky-img.h
+++ /dev/null
@@ -1,5411 +0,0 @@
-/* GdkPixbuf RGB C-Source image dump 1-byte-run-length-encoded */
-
-#define POKY_IMG_ROWSTRIDE (1800)
-#define POKY_IMG_WIDTH (600)
-#define POKY_IMG_HEIGHT (400)
-#define POKY_IMG_BYTES_PER_PIXEL (3) /* 3:RGB, 4:RGBA */
-#define POKY_IMG_RLE_PIXEL_DATA ((uint8*) \
- "\377\377\377\377\377\377\377\377\203\377\377\377\1\376\376\376\221\377" \
- "\377\377\1\376\376\376\215\377\377\377\1\376\376\376\203\377\377\377" \
- "\1\376\376\376\233\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \
- "\376\202\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377" \
- "\376\376\376\206\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \
- "\376\204\377\377\377\1\376\376\376\203\377\377\377\5\376\376\376\377" \
- "\377\377\376\376\376\377\377\377\376\376\376\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\202\376\376\376\207\377\377" \
- "\377\1\376\376\376\205\377\377\377\1\376\376\376\211\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\235\377\377\377\1\376\376\376\203\377" \
- "\377\377\1\376\376\376\213\377\377\377\3\376\376\376\377\377\377\376" \
- "\376\376\216\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\365\377\377\377\1\376" \
- "\376\376\203\377\377\377\1\376\376\376\207\377\377\377\1\376\376\376" \
- "\203\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\205\377" \
- "\377\377\1\376\376\376\203\377\377\377\12\376\376\376\377\377\377\346" \
- "\346\346\315\315\315\316\316\316\265\265\265\235\235\235\234\234\234" \
- "\233\233\233\204\204\204\203kkm\202lln\2EEG;;=\215::<\204kkm\3kkkxxx" \
- "\235\235\235\202\234\234\234\1\265\265\265\202\316\316\316\1\332\332" \
- "\332\207\377\377\377\202\376\376\376\2\377\377\377\376\376\376\211\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\203\377\377\377\5\376" \
- "\376\376\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\366\377\377\377\1\376\376\376\205" \
- "\377\377\377\1\376\376\376\214\377\377\377\11\376\376\376\332\332\332" \
- "\316\316\320\247\247\251\236\236\240\204\204\206kkm__a<<>\202::<\11;" \
- ";=99;;;=99;::<;;=::<;;=99;\203::<\1<<>\213::<\13;;=::<;;=::<;;=::<;;" \
- "=::<;;=::<;;=\207::<\3SSUllnxxz\202\234\234\236\202\316\316\316\2\377" \
- "\377\377\376\376\376\214\377\377\377\1\376\376\376\203\377\377\377\1" \
- "\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\376\377" \
- "\377\377\1\376\376\376\203\377\377\377\1\376\376\376\203\377\377\377" \
- "\7\332\332\334\302\302\304\234\234\236\203\203\205llnEEG;;=\202::<\6" \
- ";;=::<;;=::<;;=99;\204::<\1""99;\202;;=\1""99;\205::<\1;;=\213::<\11" \
- ";;=::<;;=::<;;=::<;;=::<;;=\202::<\1""99;\206::<\1;;=\203::<\13;;=99" \
- ";;;=::<;;=::<kkmxxz\234\234\236\300\300\302\316\316\316\203\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \
- "\376\204\377\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\374\377\377\377\7\346\346\350\301\301\303\235\235\237ww" \
- "y``b99;;;=\202::<\1;;=\204::<\203;;=\3::<99;;;=\207::<\202;;=\204::<" \
- "\203;;=\215::<\1;;=\207::<\11;;=::<;;=99;::<;;=::<99;::<\202;;=\5::<" \
- ";;=::<;;=99;\202::<\2;;=::<\202;;=\6::<SSUkkm\235\235\237\264\264\266" \
- "\332\332\334\210\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\377\377\377\377\377\377\377\377\377\377\377\377\362\377\377\377" \
- "\1\376\376\376\202\377\377\377\11\346\346\350\265\265\267\221\221\223" \
- "kkm::<;;=::<99;;;=\203::<\1;;=\202::<\3""99;::<;;=\202::<\4;;=99;::<" \
- ";;=\204::<\1;;=\202::<\202;;=\1::<\202;;=\202::<\1;;=\203::<\1;;=\211" \
- "::<\2;;=99;\202::<\2;;=99;\206::<\1;;=\202::<\2""99;;;=\210::<\1;;=\202" \
- "::<\1;;=\203::<\1;;=\203::<\1;;=\202::<\4kkm\222\222\224\265\265\267" \
- "\332\332\334\204\377\377\377\1\376\376\376\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\362\377\377\377\12\363\363\363\316\316\316\235\235" \
- "\235jjjFFH;;=::<;;=::<;;=\202::<\1;;=\204::<\1""99;\202::<\2;;=::<\202" \
- ";;=\204::<\7;;=::<;;=::<;;=::<;;=\203::<\1;;=\202::<\1;;=\217::<\2""9" \
- "9;;;=\203::<\1;;=\202::<\4""99;;;=::<;;=\203::<\2;;=99;\202::<\1;;=\207" \
- "::<\1;;=\213::<\1;;=\204::<\7kkk\221\221\221\301\301\301\363\363\363" \
- "\376\376\376\377\377\377\376\376\376\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\321\377\377\377\1\376\376\376\202\377\377\377\1\376" \
- "\376\376\221\377\377\377\1\376\376\376\204\377\377\377\4\363\363\365" \
- "\301\301\303\222\222\224__a\220::<\3;;=::<;;=\204::<\203;;=\203::<\2" \
- ";;=::<\202;;=\4::<;;=::<;;=\204::<\1;;=\202::<\4;;=::<99;;;=\211::<\1" \
- "99;\205::<\202;;=\210::<\5;;=::<;;=::<;;=\203::<\1;;=\212::<\4;;=99;" \
- ";;=99;\211::<\4SSU\204\204\206\266\266\270\345\345\345\221\377\377\377" \
- "\1\376\376\376\204\377\377\377\202\376\376\376\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\266\377\377\377\1\376\376\376\203\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\207\377\377\377\1\376\376" \
- "\376\210\377\377\377\10\363\363\363\301\301\301\221\221\221``b99;;;=" \
- "::<;;=\213::<\3;;=::<;;=\203::<\1;;=\204::<\2;;=99;\202::<\1""99;\202" \
- ";;=\204::<\1;;=\210::<\202;;=\202::<\2;;=99;\215::<\1;;=\204::<\1;;=" \
- "\205::<\5;;=99;;;=::<;;=\202::<\202;;=\4""99;;;=::<;;=\203::<\1;;=\204" \
- "::<\3;;=99;;;=\210::<\11;;=::<;;=99;;;=SSS\205\205\205\266\266\266\363" \
- "\363\363\202\377\377\377\1\376\376\376\206\377\377\377\1\376\376\376" \
- "\204\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\266\377\377\377\1\376\376\376" \
- "\204\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376\207\377" \
- "\377\377\5\376\376\376\333\333\335\250\250\252kkm;;=\203::<\202;;=\212" \
- "::<\10;;=::<;;=::<;;=::<;;=::<\202;;=\206::<\10;;=::<;;=::<;;=::<;;=" \
- "::<\202;;=\2::<;;=\203::<\3;;=::<;;=\202::<\1;;=\202::<\1;;=\211::<\1" \
- "99;\202;;=\203::<\1;;=\205::<\1;;=\204::<\1;;=\206::<\203;;=\202::<\1" \
- ";;=\206::<\1;;=\213::<\1;;=\204::<\1;;=\202::<\3__a\221\221\223\316\316" \
- "\316\204\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\207" \
- "\377\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\267\377\377\377\202\376\376\376\210\377\377\377\1\376\376\376\207" \
- "\377\377\377\3\301\301\301\204\204\206SSU\203::<\3;;=::<;;=\202::<\2" \
- "99;;;=\215::<\1;;=\204::<\2;;=99;\202::<\202;;=\202::<\7""99;::<;;=:" \
- ":<;;=99;;;=\202::<\2""99;;;=\202::<\1;;=\207::<\1;;=\211::<\2""99;;;" \
- "=\202::<\3;;=::<;;=\202::<\2""99;;;=\206::<\4;;=::<;;=::<\202;;=\206" \
- "::<\3;;=::<;;=\202::<\5;;=::<;;=99;;;=\220::<\2;;=::<\202;;=\5""99;G" \
- "GIxxx\265\265\265\363\363\363\207\377\377\377\1\376\376\376\205\377\377" \
- "\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\274" \
- "\377\377\377\1\376\376\376\204\377\377\377\202\376\376\376\4\364\364" \
- "\364\265\265\265xxz;;=\20299;\202::<\1""99;\204::<\3;;=::<;;=\213::<" \
- "\1;;=\203::<\3;;=::<;;=\207::<\2;;=::<\202;;=\4""99;;;=::<;;=\202::<" \
- "\5__allnkkm\221\221\223\235\235\237\202\234\234\236\6\317\317\317\315" \
- "\315\315\317\317\317\315\315\315\316\316\316\346\346\346\213\377\377" \
- "\377\3\376\376\376\377\377\377\346\346\346\204\316\316\316\5\316\316" \
- "\320\251\251\253\234\234\236\233\233\235\235\235\237\203kkm\202::<\1" \
- ";;=\202::<\6;;=::<;;=99;::<;;=\205::<\2;;=::<\203;;=\202::<\1;;=\212" \
- "::<\1;;=\202::<\1;;=\202::<\1;;=\204::<\1;;=\202::<\3lln\250\250\252" \
- "\346\346\350\206\377\377\377\1\376\376\376\204\377\377\377\1\376\376" \
- "\376\377\377\377\377\377\377\377\377\377\377\377\377\271\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\4\362\362" \
- "\362\266\266\270xxz::<\202;;=\202::<\10;;=::<99;;;=::<;;=::<;;=\203:" \
- ":<\1;;=\213::<\3;;=::<;;=\205::<\1;;=\202::<\1<<>\202::<\7llnkkm\233" \
- "\233\235\235\235\237\302\302\304\316\316\320\347\347\351\241\377\377" \
- "\377\202\376\376\376\203\377\377\377\17\376\376\376\377\377\377\376\376" \
- "\376\377\377\377\376\376\376\363\363\363\316\316\316\315\315\315\234" \
- "\234\234\235\235\235xxxllnFFH::<;;=\205::<\5;;=99;;;=::<;;=\212::<\202" \
- ";;=\212::<\5;;=99;;;=::<99;\202::<\5__a\250\250\252\346\346\346\377\377" \
- "\377\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\271\377\377\377\202\376\376\376\2\377\377\377" \
- "\376\376\376\203\377\377\377\3\363\363\363\266\266\266wwy\202;;=\210" \
- "::<\1<<>\203::<\2<<>99;\215::<\1;;=\205::<\11;;=::<;;;___xxx\235\235" \
- "\235\266\266\266\315\315\315\364\364\364\207\377\377\377\1\376\376\376" \
- "\213\377\377\377\1\376\376\376\231\377\377\377\5\376\376\376\377\377" \
- "\377\376\376\376\377\377\377\376\376\376\202\377\377\377\1\376\376\376" \
- "\204\377\377\377\1\376\376\376\202\377\377\377\5\316\316\316\302\302" \
- "\302\233\233\233yyykkk\202::<\6;;=::<;;=::<99;;;=\211::<\1;;=\202::<" \
- "\1;;=\206::<\1""99;\202;;=\202::<\203;;=\1""99;\202::<\3__a\251\251\253" \
- "\346\346\346\204\377\377\377\3\376\376\376\377\377\377\376\376\376\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\266\377\377\377\1\376\376" \
- "\376\202\377\377\377\2\302\302\302xxx\203::<\3;;=::<;;=\232::<\1;;=\202" \
- "::<\6RRTkkm\235\235\237\301\301\303\332\332\334\376\376\376\222\377\377" \
- "\377\1\376\376\376\260\377\377\377\3\376\376\376\377\377\377\376\376" \
- "\376\202\377\377\377\5\345\345\347\316\316\320\235\235\237xxzSSU\215" \
- "::<\202;;=\202::<\203;;=\2::<;;=\203::<\1;;=\204::<\10;;=::<;;=::<;;" \
- "=kkm\266\266\266\363\363\363\202\377\377\377\1\376\376\376\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\245\377\377\377\1\376\376\376\214" \
- "\377\377\377\1\376\376\376\202\377\377\377\5\376\376\376\377\377\377" \
- "\332\332\332\205\205\207GGI\202::<\1;;=\211::<\202;;=\205::<\2;;=::<" \
- "\202;;=\203::<\14;;=99;::<;;=99;;;=FFFxxx\234\234\234\315\315\315\364" \
- "\364\364\376\376\376\323\377\377\377\4\317\317\317\250\250\250xxxSSS" \
- "\202::<\1;;=\206::<\2;;=::<\203;;=\202::<\2;;=99;\204::<\7;;=::<;;=:" \
- ":<;;=::<;;=\204::<\3\204\204\206\301\301\301\376\376\376\220\377\377" \
- "\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\225" \
- "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\206\377\377" \
- "\377\1\376\376\376\202\377\377\377\4\363\363\363\251\251\251___;;=\202" \
- "::<\1;;=\202::<\202;;=\204::<\1;;=\202::<\7;;=::<;;=::<;;=::<;;=\203" \
- "::<\3""99;::<;;=\202::<\5;;=__a\221\221\223\265\265\267\346\346\346\323" \
- "\377\377\377\1\376\376\376\211\377\377\377\5\363\363\363\301\301\303" \
- "\235\235\237lln::<\202;;=\203::<\1;;=\204::<\1;;=\202::<\2""99;;;=\205" \
- "::<\2;;=99;\203::<\1""99;\204::<\3TTT\233\233\233\346\346\346\207\377" \
- "\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\250\377\377\377\3\316\316\316\204\204\204;;=\203::<\1;;=\203::<\1;;" \
- "=\202::<\1;;=\205::<\3;;=::<;;=\202::<\4""99;;;=::<;;=\202::<\202;;=" \
- "\4___\221\221\221\301\301\303\363\363\365\203\377\377\377\1\376\376\376" \
- "\203\377\377\377\202\376\376\376\321\377\377\377\1\376\376\376\210\377" \
- "\377\377\1\376\376\376\202\377\377\377\4\316\316\316\235\235\235kkk;" \
- ";=\202::<\202;;=\203::<\5;;=::<;;=99;;;=\204::<\202;;=\7::<;;=99;::<" \
- ";;=::<;;=\202::<\202;;=\2xxz\302\302\304\213\377\377\377\1\376\376\376" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\1\376" \
- "\376\376\212\377\377\377\3\363\363\363\266\266\266TTV\203::<\3;;=::<" \
- ";;=\202::<\203;;=\202::<\202;;=\205::<\1;;=\202::<\1;;=\204::<\4SSU\221" \
- "\221\223\301\301\301\363\363\363\206\377\377\377\1\376\376\376\203\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\315\377\377\377" \
- "\202\376\376\376\202\377\377\377\1\376\376\376\210\377\377\377\1\376" \
- "\376\376\202\377\377\377\1\376\376\376\202\377\377\377\3\316\316\316" \
- "\221\221\223__a\203::<\1;;=\203::<\3;;=::<;;=\203::<\5;;=99;;;=::<;;" \
- "=\204::<\1""99;\205::<\3SSU\234\234\236\346\346\346\207\377\377\377\3" \
- "\376\376\376\377\377\377\376\376\376\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\233\377\377\377\4\376\376\376\347\347\347\221\221\221" \
- "FFH\207::<\4""99;;;=::<;;=\20299;\202;;=\202::<\1;;=\203::<\2;;=::<\202" \
- ";;=\202::<\3xxz\250\250\252\346\346\350\215\377\377\377\203\376\376\376" \
- "\316\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\211\377" \
- "\377\377\1\376\376\376\211\377\377\377\4\363\363\363\265\265\267\205" \
- "\205\207FFH\210::<\3;;=::<;;=\204::<\1;;=\207::<\2;;=::<\202;;=\2\203" \
- "\203\205\317\317\321\206\377\377\377\1\376\376\376\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\233\377\377\377\3\316\316\316yy{99;\206" \
- "::<\2;;=99;\202;;=\205::<\5""99;::<;;=::<;;=\202::<\6;;=::<;;=SSU\204" \
- "\204\204\301\301\301\226\377\377\377\1\376\376\376\317\377\377\377\1" \
- "\376\376\376\203\377\377\377\1\376\376\376\204\377\377\377\1\376\376" \
- "\376\204\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376\202" \
- "\377\377\377\3\316\316\316\221\221\221SSU\203::<\3;;=::<99;\204::<\1" \
- ";;=\203::<\2""99;;;=\202::<\1;;=\204::<\5""99;<<>::<kkk\264\264\264\203" \
- "\377\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\232\377\377\377\2\266\266\270__a\202::<\5;;=::<;;=::<99;\202;;=" \
- "\10::<;;=::<;;=::<;;=99;;;=\202::<\11;;=::<99;;;=::<;;=SSU\221\221\223" \
- "\331\331\331\211\377\377\377\1\376\376\376\204\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\376\376\376\324\377\377\377\1\376\376\376\202" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\212\377\377\377\1" \
- "\376\376\376\214\377\377\377\14\332\332\332\251\251\251``b::<;;=::<;" \
- ";=99;::<;;=::<;;=\202::<\3;;=99;;;=\203::<\1;;=\202::<\10;;=99;;;=::" \
- "<;;=SSU\250\250\252\363\363\363\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\231\377\377\377\2\265\265\265SSU\216::<\4;;=::<99;;;=\205::" \
- "<\10;;=SSU\222\222\224\332\332\334\377\377\377\376\376\376\377\377\377" \
- "\376\376\376\205\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\376\376\376\327\377\377\377\1\376\376\376\202" \
- "\377\377\377\1\376\376\376\206\377\377\377\1\376\376\376\207\377\377" \
- "\377\1\376\376\376\216\377\377\377\4\347\347\351\250\250\252``b::<\202" \
- ";;=\202::<\1;;=\203::<\1;;=\203::<\1;;=\202::<\3;;=::<;;=\202::<\6""9" \
- "9;;;=::<FFF\233\233\233\363\363\363\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\206\377\377\377\3\376\376\376\377\377\377\376\376\376\213" \
- "\377\377\377\4\363\363\365\234\234\236FFH;;=\206::<\2""99;;;=\204::<" \
- "\202;;=\2::<;;=\206::<\4FFH\204\204\206\333\333\333\376\376\376\264\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\327\377\377\377\4\346" \
- "\346\346\221\221\221SSS:::\202::<\1;;=\204::<\3;;=::<;;=\214::<\3GGI" \
- "\221\221\223\347\347\347\211\377\377\377\1\376\376\376\203\377\377\377" \
- "\1\376\376\376\377\377\377\377\377\377\377\377\371\377\377\377\1\376" \
- "\376\376\207\377\377\377\5\363\363\363\234\234\234FFH::<;;=\204::<\1" \
- ";;=\202::<\1;;=\203::<\1;;=\204::<\1;;=\203::<\5;;=xxz\300\300\302\377" \
- "\377\377\376\376\376\267\377\377\377\1\376\376\376\202\377\377\377\1" \
- "\376\376\376\215\377\377\377\1\376\376\376\303\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\204\377\377\377\4\332\332\332\203\203\205" \
- "GGI99;\207::<\202;;=\203::<\6;;=::<;;=::<;;=99;\202;;=\202::<\3\204\204" \
- "\204\346\346\346\376\376\376\205\377\377\377\1\376\376\376\377\377\377" \
- "\377\377\377\377\377\373\377\377\377\1\376\376\376\203\377\377\377\1" \
- "\376\376\376\204\377\377\377\3\362\362\362\234\234\236GGI\203::<\15;" \
- ";=::<;;=::<;;=::<;;=99;;;=::<;;=::<99;\202;;=\7::<;;=99;::<```\250\250" \
- "\250\363\363\363\202\377\377\377\1\375\375\375\272\377\377\377\1\376" \
- "\376\376\214\377\377\377\1\376\376\376\306\377\377\377\1\375\375\375" \
- "\210\377\377\377\6\265\265\265lln::<;;=::<;;=\202::<\5;;=99;;;=::<99" \
- ";\205::<\1;;=\206::<\4\204\204\206\345\345\345\377\377\377\376\376\376" \
- "\207\377\377\377\1\376\376\376\377\377\377\377\377\377\377\377\372\377" \
- "\377\377\1\376\376\376\202\377\377\377\3\364\364\364\233\233\235GGI\202" \
- "::<\203;;=\2""99;;;=\202::<\3""99;::<;;=\202::<\13;;=99;::<;;=::<;;=" \
- "::<FFH\204\204\204\333\333\333\376\376\376\204\377\377\377\1\376\376" \
- "\376\204\377\377\377\1\376\376\376\304\377\377\377\1\376\376\376\317" \
- "\377\377\377\4\346\346\346\221\221\223GGI99;\204::<\1""99;\202;;=\2:" \
- ":<;;=\204::<\1;;=\204::<\202;;=\3::<\221\221\223\364\364\364\203\377" \
- "\377\377\1\376\376\376\203\377\377\377\1\376\376\376\377\377\377\377" \
- "\377\377\377\377\371\377\377\377\1\376\376\376\202\377\377\377\6\265" \
- "\265\267SSU::<99;::<;;=\203::<\1;;=\202::<\1;;=\204::<\3;;=::<;;=\202" \
- "::<\6;;=SSS\264\264\264\363\363\363\377\377\377\376\376\376\204\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\267\377\377\377\1\376\376" \
- "\376\221\377\377\377\1\376\376\376\307\377\377\377\1\376\376\376\207" \
- "\377\377\377\4\376\376\376\377\377\377\266\266\266kkm\202::<\1;;=\202" \
- "::<\6;;=::<99;;;=99;;;=\205::<\3;;=::<99;\202::<\4GGI\234\234\234\363" \
- "\363\363\376\376\376\377\377\377\377\377\377\377\377\375\377\377\377" \
- "\4\376\376\376\377\377\377\265\265\265SSU\202::<\1;;=\204::<\1;;=\203" \
- "::<\3;;=99;;;=\205::<\202;;=\2yyy\316\316\316\203\377\377\377\1\376\376" \
- "\376\206\377\377\377\3\376\376\376\377\377\377\376\376\376\263\377\377" \
- "\377\1\376\376\376\205\377\377\377\2\315\315\315;;;\211::<\3;;;:::\315" \
- "\315\315\202\377\377\377\1\376\376\376\312\377\377\377\3\376\376\376" \
- "\377\377\377\376\376\376\205\377\377\377\5\346\346\346\204\204\204FF" \
- "H::<;;=\202::<\4;;=::<;;=::<\203;;=\203::<\2<<>99;\202::<\4""99;;;=F" \
- "FF\234\234\234\377\377\377\377\377\377\377\377\375\377\377\377\11\316" \
- "\316\320kkm::<;;=::<;;=99;::<;;=\203::<\202;;=\2::<99;\205::<\13;;=F" \
- "FH\221\221\221\346\346\346\376\376\376\377\377\377\376\376\376\377\377" \
- "\377\376\376\376\377\377\377\376\376\376\204\377\377\377\1\376\376\376" \
- "\273\377\377\377\2\376\376\376\317\317\317\212::<\6;;=;;;\316\316\316" \
- "\376\376\376\377\377\377\376\376\376\304\377\377\377\1\376\376\376\206" \
- "\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377\376\376" \
- "\376\204\377\377\377\4\363\363\363\235\235\235RRT;;=\202::<\202;;=\7" \
- "::<;;=99;::<;;=::<;;=\203::<\1;;=\202::<\6;;=::<SSU\264\264\264\377\377" \
- "\377\376\376\376\377\377\377\377\377\377\377\377\367\377\377\377\3\346" \
- "\346\346xxz;;=\205::<\1;;=\203::<\3;;=::<;;=\207::<\3SSU\247\247\251" \
- "\363\363\363\217\377\377\377\1\376\376\376\272\377\377\377\1\316\316" \
- "\316\213::<\2;;=\316\316\316\306\377\377\377\3\376\376\376\377\377\377" \
- "\376\376\376\221\377\377\377\4\265\265\267SSU;;=99;\202::<\2""99;;;=" \
- "\206::<\1;;=\204::<\1;;=\202::<\3jjj\317\317\317\376\376\376\377\377" \
- "\377\377\377\377\377\377\343\377\377\377\1\376\376\376\211\377\377\377" \
- "\1\376\376\376\206\377\377\377\2\363\363\363\233\233\233\210::<\1;;=" \
- "\203::<\1;;=\203::<\1;;=\203::<\2SSS\265\265\265\315\377\377\377\1\316" \
- "\316\316\214::<\1\316\316\316\334\377\377\377\3\316\316\316kkk::<\202" \
- ";;=\206::<\1;;=\202::<\1;;=\202::<\7""99;;;=::<;;=::<\204\204\206\346" \
- "\346\350\377\377\377\377\377\377\377\377\347\377\377\377\1\376\376\376" \
- "\212\377\377\377\3\265\265\265SSS::<\202;;=\205::<\1;;=\202::<\202;;" \
- "=\202::<\1;;=\203::<\2lln\265\265\267\203\377\377\377\1\376\376\376\313" \
- "\377\377\377\1\316\316\316\214::<\1\316\316\316\336\377\377\377\6\316" \
- "\316\316kkm::<;;=::<;;=\202::<\3;;=::<;;=\204::<\10;;=99;;;=::<99;;;" \
- "=FFH\234\234\234\210\377\377\377\3\376\376\376\377\377\377\376\376\376" \
- "\377\377\377\377\377\377\377\377\327\377\377\377\2\376\376\376\377\377" \
- "\377\202\376\376\376\205\377\377\377\1\376\376\376\203\377\377\377\5" \
- "\332\332\332kkk;;=::<;;=\205::<\4;;=::<;;=::<\202;;=\2::<;;=\203::<\2" \
- "kkm\317\317\317\204\377\377\377\1\376\376\376\314\377\377\377\1\316\316" \
- "\316\214::<\1\316\316\316\336\377\377\377\14\376\376\376\377\377\377" \
- "\316\316\316\204\204\206;;=::<;;=::<;;=99;::<;;=\205::<\11;;=99;;;=9" \
- "9;::<;;;RRR\317\317\317\376\376\376\204\377\377\377\1\376\376\376\377" \
- "\377\377\377\377\377\377\377\332\377\377\377\202\376\376\376\211\377" \
- "\377\377\2\363\363\363\221\221\223\203::<\1;;=\207::<\1;;=\202::<\202" \
- ";;=\10::<99;::<lln\316\316\316\376\376\376\377\377\377\376\376\376\206" \
- "\377\377\377\1\376\376\376\311\377\377\377\1\316\316\316\214::<\1\316" \
- "\316\316\335\377\377\377\7\376\376\376\377\377\377\376\376\376\377\377" \
- "\377\376\376\376\347\347\347kkm\202::<\2""88:;;=\203::<\1;;=\204::<\3" \
- ";;=99;;;=\202::<\4;;=::<xxx\346\346\346\206\377\377\377\1\376\376\376" \
- "\377\377\377\377\377\377\377\377\331\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\203\377\377\377\4\376\376\376\377\377\377\300\300\302" \
- "SSU\207::<\1;;=\202::<\1;;=\205::<\4""99;;;=SSU\316\316\316\204\377\377" \
- "\377\1\376\376\376\205\377\377\377\1\376\376\376\202\377\377\377\1\376" \
- "\376\376\307\377\377\377\1\316\316\316\214::<\1\316\316\316\334\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\376\376\376\204\377\377\377\3\317" \
- "\317\317kkm;;=\205::<\3;;=::<99;\203::<\1;;=\204::<\3;;=FFH\250\250\250" \
- "\205\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377" \
- "\377\377\377\377\326\377\377\377\1\376\376\376\204\377\377\377\4\376" \
- "\376\376\377\377\377\347\347\351xxz\202::<\1;;=\204::<\1;;=\203::<\1" \
- ";;=\204::<\4""99;;;=SSU\266\266\266\205\377\377\377\1\376\376\376\202" \
- "\377\377\377\1\376\376\376\205\377\377\377\1\375\375\375\310\377\377" \
- "\377\1\316\316\316\214::<\1\316\316\316\344\377\377\377\7\376\376\376" \
- "\377\377\377\316\316\316kkm;;=::<99;\202::<\203;;=\2::<;;=\204::<\1;" \
- ";=\202::<\3;;=__a\332\332\334\377\377\377\377\377\377\377\377\335\377" \
- "\377\377\1\376\376\376\204\377\377\377\4\250\250\252FFH::<;;=\202::<" \
- "\3;;=::<;;=\202::<\3""99;::<;;=\202::<\1;;=\202::<\4HHJ\250\250\250\377" \
- "\377\377\376\376\376\206\377\377\377\202\376\376\376\205\377\377\377" \
- "\1\376\376\376\311\377\377\377\1\316\316\316\214::<\1\316\316\316\345" \
- "\377\377\377\1\376\376\376\202\377\377\377\2\301\301\301SSU\202::<\1" \
- ";;=\202::<\2""99;;;=\212::<\3;;=\233\233\233\363\363\363\377\377\377" \
- "\377\377\377\377\377\331\377\377\377\1\376\376\376\204\377\377\377\2" \
- "\346\346\346kkk\211::<\3;;=99;;;=\206::<\2\235\235\237\363\363\363\205" \
- "\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\321\377\377" \
- "\377\1\316\316\316\214::<\1\316\316\316\352\377\377\377\2\250\250\252" \
- "GGI\206::<\5;;=::<;;=::<;;=\202::<\202;;=\4::<:::SSS\316\316\316\203" \
- "\377\377\377\1\376\376\376\377\377\377\377\377\377\377\377\330\377\377" \
- "\377\2\251\251\251FFH\203::<\1""99;\207::<\1;;=\204::<\3;;=xxx\346\346" \
- "\346\334\377\377\377\1\316\316\316\214::<\1\316\316\316\350\377\377\377" \
- "\13\376\376\376\377\377\377\376\376\376\363\363\363\234\234\23699;;;" \
- "=::<;;=99;;;=\202::<\2""99;;;=\206::<\202;;=\2\221\221\223\363\363\363" \
- "\204\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377" \
- "\1\376\376\376\377\377\377\377\377\377\377\377\316\377\377\377\2\346" \
- "\346\346kkk\202;;=\206::<\1;;=\203::<\3;;=::<;;=\202::<\2``b\316\316" \
- "\320\336\377\377\377\1\316\316\316\214::<\1\316\316\316\353\377\377\377" \
- "\4\376\376\376\377\377\377\350\350\352kkm\206::<\2;;=99;\203::<\1;;=" \
- "\203::<\6;;=::<TTV\331\331\331\377\377\377\376\376\376\207\377\377\377" \
- "\1\376\376\376\377\377\377\377\377\377\377\377\306\377\377\377\1\376" \
- "\376\376\203\377\377\377\5\376\376\376\377\377\377\266\266\266EEG;;=" \
- "\203::<\1;;=\203::<\1;;=\204::<\202;;=\3::<GGI\250\250\252\205\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\376\376\376\327\377\377\377\1\316" \
- "\316\316\214::<\1\316\316\316\351\377\377\377\1\376\376\376\203\377\377" \
- "\377\5\376\376\376\377\377\377\316\316\316TTV;;=\203::<\3;;=::<;;=\204" \
- "::<\202;;=\5::<;;=99;;;=\234\234\236\207\377\377\377\1\376\376\376\377" \
- "\377\377\377\377\377\377\377\303\377\377\377\3\376\376\376\377\377\377" \
- "\376\376\376\203\377\377\377\6\376\376\376\377\377\377\364\364\364ww" \
- "y::<;;=\202::<\202;;=\202::<\5;;=::<99;::<;;=\202::<\4;;=::<\204\204" \
- "\206\363\363\363\202\377\377\377\1\376\376\376\202\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\331\377\377\377\1\316\316\316\214::" \
- "<\1\316\316\316\353\377\377\377\1\376\376\376\204\377\377\377\11\376" \
- "\376\376\234\234\234GGI::<;;=::<;;=::<;;=\207::<\1;;=\202::<\2__a\332" \
- "\332\332\377\377\377\377\377\377\377\377\320\377\377\377\4\316\316\316" \
- "FFH::<;;=\202::<\1;;=\207::<\2;;=99;\202;;=\3__a\316\316\320\376\376" \
- "\376\342\377\377\377\1\316\316\316\214::<\1\316\316\316\361\377\377\377" \
- "\5\376\376\376\347\347\347lln::<;;=\210::<\1""99;\202::<\7;;=::<99;G" \
- "GI\247\247\247\377\377\377\376\376\376\202\377\377\377\1\376\376\376" \
- "\377\377\377\377\377\377\377\377\305\377\377\377\1\376\376\376\203\377" \
- "\377\377\3\221\221\221:::;;=\203::<\1;;=\202::<\1;;=\203::<\1;;=\202" \
- "::<\4;;=FFH\234\234\234\376\376\376\202\377\377\377\1\375\375\375\202" \
- "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\332\377\377" \
- "\377\1\316\316\316\214::<\1\316\316\316\364\377\377\377\3\301\301\303" \
- "FFH;;=\206::<\1;;=\205::<\5;;=99;;;=yy{\363\363\363\377\377\377\377\377" \
- "\377\377\377\312\377\377\377\3\346\346\346^^`;;=\207::<\1;;=\203::<\1" \
- ";;=\203::<\2jjl\346\346\350\202\377\377\377\1\376\376\376\213\377\377" \
- "\377\1\375\375\375\327\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\360\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377" \
- "\2\363\363\363\220\220\220\202;;=\203::<\2;;=99;\206::<\1;;=\202::<\2" \
- "SSU\316\316\320\202\377\377\377\1\376\376\376\377\377\377\377\377\377" \
- "\377\377\303\377\377\377\4\376\376\376\377\377\377\302\302\302FFH\217" \
- "::<\2GGI\250\250\252\205\377\377\377\1\376\376\376\211\377\377\377\3" \
- "\376\376\376\377\377\377\376\376\376\326\377\377\377\1\316\316\316\214" \
- "::<\1\316\316\316\356\377\377\377\1\376\376\376\210\377\377\377\3\316" \
- "\316\316SSU;;=\203::<\202;;=\207::<\1;;=\202::<\1\235\235\237\377\377" \
- "\377\377\377\377\377\377\306\377\377\377\1\221\221\221\202::<\2;;=99" \
- ";\203::<\3;;=::<;;=\203::<\1;;=\202::<\2kkm\346\346\346\351\377\377\377" \
- "\1\316\316\316\214::<\1\316\316\316\370\377\377\377\2\362\362\362\221" \
- "\221\221\204::<\3;;=::<;;=\206::<\1;;=\202::<\2xxz\362\362\364\377\377" \
- "\377\377\377\377\377\377\301\377\377\377\3\376\376\376\363\363\363__" \
- "_\204::<\3;;=::<;;=\202::<\2;;=99;\202;;=\4::<99;GGI\250\250\252\353" \
- "\377\377\377\1\316\316\316\214::<\1\316\316\316\366\377\377\377\1\376" \
- "\376\376\203\377\377\377\2\317\317\317SSS\211::<\202;;=\6""99;;;=99;" \
- "::<SSU\332\332\332\202\377\377\377\1\376\376\376\377\377\377\377\377" \
- "\377\377\377\267\377\377\377\11\376\376\376\377\377\377\376\376\376\377" \
- "\377\377\376\376\376\377\377\377\317\317\321FFH;;=\202::<\3;;=::<99;" \
- "\203::<\203;;=\202::<\4;;=lll\346\346\346\376\376\376\353\377\377\377" \
- "\1\316\316\316\214::<\1\316\316\316\367\377\377\377\1\376\376\376\202" \
- "\377\377\377\5\376\376\376\363\363\363\221\221\223;;=99;\202;;=\3::<" \
- "99;;;=\202::<\202;;=\6::<;;=::<;;=::<\265\265\265\202\377\377\377\1\376" \
- "\376\376\377\377\377\377\377\377\377\377\273\377\377\377\1\250\250\252" \
- "\202::<\2""99;;;=\203::<\1;;=\202::<\1;;=\204::<\3;;=\250\250\250\376" \
- "\376\376\205\377\377\377\1\376\376\376\347\377\377\377\1\316\316\316" \
- "\214::<\1\316\316\316\373\377\377\377\5\376\376\376\377\377\377\300\300" \
- "\300FFH;;=\202::<\1;;=\202::<\3;;=::<;;=\202::<\2;;=::<\202;;=\4\205" \
- "\205\207\376\376\376\377\377\377\376\376\376\377\377\377\377\377\377" \
- "\377\377\267\377\377\377\3\376\376\376\364\364\364\205\205\207\202::" \
- "<\202;;=\15""99;;;=::<;;=::<;;=::<99;;;=99;;;=__a\331\331\331\357\377" \
- "\377\377\1\316\316\316\214::<\1\316\316\316\366\377\377\377\1\376\376" \
- "\376\203\377\377\377\1\376\376\376\203\377\377\377\2\363\363\363kkm\215" \
- "::<\4;;=99;__a\363\363\363\202\377\377\377\1\376\376\376\377\377\377" \
- "\377\377\377\377\377\265\377\377\377\4\347\347\351__a::<;;=\203::<\1" \
- ";;=\202::<\1;;=\203::<\1;;=\202::<\2\221\221\223\363\363\363\360\377" \
- "\377\377\1\316\316\316\214::<\1\316\316\316\364\377\377\377\1\376\376" \
- "\376\203\377\377\377\1\376\376\376\207\377\377\377\2\251\251\253;;=\203" \
- "::<\1;;=\203::<\1;;=\203::<\203;;=\3FFH\332\332\332\376\376\376\377\377" \
- "\377\377\377\377\377\377\265\377\377\377\4\331\331\331FFH::<;;=\203:" \
- ":<\1;;=\202::<\1;;=\205::<\2FFH\302\302\302\205\377\377\377\7\376\376" \
- "\376\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377\376" \
- "\376\376\346\377\377\377\1\316\316\316\214::<\1\316\316\316\377\377\377" \
- "\377\202\377\377\377\2\332\332\332SSU\203::<\1;;=\203::<\12""99;;;=:" \
- ":<99;::<;;=99;;;=\266\266\266\376\376\376\377\377\377\377\377\377\377" \
- "\377\263\377\377\377\1\265\265\265\202::<\1;;=\205::<\202;;=\202::<\1" \
- ";;=\202::<\2__a\346\346\350\203\377\377\377\1\376\376\376\357\377\377" \
- "\377\1\316\316\316\214::<\1\316\316\316\377\377\377\377\203\377\377\377" \
- "\2\363\363\363\204\204\204\202::<\1;;=\203::<\1;;=\205::<\1;;=\202::" \
- "<\1\221\221\221\377\377\377\377\377\377\377\377\262\377\377\377\4\235" \
- "\235\237;;=::<;;=\203::<\1;;=\206::<\3;;=::<\222\222\222\202\377\377" \
- "\377\1\376\376\376\362\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\377\377\377\377\205\377\377\377\3\265\265\265:::;;=\206::<\5;;=::<;" \
- ";=::<;;=\202::<\2\204\204\206\363\363\363\212\377\377\377\1\376\376\376" \
- "\377\377\377\377\377\377\377\377\236\377\377\377\1\376\376\376\202\377" \
- "\377\377\4\376\376\376\377\377\377\376\376\377\204\204\206\206::<\12" \
- ";;=::<;;=::<;;=::<;;=::<FFH\301\301\301\366\377\377\377\1\316\316\316" \
- "\214::<\1\316\316\316\377\377\377\377\206\377\377\377\4\333\333\333S" \
- "SU::<;;=\205::<\4;;=::<;;=::<\202;;=\3::<__a\364\364\364\202\377\377" \
- "\377\1\376\376\376\205\377\377\377\1\376\376\376\202\377\377\377\1\376" \
- "\376\376\377\377\377\377\377\377\377\377\236\377\377\377\4\376\376\376" \
- "\377\377\377\363\363\365__a\203::<\10""99;;;=::<;;=99;;;=99;;;=\203:" \
- ":<\2__a\332\332\332\203\377\377\377\1\376\376\376\363\377\377\377\1\316" \
- "\316\316\214::<\1\316\316\316\377\377\377\377\207\377\377\377\7\363\363" \
- "\363kkm;;=::<;;=::<;;=\204::<\202;;=\10""99;;;=::<SSU\332\332\332\376" \
- "\376\376\377\377\377\376\376\376\205\377\377\377\1\376\376\376\377\377" \
- "\377\377\377\377\377\377\236\377\377\377\1\376\376\376\202\377\377\377" \
- "\2\346\346\350__a\202::<\4;;=::<;;=99;\204::<\1;;=\203::<\3xxz\362\362" \
- "\362\377\377\377\202\376\376\376\365\377\377\377\1\316\316\316\214::" \
- "<\1\316\316\316\377\377\377\377\210\377\377\377\5\376\376\376\234\234" \
- "\234;;=::<;;=\202::<\14;;=::<;;=99;;;=::<;;=::<;;=FFH\332\332\332\376" \
- "\376\376\203\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376" \
- "\377\377\377\376\376\376\377\377\377\377\377\377\377\377\235\377\377" \
- "\377\4\332\332\332FFH::<;;=\205::<\1;;=\205::<\2;;=\234\234\234\372\377" \
- "\377\377\1\316\316\316\214::<\1\316\316\316\377\377\377\377\212\377\377" \
- "\377\2\300\300\300FFH\203::<\1""99;\202::<\2;;=99;\203::<\4;;=::<FFH" \
- "\266\266\266\205\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\377\377\377\377\377\377\377\377\235\377\377\377\3\332\332\332FF" \
- "H;;=\205::<\1;;=\202::<\1""99;\203::<\6FFH\301\301\301\377\377\377\376" \
- "\376\376\377\377\377\376\376\376\207\377\377\377\1\376\376\376\357\377" \
- "\377\377\1\316\316\316\214::<\1\316\316\316\377\377\377\377\211\377\377" \
- "\377\4\376\376\376\377\377\377\331\331\331SSU\204::<\6""99;::<;;=::<" \
- ";;=::<\202;;=\202::<\1\266\266\270\203\377\377\377\1\376\376\376\377" \
- "\377\377\377\377\377\377\377\240\377\377\377\2\265\265\265EEG\202::<" \
- "\6;;=::<;;=::<;;=99;\203::<\4;;=::<SSU\332\332\332\203\377\377\377\1" \
- "\376\376\376\207\377\377\377\1\376\376\376\360\377\377\377\1\316\316" \
- "\316\214::<\1\316\316\316\377\377\377\377\212\377\377\377\15\376\376" \
- "\376\377\377\377\363\363\363__a::<;;=99;;;=::<99;;;=::<;;=\202::<\4;" \
- ";=99;;;=\250\250\252\204\377\377\377\1\376\376\376\377\377\377\377\377" \
- "\377\377\377\235\377\377\377\5\265\265\265::<;;=::<;;=\202::<\202;;=" \
- "\2::<;;=\204::<\2__a\364\364\364\206\377\377\377\1\376\376\376\366\377" \
- "\377\377\1\316\316\316\214::<\1\316\316\316\377\377\377\377\211\377\377" \
- "\377\1\376\376\376\204\377\377\377\2\204\204\20699;\204::<\1;;=\204:" \
- ":<\5""99;;;=99;::<\204\204\204\377\377\377\377\377\377\377\377\232\377" \
- "\377\377\1\376\376\376\205\377\377\377\2\265\265\267;;=\211::<\1;;=\203" \
- "::<\1\205\205\205\377\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\377\377\377\377\215\377\377\377\12\376\376\376\377\377\377\250\250\250" \
- "::<;;=::<99;;;=::<;;=\202::<\3;;=::<99;\202::<\1\205\205\207\212\377" \
- "\377\377\1\376\376\376\377\377\377\377\377\377\377\377\223\377\377\377" \
- "\1\265\265\267\203::<\202;;=\1""99;\204::<\5;;=::<;;=::<\235\235\237" \
- "\377\377\377\377\2\377\377\377\316\316\316\214::<\1\316\316\316\377\377" \
- "\377\377\216\377\377\377\3\376\376\376\377\377\377\265\265\267\202::" \
- "<\3;;=::<;;=\205::<\1;;=\203::<\1\204\204\204\210\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\376\376\376\377\377\377\377\377\377\377\377\220" \
- "\377\377\377\6\234\234\236::<;;=::<;;=99;\204::<\1;;=\204::<\1\265\265" \
- "\265\377\377\377\377\202\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\377\377\377\377\215\377\377\377\1\376\376\376\203\377\377\377\2\334" \
- "\334\334FFH\207::<\202;;=\203::<\3;;=\204\204\206\376\376\376\207\377" \
- "\377\377\1\376\376\376\377\377\377\377\377\377\377\377\216\377\377\377" \
- "\11\376\376\376\377\377\377\376\376\376\204\204\206::<99;;;=::<;;=\204" \
- "::<\6;;=99;;;=::<FFH\301\301\301\377\377\377\377\203\377\377\377\1\316" \
- "\316\316\214::<\1\316\316\316\377\377\377\377\215\377\377\377\1\376\376" \
- "\376\202\377\377\377\202\376\376\376\3\332\332\332FFH::<\202;;=\203:" \
- ":<\3;;=99;;;=\204::<\2\205\205\207\376\376\376\203\377\377\377\1\376" \
- "\376\376\203\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377" \
- "\377\377\377\377\377\377\212\377\377\377\7\376\376\376\377\377\377\376" \
- "\376\376\204\204\20499;::<;;=\202::<\1""99;\205::<\4;;=::<GGI\332\332" \
- "\334\377\377\377\377\204\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\377\377\377\377\217\377\377\377\6\376\376\376\377\377\377\376\376\376" \
- "\377\377\377\362\362\362__a\203::<\202;;=\11""99;;;=::<99;;;=::<;;=:" \
- ":<\204\204\204\205\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\377\377\377\377\377\377\377\377\215\377\377\377\1\204\204\204\202" \
- "::<\1;;=\207::<\1<<>\202::<\2FFH\331\331\333\377\377\377\377\205\377" \
- "\377\377\1\316\316\316\214::<\1\316\316\316\377\377\377\377\216\377\377" \
- "\377\1\376\376\376\203\377\377\377\4\376\376\376\377\377\377\363\363" \
- "\363__a\204::<\2;;=99;\206::<\2;;=\204\204\204\203\377\377\377\1\376" \
- "\376\376\377\377\377\377\377\377\377\377\220\377\377\377\1\204\204\204" \
- "\205::<\1;;=\203::<\1;;=\203::<\4__a\363\363\363\377\377\377\376\376" \
- "\376\377\377\377\377\204\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\377\377\377\377\224\377\377\377\4\376\376\376\363\363\363xxx::<\202" \
- ";;=\202::<\1;;=\203::<\1;;=\203::<\1\205\205\207\204\377\377\377\1\376" \
- "\376\376\377\377\377\377\377\377\377\377\215\377\377\377\1\250\250\250" \
- "\205::<\1;;=\203::<\12;;=99;;;=::<__a\363\363\365\377\377\377\376\376" \
- "\376\377\377\377\376\376\376\377\377\377\377\203\377\377\377\1\316\316" \
- "\316\214::<\1\316\316\316\377\377\377\377\227\377\377\377\5\204\204\204" \
- "::<;;=::<;;=\204::<\1""99;\204::<\1\204\204\204\377\377\377\377\377\377" \
- "\377\377\213\377\377\377\1\376\376\376\202\377\377\377\4\376\376\376" \
- "\377\377\377\265\265\267;;=\212::<\4;;=::<__a\363\363\363\217\377\377" \
- "\377\1\376\376\376\367\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\376\377\377\377\202\377\377\375\3\377\376\377\377\377\377\376\377\375" \
- "\224\377\377\377\3\204\204\206::<;;=\211::<\7""99;::<\203\203\205\377" \
- "\377\377\376\376\376\377\377\377\376\376\376\205\377\377\377\1\376\376" \
- "\376\202\377\377\377\202\376\376\376\377\377\377\377\377\377\377\377" \
- "\2\264\264\266;;=\202::<\202;;=\1""99;\207::<\2__a\363\363\365\217\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\366\377\377\377\1\316" \
- "\316\316\214::<\1\316\316\316\375\377\377\377\5\377\377\375\377\376\377" \
- "\377\375\377\377\377\375\377\377\377\202\377\376\377\221\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\204\204\206\203::<\1;;=\202::<\2;;=" \
- "::<\202;;=\202::<\3;;=\204\204\204\376\376\376\211\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\377\377\377\377\375\377\377\377\7\376" \
- "\376\376\264\264\266;;=99;::<;;=99;\204::<\1;;=\203::<\2aac\363\363\363" \
- "\221\377\377\377\1\376\376\376\367\377\377\377\1\316\316\316\214::<\1" \
- "\316\316\316\375\377\377\377\202\376\376\376\203\377\377\377\202\376" \
- "\377\377\222\377\377\377\10\376\376\376\377\377\377\376\376\376\204\204" \
- "\206::<;;=::<;;=\203::<\202;;=\202::<\6""99;;;=\205\205\207\376\376\376" \
- "\377\377\377\376\376\376\203\377\377\377\202\376\376\376\202\377\377" \
- "\377\1\376\376\376\377\377\377\377\375\377\377\377\3\376\376\376\302" \
- "\302\304;;=\203::<\1;;=\204::<\6;;=99;;;=::<aac\362\362\362\223\377\377" \
- "\377\1\376\376\376\366\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\374\377\377\377\6\375\377\376\377\377\375\377\376\377\376\377\377\376" \
- "\376\376\377\377\375\202\377\376\377\225\377\377\377\2\376\376\376\204" \
- "\204\206\206::<\1""99;\203::<\1;;=\202::<\1\251\251\253\204\377\377\377" \
- "\1\376\376\376\377\377\377\377\377\377\377\377\203\377\377\377\4\332" \
- "\332\332FFH::<;;=\202::<\1""99;\205::<\4;;=::<__a\363\363\365\202\377" \
- "\377\377\1\376\376\376\377\377\377\377\211\377\377\377\1\316\316\316" \
- "\214::<\1\316\316\316\374\377\377\377\5\376\377\377\376\376\376\377\376" \
- "\377\377\377\375\376\377\375\202\376\377\377\1\377\377\375\221\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\203\377\377\377\2\204\204" \
- "\206;;=\205::<\1;;=\203::<\7;;=::<;;=\265\265\265\376\376\376\377\377" \
- "\377\376\376\376\202\377\377\377\5\376\376\376\377\377\377\376\376\376" \
- "\377\377\377\376\376\376\377\377\377\377\373\377\377\377\6\331\331\331" \
- "GGI::<;;=::<;;=\205::<\1<<>\202::<\2__a\363\363\365\202\377\377\377\1" \
- "\376\376\376\213\377\377\377\1\376\376\376\375\377\377\377\1\316\316" \
- "\316\214::<\1\316\316\316\374\377\377\377\7\377\376\377\376\377\377\376" \
- "\376\374\377\376\377\377\377\375\376\377\377\377\377\375\226\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\203\203\203\214::<\2;;=\265\265" \
- "\265\206\377\377\377\1\376\376\376\377\377\377\377\374\377\377\377\4" \
- "\364\364\364GGI99;;;=\206::<\1;;=\203::<\2__a\363\363\363\205\377\377" \
- "\377\1\376\376\376\212\377\377\377\1\363\363\363\203\377\377\377\1\376" \
- "\376\376\370\377\377\377\1\316\316\316\214::<\1\316\316\316\374\377\377" \
- "\377\10\377\377\375\377\376\377\377\377\377\377\377\375\377\376\377\370" \
- "\373\362\370\373\364\377\376\377\220\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\204\204\204\203::<\1;;=\210::<\2FFH\332\332\334\204\377\377\377\1" \
- "\376\376\376\377\377\377\377\374\377\377\377\3\363\363\363___;;=\202" \
- "::<\1;;=\204::<\6;;=99;;;=::<__a\363\363\365\220\377\377\377\3\265\265" \
- "\265FFF\333\333\333\373\377\377\377\1\316\316\316\214::<\1\316\316\316" \
- "\376\377\377\377\6\374\377\377\377\377\375\371\374\365\242\320c\240\322" \
- "c\371\372\362\221\377\377\377\1\376\376\376\210\377\377\377\2\203\203" \
- "\203;;=\202::<\1;;=\203::<\1;;=\203::<\3;;=FFH\333\333\333\202\377\377" \
- "\377\1\376\376\376\377\377\377\377\371\377\377\377\1\376\376\376\203" \
- "\377\377\377\2kkm::<\202;;=\1""99;\205::<\202;;=\3::<__a\363\363\363" \
- "\220\377\377\377\5\265\265\267::<;;=FFH\332\332\332\206\377\377\377\3" \
- "\376\376\376\377\377\377\376\376\376\361\377\377\377\1\316\316\316\213" \
- "::<\2;;=\316\316\316\365\377\377\377\22\376\376\377\377\377\375\377\377" \
- "\377\377\377\375\377\377\377\377\376\377\377\377\375\377\377\377\376" \
- "\376\377\377\377\377\371\374\365\242\320c\215\307\77\215\305@\242\322" \
- "e\372\373\365\376\377\375\377\376\377\230\377\377\377\3\205\205\207:" \
- ":<;;=\206::<\1;;=\202::<\4;;=SSU\363\363\365\376\376\376\377\377\377" \
- "\377\374\377\377\377\13\376\376\376\204\204\204::<;;=99;::<;;=::<;;=" \
- "::<;;=\203::<\3__a\364\364\366\376\376\376\217\377\377\377\1\265\265" \
- "\267\203::<\3;;=FFF\332\332\332\206\377\377\377\1\376\376\376\361\377" \
- "\377\377\2\376\376\376\317\317\317\212::<\6;;=;;;\316\316\316\376\376" \
- "\376\377\377\377\376\376\376\361\377\377\377\6\376\376\377\377\376\377" \
- "\375\376\377\376\377\377\377\377\375\375\377\376\202\377\377\377\17\376" \
- "\376\376\377\377\377\371\372\364\240\322a\215\305@\212\307>\215\307\77" \
- "\215\305>\242\320c\370\372\365\377\377\377\377\376\377\376\377\375\377" \
- "\377\375\377\376\377\225\377\377\377\5kkm::<;;=99;;;=\210::<\4__a\364" \
- "\364\364\376\376\376\377\377\377\202\376\376\376\377\377\377\377\363" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\4" \
- "\250\250\252::<;;=99;\202;;=\205::<\202;;=\3FFH\345\345\345\376\376\376" \
- "\217\377\377\377\4\264\264\266;;=::<;;=\203::<\2GGI\332\332\332\203\377" \
- "\377\377\1\376\376\376\356\377\377\377\1\376\376\376\205\377\377\377" \
- "\2\315\315\315;;;\211::<\3;;;:::\315\315\315\202\377\377\377\1\376\376" \
- "\376\361\377\377\377\23\377\377\375\375\376\377\376\377\377\376\377\375" \
- "\377\374\377\377\377\375\375\377\376\377\377\377\377\377\375\371\372" \
- "\364\242\321g\215\306A\212\307>\215\306A\212\306@\214\305@\212\306B\241" \
- "\322_\367\372\361\204\377\377\377\1\377\377\375\220\377\377\377\1\376" \
- "\376\376\203\377\377\377\3\363\363\363__a99;\202::<\6;;=::<99;;;=99;" \
- ";;=\203::<\1\205\205\207\204\377\377\377\1\376\376\376\377\377\377\377" \
- "\362\377\377\377\1\376\376\376\202\377\377\377\22\376\376\376\265\265" \
- "\267::<99;;;=::<;;=99;;;=::<;;=::<;;=::<FFH\331\331\331\377\377\377\376" \
- "\376\376\216\377\377\377\1\265\265\267\203::<\1;;=\202::<\4;;=::<GGI" \
- "\332\332\332\210\377\377\377\1\376\376\376\353\377\377\377\1\376\376" \
- "\376\221\377\377\377\1\376\376\376\363\377\377\377\17\376\377\377\376" \
- "\377\375\377\375\376\375\377\376\377\377\375\377\377\377\377\376\377" \
- "\367\374\365\240\320b\215\307=\213\305=\215\306A\215\305>\214\305@\214" \
- "\306>\202\214\305@\4\241\321a\371\374\365\376\376\377\377\377\375\202" \
- "\376\377\377\221\377\377\377\1\376\376\376\203\377\377\377\3\362\362" \
- "\362``b99;\205::<\1;;=\203::<\6;;=99;\235\235\237\376\376\376\377\377" \
- "\377\376\376\376\377\377\377\377\366\377\377\377\2\332\332\332FFH\202" \
- ";;=\4""99;;;=::<;;=\205::<\2FFH\332\332\334\202\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\213\377\377\377\4\266\266\26699;::<;;=\202" \
- "::<\1;;=\202::<\4;;=::<FFF\332\332\332\203\377\377\377\1\376\376\376" \
- "\202\377\377\377\1\376\376\376\375\377\377\377\1\376\376\376\363\377" \
- "\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202\377" \
- "\377\377\21\370\373\364\241\321c\216\306\77\212\306@\214\306>\215\305" \
- "@\212\306@\213\310=\214\306<\216\306\77\214\304=\214\306>\241\321c\372" \
- "\375\362\376\376\376\377\376\377\376\376\374\220\377\377\377\2\376\376" \
- "\376\377\377\377\203\376\376\376\4\377\377\377\364\364\364FFH;;=\202" \
- "::<\1;;=\202::<\1;;=\203::<\3;;=::<\265\265\265\377\377\377\377\367\377" \
- "\377\377\4\362\362\362SSU::<;;=\205::<\1""99;\202;;=\3::<;;=\265\265" \
- "\267\216\377\377\377\3\376\376\376\377\377\377\265\265\265\202::<\5;" \
- ";=99;;;=::<;;=\204::<\4;;=FFH\332\332\332\376\376\376\205\377\377\377" \
- "\1\376\376\376\355\377\377\377\1\376\376\376\214\377\377\377\1\376\376" \
- "\376\366\377\377\377\1\375\377\376\202\377\377\375\24\377\377\377\376" \
- "\376\376\373\373\363\243\322b\213\307A\214\306>\215\305@\214\305@\212" \
- "\307>\214\306>\215\305>\213\307A\214\305@\216\310@\214\306>\215\305>" \
- "\242\320c\366\373\364\375\377\376\377\376\377\221\377\377\377\1\376\376" \
- "\376\204\377\377\377\3\376\376\376\333\333\333EEG\202;;=\2::<;;=\207" \
- "::<\3GGI\332\332\332\376\376\376\377\377\377\377\365\377\377\377\1__" \
- "a\205::<\10;;=::<;;=::<;;=::<;;=\265\265\265\202\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\213\377\377\377\1\266\266\266\203::<\5""9" \
- "9;<<>::<;;=::<\202;;=\203::<\4;;=FFH\333\333\333\376\376\376\202\377" \
- "\377\377\1\376\376\376\355\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\376\376\376\215\377\377\377\1\376\376\376\363\377\377\377\3\377\376" \
- "\377\377\377\377\375\377\376\202\377\377\377\2\373\373\363\241\321d\202" \
- "\214\306>\17\216\306=\215\305@\215\307\77\214\306>\217\304>\214\306>" \
- "\214\305B\215\307\77\211\305A\215\306A\216\306\77\214\305@\242\322e\370" \
- "\373\364\377\377\375\230\377\377\377\1\333\333\335\203::<\202;;=\206" \
- "::<\3;;=FFH\363\363\363\377\377\377\377\364\377\377\377\1\204\204\206" \
- "\203::<\1;;=\207::<\2;;=\204\204\206\220\377\377\377\1\346\346\346\204" \
- "::<\1;;=\203::<\1;;=\202::<\202;;=\203::<\2FFH\332\332\332\357\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377\204\377\377" \
- "\377\1\377\377\375\202\377\377\377\17\377\376\377\370\373\364\243\322" \
- "b\214\306>\213\310\77\212\307>\214\306>\215\306C\212\307>\214\306<\213" \
- "\310\77\214\305@\214\306<\214\306>\216\306\77\203\214\306>\3\214\306" \
- "<\265\334\211\376\376\376\222\377\377\377\1\376\376\376\205\377\377\377" \
- "\4\376\376\377\265\265\267::<;;=\212::<\1___\377\377\377\377\363\377" \
- "\377\377\1\265\265\267\204::<\1;;=\206::<\2;;=\203\203\203\222\377\377" \
- "\377\2\265\265\265;;=\203::<\1;;=\205::<\1;;=\204::<\3;;=FFH\332\332" \
- "\332\206\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377" \
- "\377\345\377\377\377\10\376\376\377\377\377\375\377\377\377\377\377\375" \
- "\377\377\377\377\376\377\377\377\375\376\377\377\202\377\377\377\6\370" \
- "\373\362\243\322b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4" \
- "\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306" \
- ">\215\307\77\214\305@\244\317c\367\375\361\233\377\377\377\3\234\234" \
- "\236::<99;\211::<\2;;=\204\204\206\377\377\377\377\360\377\377\377\13" \
- "\376\376\376\332\332\33299;::<99;;;=::<99;;;=::<;;=\202::<\3;;=^^`\364" \
- "\364\364\223\377\377\377\12\265\265\267;;=::<;;=99;;;=::<;;=::<;;=\202" \
- "::<\1;;=\203::<\3;;=FFF\332\332\332\206\377\377\377\1\376\376\376\377" \
- "\377\377\377\345\377\377\377\6\376\376\377\377\376\377\375\376\377\376" \
- "\377\377\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373" \
- "\366\241\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212" \
- "\306@\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306" \
- ">\215\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\233" \
- "\377\377\377\1\204\204\206\203::<\13;;=::<;;=::<;;=::<;;=::<;;=\266\266" \
- "\266\376\376\376\203\377\377\377\1\376\376\376\377\377\377\377\352\377" \
- "\377\377\2\363\363\363TTV\202::<\3;;=99;;;=\204::<\4;;=99;FFH\363\363" \
- "\363\224\377\377\377\7\376\376\376\265\265\265;;=::<;;=::<;;=\203::<" \
- "\1;;=\203::<\1;;=\203::<\2GGI\332\332\332\203\377\377\377\1\376\376\376" \
- "\377\377\377\377\347\377\377\377\7\377\377\375\375\376\377\376\377\377" \
- "\376\377\375\377\374\377\377\377\375\375\377\376\202\377\377\377\5\372" \
- "\373\366\240\320b\215\307\77\212\306@\215\305>\202\214\305@\20\215\305" \
- "@\212\306@\214\305D\216\306\77\214\306>\215\307\77\214\306>\212\306@" \
- "\214\306>\215\307\77\215\305@\242\320c\370\373\362\377\377\373\377\376" \
- "\377\377\377\375\232\377\377\377\3\376\376\376\377\377\377^^`\202;;=" \
- "\205::<\1""99;\202;;=\5::<;;=\332\332\332\377\377\377\376\376\376\377" \
- "\377\377\377\347\377\377\377\1\376\376\376\204\377\377\377\1lln\204:" \
- ":<\202;;=\203::<\6;;=99;GGI\332\332\332\377\377\377\376\376\376\225\377" \
- "\377\377\2\264\264\264;;=\202::<\2""99;;;=\202::<\3""99;;;=::<\202;;" \
- "=\202::<\4;;=::<GGI\332\332\332\210\377\377\377\1\376\376\376\377\377" \
- "\377\377\342\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377" \
- "\376\377\377\375\377\377\377\377\376\377\370\373\362\241\321a\215\307" \
- "\77\215\307=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216" \
- "\306\77\215\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306" \
- ">\242\321a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377" \
- "\234\377\377\377\2\364\364\364RRT\202::<\4""99;;;=::<;;=\205::<\3SSU" \
- "\362\362\362\377\377\377\202\376\376\376\377\377\377\377\351\377\377" \
- "\377\1\234\234\236\204::<\1;;=\203::<\1;;=\203::<\1\265\265\267\231\377" \
- "\377\377\2\265\265\267;;=\203::<\2""99;;;=\202::<\1;;=\202::<\1;;=\202" \
- "::<\4;;=::<FFF\332\332\332\203\377\377\377\1\376\376\376\202\377\377" \
- "\377\1\376\376\376\377\377\377\377\342\377\377\377\202\377\377\375\3" \
- "\377\374\377\375\377\376\376\377\377\202\377\377\377\25\370\373\364\243" \
- "\322b\217\304@\212\306@\214\305@\215\305>\212\307>\212\306@\214\305B" \
- "\214\305@\214\305B\214\306>\212\307>\212\310\77\214\306>\217\304@\214" \
- "\306>\214\305@\242\322b\370\373\362\377\377\377\202\377\376\377\1\377" \
- "\377\375\235\377\377\377\3\376\376\376\332\332\334GGI\202;;=\6::<;;=" \
- "99;;;=::<;;=\203::<\1yyy\202\376\376\376\202\377\377\377\1\376\376\376" \
- "\377\377\377\377\345\377\377\377\4\376\376\376\317\317\317::<;;=\202" \
- "::<\3;;=99;;;=\204::<\6;;=\221\221\223\377\377\377\376\376\376\377\377" \
- "\377\376\376\376\226\377\377\377\3\376\376\376\265\265\267;;=\202::<" \
- "\2;;=99;\205::<\1;;=\204::<\4;;=FFH\332\332\332\376\376\376\205\377\377" \
- "\377\1\376\376\376\377\377\377\377\342\377\377\377\1\375\377\376\202" \
- "\377\377\375\34\377\377\377\376\376\376\373\373\363\243\322b\211\307" \
- "B\212\307<\215\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214" \
- "\306<\214\306>\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307" \
- ">\244\317c\370\373\362\377\377\373\376\377\377\377\376\377\375\376\377" \
- "\377\377\375\377\376\377\236\377\377\377\4\265\265\267::<;;=99;\202;" \
- ";=\205::<\202;;=\1\250\250\250\202\377\377\377\1\376\376\376\377\377" \
- "\377\377\343\377\377\377\1\376\376\376\202\377\377\377\3\363\363\363" \
- "FFH;;=\202::<\5;;=::<;;=::<99;\202;;=\2::<kkm\205\377\377\377\1\376\376" \
- "\376\227\377\377\377\1\265\265\265\204::<\6;;=::<;;=::<;;=::<\202;;=" \
- "\203::<\4;;=FFH\333\333\333\376\376\376\202\377\377\377\1\376\376\376" \
- "\377\377\377\377\343\377\377\377\3\377\376\377\377\377\377\375\377\376" \
- "\202\377\377\377\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214" \
- "\305@\213\310=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214" \
- "\306>\215\305>\217\304@\215\307\77\215\307=\242\320c\367\375\361\376" \
- "\376\377\377\376\377\376\376\376\202\377\377\375\2\374\377\377\377\376" \
- "\377\234\377\377\377\1\376\376\376\202\377\377\377\10\221\221\221::<" \
- ";;=99;::<;;=::<;;=\205::<\2\333\333\333\376\376\376\377\377\377\377\347" \
- "\377\377\377\1kkk\202::<\1;;=\205::<\1;;=\202::<\2RRT\363\363\365\236" \
- "\377\377\377\1\265\265\267\203::<\2""99;;;=\203::<\1;;=\202::<\202;;" \
- "=\203::<\2FFH\332\332\332\377\377\377\377\346\377\377\377\1\377\377\375" \
- "\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306>\213\310" \
- "\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215\307=\214" \
- "\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<\244\317c" \
- "\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377\377\377" \
- "\377\202\377\376\377\241\377\377\377\2kkm::<\202;;=\1""99;\204::<\203" \
- ";;=\2SSU\364\364\364\377\377\377\377\336\377\377\377\3\376\376\376\377" \
- "\377\377\376\376\376\204\377\377\377\2\376\376\376\250\250\252\202::" \
- "<\1;;=\210::<\2FFH\333\333\333\202\377\377\377\1\376\376\376\235\377" \
- "\377\377\2\265\265\265;;=\203::<\1;;=\205::<\1;;=\204::<\3;;=FFH\332" \
- "\332\332\206\377\377\377\3\376\376\376\377\377\377\376\376\376\243\377" \
- "\377\377\4\376\377\377\377\377\375\377\376\377\376\376\377\202\377\377" \
- "\377\2\376\377\375\376\377\377\230\377\377\377\10\376\377\377\377\376" \
- "\377\376\377\377\376\377\375\376\376\376\376\377\377\377\377\377\377" \
- "\376\377\231\377\377\377\7\377\376\377\376\376\374\376\377\377\377\377" \
- "\375\374\377\377\376\377\377\377\376\377\231\377\377\377\17\375\377\374" \
- "\377\377\375\377\377\377\377\376\377\376\377\377\377\376\377\377\377" \
- "\377\376\377\377\376\376\374\377\377\377\377\377\373\377\377\377\376" \
- "\377\377\377\377\377\377\377\375\220\377\377\377\4\377\377\373\377\377" \
- "\377\377\377\375\377\377\377\202\376\377\377\2\377\377\375\377\377\373" \
- "\251\377\377\377\10\376\376\377\377\377\375\377\377\377\377\377\375\377" \
- "\377\377\377\376\377\377\377\375\376\377\377\202\377\377\377\6\370\373" \
- "\362\243\322b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4\214" \
- "\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306>\215" \
- "\307\77\214\305@\244\317c\367\375\361\251\377\377\377\6\363\363\363T" \
- "TT::<;;=::<;;=\206::<\2;;=www\204\377\377\377\1\376\376\376\377\377\377" \
- "\377\340\377\377\377\2\332\332\332;;=\203::<\3;;=99;;;=\203::<\3;;=:" \
- ":<\265\265\267\204\377\377\377\1\376\376\376\235\377\377\377\12\265\265" \
- "\267;;=::<;;=99;;;=::<;;=::<;;=\202::<\1;;=\203::<\3;;=FFF\332\332\332" \
- "\206\377\377\377\1\376\376\376\244\377\377\377\202\377\377\375\1\377" \
- "\377\377\202\376\377\375\3\376\376\377\377\377\377\377\376\377\230\377" \
- "\377\377\3\376\377\375\377\377\377\377\377\373\202\377\376\377\2\377" \
- "\377\377\376\376\376\231\377\377\377\10\376\377\373\376\375\377\377\377" \
- "\375\377\376\377\377\375\377\377\377\373\377\376\377\377\377\375\230" \
- "\377\377\377\12\377\376\377\377\377\377\377\375\376\376\377\377\376\377" \
- "\372\376\377\377\377\377\377\376\377\375\377\376\377\377\377\375\203" \
- "\377\377\377\202\376\377\375\1\375\376\377\227\377\377\377\1\377\374" \
- "\377\250\377\377\377\6\376\376\377\377\376\377\375\376\377\376\377\377" \
- "\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373\366\241" \
- "\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306@" \
- "\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215" \
- "\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\251\377" \
- "\377\377\2\331\331\331;;=\206::<\1;;=\203::<\2;;=\265\265\265\204\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377" \
- "\322\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\202\377\377\377\2\363\363\363SSU\203::<\2;;=::<\202" \
- ";;=\2""99;;;=\202::<\1\204\204\204\206\377\377\377\1\376\376\376\234" \
- "\377\377\377\7\376\376\376\265\265\265;;=::<;;=::<;;=\203::<\1;;=\203" \
- "::<\1;;=\203::<\2GGI\332\332\332\203\377\377\377\1\376\376\376\247\377" \
- "\377\377\1\377\377\375\202\377\376\377\1\377\375\377\202\377\377\377" \
- "\1\377\376\377\232\377\377\377\6\377\377\375\377\377\377\375\377\376" \
- "\376\377\375\377\377\375\377\375\377\230\377\377\377\202\377\377\375" \
- "\2\377\377\377\376\376\376\202\377\377\377\2\376\377\377\374\377\377" \
- "\230\377\377\377\1\377\377\375\202\377\376\377\1\375\376\377\203\377" \
- "\377\377\1\377\377\375\202\377\377\377\6\376\376\377\377\377\375\377" \
- "\377\377\377\375\377\377\376\377\377\377\375\220\377\377\377\1\376\377" \
- "\377\202\377\377\377\3\376\377\375\376\376\376\377\376\377\252\377\377" \
- "\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374\377\377" \
- "\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215\307\77" \
- "\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D\216\306" \
- "\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77\215\305" \
- "@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\252\377\377" \
- "\377\2\250\250\25099;\204::<\12;;=99;::<;;=99;::<FFH\346\346\346\377" \
- "\377\377\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377\330" \
- "\377\377\377\1\376\376\376\204\377\377\377\3\221\221\221::<;;=\202::" \
- "<\5;;=::<;;=::<;;=\202::<\4___\363\363\363\377\377\377\376\376\376\202" \
- "\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377\376\376" \
- "\376\234\377\377\377\2\264\264\264;;=\202::<\2""99;;;=\202::<\3""99;" \
- ";;=::<\202;;=\202::<\4;;=::<GGI\332\332\332\210\377\377\377\1\376\376" \
- "\376\241\377\377\377\7\376\377\377\376\376\377\377\377\377\377\377\375" \
- "\376\377\375\375\377\376\376\377\377\230\377\377\377\3\376\376\377\376" \
- "\377\377\376\376\377\203\377\377\377\1\376\376\374\231\377\377\377\1" \
- "\377\376\377\202\377\377\377\202\376\377\377\1\376\376\376\232\377\377" \
- "\377\11\376\377\377\376\376\376\377\377\377\376\377\377\377\377\377\377" \
- "\377\375\376\377\377\376\376\377\376\377\377\202\377\377\377\5\377\377" \
- "\375\377\377\377\377\376\377\377\377\377\376\377\377\220\377\377\377" \
- "\10\376\376\377\377\376\377\377\377\377\376\376\376\377\376\377\377\377" \
- "\375\377\376\377\377\377\375\251\377\377\377\37\376\377\377\376\377\375" \
- "\377\375\376\375\377\376\377\377\375\377\377\377\377\376\377\370\373" \
- "\362\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<\214\306" \
- ">\214\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215\305>\212" \
- "\307>\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376\377\377" \
- "\376\376\376\376\377\377\253\377\377\377\1yyy\205::<\3;;=::<99;\202;" \
- ";=\3::<__a\376\376\376\377\377\377\377\335\377\377\377\1\376\376\376" \
- "\202\377\377\377\5\301\301\301::<;;=99;;;=\207::<\2GGI\332\332\332\203" \
- "\377\377\377\1\376\376\376\243\377\377\377\2\265\265\267;;=\203::<\2" \
- "99;;;=\202::<\1;;=\202::<\1;;=\202::<\4;;=::<FFF\332\332\332\203\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\242\377\377\377" \
- "\1\377\377\375\204\377\377\377\1\376\377\377\231\377\377\377\202\377" \
- "\376\377\202\377\377\377\4\377\377\375\377\377\377\376\377\377\375\377" \
- "\376\230\377\377\377\203\377\377\375\202\377\377\377\2\376\376\376\376" \
- "\377\377\231\377\377\377\1\376\376\376\202\376\377\377\13\377\376\374" \
- "\377\376\377\376\376\374\376\377\377\377\377\377\376\377\377\377\377" \
- "\377\377\377\375\376\376\376\377\377\377\377\376\377\222\377\377\377" \
- "\202\377\377\375\5\377\377\377\376\377\377\377\377\377\377\377\375\376" \
- "\377\377\251\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376" \
- "\377\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214" \
- "\305@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>" \
- "\212\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370" \
- "\373\362\377\377\377\202\377\376\377\1\377\377\375\254\377\377\377\4" \
- "\363\363\363SSU;;=99;\202;;=\1""99;\204::<\3;;=::<\235\235\237\377\377" \
- "\377\377\334\377\377\377\1\376\376\376\202\377\377\377\2\363\363\363" \
- "GGI\202::<\7;;=::<99;::<;;=::<;;=\202::<\2\266\266\266\376\376\376\204" \
- "\377\377\377\202\376\376\376\202\377\377\377\1\376\376\376\236\377\377" \
- "\377\3\376\376\376\265\265\267;;=\202::<\2;;=99;\205::<\1;;=\204::<\4" \
- ";;=FFH\332\332\332\376\376\376\205\377\377\377\1\376\376\376\240\377" \
- "\377\377\10\376\377\375\377\375\377\377\377\375\376\377\375\377\377\377" \
- "\377\376\377\377\377\377\376\376\374\230\377\377\377\10\374\377\377\377" \
- "\376\374\377\377\377\376\376\374\377\376\377\376\377\377\377\377\377" \
- "\377\376\377\230\377\377\377\3\377\377\375\377\377\377\376\377\375\203" \
- "\377\377\377\1\377\376\377\231\377\377\377\6\377\375\377\376\376\374" \
- "\377\377\377\377\376\377\376\377\375\377\376\377\202\377\377\377\2\377" \
- "\376\377\377\377\377\202\376\377\377\2\376\376\377\376\377\377\222\377" \
- "\377\377\2\377\377\375\377\375\377\202\376\377\377\4\376\376\376\376" \
- "\377\377\375\377\374\377\375\377\251\377\377\377\1\375\377\376\202\377" \
- "\377\375\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212" \
- "\307<\215\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<" \
- "\214\306>\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244" \
- "\317c\370\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377" \
- "\377\375\377\376\377\252\377\377\377\5\376\376\376\377\377\377\333\333" \
- "\33399;;;=\202::<\5;;=99;;;=99;;;=\203::<\1\332\332\334\377\377\377\377" \
- "\330\377\377\377\1\376\376\376\205\377\377\377\1xxx\202::<\1;;=\202:" \
- ":<\1;;=\204::<\4:::xxx\376\376\376\377\377\377\202\376\376\376\205\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\237\377\377\377\1\265" \
- "\265\265\204::<\6;;=::<;;=::<;;=::<\202;;=\203::<\4;;=FFH\333\333\333" \
- "\376\376\376\202\377\377\377\1\376\376\376\242\377\377\377\7\376\376" \
- "\376\377\376\377\326\352\267\247\324o\247\324m\252\324r\247\324o\231" \
- "\252\324p\10\323\353\271\377\376\377\377\377\377\376\377\377\350\365" \
- "\333\253\323p\250\324r\251\324k\230\252\324p\10\250\325n\252\324p\277" \
- "\337\223\376\377\377\377\377\377\375\377\376\376\377\377\276\336\222" \
- "\230\252\324p\7\250\325p\250\324r\247\324o\253\324n\251\323m\346\364" \
- "\332\377\376\377\202\377\377\377\7\323\352\266\253\323p\251\323m\253" \
- "\323r\251\323o\247\324m\252\324r\220\252\324p\10\252\324n\253\324n\247" \
- "\324k\252\324p\254\325o\247\324m\252\324p\324\353\267\250\377\377\377" \
- "\3\377\376\377\377\377\377\375\377\376\202\377\377\377\11\373\373\363" \
- "\241\321d\214\306>\213\310=\214\306>\214\305@\213\310=\212\306@\217\304" \
- ">\202\215\307=\14\214\306>\215\305>\214\306>\215\305>\217\304@\215\307" \
- "\77\215\307=\242\320c\367\375\361\376\376\377\377\376\377\376\376\376" \
- "\202\377\377\375\2\374\377\377\377\376\377\254\377\377\377\2\376\376" \
- "\376\251\251\251\202::<\5;;=::<;;=99;;;=\204::<\1``b\377\377\377\377" \
- "\334\377\377\377\3\376\376\376\301\301\301:::\205::<\1""99;\202::<\4" \
- ";;=::<SSS\362\362\362\207\377\377\377\1\376\376\376\202\377\377\377\202" \
- "\376\376\376\240\377\377\377\1\265\265\267\203::<\2""99;;;=\203::<\1" \
- ";;=\202::<\202;;=\203::<\2FFH\332\332\332\245\377\377\377\10\376\377" \
- "\377\377\377\377\305\342\237\215\306A\215\307\77\215\305@\213\310=\214" \
- "\305@\230\214\306>\10\304\341\237\377\374\377\377\376\377\377\377\377" \
- "\341\362\322\215\305>\212\307>\215\305>\230\214\306>\4\215\305<\214\305" \
- "@\252\324r\376\377\377\202\377\377\377\2\377\377\375\250\324r\230\214" \
- "\306>\20\215\307\77\214\306>\214\306<\214\305B\212\307>\337\363\320\377" \
- "\376\377\376\377\377\376\376\374\305\342\240\214\305@\213\310=\215\305" \
- "@\214\306>\212\307<\214\305@\220\214\306>\10\214\305@\215\306C\212\307" \
- "<\214\306>\215\305>\212\306@\215\305>\304\343\237\250\377\377\377\1\377" \
- "\377\375\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306" \
- ">\213\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215" \
- "\307=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<" \
- "\244\317c\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377" \
- "\377\377\377\202\377\376\377\257\377\377\377\1kkm\202::<\2;;=::<\202" \
- ";;=\3::<;;=::<\202;;=\1\233\233\233\377\377\377\377\330\377\377\377\1" \
- "\376\376\376\202\377\377\377\3\364\364\366FFH;;=\205::<\3;;=::<;;=\202" \
- "::<\1\316\316\316\256\377\377\377\2\265\265\265;;=\203::<\1;;=\205::" \
- "<\1;;=\204::<\3;;=FFH\332\332\332\206\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\235\377\377\377\1\304\343\240\235\214\306>\1\305\342" \
- "\237\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377" \
- "\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377" \
- "\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306" \
- ">\1\214\305@\205\214\306>\1\305\342\237\241\377\377\377\10\376\376\377" \
- "\377\377\375\377\377\377\377\377\375\377\377\377\377\376\377\377\377" \
- "\375\376\377\377\202\377\377\377\6\370\373\362\243\322b\211\307B\213" \
- "\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305@\214\306<\215" \
- "\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214\305@\244\317" \
- "c\367\375\361\267\377\377\377\2\363\363\363FFF\204::<\1;;=\203::<\4:" \
- "9>::<;;=\332\332\332\377\377\377\377\332\377\377\377\1yy{\202::<\2""9" \
- "9;;;=\202::<\6;;=99;::<;;=::<\234\234\236\260\377\377\377\12\265\265" \
- "\267;;=::<;;=99;;;=::<;;=::<;;=\202::<\1;;=\203::<\3;;=FFF\332\332\332" \
- "\206\377\377\377\1\376\376\376\236\377\377\377\1\304\343\240\235\214" \
- "\306>\1\305\342\237\203\377\377\377\1\342\362\316\235\214\306>\1\250" \
- "\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316" \
- "\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305" \
- "@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\240\377\377\377" \
- "\6\376\376\377\377\376\377\375\376\377\376\377\377\377\377\375\375\377" \
- "\376\203\377\377\377\27\377\377\375\372\373\366\241\321a\217\304@\212" \
- "\307<\214\306>\215\305>\215\305@\213\310=\212\306@\214\306>\214\305B" \
- "\215\307\77\215\305>\215\306A\212\307>\214\306>\215\307\77\214\306>\242" \
- "\322b\370\373\362\376\376\377\377\375\376\267\377\377\377\1\301\301\301" \
- "\205::<\3;;=::<;;=\202::<\2""99;```\377\377\377\377\331\377\377\377\1" \
- "\301\301\301\202::<\1;;=\203::<\1;;=\202::<\3<<>::<__a\261\377\377\377" \
- "\7\376\376\376\265\265\265;;=::<;;=::<;;=\203::<\1;;=\203::<\1;;=\203" \
- "::<\2GGI\332\332\332\203\377\377\377\1\376\376\376\240\377\377\377\1" \
- "\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316" \
- "\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215" \
- "\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202" \
- "\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237" \
- "\240\377\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377" \
- "\374\377\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320" \
- "b\215\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214" \
- "\305D\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307" \
- "\77\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375" \
- "\270\377\377\377\3\204\204\204::<;;=\206::<\4;;=::<;;=\234\234\236\377" \
- "\377\377\377\325\377\377\377\4\376\376\376\377\377\377\363\363\363SS" \
- "U\211::<\4""99;::<\332\332\334\376\376\376\202\377\377\377\1\376\376" \
- "\376\257\377\377\377\2\264\264\264;;=\202::<\2""99;;;=\202::<\3""99;" \
- ";;=::<\202;;=\202::<\4;;=::<GGI\332\332\332\210\377\377\377\1\376\376" \
- "\376\232\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377" \
- "\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252" \
- "\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342" \
- "\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305" \
- "@\205\214\306>\1\305\342\237\241\377\377\377\37\376\377\377\376\377\375" \
- "\377\375\376\375\377\376\377\377\375\377\377\377\377\376\377\370\373" \
- "\362\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<\214\306" \
- ">\214\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215\305>\212" \
- "\307>\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376\377\377" \
- "\376\376\376\376\377\377\270\377\377\377\3\363\363\363TTT;;=\202::<\1" \
- ";;=\203::<\5""99;;;=::<;;=\332\332\332\377\377\377\377\323\377\377\377" \
- "\1\376\376\376\202\377\377\377\4\221\221\221;;=99;;;=\202::<\1;;=\202" \
- "::<\1;;=\202::<\1\233\233\233\202\377\377\377\1\376\376\376\262\377\377" \
- "\377\2\265\265\267;;=\203::<\2""99;;;=\202::<\1;;=\202::<\1;;=\202::" \
- "<\4;;=::<FFF\332\332\332\203\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\376\376\376\233\377\377\377\1\304\343\240\235\214\306>\1\305\342\237" \
- "\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377" \
- "\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305" \
- "\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214" \
- "\305@\205\214\306>\1\305\342\237\240\377\377\377\202\377\377\375\3\377" \
- "\374\377\375\377\376\376\377\377\202\377\377\377\25\370\373\364\243\322" \
- "b\217\304@\212\306@\214\305@\215\305>\212\307>\212\306@\214\305B\214" \
- "\305@\214\305B\214\306>\212\307>\212\310\77\214\306>\217\304@\214\306" \
- ">\214\305@\242\322b\370\373\362\377\377\377\202\377\376\377\1\377\377" \
- "\375\272\377\377\377\7\316\316\316::<;;=::<99;::<;;=\205::<\1kkm\377" \
- "\377\377\377\325\377\377\377\1\315\315\315\206::<\6""99;::<99;;;=::<" \
- "```\206\377\377\377\1\376\376\376\257\377\377\377\3\376\376\376\265\265" \
- "\267;;=\202::<\2;;=99;\205::<\1;;=\204::<\4;;=FFH\332\332\332\376\376" \
- "\376\205\377\377\377\1\376\376\376\232\377\377\377\1\304\343\240\235" \
- "\214\306>\1\305\342\237\203\377\377\377\1\342\362\316\235\214\306>\1" \
- "\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307\77\342\362" \
- "\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214\306>\1\214" \
- "\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\241\377\377" \
- "\377\1\375\377\376\202\377\377\375\34\377\377\377\376\376\376\373\373" \
- "\363\243\322b\211\307B\212\307<\215\305>\214\306>\212\307>\214\305@\217" \
- "\304>\212\307<\214\306<\214\306>\215\307\77\213\307A\214\306>\215\305" \
- "@\215\307\77\212\307>\244\317c\370\373\362\377\377\373\376\377\377\377" \
- "\376\377\375\376\377\377\377\375\377\376\377\272\377\377\377\2\222\222" \
- "\22299;\205::<\1;;=\203::<\2;;=\250\250\250\377\377\377\377\324\377\377" \
- "\377\4```;;=99;;;=\204::<\5;;=::<;;=::<\331\331\331\207\377\377\377\1" \
- "\376\376\376\260\377\377\377\1\265\265\265\204::<\6;;=::<;;=::<;;=::" \
- "<\202;;=\203::<\4;;=FFH\333\333\333\376\376\376\202\377\377\377\1\376" \
- "\376\376\234\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203" \
- "\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1" \
- "\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305" \
- "\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214" \
- "\305@\205\214\306>\1\305\342\237\240\377\377\377\3\377\376\377\377\377" \
- "\377\375\377\376\202\377\377\377\11\373\373\363\241\321d\214\306>\213" \
- "\310=\214\306>\214\305@\213\310=\212\306@\217\304>\202\215\307=\14\214" \
- "\306>\215\305>\214\306>\215\305>\217\304@\215\307\77\215\307=\242\320" \
- "c\367\375\361\376\376\377\377\376\377\376\376\376\202\377\377\375\2\374" \
- "\377\377\377\376\377\262\377\377\377\2\376\376\376\377\377\377\202\376" \
- "\376\376\204\377\377\377\5\363\363\363SSU99;::<;;=\207::<\2GGG\363\363" \
- "\363\377\377\377\377\322\377\377\377\4\234\234\234:::::<;;=\202::<\1" \
- ";;=\203::<\202;;=\1\234\234\236\207\377\377\377\1\376\376\376\262\377" \
- "\377\377\1\265\265\267\203::<\2""99;;;=\203::<\1;;=\202::<\202;;=\203" \
- "::<\2FFH\332\332\332\237\377\377\377\1\304\343\240\235\214\306>\1\305" \
- "\342\237\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377" \
- "\377\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377" \
- "\377\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214" \
- "\306>\1\214\305@\205\214\306>\1\305\342\237\240\377\377\377\1\377\377" \
- "\375\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306>\213" \
- "\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215\307" \
- "=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<\244" \
- "\317c\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377\377" \
- "\377\377\202\377\376\377\273\377\377\377\2\376\376\376\316\316\316\206" \
- "::<\202;;=\4::<;;=::<xxx\377\377\377\377\321\377\377\377\2\346\346\350" \
- "FFH\203::<\1;;=\206::<\1__a\202\377\377\377\1\377\377\375\271\377\377" \
- "\377\2\265\265\265;;=\203::<\1;;=\205::<\1;;=\203::<\4;;=::<GGI\331\331" \
- "\331\236\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377" \
- "\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252" \
- "\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342" \
- "\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305" \
- "@\205\214\306>\1\305\342\237\231\377\377\377\10\376\376\377\377\377\375" \
- "\377\377\377\377\377\375\377\377\377\377\376\377\377\377\375\376\377" \
- "\377\202\377\377\377\6\370\373\362\243\322b\211\307B\213\310=\214\305" \
- "@\214\306<\202\215\305@\4\214\306<\214\305@\214\306<\215\307\77\202\214" \
- "\306>\6\212\307>\214\306>\215\307\77\214\305@\244\317c\367\375\361\305" \
- "\377\377\377\2xxz;;=\203::<\3;;=::<;;=\203::<\2;;=\315\315\315\377\377" \
- "\377\377\313\377\377\377\203\376\376\376\202\377\377\377\3xxz;;=::<\202" \
- ";;=\1""99;\202;;=\202::<\4;;=::<\333\333\335\376\376\376\274\377\377" \
- "\377\12\265\265\267;;=::<;;=99;;;=::<;;=::<;;=\202::<\1;;=\202::<\4;" \
- ";=99;GGI\332\332\332\235\377\377\377\1\304\343\240\235\214\306>\1\305" \
- "\342\237\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377" \
- "\377\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377" \
- "\377\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214" \
- "\306>\1\214\305@\205\214\306>\1\305\342\237\230\377\377\377\6\376\376" \
- "\377\377\376\377\375\376\377\376\377\377\377\377\375\375\377\376\203" \
- "\377\377\377\27\377\377\375\372\373\366\241\321a\217\304@\212\307<\214" \
- "\306>\215\305>\215\305@\213\310=\212\306@\214\306>\214\305B\215\307\77" \
- "\215\305>\215\306A\212\307>\214\306>\215\307\77\214\306>\242\322b\370" \
- "\373\362\376\376\377\377\375\376\304\377\377\377\2\364\364\364FFH\203" \
- "::<\2""99;;;=\203::<\4<<>99;TTT\376\376\376\377\377\377\377\310\377\377" \
- "\377\1\376\376\376\205\377\377\377\3\316\316\316::<99;\206::<\1;;=\202" \
- "::<\1\221\221\221\203\377\377\377\1\376\376\376\272\377\377\377\7\376" \
- "\376\376\265\265\265;;=::<;;=::<;;=\203::<\1;;=\203::<\6;;=::<;;=::<" \
- "FFH\332\332\332\234\377\377\377\1\304\343\240\235\214\306>\1\305\342" \
- "\237\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377" \
- "\377\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377" \
- "\3\305\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306" \
- ">\1\214\305@\205\214\306>\1\305\342\237\230\377\377\377\7\377\377\375" \
- "\375\376\377\376\377\377\376\377\375\377\374\377\377\377\375\375\377" \
- "\376\202\377\377\377\5\372\373\366\240\320b\215\307\77\212\306@\215\305" \
- ">\202\214\305@\20\215\305@\212\306@\214\305D\216\306\77\214\306>\215" \
- "\307\77\214\306>\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373" \
- "\362\377\377\373\377\376\377\377\377\375\304\377\377\377\3\376\376\376" \
- "\265\265\267;;=\204::<\1""99;\203::<\3;;=::<\234\234\234\203\377\377" \
- "\377\1\376\376\376\377\377\377\377\306\377\377\377\7\376\376\376\377" \
- "\377\377\376\376\376\377\377\377__a::<;;=\203::<\7;;=::<;;=::<;;=SSU" \
- "\363\363\363\300\377\377\377\2\264\264\264;;=\202::<\2""99;;;=\202::" \
- "<\3""99;;;=::<\202;;=\204::<\2FFH\332\332\332\233\377\377\377\1\304\343" \
- "\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316\235\214" \
- "\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307\77" \
- "\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214" \
- "\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\231" \
- "\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377\376\377\377" \
- "\375\377\377\377\377\376\377\370\373\362\241\321a\215\307\77\215\307" \
- "=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216\306\77\215" \
- "\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>\242\321" \
- "a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377\301\377" \
- "\377\377\1\376\376\376\204\377\377\377\2kkm99;\203::<\202;;=\1""99;\203" \
- "::<\2FFH\363\363\363\377\377\377\377\310\377\377\377\1\376\376\376\203" \
- "\377\377\377\3\250\250\252::<;;=\203::<\1;;=\202::<\5;;=::<;;=\301\301" \
- "\301\376\376\376\301\377\377\377\2\265\265\267;;=\203::<\2""99;;;=\202" \
- "::<\1;;=\202::<\2;;=::<\202;;=\3::<GGI\332\332\332\232\377\377\377\1" \
- "\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316" \
- "\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215" \
- "\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202" \
- "\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237" \
- "\230\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377" \
- "\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215" \
- "\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>" \
- "\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362" \
- "\377\377\377\202\377\376\377\1\377\377\375\301\377\377\377\1\376\376" \
- "\376\204\377\377\377\2\376\376\376\346\346\350\203::<\4;;=99;::<;;=\204" \
- "::<\3\203\203\203\377\377\377\376\376\376\377\377\377\377\311\377\377" \
- "\377\2\364\364\364FFH\202::<\5;;=::<;;=::<;;=\202::<\2;;=kkm\202\377" \
- "\377\377\1\376\376\376\300\377\377\377\3\376\376\376\265\265\267;;=\202" \
- "::<\2;;=99;\204::<\3;;=99;;;=\202::<\3;;=::<\265\265\265\232\377\377" \
- "\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362" \
- "\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>" \
- "\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215" \
- "\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1" \
- "\305\342\237\231\377\377\377\1\375\377\376\202\377\377\375\34\377\377" \
- "\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215\305>\214" \
- "\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>\215\307\77" \
- "\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362" \
- "\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376" \
- "\377\301\377\377\377\202\376\376\376\2\377\377\377\376\376\376\202\377" \
- "\377\377\1\234\234\236\203::<\1;;=\206::<\2;;=\331\331\331\377\377\377" \
- "\377\306\377\377\377\1\376\376\376\203\377\377\377\4\233\233\233;;=:" \
- ":<;;=\202::<\3;;=99;;;=\203::<\1\346\346\350\305\377\377\377\1\265\265" \
- "\265\204::<\3;;=::<;;=\203::<\5;;=99;;;=::<\265\265\267\233\377\377\377" \
- "\1\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316" \
- "\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215" \
- "\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202" \
- "\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237" \
- "\230\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \
- "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \
- "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \
- ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \
- "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\301\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\6\364" \
- "\364\364SSU::<;;=::<;;=\205::<\4""99;kkk\377\377\377\376\376\376\377" \
- "\377\377\377\307\377\377\377\2\346\346\346;;;\204::<\3;;=99;;;=\203:" \
- ":<\1\234\234\236\205\377\377\377\1\376\376\376\301\377\377\377\1\265" \
- "\265\267\203::<\2""99;;;=\202::<\1;;;\204::<\1\265\265\267\234\377\377" \
- "\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362" \
- "\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>" \
- "\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215" \
- "\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1" \
- "\305\342\237\230\377\377\377\1\377\377\375\202\377\377\377\32\377\376" \
- "\377\370\373\364\243\322b\214\306>\213\310\77\214\305@\215\305>\215\305" \
- "@\214\306>\214\305B\212\307<\215\307=\214\305B\214\306>\215\306A\212" \
- "\306@\212\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377\377" \
- "\375\376\377\377\375\376\377\377\377\377\377\202\377\376\377\306\377" \
- "\377\377\1\376\376\376\202\377\377\377\2\301\301\303::<\202;;=\11::<" \
- ";;=::<;;=::<99;;;=::<\301\301\301\377\377\377\377\306\377\377\377\12" \
- "\376\376\376\377\377\377\204\204\204;;=::<:9>;;=::<99;;;=\203::<\5SS" \
- "U\363\363\363\376\376\376\377\377\377\376\376\376\305\377\377\377\5\265" \
- "\265\26599;;;=::<;;=\206::<\1\266\266\270\235\377\377\377\1\304\343\240" \
- "\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316\235\214\306" \
- ">\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307\77\342" \
- "\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214\306" \
- ">\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\221\377" \
- "\377\377\10\376\376\377\377\377\375\377\377\377\377\377\375\377\377\377" \
- "\377\376\377\377\377\375\376\377\377\202\377\377\377\6\370\373\362\243" \
- "\322b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214" \
- "\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77" \
- "\214\305@\244\317c\367\375\361\322\377\377\377\1kkk\203::<\4;;=99;::" \
- "<;;=\203::<\1SSU\210\377\377\377\1\376\376\376\377\377\377\377\276\377" \
- "\377\377\1\316\316\316\202::<\1;;=\202::<\202;;=\202::<\4;;=::<\265\265" \
- "\267\376\376\376\307\377\377\377\3\376\376\376\377\377\377\265\265\267" \
- "\207::<\3""99;\266\266\270\376\376\377\202\377\377\377\1\376\376\376" \
- "\232\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377" \
- "\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324" \
- "p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237" \
- "\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205" \
- "\214\306>\1\305\342\237\220\377\377\377\6\376\376\377\377\376\377\375" \
- "\376\377\376\377\377\377\377\375\375\377\376\203\377\377\377\27\377\377" \
- "\375\372\373\366\241\321a\217\304@\212\307<\214\306>\215\305>\215\305" \
- "@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305>\215\306A\212" \
- "\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362\376\376\377\377" \
- "\375\376\321\377\377\377\1\346\346\346\204::<\1;;=\202::<\5;;=99;;;=" \
- "::<\266\266\266\205\377\377\377\202\376\376\376\2\377\377\377\376\376" \
- "\376\377\377\377\377\273\377\377\377\5\376\376\376\377\377\377kkm::<" \
- ";;=\202::<\1;;=\203::<\3;;=::<kkm\203\377\377\377\1\376\376\376\306\377" \
- "\377\377\4\376\376\376\377\377\377\265\265\265::<\202;;=\202::<\2""9" \
- "9;\266\266\270\237\377\377\377\1\304\343\240\235\214\306>\1\305\342\237" \
- "\203\377\377\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377" \
- "\1\252\324p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305" \
- "\342\237\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214" \
- "\305@\205\214\306>\1\305\342\237\220\377\377\377\7\377\377\375\375\376" \
- "\377\376\377\377\376\377\375\377\374\377\377\377\375\375\377\376\202" \
- "\377\377\377\5\372\373\366\240\320b\215\307\77\212\306@\215\305>\202" \
- "\214\305@\20\215\305@\212\306@\214\305D\216\306\77\214\306>\215\307\77" \
- "\214\306>\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373\362" \
- "\377\377\373\377\376\377\377\377\375\322\377\377\377\1\221\221\223\202" \
- "::<\12;;=99;::<;;=::<;;=99;;;=EEG\364\364\364\203\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\376\376\376\377\377\377\377\275\377\377\377\2" \
- "\316\316\320;;=\205::<\2""99;;;=\203::<\3\316\316\316\377\377\377\376" \
- "\376\376\313\377\377\377\3\265\265\265;;=99;\202::<\1\266\266\270\203" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\232\377\377\377\1" \
- "\304\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316" \
- "\235\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215" \
- "\307\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202" \
- "\214\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237" \
- "\221\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377\376\377" \
- "\377\375\377\377\377\377\376\377\370\373\362\241\321a\215\307\77\215" \
- "\307=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216\306\77" \
- "\215\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>\242" \
- "\321a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377\322" \
- "\377\377\377\2\363\363\363FFH\203::<\202;;=\203::<\3;;=::<\235\235\235" \
- "\204\377\377\377\1\376\376\376\377\377\377\377\277\377\377\377\1__a\202" \
- "::<\1;;=\203::<\5;;=::<;;=::<\204\204\206\312\377\377\377\1\376\376\376" \
- "\202\377\377\377\7\376\376\376\377\377\377\265\265\267;;=99;\266\266" \
- "\270\376\376\377\203\377\377\377\202\376\376\376\233\377\377\377\1\304" \
- "\343\240\235\214\306>\1\305\342\237\203\377\377\377\1\342\362\316\235" \
- "\214\306>\1\250\325p\204\377\377\377\1\252\324p\234\214\306>\2\215\307" \
- "\77\342\362\316\203\377\377\377\3\305\342\237\214\305@\215\305>\202\214" \
- "\306>\1\214\305@\222\214\306>\1\214\305@\205\214\306>\1\305\342\237\220" \
- "\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202" \
- "\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215\305" \
- ">\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>\212" \
- "\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377" \
- "\377\377\202\377\376\377\1\377\377\375\324\377\377\377\4\234\234\234" \
- ";;=::<<<>\204::<\1;;=\202::<\2FFH\363\363\363\204\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\376\376\376\377\377\377\377\272\377\377\377\1" \
- "\265\265\265\202::<\5;;=99;::<;;=::<\202;;=\3""99;;;=\346\346\346\320" \
- "\377\377\377\2\264\264\266\265\265\267\203\377\377\377\202\376\376\376" \
- "\235\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377" \
- "\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324" \
- "p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237" \
- "\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205" \
- "\214\306>\1\305\342\237\221\377\377\377\1\375\377\376\202\377\377\375" \
- "\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215" \
- "\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>" \
- "\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370" \
- "\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375" \
- "\377\376\377\320\377\377\377\1\376\376\376\203\377\377\377\2SSU;;=\203" \
- "::<\1;;=\203::<\3""99;::<\234\234\236\203\377\377\377\1\376\376\376\377" \
- "\377\377\377\276\377\377\377\5RRT99;;;=99;;;=\203::<\4""99;;;=::<\234" \
- "\234\236\314\377\377\377\1\376\376\376\212\377\377\377\1\376\376\376" \
- "\235\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377" \
- "\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324" \
- "p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237" \
- "\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205" \
- "\214\306>\1\305\342\237\220\377\377\377\3\377\376\377\377\377\377\375" \
- "\377\376\202\377\377\377\11\373\373\363\241\321d\214\306>\213\310=\214" \
- "\306>\214\305@\213\310=\212\306@\217\304>\202\215\307=\14\214\306>\215" \
- "\305>\214\306>\215\305>\217\304@\215\307\77\215\307=\242\320c\367\375" \
- "\361\376\376\377\377\376\377\376\376\376\202\377\377\375\2\374\377\377" \
- "\377\376\377\324\377\377\377\3\265\265\265;;=99;\202;;=\1""99;\202;;" \
- "=\5::<;;=::<GGI\363\363\363\206\377\377\377\1\376\376\376\377\377\377" \
- "\377\271\377\377\377\2\266\266\270;;=\202::<\1;;=\202::<\6;;=::<;;=:" \
- ":<FFH\363\363\363\324\377\377\377\3\376\376\376\377\377\377\376\376\376" \
- "\236\377\377\377\1\304\343\240\235\214\306>\1\305\342\237\203\377\377" \
- "\377\1\342\362\316\235\214\306>\1\250\325p\204\377\377\377\1\252\324" \
- "p\234\214\306>\2\215\307\77\342\362\316\203\377\377\377\3\305\342\237" \
- "\214\305@\215\305>\202\214\306>\1\214\305@\222\214\306>\1\214\305@\205" \
- "\214\306>\1\305\342\237\220\377\377\377\1\377\377\375\202\377\377\377" \
- "\32\377\376\377\370\373\364\243\322b\214\306>\213\310\77\214\305@\215" \
- "\305>\215\305@\214\306>\214\305B\212\307<\215\307=\214\305B\214\306>" \
- "\215\306A\212\306@\212\307>\214\306>\212\307<\244\317c\370\373\364\377" \
- "\377\377\377\375\376\377\377\375\376\377\377\377\377\377\202\377\376" \
- "\377\326\377\377\377\1__a\203::<\1;;=\203::<\1;;=\202::<\1\234\234\234" \
- "\377\377\377\377\274\377\377\377\1\376\376\376\203\377\377\377\3SSU;" \
- ";=99;\210::<\1\234\234\234\365\377\377\377\7\376\377\375\304\341\236" \
- "\215\306A\214\305B\215\307=\212\307>\212\306@\230\214\305@\1\304\341" \
- "\236\203\377\377\377\4\341\362\320\214\306>\213\310\77\215\305@\231\214" \
- "\305@\2\215\307\77\252\322q\202\377\376\377\202\377\377\377\1\250\325" \
- "n\230\214\305@\3\215\305>\215\306A\215\307\77\202\214\306<\10\342\360" \
- "\317\376\377\377\377\377\375\376\377\377\305\342\240\215\305@\212\306" \
- "@\215\305>\202\214\305@\1\215\307=\220\214\305@\10\214\306>\212\306@" \
- "\216\306A\212\307>\215\305>\215\305@\214\305@\304\343\237\211\377\377" \
- "\377\10\376\376\377\377\377\375\377\377\377\377\377\375\377\377\377\377" \
- "\376\377\377\377\375\376\377\377\202\377\377\377\6\370\373\362\243\322" \
- "b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305" \
- "@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214" \
- "\305@\244\317c\367\375\361\335\377\377\377\2\376\376\376\316\316\316" \
- "\211::<\3;;=GGI\363\363\365\203\377\377\377\1\376\376\376\377\377\377" \
- "\377\266\377\377\377\10\376\376\376\377\377\377\376\376\376\377\377\377" \
- "\265\265\265;;=::<;;=\207::<\2GGI\363\363\363\364\377\377\377\7\377\376" \
- "\377\377\377\375\304\341\236\215\305>\215\307\77\214\306>\214\305@\231" \
- "\214\306>\7\304\343\237\377\377\377\375\376\377\377\377\375\341\360\321" \
- "\215\306A\214\305@\233\214\306>\6\252\324n\376\376\376\377\377\377\376" \
- "\377\377\377\376\377\252\324p\230\214\306>\7\215\306A\212\307>\214\306" \
- ">\212\307>\214\306>\343\361\320\376\377\377\202\377\377\377\7\305\342" \
- "\237\215\305>\213\310\77\214\306>\214\305@\212\306@\215\307\77\222\214" \
- "\306>\6\215\305>\212\307>\214\306>\215\307=\215\305@\305\342\237\210" \
- "\377\377\377\6\376\376\377\377\376\377\375\376\377\376\377\377\377\377" \
- "\375\375\377\376\203\377\377\377\27\377\377\375\372\373\366\241\321a" \
- "\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306@\214\306" \
- ">\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215\307\77" \
- "\214\306>\242\322b\370\373\362\376\376\377\377\375\376\336\377\377\377" \
- "\1kkm\202::<\1;;=\205::<\202;;=\3\233\233\235\377\377\377\376\376\376" \
- "\377\377\377\377\274\377\377\377\3SSU99;;;=\20299;\1;;=\203::<\3;;=:" \
- ":<\234\234\236\366\377\377\377\7\376\377\375\305\342\240\213\304\77\213" \
- "\310\77\214\305@\215\306A\216\306=\230\214\306>\10\305\342\240\377\377" \
- "\375\376\377\377\377\376\377\341\360\317\214\306<\214\305@\212\306@\231" \
- "\214\306>\7\215\305@\252\324p\377\377\377\377\377\375\376\377\377\377" \
- "\376\374\252\324p\230\214\306>\7\212\307>\215\307\77\216\306A\212\307" \
- ">\213\304\77\343\361\320\377\377\375\202\377\377\377\3\307\342\237\214" \
- "\304\77\213\310\77\203\214\306>\1\215\307\77\220\214\306>\4\214\305@" \
- "\214\306<\215\304B\213\310\77\202\212\307>\2\215\305@\305\342\240\210" \
- "\377\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374" \
- "\377\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215" \
- "\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D" \
- "\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77" \
- "\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\331" \
- "\377\377\377\1\376\376\376\203\377\377\377\4\376\376\376\317\317\321" \
- "::<;;=\203::<\3;;=::<;;=\202::<\4FFH\363\363\363\377\377\377\376\376" \
- "\376\377\377\377\377\264\377\377\377\1\376\376\376\205\377\377\377\1" \
- "\265\265\267\202;;=\3::<99;;;=\202::<\202;;=\2::<SSU\366\377\377\377" \
- "\7\377\376\377\375\377\374\304\341\237\216\306\77\212\307<\213\310\77" \
- "\212\307>\231\214\306>\2\305\342\240\377\377\377\202\377\376\377\3\341" \
- "\362\316\216\306\77\214\306<\231\214\306>\3\215\305@\212\307>\252\324" \
- "p\203\377\377\377\2\377\376\377\247\324o\230\214\306>\20\215\306A\214" \
- "\305B\215\307\77\211\305\77\214\304;\342\362\315\377\377\377\377\376" \
- "\377\376\376\376\305\342\237\215\306A\210\307;\215\306A\216\306A\214" \
- "\306>\212\306@\220\214\306>\202\214\305@\6\216\305C\213\305=\214\305" \
- "B\215\307\77\216\306\77\303\344\237\211\377\377\377\37\376\377\377\376" \
- "\377\375\377\375\376\375\377\376\377\377\375\377\377\377\377\376\377" \
- "\370\373\362\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<" \
- "\214\306>\214\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215" \
- "\305>\212\307>\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376" \
- "\377\377\376\376\376\376\377\377\331\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\203\377\377\377\1kkm\202::<\6;;=::<;;=::<;;=::<\202" \
- ";;=\1\233\233\235\377\377\377\377\267\377\377\377\1\376\376\376\204\377" \
- "\377\377\2kkm;;=\202::<\2;;=::<\202;;=\203::<\5\265\265\267\377\377\377" \
- "\376\376\376\377\377\377\376\376\376\362\377\377\377\2\376\377\377\377" \
- "\376\377\202\377\377\377\202\377\376\377\2\377\377\377\377\377\375\231" \
- "\377\377\377\4\377\376\377\376\377\377\375\377\376\377\377\377\202\376" \
- "\377\377\231\377\377\377\10\374\377\375\377\376\377\377\377\375\376\376" \
- "\376\377\377\377\376\377\377\376\376\374\377\376\377\230\377\377\377" \
- "\1\377\376\377\203\377\377\375\4\376\377\377\377\375\377\377\377\377" \
- "\376\377\377\202\377\377\377\3\376\376\376\377\376\377\377\377\375\202" \
- "\376\377\377\1\377\377\375\220\377\377\377\10\377\377\375\377\377\377" \
- "\376\376\376\377\377\377\377\377\375\377\377\377\376\377\377\377\375" \
- "\377\210\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377" \
- "\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305" \
- "@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212" \
- "\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373" \
- "\362\377\377\377\202\377\376\377\1\377\377\375\340\377\377\377\1\316" \
- "\316\316\203::<\3;;=99;;;=\204::<\2FFH\363\363\363\202\377\377\377\1" \
- "\376\376\376\377\377\377\377\264\377\377\377\1\376\376\376\202\377\377" \
- "\377\1\316\316\320\206::<\1;;=\203::<\2SSU\376\376\376\366\377\377\377" \
- "\1\377\377\375\202\377\376\377\202\377\377\377\3\377\377\375\377\377" \
- "\377\376\377\377\230\377\377\377\202\376\377\377\6\377\377\375\377\377" \
- "\377\376\377\375\377\377\377\376\377\375\377\377\375\231\377\377\377" \
- "\2\376\377\377\377\377\375\202\377\377\377\1\376\376\376\232\377\377" \
- "\377\5\377\376\377\377\377\377\376\377\375\377\377\377\377\377\375\204" \
- "\377\377\377\202\376\377\377\1\376\376\376\202\377\377\377\202\376\377" \
- "\377\220\377\377\377\1\377\377\375\202\377\377\377\4\376\376\374\377" \
- "\376\377\377\377\377\376\377\375\212\377\377\377\1\375\377\376\202\377" \
- "\377\375\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212" \
- "\307<\215\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<" \
- "\214\306>\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244" \
- "\317c\370\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377" \
- "\377\375\377\376\377\334\377\377\377\1\376\376\376\202\377\377\377\10" \
- "\376\376\376kkm::<;;=99;;;=::<;;=\202::<\202;;=\1\234\234\236\203\377" \
- "\377\377\1\376\376\376\377\377\377\377\262\377\377\377\5\376\376\376" \
- "\377\377\377\376\376\376\377\377\377lln\210::<\3""99;;;=\265\265\265" \
- "\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\370\377" \
- "\377\377\1\376\377\377\230\377\377\377\7\377\376\377\377\377\375\377" \
- "\376\377\376\376\377\377\377\375\377\377\377\377\377\375\233\377\377" \
- "\377\1\377\376\377\203\377\377\377\1\376\377\375\231\377\377\377\5\377" \
- "\377\375\377\377\377\377\377\375\377\377\377\377\377\375\202\377\377" \
- "\377\1\377\377\375\203\377\377\377\2\376\376\376\377\376\377\226\377" \
- "\377\377\5\377\377\375\377\377\377\376\377\377\377\377\375\376\377\377" \
- "\210\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \
- "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \
- "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \
- ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \
- "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\333\377\377" \
- "\377\1\376\376\376\202\377\377\377\3\376\376\376\377\377\377\316\316" \
- "\320\203::<\1;;=\202::<\1;;=\203::<\2FFH\377\377\377\202\376\376\376" \
- "\377\377\377\377\262\377\377\377\5\376\376\376\377\377\377\376\376\376" \
- "\377\377\377\332\332\332\206::<\1;;=\202::<\5;;=FFH\363\363\363\377\377" \
- "\377\376\376\376\203\377\377\377\1\376\376\376\365\377\377\377\1\377" \
- "\377\375\202\377\377\377\1\377\377\375\230\377\377\377\2\376\377\377" \
- "\377\377\375\204\377\377\377\2\377\376\377\376\377\375\230\377\377\377" \
- "\4\377\377\375\377\377\377\377\377\373\376\377\377\203\377\377\377\1" \
- "\377\376\377\230\377\377\377\13\376\377\377\377\377\375\377\377\377\376" \
- "\377\377\377\375\376\377\377\377\377\377\375\376\377\377\377\376\377" \
- "\377\377\377\376\376\376\202\377\377\377\1\377\377\375\226\377\377\377" \
- "\202\376\377\377\2\377\377\375\377\376\377\210\377\377\377\1\377\377" \
- "\375\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306>\213" \
- "\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215\307" \
- "=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<\244" \
- "\317c\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377\377" \
- "\377\377\202\377\376\377\333\377\377\377\1\376\376\376\204\377\377\377" \
- "\11\376\376\376\377\377\377kkm::<;;=99;;;=::<;;=\202::<\3;;=::<\264\264" \
- "\264\377\377\377\377\265\377\377\377\1\376\376\376\202\377\377\377\1" \
- "\204\204\204\203::<\1;;=\206::<\1\235\235\237\377\377\377\377\377\377" \
- "\377\377\203\377\377\377\10\376\376\377\377\377\375\377\377\377\377\377" \
- "\375\377\377\377\377\376\377\377\377\375\376\377\377\202\377\377\377" \
- "\6\370\373\362\243\322b\211\307B\213\310=\214\305@\214\306<\202\215\305" \
- "@\4\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214" \
- "\306>\215\307\77\214\305@\244\317c\367\375\361\352\377\377\377\1\316" \
- "\316\316\203::<\1;;=\203::<\202;;=\2::<RRT\377\377\377\377\267\377\377" \
- "\377\3\346\346\346::<;;=\203::<\202;;=\5""99;::<;;=FFH\363\363\365\377" \
- "\377\377\377\377\377\377\377\202\377\377\377\6\376\376\377\377\376\377" \
- "\375\376\377\376\377\377\377\377\375\375\377\376\203\377\377\377\27\377" \
- "\377\375\372\373\366\241\321a\217\304@\212\307<\214\306>\215\305>\215" \
- "\305@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305>\215\306" \
- "A\212\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362\376\376" \
- "\377\377\375\376\352\377\377\377\2kkm;;=\207::<\3;;=::<\301\301\301\377" \
- "\377\377\377\266\377\377\377\2\221\221\221;;=\202::<\202;;=\202::<\1" \
- ";;=\202::<\1\235\235\237\377\377\377\377\377\377\377\377\203\377\377" \
- "\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374\377\377" \
- "\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215\307\77" \
- "\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D\216\306" \
- "\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77\215\305" \
- "@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\350\377\377" \
- "\377\4\376\376\376\377\377\377\265\265\26799;\203::<\3;;=::<;;=\203:" \
- ":<\2kkk\376\376\376\377\377\377\377\264\377\377\377\2\362\362\362FFH" \
- "\202::<\1;;=\203::<\5;;=::<;;=::<\363\363\363\377\377\377\377\377\377" \
- "\377\377\204\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377" \
- "\376\377\377\375\377\377\377\377\376\377\370\373\362\241\321a\215\307" \
- "\77\215\307=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216" \
- "\306\77\215\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306" \
- ">\242\321a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377" \
- "\352\377\377\377\2\376\376\376TTV\204::<\7;;=99;::<;;=99;::<\332\332" \
- "\332\377\377\377\377\263\377\377\377\3\376\376\376\266\266\266;;=\203" \
- "::<\202;;=\204::<\1\205\205\207\377\377\377\377\377\377\377\377\204\377" \
- "\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202\377" \
- "\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215\305>" \
- "\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>\212\310" \
- "\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377\377" \
- "\377\202\377\376\377\1\377\377\375\354\377\377\377\2\265\265\267::<\202" \
- ";;=\205::<\4;;=::<\204\204\204\376\376\376\377\377\377\377\263\377\377" \
- "\377\1SSU\202::<\1;;=\206::<\2;;=\346\346\346\377\377\377\377\377\377" \
- "\377\377\205\377\377\377\1\375\377\376\202\377\377\375\34\377\377\377" \
- "\376\376\376\373\373\363\243\322b\211\307B\212\307<\215\305>\214\306" \
- ">\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>\215\307\77\213" \
- "\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362\377" \
- "\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376\377" \
- "\354\377\377\377\4FFH;;=99;;;=\203::<\5;;=99;;;=99;\364\364\364\377\377" \
- "\377\377\262\377\377\377\1\316\316\316\202;;=\1""99;\203::<\1;;=\203" \
- "::<\1xxz\377\377\377\377\377\377\377\377\205\377\377\377\3\377\376\377" \
- "\377\377\377\375\377\376\202\377\377\377\11\373\373\363\241\321d\214" \
- "\306>\213\310=\214\306>\214\305@\213\310=\212\306@\217\304>\202\215\307" \
- "=\14\214\306>\215\305>\214\306>\215\305>\217\304@\215\307\77\215\307" \
- "=\242\320c\367\375\361\376\376\377\377\376\377\376\376\376\202\377\377" \
- "\375\2\374\377\377\377\376\377\354\377\377\377\1\235\235\237\204::<\1" \
- "<<>\202::<\4;;=::<;;=\247\247\251\377\377\377\377\262\377\377\377\4\204" \
- "\204\204;;=::<;;=\206::<\2;;=\316\316\316\377\377\377\377\377\377\377" \
- "\377\205\377\377\377\1\377\377\375\202\377\377\377\32\377\376\377\370" \
- "\373\364\243\322b\214\306>\213\310\77\214\305@\215\305>\215\305@\214" \
- "\306>\214\305B\212\307<\215\307=\214\305B\214\306>\215\306A\212\306@" \
- "\212\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377\377\375" \
- "\376\377\377\375\376\377\377\377\377\377\202\377\376\377\355\377\377" \
- "\377\1\363\363\363\212::<\1TTV\377\377\377\377\261\377\377\377\5\347" \
- "\347\351::<;;=::<;;=\204::<\3;;=::<TTT\377\377\377\377\376\377\377\377" \
- "\10\376\376\377\377\377\375\377\377\377\377\377\375\377\377\377\377\376" \
- "\377\377\377\375\376\377\377\202\377\377\377\6\370\373\362\243\322b\211" \
- "\307B\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305@\214" \
- "\306<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214\305" \
- "@\244\317c\367\375\361\361\377\377\377\1\376\376\376\204\377\377\377" \
- "\1\204\204\204\202;;=\203::<\1;;=\202::<\202;;=\1\302\302\302\203\377" \
- "\377\377\1\376\376\376\377\377\377\377\244\377\377\377\1\376\376\376" \
- "\203\377\377\377\1\376\376\376\203\377\377\377\1\234\234\236\202::<\1" \
- ";;=\204::<\6;;=::<;;=\264\264\264\377\377\377\376\376\376\377\377\377" \
- "\377\373\377\377\377\6\376\376\377\377\376\377\375\376\377\376\377\377" \
- "\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373\366\241" \
- "\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306@" \
- "\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215" \
- "\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\365\377" \
- "\377\377\1\332\332\332\202::<\1;;=\202::<\6""99;::<;;=99;;;=xxx\205\377" \
- "\377\377\1\376\376\376\377\377\377\377\243\377\377\377\1\376\376\376" \
- "\206\377\377\377\4SSU;;=::<;;=\202::<\1;;=\203::<\3GGI\362\362\362\376" \
- "\376\376\377\377\377\377\374\377\377\377\7\377\377\375\375\376\377\376" \
- "\377\377\376\377\375\377\374\377\377\377\375\375\377\376\202\377\377" \
- "\377\5\372\373\366\240\320b\215\307\77\212\306@\215\305>\202\214\305" \
- "@\20\215\305@\212\306@\214\305D\216\306\77\214\306>\215\307\77\214\306" \
- ">\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373\362\377\377" \
- "\373\377\376\377\377\377\375\364\377\377\377\3\376\376\376\377\377\377" \
- "__a\203::<\202;;=\6::<99;;;=::<;;=\345\345\345\203\377\377\377\1\376" \
- "\376\376\377\377\377\377\245\377\377\377\3\376\376\376\377\377\377\376" \
- "\376\376\202\377\377\377\2\316\316\316::<\202;;=\205::<\202;;=\1\203" \
- "\203\205\204\377\377\377\1\376\376\376\377\377\377\377\372\377\377\377" \
- "\37\376\377\377\376\377\375\377\375\376\375\377\376\377\377\375\377\377" \
- "\377\377\376\377\370\373\362\241\321a\215\307\77\215\307=\214\305@\214" \
- "\306>\212\307<\214\306>\214\306<\214\306>\216\306\77\215\305<\212\307" \
- ">\213\307A\215\305>\212\307>\215\307\77\214\306>\242\321a\373\374\364" \
- "\377\377\377\376\377\377\376\376\376\376\377\377\362\377\377\377\202" \
- "\376\376\376\3\377\377\377\376\376\376\265\265\267\202::<\1;;=\207::" \
- "<\3\251\251\253\377\377\377\376\376\376\203\377\377\377\1\376\376\376" \
- "\377\377\377\377\247\377\377\377\2\376\376\376\204\204\206\207::<\1;" \
- ";=\202::<\3\346\346\346\377\377\377\376\376\376\377\377\377\377\374\377" \
- "\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202\377" \
- "\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215\305>" \
- "\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>\212\310" \
- "\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377\377" \
- "\377\202\377\376\377\1\377\377\375\364\377\377\377\17\376\376\376\377" \
- "\377\377\376\376\376\377\377\377FFH;;=99;::<;;=::<;;=99;;;=::<SSU\377" \
- "\377\377\377\251\377\377\377\1\376\376\376\203\377\377\377\3\363\363" \
- "\365::<;;=\202::<\11;;=::<;;=::<;;=::<kkm\377\377\377\376\376\376\377" \
- "\377\377\377\376\377\377\377\1\375\377\376\202\377\377\375\34\377\377" \
- "\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215\305>\214" \
- "\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>\215\307\77" \
- "\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362" \
- "\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376" \
- "\377\361\377\377\377\202\376\376\376\2\377\377\377\376\376\376\202\377" \
- "\377\377\1\221\221\221\205::<\202;;=\5::<;;=99;\316\316\320\376\376\376" \
- "\377\377\377\377\250\377\377\377\1\376\376\376\202\377\377\377\4\266" \
- "\266\270::<99;;;=\203::<\1;;=\203::<\1\265\265\265\377\377\377\377\377" \
- "\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377\11" \
- "\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310=\212" \
- "\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305>\217" \
- "\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376\377" \
- "\376\376\376\202\377\377\375\2\374\377\377\377\376\377\360\377\377\377" \
- "\1\376\376\376\202\377\377\377\202\376\376\376\202\377\377\377\6\346" \
- "\346\346;;=99;::<99;;;=\204::<\2;;=\204\204\206\202\377\377\377\1\376" \
- "\376\376\377\377\377\377\251\377\377\377\1__a\203::<\3;;=::<;;=\203:" \
- ":<\4FFF\363\363\363\377\377\377\376\376\376\377\377\377\377\375\377\377" \
- "\377\1\377\377\375\202\377\377\377\32\377\376\377\370\373\364\243\322" \
- "b\214\306>\213\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212" \
- "\307<\215\307=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>" \
- "\212\307<\244\317c\370\373\364\377\377\377\377\375\376\377\377\375\376" \
- "\377\377\377\377\377\202\377\376\377\371\377\377\377\4^^`;;=::<;;=\202" \
- "::<\5;;=::<;;=::<FFH\377\377\377\377\253\377\377\377\3\346\346\346::" \
- "<;;=\210::<\1\204\204\204\202\377\377\377\202\376\376\376\377\377\377" \
- "\377\365\377\377\377\10\376\376\377\377\377\375\377\377\377\377\377\375" \
- "\377\377\377\377\376\377\377\377\375\376\377\377\202\377\377\377\6\370" \
- "\373\362\243\322b\211\307B\213\310=\214\305@\214\306<\202\215\305@\4" \
- "\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214\306" \
- ">\215\307\77\214\305@\244\317c\367\375\361\377\377\377\377\202\377\377" \
- "\377\3\265\265\267::<;;=\204::<\1;;=\202::<\2;;=\265\265\265\202\377" \
- "\377\377\1\376\376\376\377\377\377\377\246\377\377\377\2\376\376\376" \
- "\234\234\234\202;;=\203::<\1;;=\202::<\3""99;::<\332\332\332\377\377" \
- "\377\377\370\377\377\377\6\376\376\377\377\376\377\375\376\377\376\377" \
- "\377\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373\366" \
- "\241\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306" \
- "@\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215" \
- "\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\377\377" \
- "\377\377\5\377\377\377\363\363\365;;=::<;;=\202::<\3;;=::<;;=\202::<" \
- "\3xxz\377\377\377\376\376\376\377\377\377\377\246\377\377\377\3\376\376" \
- "\376\377\377\377SSS\202::<\1;;=\202::<\1;;=\202::<\6;;=SSU\377\377\377" \
- "\376\376\376\377\377\377\376\376\376\202\377\377\377\1\376\376\376\377" \
- "\377\377\377\362\377\377\377\7\377\377\375\375\376\377\376\377\377\376" \
- "\377\375\377\374\377\377\377\375\375\377\376\202\377\377\377\5\372\373" \
- "\366\240\320b\215\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212" \
- "\306@\214\305D\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306" \
- ">\215\307\77\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377" \
- "\377\375\377\377\377\377\11\377\377\377\376\376\376\204\204\206;;=::" \
- "<99;;;=::<;;=\204::<\3\362\362\362\377\377\377\376\376\376\377\377\377" \
- "\377\246\377\377\377\1\333\333\333\203::<\202;;=\202::<\5<<>99;::<\250" \
- "\250\252\376\376\376\203\377\377\377\1\376\376\376\377\377\377\377\365" \
- "\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377\376\377\377" \
- "\375\377\377\377\377\376\377\370\373\362\241\321a\215\307\77\215\307" \
- "=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216\306\77\215" \
- "\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>\242\321" \
- "a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377\377\377" \
- "\377\377\202\377\377\377\1\301\301\301\202::<\1;;=\203::<\1;;=\203::" \
- "<\1\266\266\270\377\377\377\377\250\377\377\377\2\220\220\220;;=\204" \
- "::<\6;;=::<99;;;=::<\346\346\346\205\377\377\377\1\376\376\376\377\377" \
- "\377\377\363\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376" \
- "\377\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214" \
- "\305@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>" \
- "\212\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370" \
- "\373\362\377\377\377\202\377\376\377\1\377\377\375\377\377\377\377\204" \
- "\377\377\377\2TTV99;\202::<\1;;=\202::<\6;;=::<;;=__a\377\377\377\376" \
- "\376\376\377\377\377\377\244\377\377\377\3\376\376\376\377\377\377TT" \
- "V\207::<\3;;=99;```\377\377\377\377\373\377\377\377\1\375\377\376\202" \
- "\377\377\375\34\377\377\377\376\376\376\373\373\363\243\322b\211\307" \
- "B\212\307<\215\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214" \
- "\306<\214\306>\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307" \
- ">\244\317c\370\373\362\377\377\373\376\377\377\377\376\377\375\376\377" \
- "\377\377\375\377\376\377\377\377\377\377\203\377\377\377\3\221\221\221" \
- "::<;;=\202::<\202;;=\203::<\2;;=\345\345\347\377\377\377\377\246\377" \
- "\377\377\4\332\332\332;;=::<;;=\203::<\1;;=\203::<\1\265\265\265\203" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377\364" \
- "\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377\11" \
- "\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310=\212" \
- "\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305>\217" \
- "\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376\377" \
- "\376\376\376\202\377\377\375\2\374\377\377\377\376\377\377\377\377\377" \
- "\202\377\377\377\5\376\376\376\332\332\332;;=::<;;=\202::<\6;;=::<;;" \
- "=99;::<\250\250\252\377\377\377\377\244\377\377\377\6\376\376\376\377" \
- "\377\377\221\221\223::<;;=99;\202::<\3;;=::<;;=\202::<\1\363\363\363" \
- "\377\377\377\377\372\377\377\377\1\377\377\375\202\377\377\377\32\377" \
- "\376\377\370\373\364\243\322b\214\306>\213\310\77\214\305@\215\305>\215" \
- "\305@\214\306>\214\305B\212\307<\215\307=\214\305B\214\306>\215\306A" \
- "\212\306@\212\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377" \
- "\377\375\376\377\377\375\376\377\377\377\377\377\202\377\376\377\377" \
- "\377\377\377\204\377\377\377\2\376\376\376SSU\204::<\204;;=\2::<__a\377" \
- "\377\377\377\243\377\377\377\6\376\376\376\377\377\377\376\376\376TT" \
- "V99;;;=\204::<\4;;=99;<<>xxz\377\377\377\377\364\377\377\377\10\376\376" \
- "\377\377\377\375\377\377\377\377\377\375\377\377\377\377\376\377\377" \
- "\377\375\376\377\377\202\377\377\377\6\370\373\362\243\322b\211\307B" \
- "\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305@\214\306" \
- "<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214\305@\244" \
- "\317c\367\375\361\377\377\377\377\213\377\377\377\5\376\376\376\377\377" \
- "\377\221\221\223::<;;=\204::<\5;;=::<;;=::<\363\363\363\204\377\377\377" \
- "\1\376\376\376\202\377\377\377\202\376\376\376\377\377\377\377\233\377" \
- "\377\377\5\332\332\332::<;;=99;<<>\202::<\1;;=\203::<\1\265\265\267\377" \
- "\377\377\377\363\377\377\377\6\376\376\377\377\376\377\375\376\377\376" \
- "\377\377\377\377\375\375\377\376\203\377\377\377\27\377\377\375\372\373" \
- "\366\241\321a\217\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212" \
- "\306@\214\306>\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306" \
- ">\215\307\77\214\306>\242\322b\370\373\362\376\376\377\377\375\376\377" \
- "\377\377\377\213\377\377\377\2\375\375\375\333\333\333\202::<\1;;=\202" \
- "::<\1;;=\202::<\3""99;::<\265\265\265\206\377\377\377\3\376\376\376\377" \
- "\377\377\376\376\376\377\377\377\377\233\377\377\377\2\235\235\23599" \
- ";\202;;=\1""99;\202;;=\202::<\3;;=::<\363\363\365\377\377\377\377\363" \
- "\377\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374" \
- "\377\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215" \
- "\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D" \
- "\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77" \
- "\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\377" \
- "\377\377\377\214\377\377\377\2\376\376\376SSU\207::<\3;;=::<xxx\203\377" \
- "\377\377\202\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377" \
- "\234\377\377\377\1^^`\211::<\3xxz\377\377\377\376\376\376\377\377\377" \
- "\377\363\377\377\377\37\376\377\377\376\377\375\377\375\376\375\377\376" \
- "\377\377\375\377\377\377\377\376\377\370\373\362\241\321a\215\307\77" \
- "\215\307=\214\305@\214\306>\212\307<\214\306>\214\306<\214\306>\216\306" \
- "\77\215\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>" \
- "\242\321a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377" \
- "\377\377\377\377\212\377\377\377\4\376\376\376\377\377\377\376\376\376" \
- "\222\222\222\205::<\1;;=\20299;\202::<\3\363\363\363\377\377\377\376" \
- "\376\376\377\377\377\377\240\377\377\377\1\346\346\346\202::<\1;;=\204" \
- "::<\1;;=\202::<\1\250\250\252\202\377\377\377\1\376\376\376\377\377\377" \
- "\377\361\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377" \
- "\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305" \
- "@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212" \
- "\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373" \
- "\362\377\377\377\202\377\376\377\1\377\377\375\377\377\377\377\212\377" \
- "\377\377\1\376\376\376\203\377\377\377\2\332\332\332<<>\203::<\3;;=:" \
- ":<<<>\203::<\2\301\301\303\376\376\376\202\377\377\377\5\376\376\376" \
- "\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377\377\231" \
- "\377\377\377\4\376\376\376\251\251\253::<;;=\204::<\5;;=::<99;::<\346" \
- "\346\346\377\377\377\377\365\377\377\377\1\375\377\376\202\377\377\375" \
- "\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215" \
- "\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>" \
- "\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370" \
- "\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375" \
- "\377\376\377\377\377\377\377\212\377\377\377\1\376\376\376\203\377\377" \
- "\377\1SSS\207::<\3;;=::<\205\205\207\205\377\377\377\1\376\376\376\377" \
- "\377\377\377\234\377\377\377\3wwy::<;;=\206::<\2;;=__a\377\377\377\377" \
- "\365\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \
- "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \
- "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \
- ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \
- "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\377\377\377" \
- "\377\211\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376\204" \
- "\204\204::<\202;;=\1::<\202;;=\203::<\1SSU\204\377\377\377\1\376\376" \
- "\376\377\377\377\377\235\377\377\377\1;;=\203::<\1;;=\202::<\1;;=\202" \
- "::<\1\234\234\234\202\377\377\377\1\376\376\376\377\377\377\377\362\377" \
- "\377\377\1\377\377\375\202\377\377\377\32\377\376\377\370\373\364\243" \
- "\322b\214\306>\213\310\77\214\305@\215\305>\215\305@\214\306>\214\305" \
- "B\212\307<\215\307=\214\305B\214\306>\215\306A\212\306@\212\307>\214" \
- "\306>\212\307<\244\317c\370\373\364\377\377\377\377\375\376\377\377\375" \
- "\376\377\377\377\377\377\202\377\376\377\377\377\377\377\212\377\377" \
- "\377\1\376\376\376\204\377\377\377\6\301\301\301;;=::<;;=::<;;=\205:" \
- ":<\1\333\333\333\202\377\377\377\1\376\376\376\377\377\377\377\231\377" \
- "\377\377\1\376\376\376\203\377\377\377\1\301\301\303\204::<\1;;=\202" \
- "::<\1:9>\202::<\1\332\332\332\377\377\377\377\356\377\377\377\10\376" \
- "\376\377\377\377\375\377\377\377\377\377\375\377\377\377\377\376\377" \
- "\377\377\375\376\377\377\202\377\377\377\6\370\373\362\243\322b\211\307" \
- "B\213\310=\214\305@\214\306<\202\215\305@\4\214\306<\214\305@\214\306" \
- "<\215\307\77\202\214\306>\6\212\307>\214\306>\215\307\77\214\305@\244" \
- "\317c\367\375\361\377\377\377\377\230\377\377\377\2""99;;;=\210::<\1" \
- "\250\250\250\377\377\377\377\240\377\377\377\3\221\221\223::<;;=\207" \
- "::<\2SSU\376\376\376\377\377\377\377\355\377\377\377\6\376\376\377\377" \
- "\376\377\375\376\377\376\377\377\377\377\375\375\377\376\203\377\377" \
- "\377\27\377\377\375\372\373\366\241\321a\217\304@\212\307<\214\306>\215" \
- "\305>\215\305@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305" \
- ">\215\306A\212\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362" \
- "\376\376\377\377\375\376\377\377\377\377\227\377\377\377\1yy{\211::<" \
- "\6lll\376\376\376\377\377\377\376\376\376\377\377\377\376\376\376\377" \
- "\377\377\377\224\377\377\377\202\376\376\376\7\377\377\377\376\376\376" \
- "\377\377\377\376\376\376\377\377\377__a;;=\202::<\4<<>;;=::<;;=\202:" \
- ":<\1\204\204\206\203\377\377\377\1\376\376\376\377\377\377\377\352\377" \
- "\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377\374\377" \
- "\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320b\215\307" \
- "\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214\305D\216" \
- "\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307\77\215" \
- "\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375\377\377" \
- "\377\377\221\377\377\377\3\376\376\376\377\377\377\376\376\376\203\377" \
- "\377\377\1\265\265\267\212::<\1\363\363\363\377\377\377\377\227\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377\1\345" \
- "\345\345\202::<\202;;=\1""99;\203::<\4;;=::<\301\301\301\376\376\376" \
- "\203\377\377\377\1\376\376\376\377\377\377\377\352\377\377\377\37\376" \
- "\377\377\376\377\375\377\375\376\375\377\376\377\377\375\377\377\377" \
- "\377\376\377\370\373\362\241\321a\215\307\77\215\307=\214\305@\214\306" \
- ">\212\307<\214\306>\214\306<\214\306>\216\306\77\215\305<\212\307>\213" \
- "\307A\215\305>\212\307>\215\307\77\214\306>\242\321a\373\374\364\377" \
- "\377\377\376\377\377\376\376\376\376\377\377\377\377\377\377\222\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\1\347" \
- "\347\347\212::<\1\302\302\304\205\377\377\377\1\376\376\376\377\377\377" \
- "\377\222\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202" \
- "\377\377\377\5\265\265\265::<;;=99;;;=\203::<\1;;=\202::<\1\363\363\363" \
- "\377\377\377\377\356\377\377\377\202\377\377\375\3\377\374\377\375\377" \
- "\376\376\377\377\202\377\377\377\25\370\373\364\243\322b\217\304@\212" \
- "\306@\214\305@\215\305>\212\307>\212\306@\214\305B\214\305@\214\305B" \
- "\214\306>\212\307>\212\310\77\214\306>\217\304@\214\306>\214\305@\242" \
- "\322b\370\373\362\377\377\377\202\377\376\377\1\377\377\375\377\377\377" \
- "\377\230\377\377\377\2\376\376\376TTT\211::<\3\221\221\223\377\377\377" \
- "\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377\231\377\377" \
- "\377\2\204\204\204::<\202;;=\202::<\1;;=\203::<\2``b\376\376\376\377" \
- "\377\377\377\357\377\377\377\1\375\377\376\202\377\377\375\34\377\377" \
- "\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215\305>\214" \
- "\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>\215\307\77" \
- "\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362" \
- "\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376" \
- "\377\377\377\377\377\225\377\377\377\1\376\376\376\202\377\377\377\1" \
- "\221\221\221\210::<\2;;=__a\202\377\377\377\1\376\376\376\377\377\377" \
- "\377\227\377\377\377\1\376\376\376\203\377\377\377\1SSU\202::<\1;;=\204" \
- "::<\202;;=\1\234\234\234\204\377\377\377\1\376\376\376\377\377\377\377" \
- "\352\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \
- "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \
- "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \
- ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \
- "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\377\377\377" \
- "\377\222\377\377\377\1\376\376\376\205\377\377\377\1\301\301\301\210" \
- "::<\4""99;;;=\364\364\366\376\376\376\377\377\377\377\233\377\377\377" \
- "\1\346\346\346\207::<\4;;=99;::<\316\316\316\203\377\377\377\1\376\376" \
- "\376\377\377\377\377\353\377\377\377\1\377\377\375\202\377\377\377\32" \
- "\377\376\377\370\373\364\243\322b\214\306>\213\310\77\214\305@\215\305" \
- ">\215\305@\214\306>\214\305B\212\307<\215\307=\214\305B\214\306>\215" \
- "\306A\212\306@\212\307>\214\306>\212\307<\244\317c\370\373\364\377\377" \
- "\377\377\375\376\377\377\375\376\377\377\377\377\377\202\377\376\377" \
- "\377\377\377\377\224\377\377\377\1\376\376\376\204\377\377\377\1\363" \
- "\363\363\210::<\3;;=::<\302\302\304\377\377\377\377\231\377\377\377\1" \
- "\376\376\376\202\377\377\377\1\266\266\270\203::<\203;;=\203::<\1:::" \
- "\377\377\377\377\351\377\377\377\10\376\376\377\377\377\375\377\377\377" \
- "\377\377\375\377\377\377\377\376\377\377\377\375\376\377\377\202\377" \
- "\377\377\6\370\373\362\243\322b\211\307B\213\310=\214\305@\214\306<\202" \
- "\215\305@\4\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212" \
- "\307>\214\306>\215\307\77\214\305@\244\317c\367\375\361\377\377\377\377" \
- "\242\377\377\377\3__a::<;;=\207::<\1\221\221\221\377\377\377\377\234" \
- "\377\377\377\1\204\204\206\204::<\202;;=\203::<\1lll\203\377\377\377" \
- "\1\375\375\375\377\377\377\377\344\377\377\377\6\376\376\377\377\376" \
- "\377\375\376\377\376\377\377\377\377\375\375\377\376\203\377\377\377" \
- "\27\377\377\375\372\373\366\241\321a\217\304@\212\307<\214\306>\215\305" \
- ">\215\305@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305>\215" \
- "\306A\212\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362\376" \
- "\376\377\377\375\376\377\377\377\377\241\377\377\377\2\221\221\223;;" \
- "=\202::<\202;;=\203::<\2;;=^^^\204\377\377\377\1\376\376\376\377\377" \
- "\377\377\224\377\377\377\1\376\376\376\202\377\377\377\1``b\202::<\1" \
- ";;=\206::<\1\234\234\234\205\377\377\377\1\376\376\376\377\377\377\377" \
- "\342\377\377\377\7\377\377\375\375\376\377\376\377\377\376\377\375\377" \
- "\374\377\377\377\375\375\377\376\202\377\377\377\5\372\373\366\240\320" \
- "b\215\307\77\212\306@\215\305>\202\214\305@\20\215\305@\212\306@\214" \
- "\305D\216\306\77\214\306>\215\307\77\214\306>\212\306@\214\306>\215\307" \
- "\77\215\305@\242\320c\370\373\362\377\377\373\377\376\377\377\377\375" \
- "\377\377\377\377\241\377\377\377\6\301\301\303::<;;=::<99;;;=\203::<" \
- "\6;;=:::\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377" \
- "\377\224\377\377\377\1\376\376\376\202\377\377\377\2\363\363\363;;=\211" \
- "::<\1\316\316\316\203\377\377\377\1\376\376\376\202\377\377\377\1\376" \
- "\376\376\377\377\377\377\342\377\377\377\37\376\377\377\376\377\375\377" \
- "\375\376\375\377\376\377\377\375\377\377\377\377\376\377\370\373\362" \
- "\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<\214\306>\214" \
- "\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215\305>\212\307" \
- ">\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376\377\377\376" \
- "\376\376\376\377\377\377\377\377\377\241\377\377\377\1\363\363\365\202" \
- "::<\1;;=\202::<\2""99;;;=\202::<\2;;=\316\316\316\377\377\377\377\231" \
- "\377\377\377\10\376\376\376\316\316\316::<;;=::<;;=99;;;=\204::<\202" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377\344" \
- "\377\377\377\202\377\377\375\3\377\374\377\375\377\376\376\377\377\202" \
- "\377\377\377\25\370\373\364\243\322b\217\304@\212\306@\214\305@\215\305" \
- ">\212\307>\212\306@\214\305B\214\305@\214\305B\214\306>\212\307>\212" \
- "\310\77\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377" \
- "\377\377\202\377\376\377\1\377\377\375\377\377\377\377\243\377\377\377" \
- "\1``b\203::<\203;;=\6::<<<>::<\234\234\234\377\377\377\376\376\376\377" \
- "\377\377\377\230\377\377\377\1\234\234\236\204::<\12;;=99;::<;;=::<k" \
- "km\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377\377\346" \
- "\377\377\377\1\375\377\376\202\377\377\375\34\377\377\377\376\376\376" \
- "\373\373\363\243\322b\211\307B\212\307<\215\305>\214\306>\212\307>\214" \
- "\305@\217\304>\212\307<\214\306<\214\306>\215\307\77\213\307A\214\306" \
- ">\215\305@\215\307\77\212\307>\244\317c\370\373\362\377\377\373\376\377" \
- "\377\377\376\377\375\376\377\377\377\375\377\376\377\377\377\377\377" \
- "\242\377\377\377\2\222\222\222::<\202;;=\7""99;::<;;=::<99;;;=lln\202" \
- "\377\377\377\1\376\376\376\377\377\377\377\225\377\377\377\3\376\376" \
- "\376\377\377\377jjl\204;;=\2""99;;;=\202::<\2;;=\221\221\223\202\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\377\377\377\377" \
- "\343\377\377\377\3\377\376\377\377\377\377\375\377\376\202\377\377\377" \
- "\11\373\373\363\241\321d\214\306>\213\310=\214\306>\214\305@\213\310" \
- "=\212\306@\217\304>\202\215\307=\14\214\306>\215\305>\214\306>\215\305" \
- ">\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377\376" \
- "\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\377\377\377" \
- "\377\242\377\377\377\2\264\264\264;;=\206::<\6;;=::<FFH\376\376\376\377" \
- "\377\377\376\376\376\377\377\377\377\227\377\377\377\1GGI\204::<\6;;" \
- "=::<;;=::<;;=\302\302\304\206\377\377\377\1\376\376\376\377\377\377\377" \
- "\342\377\377\377\1\377\377\375\202\377\377\377\32\377\376\377\370\373" \
- "\364\243\322b\214\306>\213\310\77\214\305@\215\305>\215\305@\214\306" \
- ">\214\305B\212\307<\215\307=\214\305B\214\306>\215\306A\212\306@\212" \
- "\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377\377\375\376" \
- "\377\377\375\376\377\377\377\377\377\202\377\376\377\377\377\377\377" \
- "\243\377\377\377\2\346\346\346;;=\211::<\1\346\346\350\377\377\377\377" \
- "\230\377\377\377\3\346\346\350::<;;=\202::<\1;;=\205::<\1\346\346\346" \
- "\302\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377\376" \
- "\376\376\377\377\377\377\233\377\377\377\10\376\376\377\377\377\375\377" \
- "\377\377\377\377\375\377\377\377\377\376\377\377\377\375\376\377\377" \
- "\202\377\377\377\6\370\373\362\243\322b\211\307B\213\310=\214\305@\214" \
- "\306<\202\215\305@\4\214\306<\214\305@\214\306<\215\307\77\202\214\306" \
- ">\6\212\307>\214\306>\215\307\77\214\305@\244\317c\367\375\361\345\377" \
- "\377\377\1\376\376\376\305\377\377\377\3FFF::<;;=\202::<\3;;=::<;;=\202" \
- "::<\1\301\301\303\377\377\377\377\230\377\377\377\4\301\301\30399;::" \
- "<;;=\204::<\3;;=::<GGI\215\377\377\377\1\376\376\376\266\377\377\377" \
- "\1\376\376\376\203\377\377\377\1\376\376\376\377\377\377\377\231\377" \
- "\377\377\6\376\376\377\377\376\377\375\376\377\376\377\377\377\377\375" \
- "\375\377\376\203\377\377\377\27\377\377\375\372\373\366\241\321a\217" \
- "\304@\212\307<\214\306>\215\305>\215\305@\213\310=\212\306@\214\306>" \
- "\214\305B\215\307\77\215\305>\215\306A\212\307>\214\306>\215\307\77\214" \
- "\306>\242\322b\370\373\362\376\376\377\377\375\376\341\377\377\377\5" \
- "\376\376\376\377\377\377\376\376\376\377\377\377\376\376\376\265\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\212\377\377\377\3\376" \
- "\376\376\377\377\377lll\206::<\202;;=\2::<\234\234\236\377\377\377\377" \
- "\224\377\377\377\1\376\376\376\203\377\377\377\2\233\233\235;;=\203:" \
- ":<\2""99;;;=\202::<\2;;=xxz\213\377\377\377\1\376\376\376\265\377\377" \
- "\377\1\376\376\376\377\377\377\377\240\377\377\377\7\377\377\375\375" \
- "\376\377\376\377\377\376\377\375\377\374\377\377\377\375\375\377\376" \
- "\202\377\377\377\5\372\373\366\240\320b\215\307\77\212\306@\215\305>" \
- "\202\214\305@\20\215\305@\212\306@\214\305D\216\306\77\214\306>\215\307" \
- "\77\214\306>\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373\362" \
- "\377\377\373\377\376\377\377\377\375\377\377\377\377\233\377\377\377" \
- "\3\376\376\376\377\377\377\376\376\376\213\377\377\377\6\376\376\376" \
- "\377\377\377\233\233\233;;=::<;;=\206::<\1lln\377\377\377\377\226\377" \
- "\377\377\3\376\376\376\377\377\377kkm\210::<\2;;=\234\234\236\214\377" \
- "\377\377\1\315\315\315\202\234\234\234\262\234\234\236\2\234\234\234" \
- "\265\265\265\377\377\377\377\240\377\377\377\37\376\377\377\376\377\375" \
- "\377\375\376\375\377\376\377\377\375\377\377\377\377\376\377\370\373" \
- "\362\241\321a\215\307\77\215\307=\214\305@\214\306>\212\307<\214\306" \
- ">\214\306<\214\306>\216\306\77\215\305<\212\307>\213\307A\215\305>\212" \
- "\307>\215\307\77\214\306>\242\321a\373\374\364\377\377\377\376\377\377" \
- "\376\376\376\376\377\377\344\377\377\377\4\376\376\376\347\347\347\234" \
- "\234\234\235\235\235\260\234\234\236\204\234\234\234\216\377\377\377" \
- "\1\301\301\301\202::<\1;;=\203::<\202;;=\2::<EEG\377\377\377\377\230" \
- "\377\377\377\1FFH\204::<\202;;=\4::<;;=99;\302\302\304\212\377\377\377" \
- "\5\376\376\376\377\377\377\234\234\234::<;;=\263::<\1jjj\205\377\377" \
- "\377\1\376\376\376\377\377\377\377\231\377\377\377\202\377\377\375\3" \
- "\377\374\377\375\377\376\376\377\377\202\377\377\377\25\370\373\364\243" \
- "\322b\217\304@\212\306@\214\305@\215\305>\212\307>\212\306@\214\305B" \
- "\214\305@\214\305B\214\306>\212\307>\212\310\77\214\306>\217\304@\214" \
- "\306>\214\305@\242\322b\370\373\362\377\377\377\202\377\376\377\1\377" \
- "\377\375\346\377\377\377\2\316\316\316:::\263::<\4;;=:::\377\377\377" \
- "\376\376\376\214\377\377\377\3\346\346\346::<;;=\205::<\4;;=::<;;=\346" \
- "\346\346\377\377\377\377\226\377\377\377\2\362\362\362;;=\204::<\3""9" \
- "9;::<;;=\202::<\1\346\346\350\214\377\377\377\2\234\234\234;;=\264::" \
- "<\1kkm\377\377\377\377\240\377\377\377\1\375\377\376\202\377\377\375" \
- "\34\377\377\377\376\376\376\373\373\363\243\322b\211\307B\212\307<\215" \
- "\305>\214\306>\212\307>\214\305@\217\304>\212\307<\214\306<\214\306>" \
- "\215\307\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370" \
- "\373\362\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375" \
- "\377\376\377\345\377\377\377\2\316\316\31699;\265::<\216\377\377\377" \
- "\2\376\376\376FFH\203::<\1;;=\203::<\3;;=99;\316\316\316\377\377\377" \
- "\377\226\377\377\377\1\317\317\317\206::<\202;;=\4""99;FFH\377\377\377" \
- "\376\376\376\213\377\377\377\1\234\234\236\202::<\1;;=\261::<\2;;=kk" \
- "m\205\377\377\377\1\376\376\376\377\377\377\377\231\377\377\377\3\377" \
- "\376\377\377\377\377\375\377\376\202\377\377\377\11\373\373\363\241\321" \
- "d\214\306>\213\310=\214\306>\214\305@\213\310=\212\306@\217\304>\202" \
- "\215\307=\14\214\306>\215\305>\214\306>\215\305>\217\304@\215\307\77" \
- "\215\307=\242\320c\367\375\361\376\376\377\377\376\377\376\376\376\202" \
- "\377\377\375\2\374\377\377\377\376\377\345\377\377\377\1\316\316\316" \
- "\264::<\202;;=\215\377\377\377\4\376\376\376\377\377\377lln99;\210::" \
- "<\2\234\234\234\376\376\376\377\377\377\377\225\377\377\377\5\234\234" \
- "\234::<;;=99;::<\202;;=\5::<;;=::<kkm\376\376\377\214\377\377\377\1\234" \
- "\234\236\203::<\1:9>\261::<\1kkm\377\377\377\377\237\377\377\377\1\377" \
- "\377\375\202\377\377\377\32\377\376\377\370\373\364\243\322b\214\306" \
- ">\213\310\77\214\305@\215\305>\215\305@\214\306>\214\305B\212\307<\215" \
- "\307=\214\305B\214\306>\215\306A\212\306@\212\307>\214\306>\212\307<" \
- "\244\317c\370\373\364\377\377\377\377\375\376\377\377\375\376\377\377" \
- "\377\377\377\202\377\376\377\346\377\377\377\1\316\316\316\266::<\217" \
- "\377\377\377\2\234\234\236;;=\206::<\3""99;;;=www\377\377\377\377\226" \
- "\377\377\377\3\204\204\206::<;;=\207::<\3\222\222\222\377\377\377\376" \
- "\376\376\213\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\210" \
- "\377\377\377\7\376\376\376\377\377\377\377\377\375\376\377\375\376\377" \
- "\377\377\377\377\377\376\377\203\377\377\377\1\376\376\376\203\377\377" \
- "\377\1\376\377\377\203\377\377\377\16\377\377\375\377\377\377\377\376" \
- "\377\377\377\377\377\377\373\376\377\377\377\377\377\377\377\373\371" \
- "\372\364\242\322d\214\306<\215\307\77\214\305@\214\306<\202\215\305@" \
- "\4\214\306<\214\305@\214\306<\215\307\77\202\214\306>\6\212\307>\214" \
- "\306>\215\307\77\214\305@\244\317c\367\375\361\356\377\377\377\1\316" \
- "\316\316\266::<\214\377\377\377\1\376\376\376\202\377\377\377\1\266\266" \
- "\266\202::<\1;;=\203::<\1;;=\202::<\3__a\377\377\377\376\376\376\377" \
- "\377\377\377\224\377\377\377\2kkm;;=\202::<\202;;=\202::<\3;;=::<\265" \
- "\265\265\215\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\214" \
- "\377\377\377\2\376\377\377\376\377\375\202\377\377\375\203\377\377\377" \
- "\204\377\377\375\205\377\377\377\1\376\376\377\202\377\377\377\6\377" \
- "\377\375\377\377\377\371\372\362\242\320c\214\305@\215\305@\202\214\306" \
- ">\20\215\305@\213\310=\212\306@\214\306>\214\305B\215\307\77\215\305" \
- ">\215\306A\212\307>\214\306>\215\307\77\214\306>\242\322b\370\373\362" \
- "\376\376\377\377\375\376\355\377\377\377\1\316\316\316\266::<\215\377" \
- "\377\377\4\376\376\376\377\377\377\315\315\315;;=\203::<\1;;=\203::<" \
- "\2;;=99;\377\377\377\377\226\377\377\377\203::<\1;;=\202::<\1;;=\203" \
- "::<\2\317\317\317\376\376\376\214\377\377\377\1\234\234\236\265::<\1" \
- "kkm\377\377\377\377\211\377\377\377\3\376\376\376\377\376\377\377\377" \
- "\377\203\377\376\377\204\377\377\377\1\376\376\376\202\377\377\377\1" \
- "\377\376\377\203\377\377\377\1\376\376\376\203\377\377\377\31\376\376" \
- "\377\377\376\377\371\372\365\241\322e\212\307<\216\306\77\212\311<\216" \
- "\303\77\212\307>\215\305@\212\306@\214\305D\216\306\77\214\306>\215\307" \
- "\77\214\306>\212\306@\214\306>\215\307\77\215\305@\242\320c\370\373\362" \
- "\377\377\373\377\376\377\377\377\375\355\377\377\377\1\316\316\316\266" \
- "::<\220\377\377\377\202::<\4;;=::<;;=::<\202;;=\3""99;;;=\346\346\346" \
- "\377\377\377\377\224\377\377\377\2\362\362\362;;=\202::<\7""99;::<;;" \
- "=88:;;=::<;;=\216\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377" \
- "\212\377\377\377\202\376\377\377\202\377\377\377\1\377\376\377\206\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377" \
- "\1\376\376\376\202\377\377\377\6\370\373\364\242\322b\214\306>\214\305" \
- "@\215\305>\214\305@\202\215\306A\20\214\306<\214\306>\216\306\77\215" \
- "\305<\212\307>\213\307A\215\305>\212\307>\215\307\77\214\306>\242\321" \
- "a\373\374\364\377\377\377\376\377\377\376\376\376\376\377\377\355\377" \
- "\377\377\1\316\316\316\266::<\216\377\377\377\6\376\376\376\377\377\377" \
- "SSU;;=99;;;=\206::<\1\316\316\316\377\377\377\377\224\377\377\377\2\316" \
- "\316\31699;\205::<\1;;=\202::<\1FFH\216\377\377\377\1\234\234\236\265" \
- "::<\1kkm\377\377\377\377\207\377\377\377\202\377\376\377\2\377\377\377" \
- "\377\377\375\203\377\377\377\1\376\377\375\202\377\377\375\203\377\377" \
- "\377\202\377\377\375\2\377\377\377\377\377\375\205\377\377\377\26\377" \
- "\377\375\371\372\362\243\322b\211\305A\215\305>\215\307\77\214\305@\214" \
- "\306>\215\305@\212\307>\214\305@\214\305B\214\306>\212\307>\212\310\77" \
- "\214\306>\217\304@\214\306>\214\305@\242\322b\370\373\362\377\377\377" \
- "\202\377\376\377\1\377\377\375\356\377\377\377\1\316\316\316\266::<\220" \
- "\377\377\377\3kkm::<;;=\202::<\6;;=::<;;=::<;;=\233\233\233\377\377\377" \
- "\377\223\377\377\377\2\376\376\376\265\265\265\205::<\1;;=\202::<\2""9" \
- "9;lln\216\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\207\377" \
- "\377\377\3\376\377\375\375\377\376\377\377\377\202\377\376\377\3\377" \
- "\376\374\377\377\377\376\377\377\202\377\377\377\1\377\377\375\204\377" \
- "\377\377\2\375\377\376\377\377\375\202\377\377\377\1\377\377\375\202" \
- "\377\377\377\32\376\376\374\365\367\354\223\312K\215\305>\214\306<\211" \
- "\305\77\214\306>\212\307>\215\307\77\214\306>\214\306<\214\306>\215\307" \
- "\77\213\307A\214\306>\215\305@\215\307\77\212\307>\244\317c\370\373\362" \
- "\377\377\373\376\377\377\377\376\377\375\376\377\377\377\375\377\376" \
- "\377\355\377\377\377\1\316\316\316\266::<\217\377\377\377\5\376\376\376" \
- "\234\234\236;;=::<;;=\202::<\2""99;::<\202;;=\1\221\221\221\377\377\377" \
- "\377\224\377\377\377\1\235\235\235\211::<\2\221\221\223\376\376\376\215" \
- "\377\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\207\377\377\377" \
- "\1\377\376\377\202\377\377\375\202\377\377\377\202\377\377\375\1\377" \
- "\377\377\202\376\377\377\1\377\377\377\202\377\377\375\5\376\376\377" \
- "\377\377\377\377\377\373\377\377\377\376\376\376\203\377\377\377\27\376" \
- "\376\376\377\377\375\376\377\372\347\365\333\225\311K\217\304>\214\305" \
- "B\215\307\77\212\306B\214\306>\215\306A\214\306>\215\305>\214\306>\215" \
- "\305>\217\304@\215\307\77\215\307=\242\320c\367\375\361\376\376\377\377" \
- "\376\377\376\376\376\202\377\377\375\2\374\377\377\377\376\377\355\377" \
- "\377\377\1\316\316\316\266::<\214\377\377\377\1\376\376\376\203\377\377" \
- "\377\3\250\250\252::<;;=\203::<\202;;=\202::<\1kkk\377\377\377\377\224" \
- "\377\377\377\4www;;=::<;;=\202::<\202;;=\202::<\1\234\234\236\216\377" \
- "\377\377\1\234\234\236\265::<\1kkm\377\377\377\377\207\377\377\377\15" \
- "\367\374\365\343\361\316\316\346\254\305\342\240\304\343\240\303\342" \
- "\236\305\342\237\312\346\251\345\356\317\365\373\357\376\377\377\376" \
- "\376\377\377\377\375\214\377\377\377\24\350\365\333\223\312K\216\306" \
- "\77\212\307>\215\304B\214\306>\215\307=\214\306>\215\306A\212\306@\212" \
- "\307>\214\306>\212\307<\244\317c\370\373\364\377\377\377\377\375\376" \
- "\377\377\375\376\377\377\377\377\377\202\377\376\377\356\377\377\377" \
- "\1\316\316\316\266::<\217\377\377\377\2\376\376\376\316\316\320\207:" \
- ":<\3;;=::<SSS\377\377\377\377\223\377\377\377\2\376\376\376kkm\202::" \
- "<\1;;=\206::<\1\316\316\316\377\377\377\377\276\377\377\377\4\377\377" \
- "\375\376\377\377\377\377\377\377\376\377\202\377\377\377\10\377\377\375" \
- "\377\376\377\376\377\375\376\376\376\377\377\377\350\365\333\277\337" \
- "\224\232\315V\210\214\306>\10\212\306@\212\307>\232\315W\277\337\224" \
- "\352\364\333\377\377\377\377\376\377\377\377\375\202\376\377\377\202" \
- "\377\377\377\2\377\376\377\377\377\375\202\377\377\377\17\377\377\375" \
- "\377\376\377\347\365\333\226\312L\215\306A\213\310=\212\306@\217\304" \
- ">\216\307<\214\305@\215\305<\214\305@\215\307=\244\317c\366\373\364\377" \
- "\377\377\377\276\377\377\377\6\346\346\346;;=99;;;=::<;;=\205::<\377" \
- "\377\377\377\224\377\377\377\1::<\202;;=\2::<;;=\203::<\4;;=::<\316\316" \
- "\316\376\376\376\377\377\377\377\274\377\377\377\14\377\375\377\377\377" \
- "\377\376\376\374\377\377\375\377\376\377\377\377\375\376\377\377\377" \
- "\377\377\376\377\377\377\376\377\324\353\265\231\316Z\202\214\306<\1" \
- "\215\305>\210\214\306>\202\215\305>\16\214\306>\213\307A\211\306;\233" \
- "\314V\324\353\265\377\377\377\377\376\377\377\377\375\375\377\376\376" \
- "\377\377\377\377\377\377\376\377\376\377\377\377\377\373\202\377\377" \
- "\377\6\376\376\377\350\365\333\222\312K\215\306A\217\304>\212\306@\202" \
- "\214\305@\6\213\310\77\212\307>\242\322d\370\373\364\377\377\377\377" \
- "\377\375\377\377\377\377\276\377\377\377\203::<\3;;=::<99;\202;;=\202" \
- "::<\1\346\346\350\377\377\377\377\222\377\377\377\2\376\376\376;;=\202" \
- "::<\202;;=\205::<\377\377\377\377\275\377\377\377\4\377\377\375\377\377" \
- "\377\377\377\373\377\376\374\202\376\377\377\12\377\377\375\377\377\377" \
- "\376\377\375\342\360\317\232\315V\214\306<\220\306=\215\306A\215\306" \
- "C\215\306A\210\214\306>\202\215\307\77\7\215\306A\214\306>\214\305@\213" \
- "\307A\214\305@\230\315W\341\361\315\203\377\377\377\2\376\376\374\374" \
- "\377\375\202\377\377\377\2\377\377\375\377\376\377\202\377\377\377\13" \
- "\352\364\331\221\311J\215\306A\213\310=\216\306\77\214\305@\214\306<" \
- "\242\322e\370\373\364\376\376\377\377\377\375\377\377\377\377\277\377" \
- "\377\377\1``b\202::<\2;;=99;\202;;=\4::<;;=::<\316\316\320\377\377\377" \
- "\377\222\377\377\377\4\316\316\316;;=::<99;\202::<\2;;=::<\202;;=\3:" \
- ":<\376\376\376\377\377\377\202\376\376\376\377\377\377\377\271\377\377" \
- "\377\17\376\377\377\376\376\374\377\376\374\376\377\377\377\377\377\377" \
- "\377\375\376\377\377\370\373\364\277\336\222\215\305<\214\305@\215\307" \
- "\77\212\307>\215\307\77\213\307A\211\214\306>\16\216\306A\214\305B\213" \
- "\307A\214\306>\215\305<\213\305=\215\306A\214\306<\215\305>\300\337\223" \
- "\370\373\362\376\376\377\377\377\375\376\377\377\204\377\377\377\16\377" \
- "\376\377\376\376\377\376\377\377\352\364\331\222\312K\215\306A\214\306" \
- "<\214\305@\243\321d\371\373\360\376\376\377\376\377\377\377\377\377\376" \
- "\377\377\377\377\377\377\273\377\377\377\4\376\376\376\377\377\377\376" \
- "\376\376lln\203::<\1;;=\20299;\1;;=\202::<\1\266\266\270\377\377\377" \
- "\377\222\377\377\377\5\316\316\316::<;;=::<;;=\205::<\3kkm\377\377\377" \
- "\376\376\376\377\377\377\377\274\377\377\377\14\377\377\375\376\377\377" \
- "\377\377\377\377\377\375\376\376\376\367\374\365\244\317c\214\305@\215" \
- "\307=\211\306=\213\307A\215\306A\202\212\306@\1\213\310<\210\214\306" \
- ">\202\212\307>\3\212\307<\214\306>\216\306\77\202\214\306>\12\215\305" \
- "<\215\307\77\212\306@\242\322b\371\374\365\377\377\375\376\376\374\376" \
- "\377\377\377\376\377\376\377\377\202\377\377\377\13\376\377\375\376\376" \
- "\377\377\377\377\350\365\333\225\311K\214\305B\242\320c\371\374\361\377" \
- "\377\377\376\377\377\377\376\377\377\377\377\377\300\377\377\377\7\221" \
- "\221\223::<99;::<;;=::<;;=\203::<\1\234\234\236\377\377\377\377\222\377" \
- "\377\377\2\250\250\25099;\206::<\3;;=::<jjl\377\377\377\377\275\377\377" \
- "\377\202\377\376\377\16\376\377\377\377\377\375\376\376\376\352\364\333" \
- "\223\312K\220\306=\215\306A\214\305B\213\310=\215\306C\215\305>\216\306" \
- "\77\215\305>\215\305@\210\214\306>\37\215\305@\215\307\77\212\306@\215" \
- "\307\77\214\304\77\215\306A\212\307;\212\306@\214\306>\216\307B\214\306" \
- ">\222\312K\354\364\334\377\376\377\377\377\377\377\377\373\376\377\377" \
- "\377\375\376\376\377\375\377\377\377\377\376\377\377\377\377\376\376" \
- "\377\347\365\333\260\327z\371\374\363\375\377\376\376\377\377\377\376" \
- "\377\377\377\377\377\377\375\377\377\377\377\276\377\377\377\3\376\376" \
- "\376\234\234\23699;\203;;=\205::<\1\221\221\223\377\377\377\377\222\377" \
- "\377\377\2\234\234\234;;=\204::<\202;;=\3::<;;=\235\235\237\377\377\377" \
- "\377\276\377\377\377\202\377\377\375\15\376\377\377\367\374\365\223\312" \
- "K\214\306>\213\310\77\215\305@\214\306<\215\307=\214\305@\213\307A\211" \
- "\305\77\215\307\77\215\305>\210\214\306>\20\215\306A\213\305=\215\307" \
- "=\214\305@\215\306A\214\306>\213\304A\220\305\77\216\306\77\212\306@" \
- "\215\305@\213\307A\221\311L\367\375\363\376\377\377\377\377\377\202\377" \
- "\377\373\1\377\375\376\202\377\377\377\4\377\376\377\376\377\377\377" \
- "\376\377\376\377\377\203\377\377\377\3\377\376\377\376\376\377\374\377" \
- "\375\377\377\377\377\277\377\377\377\2\265\265\267<<>\20299;\7::<;;=" \
- "::<99;;;=::<lln\377\377\377\377\222\377\377\377\3\221\221\221::<;;=\205" \
- "::<\3;;=::<\234\234\236\377\377\377\377\276\377\377\377\17\376\377\377" \
- "\377\377\377\366\373\364\244\317c\220\306=\213\310\77\212\306@\211\307" \
- "@\216\306\77\215\305@\215\307\77\213\310\77\215\307\77\215\305>\214\305" \
- "@\210\214\306>\22\216\306A\215\307\77\213\305=\216\306\77\214\306>\212" \
- "\307>\213\310\77\214\305@\215\306C\214\306<\215\307=\215\305>\213\310" \
- "=\242\320d\372\372\362\376\377\375\377\375\377\377\377\375\202\376\377" \
- "\377\5\377\377\377\377\377\375\377\377\377\377\377\375\377\377\377\202" \
- "\377\376\377\5\376\377\375\376\377\377\377\377\377\377\375\376\377\377" \
- "\375\377\377\377\377\274\377\377\377\5\376\376\376\377\377\377\316\316" \
- "\320::<;;=\202::<\1;;=\202::<\3""99;::<kkm\377\377\377\377\222\377\377" \
- "\377\2kkm::<\203;;=\205::<\1\264\264\264\377\377\377\377\275\377\377" \
- "\377\10\377\376\377\376\377\377\377\377\377\300\336\224\212\307>\214" \
- "\306<\214\306>\211\307>\231\214\306>\1\216\306\77\203\214\306>\2\214" \
- "\305@\266\334\207\202\377\377\377\7\377\376\377\377\377\377\377\376\377" \
- "\377\377\375\377\377\377\377\377\375\376\377\377\377\377\377\377\303" \
- "\377\377\377\1\376\376\376\202\377\377\377\1\316\316\316\206::<\6;;=" \
- "::<;;=FFH\377\377\377\376\376\376\205\377\377\377\1\376\376\376\377\377" \
- "\377\377\212\377\377\377\1lln\202::<\3;;=99;;;=\204::<\3\317\317\317" \
- "\377\377\377\376\376\376\377\377\377\377\273\377\377\377\10\377\375\377" \
- "\374\377\375\343\361\320\214\306>\215\306A\214\304=\212\307>\215\305" \
- ">\230\214\306>\20\214\306<\213\304\77\212\307>\212\306B\214\306<\212" \
- "\307>\220\304>\337\363\316\377\376\377\377\377\377\376\377\377\377\377" \
- "\377\376\376\377\377\377\377\376\376\376\376\377\377\377\377\377\377" \
- "\302\377\377\377\1\376\376\376\202\377\377\377\2\376\376\376\377\377" \
- "\377\204::<\1;;=\202::<\3;;=99;;;=\203\377\377\377\1\376\376\376\202" \
- "\377\377\377\1\376\376\376\377\377\377\377\213\377\377\377\2SSU;;=\202" \
- "::<\2;;=99;\204::<\1\315\315\315\203\377\377\377\1\376\376\376\377\377" \
- "\377\377\271\377\377\377\10\376\376\376\377\377\377\233\316W\214\305" \
- "@\212\306@\216\306=\214\305@\215\305@\230\214\306>\17\214\306<\215\306" \
- "C\211\306=\213\307A\214\304\77\212\306@\214\305B\234\313W\376\377\375" \
- "\377\377\377\376\377\375\377\377\375\376\377\377\376\376\377\376\377" \
- "\375\377\377\377\377\302\377\377\377\1\376\376\376\202\377\377\377\4" \
- "\376\376\376\377\377\377\376\376\376;;=\206::<\202;;=\3::<\377\377\377" \
- "\376\376\376\203\377\377\377\3\376\376\376\377\377\377\376\376\376\377" \
- "\377\377\377\212\377\377\377\3::<99;;;=\202::<\10;;=::<;;=99;;;=\363" \
- "\363\363\377\377\377\376\376\376\377\377\377\377\274\377\377\377\7\323" \
- "\354\265\214\305@\215\307\77\215\306A\216\305C\213\304\77\212\307<\230" \
- "\214\306>\20\215\307\77\215\304B\214\305@\214\306>\215\305>\215\307=" \
- "\212\307<\215\307\77\323\351\270\377\376\377\377\377\377\376\376\376" \
- "\376\377\375\376\376\376\376\377\377\377\376\374\377\377\377\377\302" \
- "\377\377\377\202\376\376\376\202\377\377\377\2\376\376\376FFH\210::<" \
- "\2;;=\316\316\316\202\377\377\377\1\376\376\376\377\377\377\377\215\377" \
- "\377\377\1\376\376\376\202;;=\4""99;;;=::<;;=\202::<\2;;=::<\377\377" \
- "\377\377\277\377\377\377\7\231\316X\220\304>\214\305@\215\307\77\214" \
- "\306<\214\311>\214\305@\231\214\306>\11\215\304B\214\306>\215\306A\214" \
- "\306<\215\306A\214\305B\215\307\77\234\315X\375\377\374\204\377\377\377" \
- "\2\376\377\377\377\376\377\377\377\377\377\304\377\377\377\202\376\376" \
- "\376\4\377\377\377jjl::<99;\202;;=\205::<\7\316\316\316\377\377\377\376" \
- "\376\376\377\377\377\376\376\376\377\377\377\376\376\376\377\377\377" \
- "\377\212\377\377\377\6\363\363\363::<99;;;=::<;;=\202::<\1;;=\202::<" \
- "\377\377\377\377\276\377\377\377\2\342\361\320\214\306<\202\215\305>" \
- "\4\212\307>\215\307=\211\306=\215\305>\230\214\306>\2\213\310=\214\306" \
- "<\202\214\305@\7\215\306A\214\306>\215\307=\214\304\77\211\310<\343\362" \
- "\321\377\377\375\202\377\376\377\2\377\377\375\376\376\376\377\377\377" \
- "\377\310\377\377\377\4kkm::<;;=::<\202;;=\202::<\3;;=::<\316\316\316" \
- "\202\377\377\377\1\376\376\376\377\377\377\377\215\377\377\377\3\316" \
- "\316\316::<;;=\202::<\1;;=\204::<\1__a\202\377\377\377\3\376\376\376" \
- "\377\377\377\376\376\376\377\377\377\377\271\377\377\377\4\270\333\207" \
- "\214\306>\214\305@\214\306>\203\214\305@\1\215\305>\230\214\306>\17\215" \
- "\306A\213\310=\212\307<\214\306>\214\306<\215\306A\214\306>\214\305@" \
- "\213\306E\267\332\206\377\377\375\376\377\377\377\377\375\377\377\377" \
- "\377\377\375\377\377\377\377\303\377\377\377\1\376\376\376\204\377\377" \
- "\377\6lln;;=::<99;::<;;=\204::<\1\250\250\250\204\377\377\377\1\376\376" \
- "\376\377\377\377\377\213\377\377\377\1\316\316\316\203::<\1;;=\205::" \
- "<\1lln\203\377\377\377\1\376\376\376\377\377\377\377\272\377\377\377" \
- "\10\232\315V\215\305@\212\306@\215\305>\214\306<\215\304D\215\305<\212" \
- "\306@\230\214\306>\3\217\304@\214\306<\215\306A\202\215\305@\7\214\306" \
- ">\214\305@\212\307>\215\305<\233\316W\376\376\377\376\377\375\203\377" \
- "\377\377\1\376\377\377\377\377\377\377\305\377\377\377\3\376\376\376" \
- "\377\377\377\234\234\236\203::<\2;;=99;\204::<\1\234\234\234\202\377" \
- "\377\377\1\376\376\376\377\377\377\377\215\377\377\377\5\316\316\320" \
- "::<;;=::<;;=\202::<\1;;=\202::<\1kkm\377\377\377\377\266\377\377\377" \
- "\10\375\377\374\376\377\377\376\376\376\377\377\375\377\377\377\376\377" \
- "\377\377\377\375\360\371\350\250\214\306>\4\214\305@\212\307>\360\371" \
- "\346\376\377\375\202\377\377\377\1\377\377\375\377\377\377\377\304\377" \
- "\377\377\1\376\376\376\203\377\377\377\1\234\234\234\211::<\1\234\234" \
- "\234\205\377\377\377\1\376\376\376\377\377\377\377\212\377\377\377\4" \
- "\316\316\320llnkkmlln\203kkm\1jjl\202kkm\1\221\221\223\377\377\377\377" \
- "\270\377\377\377\1\377\376\377\202\377\377\377\3\375\376\377\377\377" \
- "\375\341\361\315\251\214\306>\2\215\307\77\342\360\314\377\377\377\377" \
- "\310\377\377\377\202\376\376\376\202\377\377\377\2\266\266\266kkk\210" \
- "kkm\1\265\265\265\206\377\377\377\1\376\376\376\377\377\377\377\211\377" \
- "\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377\377\377\376" \
- "\376\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376" \
- "\377\377\377\377\264\377\377\377\1\377\376\377\205\377\377\377\2\375" \
- "\377\374\310\340\246\252\214\306>\1\310\340\246\377\377\377\377\307\377" \
- "\377\377\1\376\376\376\202\377\377\377\3\375\375\375\377\377\377\376" \
- "\376\376\211\377\377\377\7\376\376\376\377\377\377\376\376\376\377\377" \
- "\377\376\376\376\377\377\377\376\376\376\377\377\377\377\213\377\377" \
- "\377\1\376\376\376\204\377\377\377\1\376\376\376\206\377\377\377\1\376" \
- "\376\376\377\377\377\377\263\377\377\377\1\377\376\377\204\377\377\377" \
- "\3\376\376\377\376\377\375\304\342\234\251\214\306>\7\215\305@\305\343" \
- "\235\376\376\377\377\377\377\376\376\377\377\376\377\377\377\375\377" \
- "\377\377\377\306\377\377\377\1\376\376\376\217\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\377\377\377\377\214\377\377\377\5\376\376" \
- "\376\377\377\377\376\376\376\377\377\377\376\376\376\203\377\377\377" \
- "\1\376\376\376\377\377\377\377\267\377\377\377\1\377\377\375\202\377" \
- "\377\377\3\377\376\377\376\377\375\305\342\237\251\214\306>\3\215\305" \
- "@\303\344\235\376\376\376\202\377\377\377\1\377\376\377\377\377\377\377" \
- "\305\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\214\377" \
- "\377\377\1\376\376\376\377\377\377\377\216\377\377\377\1\376\376\376" \
- "\203\377\377\377\1\376\376\376\206\377\377\377\1\376\376\376\377\377" \
- "\377\377\266\377\377\377\5\376\377\377\376\376\377\377\376\377\377\377" \
- "\377\305\342\242\251\214\306>\4\215\306A\302\341\236\377\377\375\376" \
- "\376\376\377\377\377\377\305\377\377\377\1\376\376\376\203\377\377\377" \
- "\1\376\376\376\214\377\377\377\1\376\376\376\377\377\377\377\231\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377\264\377" \
- "\377\377\2\376\376\376\377\376\377\202\376\377\377\202\377\377\377\1" \
- "\305\342\240\251\214\306>\7\214\305@\306\343\240\377\376\374\377\377" \
- "\377\376\377\377\377\377\377\376\376\376\377\377\377\377\325\377\377" \
- "\377\1\376\376\376\377\377\377\377\222\377\377\377\1\376\376\376\205" \
- "\377\377\377\1\376\376\376\377\377\377\377\265\377\377\377\4\377\377" \
- "\375\377\376\377\375\377\376\376\377\375\202\377\377\377\1\305\343\235" \
- "\251\214\306>\4\213\310\77\306\341\234\377\376\377\377\377\377\202\376" \
- "\377\375\377\377\377\377\311\377\377\377\1\377\377\375\215\377\377\377" \
- "\1\376\376\376\377\377\377\377\377\377\377\377\314\377\377\377\3\377" \
- "\377\375\377\377\377\376\377\375\203\377\377\377\11\376\377\377\345\360" \
- "\320\214\305@\214\306>\214\305@\214\304\77\214\306<\215\305>\212\307" \
- ">\231\214\306>\1\214\305@\202\215\307\77\205\214\306>\5\212\307>\214" \
- "\306>\342\360\315\377\377\377\376\376\376\202\377\377\377\1\377\377\375" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\244" \
- "\377\377\377\3\377\376\377\377\377\377\376\377\375\203\377\377\377\11" \
- "\376\377\377\362\371\347\214\306>\214\305B\215\310<\215\306A\214\305" \
- "@\215\307\77\214\305@\231\214\306>\4\215\307\77\213\305=\214\306>\215" \
- "\307\77\202\214\306>\5\215\307\77\214\306>\216\306\77\215\306A\360\367" \
- "\345\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\251\377\377\377\2\377\376\377\377\377\375\203\377\377\377\13\377\377" \
- "\375\377\377\377\375\377\374\233\316W\214\305@\213\304\77\212\306@\215" \
- "\307\77\214\305@\215\306A\214\305@\230\214\306>\3\215\307\77\214\306" \
- ">\215\306A\203\214\305@\7\215\306A\214\305@\215\304B\232\315T\377\377" \
- "\375\376\377\377\377\377\375\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\250\377\377\377\1\377\377\375\205\377\377\377" \
- "\11\377\376\377\267\333\204\213\307A\213\307C\215\307\77\213\304\77\215" \
- "\307\77\215\305<\212\306@\231\214\306>\1\215\307\77\203\214\305@\202" \
- "\214\306>\7\215\307\77\212\306@\267\333\204\377\376\377\376\377\377\377" \
- "\377\375\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\247\377\377\377\17\377\377\375\377\377\377\377\377\375" \
- "\376\376\376\377\377\377\377\377\375\376\376\377\334\354\305\211\306" \
- "=\213\307A\213\305;\215\306A\214\306<\215\305>\213\307A\232\214\306>" \
- "\202\214\305@\11\214\306>\214\306<\214\306>\215\307\77\212\311=\333\355" \
- "\305\377\376\377\377\377\377\376\376\376\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\252\377\377\377\3\377\377\375\377" \
- "\377\377\377\376\377\203\377\377\375\7\233\314V\215\307\77\215\305>\214" \
- "\306>\215\307\77\214\305@\212\307>\232\214\306>\14\214\305@\214\306>" \
- "\214\306<\215\307=\215\307\77\214\305@\232\315V\374\377\373\376\376\377" \
- "\377\377\375\377\377\377\376\376\376\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\255\377\377\377\10\377\377\375\377\376" \
- "\377\324\353\267\214\304\77\215\305>\214\305@\212\307<\214\305@\232\214" \
- "\306>\2\215\307\77\215\306A\202\214\306>\4\215\307\77\213\304\77\215" \
- "\306E\316\346\254\202\377\377\377\3\377\377\375\376\376\377\376\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\247" \
- "\377\377\377\1\376\376\376\206\377\377\377\10\377\377\373\375\376\377" \
- "\232\315W\214\306>\215\307=\211\307>\215\306A\215\305>\232\214\306>\1" \
- "\214\305@\202\215\307\77\13\214\305@\215\306E\227\317P\377\377\377\377" \
- "\377\375\376\377\377\377\377\377\377\377\375\375\377\376\377\377\377" \
- "\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\254\377\377\377\20\376\377\377\377\375\377\331\356\303\215\305" \
- "@\213\310\77\215\305>\216\306\77\213\307A\215\306A\214\306<\214\306>" \
- "\216\306\77\213\304\77\212\307<\214\306>\215\305@\210\214\306>\1\214" \
- "\305@\202\215\307\77\205\214\306>\10\214\305@\212\307>\215\305>\214\305" \
- "@\215\305>\214\305@\215\305>\331\356\305\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\264\377\377\377\20\376\376\374\377" \
- "\377\375\376\376\374\261\330{\214\306>\216\306A\214\306>\213\307A\215" \
- "\305>\215\306A\215\307\77\213\304A\215\307\77\214\305@\214\306<\216\306" \
- "A\210\214\306>\4\215\307\77\213\305=\214\306>\215\307\77\202\214\306" \
- ">\12\215\307\77\214\306>\212\307>\220\305\77\212\307>\214\306>\213\310" \
- "=\214\306<\262\327z\376\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\265\377\377\377\17\374\377\377\377\377\377\370" \
- "\373\362\241\321d\211\310<\215\305>\215\305@\216\306=\214\305@\214\306" \
- ">\215\307\77\214\306>\212\307<\212\306@\212\307<\210\214\306>\3\215\307" \
- "\77\214\306>\215\306A\203\214\305@\12\215\306A\214\305@\215\305>\212" \
- "\307>\213\307A\216\305C\215\307=\242\322e\371\372\364\375\377\376\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\264\377" \
- "\377\377\1\375\377\374\203\377\377\377\4\352\364\333\223\311O\212\306" \
- "@\215\305@\202\213\310\77\202\214\306>\4\216\307F\213\305=\215\307\77" \
- "\215\305@\211\214\306>\1\215\307\77\203\214\305@\202\214\306>\1\215\307" \
- "\77\202\214\305@\6\216\305C\215\307\77\225\311K\351\363\332\377\377\377" \
- "\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\265\377\377\377\17\377\375\376\377\376\377\377\377\377\377\377" \
- "\375\352\365\327\223\313L\212\307<\215\305>\214\305@\215\307=\214\305" \
- "@\214\306<\213\310\77\213\304\77\220\305A\212\214\306>\202\214\305@\12" \
- "\214\306>\214\306<\214\306>\215\307\77\214\306>\213\310=\215\307=\225" \
- "\311K\347\365\334\377\377\375\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\267\377\377\377\1\377\377\375\202\377\377\377" \
- "\13\377\376\377\376\377\377\353\363\334\245\320d\214\305B\214\305@\215" \
- "\306A\213\305=\214\306>\213\307A\213\310=\213\214\306>\5\214\305@\214" \
- "\306>\214\306<\215\307=\215\307\77\202\214\305@\5\214\306<\242\322e\351" \
- "\363\332\377\377\375\376\376\376\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\267\377\377\377\1\376\376\374\202\377\377" \
- "\375\6\376\377\377\377\376\377\377\377\375\371\372\364\255\330|\217\304" \
- ">\202\212\306@\2\215\306A\214\303A\202\214\305@\211\214\306>\2\215\307" \
- "\77\215\306A\202\214\306>\6\215\307\77\213\304\77\215\306E\215\305>\262" \
- "\327z\371\372\364\203\377\377\377\2\376\377\377\377\377\375\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\264\377\377\377" \
- "\1\376\376\376\202\377\377\377\2\377\377\375\377\376\377\203\377\377" \
- "\377\6\377\377\375\331\356\303\233\314W\215\310<\214\305@\215\307\77" \
- "\214\214\306>\1\214\305@\202\215\307\77\7\214\305@\215\306E\227\317P" \
- "\331\356\305\376\377\377\375\377\376\376\377\377\202\377\377\377\2\377" \
- "\377\375\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\274\377\377\377\10\377\377\375\377\376\377\365\375\362" \
- "\307\342\237\234\315Z\212\306@\212\307>\214\305@\202\215\307\77\16\214" \
- "\306>\215\307\77\214\306>\215\306A\214\306>\213\310\77\214\306>\215\305" \
- "<\216\306A\213\310\77\212\307>\232\315T\307\341\242\370\373\362\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\304\377\377" \
- "\377\1\377\377\375\202\377\377\377\10\377\376\377\376\376\374\335\354" \
- "\303\270\333\207\222\311J\214\305@\215\306A\213\305=\202\214\306>\13" \
- "\215\307\77\216\306\77\215\305>\212\306@\212\307>\226\312K\270\333\211" \
- "\334\354\307\376\377\377\376\376\376\377\377\375\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\306\377\377\377\2\376\377" \
- "\375\376\377\377\204\377\377\377\16\350\366\334\332\354\302\311\341\245" \
- "\306\341\234\305\342\237\304\341\237\305\342\240\305\342\237\334\355" \
- "\303\352\364\333\377\377\375\377\375\376\377\376\377\377\377\375\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\307\377" \
- "\377\377\15\376\376\376\377\376\377\377\377\375\377\377\373\376\377\377" \
- "\376\377\375\376\377\377\377\377\375\377\377\377\376\376\376\376\377" \
- "\377\376\377\375\377\377\377\202\377\376\377\204\377\377\377\1\376\376" \
- "\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\307\377\377\377\3\376\377\377\377\377\377\376\376\376\202\377\377\377" \
- "\1\376\376\376\210\377\377\377\3\375\377\376\376\377\377\377\377\377" \
- "\203\377\376\377\4\376\377\375\376\377\377\377\377\377\377\376\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\304\377" \
- "\377\377\10\377\377\375\377\376\377\377\377\373\377\377\377\375\377\376" \
- "\376\377\377\376\376\376\377\376\377\202\376\377\377\1\377\377\377\202" \
- "\376\376\376\202\377\377\377\202\376\377\377\5\376\377\375\377\377\377" \
- "\376\376\374\377\377\377\377\377\375\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\307\377\377\377\1\376\376\377\202\377" \
- "\377\377\2\377\377\375\376\376\377\202\377\377\377\2\376\377\375\377" \
- "\377\375\204\377\377\377\202\377\377\375\1\376\377\375\202\376\377\377" \
- "\202\377\377\375\202\377\377\377\1\377\376\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\310\377\377\377\5\377\377\375" \
- "\377\376\377\377\377\375\376\376\377\377\376\377\207\377\377\377\202" \
- "\377\376\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\377\261\377\377\377" \
- "\1\376\376\376\210\377\377\377\3\376\376\376\377\377\377\376\376\376" \
- "\331\377\377\377\1\376\376\376\204\377\377\377\1\376\376\376\257\377" \
- "\377\377\1\376\376\376\212\377\377\377\1\376\376\376\211\377\377\377" \
- "\1\376\376\376\221\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \
- "\376\205\377\377\377\1\376\376\376\312\377\377\377\1\376\376\376\214" \
- "\377\377\377\1\376\376\376\202\377\377\377\6\377\376\375\377\377\377" \
- "\376\377\377\377\377\377\377\376\377\376\377\377\270\377\377\377\7\376" \
- "\377\377\377\376\377\376\377\377\377\377\375\377\377\377\377\375\377" \
- "\377\376\377\273\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\302\377\377\377\1\376\376\376\305\377\377\377\1\376\376\376\241" \
- "\377\377\377\1\376\376\376\214\377\377\377\1\376\376\376\235\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376" \
- "\376\376\202\377\377\377\1\376\376\376\252\377\377\377\1\376\376\376" \
- "\212\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377" \
- "\1\376\376\376\251\377\377\377\202\376\376\376\215\377\377\377\1\376" \
- "\376\376\202\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376" \
- "\224\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\232\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\206\377\377\377\1\376\376" \
- "\376\243\377\377\377\1\376\376\376\204\377\377\377\1\376\376\376\202" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\2" \
- "\376\376\376\377\377\377\202\377\377\375\3\377\377\377\376\377\377\377" \
- "\377\375\202\377\376\377\1\377\377\377\270\377\376\377\14\377\377\377" \
- "\377\376\377\377\376\374\377\377\375\375\376\377\376\377\377\377\377" \
- "\375\376\376\376\377\377\377\376\376\376\377\377\377\376\376\376\203" \
- "\377\377\377\1\376\376\376\266\377\377\377\1\376\376\376\203\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\376\376\376\214\377\377\377\202" \
- "\376\376\376\207\377\377\377\1\376\376\376\272\377\377\377\1\376\376" \
- "\376\252\377\377\377\202\376\376\376\247\377\377\377\5\376\376\376\377" \
- "\377\377\376\376\376\377\377\377\376\376\376\202\377\377\377\1\376\376" \
- "\376\203\377\377\377\1\376\376\376\311\377\377\377\1\376\376\376\221" \
- "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\302\377\377" \
- "\377\1\376\376\376\207\377\377\377\1\346\346\346\204\316\316\316\10\317" \
- "\317\317\315\315\315\316\316\316\363\363\365\377\377\377\376\376\376" \
- "\377\377\377\376\376\376\204\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\376\376\376\234\377\377\377\1\376\376\376\262\377\377\377\1\376\376" \
- "\376\213\377\377\377\1\377\377\375\202\376\377\377\1\376\376\377\202" \
- "\377\377\377\2\377\376\377\377\377\375\270\276\317\331\1\377\376\377" \
- "\205\377\377\377\3\376\377\375\377\377\375\376\376\376\257\377\377\377" \
- "\1\376\376\376\210\377\377\377\202\376\376\376\210\377\377\377\1\376" \
- "\376\376\220\377\377\377\1\376\376\376\207\377\377\377\1\376\376\376" \
- "\243\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\207\377\377\377\1\376\376\376\331\377\377\377\12\376" \
- "\376\376\377\377\377\235\235\235kkmllnkkmllnjjlkkm\346\346\346\202\377" \
- "\377\377\1\376\376\376\237\377\377\377\2\346\346\346\317\317\317\204" \
- "\316\316\316\2\317\317\317\346\346\346\234\377\377\377\1\376\376\376" \
- "\203\377\377\377\1\376\376\376\202\377\377\377\1\332\332\332\203\316" \
- "\316\316\1\317\317\317\202\316\316\316\213\377\377\377\5\346\346\346" \
- "\317\317\317\315\315\315\316\316\316\315\315\315\252\316\316\316\1\363" \
- "\363\363\205\377\377\377\1\376\376\376\212\377\377\377\1\376\376\376" \
- "\211\377\377\377\4\346\346\346\250\250\250\204\204\206``b\202::<\1;;" \
- "=\202::<\3;;=99;;;=\203::<\4lln\220\220\222\266\266\266\363\363\363\202" \
- "\376\376\376\240\377\377\377\1\346\346\346\202\316\316\316\10\317\317" \
- "\317\315\315\315\317\317\317\316\316\316\332\332\332\376\376\376\377" \
- "\377\377\376\376\376\203\377\377\377\1\376\376\376\241\377\377\377\6" \
- "\376\376\376\377\377\377\346\346\346\316\316\320\317\317\321\316\316" \
- "\320\203\316\316\316\2\347\347\347\376\376\376\205\377\377\377\1\376" \
- "\376\376\202\377\377\375\5\376\377\377\377\377\375\377\377\377\317\334" \
- "\344\37V\177\270\0>i\12\37U{\317\334\344\377\376\374\377\377\375\376" \
- "\377\377\377\376\374\376\377\377\376\376\376\377\377\377\363\363\363" \
- "\202\316\316\316\1\315\315\315\202\317\317\317\251\316\316\316\1\332" \
- "\332\332\202\377\377\377\1\376\376\376\203\377\377\377\202\376\376\376" \
- "\204\377\377\377\3\346\346\346\316\316\316\316\316\320\204\316\316\316" \
- "\2\346\346\346\376\376\376\212\377\377\377\1\347\347\347\206\316\316" \
- "\316\2\317\317\317\363\363\363\250\377\377\377\2\376\376\376\331\331" \
- "\331\206\316\316\316\1\332\332\332\202\377\377\377\1\376\376\376\204" \
- "\377\377\377\1\376\376\376\203\377\377\377\3\332\332\332\316\316\316" \
- "\316\316\320\250\316\316\316\1\363\363\363\205\377\377\377\1\376\376" \
- "\376\242\377\377\377\4\346\346\346::<;;=99;\204::<\1\204\204\206\237" \
- "\377\377\377\1\376\376\376\202\377\377\377\3\235\235\235::<;;=\202::" \
- "<\3;;=::<\235\235\235\202\377\377\377\1\376\376\376\232\377\377\377\1" \
- "\376\376\376\205\377\377\377\4kkm;;;99;;;=\202::<\1;;;\213\377\377\377" \
- "\4\234\234\234:::::<;;=\202::<\1;;;\250::<\1\316\316\316\202\377\377" \
- "\377\1\376\376\376\203\377\377\377\1\376\376\376\212\377\377\377\203" \
- "\376\376\376\203\377\377\377\3\346\346\346\250\250\250```\204::<\202" \
- ";;=\202::<\3;;=::<;;=\203::<\1;;=\202::<\5;;=::<```\265\265\265\362\362" \
- "\362\203\377\377\377\1\376\376\376\233\377\377\377\1\234\234\236\204" \
- "::<\5""99;;;=::<\333\333\335\376\376\376\203\377\377\377\1\376\376\376" \
- "\241\377\377\377\4\376\376\376\377\377\377\363\363\363FFH\202::<\1;;" \
- "=\203::<\1\234\234\234\210\377\377\377\6\376\377\377\377\377\375\375" \
- "\376\377\356\363\366\40Vz\0\77h\270\0=i\20\0>i\22Ip\356\363\367\376\377" \
- "\377\377\377\375\377\377\377\376\376\377\377\376\377\377\377\377\315" \
- "\315\315:::::<;;=::<99;;;;\250::<\1kkm\205\377\377\377\1\376\376\376" \
- "\203\377\377\377\4\376\376\376\377\377\377\376\376\376\234\234\234\203" \
- "::<\6;;=::<:::\234\234\234\377\377\377\376\376\376\211\377\377\377\3" \
- "\332\332\332:::;;=\202::<\202;;=\2::<\204\204\206\250\377\377\377\2\364" \
- "\364\364FFF\204::<\202:::\1\234\234\234\206\377\377\377\1\376\376\376" \
- "\204\377\377\377\2kkk;;=\251::<\1\316\316\316\202\377\377\377\1\376\376" \
- "\376\203\377\377\377\1\376\376\376\240\377\377\377\6\376\376\376\234" \
- "\234\236::<;;=::<;;=\203::<\2FFH\362\362\362\235\377\377\377\1\376\376" \
- "\376\203\377\377\377\3\234\234\236::<;;=\202::<\3;;=::<\234\234\236\203" \
- "\377\377\377\1\376\376\376\233\377\377\377\1\376\376\376\203\377\377" \
- "\377\7kkm::<;;=::<;;=::<;;=\213\377\377\377\4\235\235\235::<;;=99;\202" \
- ";;=\251::<\1\315\315\315\203\377\377\377\202\376\376\376\213\377\377" \
- "\377\1\376\376\376\202\377\377\377\6\376\376\376\377\377\377\315\315" \
- "\315\205\205\205::<;;=\213::<\4;;=::<;;=::<\203;;=\204::<\4FFF\204\204" \
- "\204\346\346\346\376\376\376\234\377\377\377\3\234\234\236::<;;=\202" \
- "::<\4;;=99;::<``b\244\377\377\377\1\376\376\376\203\377\377\377\1xxz" \
- "\202::<\10;;=99;;;=::<;;=\233\233\235\377\377\377\376\376\376\202\377" \
- "\377\377\1\376\376\376\203\377\377\377\4\375\377\376\377\376\373\377" \
- "\377\375\235\267\310\202\0>i\271\0=i\4\0\77j\237\266\306\377\376\377" \
- "\377\375\374\202\376\377\377\4\377\377\377\376\376\376\316\316\31699" \
- ";\202;;=\2::<;;=\251::<\1kkm\203\377\377\377\1\376\376\376\210\377\377" \
- "\377\4\235\235\235::<99;;;=\203::<\1\235\235\235\214\377\377\377\2ll" \
- "n99;\202;;=\1::<\203;;=\2\362\362\364\376\376\376\245\377\377\377\2\376" \
- "\376\376\250\250\250\204::<\4;;=::<:::\346\346\346\203\377\377\377\1" \
- "\376\376\376\205\377\377\377\3\376\376\376\377\377\377jjl\252::<\1\315" \
- "\315\315\203\377\377\377\202\376\376\376\242\377\377\377\3\362\362\364" \
- "GGI::<\202;;=\2""99;;;=\202::<\2""99;\235\235\235\237\377\377\377\3\376" \
- "\376\376\377\377\377\235\235\237\202::<\202;;=\202::<\3\235\235\237\377" \
- "\377\377\376\376\376\233\377\377\377\1\376\376\376\203\377\377\377\4" \
- "\376\376\376\377\377\377kkm;;=\202::<\5""99;;;=99;\377\377\377\376\376" \
- "\376\211\377\377\377\1\233\233\233\202::<\3;;=::<99;\251::<\1\317\317" \
- "\317\205\377\377\377\1\376\376\376\214\377\377\377\3\376\376\376\347" \
- "\347\347xxz\203::<\1;;=\202::<\1;;=\204::<\1;;=\203::<\1;;=\205::<\1" \
- ";;=\203::<\1;;=\203::<\2\234\234\236\362\362\362\233\377\377\377\2\233" \
- "\233\235;;=\204::<\1;;=\202::<\1\234\234\236\245\377\377\377\4\376\376" \
- "\376\302\302\304::<;;=\206::<\1\235\235\237\202\377\377\377\1\376\376" \
- "\376\203\377\377\377\7\375\376\377\377\377\377\377\377\375\376\377\377" \
- "\377\377\377\177\235\265\0\77k\271\0\77j\7\0\77k\0\77j~\236\265\377\376" \
- "\377\376\377\377\375\377\374\377\377\375\202\377\377\377\5\315\315\315" \
- ";;=::<99;;;=\252::<\3kkm\377\377\377\376\376\376\203\377\377\377\1\376" \
- "\376\376\203\377\377\377\1\376\376\376\202\377\377\377\3\233\233\233" \
- "::<;;=\202::<\3;;=::<\234\234\234\202\377\377\377\1\376\376\376\211\377" \
- "\377\377\4\264\264\264;;=::<;;=\204::<\3\247\247\251\377\377\377\376" \
- "\376\376\245\377\377\377\1SSS\203::<\1;;=\202::<\1\204\204\204\213\377" \
- "\377\377\4\376\376\376lln::<:9>\250::<\1\317\317\317\205\377\377\377" \
- "\1\376\376\376\241\377\377\377\1\265\265\267\204::<\1;;=\204::<\1FFF" \
- "\241\377\377\377\2\234\234\236;;=\204::<\2;;=\234\234\236\234\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\204\377\377\377\1kkm\203:" \
- ":<\4;;=::<;;=\376\376\376\212\377\377\377\1\234\234\234\204::<\1;;=\251" \
- "::<\1\316\316\316\203\377\377\377\202\376\376\376\215\377\377\377\4\234" \
- "\234\234;;=::<;;=\202::<\1""99;\204::<\1;;=\203::<\1;;=\211::<\1""99" \
- ";\207::<\2FFF\301\301\301\232\377\377\377\2\234\234\23699;\210::<\1\333" \
- "\333\333\241\377\377\377\6\376\376\376\377\377\377\376\376\376\363\363" \
- "\363FFH;;=\205::<\3;;=::<\234\234\236\206\377\377\377\7\377\376\377\377" \
- "\377\377\377\377\375\375\376\377\377\376\377\201\235\263\0>g\272\0>i" \
- "\13\0>e\177\236\263\377\375\374\377\377\377\377\377\375\376\376\376\377" \
- "\376\377\377\377\377\316\316\316::<;;=\202::<\2""99;;;=\250::<\1kkm\204" \
- "\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377\376\376" \
- "\376\202\377\377\377\2\376\376\376\234\234\234\206::<\1\234\234\234\215" \
- "\377\377\377\2RRT;;=\205::<\1SSU\246\377\377\377\2\316\316\316999\206" \
- "::<\1\316\316\316\202\377\377\377\3\376\376\376\377\377\377\376\376\376" \
- "\207\377\377\377\3jjl::<:9>\250::<\1\316\316\316\203\377\377\377\202" \
- "\376\376\376\242\377\377\377\2SSU99;\202;;=\204::<\4;;=99;::<\264\264" \
- "\266\240\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377" \
- "\1kkm\206::<\213\377\377\377\2\234\234\236;;=\216::<\4""99;;;=::<;;=" \
- "\206::<\3;;=::<;;=\222::<\1\316\316\316\205\377\377\377\1\376\376\376" \
- "\207\377\377\377\1\376\376\376\202\377\377\377\2\346\346\350__a\202:" \
- ":<\3;;=::<;;=\204::<\1;;=\202::<\3;;=::<;;=\203::<\1;;=\202::<\2""99" \
- ";;;=\202::<\1;;=\204::<\7;;=::<;;=::<;;=\204\204\206\363\363\363\203" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\222\377\377\377\4" \
- "\234\234\236::<;;=99;\204::<\3;;=::<__a\244\377\377\377\1xxx\205::<\1" \
- ";;=\203::<\1\234\234\236\213\377\377\377\3\177\236\263\0=i\0>i\211\0" \
- "=i\2\0>j\0=i\202\1>j\2\0\77k\0>j\232\0>i\2\0>j\0\77k\202\1>j\2\0=i\0" \
- ">j\211\0=i\3\0>i\0=i\177\236\263\206\377\377\377\6\316\316\316:::::<" \
- ";;=::<;;=\217::<\1;;=\203::<\1;;=\202::<\1;;=\222::<\1kkk\205\377\377" \
- "\377\1\376\376\376\206\377\377\377\1\234\234\236\206::<\1\234\234\236" \
- "\215\377\377\377\3\234\234\234;;=::<\202;;=\203::<\3\316\316\320\377" \
- "\377\377\376\376\376\240\377\377\377\1\376\376\376\202\377\377\377\3" \
- "xxz::<;;=\202::<\3;;=::<__a\215\377\377\377\1kkm\204::<\1;;=\202::<\1" \
- ";;=\242::<\1\316\316\316\205\377\377\377\1\376\376\376\240\377\377\377" \
- "\1\265\265\265\202::<\5;;=::<;;=::<;;=\204::<\2TTV\376\376\376\237\377" \
- "\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm\206" \
- "::<\213\377\377\377\3\234\234\23499;;;=\214::<\1""99;\207::<\1;;=\227" \
- "::<\1\316\316\316\204\377\377\377\3\376\376\376\377\377\377\376\376\376" \
- "\203\377\377\377\1\376\376\376\204\377\377\377\2\333\333\335FFH\214:" \
- ":<\16``b\221\221\223\251\251\251\315\315\315\316\316\316\363\363\363" \
- "\377\377\377\332\332\332\316\316\316\301\301\301\235\235\237jjlFFH;;" \
- "=\207::<\1;;=\202::<\3;;=__a\363\363\363\227\377\377\377\4\234\234\236" \
- "99;::<;;=\205::<\3;;=::<\233\233\233\240\377\377\377\12\376\376\376\377" \
- "\377\377\301\301\301;;=::<;;=::<;;=::<99;\203::<\1\234\234\236\213\377" \
- "\377\377\3\177\236\263\0=i\0>i\211\0=i\7\1>j\0=i\1>j\0=i\0>g\3>h\2=g" \
- "\230\0=i\7\2=g\3>h\0>g\0=i\1>j\0=i\1>j\211\0=i\3\0>i\0=i\177\236\263" \
- "\206\377\377\377\2\317\317\317:::\221::<\202;;=\202::<\3;;=::<99;\203" \
- "::<\2;;=99;\220::<\1kkk\214\377\377\377\1\234\234\236\206::<\1\234\234" \
- "\236\213\377\377\377\3\376\376\376\377\377\377\363\363\363\204::<\4;" \
- ";=::<;;=xxz\202\377\377\377\1\376\376\376\236\377\377\377\1\376\376\376" \
- "\202\377\377\377\3\346\346\346::<;;=\202::<\4;;=99;;;=\266\266\270\215" \
- "\377\377\377\1kkm\203::<\1;;=\202::<\1;;=\243::<\1\316\316\316\204\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\232\377\377\377\1\376" \
- "\376\376\204\377\377\377\1kkm\202;;=\202::<\202;;=\2::<;;=\204::<\3\317" \
- "\317\317\377\377\377\376\376\376\235\377\377\377\1\234\234\234\206::" \
- "<\1\234\234\234\243\377\377\377\1kkm\206::<\212\377\377\377\1\376\376" \
- "\376\224\377\377\377\1lln\203::<\1;;=\202::<\1\234\234\236\234\377\377" \
- "\377\1\376\376\376\204\377\377\377\4\376\376\376\265\265\267::<;;=\202" \
- "::<\1;;=\202::<\1;;=\203::<\5__a\266\266\270\363\363\363\377\377\377" \
- "\376\376\376\204\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \
- "\376\202\377\377\377\4\301\301\303\204\204\206;;=::<\203;;=\202::<\2" \
- ";;=::<\202;;=\3GGI\332\332\334\376\376\376\203\377\377\377\1\376\376" \
- "\376\221\377\377\377\2\235\235\237::<\202;;=\202::<\1;;=\202::<\4""9" \
- "9;::<;;=\331\331\331\240\377\377\377\2\363\363\363GGI\203::<\2;;=::<" \
- "\203;;=\202::<\1\234\234\236\213\377\377\377\3\177\236\263\0=i\0>i\210" \
- "\0=i\10\0\77k\0=i\1>j\0>i\0\77j\0=i\0>i\0>j\230\0>i\10\0>j\0>i\0=i\0" \
- "\77j\0>i\1>j\0=i\0\77k\210\0=i\3\0>i\0=i\177\236\263\206\377\377\377" \
- "\1\376\376\376\217\377\377\377\1\376\376\376\203\377\377\377\1\315\315" \
- "\317\204::<\3;;=::<kkm\240\377\377\377\1\234\234\236\206::<\1\234\234" \
- "\236\214\377\377\377\3\376\376\376\377\377\377\204\204\206\202::<\1;" \
- ";=\202::<\202;;=\1\345\345\345\242\377\377\377\2\376\376\376\234\234" \
- "\234\206::<\2GGI\363\363\363\215\377\377\377\1kkm\203::<\4""99;::<;;" \
- "=\316\316\320\311\377\377\377\2\317\317\32199;\203::<\5;;=::<FFH;;=:" \
- ":<\202;;=\202::<\1kkm\237\377\377\377\1\234\234\234\206::<\1\234\234" \
- "\234\243\377\377\377\1kkm\206::<\213\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\216\377\377\377\1\376\376\376\202\377\377\377\5lln:" \
- ":<;;=::<;;=\202::<\2\234\234\234\376\376\376\227\377\377\377\1\376\376" \
- "\376\210\377\377\377\1\264\264\266\202;;=\4::<;;=::<99;\204::<\3jjl\317" \
- "\317\321\376\376\376\202\377\377\377\1\375\375\375\203\377\377\377\3" \
- "\376\376\376\377\377\377\376\376\376\204\377\377\377\1\376\376\376\203" \
- "\377\377\377\3\363\363\365\234\234\236FFH\202::<\1;;=\202::<\1;;=\203" \
- "::<\2FFH\332\332\334\225\377\377\377\1\233\233\235\202;;=\211::<\1__" \
- "a\240\377\377\377\2xxz;;=\202::<\3;;=::<;;=\205::<\1\234\234\236\213" \
- "\377\377\377\3\177\236\263\0=i\0>i\211\0=i\202\0>i\5\0<h\1>j\0=i\1>j" \
- "\0>i\230\0=i\5\0>i\1>j\0=i\1>j\0<h\202\0>i\211\0=i\3\0>i\0=i\177\236" \
- "\263\212\377\377\377\3\376\376\376\377\377\377\376\376\376\212\377\377" \
- "\377\1\376\376\376\202\377\377\377\10\316\316\320::<;;=::<;;=99;::<j" \
- "jl\225\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\207\377" \
- "\377\377\1\234\234\236\206::<\1\234\234\236\216\377\377\377\3\332\332" \
- "\332;;=99;\202::<\4;;=::<99;\234\234\236\237\377\377\377\1\376\376\376" \
- "\203\377\377\377\1SSU\202::<\1;;=\203::<\1\221\221\221\216\377\377\377" \
- "\1kkm\206::<\1\316\316\316\250\377\377\377\1\376\376\376\235\377\377" \
- "\377\1\376\376\376\202\377\377\377\5xxz::<;;=::<;;=\202::<\3\316\316" \
- "\320RRT;;=\203::<\4;;=::<\332\332\332\376\376\376\235\377\377\377\1\234" \
- "\234\234\206::<\1\234\234\234\243\377\377\377\1kkm\206::<\214\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\213\377\377\377\1\376\376" \
- "\376\204\377\377\377\4kkm;;=::<;;=\203::<\1\235\235\235\202\377\377\377" \
- "\1\376\376\376\221\377\377\377\1\376\376\376\213\377\377\377\4\301\301" \
- "\301;;=::<;;=\203::<\202;;=\3::<RRT\316\316\316\203\377\377\377\1\376" \
- "\376\376\202\377\377\377\1\376\376\376\204\377\377\377\3\376\376\376" \
- "\377\377\377\376\376\376\203\377\377\377\1\376\376\376\204\377\377\377" \
- "\4\346\346\346xxz;;=99;\207::<\4GGI\362\362\362\377\377\377\376\376\376" \
- "\222\377\377\377\1\234\234\236\206::<\203;;=\202::<\2;;=\233\233\235" \
- "\236\377\377\377\10\301\301\301::<;;=:9>::<99;::<99;\202;;=\203::<\1" \
- "\234\234\236\213\377\377\377\3\177\236\263\0=i\0>i\210\0=i\7\2=g\0>i" \
- "\0>j\0\77j\0=i\0\77j\0=h\232\1>j\7\0=h\0\77j\0=i\0\77j\0>j\0>i\2=g\210" \
- "\0=i\3\0>i\0=i\177\236\263\213\377\377\377\1\376\376\376\216\377\377" \
- "\377\1\317\317\321\202::<\6;;=::<;;=::<lln\376\376\376\225\377\377\377" \
- "\1\376\376\376\203\377\377\377\1\376\376\376\205\377\377\377\1\234\234" \
- "\236\206::<\1\234\234\236\213\377\377\377\1\376\376\376\203\377\377\377" \
- "\2kkm;;=\204::<\2;;=GGI\236\377\377\377\1\376\376\376\203\377\377\377" \
- "\1\265\265\267\202::<\6;;=::<;;=::<;;=\345\345\345\216\377\377\377\1" \
- "kkm\202::<\5;;=99;;;=99;\317\317\317\244\377\377\377\1\376\376\376\241" \
- "\377\377\377\3\376\376\376\377\377\377\347\347\351\206::<\3``b\377\377" \
- "\377\234\234\236\202::<\1;;=\202::<\4;;=\204\204\206\377\377\377\376" \
- "\376\376\234\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377" \
- "\377\1kkm\206::<\215\377\377\377\1\375\375\375\202\377\377\377\1\376" \
- "\376\376\213\377\377\377\5\376\376\376\377\377\377\376\376\376lln;;=" \
- "\203::<\3;;=::<\234\234\234\234\377\377\377\1\376\376\376\202\377\377" \
- "\377\4\331\331\331FFH::<;;=\202::<\11;;=::<99;;;=\203\203\203\363\363" \
- "\363\376\376\376\377\377\377\376\376\376\222\377\377\377\7\376\376\376" \
- "\377\377\377\376\376\376\377\377\377\300\300\300GGI::<\202;;=\205::<" \
- "\4``b\362\362\362\377\377\377\376\376\376\221\377\377\377\1\234\234\236" \
- "\204::<\202;;=\203::<\5;;=99;::<;;=\332\332\332\234\377\377\377\4\363" \
- "\363\363GGI;;=::<\202;;=\203::<\1;;=\202::<\3;;=::<\234\234\236\213\377" \
- "\377\377\3\177\236\263\0=i\0>i\210\0=i\10\0\77j\0>j\0\77k\0=i\3>h\2=" \
- "g\1>j\0\77k\230\0=i\10\0\77k\1>j\2=g\3>h\0=i\0\77k\0>j\0\77j\210\0=i" \
- "\3\0>i\0=i\177\236\263\232\377\377\377\12\316\316\316;;=::<;;=::<;;=" \
- "::<kkm\377\377\377\376\376\376\222\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\210\377\377\377\1\234\234\236\206::<\1\234\234" \
- "\236\214\377\377\377\1\376\376\376\202\377\377\377\2\266\266\26699;\202" \
- "::<\202;;=\202::<\3\266\266\270\377\377\377\376\376\376\234\377\377\377" \
- "\203\376\376\376\1lln\202;;=\204::<\3xxx\377\377\377\376\376\376\215" \
- "\377\377\377\1kkm\205::<\2;;=\316\316\316\305\377\377\377\1\376\376\376" \
- "\202\377\377\377\1\203\203\205\206::<\4\265\265\267\377\377\377\363\363" \
- "\363GGG\203::<\1;;=\202::<\1\346\346\346\235\377\377\377\1\234\234\234" \
- "\206::<\1\234\234\234\243\377\377\377\1kkm\206::<\216\377\377\377\1\376" \
- "\376\376\220\377\377\377\1jjl\206::<\1\234\234\234\202\377\377\377\1" \
- "\376\376\376\232\377\377\377\3\376\376\376\364\364\364SSU\202::<\7;;" \
- "=::<;;=99;::<;;=\265\265\265\205\377\377\377\203\376\376\376\214\377" \
- "\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377\376\376\376" \
- "\203\377\377\377\7\332\332\332__a::<;;=::<;;=::<\202;;=\3::<\205\205" \
- "\207\376\376\377\222\377\377\377\3\234\234\236::<;;=\202::<\2;;=99;\202" \
- ";;=\1""99;\202::<\3;;=::<__a\234\377\377\377\1xxz\202;;=\205::<\1;;=" \
- "\202::<\1;;=\202::<\1\234\234\236\213\377\377\377\3\177\236\263\0=i\0" \
- ">i\210\0=i\10\0>i\0=i\0>i\0\77k\0>j\2=g\1\77h\0>l\230\0>i\10\0>l\1\77" \
- "h\2=g\0>j\0\77k\0>i\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\205\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\376\376\376\221\377\377\377\3\316" \
- "\316\316::<;;=\204::<\1kkm\225\377\377\377\202\376\376\376\211\377\377" \
- "\377\1\234\234\236\206::<\1\234\234\236\217\377\377\377\3\376\376\376" \
- "TTV99;\202::<\4""99;;;=::<kkm\240\377\377\377\1\346\346\346\202::<\1" \
- "99;\204::<\1\316\316\316\217\377\377\377\1kkm\204::<\3;;=99;\316\316" \
- "\316\305\377\377\377\7\376\376\376\377\377\377\363\363\363::<;;=::<;" \
- ";=\202::<\1SSU\203\377\377\377\2\204\204\204;;=\203::<\4;;=99;\222\222" \
- "\222\376\376\376\234\377\377\377\1\234\234\234\206::<\1\234\234\234\243" \
- "\377\377\377\1kkm\206::<\214\377\377\377\3\376\376\376\377\377\377\376" \
- "\376\376\220\377\377\377\1kkm\206::<\1\234\234\236\236\377\377\377\1" \
- "\204\204\206\203::<\1;;=\202::<\3;;=::<\265\265\267\221\377\377\377\1" \
- "\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377\1\376\376" \
- "\376\204\377\377\377\11\376\376\376\363\363\365__a::<;;=::<;;=::<;;=" \
- "\202::<\1\301\301\303\222\377\377\377\2\234\234\236;;=\202::<\10;;=:" \
- ":<;;=FFH::<;;=::<;;=\203::<\1\235\235\237\232\377\377\377\2\301\301\303" \
- ";;=\205::<\2;;=RRT\204::<\3;;=::<\234\234\236\213\377\377\377\3\177\236" \
- "\263\0=i\0>i\210\0=i\7\0>j\2=g\0>g\0>j\40V|o\224\256\177\236\262\232" \
- "\177\236\263\7\177\236\262o\224\256\40V|\0>j\0>g\2=g\0>j\210\0=i\3\0" \
- ">i\0=i\177\236\263\232\377\377\377\3\316\316\316::<;;=\203::<\2;;=kk" \
- "m\232\377\377\377\1\376\376\376\205\377\377\377\1\234\234\236\206::<" \
- "\1\234\234\236\220\377\377\377\2\233\233\235;;=\202::<\1<<>\203::<\1" \
- "\346\346\346\237\377\377\377\1\204\204\204\206::<\2SSU\376\376\376\217" \
- "\377\377\377\1kkm\203::<\4;;=::<;;=\316\316\320\304\377\377\377\1\376" \
- "\376\376\202\377\377\377\2\234\234\236;;=\202::<\4;;=::<;;=\234\234\234" \
- "\203\377\377\377\1\346\346\346\205::<\3;;=FFH\363\363\365\203\377\377" \
- "\377\1\376\376\376\230\377\377\377\1\234\234\234\206::<\1\234\234\234" \
- "\243\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236" \
- "\235\377\377\377\2\316\316\316;;=\202::<\6;;=::<;;=::<:::\265\265\265" \
- "\237\377\377\377\7\376\376\376\363\363\363___::<;;=::<;;=\203::<\2GG" \
- "I\363\363\363\204\377\377\377\1\376\376\376\214\377\377\377\1\234\234" \
- "\234\203::<\202;;=\5::<\266\266\266GGI99;;;=\202::<\1;;=\202::<\1\332" \
- "\332\332\206\377\377\377\1\376\376\376\211\377\377\377\1\376\376\376" \
- "\207\377\377\377\2\363\363\363FFH\206::<\3FFH\301\301\30399;\202::<\202" \
- ";;=\2::<\234\234\236\206\377\377\377\7\377\377\375\377\377\377\377\377" \
- "\375\376\377\377\376\376\376\200\237\263\0\77i\211\0>i\7\0>g\1>j\0>g" \
- "_\210\236\377\377\377\376\377\377\377\376\377\231\377\377\377\10\377" \
- "\377\375\376\377\375\377\377\377\377\377\375`\210\242\3>h\0\77j\1\77" \
- "h\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<" \
- "\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\220\377\377" \
- "\377\1\363\363\363\204::<\202;;=\2""99;\205\205\207\207\377\377\377\1" \
- "\376\376\376\224\377\377\377\4\376\376\376\377\377\377\363\363\363FF" \
- "H\202::<\5;;=99;;;=::<\265\265\265\220\377\377\377\1kkm\206::<\1\316" \
- "\316\316\305\377\377\377\5\376\376\376\364\364\364FFH::<;;=\202::<\4" \
- ";;=FFH\363\363\363\377\377\377\202\376\376\376\6\377\377\377xxz::<;;" \
- "=::<;;=\202::<\1\234\234\236\206\377\377\377\202\376\376\376\224\377" \
- "\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm\206" \
- "::<\237\377\377\377\1kkm\206::<\1\234\234\236\225\377\377\377\1\376\376" \
- "\376\207\377\377\377\2SSS;;=\202::<\1;;=\203::<\1\234\234\234\202\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\232\377\377\377\1\376" \
- "\376\376\202\377\377\377\4\332\332\332FFH::<;;=\202::<\1;;=\202::<\1" \
- "\222\222\224\205\377\377\377\1\376\376\376\213\377\377\377\3\234\234" \
- "\234::<;;=\202::<\5""99;;;=\315\315\315\250\250\252;;=\206::<\2``b\376" \
- "\376\376\202\377\377\377\1\376\376\376\216\377\377\377\1\376\376\376" \
- "\205\377\377\377\2xxx;;=\202::<\1;;=\203::<\2\300\300\300\317\317\321" \
- "\203::<\1;;=\202::<\1\234\234\236\207\377\377\377\1\377\376\377\202\377" \
- "\377\377\4\377\376\377\201\235\263\0=j\3>j\210\0=i\5\1>j\0=j\37V\177" \
- "\377\376\377\376\376\376\202\377\377\377\1\376\377\377\230\377\377\377" \
- "\10\376\377\377\377\377\375\374\377\377\377\376\374\376\377\377#W\177" \
- "\0>g\0\77i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316" \
- "\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\220\377" \
- "\377\377\2\376\376\376\204\204\206\205::<\3;;=FFH\362\362\362\204\377" \
- "\377\377\202\376\376\376\2\377\377\377\376\376\376\224\377\377\377\3" \
- "\376\376\376\265\265\265;;=\203::<\4;;=99;FFH\363\363\363\220\377\377" \
- "\377\1kkm\206::<\1\316\316\316\306\377\377\377\4\265\265\26599;;;=::" \
- "<\202;;=\2""99;\222\222\224\204\377\377\377\12\376\376\376\316\316\320" \
- ";;=::<;;=99;;;=99;SSU\376\376\376\202\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\226\377\377\377\1\234\234\234\206::<\1\234\234\234\243" \
- "\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\234" \
- "\377\377\377\11\234\234\234::<;;=99;;;=99;::<;;=kkm\241\377\377\377\1" \
- "\376\376\376\202\377\377\377\1\301\301\303\203::<\6;;=99;::<;;=::<\346" \
- "\346\350\203\377\377\377\1\376\376\376\214\377\377\377\1\234\234\234" \
- "\203::<\202;;=\10""99;\316\316\316\377\377\377kkm::<;;=::<;;=\203::<" \
- "\1\235\235\237\203\377\377\377\1\376\376\376\214\377\377\377\1\376\376" \
- "\376\205\377\377\377\3\302\302\304::<;;=\202::<\7""99;;;=99;xxz\377\377" \
- "\377\315\315\315;;=\203::<\3:9>::<\234\234\236\206\377\377\377\3\376" \
- "\377\377\377\377\375\377\377\377\202\377\377\375\3|\237\265\0\77k\0>" \
- "g\210\0=i\10\0@h\3<i~\236\263\376\377\377\377\377\377\377\376\377\377" \
- "\376\374\377\376\377\230\377\377\377\10\377\375\377\377\377\375\377\376" \
- "\374\377\377\377\376\376\374\220\251\275\2=i\0>j\210\0=i\3\0>i\0=i\177" \
- "\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1" \
- "\234\234\236\206::<\1\234\234\236\215\377\377\377\1\376\376\376\203\377" \
- "\377\377\2\332\332\334;;=\206::<\2\266\266\266\376\376\376\202\377\377" \
- "\377\1\376\376\376\202\377\377\377\1\376\376\376\222\377\377\377\1\376" \
- "\376\376\203\377\377\377\1SSS\203::<\4""99;::<;;=\221\221\223\221\377" \
- "\377\377\1kkm\206::<\1\316\316\316\306\377\377\377\4RRT;;=::<;;=\202" \
- "::<\2;;=\345\345\345\202\377\377\377\1\376\376\376\203\377\377\377\2" \
- "__a;;=\202::<\1;;=\202::<\1\264\264\264\206\377\377\377\1\376\376\376" \
- "\224\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1" \
- "kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\226\377\377\377" \
- "\1\376\376\376\204\377\377\377\2\363\363\363FFH\203::<\1;;=\202::<\2" \
- "FFH\346\346\346\204\377\377\377\1\376\376\376\233\377\377\377\1\376\376" \
- "\376\203\377\377\377\3\376\376\376xxz99;\202::<\1""99;\202::<\4;;=\204" \
- "\204\206\377\377\377\376\376\376\202\377\377\377\1\376\376\376\213\377" \
- "\377\377\1\234\234\234\202::<\10;;=99;;;=::<\317\317\317\376\376\376" \
- "\363\363\363GGI\203::<\1;;=\203::<\3\331\331\331\377\377\377\376\376" \
- "\376\202\377\377\377\1\376\376\376\217\377\377\377\5\363\363\363GGI;" \
- ";=::<;;=\202::<\7""99;FFH\363\363\363\377\377\377\316\316\316::<;;=\202" \
- "::<\3:9>::<\234\234\236\207\377\377\377\7\376\377\377\376\376\376\377" \
- "\377\377\377\377\375\377\377\377\377\375\374\376\377\377\210\377\377" \
- "\377\10\376\376\374\376\377\377\354\364\366\377\377\375\376\377\377\377" \
- "\376\374\377\377\375\376\377\377\230\377\377\377\10\377\377\375\376\377" \
- "\377\377\376\375\375\376\377\376\377\377\301\317\330\0>g\0>j\210\0=i" \
- "\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240" \
- "\377\377\377\1\234\234\236\206::<\1\234\234\236\220\377\377\377\5\376" \
- "\376\376\377\377\377kkm::<;;=\202::<\3""99;::<^^`\204\377\377\377\1\376" \
- "\376\376\227\377\377\377\1\316\316\316\202::<\203;;=\202::<\1\347\347" \
- "\347\221\377\377\377\1kkm\206::<\1\316\316\316\303\377\377\377\12\376" \
- "\376\376\377\377\377\301\301\301;;=::<;;=::<99;::<\204\204\206\204\377" \
- "\377\377\4\376\376\376\377\377\377\376\376\376\266\266\266\202::<\5;" \
- ";=::<;;=::<``b\203\377\377\377\1\376\376\376\227\377\377\377\1\234\234" \
- "\234\206::<\1\234\234\234\243\377\377\377\1kkm\206::<\237\377\377\377" \
- "\1kkm\206::<\1\234\234\236\233\377\377\377\1\265\265\267\204::<\4""9" \
- "9;;;=::<\234\234\234\203\377\377\377\3\376\376\376\377\377\377\376\376" \
- "\376\231\377\377\377\5\376\376\376\377\377\377\376\376\376\377\377\377" \
- "\376\376\376\202\377\377\377\5\363\363\363GGI99;::<;;=\202::<\3;;=::" \
- "<\346\346\346\204\377\377\377\1\376\376\376\212\377\377\377\3\234\234" \
- "\234::<99;\202;;=\202::<\1\315\315\315\202\377\377\377\3\301\301\303" \
- ";;=99;\202;;=\5::<;;=::<``b\376\376\376\202\377\377\377\1\376\376\376" \
- "\215\377\377\377\6\376\376\376\377\377\377\376\376\376xxz::<;;=\203:" \
- ":<\202;;=\1\300\300\302\202\377\377\377\3\316\316\316;;=99;\202::<\3" \
- ";:\77::<\234\234\236\206\377\377\377\2\377\377\375\376\377\375\202\376" \
- "\377\377\4\377\377\375\377\377\377\377\376\377\377\377\375\211\377\377" \
- "\377\1\376\376\374\202\377\377\377\3\377\376\377\377\377\377\375\376" \
- "\377\231\377\377\377\202\376\377\377\5\377\376\377\376\377\377\377\377" \
- "\375\277\320\332\0\77j\211\0=i\3\0>i\0=i\177\236\263\232\377\377\377" \
- "\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234" \
- "\234\236\213\377\377\377\3\376\376\376\377\377\377\376\376\376\204\377" \
- "\377\377\1\265\265\265\202::<\1;;=\204::<\1\315\315\317\204\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\220\377\377\377\1\376\376" \
- "\376\202\377\377\377\3\204\204\204::<;;=\204::<\2yy{\376\376\376\221" \
- "\377\377\377\1kkm\206::<\1\316\316\316\305\377\377\377\4kkm;;=::<;;=" \
- "\203::<\1\316\316\316\210\377\377\377\1TTV\206::<\2\317\317\321\376\376" \
- "\376\231\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377" \
- "\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\233\377\377\377" \
- "\1TTV\202::<\7;;=::<;;=::<RRT\377\377\377\376\376\376\203\377\377\377" \
- "\1\376\376\376\233\377\377\377\1\376\376\376\206\377\377\377\2\233\233" \
- "\235;;=\203::<\4;;=::<;;=\234\234\234\217\377\377\377\4\234\234\234:" \
- ":<;;=99;\203::<\1\316\316\316\203\377\377\377\4xxz;;=::<99;\202::<\3" \
- ";;=::<\234\234\236\216\377\377\377\1\376\376\376\202\377\377\377\16\376" \
- "\376\376\302\302\304::<;;=::<;;=::<;;=::<\221\221\223\377\377\377\376" \
- "\376\376\377\377\377\316\316\316\202::<\202;;=\202::<\1\234\234\236\206" \
- "\377\377\377\2\377\376\377\377\377\377\202\377\376\377\4\376\376\376" \
- "\353\366\374\327\355\370\323\356\371\210\326\356\372\7\325\354\372\327" \
- "\355\372\365\372\376\376\376\376\377\377\377\376\377\377\377\377\373" \
- "\231\377\377\377\2\377\376\377\376\377\375\202\377\377\377\4\374\377" \
- "\377\300\316\327\0=i\1\77h\210\0=i\3\0>i\0=i\177\236\263\232\377\377" \
- "\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1" \
- "\234\234\236\221\377\377\377\4\376\376\376\377\377\377SSU;;=\202::<\4" \
- ";;=99;;;=\204\204\206\203\377\377\377\1\376\376\376\226\377\377\377\11" \
- "\363\363\36399;;;=::<;;=::<;;=::<\316\316\316\202\377\377\377\1\376\376" \
- "\376\217\377\377\377\1kkm\206::<\1\316\316\316\304\377\377\377\1\316" \
- "\316\316\206::<\1kkk\211\377\377\377\2\235\235\23599;\202;;=\6::<;;=" \
- "::<kkm\377\377\377\376\376\376\203\377\377\377\1\376\376\376\224\377" \
- "\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm\206" \
- "::<\237\377\377\377\1kkm\206::<\1\234\234\236\232\377\377\377\1\332\332" \
- "\332\204::<\1;;=\202::<\4\266\266\270\376\376\376\377\377\377\376\376" \
- "\376\240\377\377\377\1\376\376\376\204\377\377\377\2\363\363\363FFH\202" \
- "::<\5;;=::<;;=::<SSS\217\377\377\377\2\235\235\23599;\205::<\11\316\316" \
- "\316\377\377\377\376\376\376\377\377\377\363\363\363FFH::<;;=99;\203" \
- ";;=\2::<\331\331\333\220\377\377\377\2\363\363\363FFH\202::<\6;;=::<" \
- ";;=::<TTV\364\364\364\203\377\377\377\3\316\316\316<<>99;\202::<\3;;" \
- "=::<\234\234\236\211\377\377\377\4\377\375\376\376\377\377\254\334\363" \
- "Z\266\347\211[\267\350\6\\\266\350X\267\347\326\354\367\377\376\377\376" \
- "\377\377\377\377\375\232\377\377\377\3\377\377\373\375\377\376\376\377" \
- "\377\202\377\377\375\3\276\320\336\0>g\0>i\210\0=i\3\0>i\0=i\177\236" \
- "\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234" \
- "\234\236\206::<\1\234\234\236\223\377\377\377\1\235\235\237\204::<\4" \
- "<<>::<;;=\363\363\363\206\377\377\377\1\376\376\376\222\377\377\377\2" \
- "\234\234\234;;=\205::<\1SSU\204\377\377\377\1\376\376\376\216\377\377" \
- "\377\1kkm\206::<\1\316\316\316\304\377\377\377\1\204\204\204\203::<\1" \
- "99;\202::<\1\265\265\265\211\377\377\377\2\363\363\363FFH\205::<\2;;" \
- "=\346\346\346\231\377\377\377\1\234\234\234\206::<\1\234\234\234\243" \
- "\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\232" \
- "\377\377\377\1\222\222\222\202::<\1;;=\202::<\3;;=FFH\362\362\364\251" \
- "\377\377\377\1\235\235\235\203::<\7;;=::<;;=;;;\331\331\331\377\377\377" \
- "\376\376\376\214\377\377\377\2\234\234\234;;=\205::<\1\316\316\316\202" \
- "\377\377\377\3\376\376\376\377\377\377\301\301\301\205::<\4;;=::<__a" \
- "\376\376\376\216\377\377\377\4\376\376\376yyy::<;;=\205::<\1\316\316" \
- "\320\204\377\377\377\2\316\316\31699;\203::<\3""99;::<\234\234\236\207" \
- "\377\377\377\2\376\377\377\376\376\374\202\377\376\377\3\254\332\362" \
- "Y\267\352[\267\350\210Y\270\350\7[\267\350Y\267\352\326\356\370\376\376" \
- "\377\377\376\377\377\375\377\376\377\377\231\377\377\377\10\377\377\375" \
- "\376\377\377\377\377\377\377\376\377\377\377\375\276\317\331\1>j\0>j" \
- "\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1" \
- "kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\220\377\377\377" \
- "\1\376\376\376\202\377\377\377\4\363\363\365;;=::<;;=\204::<\1\234\234" \
- "\234\231\377\377\377\1SSS\202::<\1;;=\203::<\1\265\265\267\223\377\377" \
- "\377\1kkm\206::<\1\316\316\316\300\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\346\346\350\203::<\4;;=::<;;=SSU\213\377\377\377\1\204\204" \
- "\204\203::<\1;;=\202::<\1\204\204\206\202\377\377\377\1\376\376\376\226" \
- "\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm" \
- "\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\227\377\377\377\1\376" \
- "\376\376\202\377\377\377\3TTV::<;;=\203::<\2;;=\205\205\205\252\377\377" \
- "\377\1\347\347\347\202::<\202;;=\203::<\1\235\235\237\204\377\377\377" \
- "\1\376\376\376\211\377\377\377\1\234\234\234\206::<\1\316\316\316\205" \
- "\377\377\377\1\205\205\205\202::<\6;;=::<;;=::<;;=\234\234\236\213\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\302\302\302\202;;=\203::<\3" \
- ";;=::<\221\221\221\202\377\377\377\1\376\376\376\202\377\377\377\1\316" \
- "\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350" \
- "\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317" \
- "\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \
- "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\224" \
- "\377\377\377\4\204\204\204;;=::<;;=\203::<\1TTT\204\377\377\377\1\376" \
- "\376\376\223\377\377\377\1\300\300\300\203::<\5;;=::<;;=FFF\363\363\363" \
- "\223\377\377\377\1kkm\203::<\4;;=::<;;=\316\316\320\277\377\377\377\14" \
- "\376\376\376\377\377\377\376\376\376\377\377\377\204\204\206::<;;=::" \
- "<99;<<>99;\265\265\267\213\377\377\377\3\346\346\346::<;;=\202::<\1;" \
- ";=\202::<\2\347\347\347\376\376\376\227\377\377\377\1\234\234\234\206" \
- "::<\1\234\234\234\243\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206" \
- "::<\1\234\234\236\226\377\377\377\4\376\376\376\377\377\377\376\376\376" \
- "\346\346\350\202;;=\203::<\3""99;<<>\301\301\301\253\377\377\377\1aa" \
- "c\202::<\1;;=\202::<\2;;=jjl\205\377\377\377\1\376\376\376\210\377\377" \
- "\377\1\234\234\234\206::<\1\316\316\316\202\377\377\377\1\376\376\376" \
- "\202\377\377\377\3\362\362\362SSU;;=\205::<\2;;=\332\332\332\210\377" \
- "\377\377\1\376\376\376\203\377\377\377\2\363\363\363FFH\202::<\202;;" \
- "=\5::<;;=SSS\363\363\363\376\376\376\204\377\377\377\1\316\316\316\206" \
- "::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350" \
- "\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0" \
- ">i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::" \
- "<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\224\377\377" \
- "\377\1\332\332\332\207::<\1\301\301\301\227\377\377\377\1lll\204::<\3" \
- ";;=::<\221\221\221\202\377\377\377\3\376\376\376\377\377\377\376\376" \
- "\376\217\377\377\377\1kkm\204::<\3;;=99;\316\316\316\241\377\377\377" \
- "\1\376\376\376\234\377\377\377\10\376\376\376\377\377\377\376\376\376" \
- "\377\377\377\363\363\363FFH;;=::<\202;;=\3::<FFH\364\364\364\214\377" \
- "\377\377\1xxz\204::<\3;;=::<\233\233\233\230\377\377\377\1\234\234\234" \
- "\206::<\1\234\234\234\243\377\377\377\1kkm\206::<\237\377\377\377\1k" \
- "km\206::<\1\234\234\236\224\377\377\377\1\376\376\376\204\377\377\377" \
- "\4\266\266\270;;=::<;;=\203::<\1""99;\254\377\377\377\3\234\234\234:" \
- ":<;;=\205::<\204\377\377\377\1\376\376\376\211\377\377\377\1\234\234" \
- "\234\206::<\1\316\316\316\203\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\316\316\320\204::<\4;;=99;::<__a\205\377\377\377\1\376\376\376\206" \
- "\377\377\377\4yy{;;=::<;;=\202::<\3;;=::<\316\316\316\206\377\377\377" \
- "\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270" \
- "\350\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276" \
- "\317\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316" \
- "\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236" \
- "\225\377\377\377\1__a\204;;=\5""99;::<yy{\377\377\377\376\376\376\216" \
- "\377\377\377\1\376\376\376\205\377\377\377\1\346\346\346\202::<\203;" \
- ";=\202::<\1\346\346\346\224\377\377\377\1kkm\205::<\2;;=\316\316\316" \
- "\235\377\377\377\1\376\376\376\244\377\377\377\1\234\234\234\202;;=\204" \
- "::<\2\235\235\235\376\376\376\212\377\377\377\4\376\376\376\377\377\377" \
- "\317\317\317::<\202;;=\202::<\3;;=GGI\362\362\362\202\377\377\377\1\376" \
- "\376\376\224\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377" \
- "\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\231\377\377" \
- "\377\1\220\220\222\205::<\3;;=kkm\376\376\376\253\377\377\377\3\316\316" \
- "\316<<>99;\202::<\4;;=::<;;=\331\331\331\215\377\377\377\1\234\234\234" \
- "\206::<\1\316\316\316\207\377\377\377\1\222\222\224\202::<\3;;=99;<<" \
- ">\202::<\4\234\234\236\376\376\376\377\377\377\376\376\376\203\377\377" \
- "\377\1\376\376\376\203\377\377\377\6\302\302\304;;=99;;;=::<;;=\202:" \
- ":<\1\234\234\234\202\377\377\377\1\376\376\376\204\377\377\377\1\316" \
- "\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350" \
- "\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317" \
- "\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \
- "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\225" \
- "\377\377\377\2\265\265\265;;=\202::<\2""99;;;=\202::<\2\347\347\347\376" \
- "\376\376\215\377\377\377\3\376\376\376\377\377\377\376\376\376\204\377" \
- "\377\377\3\221\221\223;;=99;\204::<\3xxz\377\377\377\376\376\376\202" \
- "\377\377\377\202\376\376\376\217\377\377\377\1kkm\202::<\5;;=99;;;=9" \
- "9;\317\317\317\233\377\377\377\1\376\376\376\237\377\377\377\1\376\376" \
- "\376\204\377\377\377\3\376\376\376\377\377\377GGI\202::<\5;;=::<;;=:" \
- ":<\346\346\346\213\377\377\377\1\376\376\376\202\377\377\377\2``b99;" \
- "\202;;=\203::<\3\247\247\247\377\377\377\376\376\376\225\377\377\377" \
- "\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm\206::<\237\377" \
- "\377\377\1kkm\206::<\1\234\234\236\231\377\377\377\10kkm::<;;=::<;;=" \
- "99;::<\235\235\237\255\377\377\377\202::<\1;;=\204::<\1\301\301\301\215" \
- "\377\377\377\1\234\234\234\206::<\1\316\316\316\206\377\377\377\5\376" \
- "\376\376\364\364\364TTV::<99;\202;;=\203::<\4\332\332\334\376\376\376" \
- "\377\377\377\376\376\376\203\377\377\377\6\376\376\376\377\377\377\363" \
- "\363\363FFH::<;;=\204::<\1__a\210\377\377\377\1\316\316\316\206::<\1" \
- "\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270" \
- "\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0" \
- "=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240" \
- "\377\377\377\1\234\234\236\206::<\1\234\234\236\224\377\377\377\5\376" \
- "\376\376\377\377\377GGI::<;;=\203::<\4;;=\220\220\222\377\377\377\376" \
- "\376\376\214\377\377\377\1\376\376\376\203\377\377\377\10\376\376\376" \
- "\377\377\377\363\363\363FFH::<;;=99;;;=\202::<\1\316\316\320\202\377" \
- "\377\377\1\376\376\376\204\377\377\377\1\376\376\376\215\377\377\377" \
- "\1kkm\206::<\1\316\316\316\277\377\377\377\3\376\376\376\377\377\377" \
- "\265\265\267\204::<\3;;=::<\205\205\205\213\377\377\377\1\376\376\376" \
- "\202\377\377\377\2\376\376\376\265\265\265\202::<\5""99;<<>::<;;=SSU" \
- "\202\377\377\377\1\376\376\376\224\377\377\377\1\234\234\234\206::<\1" \
- "\234\234\234\243\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<" \
- "\1\234\234\236\230\377\377\377\2\376\376\376SSU\204::<\3;;=::<\266\266" \
- "\266\253\377\377\377\3\376\376\376\377\377\377^^`\206::<\1\234\234\234" \
- "\202\377\377\377\1\376\376\376\212\377\377\377\1\234\234\234\206::<\1" \
- "\316\316\316\205\377\377\377\6\376\376\376\377\377\377\376\376\376\315" \
- "\315\317::<;;=\202::<\4;;=99;::<``b\210\377\377\377\4xxz99;<<>::<\202" \
- ";;=\202::<\1\332\332\332\203\377\377\377\1\376\376\376\204\377\377\377" \
- "\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270" \
- "\350\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276" \
- "\317\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316" \
- "\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236" \
- "\226\377\377\377\1\234\234\234\206::<\2FFH\376\376\376\214\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377\3\265\265" \
- "\265;;=99;\202;;=\202::<\1SSU\202\377\377\377\1\376\376\376\223\377\377" \
- "\377\1kkm\203::<\4""99;::<;;=\316\316\320\275\377\377\377\202\376\376" \
- "\376\4\377\377\377\376\376\376SSU;;=\202::<\4;;=::<;;=\332\332\332\215" \
- "\377\377\377\5\376\376\376\377\377\377\376\376\376SSU;;=\204::<\2;;=" \
- "\264\264\264\226\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377" \
- "\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\231\377" \
- "\377\377\207::<\1\316\316\316\254\377\377\377\2\376\376\376lln\202::" \
- "<\1;;=\202::<\4;;=\233\233\233\377\377\377\376\376\376\202\377\377\377" \
- "\1\376\376\376\210\377\377\377\1\234\234\234\206::<\1\316\316\316\203" \
- "\377\377\377\202\376\376\376\204\377\377\377\1\234\234\234\207::<\1\234" \
- "\234\236\205\377\377\377\4\376\376\376\300\300\302::<;;=\205::<\2\234" \
- "\234\234\376\376\376\202\377\377\377\1\376\376\376\205\377\377\377\1" \
- "\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270" \
- "\350\211[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276" \
- "\317\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316" \
- "\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236" \
- "\226\377\377\377\1\347\347\347\204::<\5;;=99;;;=\265\265\265\376\376" \
- "\376\222\377\377\377\2___99;\202::<\4;;=::<;;=\265\265\265\207\377\377" \
- "\377\1\376\376\376\216\377\377\377\1kkm\203::<\1;;=\202::<\1;;=\233:" \
- ":<\5""99;;;=::<:::\234\234\234\240\377\377\377\2\316\316\316;;=\204:" \
- ":<\2;;=kkm\221\377\377\377\1\234\234\236\203::<\1;;=\202::<\3kkk\377" \
- "\377\377\376\376\376\224\377\377\377\1\234\234\234\206::<\1\234\234\234" \
- "\243\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236" \
- "\231\377\377\377\207::<\1\316\316\316\255\377\377\377\2\221\221\221;" \
- ";=\205::<\1\204\204\204\203\377\377\377\1\376\376\376\211\377\377\377" \
- "\1\234\234\234\206::<\1\316\316\316\210\377\377\377\3\376\376\376\377" \
- "\377\377``b\202::<\7;;=::<;;=::<;;=\332\332\332\376\376\376\202\377\377" \
- "\377\3\376\376\376\363\363\363GGI\203::<\4;;=::<;;=__a\206\377\377\377" \
- "\1\376\376\376\203\377\377\377\1\316\316\316\206::<\1\234\234\236\213" \
- "\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270\350[\267\350" \
- "\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0=i\3\0>i\0=i" \
- "\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377" \
- "\1\234\234\236\206::<\1\234\234\236\227\377\377\377\1\204\204\206\204" \
- "::<\3;;=::<kkk\217\377\377\377\5\376\376\376\377\377\377\376\376\376" \
- "\333\333\333:::\202::<\1;;=\202::<\2FFH\363\363\363\226\377\377\377\1" \
- "kkm\204::<\1;;=\202::<\1;;=\234::<\4;;=::<\234\234\234\376\376\376\237" \
- "\377\377\377\1kkm\206::<\1\316\316\316\221\377\377\377\2\363\363\363" \
- "GGG\204::<\3;;=::<\315\315\315\225\377\377\377\1\234\234\234\206::<\1" \
- "\234\234\234\237\377\377\377\1\376\376\376\203\377\377\377\1kkm\206:" \
- ":<\237\377\377\377\1kkm\206::<\1\234\234\236\230\377\377\377\2\376\376" \
- "\376;;=\203::<\1;;=\202::<\1\363\363\363\252\377\377\377\6\376\376\376" \
- "\377\377\377\376\376\376\234\234\23699;;;=\204::<\1kkm\215\377\377\377" \
- "\1\234\234\234\206::<\1\316\316\316\210\377\377\377\7\377\377\375\377" \
- "\377\377\332\332\332::<;;=::<;;=\203::<\2``b\376\376\376\202\377\377" \
- "\377\2\376\376\376xxz\206::<\2:::\332\332\332\212\377\377\377\1\316\316" \
- "\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211" \
- "[\267\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317\331" \
- "\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316" \
- "\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\227\377" \
- "\377\377\1\315\315\315\205::<\3;;=::<\332\332\334\221\377\377\377\1\204" \
- "\204\206\205::<\2;;=\205\205\205\227\377\377\377\1kkm\203::<\3;;=::<" \
- ";;=\234::<\1:9>\203::<\1\234\234\236\237\377\377\377\1\331\331\331\202" \
- ";;=\204::<\1SSU\217\377\377\377\5\376\376\376\377\377\377\376\376\376" \
- "\377\377\377\204\204\204\204::<\3;;=99;yyy\203\377\377\377\1\376\376" \
- "\376\221\377\377\377\1\234\234\234\206::<\1\234\234\234\235\377\377\377" \
- "\1\376\376\376\205\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206:" \
- ":<\1\234\234\236\231\377\377\377\203::<\1;;=\203::<\202\377\377\377\1" \
- "\376\376\376\253\377\377\377\2\233\233\235;;=\205::<\3kkm\377\377\377" \
- "\376\376\376\202\377\377\377\1\376\376\376\210\377\377\377\1\234\234" \
- "\234\206::<\1\316\316\316\213\377\377\377\1\234\234\236\202;;=\1""99" \
- ";\203::<\5;;=\235\235\235\377\377\377\376\376\376\302\302\302\207::<" \
- "\1\251\251\251\213\377\377\377\1\316\316\316\206::<\1\234\234\236\213" \
- "\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270\350[\267\350" \
- "\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0=i\3\0>i\0=i" \
- "\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377" \
- "\1\234\234\236\206::<\1\234\234\236\223\377\377\377\1\376\376\376\204" \
- "\377\377\377\1^^`\202::<\202;;=\3::<<<>\204\204\206\213\377\377\377\1" \
- "\376\376\376\204\377\377\377\1\363\363\363\205::<\3;;=::<\346\346\346" \
- "\227\377\377\377\1kkm\204::<\3;;=::<;;=\234::<\1;;=\202::<\1\234\234" \
- "\236\237\377\377\377\4\204\204\20499;::<;;=\203::<\3\266\266\270\377" \
- "\377\377\376\376\376\221\377\377\377\5\346\346\346;;=::<;;=::<\202;;" \
- "=\4::<\346\346\350\377\377\377\376\376\376\202\377\377\377\1\376\376" \
- "\376\217\377\377\377\1\234\234\234\206::<\1\234\234\234\237\377\377\377" \
- "\202\376\376\376\202\377\377\377\1kkm\206::<\237\377\377\377\1kkm\206" \
- "::<\1\234\234\236\224\377\377\377\6\376\376\376\377\377\377\376\376\376" \
- "\377\377\377\376\376\376;;=\206::<\1\331\331\331\255\377\377\377\1\234" \
- "\234\236\202::<\1;;=\203::<\2kkm\376\376\376\202\377\377\377\1\376\376" \
- "\376\211\377\377\377\1\234\234\234\206::<\1\316\316\316\212\377\377\377" \
- "\3\376\376\376\377\377\377___\204::<\7;;=99;::<\332\332\332\363\363\365" \
- "FFH;;=\204::<\3;;=kkm\376\376\376\213\377\377\377\1\316\316\316\206:" \
- ":<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350" \
- "\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0" \
- ">i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::" \
- "<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\224\377\377" \
- "\377\1\376\376\376\203\377\377\377\4\265\265\267::<;;=::<\202;;=\3::" \
- "<FFH\363\363\363\213\377\377\377\1\376\376\376\203\377\377\377\2\251" \
- "\251\251;;=\205::<\1lln\202\377\377\377\1\376\376\376\225\377\377\377" \
- "\1kkm\202::<\2;;=99;\204::<\1;;=\234::<\2;;=\234\234\234\235\377\377" \
- "\377\5\376\376\376\345\345\345;;=::<;;=\202::<\2;;=FFH\215\377\377\377" \
- "\3\376\376\376\377\377\377\376\376\376\205\377\377\377\10xxz;;=::<;;" \
- "=99;;;=::<\204\204\206\202\377\377\377\1\376\376\376\221\377\377\377" \
- "\1\234\234\234\206::<\1\234\234\234\234\377\377\377\1\376\376\376\204" \
- "\377\377\377\3\376\376\376\377\377\377kkm\206::<\237\377\377\377\1kk" \
- "m\206::<\1\234\234\236\231\377\377\377\202::<\1;;=\204::<\1\316\316\316" \
- "\253\377\377\377\3\376\376\376\377\377\377\220\220\222\202;;=\2::<;;" \
- "=\202::<\1\222\222\224\215\377\377\377\1\234\234\234\206::<\1\316\316" \
- "\316\213\377\377\377\3\376\376\376\332\332\332GGI\204::<\10;;=::<__a" \
- "xxz::<;;=::<;;=\202::<\2FFH\346\346\346\214\377\377\377\1\316\316\316" \
- "\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267" \
- "\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0" \
- "=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206" \
- "::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\231\377\377" \
- "\377\10FFH::<;;=99;;;=::<;;=\265\265\265\216\377\377\377\4\376\376\376" \
- "TTV99;;;=\202::<\202;;=\1\301\301\301\230\377\377\377\1kkm\202::<\1;" \
- ";=\204::<\3;;=::<;;=\232::<\5;;=::<\234\234\234\377\377\377\376\376\376" \
- "\232\377\377\377\3\376\376\376\377\377\377\221\221\221\202::<\1""99;" \
- "\203::<\5\234\234\236\377\377\377\376\376\376\377\377\377\376\376\376" \
- "\216\377\377\377\1\376\376\376\202\377\377\377\2\316\316\320::<\202;" \
- ";=\204::<\2\363\363\363\376\376\376\202\377\377\377\1\376\376\376\217" \
- "\377\377\377\1\234\234\234\206::<\1\234\234\234\243\377\377\377\1kkm" \
- "\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\224\377\377\377\1\376" \
- "\376\376\204\377\377\377\1""99;\202::<\1;;=\203::<\1\316\316\316\252" \
- "\377\377\377\10\376\376\376\377\377\377\376\376\376kkm;;=::<;;=99;\202" \
- "::<\1\234\234\236\215\377\377\377\1\234\234\234\206::<\1\316\316\316" \
- "\215\377\377\377\5\247\247\247;;=99;::<;;=\210::<\5""99;::<\250\250\252" \
- "\377\377\377\376\376\376\213\377\377\377\1\316\316\316\206::<\1\234\234" \
- "\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270\350[" \
- "\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0=i\3" \
- "\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377" \
- "\377\377\1\234\234\236\206::<\1\234\234\236\223\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\203\377\377\377\1\234\234\236\202::<\1;" \
- ";=\202::<\2""99;SSU\214\377\377\377\5\376\376\376\377\377\377\301\301" \
- "\301;;=<<>\202::<\3;;=::<SSU\202\377\377\377\1\376\376\376\226\377\377" \
- "\377\1kkm\203::<\1;;=\202::<\1\204\204\206\202\234\234\234\1\235\235" \
- "\235\232\234\234\236\202\234\234\234\1\315\315\315\233\377\377\377\6" \
- "\376\376\376\377\377\377\362\362\362HHJ99;;;=\204::<\2\364\364\364\376" \
- "\376\376\220\377\377\377\1\376\376\376\204\377\377\377\1kkm\206::<\1" \
- "\234\234\234\223\377\377\377\1\234\234\234\206::<\1\234\234\234\242\377" \
- "\377\377\2\376\376\376lln\206::<\237\377\377\377\1kkm\206::<\1\234\234" \
- "\236\231\377\377\377\2TTV99;\202::<\5;;=::<;;=\250\250\250\376\376\376" \
- "\254\377\377\377\1``b\203::<\202;;=\3::<\235\235\237\376\376\376\202" \
- "\377\377\377\1\376\376\376\211\377\377\377\1\234\234\234\206::<\1\316" \
- "\316\316\216\377\377\377\2kkm;;=\203::<\5;;=::<;;=99;;;=\202::<\2;;=" \
- "jjl\216\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377" \
- "\2\255\333\363Y\270\350\211[\267\350\3Y\270\350[\267\350\326\354\371" \
- "\242\377\377\377\3\276\317\331\0=i\0>i\210\0=i\3\0>i\0=i\177\236\263" \
- "\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234" \
- "\236\206::<\1\234\234\236\224\377\377\377\1\376\376\376\204\377\377\377" \
- "\2\346\346\34699;\202::<\2;;=::<\202;;=\1\315\315\315\212\377\377\377" \
- "\1\376\376\376\202\377\377\377\1yy{\203::<\4;;=99;;;=\250\250\250\202" \
- "\377\377\377\1\376\376\376\226\377\377\377\1kkm\206::<\1\317\317\317" \
- "\240\377\377\377\1\376\376\376\234\377\377\377\1\234\234\234\202::<\2" \
- "99;;;=\202::<\1\204\204\206\203\377\377\377\1\376\376\376\220\377\377" \
- "\377\1\376\376\376\202\377\377\377\2\264\264\264::<\202;;=\203::<\3G" \
- "GI\364\364\364\376\376\376\202\377\377\377\1\376\376\376\216\377\377" \
- "\377\1\234\234\234\206::<\1\234\234\234\241\377\377\377\3\376\376\376" \
- "\377\377\377kkm\206::<\237\377\377\377\1kkm\206::<\1\234\234\236\225" \
- "\377\377\377\202\376\376\376\202\377\377\377\12kkm::<;;=99;::<;;=::<" \
- "\204\204\204\377\377\377\376\376\376\251\377\377\377\4\376\376\376\377" \
- "\377\377::<99;\202;;=\203::<\1\316\316\320\215\377\377\377\1\234\234" \
- "\234\206::<\1\316\316\316\216\377\377\377\5\346\346\350GGI;;=::<;;=\202" \
- "::<\2""99;;;=\202::<\3;;=GGI\346\346\350\216\377\377\377\1\316\316\316" \
- "\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267" \
- "\350\3Y\270\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0" \
- "=i\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206" \
- "::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\231\377\377" \
- "\377\2\376\376\376\205\205\205\202::<\5""99;;;=::<;;=\205\205\207\213" \
- "\377\377\377\12\376\376\376\346\346\346::<;;=99;::<99;;;=FFH\363\363" \
- "\363\231\377\377\377\1kkm\202::<\2;;=::<\202;;=\3\316\316\316\377\377" \
- "\377\376\376\376\234\377\377\377\1\376\376\376\236\377\377\377\1SSS\204" \
- "::<\3;;=99;\347\347\351\204\377\377\377\1\376\376\376\215\377\377\377" \
- "\1\376\376\376\205\377\377\377\1SSU\203::<\4;;=99;::<\265\265\265\202" \
- "\377\377\377\1\376\376\376\217\377\377\377\1\234\234\234\206::<\1\234" \
- "\234\234\242\377\377\377\2\376\376\376SSU\206::<\237\377\377\377\1kk" \
- "m\206::<\1\234\234\236\231\377\377\377\4\221\221\223;;=::<;;=\202::<" \
- "\3;;=___\376\376\376\253\377\377\377\1\332\332\332\204::<\1;;=\202::" \
- "<\1\346\346\350\203\377\377\377\1\376\376\376\211\377\377\377\1\234\234" \
- "\234\206::<\1\316\316\316\217\377\377\377\1\250\250\252\204::<\202;;" \
- "=\2::<;;=\202::<\1\265\265\267\217\377\377\377\1\316\316\316\206::<\1" \
- "\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\3Y\270" \
- "\350[\267\350\326\354\371\242\377\377\377\3\276\317\331\0=i\0>i\210\0" \
- "=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240" \
- "\377\377\377\1\234\234\236\206::<\1\234\234\236\232\377\377\377\1\316" \
- "\316\316\203::<\2""99;<<>\202::<\1\346\346\350\213\377\377\377\4\221" \
- "\221\223;;=::<;;=\203::<\1\204\204\206\232\377\377\377\1kkm\203::<\1" \
- ";;=\202::<\1\316\316\316\274\377\377\377\2\265\265\267;;=\205::<\1xx" \
- "x\231\377\377\377\1\250\250\250\206::<\1TTV\222\377\377\377\1\234\234" \
- "\234\204::<\3;;=::<\235\235\235\203\377\377\377\1\376\376\376\237\377" \
- "\377\377\202;;=\203::<\3;;=::<\376\376\376\236\377\377\377\1kkm\206:" \
- ":<\1\234\234\236\225\377\377\377\1\376\376\376\203\377\377\377\1\265" \
- "\265\267\204::<\1;;=\202::<\1\363\363\363\253\377\377\377\1\250\250\250" \
- "\204::<\3;;=::<GGI\216\377\377\377\1\234\234\234\206::<\1\316\316\316" \
- "\220\377\377\377\4kkm;;=::<;;=\204::<\3;;=xxx\376\376\376\217\377\377" \
- "\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363" \
- "Y\270\350\212[\267\350\2X\266\351\326\356\370\202\377\377\377\3\377\377" \
- "\375\377\377\377\376\377\375\234\377\377\377\4\377\377\375\276\317\327" \
- "\0\77j\1>j\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316" \
- "\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\233\377" \
- "\377\377\1``b\205::<\2;;=\235\235\237\210\377\377\377\1\376\376\376\202" \
- "\377\377\377\2FFH;;=\205::<\1\346\346\346\202\377\377\377\1\376\376\376" \
- "\227\377\377\377\1kkm\206::<\1\316\316\316\266\377\377\377\1\376\376" \
- "\376\205\377\377\377\5__a::<;;=::<;;=\202::<\1SSU\202kkm\1lln\203kkm" \
- "\1lln\222kkm\4__a;;=99;;;=\204::<\3\301\301\301\377\377\377\376\376\376" \
- "\215\377\377\377\202\376\376\376\1\235\235\235\204::<\3""99;;;=\221\221" \
- "\221\243\377\377\377\203::<\1;;=\202::<\1""99;\237\377\377\377\1kkm\206" \
- "::<\1\234\234\236\231\377\377\377\1\332\332\332\202::<\3;;=::<99;\202" \
- ";;=\1\264\264\264\210\377\377\377\1\376\376\376\232\377\377\377\1\376" \
- "\376\376\206\377\377\377\2\376\376\376xxx\202::<\1;;=\203::<\1xxz\216" \
- "\377\377\377\1\234\234\234\206::<\1\316\316\316\220\377\377\377\3\363" \
- "\363\365FFH;;=\202::<\1;;=\202::<\2FFH\363\363\363\220\377\377\377\1" \
- "\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270" \
- "\350\211[\267\350\10X\267\347Y\267\352\326\354\371\377\377\377\376\376" \
- "\376\377\376\377\377\377\377\377\376\377\234\377\377\377\2\376\376\374" \
- "\277\320\330\212\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \
- "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\233" \
- "\377\377\377\1\265\265\267\203::<\4""99;;;=::<SSU\207\377\377\377\6\376" \
- "\376\376\377\377\377\376\376\376\265\265\265;;=99;\202;;=\4""99;;;=k" \
- "km\377\377\377\202\376\376\376\230\377\377\377\1kkm\206::<\1\316\316" \
- "\316\267\377\377\377\1\376\376\376\203\377\377\377\7\316\316\320<<>9" \
- "9;::<;;=::<99;\203::<\2;;=99;\202::<\1;;=\224::<\1;;=\202::<\1;;=\203" \
- "::<\1kkm\203\377\377\377\1\376\376\376\215\377\377\377\1\300\300\300" \
- "\202::<\11;;=::<99;;;=jjl\377\377\377\376\376\376\377\377\377\376\376" \
- "\376\236\377\377\377\1\346\346\350\206::<\1__a\237\377\377\377\1kkm\206" \
- "::<\1\234\234\236\231\377\377\377\2\376\376\376SSU\206::<\2yy{\376\376" \
- "\376\206\377\377\377\1\376\376\376\234\377\377\377\1\376\376\376\205" \
- "\377\377\377\4\363\363\363::<<<>99;\202::<\3;;=::<\265\265\267\203\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\210\377\377\377\1\234" \
- "\234\234\206::<\1\316\316\316\221\377\377\377\4\301\301\30199;::<;;=" \
- "\202::<\6;;=\301\301\301\377\377\377\376\376\376\377\377\377\376\376" \
- "\376\215\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377" \
- "\2\255\333\363Y\270\350\211[\267\350\6Y\270\350Y\267\352\325\353\370" \
- "\377\377\377\376\377\375\377\375\377\234\377\377\377\5\376\376\376\377" \
- "\377\377\377\377\375\276\317\327\2\77k\211\0=i\3\0>i\0=i\177\236\263" \
- "\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234" \
- "\236\206::<\1\234\234\236\234\377\377\377\1GGI\203::<\1;;=\202::<\2\301" \
- "\301\301\376\376\376\204\377\377\377\1\376\376\376\203\377\377\377\3" \
- "lln::<;;=\202::<\202;;=\4\301\301\303\376\376\376\377\377\377\376\376" \
- "\376\230\377\377\377\1kkm\206::<\1\316\316\316\265\377\377\377\1\376" \
- "\376\376\205\377\377\377\3kkm::<;;=\202::<\2""99;<<>\202::<\3;;=::<;" \
- ";=\202::<\1;;=\222::<\4""99;;;=::<;;=\203::<\1;;=\202::<\3\316\316\316" \
- "\377\377\377\376\376\376\215\377\377\377\3\376\376\376\316\316\316;;" \
- "=\203::<\3;;=::<FFH\234\377\377\377\202\376\376\376\202\377\377\377\3" \
- "\376\376\376\377\377\377\316\316\320\203::<\4;;=::<;;=kkm\237\377\377" \
- "\377\1kkm\206::<\1\234\234\236\226\377\377\377\7\376\376\376\377\377" \
- "\377\376\376\376\377\377\377\204\204\204::<;;=\204::<\2;;=\346\346\346" \
- "\241\377\377\377\1\376\376\376\202\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\202\377\377\377\1\250\250\250\202::<\1<<>\204::<\3\346" \
- "\346\346\377\377\377\376\376\376\202\377\377\377\1\376\376\376\211\377" \
- "\377\377\1\234\234\234\206::<\1\316\316\316\220\377\377\377\14\376\376" \
- "\376\377\377\377yy{::<99;;;=::<xxz\377\377\377\376\376\376\377\377\377" \
- "\376\376\376\203\377\377\377\1\376\376\376\212\377\377\377\1\316\316" \
- "\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211" \
- "[\267\350\10X\267\347Z\266\351\326\356\370\376\377\377\377\377\375\377" \
- "\377\377\377\376\377\376\377\377\234\377\377\377\4\376\376\374\277\320" \
- "\330\0=i\1>j\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \
- "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\234" \
- "\377\377\377\1\234\234\234\206::<\3jjj\377\377\377\376\376\376\204\377" \
- "\377\377\4\376\376\376\377\377\377\332\332\33299;\203::<\3;;=::<SSU\202" \
- "\377\377\377\1\376\376\376\231\377\377\377\1kkm\206::<\1\316\316\316" \
- "\267\377\377\377\5\376\376\376\377\377\377\376\376\376\346\346\350;;" \
- "=\203::<\1;;=\202::<\202;;=\202::<\3""99;::<;;=\222::<\202;;=\3""99;" \
- "::<;;=\202::<\1;;=\203::<\2\204\204\206\376\376\376\217\377\377\377\1" \
- "\363\363\363\203::<\6;;=::<;;=::<\347\347\347\376\376\376\234\377\377" \
- "\377\202\376\376\376\5\377\377\377\376\376\376\234\234\236::<;;=\202" \
- "::<\3;;=::<\234\234\236\237\377\377\377\1kkm\206::<\1\234\234\236\231" \
- "\377\377\377\5\376\376\376\316\316\316;;=99;;;=\204::<\1\222\222\224" \
- "\204\377\377\377\1\376\376\376\235\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\203\377\377\377\5SSU;;=::<99;;;=\202::<\3kkk\377" \
- "\377\377\376\376\376\203\377\377\377\1\376\376\376\211\377\377\377\1" \
- "\234\234\234\206::<\1\316\316\316\222\377\377\377\6\363\363\363GGI::" \
- "<;;=FFH\363\363\363\205\377\377\377\1\376\376\376\214\377\377\377\1\316" \
- "\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350" \
- "\212[\267\350\3Y\267\352\330\354\363\376\377\377\203\377\377\377\1\377" \
- "\377\375\235\377\377\377\3\276\317\331\0=i\1>j\210\0=i\3\0>i\0=i\177" \
- "\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1" \
- "\234\234\236\206::<\1\234\234\236\233\377\377\377\2\376\376\376\347\347" \
- "\347\202::<\2;;=::<\203;;=\1\346\346\346\207\377\377\377\5\204\204\204" \
- "<<>99;::<;;=\202::<\2\251\251\251\376\376\376\205\377\377\377\1\376\376" \
- "\376\225\377\377\377\1kkm\206::<\1\316\316\316\264\377\377\377\1\376" \
- "\376\376\205\377\377\377\3\204\204\206::<;;=\203::<\1;;=\205::<\1;;=" \
- "\225::<\3;;=::<;;=\202::<\1;;=\202::<\1;;=\202::<\1\347\347\347\220\377" \
- "\377\377\2SSU;;=\203::<\3;;=::<\265\265\265\237\377\377\377\7\376\376" \
- "\376\377\377\377lln99;::<;;=99;\202::<\1\265\265\267\237\377\377\377" \
- "\1kkm\206::<\1\234\234\236\225\377\377\377\1\376\376\376\204\377\377" \
- "\377\3\376\376\376SSU;;=\204::<\3;;=FFH\346\346\346\202\377\377\377\1" \
- "\376\376\376\237\377\377\377\1\376\376\376\204\377\377\377\2\265\265" \
- "\267;;=\202::<\1;;=\203::<\1\265\265\265\217\377\377\377\1\234\234\234" \
- "\206::<\1\316\316\316\223\377\377\377\4\301\301\301::<:::\302\302\302" \
- "\223\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2" \
- "\255\333\363Y\270\350\212[\267\350\2Y\270\350\332\354\370\202\377\377" \
- "\377\3\376\376\376\376\377\377\377\376\373\235\377\377\377\1\276\317" \
- "\331\202\0>i\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316" \
- "\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236\235" \
- "\377\377\377\1\204\204\204\206::<\1\221\221\223\206\377\377\377\2\363" \
- "\363\363GGI\202::<\5""99;;;=::<GGI\363\363\363\204\377\377\377\202\376" \
- "\376\376\226\377\377\377\1kkm\206::<\1\316\316\316\266\377\377\377\1" \
- "\376\376\376\202\377\377\377\3\346\346\350::<;;=\204::<\5""99;;;=:::" \
- "99;;;=\203::<\3;;=99;;;=\220::<\5;;=::<;;=::<;;=\202::<\6;;=::<99;;;" \
- "=::<\204\204\206\220\377\377\377\5yy{99;::<99;;;=\202::<\1xxz\236\377" \
- "\377\377\10\376\376\376\377\377\377\363\363\36399;::<;;=99;;;=\202::" \
- "<\2\346\346\350\376\376\376\236\377\377\377\1kkm\206::<\1\234\234\236" \
- "\231\377\377\377\3\376\376\376\377\377\377\233\233\235\202::<\7;;=::" \
- "<;;=99;;;=\204\204\204\376\376\376\245\377\377\377\2\363\363\363SSU\205" \
- "::<\2;;=FFH\205\377\377\377\3\376\376\376\377\377\377\376\376\376\210" \
- "\377\377\377\1\234\234\234\206::<\1\316\316\316\224\377\377\377\3\205" \
- "\205\205\221\221\221\376\376\376\204\377\377\377\202\376\376\376\215" \
- "\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255" \
- "\333\363Y\270\350\212[\267\350\7Y\270\350\321\356\376\377\376\377\377" \
- "\377\377\377\377\375\376\377\375\377\376\377\232\377\377\377\1\377\377" \
- "\375\202\377\377\377\3\275\317\333\0\77k\0>i\210\0=i\3\0>i\0=i\177\236" \
- "\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234" \
- "\234\236\206::<\1\234\234\236\235\377\377\377\1\316\316\316\206::<\1" \
- "FFH\203\377\377\377\1\376\376\376\202\377\377\377\1\250\250\250\203:" \
- ":<\1;;=\202::<\1\204\204\206\203\377\377\377\1\376\376\376\231\377\377" \
- "\377\1kkm\206::<\1\316\316\316\271\377\377\377\1\234\234\236\204::<\4" \
- ";;=::<kkm\234\234\236\202\234\234\234\1\233\233\233\202\234\234\234\3" \
- "\235\235\235\234\234\234\235\235\235\224\234\234\234\202\234\234\236" \
- "\1\204\204\206\206::<\2FFH\363\363\363\217\377\377\377\2\250\250\252" \
- ";;=\206::<\1\364\364\364\237\377\377\377\2\265\265\265;;=\205::<\1TT" \
- "V\240\377\377\377\1kkm\206::<\1\234\234\236\224\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\204\377\377\377\3\364\364\366FFH;;=\203" \
- "::<\4;;=::<:::\316\316\316\245\377\377\377\1\221\221\221\202::<\2;;=" \
- "::<\202;;=\2::<\234\234\236\220\377\377\377\1\234\234\234\206::<\1\316" \
- "\316\316\224\377\377\377\1\376\376\376\225\377\377\377\1\316\316\316" \
- "\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\212[\267" \
- "\350\4[\267\346\265\340\361\377\376\377\376\376\377\202\377\377\375\1" \
- "\374\377\377\230\377\377\377\3\376\376\376\377\377\377\377\377\375\202" \
- "\377\377\377\3\243\265\301\0>j\0>i\210\0=i\3\0>i\0=i\177\236\263\232" \
- "\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236" \
- "\206::<\1\234\234\236\236\377\377\377\2__a;;=\204::<\5;;=\265\265\265" \
- "\376\376\376\377\377\377\376\376\376\202\377\377\377\1SSU\204::<\3;;" \
- "=::<\346\346\350\235\377\377\377\1kkm\206::<\1\316\316\316\270\377\377" \
- "\377\2\363\363\365GGI\205::<\3;;=\333\333\333\376\376\376\237\377\377" \
- "\377\10FFH::<;;=::<;;=99;;;=\233\233\235\217\377\377\377\5\346\346\346" \
- "::<;;=::<;;=\203::<\1\234\234\234\210\377\377\377\1\376\376\376\217\377" \
- "\377\377\1\376\376\376\206\377\377\377\1TTT\205::<\3;;=\221\221\221\376" \
- "\376\376\237\377\377\377\1kkm\206::<\1\234\234\236\234\377\377\377\12" \
- "\233\233\233::<;;=::<;;=::<;;=::<SSU\363\363\363\212\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\221\377\377\377\1\376\376\376\204\377" \
- "\377\377\1\315\315\317\203::<\1;;=\203::<\2FFH\363\363\365\220\377\377" \
- "\377\1\234\234\234\206::<\1\316\316\316\252\377\377\377\1\316\316\316" \
- "\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267" \
- "\350\6Y\270\350[\267\346\227\324\363\377\375\376\377\377\377\376\377" \
- "\375\213\377\377\377\6\376\376\376\377\377\377\373\377\376\377\377\377" \
- "\377\376\377\376\377\377\211\377\377\377\10\377\376\377\374\377\377\377" \
- "\377\375\377\377\377\377\376\377_\207\240\0>l\0\77j\210\0=i\3\0>i\0=" \
- "i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377" \
- "\1\234\234\236\206::<\1\234\234\236\236\377\377\377\1\265\265\265\204" \
- "::<\3;;=::<__a\204\377\377\377\1\317\317\321\206::<\1kkk\236\377\377" \
- "\377\1kkm\206::<\1\316\316\316\267\377\377\377\3\376\376\376\250\250" \
- "\25299;\202;;=\203::<\1kkm\233\377\377\377\1\376\376\376\205\377\377" \
- "\377\10\234\234\236;;=::<;;=::<;;=99;GGI\204\377\377\377\3\376\376\376" \
- "\377\377\377\376\376\376\210\377\377\377\5\376\376\376__a::<;;=99;\203" \
- ";;=\2FFH\363\363\363\204\377\377\377\3\376\376\376\377\377\377\376\376" \
- "\376\224\377\377\377\5\376\376\376\377\377\377\301\301\301:::;;=\202" \
- "::<\202;;=\4::<\332\332\332\377\377\377\376\376\376\236\377\377\377\1" \
- "kkm\206::<\1\234\234\236\233\377\377\377\3\376\376\376\364\364\364FF" \
- "H\205::<\4;;=99;xxx\376\376\376\203\377\377\377\1\376\376\376\203\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\224\377\377\377" \
- "\4\376\376\376\377\377\377\362\362\362GGI\202::<\6;;=::<;;=::<99;\250" \
- "\250\252\221\377\377\377\1\234\234\234\206::<\1\316\316\316\252\377\377" \
- "\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363" \
- "Y\270\350\211[\267\350\7Y\267\352X\267\347[\266\353\301\344\367\377\377" \
- "\377\376\376\376\376\377\377\211\377\377\377\6\377\376\377\377\377\377" \
- "\377\375\376\377\377\377\377\377\375\377\376\377\202\377\377\377\210" \
- "\377\376\377\10\377\377\375\376\377\377\377\377\377\376\377\375\237\266" \
- "\306\0=i\2=g\0>e\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316" \
- "\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234\236" \
- "\237\377\377\377\1EEG\202::<\202;;=\11""99;;;=\332\332\332\377\377\377" \
- "\376\376\376\377\377\377xxz::<;;=\204::<\1\302\302\302\236\377\377\377" \
- "\1kkm\206::<\1\316\316\316\266\377\377\377\4\376\376\376\377\377\377" \
- "SSU;;=\202::<\1;;=\202::<\1\316\316\320\235\377\377\377\15\376\376\376" \
- "\377\377\377\376\376\376\377\377\377\363\363\365::<;;=99;;;=::<;;=::" \
- "<\265\265\265\215\377\377\377\3\376\376\376\377\377\377\266\266\270\202" \
- "::<\1;;=\203::<\2;;=\204\204\206\205\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\213\377\377\377\1\376\376\376\205\377\377\377\1\376" \
- "\376\376\202\377\377\377\2\363\363\363SSU\203::<\4;;=99;;;=SSU\241\377" \
- "\377\377\1kkm\206::<\1\234\234\236\235\377\377\377\3\265\265\265;;=9" \
- "9;\202::<\1;;=\203::<\1\204\204\206\206\377\377\377\1\376\376\376\216" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\206\377\377\377\6" \
- "\376\376\376\377\377\377\362\362\364``b::<;;=\202::<\1;;=\202::<\2aa" \
- "c\376\376\376\221\377\377\377\1\234\234\234\206::<\1\316\316\316\252" \
- "\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255" \
- "\333\363Y\270\350\211[\267\350\10X\267\347[\267\346[\265\347[\267\346" \
- "\230\320\361\327\360\367\325\356\365\331\355\370\210\326\354\371\10\325" \
- "\355\367\323\355\372\366\373\377\377\376\374\376\377\375\276\320\332" \
- "\277\320\330\301\317\330\210\276\317\331\10\276\317\327\276\320\334\301" \
- "\316\327_\207\241\0>i\0=l\0\77k\0>i\210\0=i\3\0>i\0=i\177\236\263\232" \
- "\377\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236" \
- "\206::<\1\234\234\236\237\377\377\377\3\222\222\224::<;;=\202::<\3;;" \
- "=99;\205\205\207\202\377\377\377\2\346\346\346;;=\202::<\1;;=\202::<" \
- "\1SSU\237\377\377\377\1kkm\206::<\1\316\316\316\267\377\377\377\5\265" \
- "\265\26799;;;=::<;;=\202::<\1TTV\243\377\377\377\1\204\204\206\205::" \
- "<\2;;=SSU\206\377\377\377\1\376\376\376\210\377\377\377\3\376\376\376" \
- "GGI;;=\202::<\5;;=::<;;=::<\301\301\303\203\377\377\377\1\376\376\376" \
- "\214\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\204\377\377\377\3\204\204\206;;=::<\202;;=\203" \
- "::<\1\265\265\265\241\377\377\377\1kkm\206::<\1\234\234\236\236\377\377" \
- "\377\12kkk::<99;;;=::<99;;;=::<;;=\204\204\206\210\377\377\377\202\376" \
- "\376\376\213\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376" \
- "\202\377\377\377\1\376\376\376\202\377\377\377\2\364\364\366__a\206:" \
- ":<\3;;=::<\332\332\332\222\377\377\377\1\234\234\234\206::<\1\316\316" \
- "\316\252\377\377\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377" \
- "\2\255\333\363Y\270\350\211[\267\350\3\\\266\350X\270\352\\\266\352\202" \
- "[\267\350\3X\267\347Y\270\350Z\266\347\210Y\270\350\10[\267\350[\265" \
- "\351\327\355\372\376\377\377\377\377\375\0>j\0>i\1\77h\210\0>i\10\0\77" \
- "k\0>g\2=g\0=i\0\77j\0<h\0\77h\1>j\210\0=i\3\0>i\0=i\177\236\263\232\377" \
- "\377\377\1\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206" \
- "::<\1\234\234\236\236\377\377\377\2\376\376\376\346\346\346\202::<\10" \
- ";;=::<99;;;=::<\363\363\363\377\377\377\234\234\236\202::<\6;;=::<;;" \
- "=::<\250\250\250\376\376\376\236\377\377\377\1kkm\206::<\1\316\316\316" \
- "\267\377\377\377\10kkm;;=::<;;=99;::<;;=\264\264\266\236\377\377\377" \
- "\1\376\376\376\204\377\377\377\2\346\346\346;;=\202::<\202;;=\202::<" \
- "\2\316\316\320\376\376\376\203\377\377\377\1\376\376\376\205\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\3\234\234" \
- "\234::<;;=\202::<\6;;=::<;;=GGI\332\332\332\376\376\376\224\377\377\377" \
- "\1\376\376\376\203\377\377\377\2\266\266\266;;=\202::<\6;;=::<;;=::<" \
- "SSU\376\376\376\241\377\377\377\1kkm\206::<\1\234\234\236\236\377\377" \
- "\377\2\363\363\363GGI\203::<\1;;=\203::<\3""99;\204\204\204\363\363\363" \
- "\225\377\377\377\1\376\376\376\204\377\377\377\4\376\376\376\346\346" \
- "\346``b::<\202;;=\3::<99;<<>\202::<\1\250\250\250\223\377\377\377\1\234" \
- "\234\234\206::<\1\316\316\316\252\377\377\377\1\316\316\316\206::<\1" \
- "\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\10Y" \
- "\270\350X\270\353Y\267\352X\266\351X\271\346[\267\350\\\266\353[\267" \
- "\350\210Y\270\350\7X\267\345]\267\351\323\355\372\377\376\377\376\377" \
- "\377\4=h\0>g\211\0=i\10\2=i\0@j\0>i\1>j\0>i\1\77h\0>g\0>j\210\0=i\3\0" \
- ">i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377" \
- "\377\377\1\234\234\236\206::<\1\234\234\236\237\377\377\377\6\376\376" \
- "\376yy{::<;;=::<;;=\202::<\4\251\251\251\376\376\376SSU;;=\203::<\3;" \
- ";=FFH\363\363\363\237\377\377\377\1kkm\206::<\1\316\316\316\264\377\377" \
- "\377\5\376\376\376\377\377\377\315\315\317::<;;=\204::<\2FFH\376\376" \
- "\376\237\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376kkm;" \
- ";=\204::<\6""99;lln\377\377\377\376\376\376\377\377\377\376\376\376\202" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\205\377\377\377\10" \
- "\376\376\376\377\377\377SSU::<99;;;=99;;;=\202::<\2FFF\332\332\332\203" \
- "\377\377\377\1\376\376\376\212\377\377\377\1\376\376\376\210\377\377" \
- "\377\1\265\265\265\206::<\3""99;::<\265\265\265\203\377\377\377\1\376" \
- "\376\376\236\377\377\377\1kkm\206::<\1\234\234\236\233\377\377\377\1" \
- "\376\376\376\203\377\377\377\1\331\331\331\204::<\3""99;;;=99;\202;;" \
- "=\2^^^\332\332\332\202\377\377\377\1\376\376\376\216\377\377\377\1\376" \
- "\376\376\206\377\377\377\5\376\376\376\316\316\316FFH::<;;=\204::<\7" \
- "99;::<\204\204\204\377\377\377\376\376\376\377\377\377\376\376\376\220" \
- "\377\377\377\1\234\234\234\206::<\1\316\316\316\252\377\377\377\1\316" \
- "\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363Y\270\350" \
- "\213[\267\350\6Y\270\350[\266\353[\267\350]\267\351X\266\351X\270\350" \
- "\210[\267\350\10X\266\351Z\266\351\326\354\367\377\376\377\376\377\372" \
- "\0>j\0>i\1>j\210\0=i\10\1\77h\0=h\0>i\1\77h\0>j\0=i\0>i\1>j\210\0=i\3" \
- "\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm\240\377" \
- "\377\377\1\234\234\236\206::<\1\234\234\236\237\377\377\377\2\376\376" \
- "\376\316\316\316\203::<\1;;=\202::<\4SSU\265\265\267;;=99;\202::<\5;" \
- ";=99;\204\204\204\377\377\377\376\376\376\236\377\377\377\1kkm\206::" \
- "<\1\316\316\316\263\377\377\377\1\376\376\376\202\377\377\377\1xxz\202" \
- "::<\1;;=\202::<\3""99;\234\234\236\376\376\376\236\377\377\377\1\375" \
- "\375\375\202\377\377\377\1\376\376\376\202\377\377\377\5\317\317\317" \
- "99;::<;;=::<\202;;=\2::<\332\332\332\210\377\377\377\3\376\376\376\377" \
- "\377\377\376\376\376\204\377\377\377\2\316\316\316;;=\206::<\3;;=::<" \
- "\250\250\252\217\377\377\377\1\376\376\376\204\377\377\377\2\363\363" \
- "\363\222\222\224\202::<\2;;=::<\202;;=\3""99;;;=kkm\205\377\377\377\1" \
- "\376\376\376\235\377\377\377\1kkm\206::<\1\234\234\236\235\377\377\377" \
- "\1\376\376\376\202\377\377\377\2\266\266\26699;\202::<\3;;=::<;;=\202" \
- "::<\3;;=FFH\234\234\234\202\377\377\377\1\376\376\376\223\377\377\377" \
- "\2\364\364\364\204\204\206\202::<\1;;=\202::<\1;;=\202::<\3""99;``b\376" \
- "\376\376\224\377\377\377\1\234\234\234\206::<\1\316\316\316\252\377\377" \
- "\377\1\316\316\316\206::<\1\234\234\236\213\377\377\377\2\255\333\363" \
- "Y\270\350\211[\267\350\10Y\271\353Z\266\347\\\267\344[\267\346X\267\347" \
- "[\267\350X\270\353Z\266\347\210Y\270\350\10Y\267\352\\\267\346\325\355" \
- "\371\377\377\377\376\377\377\0>g\0\77k\0>i\210\0\77j\10\0>i\3>h\0=i\0" \
- "\77i\0=j\0>g\0=j\0=f\210\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1" \
- "\316\316\316\206::<\1kkm\240\377\377\377\1\234\234\236\206::<\1\234\234" \
- "\236\234\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377" \
- "\377\2SSU;;=\202::<\202;;=\3::<SSU::<\202;;=\203::<\1\332\332\332\240" \
- "\377\377\377\1kkm\206::<\1\316\316\316\265\377\377\377\1\346\346\346" \
- "\203::<\1;;=\202::<\2;;=\363\363\365\235\377\377\377\1\376\376\376\210" \
- "\377\377\377\1SSU\202;;=\204::<\1\204\204\204\202\377\377\377\202\376" \
- "\376\376\214\377\377\377\1\221\221\221\205::<\202;;=\4::<;;=kkm\316\316" \
- "\316\221\377\377\377\2\301\301\301SSS\210::<\2FFH\363\363\365\243\377" \
- "\377\377\1kkm\206::<\1\234\234\236\241\377\377\377\1\266\266\270\203" \
- "::<\1;;=\205::<\3:::RRR\265\265\265\222\377\377\377\3\363\363\363\234" \
- "\234\234FFF\202::<\1;;=\206::<\2``b\363\363\363\225\377\377\377\1\234" \
- "\234\234\206::<\1\316\316\316\252\377\377\377\1\316\316\316\206::<\1" \
- "\234\234\236\213\377\377\377\2\255\333\363Y\270\350\211[\267\350\10Z" \
- "\266\347[\267\346Z\265\352X\266\351\\\270\351[\267\346X\267\347[\265" \
- "\347\210[\267\350\10Y\267\352[\266\345\325\355\367\376\375\377\377\377" \
- "\375\3>j\0=i\1>j\210\0>i\10\0\77j\1\77h\0>j\0>g\3>j\0\77i\0=j\0>i\210" \
- "\0=i\3\0>i\0=i\177\236\263\232\377\377\377\1\316\316\316\206::<\1kkm" \
- "\240\377\377\377\1\234\234\236\206::<\1\234\234\236\241\377\377\377\6" \
- "\266\266\270::<;;=::<99;::<\202;;=\205::<\2kkm\376\376\376\240\377\377" \
- "\377\1kkm\206::<\1\316\316\316\265\377\377\377\4\205\205\205;;=::<;;" \
- "=\203::<\3\204\204\206\377\377\377\376\376\376\245\377\377\377\1\265" \
- "\265\267\207::<\2\346\346\346\376\376\376\216\377\377\377\4\376\376\376" \
- "lll::<;;=\202::<\13;;=::<;;=::<;;=::<kkm\264\264\266\363\363\365\377" \
- "\377\377\376\376\376\202\377\377\377\1\376\376\376\206\377\377\377\3" \
- "\346\346\350\250\250\252TTV\204::<\3;;=::<;;=\202::<\2;;=\333\333\333" \
- "\202\377\377\377\1\376\376\376\237\377\377\377\3\376\376\376\377\377" \
- "\377kkm\203::<\1;;=\202::<\1\235\235\237\242\377\377\377\1\265\265\265" \
- "\203::<\1;;=\207::<\4GGI\220\220\222\332\332\334\376\376\376\206\377" \
- "\377\377\1\376\376\376\204\377\377\377\5\376\376\376\302\302\302\204" \
- "\204\206::<;;=\202::<\11""99;;;=::<;;=::<;;=::<```\363\363\363\226\377" \
- "\377\377\1\234\234\234\202::<\1;;=\202::<\2;;=\316\316\316\252\377\377" \
- "\377\4\316\316\316::<;;=99;\203::<\3\234\234\234\377\377\377\376\376" \
- "\376\204\377\377\377\7\373\377\376\377\376\377\377\377\377\376\377\377" \
- "\377\376\377\253\333\362[\265\351\203[\267\352\6Y\267\352[\267\350X\267" \
- "\345Y\270\346Y\270\350Y\267\352\220[\267\350\5X\267\347Y\270\350\325" \
- "\355\371\377\376\377\377\377\377\202\0>g\1\1>k\220\0=i\15\0>g\1>j\0>" \
- "i\0\77j\1>j\0=i\0\77j\0>j\0=i\1<h}\237\270\376\377\377\377\376\374\226" \
- "\377\377\377\3\376\376\376\377\377\377\316\316\316\204::<\3""99;;;=l" \
- "ln\240\377\377\377\5\234\234\234::<;;=::<;;=\202::<\1\235\235\237\241" \
- "\377\377\377\10\363\363\363FFF::<;;=::<;;=::<;;=\203::<\3;;=::<\265\265" \
- "\265\237\377\377\377\3\376\376\376\377\377\377kkm\202::<\1;;=\202::<" \
- "\4;;=\316\316\316\377\377\377\376\376\376\250\377\377\377\1\376\376\376" \
- "\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\203\377" \
- "\377\377\6\364\364\364::<99;;;=::<;;=\202::<\1\347\347\351\203\377\377" \
- "\377\1\376\376\376\244\377\377\377\4FFH;;=::<99;\203::<\1\220\220\222" \
- "\220\377\377\377\2\363\363\363``b\202::<\1;;=\203::<\1;;=\205::<\5__" \
- "_\222\222\222\234\234\234\316\316\316\317\317\317\202\316\316\316\7\301" \
- "\301\301\234\234\236\204\204\206__a;;=99;;;=\203::<\2;;=99;\203;;=\2" \
- "::<\265\265\265\204\377\377\377\1\376\376\376\235\377\377\377\5\376\376" \
- "\376\377\377\377\376\376\376kkm::<\202;;=\6::<;;=::<\234\234\236\377" \
- "\377\377\376\376\376\236\377\377\377\1\376\376\376\202\377\377\377\5" \
- "\301\301\303GGI;;=::<;;=\206::<\7;;=::<99;GGIwwy\235\235\235\300\300" \
- "\300\202\316\316\316\10\315\315\315\317\317\317\315\315\315\265\265\265" \
- "\234\234\234jjj<<>99;\203::<\1;;=\202::<\2""99;;;=\203::<\1\204\204\206" \
- "\206\377\377\377\1\376\376\376\221\377\377\377\10\234\234\234;;=::<9" \
- "9;;;=::<99;\316\316\316\252\377\377\377\4\317\317\317;;=88:;;=\202::" \
- "<\3;;=\234\234\234\376\376\376\205\377\377\377\1\377\375\377\202\377" \
- "\377\375\6\377\376\377\377\377\375\253\333\362Y\270\350X\267\347Z\266" \
- "\347\202Y\270\350\1[\267\350\202Z\266\347\2[\267\350Z\266\347\220[\267" \
- "\350\5[\267\352Z\266\351\327\355\372\377\375\376\377\376\377\202\1>j" \
- "\1\1>k\220\0>i\202\0=i\14\0\77k\0>i\0=i\1>j\0=i\0=j\0\77k\0=i\177\236" \
- "\263\377\377\377\376\377\377\375\376\377\224\377\377\377\1\376\376\376" \
- "\202\377\377\377\1\316\316\316\203::<\202;;=\3""99;kkm\376\376\376\234" \
- "\377\377\377\1\376\376\376\202\377\377\377\1\233\233\233\202::<\7;;=" \
- "::<;;=::<\234\234\236\377\377\377\376\376\376\233\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\202\377\377\377\4\221\221\221;;=99;;;=\202" \
- "::<\202;;=\203::<\1SSU\203\377\377\377\1\376\376\376\233\377\377\377" \
- "\10\376\376\376\377\377\377\376\376\376kkm::<;;=::<;;=\202::<\1;;=\202" \
- "::<\1;;=\240::<\1kkk\207\377\377\377\1\376\376\376\203\377\377\377\3" \
- "\375\375\375\377\377\377\376\376\376\202\377\377\377\2\233\233\235::" \
- "<\202;;=\203::<\1xxz\251\377\377\377\1\235\235\237\202::<\1;;=\203::" \
- "<\3GGI\363\363\363\376\376\376\217\377\377\377\2\363\363\363yyy\204:" \
- ":<\1;;=\203::<\1;;=\206::<\1""99;\203::<\1;;=\203::<\6;;=99;;;=::<;;" \
- "=99;\202;;=\3""99;GGI\301\301\301\206\377\377\377\1\376\376\376\232\377" \
- "\377\377\1\376\376\376\204\377\377\377\1lln\202::<\1;;=\202::<\2;;=\234" \
- "\234\236\241\377\377\377\1\376\376\376\202\377\377\377\2\332\332\334" \
- "__a\211::<\1;;=\205::<\1;;=\202::<\1;;=\202::<\4;;=::<99;;;=\202::<\1" \
- ";;=\202::<\1;;=\203::<\2FFH\265\265\267\206\377\377\377\3\376\376\376" \
- "\377\377\377\376\376\376\220\377\377\377\3\234\234\236::<;;=\203::<\2" \
- ";;=\316\316\316\252\377\377\377\2\315\315\31599;\203::<\5;;=::<\234\234" \
- "\234\377\377\377\376\376\376\205\377\377\377\7\377\377\375\375\377\376" \
- "\377\377\377\375\376\377\255\333\365Z\266\345[\267\350\202Y\270\350\1" \
- "X\267\347\202Y\267\352\3Z\266\351Z\266\347Y\270\350\221[\267\350\2[\267" \
- "\352\323\355\372\202\376\377\377\1\0=j\222\0=i\204\0>i\14\1\77h\0>g\0" \
- "=f\1>j\0\77i\0>i\177\237\266\377\377\375\377\376\375\377\377\377\376" \
- "\377\377\377\376\377\225\377\377\377\2\316\316\316::<\202;;=\202::<\4" \
- ";;=kkm\377\377\377\376\376\376\235\377\377\377\2\376\376\376\235\235" \
- "\235\202::<\1;;=\202::<\2;;=\234\234\236\242\377\377\377\3\346\346\346" \
- "::<;;=\210::<\2\235\235\237\376\376\376\234\377\377\377\1\376\376\376" \
- "\204\377\377\377\1lln\202::<\3;;=::<;;=\203::<\2;;=99;\240::<\1kkk\210" \
- "\377\377\377\11\376\376\376\377\377\377\376\376\376\377\377\377\376\376" \
- "\376\377\377\377\376\376\376\364\364\366GGI\205::<\6;;=\316\316\316\377" \
- "\377\377\376\376\376\377\377\377\376\376\376\245\377\377\377\11\345\345" \
- "\345;;=::<;;=::<;;=::<;;=\234\234\236\222\377\377\377\7\234\234\234;" \
- ";=::<;;=99;;;=99;\203::<\1;;=\202::<\203;;=\2::<;;=\202::<\1;;=\202:" \
- ":<\1;;=\202::<\12;;=::<;;=99;::<``b\332\332\332\376\376\376\377\377\377" \
- "\376\376\376\202\377\377\377\5\376\376\376\377\377\377\376\376\376\377" \
- "\377\377\376\376\376\232\377\377\377\5\376\376\376\377\377\377\376\376" \
- "\376kkm;;=\202::<\1;;=\202::<\1\234\234\236\236\377\377\377\1\376\376" \
- "\376\207\377\377\377\2\234\234\236;;=\202::<\1;;=\204::<\1;;=\211::<" \
- "\1;;=\202::<\1;;=\202::<\1;;=\202::<\1;;=\203::<\3;;=kkm\346\346\346" \
- "\203\377\377\377\1\376\376\376\204\377\377\377\1\376\376\376\221\377" \
- "\377\377\2\234\234\236;;=\202::<\1;;=\202::<\1\316\316\316\252\377\377" \
- "\377\4\316\316\316;;=99;;;=\203::<\1\234\234\234\210\377\377\377\7\376" \
- "\377\377\377\375\376\377\377\375\256\332\363Y\270\350Y\267\352[\267\352" \
- "\202[\267\350\5X\270\350X\270\352Y\267\352Y\270\350X\267\347\220[\267" \
- "\350\5X\267\347[\267\350\325\355\367\377\377\373\377\377\375\202\0\77" \
- "j\1\0>g\220\0>i\1\0\77j\203\0>i\202\0=i\6\1>j\0>i\0\77h\0>g\177\236\263" \
- "\377\377\375\203\377\377\377\1\377\376\377\222\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\316\316\316\203::<\1;;=\202::<\2kkm\376\376\376" \
- "\233\377\377\377\1\376\376\376\203\377\377\377\5\234\234\234::<;;=::" \
- "<;;=\202::<\1\234\234\236\235\377\377\377\202\376\376\376\202\377\377" \
- "\377\5\376\376\376\377\377\377xxz99;;;=\204::<\4;;=::<;;=\362\362\362" \
- "\237\377\377\377\5\376\376\376\377\377\377\376\376\376kkm;;=\207::<\2" \
- "99;;;=\240::<\1lll\205\377\377\377\1\376\376\376\203\377\377\377\1\376" \
- "\376\376\202\377\377\377\1\376\376\376\202\377\377\377\4\265\265\267" \
- ";;=::<;;=\202::<\2;;=__a\205\377\377\377\1\376\376\376\245\377\377\377" \
- "\3\204\204\206::<;;=\204::<\2SSU\376\376\376\215\377\377\377\1\376\376" \
- "\376\204\377\377\377\2\316\316\316__a\206::<\1;;=\214::<\5;;=::<;;=:" \
- ":<;;=\203::<\2\234\234\234\363\363\363\204\377\377\377\1\376\376\376" \
- "\243\377\377\377\1lln\206::<\2\233\233\235\376\376\376\233\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\207\377\377\377\3\345\345" \
- "\345lln;;=\204::<\5;;=99;::<99;;;=\205::<\1;;=\203::<\3""99;;;=99;\206" \
- "::<\2TTV\265\265\265\234\377\377\377\10\234\234\234;;=::<;;=::<;;=::" \
- "<\316\316\316\252\377\377\377\1\315\315\315\206::<\4\235\235\235\376" \
- "\376\376\377\377\377\376\376\376\205\377\377\377\12\377\377\373\377\377" \
- "\377\377\377\375\267\340\366[\270\344Z\266\351[\267\352Z\266\351[\265" \
- "\347[\267\350\202Y\270\350\2\\\270\351Z\266\347\220[\267\350\10X\267" \
- "\347X\266\351\325\355\371\377\376\377\377\377\377\0\77k\0=h\3>j\220\0" \
- "\77j\16\1>j\0=i\1>j\0=i\0\77j\0>i\0=h\0\77j\0\77h\1<f\177\236\263\377" \
- "\377\375\376\376\377\376\377\377\225\377\377\377\202\376\376\376\2\317" \
- "\317\317::<\202;;=\1::<\202;;=\1kkm\235\377\377\377\1\376\376\376\202" \
- "\377\377\377\2\234\234\234;;=\205::<\2\233\233\235\376\376\376\232\377" \
- "\377\377\1\376\376\376\204\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\316\316\316\203::<\1;;=\204::<\3\204\204\206\377\377\377\376\376\376" \
- "\241\377\377\377\1lln\203::<\202;;=\203::<\1;;=\241::<\1kkk\206\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\206\377\377\377\1TTV\203:" \
- ":<\4""99;;;=99;\265\265\267\253\377\377\377\3\331\331\331;;=99;\204:" \
- ":<\2;;=\264\264\264\217\377\377\377\1\376\376\376\204\377\377\377\2\264" \
- "\264\266SSU\202::<\2""99;;;=\203::<\3;;=::<;;=\206::<\5;;=99;;;=::<;" \
- ";=\20299;\6\204\204\206\346\346\346\377\377\377\376\376\376\377\377\377" \
- "\376\376\376\203\377\377\377\202\376\376\376\202\377\377\377\1\376\376" \
- "\376\231\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377" \
- "\377\12lll::<;;=::<99;::<;;=\234\234\236\377\377\377\376\376\376\233" \
- "\377\377\377\1\375\375\375\213\377\377\377\4\316\316\316xxx;;=99;\204" \
- "::<\1;;=\202::<\1;;=\204::<\4;;=::<;;=99;\203::<\1;;=\202::<\2SSS\265" \
- "\265\265\210\377\377\377\3\376\376\376\377\377\377\376\376\376\223\377" \
- "\377\377\1\234\234\234\206::<\1\316\316\316\250\377\377\377\3\376\376" \
- "\376\377\377\377\315\315\315\202::<\7;;=::<;;=::<\234\234\234\377\377" \
- "\377\376\376\376\202\377\377\377\21\376\376\376\377\377\377\376\377\373" \
- "\377\377\377\376\377\377\376\377\375\377\376\377\353\366\374X\266\351" \
- "X\270\350W\267\347X\270\350X\267\347Z\266\347\\\270\347X\267\345Y\270" \
- "\350\221[\267\350\7Z\266\347[\267\350\327\355\372\377\375\377\377\377" \
- "\377\0>g\0\77h\221\0=i\1\0>g\202\1\77h\1\0=i\202\0>i\11\0\77j\0>g\0>" \
- "j\0\77m\336\347\354\376\377\377\377\376\377\376\377\377\377\377\375\222" \
- "\377\377\377\1\376\376\376\203\377\377\377\1\316\316\316\202::<\1;;=" \
- "\203::<\2kkm\376\376\376\233\377\377\377\1\376\376\376\202\377\377\377" \
- "\3\376\376\376\234\234\234;;=\202::<\6""99;::<;;=\234\234\236\377\377" \
- "\377\376\376\376\237\377\377\377\1\376\376\376\202\377\377\377\1SSS\202" \
- ";;=\1""99;\204;;=\3\331\331\331\377\377\377\376\376\376\234\377\377\377" \
- "\3\376\376\376\377\377\377\376\376\376\202\377\377\377\3lll::<;;=\202" \
- "::<\202;;=\203::<\1;;=\240::<\1kkk\204\377\377\377\1\376\376\376\211" \
- "\377\377\377\3\302\302\302;;;999\202::<\3;;=::<TTT\210\377\377\377\1" \
- "\376\376\376\244\377\377\377\2kkk;;=\202::<\203:::\1TTT\226\377\377\377" \
- "\3\301\301\301xxz;;=\202::<\1;;=\202::<\1;;=\202::<\5;;=::<;;=::<;;=" \
- "\202::<\5;;=99;SSU\235\235\237\347\347\351\204\377\377\377\1\376\376" \
- "\376\207\377\377\377\3\376\376\376\377\377\377\376\376\376\235\377\377" \
- "\377\10kkk:::::<999;;;:::;;;\233\233\233\236\377\377\377\1\376\376\376" \
- "\211\377\377\377\1\376\376\376\202\377\377\377\3\346\346\350\251\251" \
- "\253``b\202::<\3;;=::<;;=\202::<\1;;=\205::<\1;;=\203::<\5;;=FFH\204" \
- "\204\204\316\316\316\376\376\376\204\377\377\377\1\376\376\376\232\377" \
- "\377\377\1\234\234\234\202::<\5""99;;;=99;;;;\315\315\315\252\377\377" \
- "\377\3\316\316\316:::;;;\202:::\3;;;::<\234\234\234\206\377\377\377\1" \
- "\377\377\375\203\377\376\377\11\377\377\377\377\377\375\303\344\367W" \
- "\270\345^\266\344X\267\347Y\271\353Z\266\351\\\266\350\202Y\270\350\221" \
- "[\267\352\3[\267\350[\265\347\325\355\371\202\376\377\377\3\2=e\0>g\0" \
- "\77m\220\0=i\6\0\77j\0>i\0=h\0\77j\0=i\0\77j\202\0>g\2\1\77h\240\266" \
- "\304\204\377\377\377\2\376\376\376\377\377\375\223\377\377\377\14\376" \
- "\376\376\377\377\377\315\315\315;;=::<:::;;;:::;;;kkk\377\377\377\376" \
- "\376\376\233\377\377\377\1\376\376\376\202\377\377\377\10\235\235\235" \
- "99;::<999;;;:::;;;\233\233\233\234\377\377\377\1\376\376\376\207\377" \
- "\377\377\1\265\265\265\202::<\1;;=\203::<\1kkk\203\377\377\377\1\376" \
- "\376\376\240\377\377\377\2kkk:::\202::<\3;;=99;;;=\244::<\1kkk\205\377" \
- "\377\377\1\376\376\376\210\377\377\377\1\346\346\346\206\316\316\316" \
- "\3\332\332\332\377\377\377\377\377\375\253\377\377\377\2\346\346\346" \
- "\316\316\316\202\316\316\320\203\316\316\316\1\315\315\315\225\377\377" \
- "\377\202\376\376\376\202\377\377\377\4\316\316\320\234\234\236kkmSSU" \
- "\205::<\1;;=\203::<\5kkm\204\204\206\264\264\266\346\346\350\376\376" \
- "\376\214\377\377\377\1\376\376\376\202\377\377\377\202\376\376\376\231" \
- "\377\377\377\1\376\376\376\203\377\377\377\2\331\331\331\317\317\317" \
- "\205\316\316\316\1\347\347\347\243\377\377\377\1\376\376\376\211\377" \
- "\377\377\5\376\376\377\347\347\351\265\265\267\204\204\206lln\212::<" \
- "\4``bxxz\234\234\236\332\332\332\207\377\377\377\1\376\376\376\210\377" \
- "\377\377\1\376\376\376\222\377\377\377\1\346\346\346\203\316\316\320" \
- "\4\316\316\316\316\316\320\315\315\315\364\364\364\251\377\377\377\2" \
- "\376\376\376\364\364\364\205\316\316\316\2\316\316\320\346\346\346\210" \
- "\377\377\377\16\377\376\377\377\377\375\376\377\377\377\377\377\377\375" \
- "\377\326\354\371\241\326\366\206\310\352\200\312\357\202\312\362\204" \
- "\310\357\204\312\356\203\311\355\205\311\360\220\204\312\356\10\203\311" \
- "\355\201\311\361\342\360\371\376\377\377\377\377\375>n\222Bm\215@n\220" \
- "\220@n\217\3@l\217An\217Bo\220\202An\217\5@m\214Dm\213l\223\260\277\320" \
- "\332\376\377\377\202\377\377\377\1\377\377\375\202\377\377\377\1\376" \
- "\377\377\225\377\377\377\3\363\363\363\317\317\321\316\316\320\204\316" \
- "\316\316\1\332\332\332\240\377\377\377\1\346\346\346\202\316\316\320" \
- "\204\316\316\316\1\347\347\347\243\377\377\377\3\376\376\376\363\363" \
- "\363lln\202kkm\1lln\202kkm\1\301\301\301\240\377\377\377\1\376\376\376" \
- "\203\377\377\377\2\331\331\331\317\317\317\202\316\316\316\202\317\317" \
- "\317\245\316\316\316\2\332\332\332\376\376\376\351\377\377\377\5\332" \
- "\332\332\315\315\315\316\316\316\315\315\315\363\363\363\361\377\377" \
- "\377\202\316\316\316\1\317\317\317\202\316\316\316\2\315\315\315\363" \
- "\363\363\377\377\377\377\377\377\377\377\377\377\377\377\334\377\377" \
- "\377\1\376\376\376\375\377\377\377\1\376\376\376\377\377\377\377\377" \
- "\377\377\377\377\377\377\377\340\377\377\377\1\376\376\376\370\377\377" \
- "\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\342" \
- "\377\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377" \
- "\377\377\377\377\377\334\377\377\377\1\376\376\376\362\377\377\377\1" \
- "\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\346\377" \
- "\377\377\1\376\376\376\363\377\377\377\1\376\376\376\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\342\377\377\377\1\376\376\376\373\377" \
- "\377\377\1\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377" \
- "\340\377\377\377\3\376\376\376\377\377\377\376\376\376\377\377\377\377" \
- "\377\377\377\377\377\377\377\377\377\377\377\377\243\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\203\377\377\377\1\376\376\376\233\377" \
- "\377\377\1\376\376\376\205\377\377\377\1\376\376\376\214\377\377\377" \
- "\1\376\376\376\205\377\377\377\1\376\376\376\260\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\300\377\377\377\1\376\376\376\306\377\377" \
- "\377\1\376\376\376\233\377\377\377\4\376\377\377\376\376\376\377\376" \
- "\377\377\377\377\203\376\377\375\203\377\377\377\3\377\377\375\376\377" \
- "\375\376\377\377\265\377\377\377\4\377\377\375\377\376\377\376\377\377" \
- "\377\377\375\202\377\376\377\210\377\377\377\7\377\377\375\376\377\377" \
- "\377\377\377\375\377\376\376\377\377\377\376\377\376\377\377\211\377" \
- "\377\377\4\376\377\375\377\377\377\376\376\376\377\377\375\202\377\377" \
- "\377\2\377\377\375\376\376\376\220\377\377\377\1\376\377\375\202\377" \
- "\377\375\5\377\376\377\377\377\373\377\377\377\375\377\376\377\377\375" \
- "\210\377\377\377\1\377\376\377\202\377\377\375\202\377\377\377\3\376" \
- "\377\377\377\377\375\377\376\377\213\377\377\377\3\376\377\377\376\377" \
- "\375\377\377\375\203\377\377\377\203\376\377\375\4\377\377\377\377\376" \
- "\377\376\376\376\376\377\377\233\377\377\377\3\376\377\377\376\377\375" \
- "\377\377\375\203\377\377\377\203\376\377\375\4\377\377\377\377\376\377" \
- "\376\376\376\376\377\377\210\377\377\377\1\377\376\377\203\377\377\377" \
- "\4\376\377\377\377\377\375\377\376\377\376\377\373\211\377\377\377\4" \
- "\376\377\377\376\376\374\377\376\377\377\375\376\226\377\377\377\5\376" \
- "\377\377\375\377\374\377\377\375\376\375\377\377\377\375\210\377\377" \
- "\377\1\377\377\375\202\376\377\377\1\377\377\373\242\377\377\377\1\376" \
- "\376\376\212\377\377\377\1\376\376\376\207\377\377\377\1\376\376\376" \
- "\237\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\214\377" \
- "\377\377\1\376\376\376\204\377\377\377\202\376\376\376\257\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\246\377\377\377\1\376\376\376\224\377\377\377\1\376\376\376\250" \
- "\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\236\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\230\377\377\377\4\377\377" \
- "\373\376\377\377\376\376\376\377\376\377\203\377\377\377\1\377\377\375" \
- "\202\377\377\377\1\377\376\377\202\377\377\375\3\377\377\377\377\377" \
- "\375\376\376\374\260\377\377\377\2\377\377\375\376\376\376\203\377\376" \
- "\377\214\377\377\377\7\376\377\377\377\376\377\377\377\375\377\377\377" \
- "\377\376\377\375\377\376\377\377\375\210\377\377\377\7\377\376\374\377" \
- "\377\375\377\376\377\377\377\375\376\376\376\377\377\377\376\376\376" \
- "\221\377\377\377\1\377\376\377\203\377\377\377\202\377\377\375\212\377" \
- "\377\377\2\377\377\375\377\377\377\202\377\377\375\214\377\377\377\3" \
- "\376\376\374\377\377\375\377\377\377\202\377\377\375\1\377\376\377\202" \
- "\377\377\377\1\377\377\375\203\377\377\377\4\377\376\377\376\376\376" \
- "\376\377\377\377\377\373\230\377\377\377\3\376\376\374\377\377\375\377" \
- "\377\377\202\377\377\375\1\377\376\377\202\377\377\377\1\377\377\375" \
- "\203\377\377\377\4\377\376\377\376\376\376\376\377\377\377\377\373\213" \
- "\377\377\377\1\377\376\374\214\377\377\377\2\377\377\375\377\376\377" \
- "\202\377\377\375\3\376\377\377\377\377\377\377\377\373\221\377\377\377" \
- "\3\376\377\375\376\377\377\377\376\377\204\377\377\377\1\377\377\375" \
- "\212\377\377\377\5\377\376\377\377\377\375\377\377\377\376\377\375\376" \
- "\377\373\243\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376" \
- "\204\377\377\377\1\376\376\376\242\377\377\377\1\376\376\376\205\377" \
- "\377\377\1\376\376\376\213\377\377\377\1\376\376\376\206\377\377\377" \
- "\1\376\376\376\263\377\377\377\3\376\376\376\377\377\377\376\376\376" \
- "\270\377\377\377\1\376\376\376\312\377\377\377\1\376\376\376\234\377" \
- "\377\377\1\377\377\375\202\376\377\377\7\377\376\377\377\377\377\376" \
- "\377\377\377\376\377\377\377\375\377\377\377\376\377\377\202\377\376" \
- "\377\2\376\377\375\376\377\377\262\377\377\377\10\377\377\375\376\377" \
- "\377\377\376\377\377\377\373\377\377\377\377\376\377\376\377\375\377" \
- "\377\375\211\377\377\377\3\376\377\377\377\376\377\377\377\375\202\377" \
- "\377\377\2\376\377\377\376\376\376\210\377\377\377\202\377\376\377\4" \
- "\374\377\377\376\377\377\377\376\377\377\377\375\222\377\377\377\4\377" \
- "\376\375\376\377\377\377\377\377\376\377\377\202\377\376\377\202\377" \
- "\377\375\210\377\377\377\4\377\377\375\377\377\377\377\377\375\377\377" \
- "\377\202\377\376\377\2\377\377\377\376\377\377\212\377\377\377\2\376" \
- "\377\377\376\377\375\202\377\376\377\7\376\377\377\377\377\377\377\377" \
- "\375\377\376\377\376\377\377\377\377\377\377\376\377\202\376\377\377" \
- "\1\377\377\375\232\377\377\377\2\376\377\377\376\377\375\202\377\376" \
- "\377\7\376\377\377\377\377\377\377\377\375\377\376\377\376\377\377\377" \
- "\377\377\377\376\377\202\376\377\377\1\377\377\375\210\377\377\377\1" \
- "\377\377\375\202\377\377\377\4\377\377\375\377\376\377\377\377\377\376" \
- "\377\377\211\377\377\377\7\375\376\377\377\377\375\377\376\377\376\376" \
- "\377\376\377\375\375\377\376\377\377\375\222\377\377\377\6\376\377\377" \
- "\377\376\377\377\377\377\377\377\375\377\376\377\376\377\377\213\377" \
- "\377\377\202\377\376\377\3\377\377\375\376\377\377\376\377\375\236\377" \
- "\377\377\1\376\376\376\203\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\376\376\376\203\377\377\377\2\376\376\376\377\377\377\202\376\376" \
- "\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\204" \
- "\377\377\377\1\376\376\376\235\377\377\377\1\376\376\376\217\377\377" \
- "\377\1\376\376\376\206\377\377\377\1\376\376\376\260\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\241\377\377\377\202\376\376\376\204" \
- "\377\377\377\1\376\376\376\222\377\377\377\1\376\376\376\205\377\377" \
- "\377\1\376\376\376\246\377\377\377\1\376\376\376\233\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\234\377\377\377\15\376\376\376\377\377" \
- "\377\377\376\377\377\377\375\375\377\376\377\377\377\376\377\375\377" \
- "\377\377\375\376\377\377\377\377\377\377\375\376\377\377\377\377\377" \
- "\202\377\376\377\260\377\377\377\7\377\376\377\376\377\377\377\377\377" \
- "\376\377\377\377\377\377\377\377\375\376\377\377\212\377\377\377\1\376" \
- "\376\374\203\377\377\377\3\376\376\377\377\377\375\376\377\377\210\377" \
- "\377\377\10\376\377\377\377\376\377\374\377\373\376\377\373\377\376\377" \
- "\376\376\376\377\377\377\376\377\375\220\377\377\377\2\377\376\377\377" \
- "\377\377\202\377\377\375\202\377\377\377\2\376\376\374\376\377\377\210" \
- "\377\377\377\1\376\377\377\202\377\377\377\5\376\377\377\377\377\377" \
- "\376\376\376\377\377\377\376\377\375\210\377\377\377\202\377\376\377" \
- "\15\377\377\377\376\377\377\377\377\375\377\377\377\375\376\377\377\377" \
- "\377\376\377\375\377\377\377\375\377\376\377\377\375\377\376\377\377" \
- "\377\377\376\376\376\231\377\377\377\202\377\376\377\15\377\377\377\376" \
- "\377\377\377\377\375\377\377\377\375\376\377\377\377\377\376\377\375" \
- "\377\377\377\375\377\376\377\377\375\377\376\377\377\377\377\376\376" \
- "\376\211\377\377\377\4\377\376\377\377\377\377\376\377\375\376\377\377" \
- "\202\377\377\377\2\376\377\377\376\377\375\210\377\377\377\1\376\377" \
- "\375\202\376\376\376\202\377\377\377\2\377\377\375\375\376\377\221\377" \
- "\377\377\10\377\377\375\377\377\377\376\376\374\376\377\373\376\376\376" \
- "\377\376\377\376\377\377\377\377\375\210\377\377\377\6\376\376\376\377" \
- "\377\377\377\377\375\377\377\377\374\375\377\377\377\375\242\377\377" \
- "\377\1\376\376\376\214\377\377\377\1\376\376\376\204\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\235\377\377\377\1\376\376\376\203\377" \
- "\377\377\202\376\376\376\212\377\377\377\1\376\376\376\202\377\377\377" \
- "\202\376\376\376\264\377\377\377\5\376\376\376\377\377\377\376\376\376" \
- "\377\377\377\376\376\376\242\377\377\377\3\376\376\376\377\377\377\376" \
- "\376\376\202\377\377\377\1\376\376\376\223\377\377\377\1\376\376\376" \
- "\244\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\233\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\234\377\377\377" \
- "\1\375\377\372\202\377\377\377\3\376\376\376\377\377\375\377\377\377" \
- "\202\376\377\377\204\377\377\377\4\376\377\377\377\377\377\377\376\377" \
- "\375\377\372\260\377\377\377\202\377\377\375\2\377\377\377\376\375\377" \
- "\202\377\377\377\1\375\377\376\212\377\377\377\6\377\377\375\377\377" \
- "\377\376\377\375\377\377\375\377\376\377\377\376\375\212\377\377\377" \
- "\1\377\376\377\202\377\377\377\4\377\375\376\377\377\377\377\377\373" \
- "\376\375\377\221\377\377\377\203\376\376\376\4\377\377\375\376\376\374" \
- "\377\376\377\376\376\374\210\377\377\377\5\377\376\377\377\377\375\377" \
- "\376\377\376\376\376\376\377\375\202\377\377\377\1\376\376\376\210\377" \
- "\377\377\4\375\377\372\377\376\377\377\377\377\376\377\377\204\377\377" \
- "\377\202\376\377\377\3\377\377\377\377\377\375\376\376\376\202\377\377" \
- "\377\1\375\377\372\230\377\377\377\4\375\377\372\377\376\377\377\377" \
- "\377\376\377\377\204\377\377\377\202\376\377\377\3\377\377\377\377\377" \
- "\375\376\376\376\202\377\377\377\1\375\377\372\210\377\377\377\3\376" \
- "\377\377\377\377\377\376\376\376\202\376\377\377\202\377\377\377\1\376" \
- "\377\375\210\377\377\377\7\376\376\377\377\377\375\376\377\375\376\376" \
- "\376\377\376\377\377\377\377\376\377\377\221\377\377\377\5\376\376\376" \
- "\376\377\377\377\377\377\375\375\375\377\376\377\202\377\377\377\1\377" \
- "\377\375\211\377\377\377\7\377\376\377\376\376\374\376\377\377\377\377" \
- "\377\377\376\377\377\377\375\377\377\373\233\377\377\377\1\376\376\376" \
- "\205\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\203\377" \
- "\377\377\1\376\376\376\204\377\377\377\3\376\376\376\377\377\377\376" \
- "\376\376\204\377\377\377\1\376\376\376\237\377\377\377\1\376\376\376" \
- "\212\377\377\377\1\376\376\376\213\377\377\377\1\376\376\376\255\377" \
- "\377\377\1\376\376\376\247\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\376\376\376\224\377\377\377\1\376\376\376\247\377\377\377\1\376\376" \
- "\376\236\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\232" \
- "\377\377\377\10\377\376\377\377\377\375\377\377\377\376\377\377\376\376" \
- "\376\377\376\377\377\377\375\377\376\377\202\377\377\375\1\377\376\377" \
- "\202\377\377\377\3\377\376\377\377\375\376\377\376\377\260\377\377\377" \
- "\2\377\376\377\377\377\377\202\377\376\377\4\377\377\375\376\376\374" \
- "\377\375\377\377\376\377\210\377\377\377\3\376\376\374\377\376\377\376" \
- "\376\376\204\377\377\377\1\376\377\375\210\377\377\377\4\375\377\374" \
- "\377\377\377\377\375\376\377\376\377\203\377\377\377\1\377\377\375\220" \
- "\377\377\377\3\376\377\377\377\377\375\376\377\377\202\377\377\377\3" \
- "\377\376\377\373\377\377\376\377\377\211\377\377\377\202\376\377\375" \
- "\1\377\377\375\203\377\377\377\1\377\376\377\210\377\377\377\3\377\376" \
- "\377\377\375\376\377\376\377\202\377\377\377\1\377\376\377\202\377\377" \
- "\375\10\377\376\377\377\377\375\377\376\377\376\376\376\376\377\377\377" \
- "\377\377\377\377\375\377\376\377\230\377\377\377\3\377\376\377\377\375" \
- "\376\377\376\377\202\377\377\377\1\377\376\377\202\377\377\375\10\377" \
- "\376\377\377\377\375\377\376\377\376\376\376\376\377\377\377\377\377" \
- "\377\377\375\377\376\377\210\377\377\377\2\377\377\375\375\376\371\202" \
- "\377\376\377\3\377\377\377\377\377\375\377\376\377\212\377\377\377\1" \
- "\377\375\376\202\377\377\377\4\377\377\375\376\376\376\376\377\377\377" \
- "\376\377\220\377\377\377\2\376\377\377\376\376\377\202\377\377\377\2" \
- "\376\377\375\375\377\374\212\377\377\377\10\373\377\376\377\377\377\377" \
- "\377\375\376\376\374\377\377\375\377\376\377\377\377\377\376\377\377" \
- "\235\377\377\377\1\376\376\376\202\377\377\377\7\316\316\320\250\250" \
- "\252\221\221\223llnjjlGGI99;\204::<\7TTVkkmyy{\234\234\236\265\265\267" \
- "\332\332\332\376\376\376\237\377\377\377\3\376\376\376\377\377\377\376" \
- "\376\376\222\377\377\377\1\376\376\376\205\377\377\377\3\376\376\376" \
- "\377\377\377\376\376\376\255\377\377\377\1\376\376\376\246\377\377\377" \
- "\1\376\376\376\227\377\377\377\1\376\376\376\252\377\377\377\1\376\376" \
- "\376\233\377\377\377\1\376\376\376\236\377\377\377\17\305\344\240\303" \
- "\342\237\304\343\240\304\343\237\307\342\237\303\342\236\305\342\240" \
- "\303\342\236\305\342\237\304\343\240\304\343\237\304\341\237\304\343" \
- "\237\323\352\266\376\377\375\250\377\377\377\210\305\342\240\10\305\342" \
- "\237\303\342\234\304\343\237\306\341\236\304\343\240\322\352\270\376" \
- "\377\377\375\377\376\211\377\377\377\5\377\376\377\376\376\376\377\376" \
- "\377\360\371\350\305\342\237\202\304\341\236\210\305\342\240\5\304\341" \
- "\236\327\356\302\376\377\377\377\377\373\376\377\375\202\377\377\375" \
- "\1\377\376\377\220\377\377\377\202\377\377\375\2\376\377\377\377\377" \
- "\377\202\377\377\375\2\304\343\237\306\341\236\210\305\342\240\5\307" \
- "\342\237\303\342\236\304\341\236\341\357\314\377\377\375\213\377\377" \
- "\377\17\376\377\375\323\352\266\304\343\237\304\341\237\304\343\237\304" \
- "\343\240\305\342\237\303\342\236\305\342\240\303\342\236\307\342\237" \
- "\304\343\237\304\343\240\303\342\237\305\344\240\231\377\377\377\17\376" \
- "\377\375\323\352\266\304\343\237\304\341\237\304\343\237\304\343\240" \
- "\305\342\237\303\342\236\305\342\240\303\342\236\307\342\237\304\343" \
- "\237\304\343\240\303\342\237\305\344\240\211\377\377\377\10\360\367\347" \
- "\306\343\241\303\342\237\307\342\237\303\342\237\304\343\235\307\341" \
- "\240\304\343\240\210\305\342\240\7\315\347\252\376\377\375\377\375\376" \
- "\376\377\375\377\377\377\377\377\373\376\377\377\221\377\377\377\10\377" \
- "\377\375\376\377\375\323\352\266\307\341\240\307\342\237\305\342\240" \
- "\307\340\236\306\341\236\210\305\342\240\4\304\343\237\311\335\236\377" \
- "\377\377\377\376\377\203\377\377\377\1\376\377\377\230\377\377\377\1" \
- "\376\376\376\203\377\377\377\3\346\346\346\251\251\251jjl\202;;=\210" \
- "::<\1;;=\202::<\2;;=99;\203::<\5FFHxxx\265\265\265\363\363\363\376\376" \
- "\376\234\377\377\377\2\376\376\376\346\346\346\214\234\234\234\1\235" \
- "\235\235\203\234\234\234\3\235\235\235\234\234\234\250\250\250\203\316" \
- "\316\316\1\346\346\346\263\377\377\377\202\250\250\250\245\377\377\377" \
- "\1\316\316\316\222\234\234\234\1\302\302\302\203\316\316\316\1\363\363" \
- "\363\247\377\377\377\3\316\316\316\234\234\234\235\235\235\240\234\234" \
- "\234\1\316\316\316\231\377\377\377\6\215\305>\216\306A\215\305@\213\310" \
- "=\215\305>\212\307>\202\214\305@\6\214\306>\212\306@\214\306<\215\304" \
- "B\214\306>\252\323m\251\377\377\377\210\214\306>\10\215\305@\215\307" \
- "\77\212\307>\217\304@\214\305@\251\323m\377\377\377\377\377\375\213\377" \
- "\377\377\5\377\375\377\341\363\315\215\305>\212\307>\215\305@\210\214" \
- "\306>\6\215\306A\220\305\77\350\365\333\377\377\377\376\377\377\377\376" \
- "\377\202\376\377\377\225\377\377\377\3\377\376\377\214\306>\215\306A" \
- "\210\214\306>\6\215\305>\212\310\77\215\305@\307\341\240\376\377\377" \
- "\377\376\377\213\377\377\377\6\252\323m\214\306>\215\304B\214\306<\212" \
- "\306@\214\306>\202\214\305@\6\212\307>\215\305>\213\310=\215\305@\216" \
- "\306A\215\305>\232\377\377\377\6\252\323m\214\306>\215\304B\214\306<" \
- "\212\306@\214\306>\202\214\305@\6\212\307>\215\305>\213\310=\215\305" \
- "@\216\306A\215\305>\211\377\377\377\4\376\377\377\242\321a\213\307A\215" \
- "\305>\202\214\306>\2\215\305@\215\307\77\210\214\306>\7\215\305<\332" \
- "\354\304\377\377\377\376\377\375\376\376\376\377\376\377\376\376\376" \
- "\221\377\377\377\10\377\376\377\342\362\316\215\305>\213\310\77\212\305" \
- "D\212\307<\216\306\77\211\307>\211\214\306>\4\304\343\240\373\377\376" \
- "\377\377\377\375\377\376\202\377\377\377\1\377\377\375\225\377\377\377" \
- "\1\376\376\376\204\377\377\377\6\265\265\267__a99;;;=::<;;=\202::<\1" \
- ";;=\202::<\1;;=\202::<\1;;=\203::<\1;;=\203::<\3;;=::<99;\202::<\2xx" \
- "z\301\301\301\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\206\377\377\377\1\376\376\376\217\377\377\377\1\316\316\316\205" \
- "::<\202;;=\221::<\4TTVwwy\250\250\252\346\346\350\255\377\377\377\1\316" \
- "\316\320\202::<\1\316\316\316\244\377\377\377\1\234\234\236\204::<\1" \
- ";;=\205::<\3;;=::<;;=\206::<\1;;=\204::<\6SSUkkm\204\204\206\250\250" \
- "\250\316\316\316\376\376\376\206\377\377\377\1\376\376\376\231\377\377" \
- "\377\1\234\234\234\206::<\3;;=::<;;=\222::<\1;;=\204::<\3;;=::<\234\234" \
- "\236\231\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214" \
- "\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325" \
- "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306>" \
- "\15\212\306@\215\307\77\233\316W\365\374\364\377\376\375\376\377\377" \
- "\377\376\377\377\377\375\377\377\377\377\377\375\376\376\376\377\377" \
- "\377\376\376\374\202\377\377\377\1\376\376\376\216\377\377\377\213\214" \
- "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \
- "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \
- "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \
- "\305@\214\306>\214\305@\212\377\377\377\7\350\364\334\215\305>\212\307" \
- "<\214\305@\215\304B\215\305@\213\310\77\210\214\306>\10\214\305@\225" \
- "\311J\370\373\362\377\376\377\376\377\377\377\377\375\377\377\377\376" \
- "\377\377\210\377\377\377\40\376\377\377\376\377\375\377\376\377\377\377" \
- "\377\375\376\377\377\377\375\377\376\377\376\377\377\370\373\364\233" \
- "\314W\215\307\77\214\304=\212\306@\215\307\77\213\305=\215\307\77\214" \
- "\306>\217\304@\215\306A\212\307>\214\306<\215\306A\214\306>\211\307@" \
- "\242\321a\377\377\377\377\376\377\376\377\377\377\376\377\377\377\377" \
- "\376\377\377\377\376\377\223\377\377\377\7\376\376\376\377\377\377\376" \
- "\376\376\377\377\377\363\363\365\234\234\236FFH\202::<\10;;=99;;;=::" \
- "<;;=::<99;;;=\203::<\1;;=\203::<\2;;=99;\204::<\11""99;;;=::<;;=::<;" \
- ";=TTV\265\265\265\363\363\363\203\377\377\377\1\376\376\376\207\377\377" \
- "\377\1\376\376\376\215\377\377\377\1\316\316\316\205::<\3;;=::<;;=\202" \
- "::<\1;;=\214::<\3;;=99;;;=\202::<\4lln\316\316\316\376\376\376\377\377" \
- "\377\202\376\376\376\246\377\377\377\2\376\376\376xxz\202::<\2xxx\376" \
- "\376\376\243\377\377\377\1\234\234\236\204::<\202;;=\205::<\1;;=\204" \
- "::<\1;;=\202::<\1""99;\206::<\1;;=\202::<\6;;=kkk\250\250\250\346\346" \
- "\346\377\377\377\376\376\376\205\377\377\377\1\376\376\376\225\377\377" \
- "\377\1\234\234\234\204::<\1;;=\202::<\4;;=::<99;;;=\225::<\3;;=::<\234" \
- "\234\236\231\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4" \
- "\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250" \
- "\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306" \
- ">\4\215\306A\213\304\77\215\305@\262\327x\202\377\377\377\1\376\377\375" \
- "\203\377\377\375\204\377\377\377\1\376\376\376\217\377\377\377\213\214" \
- "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \
- "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \
- "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \
- "\305@\214\306>\214\305@\212\377\377\377\7\376\376\376\305\342\237\212" \
- "\307>\214\306>\212\307<\214\306>\212\307>\210\214\306>\3\214\306<\215" \
- "\306A\300\337\221\202\377\377\377\3\377\376\377\376\376\376\377\377\375" \
- "\210\377\377\377\1\377\375\377\202\377\377\377\2\376\376\377\376\377" \
- "\375\202\377\376\377\30\377\377\377\277\340\221\215\306A\213\305=\215" \
- "\305>\212\306B\214\306>\216\306\77\214\306<\212\307>\215\307=\213\305" \
- ";\215\307\77\216\305C\214\306>\214\305@\216\306\77\347\365\333\377\376" \
- "\377\377\377\375\376\377\377\377\376\374\377\377\377\377\377\375\222" \
- "\377\377\377\1\376\376\376\204\377\377\377\12\265\265\267FFH;;=::<;;" \
- "=99;::<;;=::<;;=\202::<\4<<>99;::<;;=\202::<\1;;=\203::<\1<<>\204::<" \
- "\5<<>99;;;=99;;;=\202::<\4:::SSS\266\266\266\376\376\376\203\377\377" \
- "\377\1\376\376\376\204\377\377\377\1\376\376\376\216\377\377\377\1\316" \
- "\316\316\204::<\3;;=::<;;=\204::<\1;;=\214::<\1;;=\202::<\1;;=\202::" \
- "<\2yyy\363\363\363\202\377\377\377\1\376\376\376\245\377\377\377\3\346" \
- "\346\346::<;;=\202::<\1\347\347\347\202\377\377\377\1\376\376\376\240" \
- "\377\377\377\1\234\234\236\203::<\4;;=99;::<;;=\202::<\7;;=::<;;=99;" \
- ";;=::<;;=\203::<\202;;=\210::<\1""99;\202::<\4;;=xxz\317\317\317\376" \
- "\376\376\202\377\377\377\1\376\376\376\227\377\377\377\1\234\234\234" \
- "\204::<\1""99;\203;;=\224::<\1;;=\204::<\2<<>\234\234\236\231\377\377" \
- "\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214" \
- "\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \
- "\1\342\361\320\202\214\306>\1\214\305@\210\214\306>\10\215\305>\214\306" \
- ">\213\307A\214\306>\315\345\253\377\377\375\377\376\377\376\377\377\226" \
- "\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \
- "\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214" \
- "\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@" \
- "\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377\377\7\377\377" \
- "\375\377\376\377\376\376\376\241\321a\212\307>\211\305\77\215\306A\211" \
- "\214\306>\4\213\310\77\214\305@\213\305=\342\361\320\202\377\376\377" \
- "\2\377\377\375\377\376\377\210\377\377\377\1\377\376\377\202\377\377" \
- "\377\30\377\377\375\376\377\377\377\377\375\376\377\377\351\366\334\214" \
- "\305B\211\306;\215\307\77\214\306>\212\306@\215\305>\215\305@\212\307" \
- ">\214\305@\212\306B\214\306>\213\305=\213\310\77\215\305>\215\307\77" \
- "\314\345\253\377\375\377\377\376\374\376\377\377\203\377\377\377\1\377" \
- "\376\374\225\377\377\377\2\345\345\345kkm\205::<\202;;=\203::<\1;;=\203" \
- "::<\1;;=\202::<\202;;=\202::<\1;;=\210::<\2;;=99;\205::<\2```\331\331" \
- "\331\211\377\377\377\1\376\376\376\214\377\377\377\1\316\316\316\206" \
- "::<\5""99;::<;;=::<99;\212::<\1;;=\202::<\1;;=\204::<\4;;=::<FFF\316" \
- "\316\316\247\377\377\377\3\205\205\207;;=99;\202::<\1\204\204\206\203" \
- "\377\377\377\1\376\376\376\237\377\377\377\1\234\234\236\205::<\1;;=" \
- "\204::<\1""99;\202;;=\202::<\3;;=::<;;=\203::<\1;;=\202::<\1;;=\204:" \
- ":<\1;;=\205::<\2jjl\316\316\316\203\377\377\377\1\376\376\376\225\377" \
- "\377\377\1\234\234\234\204::<\1;;=\202::<\3;;=::<;;=\222::<\7;;=::<;" \
- ";=::<;;=::<\234\234\236\231\377\377\377\3\214\305@\214\306>\214\305@" \
- "\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215" \
- "\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214" \
- "\305@\210\214\306>\10\215\305@\212\307>\214\305@\215\306A\214\305@\352" \
- "\364\334\376\376\377\377\377\373\202\377\377\377\3\376\376\376\377\377" \
- "\377\377\377\375\202\377\377\377\1\376\376\374\216\377\377\377\213\214" \
- "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \
- "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \
- "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \
- "\305@\214\306>\214\305@\211\377\377\377\1\376\377\377\202\377\377\375" \
- "\5\347\364\332\215\307\77\215\306C\214\307;\216\306\77\210\214\306>\10" \
- "\214\305@\214\305D\215\307\77\233\314V\371\374\363\376\377\377\377\377" \
- "\377\377\377\375\210\377\377\377\20\375\377\374\377\376\377\376\376\377" \
- "\376\377\377\377\376\377\376\377\375\376\377\377\244\317d\212\307>\215" \
- "\306A\215\305@\214\305@\211\306=\215\307=\215\306A\214\305@\204\214\306" \
- ">\14\211\305A\212\307>\251\324k\377\376\377\377\375\376\376\377\377\377" \
- "\377\377\377\377\375\377\377\377\377\377\375\377\377\377\377\377\375" \
- "\217\377\377\377\1\376\376\376\203\377\377\377\2\265\265\267FFH\205:" \
- ":<\1;;=\203::<\202;;=\7:::TTT\203\203\203\235\235\235\316\316\316\332" \
- "\332\332\377\377\377\202\376\376\376\202\377\377\377\5\316\316\316\317" \
- "\317\317\234\234\234yyyFFF\202::<\1;;=\202::<\3""99;;;=99;\204::<\2;" \
- ";=\233\233\233\206\377\377\377\1\376\376\376\216\377\377\377\1\316\316" \
- "\316\204::<\1;;=\205::<\1;;=\212::<\3""99;::<;;=\202::<\2;;=99;\204:" \
- ":<\2;;=\265\265\265\245\377\377\377\4\346\346\346::<99;;;=\202::<\4""9" \
- "9;\347\347\347\377\377\377\376\376\376\240\377\377\377\1\234\234\236" \
- "\205::<\1;;=\203::<\202;;=\1""99;\203;;=\2::<;;=\203::<\1;;=\202::<\2" \
- ";;=::<\202;;=\7::<;;=99;::<;;=99;;;=\202::<\3;;=xxx\362\362\362\227\377" \
- "\377\377\1\234\234\234\205::<\202;;=\4::<;;=::<;;=\223::<\2;;=99;\202" \
- ";;=\1\234\234\236\231\377\377\377\3\214\305@\214\306>\214\305@\207\214" \
- "\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306" \
- ">\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210" \
- "\214\306>\12\212\307>\215\306A\214\305@\215\307\77\213\306:\226\312N" \
- "\372\374\361\375\376\377\377\377\375\377\377\373\224\377\377\377\213" \
- "\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p" \
- "\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \
- "@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>" \
- "\3\214\305@\214\306>\214\305@\211\377\377\377\10\376\377\377\376\376" \
- "\377\376\377\377\377\375\376\307\342\237\214\306<\215\306A\214\305@\210" \
- "\214\306>\5\215\307\77\213\305=\216\306A\213\310\77\277\337\223\202\377" \
- "\377\375\1\377\376\377\210\377\377\377\14\376\377\375\376\376\376\377" \
- "\376\377\377\377\375\377\376\377\377\377\377\303\342\236\215\307\77\216" \
- "\306A\215\305>\214\306<\215\306A\203\214\306>\20\215\307\77\212\307>" \
- "\215\305@\216\306\77\214\305@\216\307<\223\312K\356\372\346\377\377\377" \
- "\376\377\377\375\377\376\377\377\377\377\376\377\377\377\375\377\377" \
- "\377\377\377\375\216\377\377\377\1\376\376\376\203\377\377\377\2\375" \
- "\375\375\205\205\207\202::<\202;;=\3::<;;=::<\202;;=\6::<:::SSS\250\250" \
- "\250\346\346\346\376\376\376\216\377\377\377\3\332\332\332\220\220\220" \
- "SSS\202::<\4;;=99;::<;;=\202::<\1""99;\202;;=\2__a\332\332\334\223\377" \
- "\377\377\1\316\316\316\204::<\6;;=RRT\235\235\237\235\235\235\233\233" \
- "\233\234\234\234\212\234\234\236\5xxzkkm__a99;;;=\204::<\202;;=\1""9" \
- "9;\202::<\1\316\316\316\244\377\377\377\4\204\204\206;;=::<;;=\202::" \
- "<\2;;=\220\220\222\203\377\377\377\1\376\376\376\236\377\377\377\1\234" \
- "\234\236\203::<\3;;=::<kkm\203\234\234\236\3\233\233\235\234\234\236" \
- "\235\235\237\204\234\234\236\2xxzlln\202kkm\1FFH\202;;=\2""99;;;=\202" \
- "::<\3""99;::<;;=\202::<\1;;=\205::<\3GGI\301\301\301\376\376\376\225" \
- "\377\377\377\1\234\234\234\205::<\5lln\234\234\236\233\233\233\235\235" \
- "\235\234\234\234\224\234\234\236\5\234\234\234\235\235\235\233\233\233" \
- "\234\234\234\316\316\316\231\377\377\377\3\214\305@\214\306>\214\305" \
- "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \
- "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \
- "\214\305@\210\214\306>\7\212\306@\214\306<\217\307@\214\304\77\214\311" \
- ">\214\306>\251\323m\202\376\377\377\4\376\376\374\377\377\375\377\377" \
- "\377\376\376\376\202\377\377\377\1\376\376\376\216\377\377\377\213\214" \
- "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \
- "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \
- "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \
- "\305@\214\306>\214\305@\212\377\377\377\7\377\377\375\377\376\377\376" \
- "\377\377\377\376\377\251\323o\211\307>\214\305@\210\214\306>\7\212\307" \
- ">\215\305>\214\305@\214\306>\215\307\77\347\365\334\377\376\377\211\377" \
- "\377\377\2\377\376\377\375\377\374\203\377\376\377\15\352\364\333\212" \
- "\306@\215\306A\214\306>\215\307\77\213\310\77\214\306>\216\306A\215\306" \
- "A\214\306<\212\307>\213\310=\212\307>\202\214\305@\4\214\306>\314\345" \
- "\253\377\376\377\376\377\377\202\377\377\375\6\377\376\377\375\376\377" \
- "\377\377\377\377\376\377\376\377\375\377\376\377\217\377\377\377\3\376" \
- "\376\376\362\362\362lln\20299;\1;;=\204::<\202;;=\6::<\204\204\204\317" \
- "\317\317\376\376\376\377\377\377\376\376\376\206\377\377\377\1\376\376" \
- "\376\213\377\377\377\2\301\301\301kkm\211::<\6;;=FFH\301\301\301\376" \
- "\376\376\377\377\377\376\376\376\217\377\377\377\1\316\316\316\204::" \
- "<\3;;=kkm\376\376\376\221\377\377\377\3\316\316\316\204\204\204FFF\202" \
- "::<\1;;=\202::<\202;;=\2FFH\363\363\363\242\377\377\377\5\364\364\364" \
- "::<;;=99;;;=\203::<\3GGI\363\363\363\376\376\376\240\377\377\377\1\234" \
- "\234\236\205::<\1\234\234\236\210\377\377\377\1\376\376\376\204\377\377" \
- "\377\1\376\376\376\202\377\377\377\6\362\362\362\316\316\316\265\265" \
- "\265\234\234\234kkmFFH\202::<\2;;=99;\205::<\1;;=\202::<\1\221\221\221" \
- "\225\377\377\377\1\234\234\234\205::<\1\234\234\236\202\377\377\377\1" \
- "\376\376\376\225\377\377\377\1\375\375\375\235\377\377\377\3\214\305" \
- "@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324" \
- "p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320" \
- "\202\214\306>\1\214\305@\210\214\306>\4\215\307\77\214\306>\214\304\77" \
- "\214\306>\202\214\305@\6\215\307\77\307\341\240\376\377\375\376\377\377" \
- "\376\376\374\377\377\373\202\377\377\377\202\377\377\375\216\377\377" \
- "\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252" \
- "\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214" \
- "\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \
- ">\3\214\305@\214\306>\214\305@\212\377\377\377\7\377\376\377\376\376" \
- "\377\377\377\377\376\376\377\361\372\347\222\312K\215\305>\210\214\306" \
- ">\10\214\305@\215\306A\214\305@\214\306<\213\304A\243\322b\376\376\374" \
- "\376\377\375\211\377\377\377\24\377\377\373\377\377\377\376\377\377\377" \
- "\377\375\242\320c\215\307=\214\306>\213\310\77\213\304A\212\306@\215" \
- "\307\77\215\305@\214\306>\215\307\77\212\306@\215\305>\215\307\77\213" \
- "\310\77\213\306:\253\325q\202\377\377\377\11\377\377\375\377\376\377" \
- "\377\377\377\377\377\375\376\377\375\377\377\375\377\375\377\376\377" \
- "\377\377\377\375\214\377\377\377\7\376\376\376\377\377\377\376\376\376" \
- "\363\363\363__a::<;;=\203::<\202;;=\202::<\4xxz\347\347\351\377\377\377" \
- "\376\376\376\210\377\377\377\1\376\376\376\204\377\377\377\2\376\376" \
- "\376\377\377\377\203\376\376\376\205\377\377\377\2\316\316\320kkm\202" \
- "::<\3;;=::<;;=\202::<\202;;=\2:::\250\250\250\202\377\377\377\1\376\376" \
- "\376\216\377\377\377\1\316\316\316\205::<\1kkm\203\377\377\377\1\376" \
- "\376\376\215\377\377\377\1\376\376\376\202\377\377\377\3\363\363\363" \
- "xxx::<\202;;=\203::<\2;;=xxz\242\377\377\377\1\234\234\234\202::<\1;" \
- ";=\202::<\1;;=\202::<\1\234\234\234\241\377\377\377\1\234\234\236\202" \
- "::<\10;;=::<;;=\234\234\236\377\377\377\376\376\376\377\377\377\376\376" \
- "\376\216\377\377\377\1\376\376\376\203\377\377\377\3\332\332\332\221" \
- "\221\223FFH\205::<\2;;=::<\202;;=\2::<\204\204\204\224\377\377\377\1" \
- "\234\234\234\205::<\3\234\234\236\377\377\377\376\376\376\264\377\377" \
- "\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214" \
- "\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \
- "\1\342\361\320\202\214\306>\1\214\305@\210\214\306>\5\216\306\77\212" \
- "\307>\215\307=\212\306@\214\306>\202\215\305>\5\215\305@\345\356\317" \
- "\376\377\375\376\377\377\377\377\375\202\377\377\377\1\377\377\375\217" \
- "\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \
- "\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214" \
- "\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@" \
- "\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377\377\4\376\377" \
- "\377\377\377\377\377\377\375\376\377\377\202\377\377\377\2\315\347\252" \
- "\212\306@\210\214\306>\10\216\306A\212\306@\212\307>\215\305<\213\310" \
- "\77\215\305>\307\341\240\376\377\377\212\377\377\377\10\375\377\374\377" \
- "\377\377\305\342\237\215\305@\212\306@\216\306\77\215\307=\215\305>\202" \
- "\214\306>\24\213\307A\213\310=\215\304B\214\306>\212\306@\215\304B\212" \
- "\307>\225\311K\370\373\362\377\377\377\376\377\375\377\377\375\377\377" \
- "\377\374\377\375\376\376\376\377\377\377\377\377\375\377\376\377\376" \
- "\377\377\377\377\375\211\377\377\377\1\376\376\376\205\377\377\377\1" \
- "___\204::<\1;;=\203::<\2SSS\316\316\316\235\377\377\377\2\317\317\317" \
- "``b\207::<\3;;=::<\204\204\206\220\377\377\377\1\316\316\316\205::<\1" \
- "kkm\226\377\377\377\3\204\204\206::<;;=\205::<\1\316\316\316\232\377" \
- "\377\377\1\376\376\376\205\377\377\377\2\364\364\364FFF\202;;=\202::" \
- "<\6;;=99;;;=::<FFH\363\363\363\240\377\377\377\1\234\234\236\205::<\1" \
- "\234\234\234\226\377\377\377\1\376\376\376\202\377\377\377\3\265\265" \
- "\265RRR:::\202::<\1;;=\202::<\4;;=::<;;=\204\204\204\203\377\377\377" \
- "\1\376\376\376\217\377\377\377\1\234\234\234\205::<\1\234\234\236\266" \
- "\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215" \
- "\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377" \
- "\377\377\1\342\361\320\202\214\306>\1\214\305@\220\214\306>\2\222\313" \
- "J\366\373\364\202\377\376\377\4\377\377\373\376\376\374\376\377\377\377" \
- "\376\377\216\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240" \
- "\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3" \
- "\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305" \
- ">\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377\377" \
- "-\377\377\375\376\377\377\377\377\377\376\376\374\376\377\377\377\376" \
- "\377\376\377\377\252\324p\212\306@\215\305>\212\307<\215\305@\215\305" \
- "<\214\305B\215\305@\214\306<\212\307>\215\305>\214\306>\211\306=\215" \
- "\305>\212\307>\214\306<\350\364\334\374\377\377\377\376\377\376\376\376" \
- "\374\377\375\377\377\377\376\377\375\377\377\375\377\376\377\377\377" \
- "\375\377\377\377\377\376\377\357\367\350\223\312K\213\310\77\215\305" \
- ">\214\306>\215\305>\213\310\77\212\306@\214\306>\215\305@\202\214\306" \
- ">\10\214\305@\216\306=\212\307>\215\305>\333\355\303\376\376\374\377" \
- "\377\377\377\377\375\223\377\377\377\1\376\376\376\203\377\377\377\1" \
- "\203\203\203\206::<\4;;=::<\204\204\206\363\363\363\230\377\377\377\1" \
- "\376\376\376\207\377\377\377\1\235\235\237\202::<\1;;=\203::<\5;;=99" \
- ";;;=\204\204\204\376\376\376\216\377\377\377\1\316\316\316\205::<\1k" \
- "km\227\377\377\377\12\204\204\206::<;;=::<99;;;=::<\204\204\204\377\377" \
- "\377\376\376\376\232\377\377\377\1\376\376\376\203\377\377\377\2\234" \
- "\234\234;;=\203::<\1;;=\204::<\3<<>\250\250\250\376\376\376\237\377\377" \
- "\377\1\234\234\236\205::<\1\234\234\234\231\377\377\377\10\376\376\376" \
- "\377\377\377\265\265\265FFH::<;;=::<;;=\203::<\2;;=\204\204\204\222\377" \
- "\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305" \
- "@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324" \
- "p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320" \
- "\202\214\306>\1\214\305@\220\214\306>\4\216\306\77\250\322n\376\377\375" \
- "\376\377\373\222\377\377\377\213\214\306>\3\215\305>\214\306>\305\342" \
- "\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \
- ">\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215" \
- "\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377" \
- "\377\13\376\376\377\376\377\377\377\376\377\376\376\374\374\377\377\377" \
- "\377\375\377\376\377\356\372\346\225\311K\214\306>\213\310=\203\214\306" \
- ">\2\213\310\77\214\306>\202\214\305@\7\214\306<\213\307A\214\304\77\214" \
- "\305B\212\307>\244\317d\377\376\377\202\377\377\377\1\377\375\377\202" \
- "\377\377\377\25\376\377\377\377\376\377\377\377\377\374\377\375\376\376" \
- "\374\253\324n\214\306<\215\307\77\215\305>\211\307@\216\305C\214\305" \
- "@\215\307\77\214\305@\214\306<\212\307<\211\306=\214\306>\214\305@\213" \
- "\307A\263\327}\202\376\377\377\3\377\377\377\377\375\376\377\377\375" \
- "\221\377\377\377\1\376\376\376\203\377\377\377\1\250\250\250\204::<\1" \
- ";;=\202::<\2;;=\264\264\264\202\377\377\377\1\376\376\376\232\377\377" \
- "\377\1\376\376\376\205\377\377\377\2\332\332\332SSS\202::<\1;;=\204:" \
- ":<\4xxx\364\364\364\377\377\377\376\376\376\214\377\377\377\1\316\316" \
- "\316\205::<\1kkm\227\377\377\377\2\363\363\363SSU\202::<\4;;=99;::<;" \
- ";;\202\377\377\377\1\376\376\376\226\377\377\377\1\376\376\376\204\377" \
- "\377\377\11\376\376\376\363\363\363FFH99;;;=::<;;=99;;;=\203::<\4""9" \
- "9;SSU\377\377\377\376\376\376\236\377\377\377\1\234\234\236\205::<\1" \
- "\234\234\234\225\377\377\377\1\376\376\376\204\377\377\377\10\376\376" \
- "\376\377\377\377\363\363\363yyy::<;;=99;;;=\204::<\1\266\266\266\221" \
- "\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214" \
- "\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252" \
- "\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361" \
- "\320\202\214\306>\1\214\305@\220\214\306>\4\214\306<\213\307A\275\335" \
- "\222\376\377\377\203\377\377\377\1\377\377\375\216\377\377\377\213\214" \
- "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \
- "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \
- "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \
- "\305@\214\306>\214\305@\211\377\377\377\4\377\376\377\376\376\377\377" \
- "\377\377\377\377\375\202\376\377\377\5\377\375\376\377\376\377\315\346" \
- "\255\212\307>\214\305@\202\215\306A\22\214\305@\212\307<\214\305B\214" \
- "\306>\213\307A\214\306>\213\305=\214\306>\215\305>\213\307A\211\310<" \
- "\313\347\254\377\377\375\377\375\377\376\377\377\376\377\373\376\377" \
- "\377\377\376\377\202\376\377\377\10\377\377\377\315\346\254\212\307>" \
- "\212\306@\215\306A\216\306A\212\307>\214\306<\202\215\306A\10\215\306" \
- "C\214\305B\215\307\77\214\306<\214\305@\213\310<\222\310L\372\373\363" \
- "\225\377\377\377\1\376\376\376\202\377\377\377\6\376\376\376\333\333" \
- "\333::<;;=::<;;=\202::<\3;;=FFH\315\315\315\205\377\377\377\1\376\376" \
- "\376\225\377\377\377\202\376\376\376\202\377\377\377\1\376\376\376\202" \
- "\377\377\377\1\376\376\376\202\377\377\377\2\363\363\363xxx\204::<\2" \
- ";;=\203\203\203\220\377\377\377\1\316\316\316\205::<\1kkm\230\377\377" \
- "\377\3\266\266\27099;;;=\204::<\1\316\316\316\230\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\376\376\376\202\377\377\377\3\265\265\267::<;" \
- ";=\204::<\202;;=\202::<\202;;=\1\265\265\265\237\377\377\377\1\234\234" \
- "\236\205::<\1\234\234\234\236\377\377\377\5\234\234\234::<;;=::<;;=\202" \
- "::<\3;;=FFH\332\332\332\220\377\377\377\1\234\234\234\205::<\1\234\234" \
- "\236\266\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214" \
- "\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325" \
- "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\220\214\306>" \
- "\4\215\307\77\214\304\77\213\310\77\333\355\303\202\377\377\377\1\376" \
- "\377\375\217\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240" \
- "\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3" \
- "\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305" \
- ">\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\213\377\377\377" \
- "\5\377\377\373\377\376\377\377\377\377\375\377\374\376\377\377\202\376" \
- "\376\376\22\260\331{\212\307>\214\306>\215\305>\215\305@\215\307\77\215" \
- "\307=\214\305@\214\306>\215\306A\214\306>\213\307C\214\306>\214\304;" \
- "\213\307A\222\312K\357\370\345\377\377\375\202\377\377\377\15\377\375" \
- "\376\377\377\375\376\376\376\377\377\375\361\367\351\222\311J\213\310" \
- "\77\214\305B\215\310<\213\305=\216\306\77\212\307<\214\305B\202\214\306" \
- ">\6\216\306\77\215\305@\215\306A\214\305@\215\305<\333\356\301\202\377" \
- "\376\377\3\377\377\375\377\377\377\377\376\377\225\377\377\377\1``b\202" \
- "::<\6;;=::<;;=::<FFH\331\331\333\233\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\206\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\205\205\207\203::<\1\204\204\206\221\377\377\377\1\316\316\316\205" \
- "::<\1kkm\231\377\377\377\1GGI\203;;=\202::<\3\235\235\237\377\377\377" \
- "\376\376\376\233\377\377\377\2\376\376\376SSU\203::<\5;;=99;llnkkm::" \
- "<\202;;=\202::<\1SSU\237\377\377\377\1\234\234\236\205::<\1\234\234\234" \
- "\224\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376\203\377" \
- "\377\377\4\376\376\376\266\266\270::<;;=\203::<\5""99;::<__a\377\377" \
- "\377\376\376\376\216\377\377\377\1\234\234\234\205::<\1\234\234\236\266" \
- "\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215" \
- "\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377" \
- "\377\377\1\342\361\320\202\214\306>\1\214\305@\220\214\306>\10\216\306" \
- "\77\215\306A\214\305@\224\310J\360\371\350\377\377\377\377\376\377\376" \
- "\377\377\216\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240" \
- "\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3" \
- "\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305" \
- ">\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\212\377\377\377" \
- "\1\377\377\375\202\377\377\377\2\377\376\377\377\377\377\202\376\377" \
- "\377\25\377\377\375\370\373\362\223\312K\212\307>\215\305>\216\306A\212" \
- "\307<\214\305B\215\307\77\214\305@\214\306>\214\305@\212\306@\215\307" \
- "=\216\306A\215\305>\214\306<\252\324n\376\377\377\376\376\376\377\376" \
- "\377\202\377\377\375\4\377\376\377\376\376\377\252\324n\215\306A\202" \
- "\214\306>\21\214\305@\215\307\77\215\305>\212\307>\214\306<\213\304A" \
- "\215\307=\214\304=\215\307\77\212\307>\214\306>\277\337\226\377\376\377" \
- "\376\377\375\377\377\375\377\377\377\376\376\376\225\377\377\377\3\234" \
- "\234\236::<;;=\204::<\4;;=\265\265\267\377\377\377\376\376\376\204\377" \
- "\377\377\202\376\376\376\202\377\377\377\1\376\376\376\225\377\377\377" \
- "\1\376\376\376\203\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\202\377\377\377\3\250\250\250::<\204\204\206\205\377\377\377\1\376" \
- "\376\376\214\377\377\377\1\316\316\316\205::<\1kkm\226\377\377\377\1" \
- "\376\376\376\202\377\377\377\2kkm99;\202::<\4;;=::<\204\204\206\376\376" \
- "\376\202\377\377\377\1\376\376\376\224\377\377\377\1\376\376\376\203" \
- "\377\377\377\2\376\376\376\265\265\265\202::<\1;;=\202::<\3;;=\316\316" \
- "\320\316\316\316\204::<\3;;=::<\266\266\266\236\377\377\377\1\234\234" \
- "\236\205::<\1\234\234\234\226\377\377\377\202\376\376\376\2\377\377\377" \
- "\376\376\376\205\377\377\377\4\376\376\376\251\251\253;;=99;\202::<\4" \
- "<<>99;::<\250\250\252\217\377\377\377\1\234\234\234\205::<\1\234\234" \
- "\236\266\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214" \
- "\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325" \
- "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\220\214\306>" \
- "\202\214\305@\6\212\306@\215\307\77\243\321d\377\377\375\377\375\377" \
- "\376\377\377\216\377\377\377\213\214\306>\3\215\305>\214\306>\305\342" \
- "\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \
- ">\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215" \
- "\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\211\377\377" \
- "\377\2\376\377\377\377\377\375\202\377\377\377\1\376\376\376\202\377" \
- "\377\377\6\376\377\372\376\377\377\377\376\377\331\357\301\213\304\77" \
- "\215\307=\202\214\305@\25\214\305B\214\306<\215\305@\212\307<\214\306" \
- ">\216\306=\212\307>\212\306B\214\305@\215\306E\212\306@\313\347\255\376" \
- "\377\375\376\376\377\376\377\377\377\376\377\377\377\377\333\355\305" \
- "\212\307>\216\306\77\215\307\77\202\214\306>\1\215\307\77\202\214\306" \
- ">\13\215\305<\212\306@\212\307<\215\307\77\211\306=\213\307A\233\314" \
- "V\370\373\362\377\377\375\377\377\377\376\377\377\202\377\377\375\2\374" \
- "\377\377\377\375\376\222\377\377\377\3\363\363\363GGI::<\202;;=\202:" \
- ":<\2;;=\234\234\234\214\377\377\377\1\376\376\376\221\377\377\377\1\376" \
- "\376\376\202\377\377\377\3\376\376\376\377\377\377\376\376\376\206\377" \
- "\377\377\3\376\376\376\377\377\377\316\316\316\203\377\377\377\1\376" \
- "\376\376\203\377\377\377\1\376\376\376\213\377\377\377\1\316\316\316" \
- "\205::<\1kkm\227\377\377\377\5\376\376\376\377\377\377\235\235\237::" \
- "<;;=\203::<\2lln\376\376\376\203\377\377\377\1\376\376\376\224\377\377" \
- "\377\13\376\376\376\377\377\377\376\376\376\377\377\377RRR::<99;::<;" \
- ";=::<kkm\202\377\377\377\1__a\203;;=\202::<\1kkk\236\377\377\377\1\234" \
- "\234\236\205::<\1\234\234\234\241\377\377\377\2\204\204\204;;=\202::" \
- "<\5""99;::<;;=FFH\363\363\363\216\377\377\377\1\234\234\234\205::<\1" \
- "\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305@\207\214\306" \
- ">\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>" \
- "\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\221" \
- "\214\306>\5\213\307A\216\306\77\212\307<\214\306>\277\337\223\220\377" \
- "\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377" \
- "\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306" \
- ">\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207" \
- "\214\306>\3\214\305@\214\306>\214\305@\211\377\377\377\4\376\377\377" \
- "\377\377\375\377\375\377\377\377\377\202\377\377\375\202\377\376\377" \
- "\202\376\377\377\22\377\376\377\262\331~\213\304\77\213\310\77\216\306" \
- "A\212\307<\215\306A\214\304=\213\310\77\214\305@\215\304B\214\305B\214" \
- "\306<\212\307>\212\307<\216\306A\221\312I\370\373\362\203\377\377\377" \
- "\13\370\373\364\226\310K\214\306>\212\307>\215\304B\214\306>\215\306" \
- "A\213\304\77\215\306A\214\306>\215\305@\202\212\306@\13\215\307\77\213" \
- "\310=\220\303@\336\362\315\377\376\377\377\377\377\374\377\377\377\376" \
- "\377\377\377\377\376\376\374\376\377\375\223\377\377\377\1\204\204\206" \
- "\203::<\4""99;;;=::<kkm\211\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\376\376\376\221\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\237\377\377\377\1\316\316\316\205::<\1kkm\231\377\377\377\4\234" \
- "\234\236;;=::<;;=\202::<\3jjl\377\377\377\376\376\376\232\377\377\377" \
- "\10\265\265\265:::::<;;=::<99;::<\316\316\316\202\377\377\377\1\265\265" \
- "\267\204::<\3;;=::<\316\316\316\235\377\377\377\1\234\234\236\205::<" \
- "\1\234\234\234\241\377\377\377\2\363\363\363__a\203::<\4;;=::<;;=\234" \
- "\234\236\216\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377" \
- "\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214" \
- "\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \
- "\1\342\361\320\202\214\306>\1\214\305@\220\214\306>\10\215\304B\214\306" \
- "<\214\305@\215\305@\212\306@\215\305>\323\354\265\377\376\377\216\377" \
- "\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377" \
- "\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306" \
- ">\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207" \
- "\214\306>\3\214\305@\214\306>\214\305@\212\377\377\377\3\375\377\376" \
- "\377\377\377\377\377\375\202\377\377\377\26\377\377\375\375\377\374\376" \
- "\377\377\377\376\377\377\377\375\365\375\362\225\311K\212\306@\214\306" \
- ">\214\305@\212\306@\216\306=\211\306;\215\306A\214\306>\215\307\77\217" \
- "\304@\214\306>\212\307>\215\305@\214\305@\262\327z\203\377\377\377\13" \
- "\260\331{\213\310\77\214\305B\214\305@\215\305@\215\307\77\212\307<\216" \
- "\306A\213\305;\214\305@\215\305>\202\214\306>\11\215\305@\214\306<\276" \
- "\340\224\377\376\375\377\377\375\376\377\377\377\376\375\376\377\375" \
- "\377\376\377\202\377\377\377\1\376\377\375\221\377\377\377\1\346\346" \
- "\346\206::<\2:::\346\346\346\202\377\377\377\1\376\376\376\276\377\377" \
- "\377\1\316\316\316\205::<\1kkm\216\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\207\377\377\377\3\234\234\236::<;;=\203::<\1k" \
- "km\226\377\377\377\1\376\376\376\204\377\377\377\2\376\376\376lln\205" \
- "::<\1``b\204\377\377\377\1SSS\205::<\1kkm\235\377\377\377\1\234\234\236" \
- "\205::<\1\234\234\234\242\377\377\377\2\316\316\316:::\202::<\5;;=::" \
- "<;;=FFH\363\363\363\206\377\377\377\1\376\376\376\206\377\377\377\1\234" \
- "\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214" \
- "\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377" \
- "\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306" \
- ">\1\214\305@\210\214\306>\27\215\306A\212\307>\215\305>\215\305@\215" \
- "\307=\217\304B\214\306<\214\305@\215\307\77\215\305@\215\307\77\214\305" \
- "@\216\306\77\211\310<\226\312L\347\364\332\377\377\377\377\376\377\377" \
- "\377\375\374\377\377\377\376\377\376\376\376\376\377\377\207\377\377" \
- "\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252" \
- "\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214" \
- "\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \
- ">\3\214\305@\214\306>\214\305@\221\377\377\377\1\377\377\375\203\377" \
- "\377\377\5\333\355\303\214\306>\212\307<\216\306A\214\305@\202\214\306" \
- ">\15\215\305@\214\306>\212\306@\213\310\77\215\305>\216\306A\211\306" \
- "=\212\306@\212\307<\334\354\305\377\377\375\335\354\303\212\307>\210" \
- "\214\306>\10\216\306A\212\307;\215\306A\216\306A\214\305@\241\321a\371" \
- "\374\361\375\376\377\223\377\377\377\1\376\376\376\204\377\377\377\2" \
- "\376\376\376\234\234\234\203::<\1""99;\202::<\1\234\234\234\302\377\377" \
- "\377\1\316\316\316\205::<\1kkm\217\377\377\377\1\376\376\376\202\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377\377\3\376" \
- "\376\376\377\377\377xxz\202::<\5""99;::<;;=xxz\376\376\377\232\377\377" \
- "\377\3\317\317\31799;;;=\202::<\5;;=::<\265\265\265\377\377\377\376\376" \
- "\376\202\377\377\377\2\265\265\265;;=\202::<\203;;=\1\332\332\332\203" \
- "\377\377\377\1\376\376\376\230\377\377\377\1\234\234\236\205::<\1\234" \
- "\234\234\242\377\377\377\4\376\376\376\204\204\204::<;;=\202::<\3;;=" \
- "::<\266\266\266\207\377\377\377\1\376\376\376\205\377\377\377\1\234\234" \
- "\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305" \
- "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \
- "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \
- "\214\305@\211\214\306>\27\216\306A\214\306>\212\306@\214\306<\213\310" \
- "\77\215\305@\215\307\77\213\305=\216\306\77\212\307;\212\306@\215\305" \
- ">\215\306A\212\307>\245\320d\367\375\361\376\377\377\377\376\377\377" \
- "\377\377\376\376\377\377\376\377\375\377\376\377\377\375\206\377\377" \
- "\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252" \
- "\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214" \
- "\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \
- ">\3\214\305@\214\306>\214\305@\221\377\377\377\6\376\376\376\377\376" \
- "\377\377\377\377\375\377\376\376\377\377\270\333\207\203\214\306>\17" \
- "\211\306=\212\307<\214\306<\214\305@\215\307\77\214\305@\216\305C\214" \
- "\306>\212\310A\215\305@\216\306\77\223\312K\360\371\346\222\311I\214" \
- "\305@\210\214\306>\10\214\305@\212\307>\214\305@\216\306A\215\307=\350" \
- "\364\334\375\377\376\377\376\377\225\377\377\377\7\376\376\376\377\377" \
- "\377\376\376\376\377\377\377SSS::<;;=\203::<\5FFH\364\364\364\376\376" \
- "\376\377\377\377\376\376\376\277\377\377\377\1\316\316\316\205::<\1k" \
- "km\222\377\377\377\1\376\376\376\204\377\377\377\3\376\376\376\377\377" \
- "\377SSU\205::<\1\234\234\236\202\377\377\377\1\376\376\376\202\377\377" \
- "\377\1\376\376\376\220\377\377\377\1\376\376\376\204\377\377\377\2kk" \
- "m;;=\202::<\5;;=::<SSU\377\377\377\376\376\376\204\377\377\377\7SSU:" \
- ":<;;=::<;;=::<\205\205\205\234\377\377\377\1\234\234\236\205::<\1\234" \
- "\234\234\240\377\377\377\1\376\376\376\202\377\377\377\1\346\346\346" \
- "\202::<\1;;=\202::<\2;;=__a\205\377\377\377\1\376\376\376\202\377\377" \
- "\377\1\376\376\376\204\377\377\377\1\234\234\234\205::<\1\234\234\236" \
- "\266\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305" \
- "@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p" \
- "\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\27" \
- "\214\304=\215\305>\213\307A\212\306@\214\305B\215\305<\213\310=\215\307" \
- "\77\215\304B\214\306<\213\307A\215\305>\216\306A\212\306@\212\307>\270" \
- "\332\204\377\376\377\377\377\377\377\376\377\376\376\374\377\377\373" \
- "\377\376\377\377\377\375\206\377\377\377\213\214\306>\3\215\305>\214" \
- "\306>\305\342\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305" \
- "@\207\214\306>\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324" \
- "p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \
- "@\223\377\377\377\1\377\377\375\202\377\377\377\2\371\372\364\232\315" \
- "W\202\214\305@\4\214\306<\215\307\77\214\305B\215\306C\202\215\306A\1" \
- "\214\306<\202\212\307>\6\215\305@\212\307>\215\305>\212\306B\216\306" \
- "A\212\307>\210\214\306>\10\214\305B\215\307\77\214\306<\214\306>\304" \
- "\341\237\377\377\377\377\376\377\377\377\375\220\377\377\377\1\376\376" \
- "\376\203\377\377\377\1\376\376\376\203\377\377\377\10\301\301\301::<" \
- ";;=99;;;=::<99;\234\234\236\207\377\377\377\1\376\376\376\273\377\377" \
- "\377\1\316\316\316\205::<\1kkm\216\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\204\377\377\377\3\376\376\376\377\377\377\315" \
- "\315\315\202;;=\203::<\6;;=\265\265\267\377\377\377\376\376\376\377\377" \
- "\377\376\376\376\225\377\377\377\2\376\376\376\317\317\317\203::<\4;" \
- ";=::<;;=\264\264\264\206\377\377\377\10\234\234\234;;=::<;;=99;;;=::" \
- "<\346\346\346\233\377\377\377\1\234\234\236\205::<\1\234\234\234\237" \
- "\377\377\377\1\376\376\376\204\377\377\377\1\204\204\206\202::<\6;;=" \
- "99;;;=::<\346\346\346\376\376\376\204\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\204\377\377\377\1\234\234\234\205::<\1\234\234\236\266" \
- "\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215" \
- "\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377" \
- "\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306>\22\215\307" \
- "\77\212\307>\216\306A\212\304<\215\307\77\215\305@\216\306\77\213\307" \
- "A\214\306>\214\305@\215\307\77\213\310=\212\307>\214\306>\214\306<\214" \
- "\306>\216\306\77\324\353\267\202\376\376\376\3\377\377\377\376\376\377" \
- "\376\377\375\207\377\377\377\213\214\306>\3\215\305>\214\306>\305\342" \
- "\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \
- ">\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215" \
- "\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\221\377\377" \
- "\377\3\376\377\377\377\377\377\376\377\375\202\377\377\377\7\377\376" \
- "\377\341\363\315\215\305@\214\305@\215\306A\215\305@\216\306\77\202\214" \
- "\306>\12\214\305B\212\307<\213\304A\213\310=\216\306A\211\306;\213\310" \
- "=\214\305@\212\307>\215\305>\210\214\306>\10\215\307\77\214\304=\212" \
- "\307>\243\322b\377\377\377\376\377\377\377\376\377\377\377\375\226\377" \
- "\377\377\4\376\376\376\377\377\377\204\204\206;;=\203::<\3""99;;;=\364" \
- "\364\364\205\377\377\377\1\376\376\376\275\377\377\377\1\316\316\316" \
- "\205::<\1kkm\217\377\377\377\202\376\376\376\202\377\377\377\1\376\376" \
- "\376\203\377\377\377\4\376\376\376xxz;;=99;\202;;=\4::<;;=\346\346\346" \
- "\376\376\376\204\377\377\377\1\376\376\376\224\377\377\377\1xxz\203:" \
- ":<\3;;=::<SSU\203\377\377\377\1\376\376\376\203\377\377\377\2\363\363" \
- "\363FFH\202::<\4;;=99;::<\204\204\206\233\377\377\377\1\234\234\236\205" \
- "::<\1\234\234\234\244\377\377\377\1\316\316\316\202;;=\5::<;;=99;;;=" \
- "\250\250\252\203\377\377\377\1\376\376\376\210\377\377\377\1\234\234" \
- "\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305" \
- "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \
- "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \
- "\214\305@\210\214\306>\7\213\305=\214\306<\210\306\77\216\306\77\215" \
- "\307=\214\306>\215\307\77\202\214\306>\14\215\307\77\214\305B\214\306" \
- "<\212\307<\214\305@\216\306\77\215\305>\214\305@\224\313L\352\364\331" \
- "\374\377\377\377\376\377\211\377\377\377\213\214\306>\3\215\305>\214" \
- "\306>\305\342\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305" \
- "@\207\214\306>\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324" \
- "p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \
- "@\222\377\377\377\1\376\377\377\202\377\377\377\24\376\376\374\376\377" \
- "\375\377\375\377\277\337\224\214\306>\212\307>\215\307\77\214\304=\215" \
- "\307=\213\304A\214\306<\212\307>\215\307\77\214\305@\213\304\77\215\307" \
- "\77\215\305@\214\304=\215\305<\215\306A\210\214\306>\1\212\307>\202\215" \
- "\306A\4\350\365\333\377\375\376\377\376\377\375\376\377\226\377\377\377" \
- "\1\376\376\376\202\377\377\377\3TTV::<99;\202;;=\4::<\203\203\203\377" \
- "\377\377\376\376\376\302\377\377\377\1\316\316\316\205::<\1kkm\222\377" \
- "\377\377\1\376\376\376\204\377\377\377\3\300\300\302;;=::<\202;;=\202" \
- "::<\2```\376\376\376\227\377\377\377\7\376\376\376\377\377\377\346\346" \
- "\346;;=99;::<;;=\202::<\3\251\251\251\377\377\377\376\376\376\206\377" \
- "\377\377\1\234\234\234\202::<\1;;=\202::<\2;;=\346\346\346\232\377\377" \
- "\377\1\234\234\236\205::<\1\234\234\234\235\377\377\377\1\376\376\376" \
- "\207\377\377\377\11SSU::<;;=99;<<>::<xxz\377\377\377\376\376\376\212" \
- "\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214" \
- "\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252" \
- "\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361" \
- "\320\202\214\306>\1\214\305@\210\214\306>\25\213\307A\216\306A\232\315" \
- "W\215\306C\212\306@\214\305@\212\307;\216\306A\215\305>\215\307\77\214" \
- "\305@\215\307\77\214\306>\214\305@\212\306B\213\307C\214\306>\215\305" \
- "@\232\315V\372\374\367\376\376\376\202\377\377\375\1\376\376\376\206" \
- "\377\377\377\213\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \
- "\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214" \
- "\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@" \
- "\207\214\306>\3\214\305@\214\306>\214\305@\221\377\377\377\5\377\376" \
- "\377\376\377\377\377\375\376\377\376\377\376\377\377\202\377\377\377" \
- "\10\370\373\362\233\314V\213\307A\211\306=\215\307\77\212\307<\212\306" \
- "@\215\305<\202\214\306>\7\215\307=\215\306A\214\305@\212\307>\216\306" \
- "A\212\306@\215\307=\210\214\306>\10\212\307>\212\307<\313\347\254\376" \
- "\377\377\377\377\377\377\376\377\376\377\377\377\377\375\223\377\377" \
- "\377\1\376\376\376\203\377\377\377\1\332\332\332\202::<\1;;=\203::<\1" \
- "\302\302\302\203\377\377\377\5\376\376\376\377\377\377\376\376\376\377" \
- "\377\377\376\376\376\274\377\377\377\1\316\316\316\205::<\1kkm\217\377" \
- "\377\377\1\376\376\376\206\377\377\377\3\332\332\334FFH;;=\205::<\1\265" \
- "\265\265\202\377\377\377\1\376\376\376\224\377\377\377\1\376\376\376" \
- "\202\377\377\377\1\205\205\207\202::<\1;;=\202::<\2GGI\363\363\363\202" \
- "\377\377\377\1\376\376\376\205\377\377\377\1\363\363\363\202::<\1;;=" \
- "\202::<\2""99;\234\234\234\203\377\377\377\1\376\376\376\226\377\377" \
- "\377\1\234\234\236\205::<\1\234\234\234\234\377\377\377\1\376\376\376" \
- "\210\377\377\377\3\222\222\222::<99;\202;;=\5""99;GGI\376\376\376\377" \
- "\377\377\376\376\376\211\377\377\377\1\234\234\234\205::<\1\234\234\236" \
- "\266\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305" \
- "@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p" \
- "\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306>\10" \
- "\213\307A\214\306>\331\356\303\232\315W\215\305>\215\306A\214\305B\214" \
- "\306>\202\214\305@\7\213\310=\214\306>\215\304B\215\306A\211\306;\213" \
- "\310\77\214\305@\202\215\307\77\2\257\326{\376\377\373\202\377\377\377" \
- "\1\377\377\375\206\377\377\377\213\214\306>\3\215\305>\214\306>\305\342" \
- "\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306" \
- ">\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215" \
- "\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\221\377\377" \
- "\377\6\377\377\373\377\377\375\377\377\377\376\376\377\377\376\377\373" \
- "\377\374\202\377\376\377\4\336\362\315\220\303@\213\310=\215\307\77\202" \
- "\212\306@\1\215\305@\202\214\306>\7\213\305=\214\306>\213\305=\214\305" \
- "@\213\310\77\212\306@\213\307A\210\214\306>\10\215\307\77\252\324p\377" \
- "\377\375\376\377\377\377\377\375\377\377\377\377\376\377\377\377\375" \
- "\220\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\265\265\265\204::<\5;;=::<\363\363\363\377\377\377\376\376" \
- "\376\302\377\377\377\1\316\316\316\205::<\1kkm\225\377\377\377\2\317" \
- "\317\317FFH\206::<\1SSU\204\377\377\377\1\376\376\376\225\377\377\377" \
- "\2\346\346\346;;=\203::<\3;;=::<\234\234\236\202\377\377\377\1\376\376" \
- "\376\207\377\377\377\2\204\204\206;;=\204::<\2FFF\362\362\362\231\377" \
- "\377\377\1\234\234\236\205::<\1\234\234\234\245\377\377\377\1\301\301" \
- "\301\202::<\6;;=::<;;=::<\347\347\347\376\376\376\212\377\377\377\1\234" \
- "\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214" \
- "\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377" \
- "\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306" \
- ">\1\214\305@\210\214\306>\27\214\305@\215\305<\342\362\315\353\365\334" \
- "\223\312K\215\305<\212\306@\215\305<\212\307>\215\306A\214\306>\212\307" \
- ">\215\307\77\215\304B\215\307\77\215\305@\214\306>\215\305>\214\305@" \
- "\215\305<\315\345\253\377\377\375\376\377\377\207\377\377\377\213\214" \
- "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \
- "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \
- "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \
- "\305@\214\306>\214\305@\221\377\377\377\14\376\377\377\376\376\377\377" \
- "\377\377\377\377\373\376\377\375\377\376\377\376\377\377\377\377\377" \
- "\377\376\375\276\340\224\214\306<\215\305@\202\214\306>\12\215\305>\214" \
- "\305@\215\305@\214\305@\213\310\77\214\306>\216\306\77\211\305\77\215" \
- "\307=\214\305@\210\214\306>\4\223\312K\360\367\347\377\377\377\377\377" \
- "\375\232\377\377\377\2\376\376\376\234\234\236\204::<\2;;=___\234\377" \
- "\377\377\1\376\376\376\203\377\377\377\1\376\376\376\244\377\377\377" \
- "\1\316\316\316\205::<\1kkm\202\377\377\377\1\376\376\376\216\377\377" \
- "\377\4\376\376\376\377\377\377\347\347\347\204\204\204\203::<\6;;=::" \
- "<;;=::<;;=\301\301\303\226\377\377\377\1\376\376\376\203\377\377\377" \
- "\1\203\203\205\202;;=\5::<;;=::<GGG\363\363\363\206\377\377\377\1\376" \
- "\376\376\203\377\377\377\3\347\347\34799;;;=\202::<\202;;=\1\234\234" \
- "\236\231\377\377\377\1\234\234\236\205::<\1\234\234\234\245\377\377\377" \
- "\1\363\363\363\202::<\1""99;\203::<\1\316\316\316\213\377\377\377\1\234" \
- "\234\234\204::<\2;;=kkm\203\234\234\236\2\235\235\237\234\234\234\220" \
- "\234\234\236\204\234\234\234\4\235\235\235\234\234\234\234\234\236\346" \
- "\346\350\231\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4" \
- "\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250" \
- "\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210\214\306" \
- ">\40\213\307A\215\305>\341\360\317\377\375\376\324\353\267\215\304B\214" \
- "\306>\215\307=\214\305@\212\307>\212\307<\215\305<\215\306A\214\306>" \
- "\214\306<\212\306@\214\305@\215\307\77\216\306=\212\306B\214\306>\352" \
- "\364\333\377\376\377\377\377\377\377\376\377\377\377\377\377\377\375" \
- "\376\377\373\375\376\377\377\376\377\214\306>\215\307\77\211\214\306" \
- ">\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214\306" \
- ">\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232\377" \
- "\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305" \
- "@\214\306>\214\305@\232\377\377\377\7\374\377\375\242\321a\216\306A\212" \
- "\307>\214\306>\215\307\77\212\307<\210\214\306>\16\215\307\77\214\307" \
- ";\213\304\77\216\306A\214\305B\215\307\77\215\305>\212\307>\320\345\254" \
- "\374\377\377\377\376\377\377\377\375\377\376\377\375\377\372\223\377" \
- "\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377\377\377kkm\203" \
- "::<\3<<>::<\221\221\221\305\377\377\377\1\316\316\316\204::<\2;;=jjl" \
- "\217\377\377\377\16\316\316\316\300\300\300\234\234\234__a::<;;=::<;" \
- ";=::<99;;;=::<;;=\204\204\206\232\377\377\377\1\362\362\362\202;;=\202" \
- "::<\3""99;::<\235\235\235\212\377\377\377\12\376\376\376\377\377\377" \
- "\205\205\20799;;;=::<;;=::<GGI\376\376\376\230\377\377\377\1\234\234" \
- "\236\205::<\1\234\234\234\246\377\377\377\10EEG::<;;=::<99;;;=\234\234" \
- "\234\377\377\377\202\376\376\376\202\377\377\377\1\376\376\376\205\377" \
- "\377\377\1\234\234\234\205::<\2;;=99;\202;;=\2""99;;;=\221::<\1""99;" \
- "\203::<\3;;=::<\316\316\316\231\377\377\377\3\214\305@\214\306>\214\305" \
- "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \
- "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \
- "\214\305@\210\214\306>\202\214\306<\32\342\361\322\377\377\377\377\377" \
- "\375\266\334\205\212\306B\215\307\77\212\306@\220\306=\214\306>\215\307" \
- "\77\214\305B\213\305=\216\306\77\215\307\77\215\305<\212\306B\215\306" \
- "A\215\305@\216\306=\232\315V\371\373\360\377\377\375\377\377\377\375" \
- "\376\377\377\375\377\376\376\377\202\377\377\377\2\214\305@\212\307>" \
- "\211\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324" \
- "p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \
- "@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>" \
- "\3\214\305@\214\306>\214\305@\233\377\377\377\5\347\365\334\211\306=" \
- "\215\305>\216\306=\214\305@\211\214\306>\2\215\304B\212\307>\202\214" \
- "\306>\14\215\306A\214\306<\215\305@\252\324p\374\377\377\377\377\377" \
- "\377\375\376\377\376\377\376\376\377\377\377\375\377\377\377\377\375" \
- "\377\222\377\377\377\1\376\376\376\203\377\377\377\4\376\376\376lln:" \
- ":<;;=\203::<\2\235\235\235\376\376\376\304\377\377\377\1\316\316\316" \
- "\205::<\202;;=\2::<;;=\202::<\1;;=\211::<\202;;=\204::<\1""99;\202::" \
- "<\5;;=::<;;=__a\376\376\376\224\377\377\377\1\376\376\376\205\377\377" \
- "\377\1\235\235\235\206::<\3\346\346\346\377\377\377\376\376\376\207\377" \
- "\377\377\5\376\376\376\377\377\377\376\376\376\346\346\350;;=\203::<" \
- "\3;;=::<\265\265\265\230\377\377\377\1\234\234\236\205::<\1\234\234\234" \
- "\246\377\377\377\1lln\202::<\4""99;;;=99;\234\234\234\213\377\377\377" \
- "\1\234\234\234\203::<\7;;=::<;;=::<;;=::<;;=\222::<\7;;=99;;;=::<;;=" \
- "::<\316\316\316\231\377\377\377\3\214\305@\214\306>\214\305@\207\214" \
- "\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306" \
- ">\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210" \
- "\214\306>\13\216\306A\213\310\77\343\361\320\377\377\375\375\377\376" \
- "\371\374\361\242\320c\213\310\77\216\306\77\214\306>\215\306A\202\214" \
- "\305@\2\216\306A\213\305=\204\214\306>\11\213\307A\216\306A\212\307>" \
- "\260\331y\377\376\377\376\377\375\377\377\373\376\377\377\377\377\377" \
- "\202\377\376\377\2\212\311=\215\306A\211\214\306>\3\215\305>\214\306" \
- ">\305\342\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207" \
- "\214\306>\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324p\214" \
- "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\231" \
- "\377\377\377\6\377\376\377\377\377\373\377\376\377\305\342\240\212\310" \
- "\77\214\304=\202\215\305@\210\214\306>\4\215\305>\213\305=\212\306@\215" \
- "\306A\202\214\306>\10\222\312M\370\373\362\377\376\377\377\375\376\377" \
- "\376\377\377\377\377\376\377\375\377\377\377\202\377\376\377\221\377" \
- "\377\377\1\376\376\376\205\377\377\377\2::<;;=\202::<\202;;=\3\300\300" \
- "\300\377\377\377\376\376\376\235\377\377\377\1\376\376\376\245\377\377" \
- "\377\1\316\316\316\207::<\5;;=::<;;=::<;;=\210::<\202;;=\2""99;;;=\202" \
- "::<\3;;=::<;;=\202::<\3;;=xxz\363\363\363\225\377\377\377\3\376\376\376" \
- "\377\377\377\376\376\376\202\377\377\377\3\363\363\363FFH::<\202;;=\202" \
- "::<\1\204\204\206\205\377\377\377\1\376\376\376\205\377\377\377\1\376" \
- "\376\376\202\377\377\377\1kkm\202::<\1;;=\202::<\1SSU\230\377\377\377" \
- "\1\234\234\236\205::<\1\234\234\234\244\377\377\377\3\376\376\376\377" \
- "\377\377xxz\202::<\1;;=\202::<\3xxx\377\377\377\376\376\376\211\377\377" \
- "\377\1\234\234\234\203::<\1;;=\202::<\1;;=\224::<\5;;=99;;;=::<;;=\202" \
- "::<\1\316\316\316\231\377\377\377\3\214\305@\214\306>\214\305@\207\214" \
- "\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306" \
- ">\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210" \
- "\214\306>\3\214\305@\214\306<\343\361\316\202\377\377\377\26\377\376" \
- "\374\353\365\335\223\312K\211\305\77\215\307=\215\306C\211\306;\214\306" \
- ">\215\305@\215\307\77\214\305@\213\307A\214\306>\212\307<\216\306\77" \
- "\212\306B\215\305>\212\306@\304\341\236\377\376\377\375\377\376\377\377" \
- "\375\203\377\377\377\2\212\306@\214\306<\211\214\306>\3\215\305>\214" \
- "\306>\305\342\240\215\377\377\377\4\252\324p\214\306>\215\305>\214\305" \
- "@\207\214\306>\3\214\305@\214\306>\214\305@\232\377\377\377\4\252\324" \
- "p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \
- "@\231\377\377\377\2\377\377\373\376\377\377\202\377\377\377\4\241\321" \
- "c\215\306A\215\305>\213\310\77\210\214\306>\20\215\305@\215\307=\213" \
- "\310\77\214\304;\216\306\77\213\310\77\333\355\303\377\375\376\377\377" \
- "\375\377\376\377\377\377\377\375\377\374\376\377\377\377\377\377\377" \
- "\377\375\376\376\376\222\377\377\377\1\376\376\376\204\377\377\377\206" \
- "::<\2\316\316\316\376\376\376\234\377\377\377\1\376\376\376\247\377\377" \
- "\377\1\316\316\316\204::<\1;;=\205::<\1;;=\212::<\4""99;;;=::<;;=\203" \
- "::<\1;;=\202::<\1\233\233\233\234\377\377\377\3\235\235\23799;;;=\203" \
- "::<\2;;=\346\346\346\203\377\377\377\1\376\376\376\204\377\377\377\3" \
- "\376\376\376\377\377\377\376\376\376\203\377\377\377\4\316\316\320;;" \
- "=::<;;=\202::<\2;;=\264\264\264\227\377\377\377\1\234\234\236\205::<" \
- "\1\234\234\234\246\377\377\377\2\234\234\236;;=\203::<\2;;=kkk\213\377" \
- "\377\377\1\234\234\234\204::<\3;;=::<;;=\225::<\2;;=99;\202::<\3;;=:" \
- "::\316\316\316\231\377\377\377\3\214\305@\214\306>\214\305@\207\214\306" \
- ">\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214\306>" \
- "\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\210" \
- "\214\306>\14\215\307\77\215\305@\340\361\315\376\376\376\377\376\377" \
- "\377\377\375\377\377\377\323\353\267\212\307>\215\305@\214\305@\214\311" \
- "@\202\214\306>\22\212\307>\215\305@\214\306>\212\306@\214\305@\215\305" \
- ">\215\307=\214\306>\214\304=\215\307\77\341\362\316\377\376\377\377\377" \
- "\377\376\376\376\377\377\375\375\376\377\217\307@\212\306@\211\214\306" \
- ">\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214\306" \
- ">\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232\377" \
- "\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305" \
- "@\214\306>\214\305@\232\377\377\377\7\377\376\377\376\377\377\377\377" \
- "\377\352\364\331\212\307<\215\307=\212\307>\211\214\306>\13\212\306@" \
- "\214\306<\216\306A\214\305@\252\322q\376\376\377\376\377\373\377\376" \
- "\377\376\376\377\377\377\375\376\377\377\203\377\377\377\1\376\377\375" \
- "\227\377\377\377\202::<\202;;=\3::<;;=\316\316\316\233\377\377\377\1" \
- "\375\375\375\251\377\377\377\1\316\316\316\211::<\1;;=\213::<\3;;=::" \
- "<;;=\204::<\3""99;\205\205\207\346\346\346\233\377\377\377\4\376\376" \
- "\376\364\364\364FFH;;=\202::<\202;;=\1\204\204\204\215\377\377\377\1" \
- "\376\376\376\202\377\377\377\7kkm::<99;::<;;=99;TTV\227\377\377\377\1" \
- "\234\234\236\205::<\1\234\234\234\246\377\377\377\1\234\234\236\202:" \
- ":<\202;;=\2::<kkk\202\377\377\377\3\376\376\376\377\377\377\376\376\376" \
- "\206\377\377\377\1\234\234\234\203::<\1;;=\202::<\2;;=::<\202;;=\223" \
- "::<\2""99;;;=\202::<\2;;;\316\316\316\231\377\377\377\3\214\305@\214" \
- "\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251" \
- "\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202" \
- "\214\306>\1\214\305@\210\214\306>\202\214\305@\15\341\362\316\377\377" \
- "\375\376\377\375\377\377\377\373\377\374\377\376\377\271\332\211\212" \
- "\307>\212\307<\214\305B\214\305@\216\306\77\212\307>\202\215\307\77\11" \
- "\214\305B\215\306A\212\311=\214\303A\214\306>\215\306A\212\307>\225\311" \
- "K\371\372\362\202\377\377\375\202\377\377\377\2\214\305@\215\306A\211" \
- "\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p" \
- "\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305" \
- "@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>" \
- "\3\214\305@\214\306>\214\305@\231\377\377\377\10\376\377\377\377\376" \
- "\377\377\377\375\377\375\376\331\356\303\214\306>\214\305B\215\307\77" \
- "\210\214\306>\12\215\305>\212\306B\215\304B\214\306>\215\307=\224\310" \
- "J\364\370\351\376\376\374\375\377\372\377\377\375\203\377\377\377\3\377" \
- "\376\377\377\377\377\376\377\375\221\377\377\377\3\376\376\376\377\377" \
- "\377\376\376\376\203\377\377\377\7::<;;=99;::<;;=::<\315\315\315\232" \
- "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\246\377\377" \
- "\377\1\316\316\316\204::<\1;;=\202::<\1;;=\203::<\1;;=\210::<\1;;=\202" \
- "::<\1;;=\202::<\4``b\233\233\235\347\347\351\376\376\376\235\377\377" \
- "\377\2\265\265\265;;=\202::<\1;;=\202::<\1\332\332\332\216\377\377\377" \
- "\3\376\376\376\377\377\377\302\302\302\206::<\1\315\315\315\226\377\377" \
- "\377\1\234\234\236\205::<\1\234\234\234\245\377\377\377\2\376\376\376" \
- "\235\235\237\205::<\1jjj\203\377\377\377\3\376\376\376\377\377\377\376" \
- "\376\376\205\377\377\377\1\234\234\234\204::<\2;;=kkm\202\234\234\236" \
- "\1\233\233\235\223\234\234\234\202\235\235\235\1\233\233\233\203\234" \
- "\234\234\1\346\346\346\231\377\377\377\3\214\305@\214\306>\214\305@\207" \
- "\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214" \
- "\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305" \
- "@\210\214\306>\17\212\307>\216\306A\342\360\315\376\377\377\376\376\374" \
- "\375\377\376\377\376\377\377\376\374\377\377\375\242\320d\215\307=\214" \
- "\306>\214\305@\215\305@\212\306@\202\214\305@\17\215\305@\212\307>\215" \
- "\307\77\214\306<\215\306A\213\304\77\215\306A\215\307\77\252\324n\377" \
- "\377\377\375\377\376\377\376\377\377\377\375\212\307<\215\305@\211\214" \
- "\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\4\252\324p\214" \
- "\306>\215\305>\214\305@\207\214\306>\3\214\305@\214\306>\214\305@\232" \
- "\377\377\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214" \
- "\305@\214\306>\214\305@\232\377\377\377\6\376\377\375\377\375\377\367" \
- "\375\363\223\312H\216\306\77\215\305>\212\214\306>\2\215\305@\214\306" \
- ">\202\212\307>\3\214\305@\247\324o\377\376\377\202\377\377\377\2\377" \
- "\376\377\377\377\375\233\377\377\377\2::<;;=\204::<\2\316\316\316\376" \
- "\376\376\236\377\377\377\3\316\316\316;;;:::\230::<\213\377\377\377\1" \
- "\316\316\316\224::<\6kkmlln\205\205\207\234\234\236\301\301\303\363\363" \
- "\363\202\377\377\377\1\376\376\376\202\377\377\377\3\376\376\376\377" \
- "\377\377\376\376\376\231\377\377\377\1SSS\204::<\2;;=lln\213\377\377" \
- "\377\1\376\376\376\205\377\377\377\2\376\376\376TTV\205::<\1lll\226\377" \
- "\377\377\1\234\234\236\205::<\1\234\234\234\246\377\377\377\2\233\233" \
- "\235;;=\204::<\2kkk\376\376\376\203\377\377\377\1\376\376\376\206\377" \
- "\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305" \
- "@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324" \
- "p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320" \
- "\202\214\306>\1\214\305@\210\214\306>\3\212\307>\215\305>\342\362\315" \
- "\202\377\377\377\22\377\376\377\376\377\377\377\377\375\376\377\377\363" \
- "\367\346\225\311K\211\307@\216\306\77\212\307>\215\305@\214\306<\212" \
- "\307>\214\305@\214\306>\212\306@\215\306C\214\304\77\215\307\77\202\214" \
- "\306>\7\212\306@\307\341\240\377\376\377\376\377\372\377\377\377\212" \
- "\307>\215\305>\211\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \
- "\377\4\252\324p\214\306>\215\305>\214\305@\207\214\306>\3\214\305@\214" \
- "\306>\214\305@\232\377\377\377\4\252\324p\214\306>\215\305>\214\305@" \
- "\207\214\306>\3\214\305@\214\306>\214\305@\231\377\377\377\4\377\376" \
- "\377\376\377\375\376\377\377\257\330z\202\214\305@\1\215\307\77\211\214" \
- "\306>\14\212\307>\215\307\77\214\305@\215\305@\212\307>\215\307=\214" \
- "\305B\313\347\252\377\377\377\377\375\377\377\376\377\376\376\376\202" \
- "\376\377\375\231\377\377\377\4GGI;;=::<;;=\202::<\1\233\233\235\237\377" \
- "\377\377\3\316\316\316::<;;=\230::<\213\377\377\377\1\316\316\316\205" \
- "::<\1kkm\202\377\377\377\2\376\376\376\250\250\250\206::<\2FFH\346\346" \
- "\346\210\377\377\377\1\376\376\376\237\377\377\377\1\264\264\266\203" \
- ";;=\4::<;;=;;;\316\316\316\222\377\377\377\1\265\265\265\204::<\3;;=" \
- "::<\316\316\316\203\377\377\377\1\376\376\376\221\377\377\377\1\234\234" \
- "\236\205::<\1\234\234\234\245\377\377\377\2\376\376\376\235\235\237\205" \
- "::<\1lll\213\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377" \
- "\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214" \
- "\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \
- "\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361" \
- "\316\205\377\377\377\10\376\377\375\377\377\377\333\355\303\215\305@" \
- "\214\306>\214\306<\214\305@\215\305>\202\214\305@\207\214\306>\6\212" \
- "\306@\214\307;\330\355\304\377\376\377\377\377\377\215\305>\212\214\306" \
- ">\3\215\305>\214\306>\305\342\240\215\377\377\377\17\251\323q\214\306" \
- ">\215\307\77\214\305B\215\307\77\213\305=\215\307\77\214\305@\212\307" \
- ">\215\305@\213\310\77\214\305@\215\305<\214\306>\376\377\377\230\377" \
- "\377\377\6\376\377\377\253\323p\215\305@\213\307A\214\306<\212\306B\202" \
- "\214\306>\4\214\305@\214\306>\212\307>\214\305@\202\214\306>\2\214\305" \
- "@\376\377\375\220\377\377\377\1\377\377\375\202\377\377\377\16\376\377" \
- "\375\377\376\377\377\375\376\374\377\377\377\377\375\376\377\375\377" \
- "\377\377\336\355\304\214\306>\215\306A\214\306>\215\306A\212\306@\216" \
- "\306A\202\214\305@\4\215\307\77\214\306>\215\307\77\214\306>\202\214" \
- "\305@\16\214\306>\215\307\77\214\306>\215\307\77\214\305@\214\305B\222" \
- "\313H\361\370\346\376\377\377\377\377\377\377\376\377\377\377\377\374" \
- "\377\377\377\376\377\230\377\377\377\1kkm\202::<\1""99;\202::<\1\235" \
- "\235\237\233\377\377\377\1\376\376\376\203\377\377\377\1\316\316\316" \
- "\224::<\1;;=\205::<\213\377\377\377\1\316\316\316\205::<\1kkm\204\377" \
- "\377\377\3wwy::<;;=\202::<\4""99;;;=``b\363\363\363\206\377\377\377\1" \
- "\376\376\376\235\377\377\377\4\376\376\376\377\377\377\376\376\376TT" \
- "V\205::<\1lln\223\377\377\377\10\376\376\376SSU;;=::<;;=99;::<lll\205" \
- "\377\377\377\1\376\376\376\217\377\377\377\1\234\234\236\205::<\1\234" \
- "\234\234\246\377\377\377\1\204\204\206\202::<\1;;=\202::<\3xxx\377\377" \
- "\377\376\376\376\211\377\377\377\1\234\234\234\205::<\1\234\234\236\266" \
- "\377\377\377\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215" \
- "\305>\214\306>\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377" \
- "\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305" \
- "@\343\361\316\205\377\377\377\7\377\375\377\377\377\375\376\377\377\276" \
- "\337\220\213\310\77\213\304A\216\306=\207\214\306>\3\215\307\77\214\306" \
- ">\212\307>\202\215\305>\5\223\312J\361\371\344\377\375\377\212\307<\214" \
- "\305@\211\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\14" \
- "\376\376\374\252\324n\214\306>\213\305=\215\307\77\214\305@\215\306A" \
- "\214\306>\215\307\77\213\310\77\215\305@\212\307>\202\214\306>\1\214" \
- "\305@\232\377\377\377\3\247\324m\215\305>\214\305@\202\214\306>\1\215" \
- "\307=\202\214\305@\6\214\306<\215\307=\214\305B\215\307\77\214\306>\214" \
- "\305@\224\377\377\377\15\377\377\375\376\376\376\377\377\377\377\376" \
- "\377\376\377\375\377\377\375\372\373\366\222\312M\216\306A\215\305<\214" \
- "\306>\212\307>\215\305<\202\214\306>\2\215\307\77\213\305=\204\214\306" \
- ">\1\214\305@\203\214\306>\14\215\307\77\214\305@\213\304\77\214\305B" \
- "\253\324n\376\376\377\376\377\377\377\376\377\377\377\377\376\377\375" \
- "\377\377\375\376\377\375\227\377\377\377\3lln::<;;=\203::<\2kkm\376\376" \
- "\376\236\377\377\377\2\316\316\316;;=\226::<\3;;=::<kkm\213\377\377\377" \
- "\1\316\316\316\204::<\2;;=kkm\204\377\377\377\3\363\363\363__a;;=\203" \
- "::<\4;;=99;\205\205\207\376\376\376\202\377\377\377\1\376\376\376\203" \
- "\377\377\377\1\376\376\376\236\377\377\377\1\301\301\301\204::<\4;;=" \
- "::<wwy\235\235\237\223\234\234\236\1kkm\204::<\5;;=99;\345\345\345\377" \
- "\377\377\376\376\376\222\377\377\377\1\234\234\236\205::<\1\234\234\234" \
- "\246\377\377\377\1kkm\204::<\2;;=\234\234\234\213\377\377\377\1\234\234" \
- "\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305" \
- "@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377" \
- "\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1" \
- "\214\305@\211\214\306>\2\214\305@\343\361\316\205\377\377\377\2\377\377" \
- "\375\377\375\377\202\377\377\377\1\242\322b\202\214\305@\2\214\305B\215" \
- "\307\77\205\214\306>\12\215\307\77\214\306>\215\306A\214\306>\212\306" \
- "@\215\307=\241\321c\377\377\377\215\304B\212\307>\211\214\306>\3\215" \
- "\305>\214\306>\305\342\240\214\377\377\377\5\376\377\375\251\323o\215" \
- "\307\77\214\306>\215\307\77\202\214\305@\2\214\306>\215\307\77\202\214" \
- "\306>\5\213\310\77\215\305>\214\305@\214\306>\377\376\377\230\377\377" \
- "\377\12\377\376\377\247\326p\213\304\77\215\307\77\214\305B\214\306<" \
- "\214\306>\215\307\77\214\305@\214\306>\202\215\307\77\3\214\306>\215" \
- "\306A\216\306\77\223\377\377\377\5\376\377\372\377\377\375\376\376\376" \
- "\377\377\377\377\377\375\202\377\376\377\4\250\325p\212\307<\214\305" \
- "@\215\307\77\202\214\305@\3\214\307;\215\307=\214\306>\202\214\305@\202" \
- "\214\306>\1\215\307\77\207\214\306>\202\214\305@\5\212\307>\307\341\240" \
- "\376\376\374\377\377\377\377\376\377\202\377\377\377\1\376\376\374\227" \
- "\377\377\377\7\234\234\236;;=99;<<>99;::<;;=\237\377\377\377\1\316\316" \
- "\316\223::<\7;;=99;;;=99;::<;;=kkm\213\377\377\377\1\316\316\316\205" \
- "::<\2mmo\376\376\377\204\377\377\377\12\332\332\332FFH;;=::<;;=99;<<" \
- ">::<\266\266\270\376\376\376\203\377\377\377\1\376\376\376\202\377\377" \
- "\377\1\376\376\376\230\377\377\377\3\376\376\376\377\377\377\376\376" \
- "\376\202\377\377\377\1kkm\205::<\202;;=\224::<\10;;=::<;;=::<;;=88:;" \
- ";=\205\205\205\224\377\377\377\1\234\234\236\205::<\1\234\234\234\246" \
- "\377\377\377\3SSU;;=::<\203;;=\1\234\234\234\206\377\377\377\1\376\376" \
- "\376\204\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377" \
- "\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306" \
- ">\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1" \
- "\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361" \
- "\316\205\377\377\377\10\376\376\374\376\377\375\377\375\377\377\377\377" \
- "\367\372\357\224\313L\214\305B\215\305<\203\214\306>\202\215\307\77\204" \
- "\214\306>\6\215\306A\213\307A\214\306>\212\306@\277\337\223\215\305>" \
- "\212\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\2\376\377" \
- "\377\251\322r\202\215\307\77\1\214\305B\202\214\306>\202\215\307\77\7" \
- "\214\306>\215\307\77\214\306>\214\304\77\212\306@\215\307\77\377\376" \
- "\377\230\377\377\377\7\377\377\375\215\305@\214\306>\214\305@\214\306" \
- ">\216\306\77\214\306<\203\214\305@\6\215\306C\215\307=\214\305@\215\306" \
- "A\233\314V\377\377\375\220\377\377\377\5\376\376\376\377\377\377\377" \
- "\376\377\377\375\377\377\377\375\202\376\377\377\21\377\376\377\314\346" \
- "\251\212\306B\215\307=\212\307>\216\306\77\215\306C\212\307>\215\306" \
- "C\214\305@\215\307\77\213\304\77\215\306A\214\306>\214\305@\215\307\77" \
- "\215\306A\203\214\306>\1\215\307\77\202\214\306>\202\215\307\77\10\214" \
- "\306>\214\305@\350\364\334\377\377\375\377\376\377\377\377\377\376\376" \
- "\376\377\376\377\222\377\377\377\1\376\376\376\204\377\377\377\1\301" \
- "\301\301\202::<\2""99;;;=\202::<\1\316\316\316\233\377\377\377\1\376" \
- "\376\376\202\377\377\377\2\316\316\316;;;\222::<\7""99;;;=::<;;=::<9" \
- "9;\204\204\206\213\377\377\377\1\316\316\316\205::<\1jjl\202\377\377" \
- "\377\202\376\376\376\202\377\377\377\1\265\265\267\202::<\202;;=\202" \
- "::<\2FFH\332\332\332\205\377\377\377\1\376\376\376\234\377\377\377\2" \
- "\376\376\376\317\317\317\202::<\1;;=\204::<\3;;=::<;;=\222::<\2""99;" \
- ";;=\202::<\1;;=\203::<\3\346\346\346\377\377\377\376\376\376\221\377" \
- "\377\377\1\234\234\236\205::<\1\234\234\234\246\377\377\377\1;;=\203" \
- "::<\4;;=::<\316\316\316\376\376\376\203\377\377\377\1\376\376\376\206" \
- "\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214" \
- "\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306>\252" \
- "\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361" \
- "\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316\205" \
- "\377\377\377\203\376\377\377\202\377\376\377\2\341\361\315\214\305@\203" \
- "\215\307\77\202\214\306>\1\215\307\77\203\214\306>\10\214\305@\215\307" \
- "\77\214\306>\212\307>\216\306A\213\305;\214\305@\215\305<\211\214\306" \
- ">\3\215\305>\214\306>\305\342\240\214\377\377\377\2\376\377\377\252\324" \
- "p\202\214\306>\3\214\305B\214\306<\215\307\77\203\214\306>\6\214\306" \
- "<\214\307;\217\307@\212\307>\214\305@\376\377\377\231\377\377\377\10" \
- "\215\307=\214\305B\213\304A\216\310@\214\304\77\215\307=\214\305@\215" \
- "\307\77\203\214\306>\3\215\307\77\214\306>\247\324o\222\377\377\377\3" \
- "\377\377\375\377\377\377\377\375\376\203\377\377\377\20\360\371\346\223" \
- "\312K\216\306\77\213\304A\215\306A\213\305=\215\305@\212\307>\215\305" \
- "<\214\305B\214\305@\214\306>\214\306<\214\306>\215\307\77\213\305=\204" \
- "\214\306>\202\215\307\77\203\214\306>\10\215\306A\212\307<\243\321d\377" \
- "\377\373\375\377\376\377\376\377\377\377\377\376\376\374\223\377\377" \
- "\377\5\375\375\375\377\377\377\376\376\376\377\377\377\346\346\346\202" \
- "::<\1;;=\203::<\1\221\221\221\235\377\377\377\3\376\376\376\377\377\377" \
- "\376\376\376\222\377\377\377\1__a\204::<\2;;=\234\234\234\213\377\377" \
- "\377\1\316\316\316\205::<\3jjl\377\377\377\376\376\376\205\377\377\377" \
- "\2\204\204\206;;=\204::<\3;;=RRT\363\363\363\237\377\377\377\1\376\376" \
- "\376\202\377\377\377\2jjl;;=\206::<\4;;=::<99;;;=\223::<\1;;=\205::<" \
- "\1\204\204\206\203\377\377\377\1\376\376\376\217\377\377\377\1\234\234" \
- "\236\205::<\1\234\234\234\245\377\377\377\3\315\315\315;;=99;\202::<" \
- "\5""99;;;=\346\346\346\377\377\377\376\376\376\211\377\377\377\1\234" \
- "\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214" \
- "\305@\207\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377" \
- "\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306" \
- ">\1\214\305@\211\214\306>\2\214\305@\343\361\316\207\377\377\377\202" \
- "\377\377\375\4\376\377\377\377\377\375\303\342\237\212\306@\202\214\305" \
- "@\206\214\306>\7\216\306\77\213\305;\214\305@\216\306A\214\306>\215\307" \
- "\77\213\307A\212\214\306>\3\215\305>\214\306>\305\342\240\215\377\377" \
- "\377\17\252\323k\215\306A\214\306>\215\307\77\214\306>\215\307\77\214" \
- "\305@\214\306>\213\304A\215\306C\214\305@\213\304A\213\310=\214\306<" \
- "\342\357\321\230\377\377\377\6\360\371\346\214\305B\212\307<\215\307" \
- "=\213\305=\215\307\77\202\214\305@\7\215\306A\214\306>\214\306<\214\305" \
- "@\214\306>\214\305@\252\324p\222\377\377\377\11\377\376\377\376\377\377" \
- "\377\377\377\377\377\375\376\376\374\377\377\377\253\323p\215\307\77" \
- "\211\306;\202\215\306A\6\214\306>\214\306<\215\305>\216\305C\215\307" \
- "\77\213\304\77\202\215\307\77\2\215\307=\213\305;\202\215\307\77\2\214" \
- "\306>\215\307\77\205\214\306>\5\215\307\77\212\306@\214\306>\215\307" \
- "\77\304\341\236\202\377\377\377\2\376\376\377\374\377\377\230\377\377" \
- "\377\7SSU;;=99;::<;;=::<FFH\232\377\377\377\1\376\376\376\205\377\377" \
- "\377\1\376\376\376\220\377\377\377\2\376\376\376;;=\202::<\1;;=\202:" \
- ":<\1\316\316\316\213\377\377\377\1\316\316\316\205::<\1kkm\210\377\377" \
- "\377\2__a;;=\204::<\2;;=xxz\202\377\377\377\1\376\376\376\233\377\377" \
- "\377\1\376\376\376\202\377\377\377\2\315\315\315;;=\206::<\2;;=99;\203" \
- ";;=\223::<\1;;=\205::<\6FFH\363\363\363\377\377\377\376\376\376\377\377" \
- "\377\376\376\376\216\377\377\377\1\234\234\236\205::<\1\234\234\234\244" \
- "\377\377\377\4\376\376\376\223\223\22399;;;=\202::<\4;;=EEG\377\377\377" \
- "\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376" \
- "\376\204\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377" \
- "\3\214\305@\214\306>\214\305@\207\214\306>\4\214\305@\215\305>\214\306" \
- ">\252\324p\251\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1" \
- "\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361" \
- "\316\206\377\377\377\13\377\376\377\377\377\377\376\377\375\377\377\377" \
- "\377\376\377\376\377\377\253\324l\214\305B\213\304\77\214\305@\215\307" \
- "\77\203\214\306>\11\214\305@\214\306<\216\306=\214\306>\212\306@\215" \
- "\306C\214\304;\212\307>\214\305@\211\214\306>\3\215\305>\214\306>\305" \
- "\342\240\215\377\377\377\1\261\330\177\202\214\306>\2\214\306<\215\306" \
- "A\203\214\306>\7\215\307\77\214\306>\214\306<\215\307=\214\306>\215\306" \
- "C\323\353\267\230\377\377\377\4\340\361\315\215\305@\215\306A\214\305" \
- "@\202\214\306>\2\213\305=\215\306A\202\214\305@\5\214\306>\215\307\77" \
- "\214\306>\214\305@\260\330x\221\377\377\377\3\376\376\376\377\377\373" \
- "\375\377\376\202\377\377\377\25\376\377\377\314\345\253\214\305@\213" \
- "\304\77\216\306\77\212\307>\215\305@\214\306>\214\305@\215\305>\214\305" \
- "@\214\306>\214\306<\214\305@\215\306A\214\305@\215\306C\214\306>\214" \
- "\305@\214\306>\215\307\77\207\214\306>\7\212\306@\220\306=\215\306C\350" \
- "\364\336\376\377\373\377\377\375\376\377\377\230\377\377\377\1\221\221" \
- "\223\203::<\1;;=\202::<\1\265\265\265\230\377\377\377\1\376\376\376\227" \
- "\377\377\377\1\316\316\316\202::<\1;;=\203::<\1\363\363\363\213\377\377" \
- "\377\1\316\316\316\205::<\1kkm\204\377\377\377\1\376\376\376\203\377" \
- "\377\377\2\346\346\346FFH\206::<\2\234\234\236\376\376\376\237\377\377" \
- "\377\1\205\205\205\206::<\3;;=::<;;=\223::<\1;;=\203::<\202;;=\204::" \
- "<\2\234\234\234\376\376\376\221\377\377\377\1\234\234\236\205::<\1\234" \
- "\234\234\245\377\377\377\1RRR\204::<\2""99;yy{\203\377\377\377\1\376" \
- "\376\376\202\377\377\377\202\376\376\376\204\377\377\377\1\234\234\234" \
- "\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305@\207" \
- "\214\306>\4\214\305@\215\305>\214\306>\252\324p\251\377\377\377\215\214" \
- "\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305" \
- "@\211\214\306>\2\214\305@\343\361\316\205\377\377\377\30\377\377\375" \
- "\377\377\377\375\377\376\377\377\377\377\376\377\377\377\377\376\377" \
- "\377\371\372\365\222\313H\214\305B\214\305@\215\307\77\214\306>\215\307" \
- "\77\214\306>\214\305@\212\306B\214\305@\212\307>\216\306\77\212\307>" \
- "\215\307\77\214\306<\214\305@\211\214\306>\3\215\305>\214\306>\305\342" \
- "\240\214\377\377\377\20\377\376\377\301\345\237\215\305>\215\306A\213" \
- "\304\77\215\306C\214\306>\214\306<\216\306\77\214\306>\214\305B\215\307" \
- "\77\214\306>\215\307\77\214\305@\271\332\211\230\377\377\377\10\307\341" \
- "\240\215\305>\214\305@\214\306>\215\305<\212\307>\214\305B\214\306<\202" \
- "\214\306>\5\215\305<\214\305B\215\307\77\214\306>\303\344\235\222\377" \
- "\377\377\6\376\376\377\377\377\375\376\377\377\377\376\377\352\364\333" \
- "\215\305@\202\215\307\77\16\214\306>\215\307\77\214\306>\215\307\77\214" \
- "\306<\216\306A\213\310\77\214\305D\215\3108\214\305@\215\305>\223\312" \
- "K\236\323a\215\307\77\207\214\306>\202\214\305@\10\214\306>\215\307\77" \
- "\212\307>\212\307<\241\321c\377\376\377\377\375\376\377\375\377\230\377" \
- "\377\377\3\332\332\332:::;;=\204::<\1SSU\203\377\377\377\1\376\376\376" \
- "\247\377\377\377\1\376\376\376\204\377\377\377\1\221\221\221\202::<\1" \
- ";:\77\202::<\1RRT\214\377\377\377\1\316\316\316\205::<\1kkm\211\377\377" \
- "\377\2\316\316\316;;=\202::<\5;;=::<;;=::<\316\316\316\210\377\377\377" \
- "\1\376\376\376\215\377\377\377\1\376\376\376\207\377\377\377\2\346\346" \
- "\350::<\202;;=\202::<\2:::xxx\230\234\234\234\3\235\235\235\234\234\234" \
- "kkm\203::<\4;;=::<FFH\364\364\364\203\377\377\377\1\376\376\376\215\377" \
- "\377\377\1\234\234\236\205::<\1\234\234\234\241\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\332\332\334\206::<\1\250\250\252\214\377\377\377" \
- "\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306" \
- ">\214\305@\204\214\306>\2\213\307A\213\310\77\204\214\306>\1\252\324" \
- "p\232\377\377\377\1\377\377\375\216\377\377\377\215\214\306>\1\250\325" \
- "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>" \
- "\2\214\305@\343\361\316\215\377\377\377\10\352\363\336\214\306>\212\306" \
- "B\215\307\77\212\307<\215\305>\214\305@\215\307\77\221\214\306>\3\215" \
- "\305>\214\306>\305\342\240\214\377\377\377\30\377\376\377\313\347\254" \
- "\215\307\77\214\304=\215\307\77\212\306@\215\307\77\215\306A\214\305" \
- "@\214\306>\215\307\77\214\306>\215\307\77\214\305@\214\305B\222\313H" \
- "\377\376\377\377\375\376\377\376\377\377\377\377\377\376\377\377\377" \
- "\373\376\377\377\377\376\377\211\377\377\377\26\377\377\375\377\376\377" \
- "\377\377\377\376\377\377\377\377\375\376\377\375\377\377\377\241\323" \
- "b\215\304D\214\307;\215\307\77\214\305B\215\307\77\214\306<\215\306A" \
- "\212\307>\215\305@\214\306>\213\310=\215\305@\215\306A\323\352\264\221" \
- "\377\377\377\11\376\377\377\376\376\374\376\377\377\377\376\374\377\376" \
- "\377\242\320c\215\307\77\215\306A\214\306>\202\214\305@\203\214\306>" \
- "\25\214\305@\215\306A\214\305@\215\307\77\214\306>\215\307=\315\345\253" \
- "\361\370\346\215\307\77\214\306>\212\306@\216\306A\214\306>\215\305>" \
- "\215\305@\214\305@\212\307>\215\305@\212\306@\215\305<\215\305@\202\214" \
- "\306>\12\277\337\223\377\377\377\376\377\375\377\376\377\377\377\375" \
- "\376\377\377\377\377\377\376\376\376\377\377\377\377\377\375\222\377" \
- "\377\377\1___\202::<\202;;=\202::<\1\266\266\266\250\377\377\377\1\376" \
- "\376\376\202\377\377\377\1\376\376\376\203\377\377\377\1SSU\203::<\3" \
- ";;=::<\221\221\223\214\377\377\377\1\316\316\316\205::<\1kkm\210\377" \
- "\377\377\3\376\376\376\377\377\377\233\233\233\203::<\5;;=::<;;=FFH\364" \
- "\364\364\210\377\377\377\1\376\376\376\213\377\377\377\2\376\376\376" \
- "\377\377\377\202\376\376\376\205\377\377\377\1\204\204\206\202::<\1;" \
- ";=\202::<\3FFF\363\363\363\376\376\376\231\377\377\377\3\346\346\346" \
- "::<;;=\204::<\3\234\234\234\377\377\377\376\376\376\217\377\377\377\1" \
- "\234\234\236\205::<\1\234\234\234\234\377\377\377\1\376\376\376\207\377" \
- "\377\377\3\205\205\207::<;;=\204::<\1\346\346\350\214\377\377\377\1\234" \
- "\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214" \
- "\305@\205\214\306>\7\214\306<\214\306>\215\307\77\214\305@\214\306>\252" \
- "\324p\376\377\375\230\377\377\377\203\377\376\377\203\377\377\377\1\376" \
- "\376\377\211\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342" \
- "\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316" \
- "\215\377\377\377\2\376\377\375\313\347\254\203\214\306>\3\214\305@\216" \
- "\306\77\211\306=\221\214\306>\3\215\305>\214\306>\305\342\240\214\377" \
- "\377\377\11\375\376\377\343\361\316\215\305>\215\307\77\213\304A\215" \
- "\307\77\215\305>\214\306<\214\305@\203\214\306>\14\215\307\77\214\305" \
- "@\213\304\77\214\305B\322\353\264\377\377\377\377\377\375\377\377\377" \
- "\377\376\377\376\377\377\377\377\377\376\377\377\210\377\377\377\13\377" \
- "\377\375\377\377\377\376\377\375\377\376\377\376\376\374\377\377\375" \
- "\377\377\377\350\364\334\215\304D\215\305>\215\307\77\202\214\305@\202" \
- "\214\306>\10\214\305@\215\306A\214\306<\215\306C\214\304=\215\307=\212" \
- "\307<\351\366\332\222\377\377\377\14\377\377\375\377\377\377\377\377" \
- "\375\304\343\237\214\306>\212\307>\217\307@\214\305@\215\307\77\214\306" \
- ">\214\305@\215\306A\202\214\306>\5\214\306<\215\305>\211\307>\216\306" \
- "=\251\323o\202\376\377\377\31\304\341\241\212\306@\215\306A\212\307>" \
- "\215\307\77\214\306<\216\305C\212\307<\216\306A\214\306<\215\307\77\215" \
- "\305>\212\307>\216\306A\214\305@\216\306A\341\361\315\377\376\377\377" \
- "\377\375\376\377\377\377\376\377\376\376\376\377\377\377\377\376\377" \
- "\376\377\375\222\377\377\377\1\265\265\265\202;;=\204::<\2SSU\364\364" \
- "\364\203\377\377\377\1\376\376\376\245\377\377\377\1\376\376\376\203" \
- "\377\377\377\1\316\316\316\203::<\1;;=\202::<\1\302\302\302\214\377\377" \
- "\377\1\316\316\316\205::<\1kkm\213\377\377\377\1lln\204::<\3;;=::<__" \
- "a\202\377\377\377\1\376\376\376\206\377\377\377\1\376\376\376\213\377" \
- "\377\377\1\376\376\376\202\377\377\377\1\376\376\376\203\377\377\377" \
- "\3\346\346\346::<;;=\204::<\1\234\234\234\234\377\377\377\1\204\204\206" \
- "\202;;=\202::<\2;;=SSU\221\377\377\377\1\234\234\236\205::<\1\234\234" \
- "\234\235\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202" \
- "\377\377\377\2\346\346\346::<\202;;=\4""99;;;=::<kkm\215\377\377\377" \
- "\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306" \
- ">\214\305@\204\214\306>\10\214\305@\215\306A\215\305@\213\305=\214\306" \
- ">\215\307\77\252\324p\376\377\377\230\377\377\377\1\376\376\376\205\377" \
- "\377\377\2\376\377\377\376\377\375\210\377\377\377\215\214\306>\1\250" \
- "\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306" \
- ">\2\214\305@\343\361\316\215\377\377\377\10\377\377\375\377\375\376\262" \
- "\331|\214\305@\215\306A\214\306>\214\305B\215\307\77\221\214\306>\3\215" \
- "\305>\214\306>\305\342\240\214\377\377\377\10\376\377\375\377\377\377" \
- "\214\304\77\212\307>\216\306A\214\306>\215\305@\215\307\77\206\214\306" \
- ">\202\214\305@\3\233\316X\376\376\377\376\377\373\202\377\377\377\3\377" \
- "\375\376\377\377\375\377\376\377\210\377\377\377\12\377\376\377\376\377" \
- "\375\377\375\376\376\376\374\377\377\377\377\377\375\377\377\377\257" \
- "\330x\214\307;\215\307\77\202\214\305@\2\215\307\77\213\305=\202\214" \
- "\306>\1\215\305>\202\214\306>\5\216\306\77\215\306A\215\305@\376\377" \
- "\375\377\376\377\220\377\377\377\11\377\377\375\377\377\377\376\377\377" \
- "\350\364\334\212\307>\213\310\77\216\306\77\212\307>\214\305@\202\214" \
- "\306>%\215\306A\214\306>\213\305=\214\306>\215\307\77\215\305@\211\307" \
- ">\223\311M\363\367\350\376\377\375\377\377\377\377\377\375\242\320d\212" \
- "\307<\215\306A\214\305@\212\306@\215\306A\214\306>\212\307>\215\307\77" \
- "\217\304@\211\310<\215\305>\213\310\77\212\307>\214\306>\234\315W\367" \
- "\372\363\376\377\377\377\376\377\377\377\375\377\377\377\376\376\376" \
- "\377\377\375\377\377\377\376\377\375\222\377\377\377\1RRR\202::<\203" \
- ";;=\2::<\234\234\236\204\377\377\377\1\376\376\376\246\377\377\377\3" \
- "\376\376\376\377\377\377kkk\202::<\4;;=99;;;=FFH\215\377\377\377\1\316" \
- "\316\316\205::<\1kkm\211\377\377\377\5\376\376\376\377\377\377\363\363" \
- "\363SSU;;=\202::<\202;;=\2""99;\222\222\222\207\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\214\377\377\377\1\376\376\376\204\377\377" \
- "\377\3\204\204\204;;=99;\202;;=\3::<FFH\363\363\363\230\377\377\377\1" \
- "\376\376\376\202\377\377\377\2\376\376\376\317\317\317\203::<\4;;=::" \
- "<;;=\266\266\266\220\377\377\377\1\234\234\236\205::<\1\234\234\234\243" \
- "\377\377\377\2\204\204\204;;=\204::<\2""99;\264\264\264\215\377\377\377" \
- "\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306" \
- ">\214\305@\204\214\306>\2\214\305@\214\306>\203\215\306A\2\215\307\77" \
- "\251\323q\231\377\377\377\203\377\377\375\202\377\377\377\1\377\375\376" \
- "\202\377\376\377\210\377\377\377\215\214\306>\1\250\325p\216\377\377" \
- "\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343" \
- "\361\316\215\377\377\377\7\376\376\376\377\377\375\366\373\364\233\316" \
- "X\215\305@\215\307=\215\305>\222\214\306>\3\215\305>\214\306>\305\342" \
- "\240\216\377\377\377\6\243\322b\214\306>\215\305@\215\307\77\215\305" \
- "@\215\306A\203\214\306>\1\215\307\77\202\214\306>\202\215\307\77\2\214" \
- "\306>\315\346\254\202\377\377\377\4\377\376\375\376\377\375\376\376\377" \
- "\377\376\377\212\377\377\377\7\377\377\375\377\376\377\377\377\373\377" \
- "\377\375\327\356\304\214\306>\215\307\77\202\214\305@\203\214\306>\12" \
- "\215\307\77\214\306>\214\305@\216\306\77\214\306<\214\304\77\212\307" \
- ">\260\331{\376\377\375\377\376\377\220\377\377\377\13\376\377\377\377" \
- "\377\375\370\373\362\233\315Z\216\306A\214\305@\212\307>\215\306A\214" \
- "\306>\214\305@\215\306A\202\214\306>\6\215\307\77\214\305@\214\305B\214" \
- "\306>\215\307=\313\347\254\202\377\377\377\23\377\376\377\377\377\375" \
- "\350\364\334\212\307>\220\306=\214\305@\216\306=\214\306>\214\305@\214" \
- "\306>\212\306@\215\305>\212\306@\215\307\77\212\307>\215\307\77\214\305" \
- "@\212\306@\277\340\221\202\377\377\377\1\377\377\375\203\377\377\377" \
- "\2\377\376\377\377\377\375\220\377\377\377\4\376\376\376\377\377\377" \
- "\265\265\265::<\202;;=\5""99;::<;;=99;\317\317\317\250\377\377\377\1" \
- "\376\376\376\202\377\377\377\2\316\316\31699;\202::<\202;;=\2::<\221" \
- "\221\223\215\377\377\377\1\316\316\316\205::<\1kkm\207\377\377\377\1" \
- "\376\376\376\204\377\377\377\1\332\332\334\203::<\5;;=::<;;=99;\302\302" \
- "\302\202\377\377\377\1\376\376\376\216\377\377\377\1\376\376\376\202" \
- "\377\377\377\1\376\376\376\204\377\377\377\4\362\362\362FFH::<;;=\202" \
- "::<\2;;=\221\221\223\204\377\377\377\202\376\376\376\224\377\377\377" \
- "\1\376\376\376\203\377\377\377\1kkm\202;;=\203::<\1SSU\220\377\377\377" \
- "\1\234\234\236\205::<\1\234\234\234\240\377\377\377\3\376\376\376\377" \
- "\377\377\315\315\315\203::<\1;;=\202::<\1SSU\216\377\377\377\1\234\234" \
- "\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305" \
- "@\204\214\306>\3\215\306A\214\306<\215\307=\202\214\305@\3\214\306>\253" \
- "\324n\377\377\375\230\377\377\377\2\375\376\377\376\376\376\203\377\377" \
- "\377\1\377\377\375\212\377\377\377\215\214\306>\1\250\325p\216\377\377" \
- "\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343" \
- "\361\316\220\377\377\377\5\350\365\333\214\306>\214\305@\214\306>\215" \
- "\306A\221\214\306>\3\215\305>\214\306>\305\342\240\215\377\377\377\7" \
- "\377\377\375\277\337\224\212\306@\215\305@\212\307>\215\306A\215\307" \
- "\77\203\214\306>\202\215\307\77\203\214\306>\3\214\306<\214\306>\351" \
- "\363\330\202\377\377\377\3\376\376\376\374\377\377\376\377\377\211\377" \
- "\377\377\1\376\377\377\202\377\377\377\7\375\376\377\351\365\337\223" \
- "\311M\215\307=\214\305B\214\305@\215\307\77\202\214\306>\12\215\306A" \
- "\214\305@\214\306>\212\307>\215\306A\214\306>\215\307=\213\310\77\316" \
- "\345\255\376\377\377\221\377\377\377\7\376\377\377\377\377\375\300\337" \
- "\223\216\306A\213\305=\215\307=\215\305>\202\214\306>\1\215\307\77\203" \
- "\214\306>\202\214\305@\5\215\307\77\213\307A\251\322r\377\377\377\377" \
- "\377\375\202\377\377\377\14\377\376\377\377\377\377\305\342\237\212\307" \
- "<\220\305\77\214\306>\212\306@\215\306A\214\306<\214\305@\214\306<\216" \
- "\305C\202\214\306>\7\215\305<\214\306>\215\305>\214\305@\342\362\316" \
- "\377\377\377\377\377\375\202\377\377\377\3\376\377\377\377\376\377\376" \
- "\376\376\221\377\377\377\3\376\376\376\377\377\377___\205::<\4;;=FFH" \
- "\363\363\363\377\377\377\202\376\376\376\246\377\377\377\3\363\363\363" \
- "SSU;;=\204::<\4;;=\345\345\345\377\377\377\376\376\376\213\377\377\377" \
- "\1\316\316\316\205::<\1kkm\211\377\377\377\1\376\376\376\203\377\377" \
- "\377\4\264\264\266;;=99;::<\202;;=\3::<GGI\332\332\332\206\377\377\377" \
- "\1\376\376\376\215\377\377\377\1\376\376\376\203\377\377\377\3\234\234" \
- "\236::<;;=\204::<\2\346\346\346\376\376\376\202\377\377\377\1\376\376" \
- "\376\202\377\377\377\202\376\376\376\220\377\377\377\1\376\376\376\204" \
- "\377\377\377\2\376\376\376\317\317\317\204::<\3;;=::<\265\265\265\217" \
- "\377\377\377\1\234\234\236\205::<\1\234\234\234\235\377\377\377\1\376" \
- "\376\376\203\377\377\377\2\363\363\363TTV\203::<\5;;=99;::<\235\235\235" \
- "\376\376\376\215\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377" \
- "\377\377\3\214\305@\214\306>\214\305@\204\214\306>\2\212\306@\213\310" \
- "\77\202\214\305@\3\215\307\77\214\306<\251\323o\231\377\377\377\4\377" \
- "\376\377\377\377\375\377\377\377\376\376\377\214\377\377\377\215\214" \
- "\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305" \
- "@\211\214\306>\2\214\305@\343\361\316\215\377\377\377\1\377\377\375\203" \
- "\377\377\377\4\323\353\267\212\307<\214\306<\212\306B\221\214\306>\3" \
- "\215\305>\214\306>\305\342\240\214\377\377\377\7\376\377\377\377\376" \
- "\377\350\365\331\215\307\77\215\305>\214\306>\212\307>\202\214\306>\1" \
- "\215\307\77\205\214\306>\11\215\307\77\213\304A\212\307>\222\312M\343" \
- "\361\316\376\376\377\377\376\377\377\377\377\377\375\377\210\377\377" \
- "\377\1\377\376\377\202\377\377\375\12\377\376\377\350\364\334\220\313" \
- "K\216\306=\215\305<\215\307\77\214\306>\213\305=\214\306>\215\306A\202" \
- "\214\306>\1\214\305@\202\212\307>\6\214\305@\215\306C\215\305>\360\370" \
- "\351\377\377\373\376\377\377\221\377\377\377\7\345\360\322\215\305@\214" \
- "\305@\215\307=\214\304=\213\310=\215\305>\202\214\306>\2\213\305=\215" \
- "\307\77\202\214\305@\7\215\307\77\214\307;\214\305@\363\367\346\376\377" \
- "\377\377\377\373\377\376\377\202\377\377\377\30\376\377\375\377\376\377" \
- "\241\321a\216\306\77\212\306@\213\310=\215\305@\213\307A\217\304>\215" \
- "\305@\214\306<\216\306A\215\306A\212\307>\214\306<\214\306>\212\307<" \
- "\233\314W\366\373\365\377\377\375\377\377\377\377\376\377\373\377\377" \
- "\377\376\377\224\377\377\377\1\317\317\317\205::<\4;;=::<``b\362\362" \
- "\362\247\377\377\377\2\376\376\376\221\221\221\206::<\3\204\204\206\377" \
- "\377\377\376\376\376\214\377\377\377\1\316\316\316\205::<\1kkm\212\377" \
- "\377\377\6\376\376\376\377\377\377\376\376\376\377\377\377\203\203\203" \
- ";;=\205::<\3``b\363\363\363\376\376\376\216\377\377\377\1\376\376\376" \
- "\206\377\377\377\3\363\363\363FFH;;=\203::<\2;;=\203\203\203\203\377" \
- "\377\377\3\376\376\376\377\377\377\376\376\376\225\377\377\377\1\376" \
- "\376\376\204\377\377\377\3kkk::<<<>\202::<\2;;=kkm\217\377\377\377\1" \
- "\234\234\236\205::<\1\234\234\234\236\377\377\377\4\376\376\376\377\377" \
- "\377\376\376\376kkk\202::<\5;;=::<99;;;=TTV\202\377\377\377\1\376\376" \
- "\376\214\377\377\377\1\234\234\234\205::<\1\234\234\236\266\377\377\377" \
- "\3\214\305@\214\306>\214\305@\204\214\306>\10\214\306<\214\306>\214\305" \
- "@\214\306>\215\307\77\214\306>\252\324r\376\377\377\230\377\377\377\1" \
- "\377\377\375\202\377\377\377\2\377\377\375\376\376\374\203\377\376\377" \
- "\210\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320" \
- "\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316\215\377" \
- "\377\377\10\375\377\374\377\376\377\375\377\376\376\376\377\377\377\377" \
- "\270\333\207\214\305@\215\307\77\221\214\306>\3\215\305>\214\306>\305" \
- "\342\240\214\377\377\377\12\375\376\377\377\376\377\376\377\377\234\313" \
- "Y\215\306A\214\305@\212\307>\214\305@\214\306>\215\307\77\206\214\306" \
- ">\7\215\307\77\214\306>\215\305@\213\310\77\304\343\240\371\372\364\376" \
- "\377\377\212\377\377\377\10\376\377\377\377\376\377\315\345\251\223\311" \
- "M\214\306>\216\306\77\214\305B\214\306<\202\214\306>\15\215\306A\214" \
- "\305@\214\306>\215\307\77\214\305@\214\306<\214\305@\215\307\77\213\304" \
- "A\263\330{\377\377\377\376\376\376\377\377\375\220\377\377\377\7\370" \
- "\373\364\232\315V\216\306=\212\311=\214\306>\216\306A\213\307A\202\214" \
- "\305@\202\214\306>\202\214\305@\10\215\307\77\215\305>\215\304D\304\341" \
- "\237\376\377\377\377\376\377\376\376\377\377\377\375\202\377\376\377" \
- "\24\376\377\377\377\377\373\350\365\333\215\305>\214\306<\214\306>\212" \
- "\306@\215\307\77\213\305=\215\305@\215\307\77\214\306>\215\305>\215\306" \
- "A\211\305A\215\305@\214\305B\213\310=\262\327z\374\377\377\202\377\377" \
- "\377\2\377\377\375\373\377\376\225\377\377\377\1\221\221\223\203::<\6" \
- ";;=99;;;=::<``b\362\362\362\246\377\377\377\2\265\265\265:::\202::<\1" \
- ";;=\203::<\1\346\346\350\216\377\377\377\1\316\316\316\205::<\1kkm\216" \
- "\377\377\377\6\363\363\363__a::<;;=::<;;=\202::<\1\204\204\204\204\377" \
- "\377\377\1\376\376\376\221\377\377\377\1\234\234\234\204::<\3;;=::<\347" \
- "\347\347\202\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376" \
- "\225\377\377\377\3\376\376\376\377\377\377\265\265\265\202::<\202;;=" \
- "\3::<;;=\316\316\316\216\377\377\377\1\234\234\236\205::<\1\234\234\234" \
- "\240\377\377\377\2\204\204\204:::\206::<\1\301\301\303\217\377\377\377" \
- "\1\234\234\234\205::<\1\234\234\236\266\377\377\377\3\214\305@\214\306" \
- ">\214\305@\205\214\306>\7\214\305@\216\306A\215\307=\213\304\77\213\307" \
- "A\242\321a\345\356\317\230\342\362\316\7\341\361\315\342\361\322\342" \
- "\361\320\343\361\315\345\360\322\365\373\357\376\377\377\211\377\377" \
- "\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214\306" \
- ">\1\214\305@\211\214\306>\2\214\305@\343\361\316\216\377\377\377\7\376" \
- "\377\375\377\377\375\377\377\377\377\376\377\371\374\365\242\322d\215" \
- "\306A\221\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\10" \
- "\377\377\375\377\377\377\377\377\373\312\346\253\215\307=\212\307>\214" \
- "\305B\216\306=\206\214\306>\202\214\305@\10\214\306>\212\307>\216\306" \
- "\77\214\306>\212\307>\233\316W\306\340\237\361\370\346\210\377\377\377" \
- "\12\361\370\350\314\345\253\233\314W\214\306>\213\310\77\215\305<\214" \
- "\305@\212\307<\215\306A\214\305@\203\214\306>\202\214\305@\202\214\306" \
- ">\4\216\306A\212\306@\213\310\77\333\356\301\202\377\377\377\1\377\377" \
- "\375\220\377\377\377\26\270\332\204\215\306A\212\306B\214\306>\213\307" \
- "A\215\305@\214\306<\214\306>\215\306A\214\306<\215\307\77\214\305B\215" \
- "\307\77\214\307;\215\304D\241\323b\377\377\375\376\377\377\377\377\377" \
- "\377\377\373\377\377\377\376\377\377\202\377\377\375\16\377\377\377\376" \
- "\377\377\277\337\224\214\305@\215\306A\214\306>\215\305>\212\310\77\214" \
- "\305@\215\307\77\212\307>\214\305B\216\306=\215\306A\202\214\306<\6\214" \
- "\306>\213\307C\331\356\305\377\376\377\377\377\373\376\376\376\227\377" \
- "\377\377\3__a::<;:\77\205::<\2__a\363\363\363\203\377\377\377\1\376\376" \
- "\376\213\377\377\377\1\376\376\376\203\377\377\377\3\376\376\376\377" \
- "\377\377\376\376\376\213\377\377\377\1\376\376\376\202\377\377\377\1" \
- "\265\265\267\205::<\3;;=:::\234\234\234\217\377\377\377\1\316\316\316" \
- "\205::<\1kkm\217\377\377\377\4\332\332\332GGI::<;;=\204::<\1\250\250" \
- "\252\225\377\377\377\1FFH\205::<\1\204\204\204\242\377\377\377\1TTV\205" \
- "::<\4lln\376\376\376\377\377\377\376\376\376\203\377\377\377\1\376\376" \
- "\376\207\377\377\377\1\234\234\236\205::<\1\235\235\237\221\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\202\377\377\377\202\376" \
- "\376\376\205\377\377\377\3\363\363\365\204\204\206;;=\204::<\3;;=:::" \
- "xxx\220\377\377\377\1\234\234\234\203::<\3;;=::<\234\234\234\204\377" \
- "\377\377\1\376\376\376\261\377\377\377\3\214\305@\214\306>\214\305@\250" \
- "\214\306>\2\215\307\77\342\362\316\212\377\377\377\215\214\306>\1\250" \
- "\325p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306" \
- ">\2\214\305@\343\361\316\216\377\377\377\11\375\376\377\377\376\377\377" \
- "\377\375\376\377\377\377\376\377\351\365\335\223\311M\212\307<\214\306" \
- ">\202\216\306A\4\212\307<\215\306A\215\305>\215\307\77\211\214\306>\3" \
- "\215\305>\214\306>\305\342\240\214\377\377\377\20\377\376\377\377\377" \
- "\375\377\376\377\365\374\364\223\312J\217\304>\215\307\77\212\307;\215" \
- "\306A\214\305B\214\305@\215\307\77\214\306<\213\310\77\214\305@\215\305" \
- ">\210\214\306>\10\234\315Z\257\327~\304\343\235\306\340\237\307\341\240" \
- "\304\343\237\257\327\177\241\321a\210\214\306>\20\217\304>\215\306A\212" \
- "\306@\212\307>\213\305;\216\306A\213\305=\215\306C\211\310<\216\306A" \
- "\214\306>\234\314V\377\377\377\375\377\374\376\377\377\377\376\377\211" \
- "\377\377\377\7\377\376\377\376\377\375\376\377\377\376\377\375\377\376" \
- "\377\377\377\377\333\355\303\210\214\306>\10\215\306A\214\305@\216\306" \
- "=\214\306>\215\307\77\214\305@\215\307\77\352\364\334\211\377\377\377" \
- "\6\377\376\377\367\375\363\232\315V\215\307\77\214\306>\214\305@\212" \
- "\214\306>\6\212\307>\223\311M\366\373\364\377\376\377\377\377\377\376" \
- "\377\373\221\377\377\377\1\376\376\376\204\377\377\377\2\346\346\346" \
- "FFH\203::<\1""99;\203::<\2__a\332\332\332\211\377\377\377\1\376\376\376" \
- "\203\377\377\377\1\376\376\376\205\377\377\377\1\376\376\376\206\377" \
- "\377\377\1\376\376\376\207\377\377\377\1\265\265\267\202::<\1;;=\204" \
- "::<\2```\376\376\376\217\377\377\377\1\316\316\316\205::<\1kkm\216\377" \
- "\377\377\4\376\376\376\377\377\377\301\301\301;;=\205::<\2;;=\331\331" \
- "\331\202\377\377\377\3\376\376\376\377\377\377\376\376\376\216\377\377" \
- "\377\1\265\265\267\205::<\3;;=\332\332\332\376\376\376\241\377\377\377" \
- "\1\266\266\270\205::<\2""99;\316\316\320\215\377\377\377\1\234\234\236" \
- "\203::<\5;;=::<\234\234\234\377\377\377\376\376\376\220\377\377\377\1" \
- "\376\376\376\206\377\377\377\1\376\376\376\203\377\377\377\2\346\346" \
- "\346``b\202::<\2""99;;;=\203::<\4FFF\363\363\363\377\377\377\376\376" \
- "\376\216\377\377\377\1\234\234\234\204::<\3;;=\234\234\234\376\376\376" \
- "\265\377\377\377\3\214\305@\214\306>\214\305@\250\214\306>\2\215\307" \
- "\77\342\362\316\212\377\377\377\215\214\306>\1\250\325p\216\377\377\377" \
- "\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361" \
- "\316\215\377\377\377\16\377\376\377\376\377\377\377\376\377\377\377\377" \
- "\376\377\377\377\376\377\375\377\374\323\353\267\215\305<\215\306C\215" \
- "\305<\213\306:\213\310\77\212\306@\202\214\305@\211\214\306>\3\215\305" \
- ">\214\306>\305\342\240\215\377\377\377\4\376\377\377\377\377\375\377" \
- "\376\377\305\342\242\202\214\305@\5\216\306A\214\306>\215\307=\215\307" \
- "\77\213\304A\202\214\305@\2\214\306>\212\306@\210\214\306>\7\214\306" \
- "<\215\307=\215\307\77\213\305=\214\306>\215\307\77\213\305=\211\214\306" \
- ">\11\215\306A\215\305>\212\307;\213\304\77\215\306A\211\306=\215\306" \
- "A\212\307<\216\306A\202\215\307\77\4\343\361\320\376\377\375\377\377" \
- "\375\376\376\377\212\377\377\377\1\377\376\377\202\377\377\377\4\377" \
- "\376\377\376\377\377\367\375\363\225\311J\210\214\306>\10\215\307=\213" \
- "\310\77\214\305@\216\306\77\214\305@\212\307>\307\341\240\376\377\375" \
- "\210\377\377\377\5\377\376\377\374\377\375\377\376\377\343\361\320\212" \
- "\306@\202\214\306>\1\213\310\77\210\214\306>\10\215\306A\215\305>\214" \
- "\305@\260\327z\377\376\374\374\377\377\377\377\377\377\376\377\226\377" \
- "\377\377\1\332\332\332\210::<\2GGI\250\250\250\223\377\377\377\3\376" \
- "\376\376\377\377\377\376\376\376\202\377\377\377\1\376\376\376\202\377" \
- "\377\377\1\376\376\376\204\377\377\377\2\250\250\252;;=\204::<\202;;" \
- "=\2EEG\331\331\331\220\377\377\377\1\316\316\316\205::<\1kkm\221\377" \
- "\377\377\5\222\222\224::<;;=::<;;=\202::<\5SSU\364\364\364\376\376\376" \
- "\377\377\377\376\376\376\216\377\377\377\2\376\376\376TTV\203::<\4;;" \
- "=99;lln\376\376\376\243\377\377\377\1TTV\204::<\5;;=\204\204\206\376" \
- "\376\376\377\377\377\376\376\376\212\377\377\377\1\234\234\236\202::" \
- "<\1;;=\202::<\1\234\234\234\215\377\377\377\1\376\376\376\202\377\377" \
- "\377\1\376\376\376\212\377\377\377\6\376\376\376\250\250\252FFH99;::" \
- "<;;=\205::<\1\316\316\316\221\377\377\377\1\234\234\234\203::<\3;;=:" \
- ":<\234\234\236\266\377\377\377\3\214\305@\214\306>\214\305@\250\214\306" \
- ">\2\215\307\77\342\362\316\212\377\377\377\215\214\306>\1\250\325p\216" \
- "\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214" \
- "\305@\343\361\316\215\377\377\377\3\377\376\377\376\377\375\376\377\377" \
- "\202\377\377\377\13\377\377\375\377\376\377\376\376\374\271\332\211\215" \
- "\306A\211\306;\216\306A\212\307>\213\307A\215\306A\212\307>\211\214\306" \
- ">\3\215\305>\214\306>\305\342\240\214\377\377\377\20\376\377\375\377" \
- "\377\377\377\377\375\377\377\377\371\370\364\233\316U\214\306>\214\305" \
- "@\215\306A\214\306>\214\305@\215\307=\214\306>\215\305@\215\304B\213" \
- "\310=\210\214\306>\3\215\305@\214\306>\213\305=\202\213\310\77\3\214" \
- "\306>\215\307\77\215\305@\210\214\306>\20\212\306@\212\307;\216\306\77" \
- "\215\307\77\212\306@\214\306<\215\305>\215\307\77\220\305\77\211\307" \
- ">\263\330{\377\376\377\377\377\375\376\377\377\377\377\377\376\376\376" \
- "\211\377\377\377\7\377\377\373\377\377\377\377\375\376\377\377\377\377" \
- "\377\375\257\330|\213\310\77\211\214\306>\6\215\306C\211\306=\214\305" \
- "@\214\306>\242\322e\377\377\375\212\377\377\377\7\376\377\377\377\377" \
- "\375\377\375\376\277\337\224\216\307B\212\307>\214\305@\210\214\306>" \
- "\2\214\305@\216\306\77\202\212\307>\4\332\360\302\376\376\374\376\376" \
- "\376\377\376\377\227\377\377\377\1\266\266\266\202::<\1;;=\202::<\2;" \
- ";=::<\202;;=\2kkm\346\346\350\202\377\377\377\1\376\376\376\207\377\377" \
- "\377\1\376\376\376\203\377\377\377\5\376\376\376\377\377\377\376\376" \
- "\376\377\377\377\376\376\376\202\377\377\377\3\376\376\376\377\377\377" \
- "\376\376\376\204\377\377\377\2\364\364\364yy{\203::<\2;;=99;\203::<\3" \
- "\265\265\267\377\377\377\376\376\376\217\377\377\377\1\316\316\316\205" \
- "::<\1kkm\222\377\377\377\1kkm\203::<\1;;=\202::<\5kkm\377\377\377\376" \
- "\376\376\377\377\377\376\376\376\212\377\377\377\5\376\376\376\377\377" \
- "\377\376\376\376\265\265\267;;=\204::<\2;;=\315\315\315\244\377\377\377" \
- "\11\234\234\234::<99;;;=::<;;=::<\347\347\347\376\376\376\213\377\377" \
- "\377\1\234\234\236\204::<\2;;=\233\233\233\217\377\377\377\1\376\376" \
- "\376\206\377\377\377\6\376\376\376\377\377\377\376\376\376\377\377\377" \
- "\265\265\265TTT\202::<\202;;=\203::<\3;;=::<\266\266\270\202\377\377" \
- "\377\1\376\376\376\217\377\377\377\1\234\234\234\204::<\4;;=\235\235" \
- "\237\377\377\377\376\376\376\224\377\377\377\1\376\376\376\203\377\377" \
- "\377\1\376\376\376\233\377\377\377\3\214\305@\214\306>\214\305@\250\214" \
- "\306>\2\215\307\77\342\362\316\212\377\377\377\215\214\306>\1\250\325" \
- "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>" \
- "\2\214\305@\343\361\316\215\377\377\377\202\377\377\375\16\377\377\377" \
- "\377\377\375\377\377\377\376\377\375\376\376\374\377\376\377\375\377" \
- "\376\241\322_\215\306A\212\306B\215\305>\215\307\77\214\306<\214\305" \
- "B\211\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\1\377" \
- "\376\377\202\377\377\375\15\376\377\377\377\375\376\340\361\317\214\306" \
- ">\212\307>\214\306>\215\307\77\214\306>\212\307<\215\307\77\215\305>" \
- "\216\306=\213\305=\210\214\306>\1\212\307>\202\214\305@\202\214\306>" \
- "\3\214\305@\215\306A\212\307>\210\214\306>\20\212\307>\213\304\77\214" \
- "\306>\211\310<\214\306>\216\306A\212\306@\215\305@\214\306>\223\313N" \
- "\367\372\363\376\377\377\377\377\377\377\376\377\376\377\373\377\376" \
- "\377\212\377\377\377\202\376\377\377\3\377\375\376\324\353\265\215\306" \
- "A\211\214\306>\7\215\305>\213\305=\215\307\77\215\306A\212\307>\351\363" \
- "\333\377\377\375\211\377\377\377\10\377\376\377\375\377\376\376\377\377" \
- "\377\376\377\370\373\362\233\314W\215\307\77\215\305<\210\214\306>\1" \
- "\215\307\77\202\214\306>\4\214\306<\225\310O\360\366\350\377\376\377" \
- "\221\377\377\377\3\376\376\376\377\377\377\376\376\376\205\377\377\377" \
- "\1\266\266\266\202::<\4;;=99;::<;;=\202::<\4;;=::<\204\204\206\346\346" \
- "\350\207\377\377\377\1\376\376\376\206\377\377\377\202\376\376\376\202" \
- "\377\377\377\1\376\376\376\203\377\377\377\1\376\376\376\202\377\377" \
- "\377\3\251\251\251FFF99;\202::<\1""99;\202::<\5;;=::<\234\234\236\377" \
- "\377\377\376\376\376\220\377\377\377\1\316\316\316\205::<\1kkm\222\377" \
- "\377\377\11\363\363\363GGI99;::<99;;;=::<;;=\234\234\234\214\377\377" \
- "\377\1\376\376\376\203\377\377\377\1SSU\202::<\1;;=\202::<\1kkm\245\377" \
- "\377\377\5\362\362\362GGI;;=::<;;=\202::<\1\204\204\206\206\377\377\377" \
- "\1\376\376\376\205\377\377\377\1\234\234\236\203::<\3""99;::<\234\234" \
- "\234\223\377\377\377\1\376\376\376\203\377\377\377\3\331\331\331\222" \
- "\222\222SSU\203::<\2;;=::<\202;;=\4::<;;=::<\265\265\267\202\377\377" \
- "\377\1\376\376\376\203\377\377\377\1\376\376\376\214\377\377\377\1\234" \
- "\234\234\205::<\1\234\234\236\203\377\377\377\1\376\376\376\223\377\377" \
- "\377\1\376\376\376\236\377\377\377\3\214\305@\214\306>\214\305@\250\214" \
- "\306>\2\215\307\77\342\362\316\212\377\377\377\215\214\306>\1\250\325" \
- "p\216\377\377\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>" \
- "\2\214\305@\343\361\316\216\377\377\377\17\377\376\377\377\377\377\376" \
- "\376\376\377\376\377\377\377\375\376\377\377\375\377\376\377\377\377" \
- "\363\367\350\222\312K\214\305@\213\310\77\214\304\77\215\307\77\216\306" \
- "A\211\214\306>\3\215\305>\214\306>\305\342\240\214\377\377\377\14\377" \
- "\376\377\376\377\375\376\377\377\377\376\377\376\377\377\376\377\375" \
- "\307\342\237\214\305@\214\306<\215\304D\214\306>\214\305D\202\212\307" \
- "<\2\212\307>\213\307A\210\214\306>\3\215\307\77\214\306>\215\307\77\202" \
- "\214\305@\213\214\306>\12\213\305;\215\306A\212\306@\214\306>\213\307" \
- "C\212\307>\215\305>\212\307>\215\305>\333\356\301\202\377\377\377\3\377" \
- "\377\375\377\377\377\377\376\377\211\377\377\377\10\376\377\375\377\377" \
- "\375\376\377\375\374\377\375\362\371\347\225\311M\215\307\77\215\305" \
- "<\210\214\306>\2\214\305@\216\306=\202\212\306@\2\305\342\237\377\375" \
- "\376\212\377\377\377\1\376\376\374\203\377\377\377\4\376\376\376\337" \
- "\363\316\215\306C\215\305<\211\214\306>\1\215\307\77\202\214\305@\4\214" \
- "\306<\253\324n\375\377\374\377\377\375\224\377\377\377\1\376\376\376" \
- "\204\377\377\377\2\301\301\301FFH\202::<\2;;=99;\202;;=\2::<;;=\202:" \
- ":<\2\204\204\206\316\316\320\207\377\377\377\1\376\376\376\203\377\377" \
- "\377\1\376\376\376\206\377\377\377\6\376\376\376\377\377\377\364\364" \
- "\364\265\265\267SSU::<\202;;=\202::<\5;;=::<;;=::<\204\204\204\223\377" \
- "\377\377\1\316\316\316\205::<\1kkm\223\377\377\377\11\315\315\315;;=" \
- "::<;;=::<;;=::<99;\302\302\302\216\377\377\377\5\301\301\303::<;;=::" \
- "<;;=\202::<\2\316\316\316\377\377\377\202\376\376\376\241\377\377\377" \
- "\14\376\376\376\377\377\377\234\234\234;;=::<;;=::<;;=::<\347\347\351" \
- "\377\377\377\376\376\376\211\377\377\377\1\234\234\236\203::<\3;;=::" \
- "<\234\234\236\216\377\377\377\202\376\376\376\1\377\377\377\202\316\316" \
- "\316\6\250\250\250\234\234\234jjjFFF;;=99;\202;;=\2::<;;=\202::<\5<<" \
- ">99;;;=::<\265\265\267\204\377\377\377\1\376\376\376\217\377\377\377" \
- "\1\234\234\234\204::<\2;;=\234\234\236\202\377\377\377\1\376\376\376" \
- "\223\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\234\377" \
- "\377\377\3\214\305@\214\306>\214\305@\250\214\306>\2\215\307\77\342\362" \
- "\316\212\377\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361" \
- "\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316\215" \
- "\377\377\377\202\377\376\377\16\377\377\375\376\377\377\377\377\377\377" \
- "\377\375\377\376\377\376\376\376\377\376\377\377\377\377\333\354\302" \
- "\212\307>\213\310\77\214\306<\213\310=\215\305@\211\214\306>\3\215\305" \
- ">\214\306>\305\342\240\214\377\377\377\1\377\376\377\202\376\377\377" \
- "\202\377\377\375\13\376\377\377\377\375\376\271\333\205\215\305>\214" \
- "\306>\212\307>\214\306>\215\306A\214\306>\212\306@\214\305@\210\214\306" \
- ">\3\214\305@\215\307\77\214\306>\202\212\307>\3\214\306>\215\307\77\215" \
- "\306A\210\214\306>\4\216\306A\211\306=\214\306<\216\306A\202\212\307" \
- ">\202\215\306A\10\322\352\270\377\377\375\376\376\374\377\377\377\376" \
- "\377\377\377\376\377\377\377\375\376\377\377\210\377\377\377\10\377\377" \
- "\375\377\377\377\377\376\377\374\376\373\250\325n\216\306\77\212\307" \
- ">\214\305B\210\214\306>\202\212\307>\6\214\305@\242\322d\376\376\374" \
- "\377\377\375\375\377\376\377\376\377\210\377\377\377\10\376\377\377\377" \
- "\377\375\377\375\376\377\377\375\375\376\377\376\377\375\270\333\207" \
- "\211\310<\210\214\306>\10\214\304=\216\307B\214\306>\212\307>\216\306" \
- "A\215\307\77\313\350\250\376\376\377\221\377\377\377\1\376\376\376\203" \
- "\377\377\377\1\376\376\376\204\377\377\377\7\332\332\332RRT;;=::<;;=" \
- "::<;;=\202::<\1;;=\203::<\3RRT\221\221\223\317\317\321\214\377\377\377" \
- "\11\376\376\376\377\377\377\364\364\364\301\301\301\204\204\206EEG;;" \
- "=99;;;=\204::<\1""99;\202::<\1\251\251\251\207\377\377\377\1\376\376" \
- "\376\214\377\377\377\1\316\316\316\205::<\1kkm\224\377\377\377\1\247" \
- "\247\247\203::<\5;;=::<;;=FFH\345\345\345\214\377\377\377\2\376\376\376" \
- "kkm\205::<\1SSU\202\377\377\377\1\376\376\376\244\377\377\377\2\363\363" \
- "\363FFH\204::<\2;;=\221\221\223\213\377\377\377\1\234\234\236\204::<" \
- "\4;;=SSUkkmlln\213kkm\5;;=::<;;=::<;;=\204::<\2;;=99;\202;;=\2::<;;=" \
- "\202::<\7;;=99;::<FFH\301\301\301\377\377\377\376\376\376\223\377\377" \
- "\377\1\234\234\234\205::<\1SSU\202kkm\1lln\223kkm\1lln\205kkm\1\332\332" \
- "\334\231\377\377\377\3\214\305@\214\306>\214\305@\250\214\306>\2\215" \
- "\307\77\342\362\316\212\377\377\377\215\214\306>\1\250\325p\216\377\377" \
- "\377\1\342\361\320\202\214\306>\1\214\305@\211\214\306>\2\214\305@\343" \
- "\361\316\215\377\377\377\1\377\376\377\202\377\377\375\202\377\377\377" \
- "\202\377\376\377\11\377\377\375\377\377\377\376\377\377\377\376\377\276" \
- "\336\223\214\306<\213\310\77\214\304=\215\306A\211\214\306>\3\215\305" \
- ">\214\306>\305\342\240\214\377\377\377\20\377\377\375\376\377\375\376" \
- "\376\376\377\376\377\375\377\376\377\375\377\376\377\377\376\377\375" \
- "\270\333\207\217\305<\212\307>\214\305@\216\306\77\213\305=\214\305@" \
- "\216\306=\211\214\306>\2\215\306A\215\305@\202\216\306\77\3\215\305@" \
- "\214\305@\215\307\77\210\214\306>\13\213\305=\215\306A\215\305>\212\306" \
- "@\215\305>\215\306A\220\305A\323\352\266\376\377\375\377\376\377\377" \
- "\377\375\202\377\377\377\3\376\377\377\377\375\377\376\377\375\213\377" \
- "\377\377\5\316\347\256\212\307>\213\305;\216\306A\212\307<\210\214\306" \
- ">\10\212\307>\216\306\77\215\305>\350\364\336\377\376\377\376\376\374" \
- "\377\377\377\377\376\377\210\377\377\377\1\377\376\377\202\377\377\377" \
- "\5\377\376\377\376\377\375\377\376\377\370\373\360\225\311K\210\214\306" \
- ">\10\216\306=\214\305@\215\310<\212\307>\214\306>\214\305@\223\312J\356" \
- "\371\350\231\377\377\377\4\376\376\376\377\377\377\363\363\363xxz\202" \
- "::<\1""99;\202::<\1;;=\203::<\202;;=\203::<\4__a\205\205\205\234\234" \
- "\234\250\250\250\205\316\316\316\4\250\250\250\234\234\234xxx___\202" \
- "::<\3""99;;;=99;\203::<\1;;=\203::<\2FFH\265\265\265\205\377\377\377" \
- "\1\376\376\376\217\377\377\377\1\316\316\316\205::<\1kkm\225\377\377" \
- "\377\3xxx::<;;=\204::<\1```\213\377\377\377\4\376\376\376\317\317\317" \
- "::<;;=\204::<\1\266\266\270\203\377\377\377\1\376\376\376\241\377\377" \
- "\377\1\377\377\375\202\377\377\377\1\204\204\206\202::<\1;;=\202::<\2" \
- "GGI\363\363\363\212\377\377\377\1\234\234\236\203::<\1;;=\202::<\1;;" \
- "=\221::<\1;;=\207::<\1;;=\202::<\1;;=\202::<\2``b\346\346\350\210\377" \
- "\377\377\1\376\376\376\215\377\377\377\1\234\234\234\207::<\3;;=::<;" \
- ";=\221::<\1;;=\203::<\1;;=\202::<\1\316\316\320\231\377\377\377\3\214" \
- "\305@\214\306>\214\305@\250\214\306>\2\215\307\77\342\362\316\212\377" \
- "\377\377\215\214\306>\1\250\325p\216\377\377\377\1\342\361\320\202\214" \
- "\306>\1\214\305@\211\214\306>\2\214\305@\343\361\316\215\377\377\377" \
- "\7\377\377\375\376\377\375\377\377\377\377\376\377\376\376\374\376\377" \
- "\377\377\377\377\202\376\377\377\202\377\377\375\4\377\377\377\242\320" \
- "d\211\306=\215\305@\212\214\306>\3\215\305>\214\306>\305\342\240\214" \
- "\377\377\377\6\377\376\377\377\377\377\377\377\375\377\375\377\376\377" \
- "\372\375\376\377\202\377\377\377\10\376\377\377\304\343\240\215\305@" \
- "\214\306>\216\306A\215\307\77\212\307>\215\307\77\212\214\306>\3\215" \
- "\307\77\214\306>\214\305@\202\215\307\77\211\214\306>\12\215\306C\212" \
- "\307<\215\307\77\215\305@\213\310\77\215\306A\323\352\266\377\376\377" \
- "\377\377\377\376\377\377\204\377\377\377\2\377\377\375\377\376\377\210" \
- "\377\377\377\10\376\377\377\377\376\377\361\370\346\225\311K\212\307" \
- ">\215\306A\214\305@\215\305>\210\214\306>\3\214\305@\214\306>\307\341" \
- "\240\203\376\377\377\2\377\377\375\376\377\377\210\377\377\377\5\376" \
- "\377\377\377\376\372\376\377\375\376\376\376\377\377\377\202\377\376" \
- "\377\1\334\355\301\210\214\306>\10\215\306A\213\310\77\215\305@\214\306" \
- ">\214\306<\215\306A\214\306>\254\322o\232\377\377\377\6\376\376\376\377" \
- "\377\377\376\376\376\302\302\302FFH;;=\206::<\1;;=\202::<\202;;=\203" \
- "::<\1;;=\204::<\3;;=::<;;=\202::<\1;;=\202::<\1;;=\203::<\2;;=::<\202" \
- ";;=\2__a\332\332\332\226\377\377\377\3\316\316\316::<;;=\203::<\1kkm" \
- "\222\377\377\377\7\376\376\376\377\377\377\376\376\376\363\363\363__" \
- "a::<;;=\204::<\1\203\203\203\202\377\377\377\2\376\376\376\377\377\377" \
- "\202\376\376\376\205\377\377\377\1kkm\202::<\1;;=\202::<\5TTV\377\377" \
- "\377\376\376\376\377\377\377\376\376\376\245\377\377\377\2\347\347\347" \
- "99;\202::<\1;;=\202::<\1\235\235\237\206\377\377\377\1\376\376\376\202" \
- "\377\377\377\2\376\376\376\234\234\234\224::<\1;;=\202::<\3""99;::<;" \
- ";=\204::<\1;;=\204::<\3;;=GGI\250\250\252\230\377\377\377\2\234\234\236" \
- ";;=\232::<\10;;=99;;;=::<;;=::<:::\316\316\316\230\377\377\377\10\377" \
- "\376\377\212\306@\214\305@\213\310=\214\306<\215\306A\214\307;\215\306" \
- "A\240\214\306>\10\214\305@\212\307<\214\306<\214\305@\212\306@\342\360" \
- "\315\376\377\377\377\376\377\210\377\377\377\212\214\306>\4\216\306\77" \
- "\212\306B\214\306>\250\325n\202\377\376\377\210\377\377\377\1\377\376" \
- "\377\202\377\377\377\5\376\377\375\342\362\316\214\305B\215\305@\214" \
- "\306<\210\214\306>\202\212\307>\5\343\361\320\377\377\377\377\377\375" \
- "\376\377\377\377\376\377\223\377\377\377\6\377\376\377\377\377\375\371" \
- "\372\364\223\312J\212\306@\215\305@\210\214\306>\10\214\305@\215\305" \
- ">\212\307>\304\343\240\377\377\375\377\377\377\377\377\375\377\376\377" \
- "\220\377\377\377\11\376\377\377\377\377\377\333\355\303\226\310K\213" \
- "\310\77\214\306>\215\305@\215\306A\214\305@\203\214\306>\7\215\305>\215" \
- "\305@\214\305@\212\307>\215\305>\215\307\77\215\306A\202\214\306<\5\215" \
- "\306A\213\305=\215\305@\215\307\77\213\305;\202\215\305@\13\215\307\77" \
- "\213\310\77\214\305@\215\307\77\212\307>\215\305>\214\306>\212\306@\235" \
- "\315U\347\365\334\377\376\377\220\377\377\377\15\376\376\376\377\377" \
- "\375\377\377\377\244\317c\213\307A\214\306<\213\307A\215\305>\215\305" \
- "<\215\307\77\214\306<\215\307\77\214\305@\202\215\307\77\12\214\305@" \
- "\215\306A\215\305@\234\315W\367\375\363\377\376\377\376\377\377\377\377" \
- "\375\376\377\377\377\376\377\220\377\377\377\10\260\331{\215\307=\212" \
- "\307>\213\307A\214\306>\215\305@\215\307\77\215\305>\210\214\306>\3\314" \
- "\345\253\377\377\377\376\377\375\202\377\376\377\2\377\377\377\376\377" \
- "\377\222\377\377\377\3\376\376\376\377\377\377\376\376\376\202\377\377" \
- "\377\3\364\364\364\220\220\220;;=\211::<\2;;=::<\202;;=\2::<;;=\202:" \
- ":<\4;;=::<;;=99;\203::<\2;;=99;\206::<\2GGI\247\247\251\203\377\377\377" \
- "\1\376\376\376\222\377\377\377\6\376\376\376\377\377\377\316\316\316" \
- ";;=99;;;=\202::<\2lln\376\376\376\202\377\377\377\1\376\376\376\221\377" \
- "\377\377\4\376\376\376\333\333\333FFH;;=\202::<\1;;=\202::<\1\265\265" \
- "\265\202\377\377\377\1\376\376\376\202\377\377\377\5\376\376\376\377" \
- "\377\377\376\376\376\377\377\377\316\316\320\202::<\2;;=99;\202;;=\1" \
- "\264\264\266\202\377\377\377\1\376\376\376\244\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\205\205\207\204::<\3;;=FFH\363\363\363\206\377" \
- "\377\377\1\376\376\376\202\377\377\377\3\233\233\233::<;;=\220::<\3""9" \
- "9;;;=99;\202::<\1;;=\203::<\1;;=\204::<\7;;=::<SSU\250\250\252\362\362" \
- "\364\377\377\377\376\376\376\225\377\377\377\3\376\376\376\377\377\377" \
- "\235\235\237\202::<\1;;=\231::<\2;;=99;\204::<\1\316\316\316\230\377" \
- "\377\377\10\377\377\373\212\311=\212\306@\216\306A\215\305>\215\307\77" \
- "\214\306>\215\306A\240\214\306>\7\214\306<\214\306>\216\306\77\214\306" \
- ">\214\305@\343\361\320\377\377\375\211\377\377\377\210\214\306>\10\213" \
- "\307A\212\306@\215\305@\212\307<\215\307\77\247\324o\375\377\376\376" \
- "\377\377\211\377\377\377\7\376\377\375\377\377\377\377\377\375\342\360" \
- "\315\214\305@\213\305=\215\307\77\210\214\306>\10\215\305>\215\307\77" \
- "\343\361\316\376\376\376\377\376\377\376\377\377\377\377\375\376\377" \
- "\372\220\377\377\377\10\376\377\377\377\376\377\377\377\375\377\376\374" \
- "\376\377\375\343\362\321\212\307>\214\307;\210\214\306>\4\215\307=\215" \
- "\304B\213\307A\305\342\240\203\377\377\377\1\376\377\377\222\377\377" \
- "\377\21\377\376\377\367\374\365\267\332\206\215\306A\212\306@\214\306" \
- "<\214\306>\215\306A\215\307\77\214\306>\214\305@\212\306B\212\306@\212" \
- "\307<\215\307\77\214\306>\214\305@\202\215\305@\5\214\305@\214\306>\214" \
- "\305@\212\307>\215\306A\202\214\305@\11\214\307;\214\306>\215\306A\214" \
- "\305@\215\305>\212\306@\222\311I\306\343\240\366\373\364\224\377\377" \
- "\377\6\303\342\237\217\304@\214\306<\214\306>\215\306C\212\306B\204\214" \
- "\305@\1\215\306A\202\214\305@\11\215\306A\214\306<\214\306>\341\361\314" \
- "\377\377\377\376\377\375\377\377\377\377\375\377\377\377\375\221\377" \
- "\377\377\10\370\373\364\224\307N\215\305@\215\305>\212\307<\215\306A" \
- "\212\307<\215\306A\210\214\306>\10\215\307=\346\364\332\376\377\375\376" \
- "\377\373\377\377\377\376\376\377\377\376\377\377\377\375\230\377\377" \
- "\377\5\346\346\350\204\204\206GGI::<;;=\202::<\5;;=::<;;=::<;;=\202:" \
- ":<\3;;=::<;;=\202::<\5;;=99;;;=::<;;=\207::<\3FFH\234\234\234\363\363" \
- "\363\203\377\377\377\1\376\376\376\222\377\377\377\1\376\376\376\202" \
- "\377\377\377\4\316\316\316::<;;=99;\202;;=\1kkm\202\377\377\377\1\376" \
- "\376\376\220\377\377\377\1\376\376\376\202\377\377\377\5\376\376\376" \
- "\266\266\26699;;;=::<\202;;=\3::<GGG\332\332\332\207\377\377\377\2\376" \
- "\376\376\204\204\206\202;;=\4::<;;=::<SSU\252\377\377\377\2\376\376\376" \
- "\346\346\350\202::<\5;;=::<99;;;;\266\266\266\203\377\377\377\1\376\376" \
- "\376\205\377\377\377\3\235\235\235::<99;\220::<\1;;=\205::<\203;;=\1" \
- "99;\203::<\3SSS\221\221\221\316\316\316\205\377\377\377\1\376\376\376" \
- "\222\377\377\377\1\376\376\376\203\377\377\377\3\234\234\236::<;;=\232" \
- "::<\7""99;::<;:\77::<;;=99;\317\317\321\230\377\377\377\7\377\375\377" \
- "\214\306<\213\307A\215\305>\215\307\77\212\307>\216\306\77\241\214\306" \
- ">\1\215\306C\202\215\305@\5\212\306@\215\307=\343\361\320\377\377\377" \
- "\377\376\377\210\377\377\377\210\214\306>\10\215\305<\215\307\77\216" \
- "\306\77\214\306>\216\305C\252\324r\377\377\377\377\377\373\211\377\377" \
- "\377\7\375\377\376\377\377\377\377\375\376\343\361\316\215\307=\212\307" \
- ">\215\305>\210\214\306>\10\214\305@\215\305<\342\362\316\377\377\375" \
- "\377\376\377\375\377\374\376\376\377\376\377\377\222\377\377\377\1\375" \
- "\377\372\202\377\377\377\3\377\376\377\304\341\237\215\307\77\210\214" \
- "\306>\10\212\307;\215\307\77\213\305=\305\342\240\377\377\377\377\376" \
- "\374\377\377\375\376\377\377\221\377\377\377\22\377\376\377\377\377\375" \
- "\376\377\377\377\375\376\361\367\351\270\334\204\214\306>\215\307\77" \
- "\214\305@\212\306@\213\307A\212\306@\213\310\77\214\306>\215\304B\214" \
- "\306>\212\307<\214\306>\202\216\306A\6\214\306>\213\310\77\214\305@\215" \
- "\305<\215\305>\215\307=\202\213\310\77\10\215\306A\214\306>\215\306A" \
- "\222\311I\300\336\226\361\370\346\376\376\376\377\377\377\202\377\376" \
- "\377\1\376\377\373\217\377\377\377\10\377\377\375\347\365\333\214\307" \
- ";\211\305A\213\304\77\215\307\77\215\305<\213\310\77\202\214\306>\1\215" \
- "\307\77\203\214\306>\4\215\307\77\214\306>\215\306A\275\337\223\202\377" \
- "\377\377\5\377\376\377\377\377\377\376\377\375\377\376\377\376\377\377" \
- "\220\377\377\377\10\375\377\376\331\357\301\215\307\77\215\305>\216\305" \
- "C\211\306=\220\305A\211\307@\210\214\306>\10\214\305@\246\321e\377\377" \
- "\377\377\376\377\376\377\377\377\377\375\376\377\377\377\376\377\227" \
- "\377\377\377\1\376\376\376\202\377\377\377\3\363\363\363\266\266\270" \
- "__a\207::<\202;;=\203::<\2;;=99;\202;;=\2""99;::<\202;;=\1::<\203;;=" \
- "\3^^^\250\250\250\363\363\363\203\377\377\377\1\376\376\376\202\377\377" \
- "\377\1\376\376\376\224\377\377\377\4\316\316\316999::<;;=\202::<\1ll" \
- "l\205\377\377\377\1\376\376\376\217\377\377\377\6\376\376\376\377\377" \
- "\377\376\376\376\204\204\204::<;;=\203::<\3:::TTT\363\363\363\206\377" \
- "\377\377\10\347\347\347;;;99;::<;;=::<:::\234\234\236\253\377\377\377" \
- "\3\376\376\376lln;;=\202::<\3;;=999SSS\202\377\377\377\1\376\376\376" \
- "\203\377\377\377\4\376\376\376\377\377\377\376\376\376\234\234\234\223" \
- "::<\1""99;\202::<\1;;=\203::<\5kkmxxz\235\235\237\301\301\301\346\346" \
- "\346\207\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\221" \
- "\377\377\377\1\376\376\376\202\377\377\377\3\235\235\235::<;;=\232::" \
- "<\2;;=99;\202::<\3;;=::<\316\316\316\230\377\377\377\10\373\377\376\216" \
- "\306A\214\306<\213\304A\212\306@\214\305@\214\304\77\215\307\77\240\214" \
- "\306>\6\214\306<\215\306A\215\305@\216\310@\217\304@\341\361\314\212" \
- "\377\377\377\210\214\306>\7\215\307\77\213\310\77\213\305=\215\307\77" \
- "\214\304\77\253\323r\374\377\373\211\377\377\377\1\377\376\377\203\377" \
- "\377\377\3\342\362\315\215\305@\215\307=\211\214\306>\10\214\306<\215" \
- "\304B\341\363\313\374\377\375\376\376\377\377\377\377\377\375\376\377" \
- "\377\375\221\377\377\377\7\376\377\375\376\376\377\377\377\377\375\377" \
- "\374\377\377\377\377\377\375\253\323p\210\214\306>\5\215\307\77\215\305" \
- ">\217\304@\305\342\237\376\377\375\202\377\377\377\1\377\377\375\220" \
- "\377\377\377\1\376\377\377\202\377\376\377\202\376\377\375\202\377\377" \
- "\377\5\360\370\351\311\347\247\245\320e\215\305>\212\307>\202\214\306" \
- ">\5\215\306A\212\307>\215\305@\214\306>\214\306<\202\214\306>\2\214\306" \
- "<\214\306>\202\216\306A\14\214\306>\215\306A\215\305<\214\306>\213\305" \
- "=\255\331x\323\353\267\366\374\362\377\377\377\377\377\375\377\377\377" \
- "\376\377\377\217\377\377\377\2\376\376\376\377\377\377\202\377\377\375" \
- "\11\244\317d\214\306>\213\307A\214\306>\214\305@\214\306>\215\306A\214" \
- "\306<\215\307\77\202\214\306>\202\214\305@\13\215\305<\215\305@\230\316" \
- "V\370\373\360\376\377\375\377\377\377\377\376\377\376\376\376\377\377" \
- "\375\377\376\377\376\377\377\220\377\377\377\10\376\376\376\377\376\377" \
- "\262\327x\214\306>\216\306A\215\307=\215\305<\215\306A\211\214\306>\6" \
- "\215\306C\307\341\240\376\377\373\376\377\377\376\377\375\376\376\374" \
- "\236\377\377\377\4\346\346\350\266\266\270\204\204\206SSU\202::<\1;;" \
- "=\202::<\1;;=\202::<\202;;=\3""99;::<;;=\203::<\4GGIxxz\247\247\247\347" \
- "\347\347\212\377\377\377\1\376\376\376\223\377\377\377\1\364\364\364" \
- "\205\316\316\316\1\332\332\332\203\377\377\377\202\376\376\376\221\377" \
- "\377\377\1\376\376\376\202\377\377\377\202\316\316\316\203\316\316\320" \
- "\3\316\316\316\317\317\317\346\346\346\206\377\377\377\5\346\346\346" \
- "\316\316\316\317\317\317\316\316\316\315\315\315\202\316\316\316\1\363" \
- "\363\363\250\377\377\377\1\376\376\376\203\377\377\377\3\346\346\346" \
- "\315\315\315\317\317\317\202\316\316\320\3\317\317\317\315\315\315\363" \
- "\363\363\202\377\377\377\202\376\376\376\204\377\377\377\3\346\346\346" \
- "\316\316\316\316\316\320\224\316\316\316\1\315\315\315\203\377\377\377" \
- "\1\376\376\376\215\377\377\377\1\376\376\376\225\377\377\377\2\346\346" \
- "\346\317\317\317\232\316\316\316\1\317\317\317\203\316\316\316\4\317" \
- "\317\317\315\315\315\316\316\316\363\363\363\231\377\377\377\3\340\361" \
- "\317\342\360\317\342\362\316\202\343\361\316\2\342\360\315\343\361\316" \
- "\240\342\361\320\10\342\362\316\342\361\320\343\363\317\341\360\317\342" \
- "\361\320\370\373\364\376\377\375\376\377\377\210\377\377\377\210\342" \
- "\361\320\7\341\360\317\342\362\316\343\361\316\342\360\314\342\361\320" \
- "\350\364\336\377\376\374\211\377\377\377\10\377\376\377\377\377\375\377" \
- "\377\377\377\377\375\370\373\362\341\360\321\340\357\316\342\362\316" \
- "\210\342\361\320\3\342\362\316\342\361\320\371\373\360\203\377\377\377" \
- "\202\377\376\377\220\377\377\377\4\377\377\375\376\376\376\377\376\377" \
- "\376\377\375\203\377\377\377\1\365\375\362\210\342\361\320\4\341\360" \
- "\321\342\361\322\343\363\317\360\367\345\224\377\377\377\7\376\377\377" \
- "\376\377\375\377\377\375\377\376\377\377\377\375\377\375\376\377\376" \
- "\377\202\377\377\377\30\376\376\377\364\370\351\333\354\277\277\337\224" \
- "\247\324k\224\313K\214\305@\214\306>\212\306@\214\306>\214\305B\215\306" \
- "C\215\307\77\212\306@\214\306>\215\307\77\241\321c\257\330|\304\342\242" \
- "\341\361\315\377\377\377\377\376\377\376\377\373\377\377\377\202\377" \
- "\377\375\1\377\376\377\203\377\377\377\1\376\377\377\212\377\377\377" \
- "\1\376\376\376\203\377\377\377\13\376\376\374\372\372\370\342\361\320" \
- "\343\361\316\342\362\316\341\360\317\342\361\320\341\360\317\342\362" \
- "\316\342\361\322\342\361\320\202\341\361\315\6\342\361\320\341\360\317" \
- "\343\361\315\343\361\320\356\371\350\377\376\377\203\377\377\377\1\376" \
- "\377\375\202\377\377\377\1\376\377\375\222\377\377\377\6\366\373\364" \
- "\342\361\320\342\362\316\342\360\317\341\362\316\343\361\320\210\342" \
- "\361\320\10\341\362\316\341\361\315\352\364\334\377\377\377\377\376\377" \
- "\377\377\377\376\377\377\376\377\375\222\377\377\377\202\376\376\376" \
- "\202\377\377\377\1\376\376\376\202\377\377\377\1\376\376\376\202\377" \
- "\377\377\3\376\376\376\377\377\377\375\375\375\202\377\377\377\5\363" \
- "\363\363\316\316\316\264\264\264\235\235\235\233\233\233\202kkk\202k" \
- "km\3llnkkmyy{\202\234\234\236\6\316\316\320\346\346\346\377\377\377\376" \
- "\376\376\377\377\377\376\376\376\204\377\377\377\1\376\376\376\204\377" \
- "\377\377\1\376\376\376\240\377\377\377\1\376\376\376\231\377\377\377" \
- "\1\375\375\375\203\377\377\377\1\376\376\376\214\377\377\377\1\376\376" \
- "\376\202\377\377\377\1\376\376\376\242\377\377\377\1\376\376\376\206" \
- "\377\377\377\3\376\376\376\377\377\377\376\376\376\204\377\377\377\1" \
- "\376\376\376\202\377\377\377\202\376\376\376\225\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\202\377\377\377\3\376\376\376\377\377\377" \
- "\376\376\376\214\377\377\377\3\376\376\376\377\377\377\376\376\376\265" \
- "\377\377\377\1\375\375\375\234\377\377\377\7\376\377\377\377\376\377" \
- "\376\377\377\376\376\374\377\376\377\377\377\377\377\377\375\240\377" \
- "\377\377\1\377\377\375\202\377\377\377\5\377\376\377\376\376\376\377" \
- "\376\377\376\376\377\377\377\375\221\377\377\377\7\375\376\377\377\377" \
- "\377\377\376\377\377\377\375\376\377\377\377\377\373\377\376\377\210" \
- "\377\377\377\5\377\376\377\377\377\377\376\376\374\376\377\377\377\377" \
- "\377\202\377\377\375\1\376\377\377\210\377\377\377\6\376\377\377\375" \
- "\376\377\377\376\377\377\377\377\376\377\377\377\377\377\202\377\377" \
- "\375\224\377\377\377\202\377\376\377\2\374\377\377\377\376\377\210\377" \
- "\377\377\3\376\377\377\376\376\376\376\377\377\202\377\377\377\3\375" \
- "\377\376\377\377\377\377\376\377\220\377\377\377\202\377\376\377\2\376" \
- "\377\377\375\376\377\202\377\377\377\4\377\377\375\377\376\377\377\377" \
- "\377\377\377\375\202\376\377\377\7\377\377\377\377\376\377\377\377\377" \
- "\376\377\375\370\373\364\344\357\315\342\361\320\202\342\362\315\14\340" \
- "\357\316\345\360\316\376\377\373\376\376\376\377\377\377\377\375\376" \
- "\377\377\375\377\377\377\375\377\376\377\377\377\377\376\377\377\377" \
- "\375\202\376\377\375\5\376\377\377\377\377\377\377\377\375\376\376\376" \
- "\377\376\377\214\377\377\377\1\376\376\376\202\377\377\377\5\377\377" \
- "\375\376\375\377\377\377\377\376\376\377\377\377\375\204\377\377\377" \
- "\1\377\377\375\205\377\377\377\202\377\376\377\2\377\377\377\377\377" \
- "\375\202\377\377\377\202\376\377\377\222\377\377\377\5\377\377\375\377" \
- "\377\377\377\377\375\377\377\377\377\377\375\202\377\377\377\1\377\376" \
- "\372\212\377\377\377\1\377\375\377\202\377\377\377\3\377\376\377\377" \
- "\377\377\377\377\375\225\377\377\377\1\376\376\376\211\377\377\377\1" \
- "\376\376\376\204\377\377\377\1\376\376\376\205\377\377\377\1\376\376" \
- "\376\206\377\377\377\3\376\376\376\377\377\377\376\376\376\206\377\377" \
- "\377\1\376\376\376\233\377\377\377\1\376\376\376\203\377\377\377\5\376" \
- "\376\376\377\377\377\376\376\376\377\377\377\376\376\376\223\377\377" \
- "\377\3\376\376\376\377\377\377\376\376\376\205\377\377\377\3\376\376" \
- "\376\377\377\377\376\376\376\203\377\377\377\3\376\376\376\377\377\377" \
- "\376\376\376\203\377\377\377\1\376\376\376\205\377\377\377\1\376\376" \
- "\376\246\377\377\377\3\376\376\376\377\377\377\376\376\376\220\377\377" \
- "\377\1\376\376\376\246\377\377\377\1\376\376\376\225\377\377\377\1\376" \
- "\376\376\202\377\377\377\1\376\376\376\240\377\377\377\1\376\376\376" \
- "\230\377\377\377\6\377\377\375\377\377\377\377\376\377\376\377\375\374" \
- "\377\377\376\375\377\242\377\377\377\202\377\376\377\6\376\376\376\375" \
- "\376\377\377\377\377\377\377\375\377\377\377\376\377\375\220\377\377" \
- "\377\7\377\377\375\377\377\377\377\377\375\377\375\376\376\377\375\376" \
- "\377\377\376\376\376\212\377\377\377\4\377\376\377\377\377\375\377\377" \
- "\377\377\377\375\203\377\376\377\210\377\377\377\5\377\377\375\377\377" \
- "\377\377\375\376\377\376\377\377\377\375\202\377\377\377\1\376\377\377" \
- "\221\377\377\377\1\375\376\377\203\377\377\375\2\376\377\375\377\375" \
- "\376\211\377\377\377\204\377\376\377\4\377\377\377\376\377\375\377\377" \
- "\375\377\376\377\221\377\377\377\5\376\377\377\376\376\376\377\377\373" \
- "\376\376\377\376\377\377\202\377\377\377\2\377\376\377\377\377\375\202" \
- "\377\377\377\7\377\377\375\377\376\377\376\376\377\377\377\377\376\377" \
- "\377\376\377\375\376\377\377\202\377\377\377\203\376\377\377\2\377\377" \
- "\377\376\376\374\202\377\376\377\13\376\376\376\377\377\375\377\377\377" \
- "\377\375\376\376\377\377\377\377\377\376\376\377\377\376\377\376\376" \
- "\374\376\377\377\377\377\375\221\377\377\377\203\377\377\375\4\377\377" \
- "\377\377\377\375\377\376\377\376\376\376\210\377\377\377\1\377\377\373" \
- "\203\377\377\377\1\377\377\375\202\376\377\377\222\377\377\377\1\377" \
- "\377\375\202\377\376\377\3\377\377\377\377\376\377\377\376\374\202\376" \
- "\377\377\210\377\377\377\4\377\377\375\377\377\377\376\377\375\377\375" \
- "\377\202\376\377\377\1\377\376\375\227\377\377\377\1\376\376\376\207" \
- "\377\377\377\1\376\376\376\217\377\377\377\1\376\376\376\205\377\377" \
- "\377\1\376\376\376\204\377\377\377\1\376\376\376\233\377\377\377\1\376" \
- "\376\376\211\377\377\377\1\376\376\376\222\377\377\377\1\376\376\376" \
- "\206\377\377\377\1\376\376\376\207\377\377\377\1\376\376\376\262\377" \
- "\377\377\1\376\376\376\212\377\377\377\1\376\376\376\202\377\377\377" \
- "\1\376\376\376\202\377\377\377\1\376\376\376\225\377\377\377\1\376\376" \
- "\376\306\377\377\377\1\376\376\376\235\377\377\377\7\377\376\377\376" \
- "\377\377\377\377\377\377\377\375\376\375\377\377\377\375\377\376\377" \
- "\241\377\377\377\1\376\377\377\203\377\377\377\3\377\377\375\377\375" \
- "\376\377\376\377\221\377\377\377\202\376\377\377\5\377\377\377\377\377" \
- "\375\377\377\377\377\376\377\377\377\375\211\377\377\377\203\377\377" \
- "\375\202\377\377\377\202\376\377\377\1\377\377\375\212\377\377\377\202" \
- "\376\377\375\3\376\377\377\377\377\375\377\376\377\223\377\377\377\6" \
- "\377\377\375\377\376\377\374\377\377\377\377\377\377\376\377\376\377" \
- "\375\210\377\377\377\3\377\377\375\376\377\377\377\377\375\202\377\377" \
- "\377\1\377\377\375\223\377\377\377\4\376\376\376\377\377\375\376\376" \
- "\376\377\376\377\202\377\377\375\1\376\376\376\206\377\377\377\1\377" \
- "\377\375\215\377\377\377\1\377\377\375\202\377\377\377\5\376\377\377" \
- "\377\377\377\376\376\374\377\377\377\377\376\377\202\377\377\377\1\376" \
- "\376\376\221\377\377\377\7\376\377\375\377\375\377\377\377\377\376\377" \
- "\377\377\377\377\377\377\373\377\376\377\202\377\377\377\1\377\377\375" \
- "\202\377\377\377\1\377\377\375\204\377\377\377\6\376\376\377\377\377" \
- "\375\376\377\377\377\377\375\377\376\377\375\377\374\222\377\377\377" \
- "\3\376\377\375\377\377\377\376\377\375\203\376\377\377\1\377\376\377" \
- "\211\377\377\377\7\377\377\373\377\376\377\377\377\375\377\377\377\377" \
- "\376\377\376\376\376\376\377\377")
-
-
diff --git a/meta-agl-profile-core/recipes-core/psplash/psplash_git.bbappend b/meta-agl-profile-core/recipes-core/psplash/psplash_git.bbappend
deleted file mode 100644
index 5a82fc872..000000000
--- a/meta-agl-profile-core/recipes-core/psplash/psplash_git.bbappend
+++ /dev/null
@@ -1,9 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI += "file://psplash-colors.h"
-
-SPLASH_IMAGES="file://psplash-poky-img.h;outsuffix=default"
-
-do_configure_append () {
- cp -f ${WORKDIR}/psplash-colors.h ${S}
-}
diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/0001-fix-udevd-seclabel-parsing.patch b/meta-agl-profile-core/recipes-core/systemd/systemd/0001-fix-udevd-seclabel-parsing.patch
deleted file mode 100644
index 29165b58e..000000000
--- a/meta-agl-profile-core/recipes-core/systemd/systemd/0001-fix-udevd-seclabel-parsing.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Fix udevd SECLABEL token parsing
-
-The udevd rules parsing rewrite in v243 broke SECLABEL parsing,
-with the result being that udevd crashes when it parses a line
-containing a SECLABEL token. Fix the handling of the attribute
-of SECLABEL tokens when parsing, and add a check to prevent
-crashes if the attribute is missing.
-
-Upstream-Status: Pending
-
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
-index efea16e5c5..3e757ccb06 100644
---- a/src/udev/udev-rules.c
-+++ b/src/udev/udev-rules.c
-@@ -918,7 +918,7 @@ static int parse_token(UdevRules *rules, const char *key, char *attr, UdevRuleOp
- op = OP_ASSIGN;
- }
-
-- r = rule_line_add_token(rule_line, TK_A_SECLABEL, op, value, NULL);
-+ r = rule_line_add_token(rule_line, TK_A_SECLABEL, op, value, attr);
- } else if (streq(key, "RUN")) {
- if (is_match || op == OP_REMOVE)
- return log_token_invalid_op(rules, key);
-@@ -1927,6 +1927,8 @@ static int udev_rule_apply_token_to_event(
- _cleanup_free_ char *name = NULL, *label = NULL;
- char label_str[UTIL_LINE_SIZE] = {};
-
-+ if (!token->data)
-+ break;
- name = strdup((const char*) token->data);
- if (!name)
- return log_oom();
diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch b/meta-agl-profile-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch
deleted file mode 100644
index feaff2736..000000000
--- a/meta-agl-profile-core/recipes-core/systemd/systemd/0002-network-add-CAN-Termination-tristate-option.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 1e6ffb3129340291027d2690631f62eb7d0e0a78 Mon Sep 17 00:00:00 2001
-From: Matt Ranostay <matt.ranostay@konsulko.com>
-Date: Tue, 11 Feb 2020 18:13:45 -0800
-Subject: [PATCH] network: add CAN Termination tristate option
-
-Upstream-Status: Submitted
-Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
----
- src/libsystemd/sd-netlink/netlink-types.c | 1 +
- src/network/networkd-can.c | 13 +++++++++++++
- src/network/networkd-network-gperf.gperf | 1 +
- src/network/networkd-network.c | 1 +
- src/network/networkd-network.h | 1 +
- test/fuzz/fuzz-network-parser/directives.network | 1 +
- 6 files changed, 18 insertions(+)
-
-diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c
-index a55460f034..96e211dcf0 100644
---- a/src/libsystemd/sd-netlink/netlink-types.c
-+++ b/src/libsystemd/sd-netlink/netlink-types.c
-@@ -316,6 +316,7 @@ static const NLType rtnl_link_info_data_can_types[] = {
- [IFLA_CAN_BITTIMING] = { .size = sizeof(struct can_bittiming) },
- [IFLA_CAN_RESTART_MS] = { .type = NETLINK_TYPE_U32 },
- [IFLA_CAN_CTRLMODE] = { .size = sizeof(struct can_ctrlmode) },
-+ [IFLA_CAN_TERMINATION] = { .type = NETLINK_TYPE_U16 },
- };
-
- static const NLType rtnl_link_info_data_macsec_types[] = {
-diff --git a/src/network/networkd-can.c b/src/network/networkd-can.c
-index 5755df57bd..3abe8ae2ed 100644
---- a/src/network/networkd-can.c
-+++ b/src/network/networkd-can.c
-@@ -9,6 +9,8 @@
- #include "networkd-manager.h"
- #include "string-util.h"
-
-+#define CAN_TERMINATION_OHM_VALUE 120
-+
- static int link_up_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
- int r;
-
-@@ -152,6 +154,17 @@ static int link_set_can(Link *link) {
- return log_link_error_errno(link, r, "Could not append IFLA_CAN_CTRLMODE attribute: %m");
- }
-
-+ if (link->network->can_termination >= 0) {
-+
-+ log_link_debug(link, "%sabling can-termination", link->network->can_termination ? "En" : "Dis");
-+
-+ r = sd_netlink_message_append_u16(m, IFLA_CAN_TERMINATION,
-+ link->network->can_termination ? CAN_TERMINATION_OHM_VALUE : 0);
-+ if (r < 0)
-+ return log_link_error_errno(link, r, "Could not append IFLA_CAN_TERMINATION attribute: %m");
-+
-+ }
-+
- r = sd_netlink_message_close_container(m);
- if (r < 0)
- return log_link_error_errno(link, r, "Failed to close netlink container: %m");
-diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf
-index f7e68be181..b3df4f3960 100644
---- a/src/network/networkd-network-gperf.gperf
-+++ b/src/network/networkd-network-gperf.gperf
-@@ -245,6 +245,7 @@ CAN.BitRate, config_parse_si_size,
- CAN.SamplePoint, config_parse_permille, 0, offsetof(Network, can_sample_point)
- CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us)
- CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling)
-+CAN.Termination, config_parse_tristate, 0, offsetof(Network, can_termination)
- TrafficControlQueueingDiscipline.Parent, config_parse_tc_qdiscs_parent, 0, 0
- TrafficControlQueueingDiscipline.NetworkEmulatorDelaySec, config_parse_tc_network_emulator_delay, 0, 0
- TrafficControlQueueingDiscipline.NetworkEmulatorDelayJitterSec, config_parse_tc_network_emulator_delay, 0, 0
-diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
-index 6e443975f1..0ea5c05db7 100644
---- a/src/network/networkd-network.c
-+++ b/src/network/networkd-network.c
-@@ -448,6 +448,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
- .keep_configuration = _KEEP_CONFIGURATION_INVALID,
-
- .can_triple_sampling = -1,
-+ .can_termination = -1,
- .ip_service_type = -1,
- };
-
-diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h
-index aa74bb4ae7..6a1f094156 100644
---- a/src/network/networkd-network.h
-+++ b/src/network/networkd-network.h
-@@ -193,6 +193,7 @@ struct Network {
- unsigned can_sample_point;
- usec_t can_restart_us;
- int can_triple_sampling;
-+ int can_termination;
-
- AddressFamily ip_forward;
- bool ip_masquerade;
-diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network
-index 5bd80dece8..781269d960 100644
---- a/test/fuzz/fuzz-network-parser/directives.network
-+++ b/test/fuzz/fuzz-network-parser/directives.network
-@@ -194,6 +194,7 @@ SamplePoint=
- BitRate=
- RestartSec=
- TripleSampling=
-+Termination=
- [Address]
- DuplicateAddressDetection=
- AutoJoin=
diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd/wired.network b/meta-agl-profile-core/recipes-core/systemd/systemd/wired.network
deleted file mode 100644
index 3559b0155..000000000
--- a/meta-agl-profile-core/recipes-core/systemd/systemd/wired.network
+++ /dev/null
@@ -1,5 +0,0 @@
-[Match]
-Name=eth* en*
-
-[Network]
-DHCP=yes
diff --git a/meta-agl-profile-core/recipes-core/systemd/systemd_%.bbappend b/meta-agl-profile-core/recipes-core/systemd/systemd_%.bbappend
deleted file mode 100644
index 242b3d39c..000000000
--- a/meta-agl-profile-core/recipes-core/systemd/systemd_%.bbappend
+++ /dev/null
@@ -1,35 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "\
- file://0001-fix-udevd-seclabel-parsing.patch \
- file://0002-network-add-CAN-Termination-tristate-option.patch \
- file://e2fsck.conf \
- file://canbus-can.network \
- ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','file://wired.network','',d)} \
-"
-
-# enable networkd/resolved support
-PACKAGECONFIG_append_pn-systemd = " \
- ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','networkd resolved','',d)} \
-"
-
-do_install_append() {
- # Install /etc/e2fsck.conf to avoid boot stuck by wrong clock time
- install -m 644 -p -D ${WORKDIR}/e2fsck.conf ${D}${sysconfdir}/e2fsck.conf
-
- # Install canbus network script
- install -m 0644 ${WORKDIR}/canbus-can.network ${D}${nonarch_base_libdir}/systemd/network/60-canbus-can.network
-
- if ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','true','false',d)}; then
- # Install DHCP configuration for Ethernet adapters
- install -m 644 ${WORKDIR}/wired.network ${D}${sysconfdir}/systemd/network
- fi
-}
-
-FILES_${PN} += "${sysconfdir}/e2fsck.conf "
-
-# SPEC-737: connmand also has a NTP client which races with systemd-timesyncd
-PACKAGECONFIG_remove = "timesyncd"
-
-# Enable systemd-coredump when agl-devel is set on
-PACKAGECONFIG_append_agl-devel = " coredump"
diff --git a/meta-agl-profile-core/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb b/meta-agl-profile-core/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb
deleted file mode 100644
index 3fea2ed91..000000000
--- a/meta-agl-profile-core/recipes-devtools/cmake-apps-module/cmake-apps-module_git.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "CMake module to ease development of apps"
-DESCRIPTION = "This is a migration of former app-templates git submodule which let you \
-ease the development of apps and widget building."
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/cmake-apps-module"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-SECTION = "apps"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cmake-apps-module;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "7c03348d9c2de43684fa69c3c9e227b25daceaaa"
-
-PV = "${AGLVERSION}"
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-FILES_${PN} += " ${datadir}/*/Modules/CMakeAfbTemplates*"
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta-agl-profile-core/recipes-devtools/gdb/gdb_%.bbappend b/meta-agl-profile-core/recipes-devtools/gdb/gdb_%.bbappend
deleted file mode 100644
index 7cba933af..000000000
--- a/meta-agl-profile-core/recipes-devtools/gdb/gdb_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-PACKAGECONFIG_remove = "readline"
diff --git a/meta-agl-profile-core/recipes-devtools/json-c/json-c_%.bbappend b/meta-agl-profile-core/recipes-devtools/json-c/json-c_%.bbappend
deleted file mode 100644
index 43807bd12..000000000
--- a/meta-agl-profile-core/recipes-devtools/json-c/json-c_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_OECONF += "--enable-threading"
diff --git a/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.bb b/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.bb
deleted file mode 100644
index 1174ac4d7..000000000
--- a/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require libafb-helpers_git.inc
-
-inherit cmake
-
-RDEPENDS_${PN}_append = " af-binder"
-
-ALLOW_EMPTY_${PN} = "1"
-
diff --git a/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.inc b/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.inc
deleted file mode 100644
index 6753225b4..000000000
--- a/meta-agl-profile-core/recipes-devtools/libafb-helpers/libafb-helpers_git.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "AFB helpers library"
-DESCRIPTION = "AFB helpers library to ease JSON object manipulation and binding interaction"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libafb-helpers;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "1d1c6cef6039effd4c045a76d30414b589336d0e"
-
-PV = "${AGLVERSION}"
-S = "${WORKDIR}/git"
-
-DEPENDS_append = " af-binder jq"
-
diff --git a/meta-agl-profile-core/recipes-devtools/libappcontroller/libappcontroller_git.bb b/meta-agl-profile-core/recipes-devtools/libappcontroller/libappcontroller_git.bb
deleted file mode 100644
index 0ee9c5e84..000000000
--- a/meta-agl-profile-core/recipes-devtools/libappcontroller/libappcontroller_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Controller library for an Application Framework"
-DESCRIPTION = "Controller library to be used to easily create a binding for AGL App Framework"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libappcontroller;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "1bef31c8bbad27f4914484c5007b2e199fb073d4"
-
-PV = "${AGLVERSION}"
-S = "${WORKDIR}/git"
-
-DEPENDS_append = " af-binder libafb-helpers lua"
-RDEPENDS_${PN}_append = " af-binder lua"
-
-inherit cmake
-
-ALLOW_EMPTY_${PN} = "1"
-
diff --git a/meta-agl-profile-core/recipes-devtools/low-level-can-generator/low-level-can-generator_git.bb b/meta-agl-profile-core/recipes-devtools/low-level-can-generator/low-level-can-generator_git.bb
deleted file mode 100644
index 4c0bda071..000000000
--- a/meta-agl-profile-core/recipes-devtools/low-level-can-generator/low-level-can-generator_git.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Low level CAN generator"
-DESCRIPTION = "Generator used to customize low level CAN service with customs signals"
-SECTION = "devel"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-inherit cmake pkgconfig
-BBCLASSEXTEND = "nativesdk"
-DEPENDS = " cmake-apps-module"
-
-SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/src/low-level-can-generator;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "0a3e354c3d81866e1a755367ab5592b3ced868bb"
-
-PV = "${AGLVERSION}"
-S = "${WORKDIR}/git"
-
diff --git a/meta-agl-profile-core/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/meta-agl-profile-core/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
deleted file mode 100644
index 18621dbfe..000000000
--- a/meta-agl-profile-core/recipes-devtools/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
+++ /dev/null
@@ -1,4 +0,0 @@
-RDEPENDS_${PN} += "nativesdk-low-level-can-generator \
- nativesdk-cmake-apps-module \
- nativesdk-cmake-apps-module-doc \
-"
diff --git a/meta-agl-profile-core/recipes-devtools/python/python3-asyncssh_2.3.0.bb b/meta-agl-profile-core/recipes-devtools/python/python3-asyncssh_2.3.0.bb
deleted file mode 100644
index ab7e8afa9..000000000
--- a/meta-agl-profile-core/recipes-devtools/python/python3-asyncssh_2.3.0.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "\
-AsyncSSH is a Python package which provides an asynchronous client and \
-server implementation of the SSHv2 protocol on top of the Python \
-asyncio framework."
-HOMEPAGE = "https://github.com/ronf/asyncssh"
-LICENSE = "EPL-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d9fc0efef5228704e7f5b37f27192723"
-
-SRC_URI[sha256sum] = "44bda34c7123f00c3df95d24e2dc8d43c4d17b456fbb8c434ef4f4a7ebb5265e"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += "${PYTHON_PN}-asyncio ${PYTHON_PN}-cryptography"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-agl-profile-core/recipes-devtools/python/python3-pytest-dependency_0.5.1.bb b/meta-agl-profile-core/recipes-devtools/python/python3-pytest-dependency_0.5.1.bb
deleted file mode 100644
index 5ff2d4ecf..000000000
--- a/meta-agl-profile-core/recipes-devtools/python/python3-pytest-dependency_0.5.1.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "pytest-dependency manages dependencies of tests."
-HOMEPAGE = "https://github.com/RKrahl/pytest-dependency"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://README.rst;md5=35b9938ae48d25e6b8306232e98463dd"
-
-SRC_URI[sha256sum] = "c2a892906192663f85030a6ab91304e508e546cddfe557d692d61ec57a1d946b"
-
-inherit pypi setuptools3
-
-DEPENDS += "${PYTHON_PN}-pytest-native"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-agl-profile-core/recipes-devtools/python/python3-pytest-reverse_1.0.1.bb b/meta-agl-profile-core/recipes-devtools/python/python3-pytest-reverse_1.0.1.bb
deleted file mode 100644
index 5ed9b1d9d..000000000
--- a/meta-agl-profile-core/recipes-devtools/python/python3-pytest-reverse_1.0.1.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "pytest-reverse is a pytest plugin to reverse test order"
-HOMEPAGE = "https://github.com/adamchainz/pytest-reverse"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=caf1f407ae86ecd57ab721dff94079b7"
-
-SRC_URI[sha256sum] = "40cbc47df8a262fed778e500f4d0b17d2d08ef8b9fbf899c0bab9488be192aac"
-
-inherit pypi setuptools3
-
-DEPENDS += "${PYTHON_PN}-pytest-native"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-agl-profile-core/recipes-devtools/qemu/qemu_%.bbappend b/meta-agl-profile-core/recipes-devtools/qemu/qemu_%.bbappend
deleted file mode 100644
index 1a6a98b7f..000000000
--- a/meta-agl-profile-core/recipes-devtools/qemu/qemu_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-QEMU_TARGETS_class-target_aglegvirt = " aarch64 x86_64"
diff --git a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts b/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts
deleted file mode 100755
index 1d1a5a059..000000000
--- a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2017 IoT.bzh.
-
-# Author: Ronan Le Martret <ronan.lemartret@iot.bzh>
-#
-
-# The following script will run all the scriptlets found in #SYSCONFDIR#/agl-postinsts.
-
-agl_pi_dir="#SYSCONFDIR#/agl-postinsts"
-
-POSTINST_LOGGING=1
-LOGFILE=/var/log/agl-postinstall.log
-
-[ -e $LOGFILE ] && mv ${LOGFILE} ${LOGFILE}.old.$(date +%F--%H%M.%S)
-
-append_log=">>$LOGFILE 2>&1"
-
-exec_postinst_scriptlets() {
- for i in `ls $agl_pi_dir`; do
- i=$agl_pi_dir/$i
- echo "Running postinst $i..."
- [ "$POSTINST_LOGGING" = "1" ] && eval echo "Running postinst $i..." $append_log
- if [ -x $i ]; then
- eval sh -c $i $append_log
- if [ $? -eq 0 ]; then
- rm $i
- else
- echo "ERROR: postinst $i failed."
- [ "$POSTINST_LOGGING" = "1" ] && eval echo "ERROR: postinst $i failed." $append_log
- remove_agl_pi_dir=0
- fi
- else
- echo "ERROR: postinst $i do not exists or do not have execute permission."
- [ "$POSTINST_LOGGING" = "1" ] && eval echo "ERROR: postinst $i do not exists or do not have execute permission." $append_log
- remove_agl_pi_dir=0
- fi
- done
-}
-
-remove_agl_pi_dir=1
-exec_postinst_scriptlets
-systemctl daemon-reload
-
-# since all postinstalls executed successfully, remove the postinstalls directory
-if [ $remove_agl_pi_dir = 1 ]; then
- rm -rf $agl_pi_dir
-fi
diff --git a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts.service b/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts.service
deleted file mode 100644
index 8f8667db6..000000000
--- a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts/run-agl-postinsts.service
+++ /dev/null
@@ -1,17 +0,0 @@
-[Unit]
-Description=Run pending agl postinsts
-DefaultDependencies=no
-After=#SYSTEMD_SERVICE_AFTER#
-Before=#SYSTEMD_SERVICE_BEFORE#
-ConditionPathExists=#SYSCONFDIR#/agl-postinsts
-
-[Service]
-Type=oneshot
-StandardOutput=journal+console
-ExecStart=#SBINDIR#/run-agl-postinsts
-ExecStartPost=#BASE_BINDIR#/systemctl disable run-agl-postinsts.service
-RemainAfterExit=No
-TimeoutSec=0
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bb b/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bb
deleted file mode 100644
index 38bc66df8..000000000
--- a/meta-agl-profile-core/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "Runs AGL postinstall scripts on first boot of the target device"
-SECTION = "devel"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-
-SRC_URI = "file://run-agl-postinsts \
- file://run-agl-postinsts.service"
-
-S = "${WORKDIR}"
-
-inherit allarch systemd
-
-SYSTEMD_SERVICE_${PN} = "run-agl-postinsts.service"
-
-SYSTEMD_SERVICE_AFTER ?= "dbus.service cynagora.service"
-
-SYSTEMD_SERVICE_BEFORE ?= "systemd-user-sessions.service"
-
-do_configure() {
- :
-}
-
-do_compile () {
- :
-}
-
-do_install() {
- install -d ${D}${sbindir}
- install -m 0755 ${WORKDIR}/run-agl-postinsts ${D}${sbindir}/
-
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/run-agl-postinsts.service ${D}${systemd_unitdir}/system/
-
- sed -i -e 's:#SYSCONFDIR#:${sysconfdir}:g' \
- -e 's:#SBINDIR#:${sbindir}:g' \
- -e 's:#BASE_BINDIR#:${base_bindir}:g' \
- -e 's:#LOCALSTATEDIR#:${localstatedir}:g' \
- ${D}${sbindir}/run-agl-postinsts \
- ${D}${systemd_unitdir}/system/run-agl-postinsts.service
-
- sed -i -e 's:#SYSTEMD_SERVICE_AFTER#:${SYSTEMD_SERVICE_AFTER}:g' \
- -e 's:#SYSTEMD_SERVICE_BEFORE#:${SYSTEMD_SERVICE_BEFORE}:g' \
- ${D}${systemd_unitdir}/system/run-agl-postinsts.service
-}
-
diff --git a/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf b/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf
deleted file mode 100644
index d706cc5f7..000000000
--- a/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts/ldconfig-wait.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Unit]
-After=ldconfig.service
diff --git a/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts_%.bbappend b/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts_%.bbappend
deleted file mode 100644
index 4cc2edf86..000000000
--- a/meta-agl-profile-core/recipes-devtools/run-postinsts/run-postinsts_%.bbappend
+++ /dev/null
@@ -1,14 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "file://ldconfig-wait.conf"
-
-do_configure_append() {
- if ! grep -q StandardOutput= ${WORKDIR}/run-postinsts.service; then
- sed -i '/ExecStart=/iStandardOutput=journal+console' ${WORKDIR}/run-postinsts.service
- fi
-}
-
-do_install_append() {
- install -d ${D}${sysconfdir}/systemd/system/run-postinsts.service.d
- install -m 0644 ${WORKDIR}/ldconfig-wait.conf ${D}${sysconfdir}/systemd/system/run-postinsts.service.d
-}
diff --git a/meta-agl-profile-core/recipes-extended/gperf/.appends.core b/meta-agl-profile-core/recipes-extended/gperf/.appends.core
deleted file mode 100644
index e69de29bb..000000000
--- a/meta-agl-profile-core/recipes-extended/gperf/.appends.core
+++ /dev/null
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0002-src-most-add-auto-conf-feature.patch b/meta-agl-profile-core/recipes-kernel/most/files/0002-src-most-add-auto-conf-feature.patch
deleted file mode 100644
index dd811c81b..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0002-src-most-add-auto-conf-feature.patch
+++ /dev/null
@@ -1,472 +0,0 @@
-From 9cb7cb85f59509ac445116e9458c502cf6cb74e6 Mon Sep 17 00:00:00 2001
-From: Christian Gromm <christian.gromm@microchip.com>
-Date: Thu, 9 Nov 2017 13:20:23 +0100
-Subject: [PATCH 2/2] src: most: add auto conf feature
-
-This patch adds the auto configuration feature to the driver
-sources. It is needed to have the driver configured automatically
-upon start up w/o the need for userspace to set up sysfs.
-
-Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
----
- driver/Makefile | 3 +
- driver/default_conf.c | 162 ++++++++++++++++++++++++++++++++++++++++++++++
- driver/include/mostcore.h | 64 ++++++++++++++++++
- driver/mostcore/core.c | 120 ++++++++++++++++++++++++++++------
- 4 files changed, 331 insertions(+), 18 deletions(-)
- create mode 100644 driver/default_conf.c
-
-diff --git a/Makefile b/Makefile
-index e77a4b6..6d74ebe 100644
---- a/Makefile
-+++ b/Makefile
-@@ -6,6 +6,9 @@ obj-m := mostcore.o
- mostcore-y := mostcore/core.o
- CFLAGS_core.o := -I$(src)/include/
-
-+obj-m += default_conf.o
-+CFLAGL_default_conf.o := -I$(src)/include
-+
- obj-m += aim_cdev.o
- aim_cdev-y := aim-cdev/cdev.o
- CFLAGS_cdev.o := -I$(src)/include/
-diff --git a/default_conf.c b/default_conf.c
-new file mode 100644
-index 0000000..adb1786
---- /dev/null
-+++ b/default_conf.c
-@@ -0,0 +1,162 @@
-+/*
-+ * default_conf.c - Default configuration for the MOST channels.
-+ *
-+ * Copyright (C) 2017, Microchip Technology Germany II GmbH & Co. KG
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * This file is licensed under GPLv2.
-+ */
-+
-+#include "include/mostcore.h"
-+#include <linux/module.h>
-+
-+static struct most_config_probe config_probes[] = {
-+
-+ /* OS81118 Control */
-+ {
-+ .ch_name = "ep8f",
-+ .cfg = {
-+ .direction = MOST_CH_RX,
-+ .data_type = MOST_CH_CONTROL,
-+ .num_buffers = 16,
-+ .buffer_size = 64,
-+ },
-+ .aim_name = "cdev",
-+ .aim_param = "inic-usb-crx",
-+ },
-+ {
-+ .ch_name = "ep0f",
-+ .cfg = {
-+ .direction = MOST_CH_TX,
-+ .data_type = MOST_CH_CONTROL,
-+ .num_buffers = 16,
-+ .buffer_size = 64,
-+ },
-+ .aim_name = "cdev",
-+ .aim_param = "inic-usb-ctx",
-+ },
-+ /* OS81118 Async */
-+ {
-+ .ch_name = "ep8e",
-+ .cfg = {
-+ .direction = MOST_CH_RX,
-+ .data_type = MOST_CH_ASYNC,
-+ .num_buffers = 20,
-+ .buffer_size = 1522,
-+ },
-+ .aim_name = "networking",
-+ .aim_param = "inic-usb-arx",
-+ },
-+ {
-+ .ch_name = "ep0e",
-+ .cfg = {
-+ .direction = MOST_CH_TX,
-+ .data_type = MOST_CH_ASYNC,
-+ .num_buffers = 20,
-+ .buffer_size = 1522,
-+ },
-+ .aim_name = "networking",
-+ .aim_param = "inic-usb-atx",
-+ },
-+ /* OS81210 Control */
-+ {
-+ .ch_name = "ep87",
-+ .cfg = {
-+ .direction = MOST_CH_RX,
-+ .data_type = MOST_CH_CONTROL,
-+ .num_buffers = 16,
-+ .buffer_size = 64,
-+ },
-+ .aim_name = "cdev",
-+ .aim_param = "inic-usb-crx",
-+ },
-+ {
-+ .ch_name = "ep07",
-+ .cfg = {
-+ .direction = MOST_CH_TX,
-+ .data_type = MOST_CH_CONTROL,
-+ .num_buffers = 16,
-+ .buffer_size = 64,
-+ },
-+ .aim_name = "cdev",
-+ .aim_param = "inic-usb-ctx",
-+ },
-+ /* OS81210 Async */
-+ {
-+ .ch_name = "ep86",
-+ .cfg = {
-+ .direction = MOST_CH_RX,
-+ .data_type = MOST_CH_ASYNC,
-+ .num_buffers = 20,
-+ .buffer_size = 1522,
-+ },
-+ .aim_name = "networking",
-+ .aim_param = "inic-usb-arx",
-+ },
-+ {
-+ .ch_name = "ep06",
-+ .cfg = {
-+ .direction = MOST_CH_TX,
-+ .data_type = MOST_CH_ASYNC,
-+ .num_buffers = 20,
-+ .buffer_size = 1522,
-+ },
-+ .aim_name = "networking",
-+ .aim_param = "inic-usb-atx",
-+ },
-+ /* Streaming channels (common for all INICs) */
-+ {
-+ .ch_name = "ep01",
-+ .cfg = {
-+ .direction = MOST_CH_TX,
-+ .data_type = MOST_CH_SYNC,
-+ .num_buffers = 8,
-+ .buffer_size = 2 * 12 * 42,
-+ .subbuffer_size = 12,
-+ .packets_per_xact = 42,
-+ },
-+ .aim_name = "sound",
-+ .aim_param = "ep01-6ch.6x16",
-+ },
-+ {
-+ .ch_name = "ep02",
-+ .cfg = {
-+ .direction = MOST_CH_TX,
-+ .data_type = MOST_CH_ISOC,
-+ .num_buffers = 8,
-+ .buffer_size = 40 * 188,
-+ .subbuffer_size = 188,
-+ .packets_per_xact = 2,
-+ },
-+ .aim_name = "cdev",
-+ .aim_param = "inic-usb-itx1",
-+ },
-+
-+ /* sentinel */
-+ {}
-+};
-+
-+static struct most_config_set config_set = {
-+ .probes = config_probes
-+};
-+
-+static int __init mod_init(void)
-+{
-+ most_register_config_set(&config_set);
-+ return 0;
-+}
-+
-+static void __exit mod_exit(void)
-+{
-+ most_deregister_config_set(&config_set);
-+}
-+
-+module_init(mod_init);
-+module_exit(mod_exit);
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Andrey Shvetsov <andrey.shvetsov@k2l.de>");
-+MODULE_DESCRIPTION("Default configuration for the MOST channels");
-diff --git a/include/mostcore.h b/include/mostcore.h
-index dc87121..3c00efb 100644
---- a/include/mostcore.h
-+++ b/include/mostcore.h
-@@ -145,6 +145,39 @@ struct most_channel_config {
- u16 dbr_size;
- };
-
-+/**
-+ * struct most_config_probe - matching rule, channel configuration and
-+ * the optional AIM name used for the automatic configuration and linking
-+ * of the channel
-+ * @dev_name: optional matching device id
-+ * ("usb_device 1-1:1.0," "dim2-12345678", etc.)
-+ * @ch_name: matching channel name ("ep8f", "ca2", etc.)
-+ * @cfg: configuration that will be applied for the found channel
-+ * @aim_name: optional name of the AIM that will be linked to the channel
-+ * ("cdev", "networking", "v4l", "sound")
-+ * @aim_param: AIM dependent parameter (it is the character device name
-+ * for the cdev AIM, PCM format for the audio AIM, etc.)
-+ */
-+struct most_config_probe {
-+ const char *dev_name;
-+ const char *ch_name;
-+ struct most_channel_config cfg;
-+ const char *aim_name;
-+ const char *aim_param;
-+};
-+
-+/**
-+ * struct most_config_set - the configuration set containing
-+ * several automatic configurations for the different channels
-+ * @probes: list of the matching rules and the configurations,
-+ * that must be ended with the empty structure
-+ * @list: list head used by the MostCore
-+ */
-+struct most_config_set {
-+ const struct most_config_probe *probes;
-+ struct list_head list;
-+};
-+
- /*
- * struct mbo - MOST Buffer Object.
- * @context: context for core completion handler
-@@ -285,6 +318,37 @@ struct most_aim {
- };
-
- /**
-+ * most_register_config_set - registers the configuration set
-+ *
-+ * @cfg_set: configuration set to be registered for the future probes
-+ *
-+ * The function registers the given configuration set.
-+ *
-+ * It is possible to register or deregister several configuration sets
-+ * independently. Different configuration sets may contain the
-+ * overlapped matching rules but later registered configuration set has
-+ * the higher priority over the prior registered set.
-+ *
-+ * The only the first matched configuration is applied for each
-+ * channel.
-+ *
-+ * The configuration for the channel is applied at the time of
-+ * registration of the parent most_interface.
-+ */
-+void most_register_config_set(struct most_config_set *cfg_set);
-+
-+/**
-+ * most_deregister_config_set - deregisters the prior registered
-+ * configuration set
-+ *
-+ * @cfg_set: configuration set to be deregistered
-+ *
-+ * The calling of this function does not change the current
-+ * configuration of the channels.
-+ */
-+void most_deregister_config_set(struct most_config_set *cfg_set);
-+
-+/**
- * most_register_interface - Registers instance of the interface.
- * @iface: Pointer to the interface instance description.
- *
-diff --git a/mostcore/core.c b/mostcore/core.c
-index 9e0a352..6035cf0 100644
---- a/mostcore/core.c
-+++ b/mostcore/core.c
-@@ -36,6 +36,8 @@ static struct class *most_class;
- static struct device *core_dev;
- static struct ida mdev_id;
- static int dummy_num_buffers;
-+static struct list_head config_probes;
-+struct mutex config_probes_mt; /* config_probes */
-
- struct most_c_aim_obj {
- struct most_aim *ptr;
-@@ -918,6 +920,30 @@ most_c_obj *get_channel_by_name(char *mdev, char *mdev_ch)
- return c;
- }
-
-+static int link_channel_to_aim(struct most_c_obj *c, struct most_aim *aim,
-+ char *aim_param)
-+{
-+ int ret;
-+ struct most_aim **aim_ptr;
-+
-+ if (!c->aim0.ptr)
-+ aim_ptr = &c->aim0.ptr;
-+ else if (!c->aim1.ptr)
-+ aim_ptr = &c->aim1.ptr;
-+ else
-+ return -ENOSPC;
-+
-+ *aim_ptr = aim;
-+ ret = aim->probe_channel(c->iface, c->channel_id,
-+ &c->cfg, &c->kobj, aim_param);
-+ if (ret) {
-+ *aim_ptr = NULL;
-+ return ret;
-+ }
-+
-+ return 0;
-+}
-+
- /**
- * add_link_store - store() function for add_link attribute
- * @aim_obj: pointer to AIM object
-@@ -946,45 +972,33 @@ static ssize_t add_link_store(struct most_aim_obj *aim_obj,
- size_t len)
- {
- struct most_c_obj *c;
-- struct most_aim **aim_ptr;
- char buffer[STRING_SIZE];
- char *mdev;
- char *mdev_ch;
-- char *mdev_devnod;
-+ char *aim_param;
- char devnod_buf[STRING_SIZE];
- int ret;
- size_t max_len = min_t(size_t, len + 1, STRING_SIZE);
-
- strlcpy(buffer, buf, max_len);
-
-- ret = split_string(buffer, &mdev, &mdev_ch, &mdev_devnod);
-+ ret = split_string(buffer, &mdev, &mdev_ch, &aim_param);
- if (ret)
- return ret;
-
-- if (!mdev_devnod || *mdev_devnod == 0) {
-+ if (!aim_param || *aim_param == 0) {
- snprintf(devnod_buf, sizeof(devnod_buf), "%s-%s", mdev,
- mdev_ch);
-- mdev_devnod = devnod_buf;
-+ aim_param = devnod_buf;
- }
-
- c = get_channel_by_name(mdev, mdev_ch);
- if (IS_ERR(c))
- return -ENODEV;
-
-- if (!c->aim0.ptr)
-- aim_ptr = &c->aim0.ptr;
-- else if (!c->aim1.ptr)
-- aim_ptr = &c->aim1.ptr;
-- else
-- return -ENOSPC;
--
-- *aim_ptr = aim_obj->driver;
-- ret = aim_obj->driver->probe_channel(c->iface, c->channel_id,
-- &c->cfg, &c->kobj, mdev_devnod);
-- if (ret) {
-- *aim_ptr = NULL;
-+ ret = link_channel_to_aim(c, aim_obj->driver, aim_param);
-+ if (ret)
- return ret;
-- }
-
- return len;
- }
-@@ -1679,6 +1693,73 @@ int most_deregister_aim(struct most_aim *aim)
- }
- EXPORT_SYMBOL_GPL(most_deregister_aim);
-
-+void most_register_config_set(struct most_config_set *cfg_set)
-+{
-+ mutex_lock(&config_probes_mt);
-+ list_add(&cfg_set->list, &config_probes);
-+ mutex_unlock(&config_probes_mt);
-+}
-+EXPORT_SYMBOL(most_register_config_set);
-+
-+void most_deregister_config_set(struct most_config_set *cfg_set)
-+{
-+ mutex_lock(&config_probes_mt);
-+ list_del(&cfg_set->list);
-+ mutex_unlock(&config_probes_mt);
-+}
-+EXPORT_SYMBOL(most_deregister_config_set);
-+
-+static int probe_aim(struct most_c_obj *c,
-+ const char *aim_name, const char *aim_param)
-+{
-+ struct most_aim_obj *aim_obj;
-+ char buf[STRING_SIZE];
-+
-+ list_for_each_entry(aim_obj, &aim_list, list) {
-+ if (!strcmp(aim_obj->driver->name, aim_name)) {
-+ strlcpy(buf, aim_param ? aim_param : "", sizeof(buf));
-+ return link_channel_to_aim(c, aim_obj->driver, buf);
-+ }
-+ }
-+ return 0;
-+}
-+
-+static bool probe_config_set(struct most_c_obj *c,
-+ const char *dev_name, const char *ch_name,
-+ const struct most_config_probe *p)
-+{
-+ int err;
-+
-+ for (; p->ch_name; p++) {
-+ if ((p->dev_name && strcmp(dev_name, p->dev_name)) ||
-+ strcmp(ch_name, p->ch_name))
-+ continue;
-+
-+ c->cfg = p->cfg;
-+ if (p->aim_name) {
-+ err = probe_aim(c, p->aim_name, p->aim_param);
-+ if (err)
-+ pr_err("failed to autolink %s to %s: %d\n",
-+ ch_name, p->aim_name, err);
-+ }
-+ return true;
-+ }
-+ return false;
-+}
-+
-+static void find_configuration(struct most_c_obj *c, const char *dev_name,
-+ const char *ch_name)
-+{
-+ struct most_config_set *plist;
-+
-+ mutex_lock(&config_probes_mt);
-+ list_for_each_entry(plist, &config_probes, list) {
-+ if (probe_config_set(c, dev_name, ch_name, plist->probes))
-+ break;
-+ }
-+ mutex_unlock(&config_probes_mt);
-+}
-+
- /**
- * most_register_interface - registers an interface with core
- * @iface: pointer to the instance of the interface description.
-@@ -1777,6 +1858,7 @@ struct kobject *most_register_interface(struct most_interface *iface)
- mutex_init(&c->start_mutex);
- mutex_init(&c->nq_mutex);
- list_add_tail(&c->list, &inst->channel_list);
-+ find_configuration(c, iface->description, channel_name);
- }
- pr_info("registered new MOST device mdev%d (%s)\n",
- inst->dev_id, iface->description);
-@@ -1880,6 +1962,8 @@ static int __init most_init(void)
- pr_info("init()\n");
- INIT_LIST_HEAD(&instance_list);
- INIT_LIST_HEAD(&aim_list);
-+ INIT_LIST_HEAD(&config_probes);
-+ mutex_init(&config_probes_mt);
- ida_init(&mdev_id);
-
- err = bus_register(&most_bus);
---
-2.7.4
-
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0003-core-remove-kernel-log-for-MBO-status.patch b/meta-agl-profile-core/recipes-kernel/most/files/0003-core-remove-kernel-log-for-MBO-status.patch
deleted file mode 100644
index 4703844a1..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0003-core-remove-kernel-log-for-MBO-status.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From b269994be937cbb31c0d73ecc899ca8a545a6a4a Mon Sep 17 00:00:00 2001
-From: Christian Gromm <christian.gromm@microchip.com>
-Date: Mon, 4 Sep 2017 11:09:17 +0200
-Subject: [PATCH 3/5] core: remove kernel log for MBO status
-
-Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
----
- driver/mostcore/core.c | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/mostcore/core.c b/mostcore/core.c
-index 931efb9..595becc 100644
---- a/mostcore/core.c
-+++ b/mostcore/core.c
-@@ -1348,8 +1348,6 @@ static void most_write_completion(struct mbo *mbo)
- BUG_ON((!mbo) || (!mbo->context));
-
- c = mbo->context;
-- if (mbo->status == MBO_E_INVAL)
-- pr_info("WARN: Tx MBO status: invalid\n");
- if (unlikely(c->is_poisoned || (mbo->status == MBO_E_CLOSE)))
- trash_mbo(mbo);
- else
---
-2.7.4
-
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0004-most-video-set-device_caps.patch b/meta-agl-profile-core/recipes-kernel/most/files/0004-most-video-set-device_caps.patch
deleted file mode 100644
index 010d4b0d0..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0004-most-video-set-device_caps.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From a5fd2ae8d4a3b2a8f7a33a4ea469ea7ee0d946ef Mon Sep 17 00:00:00 2001
-From: Christian Gromm <christian.gromm@microchip.com>
-Date: Mon, 4 Sep 2017 15:36:38 +0200
-Subject: [PATCH 4/5] most: video: set device_caps
-
-Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
----
- driver/aim-v4l2/video.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/aim-v4l2/video.c b/aim-v4l2/video.c
-index e074841..6405a03 100644
---- a/aim-v4l2/video.c
-+++ b/aim-v4l2/video.c
-@@ -263,6 +263,7 @@ static int vidioc_querycap(struct file *file, void *priv,
- snprintf(cap->bus_info, sizeof(cap->bus_info),
- "%s", mdev->iface->description);
-
-+ cap->device_caps =
- cap->capabilities =
- V4L2_CAP_READWRITE |
- V4L2_CAP_TUNER |
---
-2.7.4
-
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch b/meta-agl-profile-core/recipes-kernel/most/files/0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch
deleted file mode 100644
index ebaee9e14..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 7518453386ad3e82008186a6c9ca86ed8c136801 Mon Sep 17 00:00:00 2001
-From: Christian Gromm <christian.gromm@microchip.com>
-Date: Mon, 4 Sep 2017 16:08:38 +0200
-Subject: [PATCH 5/5] most: video: set V4L2_CAP_DEVICE_CAPS flag
-
-Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
----
- driver/aim-v4l2/video.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/aim-v4l2/video.c b/aim-v4l2/video.c
-index 6405a03..db75d4d 100644
---- a/aim-v4l2/video.c
-+++ b/aim-v4l2/video.c
-@@ -265,6 +265,7 @@ static int vidioc_querycap(struct file *file, void *priv,
-
- cap->device_caps =
- cap->capabilities =
-+ V4L2_CAP_DEVICE_CAPS |
- V4L2_CAP_READWRITE |
- V4L2_CAP_TUNER |
- V4L2_CAP_VIDEO_CAPTURE;
---
-2.7.4
-
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0006-dim2-fix-startup-sequence.patch b/meta-agl-profile-core/recipes-kernel/most/files/0006-dim2-fix-startup-sequence.patch
deleted file mode 100644
index 59c6ae671..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0006-dim2-fix-startup-sequence.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From 63bcd9b421ae7927948bffec9566db47f40ea290 Mon Sep 17 00:00:00 2001
-From: Andrey Shvetsov <andrey.shvetsov@k2l.de>
-Date: Tue, 30 Jan 2018 17:34:09 +0100
-Subject: [PATCH] staging: most: dim2: fix startup sequence
-
-Platform specific initializations (pdata->init) must be done before DIM2
-IP module startup (dim_startup).
-
-Signed-off-by: Andrey Shvetsov <andrey.shvetsov@k2l.de>
----
- hdm-dim2/dim2_hdm.c | 90 +++++++++++++++++++++++++++++++++++++++---------------------------------------------------
- 1 file changed, 39 insertions(+), 51 deletions(-)
-
-diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c
-index 893b8e4..e4629a5 100644
---- a/hdm-dim2/dim2_hdm.c
-+++ b/hdm-dim2/dim2_hdm.c
-@@ -155,38 +155,6 @@ void dimcb_on_error(u8 error_id, const char *error_message)
- }
-
- /**
-- * startup_dim - initialize the dim2 interface
-- * @pdev: platform device
-- */
--static int startup_dim(struct platform_device *pdev)
--{
-- struct dim2_hdm *dev = platform_get_drvdata(pdev);
-- struct dim2_platform_data *pdata = pdev->dev.platform_data;
-- u8 hal_ret;
-- int ret;
--
-- if (!pdata) {
-- pr_err("missing platform data\n");
-- return -EINVAL;
-- }
--
-- ret = pdata->init ? pdata->init(pdata, dev->io_base) : 0;
-- if (ret)
-- return ret;
--
-- pr_info("sync: num of frames per sub-buffer: %u\n", fcnt);
-- hal_ret = dim_startup(dev->io_base, pdata->clk_speed, fcnt);
-- if (hal_ret != DIM_NO_ERROR) {
-- pr_err("dim_startup failed: %d\n", hal_ret);
-- if (pdata && pdata->destroy)
-- pdata->destroy(pdata);
-- return -ENODEV;
-- }
--
-- return 0;
--}
--
--/**
- * try_start_dim_transfer - try to transfer a buffer on a channel
- * @hdm_ch: channel specific data
- *
-@@ -727,10 +695,12 @@ static void dma_free(struct mbo *mbo, u32 size)
- */
- static int dim2_probe(struct platform_device *pdev)
- {
-+ struct dim2_platform_data *pdata = pdev->dev.platform_data;
- struct dim2_hdm *dev;
- struct resource *res;
- int ret, i;
- struct kobject *kobj;
-+ u8 hal_ret;
- int irq;
-
- dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
-@@ -745,38 +715,59 @@ static int dim2_probe(struct platform_device *pdev)
- if (IS_ERR(dev->io_base))
- return PTR_ERR(dev->io_base);
-
-+ if (!pdata) {
-+ dev_err(&pdev->dev, "missing platform data\n");
-+ return -EINVAL;
-+ }
-+
-+ ret = pdata->init ? pdata->init(pdata, dev->io_base) : 0;
-+ if (ret)
-+ return ret;
-+
-+ dev_info(&pdev->dev, "sync: num of frames per sub-buffer: %u\n", fcnt);
-+ hal_ret = dim_startup(dev->io_base, pdata->clk_speed, fcnt);
-+ if (hal_ret != DIM_NO_ERROR) {
-+ dev_err(&pdev->dev, "dim_startup failed: %d\n", hal_ret);
-+ ret = -ENODEV;
-+ goto err_bsp_destroy;
-+ }
-+
- irq = platform_get_irq(pdev, 0);
- if (irq < 0) {
- dev_err(&pdev->dev, "failed to get ahb0_int irq: %d\n", irq);
-- return irq;
-+ ret = irq;
-+ goto err_shutdown_dim;
- }
-
- ret = devm_request_irq(&pdev->dev, irq, dim2_ahb_isr, 0,
- "dim2_ahb0_int", dev);
- if (ret) {
- dev_err(&pdev->dev, "failed to request ahb0_int irq %d\n", irq);
-- return ret;
-+ goto err_shutdown_dim;
- }
-
- irq = platform_get_irq(pdev, 1);
- if (irq < 0) {
- dev_err(&pdev->dev, "failed to get mlb_int irq: %d\n", irq);
-- return irq;
-+ ret = irq;
-+ goto err_shutdown_dim;
- }
-
- ret = devm_request_irq(&pdev->dev, irq, dim2_mlb_isr, 0,
- "dim2_mlb_int", dev);
- if (ret) {
- dev_err(&pdev->dev, "failed to request mlb_int irq %d\n", irq);
-- return ret;
-+ goto err_shutdown_dim;
- }
-
- init_waitqueue_head(&dev->netinfo_waitq);
- dev->deliver_netinfo = 0;
-- dev->netinfo_task = kthread_run(&deliver_netinfo_thread, (void *)dev,
-+ dev->netinfo_task = kthread_run(&deliver_netinfo_thread, dev,
- "dim2_netinfo");
-- if (IS_ERR(dev->netinfo_task))
-- return PTR_ERR(dev->netinfo_task);
-+ if (IS_ERR(dev->netinfo_task)) {
-+ ret = PTR_ERR(dev->netinfo_task);
-+ goto err_shutdown_dim;
-+ }
-
- for (i = 0; i < DMA_CHANNELS; i++) {
- struct most_channel_capability *cap = dev->capabilities + i;
-@@ -833,20 +824,17 @@ static int dim2_probe(struct platform_device *pdev)
- if (ret)
- goto err_unreg_iface;
-
-- ret = startup_dim(pdev);
-- if (ret) {
-- dev_err(&pdev->dev, "failed to initialize DIM2\n");
-- goto err_destroy_bus;
-- }
--
- return 0;
-
--err_destroy_bus:
-- dim2_sysfs_destroy(&dev->bus);
- err_unreg_iface:
- most_deregister_interface(&dev->most_iface);
- err_stop_thread:
- kthread_stop(dev->netinfo_task);
-+err_shutdown_dim:
-+ dim_shutdown();
-+err_bsp_destroy:
-+ if (pdata && pdata->destroy)
-+ pdata->destroy(pdata);
-
- return ret;
- }
-@@ -863,6 +851,10 @@ static int dim2_remove(struct platform_device *pdev)
- struct dim2_platform_data *pdata = pdev->dev.platform_data;
- unsigned long flags;
-
-+ dim2_sysfs_destroy(&dev->bus);
-+ most_deregister_interface(&dev->most_iface);
-+ kthread_stop(dev->netinfo_task);
-+
- spin_lock_irqsave(&dim_lock, flags);
- dim_shutdown();
- spin_unlock_irqrestore(&dim_lock, flags);
-@@ -870,10 +862,6 @@ static int dim2_remove(struct platform_device *pdev)
- if (pdata && pdata->destroy)
- pdata->destroy(pdata);
-
-- dim2_sysfs_destroy(&dev->bus);
-- most_deregister_interface(&dev->most_iface);
-- kthread_stop(dev->netinfo_task);
--
- /*
- * break link to local platform_device_id struct
- * to prevent crash by unload platform device module
---
-libgit2 0.26.0
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0007-dim2-use-device-tree.patch b/meta-agl-profile-core/recipes-kernel/most/files/0007-dim2-use-device-tree.patch
deleted file mode 100644
index 679fab79c..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0007-dim2-use-device-tree.patch
+++ /dev/null
@@ -1,378 +0,0 @@
-From 8e16207392cd715ea88f6780981a3d55ab005588 Mon Sep 17 00:00:00 2001
-From: Andrey Shvetsov <andrey.shvetsov@k2l.de>
-Date: Mon, 12 Feb 2018 12:23:37 +0100
-Subject: [PATCH] staging: most: dim2: use device tree
-
-Current dim2 driver expects the existence of a platform driver that
-implements the platform specific initialization and delivery of the irq
-numbers.
-
-This patch integrates the device tree activity and platform specific
-code into the driver.
-
-Signed-off-by: Andrey Shvetsov <andrey.shvetsov@k2l.de>
----
- hdm-dim2/dim2_hdm.c | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
- hdm-dim2/dim2_hdm.h | 28 ----------------------------
- hdm-dim2/platform/dim2_arwen_mlb3.c | 165 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
- hdm-dim2/platform/dim2_arwen_mlb6.c | 169 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- hdm-dim2/platform/dim2_h2_dt.c | 227 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- hdm-dim2/platform/dim2_mx6q.c | 192 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- hdm-dim2/platform/dim2_mx6q_dt.c | 224 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 7 files changed, 193 insertions(+), 1034 deletions(-)
- delete mode 100644 hdm-dim2/dim2_hdm.h
- delete mode 100644 hdm-dim2/platform/dim2_arwen_mlb3.c
- delete mode 100644 hdm-dim2/platform/dim2_arwen_mlb6.c
- delete mode 100644 hdm-dim2/platform/dim2_h2_dt.c
- delete mode 100644 hdm-dim2/platform/dim2_mx6q.c
- delete mode 100644 hdm-dim2/platform/dim2_mx6q_dt.c
-
-diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c
-index e4629a5..2dba917 100644
---- a/hdm-dim2/dim2_hdm.c
-+++ b/hdm-dim2/dim2_hdm.c
-@@ -14,6 +14,7 @@
- #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-
- #include <linux/module.h>
-+#include <linux/of_platform.h>
- #include <linux/printk.h>
- #include <linux/kernel.h>
- #include <linux/init.h>
-@@ -21,13 +22,13 @@
- #include <linux/interrupt.h>
- #include <linux/slab.h>
- #include <linux/io.h>
-+#include <linux/clk.h>
- #include <linux/dma-mapping.h>
- #include <linux/sched.h>
- #include <linux/kthread.h>
-
- #include <mostcore.h>
- #include "dim2_hal.h"
--#include "dim2_hdm.h"
- #include "dim2_errors.h"
- #include "dim2_sysfs.h"
-
-@@ -93,6 +94,9 @@ struct dim2_hdm {
- struct most_interface most_iface;
- char name[16 + sizeof "dim2-"];
- void __iomem *io_base;
-+ u8 clk_speed;
-+ struct clk *clk;
-+ struct clk *clk_pll;
- struct task_struct *netinfo_task;
- wait_queue_head_t netinfo_waitq;
- int deliver_netinfo;
-@@ -102,6 +106,12 @@ struct dim2_hdm {
- struct medialb_bus bus;
- void (*on_netinfo)(struct most_interface *,
- unsigned char, unsigned char *);
-+ void (*disable_platform)(struct platform_device *);
-+};
-+
-+struct dim2_platform_data {
-+ int (*enable)(struct platform_device *);
-+ void (*disable)(struct platform_device *);
- };
-
- #define iface_to_hdm(iface) container_of(iface, struct dim2_hdm, most_iface)
-@@ -686,6 +696,8 @@ static void dma_free(struct mbo *mbo, u32 size)
- dma_free_coherent(NULL, size, mbo->virt_address, mbo->bus_address);
- }
-
-+static const struct of_device_id dim2_of_match[];
-+
- /*
- * dim2_probe - dim2 probe handler
- * @pdev: platform device structure
-@@ -695,7 +707,7 @@ static void dma_free(struct mbo *mbo, u32 size)
- */
- static int dim2_probe(struct platform_device *pdev)
- {
-- struct dim2_platform_data *pdata = pdev->dev.platform_data;
-+ const struct dim2_platform_data *pdata;
- struct dim2_hdm *dev;
- struct resource *res;
- int ret, i;
-@@ -703,6 +715,8 @@ static int dim2_probe(struct platform_device *pdev)
- u8 hal_ret;
- int irq;
-
-+ enum { MLB_INT_IDX, AHB0_INT_IDX };
-+
- dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
- if (!dev)
- return -ENOMEM;
-@@ -710,29 +724,30 @@ static int dim2_probe(struct platform_device *pdev)
- dev->atx_idx = -1;
-
- platform_set_drvdata(pdev, dev);
-+
-+ dev->clk_speed = CLK_4096FS;
-+
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- dev->io_base = devm_ioremap_resource(&pdev->dev, res);
- if (IS_ERR(dev->io_base))
- return PTR_ERR(dev->io_base);
-
-- if (!pdata) {
-- dev_err(&pdev->dev, "missing platform data\n");
-- return -EINVAL;
-- }
--
-- ret = pdata->init ? pdata->init(pdata, dev->io_base) : 0;
-+ pdata = of_match_node(dim2_of_match, pdev->dev.of_node)->data;
-+ ret = pdata && pdata->enable ? pdata->enable(pdev) : 0;
- if (ret)
- return ret;
-
-+ dev->disable_platform = pdata ? pdata->disable : 0;
-+
- dev_info(&pdev->dev, "sync: num of frames per sub-buffer: %u\n", fcnt);
-- hal_ret = dim_startup(dev->io_base, pdata->clk_speed, fcnt);
-+ hal_ret = dim_startup(dev->io_base, dev->clk_speed, fcnt);
- if (hal_ret != DIM_NO_ERROR) {
- dev_err(&pdev->dev, "dim_startup failed: %d\n", hal_ret);
- ret = -ENODEV;
-- goto err_bsp_destroy;
-+ goto err_disable_platform;
- }
-
-- irq = platform_get_irq(pdev, 0);
-+ irq = platform_get_irq(pdev, AHB0_INT_IDX);
- if (irq < 0) {
- dev_err(&pdev->dev, "failed to get ahb0_int irq: %d\n", irq);
- ret = irq;
-@@ -746,7 +761,7 @@ static int dim2_probe(struct platform_device *pdev)
- goto err_shutdown_dim;
- }
-
-- irq = platform_get_irq(pdev, 1);
-+ irq = platform_get_irq(pdev, MLB_INT_IDX);
- if (irq < 0) {
- dev_err(&pdev->dev, "failed to get mlb_int irq: %d\n", irq);
- ret = irq;
-@@ -832,9 +847,9 @@ static int dim2_probe(struct platform_device *pdev)
- kthread_stop(dev->netinfo_task);
- err_shutdown_dim:
- dim_shutdown();
--err_bsp_destroy:
-- if (pdata && pdata->destroy)
-- pdata->destroy(pdata);
-+err_disable_platform:
-+ if (dev->disable_platform)
-+ dev->disable_platform(pdev);
-
- return ret;
- }
-@@ -848,7 +863,6 @@ static int dim2_probe(struct platform_device *pdev)
- static int dim2_remove(struct platform_device *pdev)
- {
- struct dim2_hdm *dev = platform_get_drvdata(pdev);
-- struct dim2_platform_data *pdata = pdev->dev.platform_data;
- unsigned long flags;
-
- dim2_sysfs_destroy(&dev->bus);
-@@ -859,37 +873,187 @@ static int dim2_remove(struct platform_device *pdev)
- dim_shutdown();
- spin_unlock_irqrestore(&dim_lock, flags);
-
-- if (pdata && pdata->destroy)
-- pdata->destroy(pdata);
-+ if (dev->disable_platform)
-+ dev->disable_platform(pdev);
-+
-+ return 0;
-+}
-+
-+/* platform specific functions [[ */
-+
-+static int fsl_mx6_enable(struct platform_device *pdev)
-+{
-+ struct dim2_hdm *dev = platform_get_drvdata(pdev);
-+ int ret;
-+
-+ dev->clk = devm_clk_get(&pdev->dev, "mlb");
-+ if (IS_ERR_OR_NULL(dev->clk)) {
-+ dev_err(&pdev->dev, "unable to get mlb clock\n");
-+ return -EFAULT;
-+ }
-+
-+ ret = clk_prepare_enable(dev->clk);
-+ if (ret) {
-+ dev_err(&pdev->dev, "%s\n", "clk_prepare_enable failed");
-+ return ret;
-+ }
-+
-+ if (dev->clk_speed >= CLK_2048FS) {
-+ /* enable pll */
-+ dev->clk_pll = devm_clk_get(&pdev->dev, "pll8_mlb");
-+ if (IS_ERR_OR_NULL(dev->clk_pll)) {
-+ dev_err(&pdev->dev, "unable to get mlb pll clock\n");
-+ clk_disable_unprepare(dev->clk);
-+ return -EFAULT;
-+ }
-+
-+ writel(0x888, dev->io_base + 0x38);
-+ clk_prepare_enable(dev->clk_pll);
-+ }
-+
-+ return 0;
-+}
-+
-+static void fsl_mx6_disable(struct platform_device *pdev)
-+{
-+ struct dim2_hdm *dev = platform_get_drvdata(pdev);
-+
-+ if (dev->clk_speed >= CLK_2048FS)
-+ clk_disable_unprepare(dev->clk_pll);
-+
-+ clk_disable_unprepare(dev->clk);
-+}
-+
-+static int rcar_h2_enable(struct platform_device *pdev)
-+{
-+ struct dim2_hdm *dev = platform_get_drvdata(pdev);
-+ int ret;
-+
-+ dev->clk = devm_clk_get(&pdev->dev, NULL);
-+ if (IS_ERR(dev->clk)) {
-+ dev_err(&pdev->dev, "cannot get clock\n");
-+ return PTR_ERR(dev->clk);
-+ }
-+
-+ ret = clk_prepare_enable(dev->clk);
-+ if (ret) {
-+ dev_err(&pdev->dev, "%s\n", "clk_prepare_enable failed");
-+ return ret;
-+ }
-+
-+ if (dev->clk_speed >= CLK_2048FS) {
-+ /* enable MLP pll and LVDS drivers */
-+ writel(0x03, dev->io_base + 0x600);
-+ /* set bias */
-+ writel(0x888, dev->io_base + 0x38);
-+ } else {
-+ /* PLL */
-+ writel(0x04, dev->io_base + 0x600);
-+ }
-+
-
-- /*
-- * break link to local platform_device_id struct
-- * to prevent crash by unload platform device module
-- */
-- pdev->id_entry = NULL;
-+ /* BBCR = 0b11 */
-+ writel(0x03, dev->io_base + 0x500);
-+ writel(0x0002FF02, dev->io_base + 0x508);
-
- return 0;
- }
-
--static const struct platform_device_id dim2_id[] = {
-- { "medialb_dim2" },
-- { }, /* Terminating entry */
-+static void rcar_h2_disable(struct platform_device *pdev)
-+{
-+ struct dim2_hdm *dev = platform_get_drvdata(pdev);
-+
-+ clk_disable_unprepare(dev->clk);
-+
-+ /* disable PLLs and LVDS drivers */
-+ writel(0x0, dev->io_base + 0x600);
-+}
-+
-+static int rcar_m3_enable(struct platform_device *pdev)
-+{
-+ struct dim2_hdm *dev = platform_get_drvdata(pdev);
-+ u32 enable_512fs = dev->clk_speed == CLK_512FS;
-+ int ret;
-+
-+ dev->clk = devm_clk_get(&pdev->dev, NULL);
-+ if (IS_ERR(dev->clk)) {
-+ dev_err(&pdev->dev, "cannot get clock\n");
-+ return PTR_ERR(dev->clk);
-+ }
-+
-+ ret = clk_prepare_enable(dev->clk);
-+ if (ret) {
-+ dev_err(&pdev->dev, "%s\n", "clk_prepare_enable failed");
-+ return ret;
-+ }
-+
-+ /* PLL */
-+ writel(0x04, dev->io_base + 0x600);
-+
-+ writel(enable_512fs, dev->io_base + 0x604);
-+
-+ /* BBCR = 0b11 */
-+ writel(0x03, dev->io_base + 0x500);
-+ writel(0x0002FF02, dev->io_base + 0x508);
-+
-+ return 0;
-+}
-+
-+static void rcar_m3_disable(struct platform_device *pdev)
-+{
-+ struct dim2_hdm *dev = platform_get_drvdata(pdev);
-+
-+ clk_disable_unprepare(dev->clk);
-+
-+ /* disable PLLs and LVDS drivers */
-+ writel(0x0, dev->io_base + 0x600);
-+}
-+
-+/* ]] platform specific functions */
-+
-+enum dim2_platforms { FSL_MX6, RCAR_H2, RCAR_M3 };
-+
-+static struct dim2_platform_data plat_data[] = {
-+ [FSL_MX6] = { .enable = fsl_mx6_enable, .disable = fsl_mx6_disable },
-+ [RCAR_H2] = { .enable = rcar_h2_enable, .disable = rcar_h2_disable },
-+ [RCAR_M3] = { .enable = rcar_m3_enable, .disable = rcar_m3_disable },
-+};
-+
-+static const struct of_device_id dim2_of_match[] = {
-+ {
-+ .compatible = "fsl,imx6q-mlb150",
-+ .data = plat_data + FSL_MX6
-+ },
-+ {
-+ .compatible = "renesas,mlp",
-+ .data = plat_data + RCAR_H2
-+ },
-+ {
-+ .compatible = "rcar,medialb-dim2",
-+ .data = plat_data + RCAR_M3
-+ },
-+ {
-+ .compatible = "xlnx,axi4-os62420_3pin-1.00.a",
-+ },
-+ {
-+ .compatible = "xlnx,axi4-os62420_6pin-1.00.a",
-+ },
-+ {},
- };
-
--MODULE_DEVICE_TABLE(platform, dim2_id);
-+MODULE_DEVICE_TABLE(of, dim2_of_match);
-
- static struct platform_driver dim2_driver = {
- .probe = dim2_probe,
- .remove = dim2_remove,
-- .id_table = dim2_id,
- .driver = {
- .name = "hdm_dim2",
-+ .of_match_table = dim2_of_match,
- },
- };
-
- module_platform_driver(dim2_driver);
-
--MODULE_AUTHOR("Jain Roy Ambi <JainRoy.Ambi@microchip.com>");
- MODULE_AUTHOR("Andrey Shvetsov <andrey.shvetsov@k2l.de>");
- MODULE_DESCRIPTION("MediaLB DIM2 Hardware Dependent Module");
- MODULE_LICENSE("GPL");
-libgit2 0.26.0
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch b/meta-agl-profile-core/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch
deleted file mode 100644
index 1b01fb156..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From 839ad403a2d8081a6c15f6fc2836b01919338f3c Mon Sep 17 00:00:00 2001
-From: Andrey Shvetsov <andrey.shvetsov@k2l.de>
-Date: Mon, 12 Feb 2018 12:24:37 +0100
-Subject: [PATCH] staging: most: dim2: read clock speed from the device tree
-
-This implements reading of the clock speed parameter from the device
-tree.
-
-Signed-off-by: Andrey Shvetsov <andrey.shvetsov@k2l.de>
----
- Documentation/devicetree/bindings/inic/microchip,inic-dim2.txt | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- hdm-dim2/dim2_hdm.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
- 2 files changed, 113 insertions(+), 1 deletion(-)
- create mode 100644 Documentation/devicetree/bindings/inic/microchip,inic-dim2.txt
-
-diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c
-index 2dba917..05e1896 100644
---- a/hdm-dim2/dim2_hdm.c
-+++ b/hdm-dim2/dim2_hdm.c
-@@ -698,6 +698,42 @@ static void dma_free(struct mbo *mbo, u32 size)
-
- static const struct of_device_id dim2_of_match[];
-
-+static struct {
-+ const char *clock_speed;
-+ u8 clk_speed;
-+} clk_mt[] = {
-+ { "256fs", CLK_256FS },
-+ { "512fs", CLK_512FS },
-+ { "1024fs", CLK_1024FS },
-+ { "2048fs", CLK_2048FS },
-+ { "3072fs", CLK_3072FS },
-+ { "4096fs", CLK_4096FS },
-+ { "6144fs", CLK_6144FS },
-+ { "8192fs", CLK_8192FS },
-+};
-+
-+/**
-+ * get_dim2_clk_speed - converts string to DIM2 clock speed value
-+ *
-+ * @clock_speed: string in the format "{NUMBER}fs"
-+ * @val: pointer to get one of the CLK_{NUMBER}FS values
-+ *
-+ * By success stores one of the CLK_{NUMBER}FS in the *val and returns 0,
-+ * otherwise returns -EINVAL.
-+ */
-+static int get_dim2_clk_speed(const char *clock_speed, u8 *val)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(clk_mt); i++) {
-+ if (!strcmp(clock_speed, clk_mt[i].clock_speed)) {
-+ *val = clk_mt[i].clk_speed;
-+ return 0;
-+ }
-+ }
-+ return -EINVAL;
-+}
-+
- /*
- * dim2_probe - dim2 probe handler
- * @pdev: platform device structure
-@@ -708,6 +744,7 @@ static const struct of_device_id dim2_of_match[];
- static int dim2_probe(struct platform_device *pdev)
- {
- const struct dim2_platform_data *pdata;
-+ const char *clock_speed;
- struct dim2_hdm *dev;
- struct resource *res;
- int ret, i;
-@@ -725,7 +762,18 @@ static int dim2_probe(struct platform_device *pdev)
-
- platform_set_drvdata(pdev, dev);
-
-- dev->clk_speed = CLK_4096FS;
-+ ret = of_property_read_string(pdev->dev.of_node,
-+ "microchip,clock-speed", &clock_speed);
-+ if (ret) {
-+ dev_err(&pdev->dev, "missing dt property clock-speed\n");
-+ return ret;
-+ }
-+
-+ ret = get_dim2_clk_speed(clock_speed, &dev->clk_speed);
-+ if (ret) {
-+ dev_err(&pdev->dev, "bad dt property clock-speed\n");
-+ return ret;
-+ }
-
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- dev->io_base = devm_ioremap_resource(&pdev->dev, res);
---
-libgit2 0.26.0
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0009-dim2-use-device-for-coherent-memory-allocation.patch b/meta-agl-profile-core/recipes-kernel/most/files/0009-dim2-use-device-for-coherent-memory-allocation.patch
deleted file mode 100644
index 08cd6f99d..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0009-dim2-use-device-for-coherent-memory-allocation.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 756f2f1f90524c2620ed7951e436d13bdb929a6b Mon Sep 17 00:00:00 2001
-From: Andrey Shvetsov <andrey.shvetsov@k2l.de>
-Date: Mon, 12 Feb 2018 12:25:37 +0100
-Subject: [PATCH] staging: most: dim2: use device for coherent memory allocation
-
-On several modern architectures the allocation of coherent memory needs
-a device that has the dma_ops properly set. This patch enables use of
-the DIM2 platform device for the allocation process.
-
-Signed-off-by: Andrey Shvetsov <andrey.shvetsov@k2l.de>
----
- hdm-dim2/dim2_hdm.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c
-index 05e1896..1847091 100644
---- a/hdm-dim2/dim2_hdm.c
-+++ b/hdm-dim2/dim2_hdm.c
-@@ -688,12 +688,16 @@ static int poison_channel(struct most_interface *most_iface, int ch_idx)
-
- static void *dma_alloc(struct mbo *mbo, u32 size)
- {
-- return dma_alloc_coherent(NULL, size, &mbo->bus_address, GFP_KERNEL);
-+ struct device *dev = mbo->ifp->dev;
-+
-+ return dma_alloc_coherent(dev, size, &mbo->bus_address, GFP_KERNEL);
- }
-
- static void dma_free(struct mbo *mbo, u32 size)
- {
-- dma_free_coherent(NULL, size, mbo->virt_address, mbo->bus_address);
-+ struct device *dev = mbo->ifp->dev;
-+
-+ dma_free_coherent(dev, size, mbo->virt_address, mbo->bus_address);
- }
-
- static const struct of_device_id dim2_of_match[];
-@@ -875,6 +879,7 @@ static int dim2_probe(struct platform_device *pdev)
- dev->most_iface.poison_channel = poison_channel;
- dev->most_iface.request_netinfo = request_netinfo;
- dev->most_iface.extra_attrs = DBR_ATTRS;
-+ dev->most_iface.dev = &pdev->dev;
-
- kobj = most_register_interface(&dev->most_iface);
- if (IS_ERR(kobj)) {
---
-libgit2 0.26.0
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0010-backport-usb-setup-timer.patch b/meta-agl-profile-core/recipes-kernel/most/files/0010-backport-usb-setup-timer.patch
deleted file mode 100644
index ff21b2130..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0010-backport-usb-setup-timer.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 8eaec876f732c7e4b238ada5f9304c6da2380eb1 Mon Sep 17 00:00:00 2001
-From: Andrey Shvetsov <andrey.shvetsov@k2l.de>
-Date: Fri, 8 Feb 2019 22:44:32 +0000
-Subject: [PATCH] backport: usb: setup_timer
-
----
- driver/hdm-usb/hdm_usb.c | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/hdm-usb/hdm_usb.c b/hdm-usb/hdm_usb.c
-index 5b0af88..9896835 100644
---- a/hdm-usb/hdm_usb.c
-+++ b/hdm-usb/hdm_usb.c
-@@ -760,9 +760,9 @@ static void hdm_request_netinfo(struct most_interface *iface, int channel,
- * The handler runs in interrupt context. That's why we need to defer the
- * tasks to a work queue.
- */
--static void link_stat_timer_handler(unsigned long data)
-+static void link_stat_timer_handler(struct timer_list *t)
- {
-- struct most_dev *mdev = (struct most_dev *)data;
-+ struct most_dev *mdev = from_timer(mdev, t, link_stat_timer);
-
- schedule_work(&mdev->poll_work_obj);
- mdev->link_stat_timer.expires = jiffies + (2 * HZ);
-@@ -1154,8 +1154,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
- num_endpoints = usb_iface_desc->desc.bNumEndpoints;
- mutex_init(&mdev->io_mutex);
- INIT_WORK(&mdev->poll_work_obj, wq_netinfo);
-- setup_timer(&mdev->link_stat_timer, link_stat_timer_handler,
-- (unsigned long)mdev);
-+ timer_setup(&mdev->link_stat_timer, link_stat_timer_handler, 0);
-
- mdev->usb_device = usb_dev;
- mdev->link_stat_timer.expires = jiffies + (2 * HZ);
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch b/meta-agl-profile-core/recipes-kernel/most/files/0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch
deleted file mode 100644
index d4383c4f6..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Handle snd_pcm_lib_mmap_vmalloc removal in 4.19
-
-Add .mmap field back to pcm_ops for kernels older than 4.19.
-
-Upstream-Status: Inappropriate
-
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/aim-sound/sound.c b/aim-sound/sound.c
-index 4b3329b..c0a26be 100644
---- a/aim-sound/sound.c
-+++ b/aim-sound/sound.c
-@@ -17,6 +17,7 @@
- #include <linux/printk.h>
- #include <linux/kernel.h>
- #include <linux/init.h>
-+#include <linux/version.h>
- #include <sound/core.h>
- #include <sound/pcm.h>
- #include <sound/pcm_params.h>
-@@ -463,6 +464,9 @@ static const struct snd_pcm_ops pcm_ops = {
- .trigger = pcm_trigger,
- .pointer = pcm_pointer,
- .page = snd_pcm_lib_get_vmalloc_page,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0)
-+ .mmap = snd_pcm_lib_mmap_vmalloc,
-+#endif
- };
-
- static int split_arg_list(char *buf, char **card_name, u16 *ch_num,
diff --git a/meta-agl-profile-core/recipes-kernel/most/files/0012-Fix-build-with-5.4-kernel.patch b/meta-agl-profile-core/recipes-kernel/most/files/0012-Fix-build-with-5.4-kernel.patch
deleted file mode 100644
index 02eca27d2..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/files/0012-Fix-build-with-5.4-kernel.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 877d7475413bb787deb07aa83bafac03efa399fa Mon Sep 17 00:00:00 2001
-From: Paul Barker <paul.barker@sancloud.co.uk>
-Date: Mon, 24 Feb 2020 14:58:52 +0000
-Subject: [PATCH] Fix build with 5.4 kernel
-
-Signed-off-by: Paul Barker <paul.barker@sancloud.co.uk>
----
- driver/Makefile | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index 281241d..609e692 100644
---- a/Makefile
-+++ b/Makefile
-@@ -5,6 +5,7 @@ SRC := $(shell pwd)
- obj-m := mostcore.o
- mostcore-y := mostcore/core.o
- CFLAGS_core.o := -I$(src)/include/
-+CFLAGS_mostcore/core.o := -I$(src)/include/
-
- obj-m += default_conf.o
- CFLAGL_default_conf.o := -I$(src)/include
-@@ -12,33 +13,41 @@ CFLAGL_default_conf.o := -I$(src)/include
- obj-m += aim_cdev.o
- aim_cdev-y := aim-cdev/cdev.o
- CFLAGS_cdev.o := -I$(src)/include/
-+CFLAGS_aim-cdev/cdev.o := -I$(src)/include/
-
- obj-m += aim_network.o
- aim_network-y := aim-network/networking.o
- CFLAGS_networking.o := -I$(src)/include/
-+CFLAGS_aim-network/networking.o := -I$(src)/include/
-
- obj-m += aim_sound.o
- aim_sound-y := aim-sound/sound.o
- CFLAGS_sound.o := -I$(src)/include/
-+CFLAGS_aim-sound/sound.o := -I$(src)/include/
-
- obj-m += aim_v4l2.o
- aim_v4l2-y := aim-v4l2/video.o
- CFLAGS_video.o := -Idrivers/media/video -I$(src)/include/
-+CFLAGS_aim-v4l2/video.o := -Idrivers/media/video -I$(src)/include/
-
- obj-m += hdm_i2c.o
- hdm_i2c-y := hdm-i2c/hdm_i2c.o
- CFLAGS_hdm_i2c.o := -I$(src)/include/
-+CFLAGS_hdm-i2c/hdm_i2c.o := -I$(src)/include/
-
- ifdef CONFIG_OF
- obj-m += hdm_dim2.o
- hdm_dim2-y := hdm-dim2/dim2_hdm.o hdm-dim2/dim2_hal.o hdm-dim2/dim2_sysfs.o
- CFLAGS_dim2_hdm.o := -I$(src)/include/
-+CFLAGS_hdm-dim2/dim2_hdm.o := -I$(src)/include/
-+CFLAGS_hdm-dim2/dim2_hal.o := -I$(src)/include/
-+CFLAGS_hdm-dim2/dim2_sysfs.o := -I$(src)/include/
- endif
-
- obj-m += hdm_usb.o
- hdm_usb-y := hdm-usb/hdm_usb.o
- CFLAGS_hdm_usb.o := -I$(src)/include/
--
-+CFLAGS_hdm-usb/hdm_usb.o := -I$(src)/include/
-
- all:
- $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules
---
-2.20.1
-
diff --git a/meta-agl-profile-core/recipes-kernel/most/most.bb b/meta-agl-profile-core/recipes-kernel/most/most.bb
deleted file mode 100644
index 48959a6ee..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/most.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "Build MOST driver"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
-
-inherit module
-
-PV = "0.1"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/most;protocol=https;branch=${AGL_BRANCH}"
-
-S = "${WORKDIR}/git/driver"
-SRCREV = "e4dbbaf9e7652efaed0df3e0aab4464f5f228573"
-
-KERNEL_MODULE_AUTOLOAD += "aim_cdev aim_sound aim_network aim_v4l2 hdm_i2c hdm_dim2 hdm_usb mostcore"
diff --git a/meta-agl-profile-core/recipes-kernel/most/most.bbappend b/meta-agl-profile-core/recipes-kernel/most/most.bbappend
deleted file mode 100644
index ad422eb57..000000000
--- a/meta-agl-profile-core/recipes-kernel/most/most.bbappend
+++ /dev/null
@@ -1,15 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI_append = " \
- file://0002-src-most-add-auto-conf-feature.patch \
- file://0003-core-remove-kernel-log-for-MBO-status.patch \
- file://0004-most-video-set-device_caps.patch \
- file://0005-most-video-set-V4L2_CAP_DEVICE_CAPS-flag.patch \
- file://0006-dim2-fix-startup-sequence.patch \
- file://0007-dim2-use-device-tree.patch \
- file://0008-dim2-read-clock-speed-from-the-device-tree.patch \
- file://0009-dim2-use-device-for-coherent-memory-allocation.patch \
- file://0010-backport-usb-setup-timer.patch \
- file://0011-handle-snd_pcm_lib_mmap_vmalloc-removal.patch \
- file://0012-Fix-build-with-5.4-kernel.patch \
-"
diff --git a/meta-agl-profile-core/recipes-multimedia/libmp4v2/files/0001-add-a-configure-option-to-disable-build-of-man-pages.patch b/meta-agl-profile-core/recipes-multimedia/libmp4v2/files/0001-add-a-configure-option-to-disable-build-of-man-pages.patch
deleted file mode 100644
index 51896e8db..000000000
--- a/meta-agl-profile-core/recipes-multimedia/libmp4v2/files/0001-add-a-configure-option-to-disable-build-of-man-pages.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 530a31e3eb24b2f1ed7b30859ed62a2d1b24bd91 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
-Date: Tue, 7 Feb 2017 11:51:58 +0100
-Subject: [PATCH] add a configure option to disable build of man-pages
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream-Status: Pending
-
-Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
----
- configure.ac | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 8316c67..099fc0c 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -67,6 +67,8 @@ AC_ARG_ENABLE([largefile],
- [AS_HELP_STRING([--disable-largefile],[disable LFS (large file support)])])
- AC_ARG_ENABLE([util],
- [AS_HELP_STRING([--disable-util],[disable build of command-line utilities])])
-+AC_ARG_ENABLE([man],
-+ [AS_HELP_STRING([--disable-man],[disable build of man-pages])])
- AC_ARG_ENABLE([bi],
- [AS_HELP_STRING([--enable-bi=ARCH],[enable -mARCH for bi-arch compilation])])
- AC_ARG_ENABLE([ub],
-@@ -395,7 +397,7 @@ AM_CONDITIONAL([ADD_PLATFORM_POSIX],[test "$X_PLATFORM" = "posix"])
- AM_CONDITIONAL([ADD_PLATFORM_WIN32],[test "$X_PLATFORM" = "win32"])
-
- AM_CONDITIONAL([ADD_UTIL],[test "$enable_util" != "no"])
--AM_CONDITIONAL([ADD_MANS],[test "$X_PLATFORM" != "win32"])
-+AM_CONDITIONAL([ADD_MANS],[test "$enable_man" != "no"])
-
- ###############################################################################
- # declare common substitutions
---
-2.9.3
-
diff --git a/meta-agl-profile-core/recipes-multimedia/libmp4v2/libmp4v2_git.bb b/meta-agl-profile-core/recipes-multimedia/libmp4v2/libmp4v2_git.bb
deleted file mode 100644
index dd1b34747..000000000
--- a/meta-agl-profile-core/recipes-multimedia/libmp4v2/libmp4v2_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "The MP4v2 library provides an API to create and modify mp4 files"
-HOMEPAGE = "https://github.com/sergiomb2/libmp4v2/wiki"
-LICENSE = "MPLv1.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=eb3014b036b6d2151d944aef6a84c36f"
-
-inherit autotools-brokensep pkgconfig
-
-SRC_URI = " \
- git://github.com/sergiomb2/${BPN}.git \
- file://0001-add-a-configure-option-to-disable-build-of-man-pages.patch \
-"
-SRCREV = "855e9674232808ff3be7191b697dfb56917db21f"
-S = "${WORKDIR}/git"
-PV = "2.1.0+git${SRCPV}"
-
-
-SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
-EXTRA_OECONF = "--disable-man"
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/.appends.meta-efl b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/.appends.meta-efl
deleted file mode 100644
index e69de29bb..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/.appends.meta-efl
+++ /dev/null
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0001-Define-comparison_fn_t-for-non-glibc-systems.patch b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0001-Define-comparison_fn_t-for-non-glibc-systems.patch
deleted file mode 100644
index 15d4b3f0e..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0001-Define-comparison_fn_t-for-non-glibc-systems.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 5bc5b8c5dad3edec6736fd7e7ce61250c4ce3725 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 12 Jul 2017 17:13:19 -0700
-Subject: [PATCH] Define comparison_fn_t for non-glibc systems
-
-lightmediascanner.c:324:12: error: 'comparison_fn_t' undeclared (first use in this function)
- (comparison_fn_t)_plugin_sort);
- ^~~~~~~~~~~~~~~
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/lib/lightmediascanner.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/src/lib/lightmediascanner.c b/src/lib/lightmediascanner.c
-index 344b247..b866883 100644
---- a/src/lib/lightmediascanner.c
-+++ b/src/lib/lightmediascanner.c
-@@ -37,6 +37,11 @@
- #define DEFAULT_SLAVE_TIMEOUT 1000
- #define DEFAULT_COMMIT_INTERVAL 100
-
-+#if !defined(__GLIBC__)
-+typedef int (*__compar_fn_t) (const void*, const void*);
-+typedef __compar_fn_t comparison_fn_t;
-+#endif
-+
- #ifdef HAVE_MAGIC_H
- static magic_t _magic_handle;
-
---
-2.13.2
-
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch
deleted file mode 100644
index 5abb980b8..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 5a618b444e424483c3a9d34dd9b196796cac8e3f Mon Sep 17 00:00:00 2001
-From: Matt Ranostay <matt.ranostay@konsulko.com>
-Date: Mon, 22 Jul 2019 13:29:52 -0700
-Subject: [PATCH] switch from G_BUS_TYPE_SESSION to G_BUS_TYPE_SYSTEM
-
-Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
----
- src/bin/lightmediascannerctl.c | 4 ++--
- src/bin/lightmediascannerd.c | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/bin/lightmediascannerctl.c b/src/bin/lightmediascannerctl.c
-index 5764bc0..1d4d844 100644
---- a/src/bin/lightmediascannerctl.c
-+++ b/src/bin/lightmediascannerctl.c
-@@ -11,7 +11,7 @@ start_service_by_name(void)
- GVariant *var;
- GDBusConnection *conn;
-
-- conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
-+ conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
- if (error) {
- fprintf(stderr, "Could not get session bus connection: %s\n",
- error->message);
-@@ -526,7 +526,7 @@ main(int argc, char *argv[])
-
- app.timer = NULL;
- app.loop = g_main_loop_new(NULL, FALSE);
-- app.proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION,
-+ app.proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM,
- G_DBUS_PROXY_FLAGS_NONE,
- NULL,
- "org.lightmediascanner",
-diff --git a/src/bin/lightmediascannerd.c b/src/bin/lightmediascannerd.c
-index 319db42..6db81cc 100644
---- a/src/bin/lightmediascannerd.c
-+++ b/src/bin/lightmediascannerd.c
-@@ -1721,7 +1721,7 @@ main(int argc, char *argv[])
- introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, NULL);
- g_assert(introspection_xml != NULL);
-
-- id = g_bus_own_name(G_BUS_TYPE_SESSION, "org.lightmediascanner",
-+ id = g_bus_own_name(G_BUS_TYPE_SYSTEM, "org.lightmediascanner",
- G_BUS_NAME_OWNER_FLAGS_NONE,
- NULL, on_name_acquired, NULL, NULL, NULL);
-
---
-2.20.1
-
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/dbus-lightmediascanner.conf b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/dbus-lightmediascanner.conf
deleted file mode 100644
index 8a9e35b09..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/dbus-lightmediascanner.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?> <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
- <policy user="root">
- <allow own="org.lightmediascanner"/>
- <allow send_destination="org.lightmediascanner"/>
- <allow receive_type="signal" receive_sender="org.lightmediascanner" receive_interface="org.freedesktop.DBus.Properties"/>
- </policy>
-
- <policy at_console="true">
- <allow send_destination="org.lightmediascanner"/>
- </policy>
-</busconfig>
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/id3-plugin-support-out-of-tree-build.patch b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/id3-plugin-support-out-of-tree-build.patch
deleted file mode 100644
index 9528bec79..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/id3-plugin-support-out-of-tree-build.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/src/plugins/Makefile.am 2015-10-25 16:12:29.331415823 +0000
-+++ b/src/plugins/Makefile.am 2015-10-25 16:14:37.593415808 +0000
-@@ -93,7 +93,7 @@
- id3_id3_la_SOURCES = id3/id3.c id3/id3v1_genres.c
- id3_id3_la_LIBADD = $(PLUGINS_LIBADD)
-
--id3/id3v1_genres.c: $(srcdir)/id3/id3v1_genres.def $(srcdir)/id3/id3v1_genres_gen.awk
-+$(srcdir)/id3/id3v1_genres.c: $(srcdir)/id3/id3v1_genres.def $(srcdir)/id3/id3v1_genres_gen.awk
- $(AWK) -f $(srcdir)/id3/id3v1_genres_gen.awk $(srcdir)/id3/id3v1_genres.def > $@
-
- EXTRA_DIST += id3/id3v1_genres.def id3/id3v1_genres_gen.awk
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/lightmediascanner.service b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/lightmediascanner.service
deleted file mode 100644
index 63b48ebf9..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/lightmediascanner.service
+++ /dev/null
@@ -1,16 +0,0 @@
-[Unit]
-Description=Lightmediascanner (LMS)
-After=run-agl-postinsts.service systemd-remount-fs.service systemd-tmpfiles-setup.service tmp.mount
-ConditionPathIsReadWrite=/var/volatile/tmp
-
-[Service]
-Type=dbus
-Restart=on-failure
-RestartSec=0
-BusName=org.lightmediascanner
-SmackProcessLabel=User::App::agl-service-mediascanner
-ExecStart=/usr/bin/lightmediascannerd --startup-scan --db-path=/var/volatile/tmp/lightmediascannerd.db --directory=/media
-
-[Install]
-WantedBy=multi-user.target
-Alias=dbus-org.lightmediascanner.service
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch
deleted file mode 100644
index 6a0b8ff93..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/files/plugin-ogg-fix-chucksize-issue.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 3e66b97221440b17a184feb48692dce7e0561cac Mon Sep 17 00:00:00 2001
-From: Matt Ranostay <matt.ranostay@konsulko.com>
-Date: Wed, 8 Mar 2017 16:30:01 -0800
-Subject: [PATCH] plugin: ogg: fix chucksize issue
-
-There are some OGG files that have metadata chucks that go over the
-hardcoded 10 * 4096 size due to album art. This patchset just parses
-each chuck and continues till it runs out of valid chunks.
-
-Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
----
- src/plugins/ogg/ogg.c | 11 ++---------
- 1 file changed, 2 insertions(+), 9 deletions(-)
-
-diff --git a/src/plugins/ogg/ogg.c b/src/plugins/ogg/ogg.c
-index 1c0818e..c94dc38 100644
---- a/src/plugins/ogg/ogg.c
-+++ b/src/plugins/ogg/ogg.c
-@@ -47,8 +47,6 @@
- int CHUNKSIZE = 4096;
- #endif
-
--#define MAX_CHUNKS_PER_PAGE 10
--
- struct stream {
- struct lms_stream base;
- int serial;
-@@ -122,10 +120,8 @@ _set_lms_info(struct lms_string_size *info, const char *tag)
-
- static bool _ogg_read_page(FILE *fp, ogg_sync_state *osync, ogg_page *page)
- {
-- int i;
--
-- for (i = 0; i < MAX_CHUNKS_PER_PAGE && ogg_sync_pageout(osync, page) != 1;
-- i++) {
-+ while(ogg_sync_pageout(osync, page) != 1)
-+ {
- lms_ogg_buffer_t buffer = lms_get_ogg_sync_buffer(osync, CHUNKSIZE);
- int bytes = fread(buffer, 1, CHUNKSIZE, fp);
-
-@@ -136,9 +132,6 @@ static bool _ogg_read_page(FILE *fp, ogg_sync_state *osync, ogg_page *page)
- ogg_sync_wrote(osync, bytes);
- }
-
-- if (i > MAX_CHUNKS_PER_PAGE)
-- return false;
--
- return true;
- }
-
---
-2.7.4
-
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend
deleted file mode 100644
index b47b2796c..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_%.bbappend
+++ /dev/null
@@ -1,42 +0,0 @@
-# Disable everything but the roygalty-free formats
-PACKAGECONFIG = "ogg flac wave m3u pls jpeg png"
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI += "file://lightmediascanner.service \
- file://plugin-ogg-fix-chucksize-issue.patch \
- file://0002-switch-from-G_BUS_TYPE_SESSION-to-G_BUS_TYPE_SYSTEM.patch \
- file://dbus-lightmediascanner.conf \
- "
-
-CFLAGS_append = " -D_FILE_OFFSET_BITS=64"
-
-inherit systemd
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE_${PN} = "lightmediascanner.service"
-SYSTEMD_AUTO_ENABLE_${PN} = "enable"
-
-do_install_append() {
- # Install LMS systemd service
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${systemd_system_unitdir}
- install -m 644 -p -D ${WORKDIR}/lightmediascanner.service ${D}${systemd_system_unitdir}/lightmediascanner.service
- fi
-
- install -d ${D}/etc/dbus-1/system.d
- install -m 0644 ${WORKDIR}/dbus-lightmediascanner.conf ${D}/etc/dbus-1/system.d/org.lightmediascanner.conf
-}
-
-FILES_${PN} += " \
- ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '${systemd_system_unitdir}/lightmediascanner.service', '', d)} \
- "
-
-EXTRA_OECONF = "--enable-static --with-dbus-services=${datadir}/dbus-1/system-services"
-PACKAGECONFIG[mp4] = "--enable-mp4,--disable-mp4,libmp4v2"
-
-# add support MP3 because of the format of music files for AGL CES/ALS2017 Demo
-PACKAGECONFIG_append = " id3 mp4"
-
-# add required character sets for id3 tag scanning
-RDEPENDS_${PN}_append = " glibc-gconv-utf-16 glibc-gconv-iso8859-1"
diff --git a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_0.5.1.bb b/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_0.5.1.bb
deleted file mode 100644
index f2158760f..000000000
--- a/meta-agl-profile-core/recipes-multimedia/lightmediascanner/lightmediascanner_0.5.1.bb
+++ /dev/null
@@ -1,63 +0,0 @@
-SUMMARY = "Lightweight media scanner"
-DESCRIPTION = "Lightweight media scanner meant to be used in not-so-powerful devices, like embedded systems or old machines."
-SECTION = "libs/multimedia"
-
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
- file://src/lib/lightmediascanner.c;endline=21;md5=6d8889bccb4c6c27e8b786342a3eb267"
-
-DEPENDS = "file gawk glib-2.0 sqlite3"
-
-PV = "0.5.1+git${SRCPV}"
-SRCREV = "adfddb3486276a5ed2f5008c9e43a811e1271cc9"
-SRC_URI = "git://github.com/profusion/lightmediascanner.git \
- file://id3-plugin-support-out-of-tree-build.patch \
- file://0001-Define-comparison_fn_t-for-non-glibc-systems.patch \
- "
-
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--enable-static --disable-mp4"
-
-PACKAGECONFIG ??= "ogg flac wave id3 m3u pls asf rm jpeg png"
-PACKAGECONFIG[generic] = "--enable-generic,--disable-generic,libav"
-PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libogg libvorbis libtheora"
-PACKAGECONFIG[flac] = "--enable-flac,--disable-flac,flac"
-PACKAGECONFIG[wave] = "--enable-wave,--disable-wave"
-PACKAGECONFIG[id3] = "--enable-id3,--disable-id3"
-PACKAGECONFIG[m3u] = "--enable-m3u,--disable-m3u"
-PACKAGECONFIG[pls] = "--enable-pls,--disable-pls"
-PACKAGECONFIG[asf] = "--enable-asf,--disable-asf"
-PACKAGECONFIG[rm] = "--enable-rm,--disable-rm"
-PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg"
-PACKAGECONFIG[png] = "--enable-png,--disable-png"
-
-do_install_append() {
- # Install "test" binary for corresponding package
- install -d ${D}/${bindir}
- install -m 755 ${B}/src/bin/.libs/test ${D}/${bindir}/test-lms
- # Remove .la files for loadable modules
- rm -f ${D}/${libdir}/${PN}/plugins/*.la
-}
-
-FILES_${PN} += "${datadir}/dbus-1"
-FILES_${PN}-dbg += "${libdir}/${PN}/plugins/.debug"
-
-PACKAGES_prepend = "${PN}-test "
-FILES_${PN}-test_prepend = "${bindir}/test-lms "
-
-PACKAGES += "${PN}-meta"
-ALLOW_EMPTY_${PN}-meta = "1"
-
-PACKAGES_DYNAMIC = "${PN}-plugin-*"
-
-python populate_packages_prepend () {
- lms_libdir = d.expand('${libdir}/${PN}')
- pkgs = []
-
- pkgs += do_split_packages(d, oe.path.join(lms_libdir, "plugins"), '^(.*)\.so$', d.expand('${PN}-plugin-%s'), 'LightMediaScanner plugin for %s', prepend=True, extra_depends=d.expand('${PN}'))
- metapkg = d.getVar('PN') + '-meta'
- d.setVar('RDEPENDS_' + metapkg, ' '.join(pkgs))
-}
diff --git a/meta-agl-profile-core/recipes-navigation/geoclue/files/org.freedesktop.GeoClue2.Client.conf b/meta-agl-profile-core/recipes-navigation/geoclue/files/org.freedesktop.GeoClue2.Client.conf
deleted file mode 100644
index a7486d055..000000000
--- a/meta-agl-profile-core/recipes-navigation/geoclue/files/org.freedesktop.GeoClue2.Client.conf
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE busconfig PUBLIC
- "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
- <policy user="root">
- <allow receive_type="signal" receive_interface="org.freedesktop.GeoClue2.Client" />
- </policy>
-</busconfig>
diff --git a/meta-agl-profile-core/recipes-navigation/geoclue/geoclue_%.bbappend b/meta-agl-profile-core/recipes-navigation/geoclue/geoclue_%.bbappend
deleted file mode 100644
index 40a3b46a0..000000000
--- a/meta-agl-profile-core/recipes-navigation/geoclue/geoclue_%.bbappend
+++ /dev/null
@@ -1,11 +0,0 @@
-inherit gobject-introspection
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-SRC_URI_append = "file://org.freedesktop.GeoClue2.Client.conf"
-
-PACKAGECONFIG = "nmea lib"
-
-do_install_append() {
- install -d ${D}/etc/dbus-1/system.d
- install -m 0644 ${WORKDIR}/org.freedesktop.GeoClue2.Client.conf ${D}/etc/dbus-1/system.d/org.freedesktop.GeoClue2.Client.conf
-}
diff --git a/meta-agl-profile-core/recipes-navigation/gpsd/gpsd_%.bbappend b/meta-agl-profile-core/recipes-navigation/gpsd/gpsd_%.bbappend
deleted file mode 100644
index da434e08e..000000000
--- a/meta-agl-profile-core/recipes-navigation/gpsd/gpsd_%.bbappend
+++ /dev/null
@@ -1,16 +0,0 @@
-SYSTEMD_SERVICE_${PN} += " gpsdctl@.service"
-
-RPROVIDES_${PN}-conf += "virtual/gpsd-conf"
-
-do_install_append() {
- # use the systemd compatible gpsd.rules
- install -d ${D}/${sysconfdir}/udev/rules.d
- install -m 0644 ${S}/gpsd.rules ${D}/${sysconfdir}/udev/rules.d/60-gpsd.rules
-
- #support for systemd
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${S}/systemd/gpsdctl@.service ${D}${systemd_unitdir}/system
-
- #autoprobe usb gps devices
- echo 'USBAUTO="true"' >> ${D}${sysconfdir}/default/gpsd.default
-}
diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-boot.bb b/meta-agl-profile-core/recipes-platform/images/agl-image-boot.bb
deleted file mode 100644
index 84cdbcf31..000000000
--- a/meta-agl-profile-core/recipes-platform/images/agl-image-boot.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "An AGL small image just capable of allowing a device to boot."
-
-require agl-image-boot.inc
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL_append = "\
- packagegroup-agl-image-boot \
- "
diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-boot.inc b/meta-agl-profile-core/recipes-platform/images/agl-image-boot.inc
deleted file mode 100644
index 825393978..000000000
--- a/meta-agl-profile-core/recipes-platform/images/agl-image-boot.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-IMAGE_LINGUAS = " "
-
-inherit core-image
-
-IMAGE_INSTALL = "${CORE_IMAGE_EXTRA_INSTALL}"
-
-IMAGE_ROOTFS_SIZE ?= "8192"
-
-# Allow extra IMAGE_FSTYPES to be added by boards configs
-IMAGE_FSTYPES += "${AGL_EXTRA_IMAGE_FSTYPES}"
diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.bb b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.bb
deleted file mode 100644
index 8c5aae1bf..000000000
--- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Cross SDK of Full AGL Distribution for core profile"
-
-DESCRIPTION = "SDK image for full AGL Distribution for IVI profile. \
-It includes the full meta-toolchain, plus developement headers and libraries \
-to form a standalone cross SDK."
-
-require agl-image-minimal.bb
-
-LICENSE = "MIT"
-
-require agl-image-minimal-crosssdk.inc
-
-inherit populate_sdk
-
-# Task do_populate_sdk and do_rootfs can't be exec simultaneously.
-# Both exec "createrepo" on the same directory, and so one of them
-# can failed (randomly).
-addtask do_populate_sdk after do_rootfs
diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.inc b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.inc
deleted file mode 100644
index e68e8db27..000000000
--- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-crosssdk.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-IMAGE_FEATURES_append = " dev-pkgs"
-IMAGE_INSTALL_append = " kernel-dev kernel-devsrc"
-
-# Always include the test widgets
-IMAGE_FEATURES_append = " agl-test-wgt"
-
-# Required dependencies for app and test builds
-TOOLCHAIN_HOST_TASK += " \
- nativesdk-lua \
- "
-
-# Required dependencies for app and test builds
-TOOLCHAIN_TARGET_TASK += " \
- lua-dev \
- lua-staticdev \
- libafb-helpers-staticdev \
- libappcontroller-staticdev \
- waltham-dev \
- "
diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-qa.bb b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-qa.bb
deleted file mode 100644
index b162f2904..000000000
--- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal-qa.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-SUMMARY = "An AGL small image just capable of allowing a device to boot and run tests."
-
-DESCRIPTION = "A minimal set of AGL Distribution. This image also has additional \
-packages (e.g. commandline tools) for Quality Assurance(QA)."
-
-require agl-image-minimal.bb
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL_append = " \
- packagegroup-ivi-common-test \
- "
diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.bb b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.bb
deleted file mode 100644
index 1fd213d0f..000000000
--- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "An AGL small image just capable of allowing a device to boot."
-
-require agl-image-minimal.inc
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL_append = "\
- packagegroup-agl-image-minimal \
- "
diff --git a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.inc b/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.inc
deleted file mode 100644
index 825393978..000000000
--- a/meta-agl-profile-core/recipes-platform/images/agl-image-minimal.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-IMAGE_LINGUAS = " "
-
-inherit core-image
-
-IMAGE_INSTALL = "${CORE_IMAGE_EXTRA_INSTALL}"
-
-IMAGE_ROOTFS_SIZE ?= "8192"
-
-# Allow extra IMAGE_FSTYPES to be added by boards configs
-IMAGE_FSTYPES += "${AGL_EXTRA_IMAGE_FSTYPES}"
diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb
deleted file mode 100644
index 1633feddc..000000000
--- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright (C) 2007 OpenedHand Ltd.
-#
-# derived from oe-core: meta/recipes-core/packagegroups/packagegroup-core-boot.bb
-
-SUMMARY = "Minimal boot requirements"
-DESCRIPTION = "The minimal set of packages required to boot the system"
-LICENSE = "MIT"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-inherit packagegroup
-
-#
-# Set by the machine configuration with packages essential for device bootup
-#
-MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= ""
-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= ""
-
-# Distro can override the following VIRTUAL-RUNTIME providers:
-VIRTUAL-RUNTIME_dev_manager ?= "udev"
-VIRTUAL-RUNTIME_login_manager ?= "busybox"
-VIRTUAL-RUNTIME_init_manager ?= "sysvinit"
-VIRTUAL-RUNTIME_initscripts ?= "initscripts"
-VIRTUAL-RUNTIME_keymaps ?= "keymaps"
-
-SYSVINIT_SCRIPTS = "${@bb.utils.contains('MACHINE_FEATURES', 'rtc', 'busybox-hwclock', '', d)} \
- modutils-initscripts \
- init-ifupdown \
- ${VIRTUAL-RUNTIME_initscripts} \
- "
-
-RDEPENDS_${PN} = "\
- base-files \
- base-passwd \
- busybox \
- rng-tools \
- run-agl-postinsts \
- ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit", "${SYSVINIT_SCRIPTS}", "", d)} \
- ${@bb.utils.contains("MACHINE_FEATURES", "keyboard", "${VIRTUAL-RUNTIME_keymaps}", "", d)} \
- netbase \
- ${VIRTUAL-RUNTIME_login_manager} \
- ${VIRTUAL-RUNTIME_init_manager} \
- ${VIRTUAL-RUNTIME_dev_manager} \
- ${VIRTUAL-RUNTIME_update-alternatives} \
- ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS}"
-
-RRECOMMENDS_${PN} = "\
- tzdata \
- ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS}"
-
diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb
deleted file mode 100644
index aef732838..000000000
--- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "The packages of middlewares for AGL IVI profile"
-DESCRIPTION = "The set of packages required by Operating System and Common libraries Subsystem"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-core-os-commonlibs \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- "
diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb
deleted file mode 100644
index 0ae5c77a3..000000000
--- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "The packages of middlewares for AGL IVI profile"
-DESCRIPTION = "The set of packages required by Operating System and Common libraries Subsystem"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-core-security \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- "
diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-services.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-services.bb
deleted file mode 100644
index 2fd31d148..000000000
--- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-services.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "The minimal set of packages for AGL core Connectivity Subsystem"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-core-services \
- "
-
-RDEPENDS_${PN} += "\
- agl-service-data-persistence \
- agl-service-network \
- agl-service-platform-info \
- "
diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb
deleted file mode 100644
index afa04e7a1..000000000
--- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "The minimal set of packages required by AGL"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-image-boot \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-core-boot \
- packagegroup-machine-base \
- "
-
-RDEPENDS_${PN} += "\
- "
diff --git a/meta-agl-profile-core/recipes-support/curl/curl_%.bbappend b/meta-agl-profile-core/recipes-support/curl/curl_%.bbappend
deleted file mode 100644
index fc24cea15..000000000
--- a/meta-agl-profile-core/recipes-support/curl/curl_%.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-# Cannot just append to PACKAGECONFIG, as nghttp2's dependencies do not build
-# for native/nativesdk, and appending class-target does not work because of
-# the weak definition of PACKAGECONFIG in the recipe, so need to copy the
-# definition to add nghttp2...
-PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} gnutls libidn proxy threaded-resolver verbose zlib nghttp2"
diff --git a/meta-agl-profile-core/recipes-support/libsoup/libsoup-2.4_%.bbappend b/meta-agl-profile-core/recipes-support/libsoup/libsoup-2.4_%.bbappend
deleted file mode 100644
index 06651fc11..000000000
--- a/meta-agl-profile-core/recipes-support/libsoup/libsoup-2.4_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_OECONF_append_class-native = " --disable-tls-check"
diff --git a/meta-agl-profile-core/recipes-support/opencv/opencv_4.%.bbappend b/meta-agl-profile-core/recipes-support/opencv/opencv_4.%.bbappend
deleted file mode 100644
index 8656abf09..000000000
--- a/meta-agl-profile-core/recipes-support/opencv/opencv_4.%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-PACKAGECONFIG ?= "jpeg png v4l libv4l gstreamer"
diff --git a/meta-agl-profile-core/recipes-support/udisks/files/99-udisks2.rules b/meta-agl-profile-core/recipes-support/udisks/files/99-udisks2.rules
deleted file mode 100644
index 996e43439..000000000
--- a/meta-agl-profile-core/recipes-support/udisks/files/99-udisks2.rules
+++ /dev/null
@@ -1,5 +0,0 @@
-# UDISKS_FILESYSTEM_SHARED
-# ==1: mount filesystem to a shared directory (/media/VolumeName)
-# ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName)
-# See udisks(8)
-ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
diff --git a/meta-agl-profile-core/recipes-support/udisks/files/automount.service b/meta-agl-profile-core/recipes-support/udisks/files/automount.service
deleted file mode 100644
index b16515196..000000000
--- a/meta-agl-profile-core/recipes-support/udisks/files/automount.service
+++ /dev/null
@@ -1,9 +0,0 @@
-[Unit]
-Description=Automount Disk Manager
-After=udisks2.service
-
-[Service]
-ExecStart=/usr/libexec/automount.sh
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-agl-profile-core/recipes-support/udisks/files/automount.sh b/meta-agl-profile-core/recipes-support/udisks/files/automount.sh
deleted file mode 100644
index 236791910..000000000
--- a/meta-agl-profile-core/recipes-support/udisks/files/automount.sh
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-
-MOUNT_OPTIONS_DEFAULT="ro,noexec"
-MOUNT_OPTIONS_VFAT="umask=0022"
-MOUNT_OPTIONS_EXT=""
-MOUNT_OPTIONS_NTFS=""
-MOUNT_OPTIONS_ISO9660=""
-
-VERBOSE=false
-
-# Source a configuration file that can override mount options if exists
-[ -f /etc/automount.conf ] && . /etc/automount.conf
-
-mount_device() {
- MOUNT_OPTIONS=""
- FSTYPE="$( udevadm info "${1}" "${2}" | awk -v FS== '/ID_FS_TYPE/ {print $2}' )"
- DEVNAME="$( udevadm info "${1}" "${2}" | awk -v FS== '/DEVNAME/ {print $2}' )"
- case $FSTYPE in
- vfat)
- MOUNT_OPTIONS="${MOUNT_OPTIONS_VFAT}"
- ;;
- ext[2-4])
- MOUNT_OPTIONS="${MOUNT_OPTIONS_EXT}"
- ;;
- ntfs)
- MOUNT_OPTIONS="${MOUNT_OPTIONS_NTFS}"
- ;;
- iso9660)
- MOUNT_OPTIONS="${MOUNT_OPTIONS_ISO9660}"
- ;;
- "")
- if $VERBOSE; then
- echo "[INFO][${DEVNAME}] Not a partition with a filesystem!"
- fi
- return
- ;;
- *)
- echo "[WARNING][${DEVNAME}] The filesystem '${FSTYPE}' is not supported!"
- return
- ;;
- esac
-
- if [ -n "${MOUNT_OPTIONS_DEFAULT}" ]; then
- if [ -z "${MOUNT_OPTIONS}" ]; then
- MOUNT_OPTIONS="${MOUNT_OPTIONS_DEFAULT}"
- else
- MOUNT_OPTIONS="${MOUNT_OPTIONS_DEFAULT},${MOUNT_OPTIONS}"
- fi
- fi
- if $VERBOSE; then
- echo "[INFO][${DEVNAME}] Mounting a ${FSTYPE}'s filesystem with options: ${MOUNT_OPTIONS}"
- fi
-
- if command -v udisksctl > /dev/null 2>&1; then
- if [ -n "${MOUNT_OPTIONS}" ]; then
- MOUNT_OPTIONS="-o ${MOUNT_OPTIONS}"
- fi
- udisksctl mount -t "${FSTYPE}" -b "${DEVNAME}" ${MOUNT_OPTIONS}
- elif command -v udisks >/dev/null 2>&1; then
- if [ -n "${MOUNT_OPTIONS}" ]; then
- MOUNT_OPTIONS="--mount-options ${MOUNT_OPTIONS}"
- fi
- udisks --mount-fstype "${FSTYPE}" --mount "${DEVNAME}" ${MOUNT_OPTIONS}
- else
- echo "[ERROR] Unable to find binary for mounting ${DEVNAME}" >&2
- return
- fi
- if [ "$?" -ne "0" ]; then
- echo "[ERROR] Failed to mount the device ${DEVNAME} of type ${FSTYPE} with options ${MOUNT_OPTIONS}" >&2
- fi
-}
-
-# At startup, remove empty directories that may exists
-rmdir /media/* > /dev/null 2>&1
-
-# Mount already plugged devices
-for DEVICE in $( lsblk -dn | cut -d' ' -f1 ); do
- REMOVABLE=$( cat "/sys/block/${DEVICE}/removable" )
- if [ "${REMOVABLE}" -eq "1" ]; then
- for PART in "/dev/${DEVICE}"*; do
- mount_device -n "${PART}"
- done
- fi
-done
-
-# Wait for plug events and mount devices
-stdbuf -oL -- udevadm monitor --udev -s block |
-while read -r -- _ _ EVENT DEVPATH _
-do
- if [ "${EVENT}" = "add" ]; then
- mount_device -p "/sys/${DEVPATH}"
- fi
-done
diff --git a/meta-agl-profile-core/recipes-support/udisks/udisks2_%.bbappend b/meta-agl-profile-core/recipes-support/udisks/udisks2_%.bbappend
deleted file mode 100644
index 34756f480..000000000
--- a/meta-agl-profile-core/recipes-support/udisks/udisks2_%.bbappend
+++ /dev/null
@@ -1,26 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI += "file://automount.service \
- file://automount.sh \
- file://99-udisks2.rules \
-"
-
-SYSTEMD_AUTO_ENABLE = "enable"
-SYSTEMD_SERVICE_${PN} += "automount.service"
-
-do_install_append () {
- sed -i 's/^WantedBy=.*/WantedBy=multi-user.target/' ${D}${systemd_unitdir}/system/udisks2.service
-
- install -d ${D}${base_libdir}/systemd/system
- install -m 0644 ${WORKDIR}/automount.service ${D}${systemd_unitdir}/system
-
- install -d ${D}${libexecdir}
- install -m 0755 ${WORKDIR}/automount.sh ${D}${libexecdir}/automount.sh
-
- install -d ${D}${sysconfdir}/udev/rules.d
- install -m 0644 ${WORKDIR}/99-udisks2.rules ${D}${sysconfdir}/udev/rules.d
-}
-
-FILES_${PN} += "${base_libdir}/systemd/system/automount.service \
- ${libexecdir}/automount.sh \
-"
diff --git a/meta-agl-profile-core/recipes-test/afb-test/afb-test_git.bb b/meta-agl-profile-core/recipes-test/afb-test/afb-test_git.bb
deleted file mode 100644
index 5246abb00..000000000
--- a/meta-agl-profile-core/recipes-test/afb-test/afb-test_git.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Binding embedding test framework to test others binding"
-DESCRIPTION = "This make testing binding running with Application Framework binder \
-easier by simply test verb return as well as event reception."
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/app-afb-test"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SECTION = "apps"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/app-afb-test;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-DEPENDS += "lua libafb-helpers libappcontroller"
-RDEPENDS_${PN} += "lua bash jq"
-RDEPENDS_${PN}-ptest += "af-binder"
-
-PV = "${AGLVERSION}"
-S = "${WORKDIR}/git"
-
-inherit cmake aglwgt pkgconfig ptest
-
-do_install_append() {
- install -d ${D}${bindir}
- install -m 775 ${S}/afm-test.target.sh ${D}${bindir}/afm-test
-}
-
diff --git a/meta-agl-profile-core/recipes-test/afb-test/files/run-ptest b/meta-agl-profile-core/recipes-test/afb-test/files/run-ptest
deleted file mode 100644
index 883939a83..000000000
--- a/meta-agl-profile-core/recipes-test/afb-test/files/run-ptest
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-afm-test /usr/AGL/apps/testwgt/aftest-test.wgt
diff --git a/meta-agl-profile-core/recipes-test/aiostress/aiostress_0.22.bb b/meta-agl-profile-core/recipes-test/aiostress/aiostress_0.22.bb
deleted file mode 100644
index 7803d74ed..000000000
--- a/meta-agl-profile-core/recipes-test/aiostress/aiostress_0.22.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "Async IO testing utility"
-DESCRIPTION = "aio-stress will open or create each file on the command line, and start a series of aio to it.\
-aio is done in a rotating loop. first file1 gets 8 requests, then file2, then file3 etc.\
-As each file finishes writing, it is switched to reads io buffers are aligned in case you want to do raw io"
-HOMEPAGE = "https://oss.oracle.com/~mason/aio-stress/"
-LICENSE = "GPLv2"
-
-S="${WORKDIR}"
-
-LIC_FILES_CHKSUM = "file://${S}/aio-stress.c;md5=ccb5d196a3736bbd835d582a4e2329c3"
-
-SRC_URI = "https://oss.oracle.com/~mason/aio-stress/aio-stress.c"
-SRC_URI[md5sum] = "ccb5d196a3736bbd835d582a4e2329c3"
-SRC_URI[sha256sum] = "3f4cffcc946fb717fff9d8fe932c7c2ee606efff198408d9fbe16955151445f7"
-
-do_compile () {
- ${CC} -Wall -Wshadow -o aio-stress -lpthread -laio aio-stress.c
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -m 0755 aio-stress ${D}${bindir}
-}
-
diff --git a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0001-Makefile.patch b/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0001-Makefile.patch
deleted file mode 100644
index 0ae56cee1..000000000
--- a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0001-Makefile.patch
+++ /dev/null
@@ -1,53 +0,0 @@
---- a/Makefile.orig 2016-04-01 15:50:20.636358716 +0200
-+++ b/Makefile 2016-04-01 15:51:58.916361191 +0200
-@@ -1,3 +1,9 @@
-+INCDIR = $(SDKROOT)/usr/include
-+LIBDIR = $(SDKROOT)/usr/lib
-+
-+EXTRA_CFLAGS=-I$(INCDIR)
-+EXTRA_LDFLAGS=-Wl,-rpath-link=$(LIBDIR) -L$(LIBDIR)
-+
- OBJECTS = bs_main.o \
- bs_vector.o \
- bs_pointmass.o \
-@@ -15,21 +21,21 @@
- bs_profiler.o \
- bs_rubberband.o
-
--CC = gcc
-+#CC = gcc
-
- DISTDIR = blobsallad-src
-
--CFLAGS = `pkg-config --cflags cairo; sdl-config --cflags`
--LIBS = `pkg-config --libs cairo; sdl-config --libs` -lm -lGL -lGLU
-+EXTRA_CFLAGS += -I$(INCDIR)/cairo -I$(INCDIR)/SDL -D_GNU_SOURCE=1 -D_REENTRANT
-+EXTRA_LDFLAGS += -lcairo -lSDL -lpthread -lm
-
- all: $(OBJECTS)
-- $(CC) -g -o blobsallad $(OBJECTS) $(LIBS)
-+ $(CC) -g -o blobsallad $(OBJECTS) $(EXTRA_LDFLAGS)
-
- map:
-- gcc -o createmap create_testdata.c -Wall -g -lm
-+ $(CC) -o createmap create_testdata.c -Wall -g -lm
-
- octree:
-- gcc -o test_octree test_octree.c bs_octree.c bs_list.c bs_vector.c bs_vector_util.c bs_timer.c bs_array.c -Wall -O2 $(LIBS) $(CFLAGS)
-+ $(CC) -o test_octree test_octree.c bs_octree.c bs_list.c bs_vector.c bs_vector_util.c bs_timer.c bs_array.c -Wall -O2 $(EXTRA_LDFLAGS) $(EXTRA_CFLAGS)
-
- GFX_OBJECTS = gfx_main.o \
- bs_gfx.o \
-@@ -41,10 +47,10 @@
- bs_list.o
-
- gfx: $(GFX_OBJECTS)
-- gcc -o gfx_main -Wall -g $(GFX_OBJECTS) $(LIBS)
-+ $(CC) -o gfx_main -Wall -g $(GFX_OBJECTS) $(EXTRA_LDFLAGS)
-
- .c.o:
-- $(CC) -g -Wall $(CFLAGS) $ -c $<
-+ $(CC) -g -Wall $(EXTRA_CFLAGS) $ -c $<
-
- clean:
- rm -f *.o; rm -f blobsallad;
diff --git a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0002-auto.patch b/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0002-auto.patch
deleted file mode 100644
index b61da2c1f..000000000
--- a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0002-auto.patch
+++ /dev/null
@@ -1,95 +0,0 @@
---- a/bs_main.c
-+++ b/bs_main.c
-@@ -11,6 +11,9 @@
- #include "bs_profiler.h"
- #include "bs_rubberband.h"
-
-+static struct timeval beginTime; /* Time of the benchmark start */
-+static int cur_step; /* Current benchmark phase. Used to subsequently increase number of objects each 10 seconds */
-+
- typedef struct bs_main_data_st
- {
- bs_cairo_sdl_t *pCairoSdl;
-@@ -113,7 +116,9 @@
- SDL_Event event;
- SDL_UserEvent userevent;
- bs_main_data_t *pMainData;
--
-+ struct timeval curTime;
-+ int hunsec;
-+
- pMainData = (bs_main_data_t*) pUserData;
-
- userevent.type = SDL_USEREVENT;
-@@ -121,6 +126,20 @@
- userevent.data1 = NULL;
- userevent.data2 = NULL;
-
-+ gettimeofday(&curTime, NULL);
-+ hunsec = curTime.tv_sec - beginTime.tv_sec;
-+
-+ /* increase cur_step each 10 seconds */
-+ if (cur_step < hunsec / 10) {
-+ printf("%d objects = %.2f fps\n", 1 << (cur_step + 1), pMainData->fps);
-+ userevent.code = 2; /* add more objects */
-+ cur_step++;
-+ }
-+
-+ /* exit if requested number of objects is reached */
-+ if (cur_step == 4)
-+ userevent.code = 3;
-+
- event.type = SDL_USEREVENT;
- event.user = userevent;
-
-@@ -152,14 +171,19 @@
- pMainData->newTimerInterval = 50;
- pMainData->fps = 20.0;
- pMainData->running = TRUE;
--
-+
-+ cur_step = 0;
-+
- bs_profiler_init();
-
-+ gettimeofday(&beginTime, NULL);
- gettimeofday(&startTime, NULL);
- pMainData->lastFrameTimeStamp = startTime.tv_sec * 1000 + startTime.tv_usec / 1000;
-
- SDL_AddTimer(50, bs_main_sdl_timer_callback, pMainData);
-
-+ bs_blob_collective_split(pMainData->pCollective);
-+
- for(;;)
- {
- SDL_WaitEvent(&event);
-@@ -253,8 +277,7 @@
- break;
-
- case SDL_USEREVENT:
-- if(event.user.code == 1)
-- {
-+ if (event.user.code == 1) {
- gettimeofday(&startTime, NULL);
- bs_main_update_simulation(pMainData);
- bs_main_redraw(pMainData);
-@@ -268,10 +291,15 @@
- usedTime = 50;
- }
-
-- pMainData->newTimerInterval = usedTime;
-- }
-- break;
--
-+ pMainData->newTimerInterval = usedTime;
-+ } else if (event.user.code == 2) {
-+ int i;
-+ for (i = 0; i < (1 << cur_step); i++)
-+ bs_blob_collective_split(pMainData->pCollective);
-+ } else if (event.user.code == 3) {
-+ exit(0);
-+ }
-+ break;
- case SDL_QUIT:
- exit(0);
- break;
diff --git a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0003-printcleanup.patch b/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0003-printcleanup.patch
deleted file mode 100644
index 630871dfd..000000000
--- a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0003-printcleanup.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/bs_blob_collective.c
-+++ b/bs_blob_collective.c
-@@ -152,7 +152,7 @@
-
- bs_list_unlink_p_cont(pCollective->pBlobs, bs_blob_collective_remove_blob_cb, findData.pMotherBlob);
-
-- printf("number of blobs: %d\n", bs_list_get_length(pCollective->pBlobs));
-+/* printf("number of blobs: %d\n", bs_list_get_length(pCollective->pBlobs)); */
- }
-
- typedef struct bs_blob_collective_join_find_smallest_st
diff --git a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0004-bs_main.c.patch b/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0004-bs_main.c.patch
deleted file mode 100644
index ae15408de..000000000
--- a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad/0004-bs_main.c.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/bs_main.c
-+++ b/bs_main.c
-@@ -165,9 +165,9 @@
- //pMainData->pRubberband = bs_rubberband_create(2.5f, 3.0f);
- pMainData->pEnv = bs_env_create(0.0f, 0.0f, 6.0f, 4.0f);
- pMainData->pGravity = bs_vector_create(0.0f, 10.0f);
-- pMainData->pCairoSdl = bs_cairo_sdl_create(600, 400);
-- pMainData->width = 600.0;
-- pMainData->height = 400.0;
-+ pMainData->pCairoSdl = bs_cairo_sdl_create(1600, 1024);
-+ pMainData->width = 1600.0;
-+ pMainData->height = 1024.0;
- pMainData->newTimerInterval = 50;
- pMainData->fps = 20.0;
- pMainData->running = TRUE;
diff --git a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad_2006-11-14-23-57.bb b/meta-agl-profile-core/recipes-test/blobsallad/blobsallad_2006-11-14-23-57.bb
deleted file mode 100644
index 373d4ddc6..000000000
--- a/meta-agl-profile-core/recipes-test/blobsallad/blobsallad_2006-11-14-23-57.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-DESCRIPTION = ""
-HOMEPAGE = "http://blobsallad.se/"
-LICENSE = "CLOSED"
-LIC_FILES_CHKSUM = ""
-
-SRC_URI = " \
- http://blobsallad.se/src/blobsallad-src-${PV}.tar.gz \
- file://0001-Makefile.patch \
- file://0002-auto.patch \
- file://0003-printcleanup.patch \
- file://0004-bs_main.c.patch"
-
-SRC_URI[md5sum] = "a2e3342cbf0f3a4a9b110af2663bed36"
-SRC_URI[sha256sum] = "cd6309df1929d3e6b7bce1dbecc751849aeaafe17c01e05fd2567dc4267faaa2"
-
-DEPENDS = "cairo virtual/libsdl"
-
-INSANE_SKIP_${PN} = "ldflags"
-
-S = "${WORKDIR}/blobsallad-src"
-
-do_configure () {
- # Specify any needed configure commands here
- :
-}
-
-do_compile () {
- # You will almost certainly need to add additional arguments here
- oe_runmake SDKROOT=${STAGING_DIR_HOST}
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -m 0755 blobsallad ${D}${bindir}
-}
-
diff --git a/meta-agl-profile-core/recipes-test/dung/dung_3.4.25-m2.bb b/meta-agl-profile-core/recipes-test/dung/dung_3.4.25-m2.bb
deleted file mode 100644
index 28bf858a0..000000000
--- a/meta-agl-profile-core/recipes-test/dung/dung_3.4.25-m2.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Kernel test scripts"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "e2472c7b1d061aef8bb05a4d7940fd8159c4a329"
-
-inherit allarch
-
-S = "${WORKDIR}/git/${PN}-${PV}"
-
-do_install () {
- for subdir in arch_timer cmt common scifab sdhi.0; do
- install -d -m 0755 ${D}/${datadir}/${PN}/$subdir
- install -m 0755 -t ${D}/${datadir}/${PN}/$subdir ${S}/$subdir/*
- done
-}
-
diff --git a/meta-agl-profile-core/recipes-test/ebizzy/ebizzy_0.3.bb b/meta-agl-profile-core/recipes-test/ebizzy/ebizzy_0.3.bb
deleted file mode 100644
index 08b0425c0..000000000
--- a/meta-agl-profile-core/recipes-test/ebizzy/ebizzy_0.3.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Benchmark tool that generates a workload resembling common web application server workloads"
-HOMEPAGE = "http://ebizzy.sourceforge.net/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=eb723b61539feef013de476e68b5c50a"
-
-SRC_URI = "http://downloads.sourceforge.net/project/ebizzy/ebizzy/${PV}/ebizzy-${PV}.tar.gz"
-SRC_URI[md5sum] = "af038bc506066bb3d28db08aba62bc38"
-SRC_URI[sha256sum] = "77286029d6348f3d9b3f04eae1feadb5ad1ad07b9f688f4d9f002960862467f2"
-
-INSANE_SKIP_${PN} = "ldflags"
-
-do_compile () {
- ${CC} -Wall -Wshadow -lpthread -o ebizzy ebizzy.c
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -m 0755 ebizzy ${D}${bindir}
-}
-
diff --git a/meta-agl-profile-core/recipes-test/ffsb/ffsb_6.0-rc2.bb b/meta-agl-profile-core/recipes-test/ffsb/ffsb_6.0-rc2.bb
deleted file mode 100644
index 66db133e3..000000000
--- a/meta-agl-profile-core/recipes-test/ffsb/ffsb_6.0-rc2.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "Flexible File System Benchmark"
-HOMEPAGE = "https://sourceforge.net/projects/ffsb/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=fd5d9bcabd8ed5a54a01ce8d183d592a"
-
-SRC_URI = "http://downloads.sourceforge.net/project/ffsb/ffsb/ffsb-${PV}/ffsb-${PV}.tar.bz2"
-SRC_URI[md5sum] = "cabfc1021c2ec6c6b168fefc84210891"
-SRC_URI[sha256sum] = "e5867692aae8c9bfbcdc774599022289c4d89c1d90f4dd7101fb9865ac773c71"
-
-inherit autotools
-
-# extra args to configure
-EXTRA_OECONF = ""
-
diff --git a/meta-agl-profile-core/recipes-test/fontconfig/fontconfig_%.bbappend b/meta-agl-profile-core/recipes-test/fontconfig/fontconfig_%.bbappend
deleted file mode 100644
index e8ce1ab78..000000000
--- a/meta-agl-profile-core/recipes-test/fontconfig/fontconfig_%.bbappend
+++ /dev/null
@@ -1,18 +0,0 @@
-do_install_append() {
- install -m 755 -d ${D}/${datadir}/fontconfig-test
- install -m 755 ${S}/test/run-test.sh ${D}/${datadir}/fontconfig-test/
-
- sed -i -e "s#^FCLIST=\.\./fc-list/fc-list#FCLIST=/usr/bin/fc-list#g" -e "s#^FCCACHE=\.\./fc-cache/fc-cache#FCCACHE=/usr/bin/fc-cache#g" ${D}/${datadir}/fontconfig-test/run-test.sh
-
- install -m 644 ${B}/test/out.expected ${D}/${datadir}/fontconfig-test/
- for x in 4x6.pcf 8x16.pcf fonts.conf.in; do
- install -m 644 ${S}/test/$x ${D}/${datadir}/fontconfig-test/
- done
-}
-
-PACKAGES =+ "fontconfig-test"
-
-DEBIAN_NOAUTONAME_fontconfig-test = "1"
-FILES_fontconfig-test = "${datadir}/fontconfig-test/*"
-
-
diff --git a/meta-agl-profile-core/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch b/meta-agl-profile-core/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch
deleted file mode 100644
index 4d0d09aea..000000000
--- a/meta-agl-profile-core/recipes-test/freetype/files/0001-Makefile-dont-build-gfx-demos.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -ur ft2demos-2.9.1.orig/Makefile ft2demos-2.9.1/Makefile
---- ft2demos-2.9.1.orig/Makefile 2018-04-22 05:41:50.000000000 -0400
-+++ ft2demos-2.9.1/Makefile 2019-02-18 23:28:59.794678736 -0500
-@@ -163,7 +163,8 @@
-
- ifeq ($(PLATFORM),unix)
- CC = $(CCraw)
-- LINK_CMD = $(subst /,$(SEP),$(OBJ_BUILD)/libtool) \
-+ LIBTOOL = $(OBJ_BUILD)/libtool
-+ LINK_CMD = $(subst /,$(SEP),$(LIBTOOL)) \
- --mode=link $(CC) \
- $(subst /,$(COMPILER_SEP),$(LDFLAGS))
- LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE)) $(LIB_CLOCK_GETTIME)
-@@ -289,12 +290,12 @@
- ttdebug
-
- # Comment out the next line if you don't have a graphics subsystem.
-- EXES += ftdiff \
-- ftgamma \
-- ftgrid \
-- ftmulti \
-- ftstring \
-- ftview
-+ # EXES += ftdiff \
-+ # ftgamma \
-+ # ftgrid \
-+ # ftmulti \
-+ # ftstring \
-+ # ftview
-
- # ftvalid requires ftgxval.c and ftotval.c
- #
diff --git a/meta-agl-profile-core/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch b/meta-agl-profile-core/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch
deleted file mode 100644
index 7803ad7e0..000000000
--- a/meta-agl-profile-core/recipes-test/freetype/files/0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 8c4f135619de929f9348b830a07a46a0c2c38e51 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= <jsmoeller@linuxfoundation.org>
-Date: Fri, 7 Oct 2016 15:26:20 +0200
-Subject: [PATCH] Do not hardcode libtool path
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It is already known and imported through config.mk.
-
-Signed-off-by: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
----
- Makefile | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index a5d34bd..254aad4 100644
---- a/Makefile
-+++ b/Makefile
-@@ -153,7 +153,6 @@ else
-
- ifeq ($(PLATFORM),unix)
- CC = $(CCraw)
-- LIBTOOL = $(OBJ_BUILD)/libtool
- LINK_CMD = $(subst /,$(SEP),$(LIBTOOL)) \
- --mode=link $(CC) \
- $(subst /,$(COMPILER_SEP),$(LDFLAGS))
---
-2.1.4
-
diff --git a/meta-agl-profile-core/recipes-test/freetype/freetype_2.%.bbappend b/meta-agl-profile-core/recipes-test/freetype/freetype_2.%.bbappend
deleted file mode 100644
index 6aa1eabc2..000000000
--- a/meta-agl-profile-core/recipes-test/freetype/freetype_2.%.bbappend
+++ /dev/null
@@ -1,34 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI =+ "${SOURCEFORGE_MIRROR}/freetype/freetype-demos/${PV}/ft2demos-${PV}.tar.gz;name=ft2demos \
- file://0001-Makefile-dont-build-gfx-demos.patch;patchdir=../ft2demos-${PV} \
- file://0001-ft2demos-Makefile-Do-not-hardcode-libtool-path.patch;patchdir=../ft2demos-${PV} \
- "
-SRC_URI[ft2demos.md5sum] = "c376adf4782bac9b9ac8e427884752d2"
-SRC_URI[ft2demos.sha256sum] = "5e9e94a2db9d1a945293a1644a502f6664a2173a454d4a55b19695e2e2f4a0bc"
-
-PACKAGES =+ "${PN}-demos"
-
-B = "${S}"
-
-do_compile_append () {
- oe_runmake -C ${WORKDIR}/ft2demos-${PV} TOP_DIR=${WORKDIR}/${BPN}-${PV}/
-}
-
-do_install_append () {
- install -d -m 0755 ${D}/${bindir}
- for x in ftbench ftdump ftlint ftvalid ttdebug; do
- install -m 0755 ${WORKDIR}/ft2demos-${PV}/bin/.libs/$x ${D}/${bindir}
- done
-}
-
-FILES_${PN}-demos = "\
- ${bindir}/ftbench \
- ${bindir}/ftdump \
- ${bindir}/ftlint \
- ${bindir}/ftvalid \
- ${bindir}/ttdebug \
-"
-
-# enable pixmap/libpng support to allow color emojis
-PACKAGECONFIG_append = " pixmap"
diff --git a/meta-agl-profile-core/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch b/meta-agl-profile-core/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch
deleted file mode 100644
index e834becf3..000000000
--- a/meta-agl-profile-core/recipes-test/fsfuzzer/files/0001-fix_missing_header_sys_stat.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -urN fsfuzzer-0.7.orig/fstest.c fsfuzzer-0.7/fstest.c
---- fsfuzzer-0.7.orig/fstest.c 2009-01-25 14:50:06.000000000 +0000
-+++ fsfuzzer-0.7/fstest.c 2016-06-16 17:49:27.264565819 +0000
-@@ -35,6 +35,7 @@
- #include <signal.h>
- #include <sys/file.h>
- #include <sys/mman.h>
-+#include <sys/stat.h>
-
- #define LOGGIT 1
- #define CHECK_XATTR 1
diff --git a/meta-agl-profile-core/recipes-test/fsfuzzer/fsfuzzer_0.7.bb b/meta-agl-profile-core/recipes-test/fsfuzzer/fsfuzzer_0.7.bb
deleted file mode 100644
index d2ddb59b1..000000000
--- a/meta-agl-profile-core/recipes-test/fsfuzzer/fsfuzzer_0.7.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "The fsfuzzer is a filesystem fuzzer tool that does stress tests of various filesystems in a reproducible and logged way."
-DESCRIPTION = "This tool creates initial (valid) filesystem images and then manipulates their binary format and structure for detecting flaws/bugs/design problems in the parsing/handling code for that particular filesystem. The program expects that you have a /media directory. It uses that one for mounting test images in."
-HOMEPAGE = "https://www.ee.oulu.fi/research/ouspg/fsfuzzer"
-
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
-
-SRC_URI = "http://people.redhat.com/sgrubb/files/fsfuzzer-${PV}.tar.gz \
- file://0001-fix_missing_header_sys_stat.patch \
- "
-SRC_URI[md5sum] = "d69ac4b67aaba52a889c9188eb456c15"
-SRC_URI[sha256sum] = "094aa17c4f66c525a04e5db5ad444b4a561b6f8e310d0bd70b9ca421cdf0a434"
-
-inherit autotools
-
-# Specify any options you want to pass to the configure script using EXTRA_OECONF:
-EXTRA_OECONF = ""
-
diff --git a/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper/gcovr-wrapper b/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper/gcovr-wrapper
deleted file mode 100644
index 12580237d..000000000
--- a/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper/gcovr-wrapper
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/bin/bash
-#
-# Copyright (C) 2020 Konsulko Group
-#
-# 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.
-
-#
-# gcovr wrapper for generating coverage reports against AGL bindings
-# on target. With a given binding name or coverage widget file, the
-# coverage version will be installed, and the pyagl tests for the
-# binding run before generating a report with gcovr. The afm-test
-# test widget or a user-supplied command may be run instead of the
-# pyagl tests, see usage below, or run with "--help".
-#
-
-usage() {
- cat <<-EOF
- Usage:
- $(basename $0) [options] <binding name | widget file>
-
- Options:
- -h, --help
- Print this help and exit
-
- -k, --keep
- Do not remove temporary files/directories
-
- -o, --gcovr-options
- Additional gcovr options, multiple options should be quoted
-
- -w, --workdir
- gcov/gcovr temporary working directory, defaults to /tmp/gcov
- The directory will be removed after running without --keep if it
- is empty, use caution if specifying existing system directories!
-
- --pyagl
- Run pyagl tests for binding, enabled by default
-
- --afm-test
- Run afm-test test widget tests for binding.
- If specified, disables pyagl tests; note that the last argument in
- the command-line will take precedence.
-
- -c, --command
- Test command to use in place of pyagl or afm-test, should be quote
- If specified, disables pyagl and afm-test tests.
-
- EOF
-}
-
-# Helper to validate widget install dir
-check_wgt_install() {
- if [ ! \( -d $1 -o -f $1/config.xml \) ]; then
- echo "ERROR: No widget install at $1"
- exit 1
- elif [ ! -d $1/src ]; then
- echo "ERROR: No source in $1/src"
- exit 1
- fi
-}
-
-# Helper to run gcovr inside mount namespace environment
-gcovr_runner() {
- wgt_install_dir=/var/local/lib/afm/applications/$1
- check_wgt_install ${wgt_install_dir}
-
- if [ ! -d $workdir/$1 ]; then
- echo "ERROR: No coverage data in $workdir/$1"
- exit 1
- fi
-
- # Get original source path
- gcno=$(cd $workdir/$1 && find -name '*.gcno' | head -n 1 | cut -d/ -f2-)
- if [ -z "$gcno" ]; then
- echo "ERROR: no gcno file found in $workdir/$1"
- exit 1
- fi
- srcfile=$(strings $workdir/$1/${gcno} | grep "$(basename ${gcno%.gcno})$" | uniq)
- srcdir=$(echo $srcfile | sed "s|/${gcno%%/*}/.*$||")
-
- # Set up mounts for chroot to run gcovr in
- # NOTE: We do not unmount these later, as we assume we are in a
- # private mount namespace and they will go away on exit from
- # it.
- echo "Setting up mounts"
- tmpdir=$(mktemp -d)
- echo $tmpdir > $workdir/.runner_tmpdir
- mkdir -p $tmpdir/{lower,upper,work,merged}
- # NOTE: Could potentially use rbind here, but explicitly mounting
- # just what we need seems safer
- mount --bind / $tmpdir/lower
- mount -t overlay -o lowerdir=$tmpdir/lower,upperdir=$tmpdir/upper,workdir=$tmpdir/work overlay $tmpdir/merged
- mount --bind /proc $tmpdir/merged/proc
- mount --bind /sys $tmpdir/merged/sys
- mount --bind /dev $tmpdir/merged/dev
- mount --bind /tmp $tmpdir/merged/tmp
- # Bind in the data files
- # NOTE: $workdir is bound instead of specifically just $workdir/$1,
- # so that e.g. html output to another directory in /tmp will
- # work as expected. A determined user may be able to shoot
- # themselves in the foot, but for now the trade off seems
- # acceptable.
- mkdir -p $tmpdir/merged/$workdir
- mount --bind $workdir $tmpdir/merged/$workdir
- # Bind the source files to their expected location
- mkdir -p $tmpdir/merged/$srcdir
- mount --bind ${wgt_install_dir}/src $tmpdir/merged/$srcdir
-
- echo "Entering chroot"
- echo
- exec chroot $tmpdir/merged \
- /usr/bin/gcovr -r $srcdir --object-directory $workdir/$1 --gcov-filter-source-errors -s ${GCOV_RUNNER_GCOVR_OPTIONS}
-}
-
-# Helper to clean up after runner
-gcovr_runner_cleanup() {
- rm -rf $workdir/$1
- if [ -f $workdir/.runner_tmpdir ]; then
- tmpdir=$(cat $workdir/.runner_tmpdir)
- rm -rf $tmpdir
- rm -f $workdir/.runner_tmpdir
- fi
- if [ "$workdir" != "/tmp" ]; then
- rmdir $workdir 2>/dev/null || true
- fi
-}
-
-# Parse arguments
-OPTS=$(getopt -o +hko:pw:c: --longoptions gcovr-runner,afm-test,command:,help,keep,gcovr-options:,pyagl,workdir: -n "$(basename $0)" -- "$@")
-if [ $? -ne 0 ]; then
- exit 1
-fi
-eval set -- "$OPTS"
-
-runner=false
-keep=false
-wgt=""
-cmd=""
-options=""
-afmtest=false
-pyagl=true
-workdir="/tmp/gcov"
-
-while true; do
- case "$1" in
- --gcovr-runner) runner=true; shift;;
- --afm-test) afmtest=true; pyagl=false; shift;;
- -c|--command) cmd="$2"; shift; shift;;
- -h|--help) usage; exit 0;;
- -k|--keep) keep=true; shift;;
- -o|--gcovr-options) options="$2"; shift; shift;;
- -p|--pyagl) pyagl=true; afmtest=false; shift;;
- -w|--workdir) workdir="$2"; shift; shift;;
- --) shift; break;;
- *) break;;
- esac
-done
-
-# Encode the assumption that a specified command means it runs instead
-# of any other tests.
-if [ -s "$cmd" ]; then
- pyagl=false
- afmtest=false
-fi
-
-if [ $# -ne 1 ]; then
- # Always expect widget name as single non-option argument
- usage
- exit 1
-fi
-
-# Rationalize workdir just in case
-workdir=$(realpath "$workdir")
-
-if [ "$runner" = "true" ]; then
- if [ "${GCOV_RUNNER_READY}" != "true" ]; then
- echo "ERROR: gcovr environment not ready!"
- exit 1
- fi
- gcovr_runner $1
- # If we get here, it'd be an error, so return 1
- exit 1
-fi
-
-binding=$1
-if [ "${1%.wgt}" != "$1" ]; then
- # User has specified path to a widget file
- wgt=$(realpath $1)
- binding=$(basename "${1%-coverage.wgt}")
-else
- wgt=/usr/AGL/apps/coverage/${binding}-coverage.wgt
-fi
-if [ ! -f $wgt ]; then
- echo "ERROR: No widget $wgt"
- exit 1
-elif [ "$afmtest" = "true" -a ! -f /usr/AGL/apps/test/${binding}-test.wgt ]; then
- echo "ERROR: No test widget for $binding"
- exit 1
-fi
-
-# Determine starting systemd unit name
-service=$(systemctl --all |grep afm-service-$binding |sed 's/^[ *] \([^ ]*\).*/\1/')
-if [ -z "$service" ]; then
- echo "ERROR: Could not determine systemd service unit for $binding"
- exit 1
-fi
-
-# Install coverage widget
-echo "Removing $binding widget"
-systemctl stop $service
-afm-util remove $binding
-echo
-echo "Installing $binding coverage widget"
-afm-util install $wgt
-echo
-
-wgt_install_dir=/var/local/lib/afm/applications/$binding
-check_wgt_install ${wgt_install_dir}
-gcov_src=${wgt_install_dir}/coverage
-if [ ! -d ${gcov_src} ]; then
- echo "ERROR: No coverage information in ${gcov_src}"
- exit 1
-elif [ ! -f ${gcov_src}/gcov.env ]; then
- echo "ERROR: No gcov environment file at ${gcov_src}/gcov.env"
- exit 1
-fi
-
-#
-# NOTE: In theory, the coverage data collection could be done inside
-# the mount namespace / chroot, but the potential for issues
-# when doing that seems higher than just running gcovr there,
-# so a conservative approach is taken.
-#
-
-# Set up things for the binary to write out gcda data files
-#
-# Having the matching build directory hierarchy in place and
-# writeable by the target binary before any restart and testing is
-# key to things working.
-#
-# As well, the environment file with the GCOV_PREFIX and
-# GCOV_PREFIX_STRIP values needs to be present before running so the
-# gcda files will get written into the relocated build hierarchy.
-#
-echo "Installing coverage information for $binding"
-mkdir -p $workdir
-rm -rf $workdir/$binding
-cp -dr ${gcov_src} $workdir/$binding
-chsmack -r -a System::Log $workdir
-chmod -R go+w $workdir
-
-# Install the gcov environment file
-mkdir -p /etc/afm/widget.env.d/$binding
-if [ "${workdir}" = "/tmp/gcov" ]; then
- cp ${gcov_src}/gcov.env /etc/afm/widget.env.d/$binding/gcov
-else
- # Update GCOV_PREFIX to point into workdir
- sed "s|^GCOV_PREFIX=.*|GCOV_PREFIX=${workdir}/$binding|" ${gcov_src}/gcov.env > /etc/afm/widget.env.d/$binding/gcov
-fi
-chsmack -r -a _ /etc/afm/widget.env.d/$binding
-
-# Determine new systemd unit name (version may now be different)
-service=$(systemctl --all |grep afm-service-$binding |sed 's/^[ *] \([^ ]*\).*/\1/')
-if [ -z "$service" ]; then
- echo "ERROR: Could not determine systemd service unit for $binding"
- exit 1
-fi
-
-# Restart the binding
-systemctl start $service
-echo
-
-# Run tests or given command
-if [ -n "$cmd" ]; then
- echo "Running command: $cmd"
- export AGL_AVAILABLE_INTERFACES=${AGL_AVAILABLE_INTERFACES:-ethernet}
- eval $cmd
-elif [ "$pyagl" = "true" ]; then
- echo "Running $binding pyagl tests"
- export AGL_AVAILABLE_INTERFACES=${AGL_AVAILABLE_INTERFACES:-ethernet}
- pytest -k "${binding#agl-service-} and not hwrequired" /usr/lib/python3.?/site-packages/pyagl
-else
- echo "Running $binding test widget"
- # NOTE: su to agl-driver is required here to avoid fallout from
- # the "afm-util run" in afm-test seemingly triggering the
- # start of other per-user bindings for the root user.
- su -l -c "/usr/bin/afm-test /usr/AGL/apps/test/${binding}-test.wgt" agl-driver
-fi
-
-# Restart again to trigger data file writing
-systemctl restart $service
-echo
-
-# Run ourselves in gcovr runner mode inside a private mount namespace
-export GCOV_RUNNER_READY=true
-# NOTE: Passing gcovr options in the environment to avoid quoting hassles
-export GCOV_RUNNER_GCOVR_OPTIONS="$options"
-runner_options="--workdir ${workdir}"
-unshare -m $0 --gcovr-runner ${runner_options} $binding
-rc=$?
-
-if [ "$keep" != "true" ]; then
- # Clean up after ourselves
- gcovr_runner_cleanup $1
- rm -f /etc/afm/widget.env.d/$1/gcov
- rmdir /etc/afm/widget.env.d/$1 2>/dev/null || true
-fi
-
-exit $rc
-
diff --git a/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper_1.0.bb b/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper_1.0.bb
deleted file mode 100644
index 2ff39b211..000000000
--- a/meta-agl-profile-core/recipes-test/gcovr-wrapper/gcovr-wrapper_1.0.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "AGL gcovr wrapper"
-DESCRIPTION = "This wrapper script enables running gcovr against a \
-AGL binding to generate a coverage report of running pyagl tests, \
-the afm-test test widget, or a user-supplied command."
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI += "file://gcovr-wrapper"
-
-inherit allarch
-
-do_install() {
- install -D -m 0755 ${WORKDIR}/gcovr-wrapper ${D}${bindir}/gcovr-wrapper
-}
-
-RDEPENDS_${PN} = "bash gcovr"
diff --git a/meta-agl-profile-core/recipes-test/gcovr/gcovr/0001-add-gcov-filter-source-errors-option.patch b/meta-agl-profile-core/recipes-test/gcovr/gcovr/0001-add-gcov-filter-source-errors-option.patch
deleted file mode 100644
index be1dcf829..000000000
--- a/meta-agl-profile-core/recipes-test/gcovr/gcovr/0001-add-gcov-filter-source-errors-option.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-Add option to filter gcov source errors
-
-Add "--gcov-filter-source-errors" to apply filters to the source
-files in the errors from gcov. If all source files in the errors
-are filtered, then the error is ignored so that the file will be
-processed. This enables the usecase of running on a target where
-only the source tree for a binary is available, but not all of the
-external source headers are.
-
-Upstream-Status: pending
-
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/gcovr/configuration.py b/gcovr/configuration.py
-index 1356097..083532c 100644
---- a/gcovr/configuration.py
-+++ b/gcovr/configuration.py
-@@ -915,6 +915,14 @@ GCOVR_CONFIG_OPTIONS = [
- "Default: {default!s}.",
- action="store_true",
- ),
-+ GcovrConfigOption(
-+ "gcov_filter_source_errors", ['--gcov-filter-source-errors'],
-+ group="gcov_options",
-+ help="Apply filters to missing source file errors in GCOV files "
-+ "instead of exiting with an error. "
-+ "Default: {default!s}.",
-+ action="store_true",
-+ ),
- GcovrConfigOption(
- "objdir", ['--object-directory'],
- group="gcov_options",
-diff --git a/gcovr/gcov.py b/gcovr/gcov.py
-index de79215..171d68d 100644
---- a/gcovr/gcov.py
-+++ b/gcovr/gcov.py
-@@ -667,11 +667,27 @@ def run_gcov_and_process_files(
- chdir=chdir,
- tempdir=tempdir)
-
-+ skip = False
- if source_re.search(err):
-- # gcov tossed errors: try the next potential_wd
-- error(err)
-- done = False
-- else:
-+ ignore = False
-+ if options.gcov_filter_source_errors:
-+ # Check if errors are all from source that is filtered
-+ ignore = True
-+ for line in err.splitlines():
-+ src_fname = line.split()[-1]
-+ filtered, excluded = apply_filter_include_exclude(
-+ src_fname, options.filter, options.exclude)
-+ if not (filtered or excluded):
-+ ignore = False
-+ break
-+
-+ if not ignore:
-+ # gcov tossed errors: try the next potential_wd
-+ error(err)
-+ skip = True
-+
-+ done = False
-+ if not skip:
- # Process *.gcov files
- for fname in active_gcov_files:
- process_gcov_data(fname, covdata, abs_filename, options)
diff --git a/meta-agl-profile-core/recipes-test/gcovr/gcovr_%.bbappend b/meta-agl-profile-core/recipes-test/gcovr/gcovr_%.bbappend
deleted file mode 100644
index 699aea214..000000000
--- a/meta-agl-profile-core/recipes-test/gcovr/gcovr_%.bbappend
+++ /dev/null
@@ -1,2 +0,0 @@
-# Add not yet upstreamed patch that enables on target gcov usage
-SRC_URI += "file://0001-add-gcov-filter-source-errors-option.patch"
diff --git a/meta-agl-profile-core/recipes-test/gcovr/gcovr_git.bb b/meta-agl-profile-core/recipes-test/gcovr/gcovr_git.bb
deleted file mode 100644
index 6da04cc53..000000000
--- a/meta-agl-profile-core/recipes-test/gcovr/gcovr_git.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Generate GCC code coverage reports"
-DESCRIPTION = "Gcovr provides a utility for managing the use of the GNU gcov \
-utility and generating summarized code coverage results."
-HOMEPAGE = "https://gcovr.com"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=221e634a1ceafe02ef74462cbff2fb16"
-
-PV = "4.2+git${SRCPV}"
-SRC_URI = "git://github.com/gcovr/gcovr.git;protocol=https"
-SRCREV = "1bc72e3bb59b9296e962b350691732ddafbd3195"
-
-S = "${WORKDIR}/git"
-
-inherit setuptools3
-
-RDEPENDS_${PN} += " \
- python3-compression \
- python3-core \
- python3-crypt \
- python3-datetime \
- python3-difflib \
- python3-io \
- python3-jinja2 \
- python3-json \
- python3-lxml \
- python3-multiprocessing \
- python3-pygments \
- python3-pytest \
- python3-shell \
- python3-threading \
- python3-typing \
-"
diff --git a/meta-agl-profile-core/recipes-test/glmark2/glmark2_%.bbappend b/meta-agl-profile-core/recipes-test/glmark2/glmark2_%.bbappend
deleted file mode 100644
index a64e0506c..000000000
--- a/meta-agl-profile-core/recipes-test/glmark2/glmark2_%.bbappend
+++ /dev/null
@@ -1,2 +0,0 @@
-PACKAGECONFIG = "wayland-gles2"
-PACKAGECONFIG[wayland-gles2] = ",,virtual/egl virtual/libgles2 wayland"
diff --git a/meta-agl-profile-core/recipes-test/himeno/himeno_2.0.bb b/meta-agl-profile-core/recipes-test/himeno/himeno_2.0.bb
deleted file mode 100644
index f890e23a4..000000000
--- a/meta-agl-profile-core/recipes-test/himeno/himeno_2.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-DESCRIPTION = "Himeno Benchmark"
-LICENSE = "LGPL-2.0"
-URL = "http://accc.riken.jp/en/supercom/himenobmt/"
-
-SRC_URI = "http://accc.riken.jp/en/wp-content/uploads/sites/2/2015/07/himenobmt.c.zip"
-SRC_URI[md5sum] = "8d8e837dfc3e00a3b322eb4ae3edd551"
-SRC_URI[sha256sum] = "8780bfbdacb0d4dcab2931e65cadd69411731e3f2afcc1231d0743a036298077"
-
-LIC_FILES_CHKSUM = "file://himenoBMT.c;md5=8e8771ddc01c6d1a795e088e2d6dee78"
-
-# Upstream ZIP file contains an LZH archive, thus a 2 steps "unpack" is required.
-# The LZH archive is unpacked after native tools dependency resolution,
-# thus. after "configure" task in our case:
-
-DEPENDS = "p7zip-native"
-
-do_configure_append() {
- 7z x -y -o${S} ${WORKDIR}/himenobmt.c.lzh
- cd ${S}
- sed -i -e 's/CC= gcc/#CC= gcc/' Makefile
- sed -i -e 's/CFLAGS = /#CFLAGS = /' Makefile
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -m 0755 bmt ${D}${bindir}
-}
diff --git a/meta-agl-profile-core/recipes-test/interbench/files/interbench.c.patch b/meta-agl-profile-core/recipes-test/interbench/files/interbench.c.patch
deleted file mode 100644
index c882739ba..000000000
--- a/meta-agl-profile-core/recipes-test/interbench/files/interbench.c.patch
+++ /dev/null
@@ -1,68 +0,0 @@
---- interbench.c.orig 2009-10-30 23:14:59.000000000 -0500
-+++ interbench.c 2012-07-10 19:06:00.000000000 -0500
-@@ -71,6 +71,7 @@ struct user_data {
- char datestamp[13];
- FILE *logfile;
- } ud = {
-+ .ram = 0,
- .duration = 30,
- .cpu_load = 4,
- .log = 1,
-@@ -652,6 +653,8 @@ void emulate_write(struct thread *th)
- terminal_error("fopen");
- if (stat(name, &statbuf) == -1)
- terminal_fileopen_error(fp, "stat");
-+ if (statbuf.st_blksize < MIN_BLK_SIZE)
-+ statbuf.st_blksize = MIN_BLK_SIZE;
- for (i = 0 ; i < mem; i++) {
- if (fwrite(buf, statbuf.st_blksize, 1, fp) != 1)
- terminal_fileopen_error(fp, "fwrite");
-@@ -1136,14 +1139,17 @@ void get_ram(void)
- if(!(meminfo = fopen("/proc/meminfo", "r")))
- terminal_error("fopen");
-
-- ud.ram = ud.swap = 0;
-- while( !feof(meminfo) && !fscanf(meminfo, "MemTotal: %lu kB", &ud.ram) )
-- fgets(aux,sizeof(aux),meminfo);
-+ if (!ud.ram)
-+ {
-+ while( !feof(meminfo) && !fscanf(meminfo, "MemTotal: %lu kB", &ud.ram) )
-+ fgets(aux,sizeof(aux),meminfo);
-+ }
-+ ud.swap = 0;
- while( !feof(meminfo) && !fscanf(meminfo, "SwapTotal: %lu kB", &ud.swap) )
- fgets(aux,sizeof(aux),meminfo);
- if (fclose(meminfo) == -1)
- terminal_error("fclose");
--
-+
- if( !ud.ram || !ud.swap ) {
- unsigned long i;
- fprintf(stderr, "\nCould not get memory or swap size. ");
-@@ -1399,6 +1405,7 @@ void usage(void)
- fprintf(stderr, "\t[-h]\n\n");
- fprintf(stderr, " -l\tUse <int> loops per sec (default: use saved benchmark)\n");
- fprintf(stderr, " -L\tUse cpu load of <int> with burn load (default: 4)\n");
-+ fprintf(stderr, " -M\tForce RAM size to <int>. Useful when disk is smaller than RAM.\n");
- fprintf(stderr, " -t\tSeconds to run each benchmark (default: 30)\n");
- fprintf(stderr, " -B\tNice the benchmarked thread to <int> (default: 0)\n");
- fprintf(stderr, " -N\tNice the load thread to <int> (default: 0)\n");
-@@ -1482,7 +1489,7 @@ int main(int argc, char **argv)
- terminal_error("signal");
- #endif
-
-- while ((q = getopt(argc, argv, "hl:L:B:N:ut:bcnrC:I:m:w:x:W:X:")) != -1) {
-+ while ((q = getopt(argc, argv, "hl:L:M:B:N:ut:bcnrC:I:m:w:x:W:X:")) != -1) {
- switch (q) {
- case 'h':
- usage();
-@@ -1496,6 +1503,9 @@ int main(int argc, char **argv)
- case 'L':
- ud.cpu_load = atoi(optarg);
- break;
-+ case 'M':
-+ ud.ram = atoi(optarg);
-+ break;
- case 'B':
- ud.bench_nice = atoi(optarg);
- break;
diff --git a/meta-agl-profile-core/recipes-test/interbench/interbench_0.31.bb b/meta-agl-profile-core/recipes-test/interbench/interbench_0.31.bb
deleted file mode 100644
index 3e6490374..000000000
--- a/meta-agl-profile-core/recipes-test/interbench/interbench_0.31.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-DESCRIPTION = "The Linux interactivity benchmark"
-HOMEPAGE = "http://users.tpg.com.au/ckolivas/interbench/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
-SRC_URI = "http://ck.kolivas.org/apps/interbench/interbench-${PV}.tar.bz2"
-
-SRC_URI += "file://interbench.c.patch;striplevel=0"
-
-inherit autotools
-
-INSANE_SKIP_${PN} = "ldflags"
-
-B = "${S}"
-EXTRA_OEMAKE = "CC='${CC}'"
-
-# upstream tarball contains x86_64 binaries, we need a clean source tree
-do_compile() {
- oe_runmake clean
- oe_runmake
-}
-
-do_install() {
- install -d ${D}${bindir} ${D}${datadir}/doc/${PN}/ ${D}${mandir}/man8/
- install -m 0755 ${B}/interbench ${D}${bindir}
- install -m 0644 ${S}/readme* ${D}${datadir}/doc/${PN}/
- install -m 0644 ${S}/interbench.8 ${D}${mandir}/man8/
-}
-
-SRC_URI[md5sum] = "832254d7fd1255c548ebea7b97f01015"
-SRC_URI[sha256sum] = "89d438b28aef22d26e79812762a57a9f9344a8dd8826edebfe60dad48ee1c784"
-
diff --git a/meta-agl-profile-core/recipes-test/ipv6connect/ipv6connect.bb b/meta-agl-profile-core/recipes-test/ipv6connect/ipv6connect.bb
deleted file mode 100644
index a8b93716a..000000000
--- a/meta-agl-profile-core/recipes-test/ipv6connect/ipv6connect.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "ipv6connect test"
-HOMEPAGE = "https://chromium.googlesource.com/chromiumos/third_party/autotest/+/0.12.369.B/client/tests/ipv6connect"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${S}/${PN}/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "b355b7e1f43a19938895964f314484ffd8a39542"
-
-inherit autotools
-
-INSANE_SKIP_${PN} = "ldflags"
-
-B = "${WORKDIR}/git/ipv6connect"
-S = "${WORKDIR}/git"
-
-# configure script is not delivered, only a makefile.
-do_configure() {
- :
-}
-
-do_install() {
- install -d ${D}${bindir}
- install -m 0755 ${B}/ipv6connect ${D}${bindir}
-}
diff --git a/meta-agl-profile-core/recipes-test/linpack/linpack.bb b/meta-agl-profile-core/recipes-test/linpack/linpack.bb
deleted file mode 100644
index 84bed0ff6..000000000
--- a/meta-agl-profile-core/recipes-test/linpack/linpack.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Linpack benchmark"
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://${S}/${PN}/linpack.c;md5=076f1fd8d313056103f98d4253862eae"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "920cae73a918d1f516113b0ae967be3ecaba86ef"
-
-DEPENDS += "rsync-native"
-
-inherit autotools
-
-S = "${WORKDIR}/git"
-
-# configure script is not delivered, only a makefile.
-do_configure() {
- mkdir -p ${B}
- rsync -a ${S}/${PN}/* ${B}
-}
-
-do_install() {
- install -d ${D}${bindir}
- install -m 0755 ${B}/linpack ${D}${bindir}
-}
diff --git a/meta-agl-profile-core/recipes-test/linus-stress/linus-stress.bb b/meta-agl-profile-core/recipes-test/linus-stress/linus-stress.bb
deleted file mode 100644
index 01b3cfce5..000000000
--- a/meta-agl-profile-core/recipes-test/linus-stress/linus-stress.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "linus_stress test"
-HOMEPAGE = "https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/client/tests/linus_stress"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${S}/linus_stress/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qa-test-misc;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "87cdfd4626c0cb47fc22f328867e49d6268df85c"
-
-inherit autotools
-INSANE_SKIP_${PN} = "ldflags"
-
-B = "${WORKDIR}/git/linus_stress"
-S = "${WORKDIR}/git"
-
-# configure script is not delivered, only a makefile.
-do_configure() {
- :
-}
-
-do_install() {
- install -d ${D}${bindir}
- install -m 0755 ${B}/linus_stress ${D}${bindir}
-}
diff --git a/meta-agl-profile-core/recipes-test/packagegroups/packagegroup-agl-test.bb b/meta-agl-profile-core/recipes-test/packagegroups/packagegroup-agl-test.bb
deleted file mode 100644
index 4591591e7..000000000
--- a/meta-agl-profile-core/recipes-test/packagegroups/packagegroup-agl-test.bb
+++ /dev/null
@@ -1,57 +0,0 @@
-SUMMARY = "Utilities for testing of AGL"
-DESCRIPTION = "A set of common packages required by testing AGL for Quality Assurance"
-
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-test \
- packagegroup-agl-test-ltp \
- packagegroup-ivi-common-test \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- bc \
- blobsallad \
- dbench \
- ebizzy \
- ffsb \
- interbench \
- iozone3 \
- iperf3 \
- ipv6connect \
- linpack \
- linus-stress \
- lmbench \
- nbench-byte \
- rt-tests \
- stress \
- "
-# to be added, but needs LICENSE_FLAGS_WHITELIST="non-commercial"
-# netperf
-
-# FTBS, SPEC-316
-# himeno
-# FTBS, SPEC-1384
-# trinity
-
-# packagegroup-agl-test-ltp \
-# ltp \
-#
-
-# Packages for shell commands which are required by LTP
-# readelf, logrotate, vsftpd, crontab, sar, arp, ftp,
-# host, rcp, rlogin, rsh, tcpdump, expect, iptables, dnsmasq,
-# pgrep
-RDEPENDS_packagegroup-agl-test-ltp += " \
- initscripts-functions bind-utils binutils \
- cronie dnsmasq expect inetutils-ftp inetutils-rsh \
- iptables logrotate net-tools sysstat tcpdump vsftpd \
- "
-
-RDEPENDS_packagegroup-ivi-common-test = " \
- packagegroup-agl-test \
- "
diff --git a/meta-agl-profile-core/recipes-test/pyagl/pyagl_git.bb b/meta-agl-profile-core/recipes-test/pyagl/pyagl_git.bb
deleted file mode 100644
index ab843065b..000000000
--- a/meta-agl-profile-core/recipes-test/pyagl/pyagl_git.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "Python bindings and tests for Automotive Grade Linux services"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/pyagl"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/pyagl;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "5aed9a32ea71737709a11590d6ecc92f773f85d6"
-PV = "${AGL_BRANCH}+git${SRCPV}"
-
-S = "${WORKDIR}/git"
-
-inherit setuptools3
-
-do_install_append() {
- install -D -m 0755 ${S}/pyagl/scripts/pyagl ${D}${bindir}/pyagl
-}
-
-RDEPENDS_${PN} += " \
- python3-asyncio \
- python3-asyncssh \
- python3-core \
- python3-json \
- python3-logging \
- python3-math \
- python3-parse \
- python3-pprint \
- python3-pytest \
- python3-pytest-asyncio \
- python3-pytest-dependency \
- python3-pytest-reverse \
- python3-typing \
- python3-websockets \
-"
diff --git a/meta-agl-profile-core/recipes-test/trinity/trinity_git.bb b/meta-agl-profile-core/recipes-test/trinity/trinity_git.bb
deleted file mode 100644
index f0f09a855..000000000
--- a/meta-agl-profile-core/recipes-test/trinity/trinity_git.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SUMMARY = "a Linux System call fuzz teste."
-DESCRIPTION = "Trinity, a Linux System call fuzz tester."
-HOMEPAGE = "http://codemonkey.org.uk/projects/trinity/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${S}/COPYING;md5=96094d47cfbd2cc45eb46ce0fc423c04"
-
-COMPATIBLE_HOST = "(x86_64|arm|aarch64).*-linux"
-
-PV = "1.5"
-SRCREV = "edc2e693e298e0372010a361354c4a79a3cd93f3"
-SRC_URI = "git://github.com/kernelslacker/trinity.git;protocol=https;nobranch=1 \
- "
-
-S = "${WORKDIR}/git"
-
-inherit useradd
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--system --create-home --shell /bin/sh ${PN} "
-
-do_configure () {
- ./configure.sh
-}
-
-# workaround random build failures
-do_compile () {
- ${MAKE}
-}
-
-do_install () {
- oe_runmake install DESTDIR=${D}/usr
- install -o ${PN} -d -m 0755 ${D}/${datadir}/${PN}
- install -o ${PN} -m 0755 ${S}/scripts/test-all-syscalls-parallel.sh ${D}/${datadir}/${PN}
- install -o ${PN} -m 0755 ${S}/scripts/test-all-syscalls-sequentially.sh ${D}/${datadir}/${PN}
- install -o ${PN} -m 0755 ${S}/scripts/test-multi.sh ${D}/${datadir}/${PN}
- install -o ${PN} -m 0755 ${S}/scripts/test-vm.sh ${D}/${datadir}/${PN}
-}
-
-PACKAGES =+ "${PN}-example"
-
-FILES_${PN} = "${bindir}/trinity"
-FILES_${PN}-example = "${datadir}/${PN}"
diff --git a/meta-agl-profile-graphical-html5/conf/layer.conf b/meta-agl-profile-graphical-html5/conf/layer.conf
deleted file mode 100644
index d499dd173..000000000
--- a/meta-agl-profile-graphical-html5/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH .= ":${LAYERDIR}"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "html5-framework"
-BBFILE_PATTERN_html5-framework = "^${LAYERDIR}/"
-BBFILE_PRIORITY_html5-framework = "80"
-
-LAYERSERIES_COMPAT_html5-framework = "dunfell"
diff --git a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf.bbappend
deleted file mode 100644
index 2c5201aa8..000000000
--- a/meta-agl-profile-graphical-html5/recipes-graphics/wayland/weston-ini-conf.bbappend
+++ /dev/null
@@ -1,12 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI_remove = " \
- file://hdmi-a-1-270.cfg \
- file://hdmi-a-1-90.cfg \
- file://virtual.cfg \
-"
-
-SRC_URI += " \
- file://hdmi-a-1-180.cfg \
- file://virtual-landscape.cfg \
-"
diff --git a/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.bb b/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.bb
deleted file mode 100644
index 0ec6829ed..000000000
--- a/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-SUMMARY = "An image containing all packages required to run web applications"
-
-require agl-image-graphical-html5.inc
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL_append = "\
- packagegroup-agl-profile-graphical-html5 \
- "
-
diff --git a/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.inc b/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.inc
deleted file mode 100644
index e943b9903..000000000
--- a/meta-agl-profile-graphical-html5/recipes-platform/images/agl-image-graphical-html5.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-require recipes-platform/images/agl-image-minimal.inc
-
-IMAGE_FEATURES += "splash"
-
-IMAGE_FEATURES += "${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'ssh-server-dropbear' , '', d)}"
-
-inherit features_check
-
-REQUIRED_DISTRO_FEATURES = "wayland"
diff --git a/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-appfw-html5.bb b/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-appfw-html5.bb
deleted file mode 100644
index cc9ed3d64..000000000
--- a/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-appfw-html5.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "AGL web runtime packages"
-DESCRIPTION = "Specific packages for the AGL web runtime (minus profile-graphical)"
-
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-appfw-html5 \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-# add packages for WAM
-RDEPENDS_${PN} += " \
- chromium-browser-service \
- wam \
- "
diff --git a/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-html5.bb b/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-html5.bb
deleted file mode 100644
index 202750140..000000000
--- a/meta-agl-profile-graphical-html5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-html5.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "AGL web runtime profile"
-DESCRIPTION = "The full set of packages required for AGL web runtime"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-profile-graphical-html5 \
- profile-graphical-html5 \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-profile-graphical \
- packagegroup-agl-appfw-html5 \
-"
-
-RDEPENDS_${PN} += "\
- agl-login-manager \
- "
-
-RDEPENDS_profile-graphical-html5 = "${PN}"
diff --git a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium-browser-service.bb b/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium-browser-service.bb
deleted file mode 100644
index 90242d792..000000000
--- a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium-browser-service.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Chromium browser widget"
-DESCRIPTION = "Wgt packaging for running chromium installed browser"
-HOMEPAGE = "https://webosose.org"
-SECTION = "apps"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/chromium;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-#build-time dependencies
-DEPENDS += "af-binder af-main-native chromium68"
-
-inherit cmake aglwgt
-
-RDEPENDS_${PN} += "chromium68-browser"
diff --git a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch b/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch
deleted file mode 100644
index 485766b02..000000000
--- a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Upstream-Status: Inappropriate [embedder specific]
-
-The patch below makes the V8 binaries run during the build be invoked through
-QEMU, as they are built for the target.
-
-Signed-off-by: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
-Signed-off-by: Maksim Sisov <msisov@igalia.com>
-
-Index: git/src/tools/v8_context_snapshot/BUILD.gn
-===================================================================
---- git.orig/src/tools/v8_context_snapshot/BUILD.gn
-+++ git/src/tools/v8_context_snapshot/BUILD.gn
-@@ -62,6 +62,7 @@ if (use_v8_context_snapshot) {
- output_path = rebase_path(output_file, root_build_dir)
-
- args = [
-+ "./v8-qemu-wrapper.sh",
- "./" + rebase_path(
- get_label_info(
- ":v8_context_snapshot_generator($v8_snapshot_toolchain)",
-Index: git/src/v8/BUILD.gn
-===================================================================
---- git.orig/src/v8/BUILD.gn
-+++ git/src/v8/BUILD.gn
-@@ -900,6 +900,7 @@ action("run_torque") {
- }
-
- args = [
-+ "./v8-qemu-wrapper.sh",
- "./" + rebase_path(get_label_info(":torque($v8_torque_toolchain)",
- "root_out_dir") + "/torque",
- root_build_dir),
-@@ -977,6 +978,7 @@ template("run_mksnapshot") {
- data = []
-
- args = [
-+ "./v8-qemu-wrapper.sh",
- "./" + rebase_path(get_label_info(":mksnapshot($v8_snapshot_toolchain)",
- "root_out_dir") + "/mksnapshot",
- root_build_dir),
diff --git a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68_git.bb b/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68_git.bb
deleted file mode 100644
index 4f545c145..000000000
--- a/meta-agl-profile-graphical-html5/recipes-wam/chromium/chromium68_git.bb
+++ /dev/null
@@ -1,404 +0,0 @@
-# Copyright (c) 2018 LG Electronics, Inc.
-
-SUMMARY = "Chromium webruntime for webOS"
-AUTHOR = "Lokesh Kumar Goel <lokeshkumar.goel@lge.com>"
-SECTION = "webos/apps"
-LICENSE = "Apache-2.0 & BSD-3-Clause & LGPL-2.0 & LGPL-2.1"
-LIC_FILES_CHKSUM = "\
- file://src/LICENSE;md5=0fca02217a5d49a14dfe2d11837bb34d \
- file://src/third_party/blink/renderer/core/LICENSE-LGPL-2;md5=36357ffde2b64ae177b2494445b79d21 \
- file://src/third_party/blink/renderer/core/LICENSE-LGPL-2.1;md5=a778a33ef338abbaf8b8a7c36b6eec80 \
-"
-
-require gn-utils.inc
-
-inherit gettext qemu pythonnative
-
-DEPENDS = "virtual/gettext wayland wayland-native pixman freetype glib-2.0 fontconfig openssl pango cairo icu libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf nss nss-native nspr nspr-native bison-native qemu-native"
-
-PROVIDES = "${BROWSER_APPLICATION}"
-
-SRC_URI = "\
- git://github.com/igalia/${BPN};branch=WIP@39.agl.compositor;protocol=https;rev=${SRCREV_chromium68};name=chromium68 \
- git://github.com/webosose/v8;destsuffix=git/src/v8;rev=${SRCREV_v8};name=v8 \
- file://v8-qemu-wrapper.patch \
-"
-SRCREV_chromium68 = "61e96d1ee5dfc2461697457d287bf922d8a03d9a"
-SRCREV_v8 = "1e3af71f1ff3735e8a5b639c48dfca63a7b8a647"
-
-# we don't include SRCPV in PV, so we have to manually include SRCREVs in do_fetch vardeps
-do_fetch[vardeps] += "SRCREV_v8"
-SRCREV_FORMAT = "main_v8"
-
-S = "${WORKDIR}/git"
-
-SRC_DIR = "${S}/src"
-OUT_DIR = "${WORKDIR}/build"
-BUILD_TYPE = "Release"
-
-B = "${OUT_DIR}/${BUILD_TYPE}"
-
-WEBRUNTIME_BUILD_TARGET = "webos:weboswebruntime"
-BROWSER_APP_BUILD_TARGET = "chrome"
-BROWSER_APPLICATION = "chromium68-browser"
-BROWSER_APPLICATION_DIR = "/opt/chromium68"
-
-TARGET = "${WEBRUNTIME_BUILD_TARGET} ${BROWSER_APP_BUILD_TARGET}"
-
-# Skip do_install_append of webos_system_bus. It is not compatible with this component.
-WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus"
-
-PACKAGECONFIG ?= "jumbo use-upstream-wayland"
-
-# Options to enable debug-webcore build.
-# Add the following line to local.conf (or local.dev.inc) to enable them:
-# PACKAGECONFIG_append_pn-chromium68 = " debug-webcore"
-# Other debug options are controlled by sections later in this file
-PACKAGECONFIG[debug-webcore] = "remove_webcore_debug_symbols=false,remove_webcore_debug_symbols=true"
-
-# Set a default value for jumbo file merge of 8. This should be good for build
-# servers and workstations with a big number of cores. In case build is
-# happening in a machine with less cores but still enough RAM a good value could
-# be 50.
-JUMBO_FILE_MERGE_LIMIT="8"
-PACKAGECONFIG[jumbo] = "use_jumbo_build=true jumbo_file_merge_limit=${JUMBO_FILE_MERGE_LIMIT}, use_jumbo_build=false"
-
-PACKAGECONFIG[lttng] = "use_lttng=true,use_lttng=false,lttng-ust,lttng-tools lttng-modules babeltrace"
-
-# Chromium can use v4l2 device for hardware accelerated video decoding on such boards as Renesas R-car M3, for example.
-# In case of R-car m3, additional patches are required for gstreamer and v4l2apps.
-# See https://github.com/igel-oss/meta-browser-hwdecode/tree/igalia-chromium71.
-PACKAGECONFIG[use-linux-v4l2] = "use_v4l2_codec=true use_v4lplugin=true use_linux_v4l2_only=true"
-
-PACKAGECONFIG[use-upstream-wayland] = " \
- ozone_platform_wayland_external=false ozone_platform_wayland=true \
- use_system_minigbm=true, \
- ozone_platform_wayland_external=true ozone_platform_wayland=false \
-"
-
-GN_ARGS = "\
- enable_memorymanager_webapi=false\
- ffmpeg_branding=\"Chrome\"\
- host_os=\"linux\"\
- ozone_auto_platforms=false\
- proprietary_codecs=true\
- target_os=\"linux\"\
- treat_warnings_as_errors=false\
- is_agl=true\
- use_cbe=true\
- is_chrome_cbe=true\
- use_cups=false\
- use_custom_libcxx=false\
- use_kerberos=false\
- use_neva_media=false\
- use_ozone=true\
- use_xkbcommon=true\
- use_pmlog=false\
- use_system_debugger_abort=true\
- use_webos_gpu_info_collector=false\
- ${PACKAGECONFIG_CONFARGS}\
-"
-
-# From Chromium's BUILDCONFIG.gn:
-# Set to enable the official build level of optimization. This has nothing
-# to do with branding, but enables an additional level of optimization above
-# release (!is_debug). This might be better expressed as a tri-state
-# (debug, release, official) but for historical reasons there are two
-# separate flags.
-# See also: https://groups.google.com/a/chromium.org/d/msg/chromium-dev/hkcb6AOX5gE/PPT1ukWoBwAJ
-GN_ARGS += "is_debug=false is_official_build=true"
-
-# is_cfi default value is true for x86-64 builds with is_official_build=true.
-# As of M63, we explicitly need to set it to false, otherwise we fail the
-# following assertion in //build/config/sanitizers/sanitizers.gni:
-# assert(!is_cfi || is_clang,
-# "is_cfi requires setting is_clang = true in 'gn args'")
-GN_ARGS += "is_cfi=false"
-
-# By default, passing is_official_build=true to GN causes its symbol_level
-# variable to be set to "2". This means the compiler will be passed "-g2" and
-# we will end up with a very large chrome binary (around 5Gb as of M58)
-# regardless of whether DEBUG_BUILD has been set or not. In addition, binutils,
-# file and other utilities are unable to read a 32-bit binary this size, which
-# causes it not to be stripped.
-# The solution is two-fold:
-# 1. Make sure -g is not passed on 32-bit architectures via DEBUG_FLAGS. -g is
-# the same as -g2. -g1 generates an 800MB binary, which is a lot more
-# manageable.
-# 2. Explicitly pass symbol_level=0 to GN. This causes -g0 to be passed
-# instead, so that if DEBUG_BUILD is not set GN will not create a huge debug
-# binary anyway. Since our compiler flags are passed after GN's, -g0 does
-# not cause any issues if DEBUG_BUILD is set, as -g1 will be passed later.
-DEBUG_FLAGS_remove_arm = "-g"
-DEBUG_FLAGS_append_arm = "-g1"
-DEBUG_FLAGS_remove_x86 = "-g"
-DEBUG_FLAGS_append_x86 = "-g1"
-GN_ARGS += "symbol_level=0"
-
-# We do not want to use Chromium's own Debian-based sysroots, it is easier to
-# just let Chromium's build system assume we are not using a sysroot at all and
-# let Yocto handle everything.
-GN_ARGS += "use_sysroot=false"
-
-# Toolchains we will use for the build. We need to point to the toolchain file
-# we've created, set the right target architecture and make sure we are not
-# using Chromium's toolchain (bundled clang, bundled binutils etc).
-GN_ARGS += "\
- custom_toolchain=\"//build/toolchain/yocto:yocto_target\" \
- gold_path=\"\" \
- host_toolchain=\"//build/toolchain/yocto:yocto_native\" \
- is_clang=${@is_default_cc_clang(d)} \
- clang_base_path=\"${@clang_install_path(d)}\" \
- clang_use_chrome_plugins=false \
- linux_use_bundled_binutils=false \
- target_cpu=\"${@gn_target_arch_name(d)}\" \
- v8_snapshot_toolchain=\"//build/toolchain/yocto:yocto_target\" \
-"
-
-# ARM builds need special additional flags (see ${S}/build/config/arm.gni).
-# If we do not pass |arm_arch| and friends to GN, it will deduce a value that
-# will then conflict with TUNE_CCARGS and CC.
-# Note that as of M61 in some corner cases parts of the build system disable
-# the "compiler_arm_fpu" GN config, whereas -mfpu is always passed via ${CC}.
-# We might want to rework that if there are issues in the future.
-def get_compiler_flag(params, param_name, d):
- """Given a sequence of compiler arguments in |params|, returns the value of
- an option |param_name| or an empty string if the option is not present."""
- for param in params:
- if param.startswith(param_name):
- return param.split('=')[1]
- return ''
-
-ARM_FLOAT_ABI = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hard', 'softfp', d)}"
-ARM_FPU = "${@get_compiler_flag(d.getVar('TUNE_CCARGS').split(), '-mfpu', d)}"
-ARM_TUNE = "${@get_compiler_flag(d.getVar('TUNE_CCARGS').split(), '-mcpu', d)}"
-ARM_VERSION_aarch64 = "8"
-ARM_VERSION_armv7a = "7"
-ARM_VERSION_armv7ve = "7"
-ARM_VERSION_armv6 = "6"
-
-# GN computes and defaults to it automatically where needed
-# forcing it from cmdline breaks build on places where it ends up
-# overriding what GN wants
-TUNE_CCARGS_remove = "-mthumb"
-
-GN_ARGS_append_arm = " \
- arm_float_abi=\"${ARM_FLOAT_ABI}\" \
- arm_fpu=\"${ARM_FPU}\" \
- arm_tune=\"${ARM_TUNE}\" \
- arm_version=${ARM_VERSION} \
-"
-# tcmalloc's atomicops-internals-arm-v6plus.h uses the "dmb" instruction that
-# is not available on (some?) ARMv6 models, which causes the build to fail.
-GN_ARGS_append_armv6 += 'use_allocator="none"'
-# The WebRTC code fails to build on ARMv6 when NEON is enabled.
-# https://bugs.chromium.org/p/webrtc/issues/detail?id=6574
-GN_ARGS_append_armv6 += 'arm_use_neon=false'
-
-# Disable glibc shims on musl
-# tcmalloc does not play well with musl as of M62 (and possibly earlier).
-# https://github.com/gperftools/gperftools/issues/693
-GN_ARGS_append_libc-musl = ' use_allocator_shim=false'
-
-# V8's JIT infrastructure requires binaries such as mksnapshot and
-# mkpeephole to be run in the host during the build. However, these
-# binaries must have the same bit-width as the target (e.g. a x86_64
-# host targeting ARMv6 needs to produce a 32-bit binary). Instead of
-# depending on a third Yocto toolchain, we just build those binaries
-# for the target and run them on the host with QEMU.
-python do_create_v8_qemu_wrapper () {
- """Creates a small wrapper that invokes QEMU to run some target V8 binaries
- on the host."""
- qemu_libdirs = [d.expand('${STAGING_DIR_HOST}${libdir}'),
- d.expand('${STAGING_DIR_HOST}${base_libdir}')]
- qemu_cmd = qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST', True),
- qemu_libdirs)
- wrapper_path = d.expand('${B}/v8-qemu-wrapper.sh')
- with open(wrapper_path, 'w') as wrapper_file:
- wrapper_file.write("""#!/bin/sh
-
-# This file has been generated automatically.
-# It invokes QEMU to run binaries built for the target in the host during the
-# build process.
-
-%s "$@"
-""" % qemu_cmd)
- os.chmod(wrapper_path, 0o755)
-}
-do_create_v8_qemu_wrapper[dirs] = "${B}"
-addtask create_v8_qemu_wrapper after do_patch before do_configure
-
-python do_write_toolchain_file () {
- """Writes a BUILD.gn file for Yocto detailing its toolchains."""
- toolchain_dir = d.expand("${S}/src/build/toolchain/yocto")
- bb.utils.mkdirhier(toolchain_dir)
- toolchain_file = os.path.join(toolchain_dir, "BUILD.gn")
- write_toolchain_file(d, toolchain_file)
-}
-addtask write_toolchain_file after do_patch before do_configure
-
-# More options to speed up the build
-GN_ARGS += "\
- enable_nacl=false\
- disable_ftp_support=true\
- enable_print_preview=false\
- enable_remoting=false\
- use_glib=true\
- use_gnome_keyring=false\
- use_pulseaudio=false\
-"
-
-# Respect ld-is-gold in DISTRO_FEATURES when enabling gold
-# Similar patch applied in meta-browser
-# http://patchwork.openembedded.org/patch/77755/
-EXTRA_OEGN_GOLD = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'use_gold=true', 'use_gold=false', d)}"
-GN_ARGS += "${EXTRA_OEGN_GOLD}"
-
-# Doesn't build for armv[45]*
-COMPATIBLE_MACHINE = "(-)"
-COMPATIBLE_MACHINE_aarch64 = "(.*)"
-COMPATIBLE_MACHINE_armv6 = "(.*)"
-COMPATIBLE_MACHINE_armv7a = "(.*)"
-COMPATIBLE_MACHINE_armv7ve = "(.*)"
-COMPATIBLE_MACHINE_x86 = "(.*)"
-COMPATIBLE_MACHINE_x86-64 = "(.*)"
-
-#CHROMIUM_PLUGINS_PATH = "${libdir}"
-CBE_DATA_PATH = "${libdir}/cbe"
-CBE_DATA_LOCALES_PATH = "${CBE_DATA_PATH}/locales"
-
-# The text relocations are intentional -- see comments in [GF-52468]
-# TODO: check if we need INSANE_SKIP on ldflags
-INSANE_SKIP_${PN} = "textrel ldflags"
-
-
-do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+"
-do_compile() {
- if [ ! -f ${OUT_DIR}/${BUILD_TYPE}/build.ninja ]; then
- do_configure
- fi
-
- export PATH="${S}/depot_tools:$PATH"
- ${S}/depot_tools/ninja -v -C ${OUT_DIR}/${BUILD_TYPE} ${TARGET}
-}
-
-do_configure() {
- configure_env
-}
-
-configure_env() {
- export GYP_CHROMIUM_NO_ACTION=1
- export PATH="${S}/depot_tools:$PATH"
-
- GN_ARGS="${GN_ARGS}"
- echo GN_ARGS is ${GN_ARGS}
- echo BUILD_TARGETS are ${TARGET}
- cd ${SRC_DIR}
- gn gen ${OUT_DIR}/${BUILD_TYPE} --args="${GN_ARGS}"
-}
-
-WINDOW_SIZE ?= "1920,1080"
-
-configure_browser_settings() {
- USER_AGENT="Mozilla/5.0 (Linux; NetCast; U) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/${CHROMIUM_VERSION} Safari/537.31"
- echo "${USER_AGENT}" > ${D_DIR}/user_agent_conf
- #We can replace below WINDOW_SIZE values from build configuration if available
- #echo "${WINDOW_SIZE}" > ${D_DIR}/window_size_conf
-}
-
-install_chromium_browser() {
- D_DIR=${D}${BROWSER_APPLICATION_DIR}
- install -d ${D_DIR}
-
- # Install browser files
- if [ -e "${SRC_DIR}/webos/install" ]; then
- cd ${OUT_DIR}/${BUILD_TYPE}
- xargs --arg-file=${SRC_DIR}/webos/install/default_browser/binary.list cp -R --no-dereference --preserve=mode,links -v --target-directory=${D_DIR}
- cd ${SRC_DIR}
- xargs --arg-file=${SRC_DIR}/webos/install/default_browser/runtime.list cp -R --no-dereference --preserve=mode,links -v --target-directory=${D_DIR}
- fi
-
- # AGL does not have PMLOG
- sed -i.bak s/PmLogCtl.*// ${D_DIR}/run_webbrowser
-
- # To execute chromium in JAILER, Security Part needs permissions change
- # run_webbrowser: Script file for launching chromium
- chmod -v 755 ${D_DIR}/chrome
- chmod -v 755 ${D_DIR}/kill_webbrowser
- chmod -v 755 ${D_DIR}/run_webbrowser
-
- configure_browser_settings
-}
-
-install_webruntime() {
- install -d ${D}${libdir}
- install -d ${D}${includedir}/${BPN}
- install -d ${D}${CBE_DATA_PATH}
- install -d ${D}${CBE_DATA_LOCALES_PATH}
-
- # Install webos webview files
- if [ -e "${SRC_DIR}/webos/install" ]; then
- cd ${SRC_DIR}
- xargs --arg-file=${SRC_DIR}/webos/install/weboswebruntime/staging_inc.list cp --parents --target-directory=${D}${includedir}/${BPN}
-
- cd ${OUT_DIR}/${BUILD_TYPE}
-
- cp libcbe.so ${D}${libdir}/
- if [ "${WEBOS_LTTNG_ENABLED}" = "1" ]; then
- # use bindir if building non-cbe
- cp libchromium_lttng_provider.so ${D}${libdir}/
- fi
- xargs --arg-file=${SRC_DIR}/webos/install/weboswebruntime/binary.list cp --parents --target-directory=${D}${CBE_DATA_PATH}
- cat ${SRC_DIR}/webos/install/weboswebruntime/data_locales.list | xargs -I{} install -m 755 -p {} ${D}${CBE_DATA_LOCALES_PATH}
- fi
-
- # move this to separate mksnapshot-cross recipe once we figure out how to build just cross mksnapshot from chromium repository
- install -d ${D}${bindir_cross}
- gzip -c ${OUT_DIR}/${BUILD_TYPE}/${MKSNAPSHOT_PATH}mksnapshot > ${D}${bindir_cross}/${HOST_SYS}-mksnapshot.gz
-}
-
-do_install() {
- install_webruntime
- install_chromium_browser
-}
-
-WEBOS_SYSTEM_BUS_DIRS_LEGACY_BROWSER_APPLICATION = " \
- ${webos_sysbus_prvservicesdir}/${BROWSER_APPLICATION}.service \
- ${webos_sysbus_pubservicesdir}/${BROWSER_APPLICATION}.service \
- ${webos_sysbus_prvrolesdir}/${BROWSER_APPLICATION}.json \
- ${webos_sysbus_pubrolesdir}/${BROWSER_APPLICATION}.json \
-"
-
-SYSROOT_DIRS_append = " ${bindir_cross}"
-
-PACKAGES_prepend = " \
- ${PN}-cross-mksnapshot \
- ${BROWSER_APPLICATION} \
-"
-
-FILES_${BROWSER_APPLICATION} += " \
- ${BROWSER_APPLICATION_DIR} \
- ${WEBOS_SYSTEM_BUS_DIRS_LEGACY_BROWSER_APPLICATION} \
-"
-
-RDEPENDS_${BROWSER_APPLICATION} += "${PN}"
-
-VIRTUAL-RUNTIME_gpu-libs ?= ""
-RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_gpu-libs}"
-
-# The text relocations are intentional -- see comments in [GF-52468]
-# TODO: check if we need INSANE_SKIP on ldflags
-INSANE_SKIP_${BROWSER_APPLICATION} += "libdir ldflags textrel"
-
-FILES_${PN} = " \
- ${libdir}/*.so \
- ${CBE_DATA_PATH}/* \
- ${libdir}/${BPN}/*.so \
- ${WEBOS_SYSTEM_BUS_DIRS} \
-"
-
-FILES_${PN}-dev = " \
- ${includedir} \
-"
-
-FILES_${PN}-cross-mksnapshot = "${bindir_cross}/${HOST_SYS}-mksnapshot.gz"
diff --git a/meta-agl-profile-graphical-html5/recipes-wam/chromium/gn-utils.inc b/meta-agl-profile-graphical-html5/recipes-wam/chromium/gn-utils.inc
deleted file mode 100644
index 0fd55a638..000000000
--- a/meta-agl-profile-graphical-html5/recipes-wam/chromium/gn-utils.inc
+++ /dev/null
@@ -1,157 +0,0 @@
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-# GN host architecture helpers.
-#
-# BUILD_ARCH's value corresponds to what uname returns as the machine name.
-# The mapping in gn_host_arch_name() tries to match several possible values
-# returned by the Linux kernel in uname(2) into the corresponding values GN
-# understands.
-def gn_host_arch_name(d):
- """Returns a GN architecture name corresponding to the build host's machine
- architecture."""
- import re
- arch_translations = {
- r'aarch64.*': 'arm64',
- r'arm.*': 'arm',
- r'i[3456]86$': 'x86',
- r'x86_64$': 'x64',
- }
- build_arch = d.getVar("BUILD_ARCH")
- for arch_regexp, gn_arch_name in arch_translations.items():
- if re.match(arch_regexp, build_arch):
- return gn_arch_name
- bb.fatal('Unsuported BUILD_ARCH value: "%s"' % build_arch)
-
-# GN target architecture helpers.
-#
-# Determining the target architecture is more difficult, as there are many
-# different values we can use on the Yocto side (e.g. TUNE_ARCH, TARGET_ARCH,
-# MACHINEOVERRIDES etc). What we do is define the mapping with regular,
-# non-Python variables with overrides that are generic enough (i.e. "x86"
-# instead of "i586") and then use gn_target_arch_name() to return the right
-# value with some validation.
-GN_TARGET_ARCH_NAME_aarch64 = "arm64"
-GN_TARGET_ARCH_NAME_arm = "arm"
-GN_TARGET_ARCH_NAME_x86 = "x86"
-GN_TARGET_ARCH_NAME_x86-64 = "x64"
-
-BUILD_CC_toolchain-clang = "clang"
-BUILD_CXX_toolchain-clang = "clang++"
-BUILD_LD_toolchain-clang = "clang"
-
-# knob for clang, when using meta-clang to provide clang and case where
-# clang happens to be default compiler for OE we should let it use clang
-def is_default_cc_clang(d):
- """Return true if clang is default cross compiler."""
- toolchain = d.getVar("TOOLCHAIN")
- overrides = d.getVar("OVERRIDES")
- if toolchain == "clang" and "toolchain-clang" in overrides.split(":"):
- return "true"
- return "false"
-
-def clang_install_path(d):
- """Return clang compiler install path."""
- return d.getVar("STAGING_BINDIR_NATIVE")
-
-def gn_target_arch_name(d):
- """Returns a GN architecture name corresponding to the target machine's
- architecture."""
- name = d.getVar("GN_TARGET_ARCH_NAME")
- if name is None:
- bb.fatal('Unsupported target architecture. A valid override for the '
- 'GN_TARGET_ARCH_NAME variable could not be found.')
- return name
-
-def write_toolchain_file(d, file_path):
- """Creates a complete GN toolchain file in |file_path|."""
- import string
- gcc_toolchain_tmpl = string.Template(
- 'gcc_toolchain("${toolchain_name}") {\n'
- ' cc = "${cc}"\n'
- ' cxx = "${cxx}"\n'
- ' ar = "${ar}"\n'
- ' ld = cxx # GN expects a compiler, not a linker.\n'
- ' nm = "${nm}"\n'
- ' readelf = "${readelf}"\n'
- ' extra_cflags = "${extra_cflags}"\n'
- ' extra_cppflags = "${extra_cppflags}"\n'
- ' extra_cxxflags = "${extra_cxxflags}"\n'
- ' extra_ldflags = "${extra_ldflags}"\n'
- ' toolchain_args = {\n'
- ' current_cpu = "${current_cpu}"\n'
- ' current_os = "linux"\n'
- ' is_clang = false\n'
- ' }\n'
- '}\n'
- )
- clang_toolchain_tmpl = string.Template(
- 'clang_toolchain("clang_${toolchain_name}") {\n'
- ' extra_cflags = "${extra_cflags}"\n'
- ' extra_cppflags = "${extra_cppflags}"\n'
- ' extra_cxxflags = "${extra_cxxflags}"\n'
- ' extra_ldflags = "${extra_ldflags}"\n'
- ' toolchain_args = {\n'
- ' current_cpu = "${current_cpu}"\n'
- ' current_os = "linux"\n'
- ' is_clang = true\n'
- ' use_gold = true\n'
- ' }\n'
- '}\n'
- )
-
- native_toolchain = {
- 'toolchain_name': 'yocto_native',
- 'current_cpu': gn_host_arch_name(d),
- 'cc': d.expand('${BUILD_CC}'),
- 'cxx': d.expand('${BUILD_CXX}'),
- 'ar': d.expand('${BUILD_AR}'),
- 'nm': d.expand('${BUILD_NM}'),
- 'readelf': d.expand('${BUILD_PREFIX}readelf'),
- 'extra_cflags': d.expand('${BUILD_CFLAGS}'),
- 'extra_cppflags': d.expand('${BUILD_CPPFLAGS}'),
- 'extra_cxxflags': d.expand('${BUILD_CXXFLAGS}'),
- 'extra_ldflags': d.expand('${BUILD_LDFLAGS}'),
- }
- target_toolchain = {
- 'toolchain_name': 'yocto_target',
- 'current_cpu': gn_target_arch_name(d),
- 'cc': d.expand('${CC}'),
- 'cxx': d.expand('${CXX}'),
- 'ar': d.expand('${AR}'),
- 'nm': d.expand('${NM}'),
- 'readelf': d.expand('${TARGET_PREFIX}readelf'),
- 'extra_cflags': d.expand('${TARGET_CFLAGS}'),
- 'extra_cppflags': d.expand('${TARGET_CPPFLAGS}'),
- 'extra_cxxflags': d.expand('${TARGET_CXXFLAGS}'),
- 'extra_ldflags': d.expand('${TARGET_LDFLAGS}'),
- 'strip': '',
- }
-
- with open(file_path, 'w') as toolchain_file:
- toolchain_file.write(
- '# This file has been generated automatically.\n'
- '\n'
- 'import("//build/config/sysroot.gni")\n'
- 'import("//build/toolchain/gcc_toolchain.gni")\n'
- '\n'
- )
- toolchain_file.write(gcc_toolchain_tmpl.substitute(native_toolchain))
- toolchain_file.write(gcc_toolchain_tmpl.substitute(target_toolchain))
- toolchain_file.write(clang_toolchain_tmpl.substitute(native_toolchain))
- toolchain_file.write(clang_toolchain_tmpl.substitute(target_toolchain))
diff --git a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr.env b/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr.env
deleted file mode 100644
index c8ddc5173..000000000
--- a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr.env
+++ /dev/null
@@ -1,202 +0,0 @@
-##### AGL: not set in WebAppMgr@.service
-#XDG_SESSION_ID="c2"
-
-##### AGL: set by WebAppMgr@.service (depends on user)
-#XDG_RUNTIME_DIR="/run/user/%i"
-
-# Set wam executable file path
-HOOK_SEGV=NO
-WAM_EXE_PATH="/usr/bin/WebAppMgr"
-
-# Set wam name for user-agent
-WAM_NAME="WebAppManager"
-
-# Only allow UTF8 encoding for luna-service messages.
-LS_ENABLE_UTF8=1
-
-# Set effective userid and groupid
-#WAM_UID="wam"
-#WAM_GID="compositor"
-
-# Set location of error page (will follow localization rules based on this path)
-#WAM_ERROR_PAGE="file:///usr/share/localization/wam/loaderror.html"
-
-# suspending javascript execution delay for page visibility
-WAM_SUSPEND_DELAY_IN_MS=250
-
-#if [ -e "etc/wam/make_shm.sh" ] ; then
-# /etc/wam/make_shm.sh
-#fi
-
-# Set user data directory for WebAppMgr
-##### AGL: set by WebAppMgr@.service (depends on user)
-#WAM_DATA_PATH="/home/%i/wamdata"
-
-# ensure that wam data directories exist
-#mkdir -p ${WAM_DATA_PATH}
-
-# set directories permission
-#chown ${WAM_UID}:${WAM_GID} ${WAM_DATA_PATH}
-
-# setup 50 Mb maximum for ApplicationCache
-WAM_APPCACHE_MAXSIZE=52428800
-
-# setup 10 Mb maximum for ApplicationCache per domain
-WAM_APPCACHE_DOMAINLIMIT=10485760
-
-# setup 50 Mb maximum for DiskCache
-WAM_DISKCACHE_MAXSIZE=52428800
-
-# setup 256 Kb maximum for resource buffer allocation
-WAM_RESOURCE_BUFFER_MAX_ALLOC_SIZE=262144
-
-# setup 1 Mb for resource buffer
-WAM_RESOURCE_BUFFER_SIZE=1048576
-
-# setup 200 seconds for watchdog timeout of render process
-WATCHDOG_RENDER_TIMEOUT=200
-
-# setup nubmer of raster threads to 1
-BLINK_NUM_RASTER_THREADS=2
-
-# use default tile width if not sed by recipe
-#if [ "$BLINK_NUM_RASTER_THREADS" = "WEBOS${BLINK_NUM_RASTER_THREADS#WEBOS}" ]; then
-BLINK_NUM_RASTER_THREADS=1
-#fi
-
-# setup 6 Mb maximum for the program GPU cache
-GPU_PROGRAM_CACHE_SIZE=6144
-
-# disable using enyo system app specfic optimization
-# currently used optimizations : inline caching off
-#USE_SYSTEM_APP_OPTIMIZATION="0"
-
-# Set location of NaCl modules
-#CHROMIUM_PATH="/usr/palm/applications/com.lge.app.chromium"
-#NACL_PLUGIN=${CHROMIUM_PATH}"/libppGoogleNaClPluginChrome.so"
-#NACL_IRT_LIBRARY=${CHROMIUM_PATH}"/nacl_irt_arm.nexe"
-#NACL_HELPER=${CHROMIUM_PATH}"/nacl_helper"
-#NACL_HELPER_BOOTSTRAP=${CHROMIUM_PATH}"/nacl_helper_bootstrap"
-
-# Set location of NPAPI plugins for all Apps including default Apps
-# This is for the flash plugin of Signage, webOS TV doesn't use it.
-#PRIVILEGED_PLUGIN_PATH=""
-
-# Set location of NPAPI plugins for NetCast Apps
-# NetCast Apps should access only the plugins in this path
-#NETCAST_PLUGIN_PATH="/usr/lib/BrowserPlugins"
-
-# Set location of NPAPI plugins for HbbTV app.
-#HBBTV_PLUGIN_PATH="/usr/lib/HbbtvPlugins"
-
-# Set InetTV player stored path
-#INETTV_HTML_PLAYER_PATH="/usr/share/inettv/inettv_player/index.html"
-
-# Set location of extra libraries
-#CDM_LIB_PATH="/usr/lib"
-
-# Set location of all NPAPI plugins
-NPAPI_PLUGIN_PATH=${HBBTV_PLUGIN_PATH}":"${NETCAST_PLUGIN_PATH}":"${PRIVILEGED_PLUGIN_PATH}
-
-#if [ -e "etc/wam/make_shm.sh" ] ; then
-# /etc/wam/make_shm.sh
-#fi
-
-# setup 8 Mb minimum codecache capacity
-JSC_minGlobalCodeCacheCapacity=8388608
-
-# Enable more explicit logging of timing with regards to rendering
-# export WAM2_ENABLE_DEBUG_RENDER_TIMING=1
-
-# enable Web Inspector and Tellurium if in developer mode
-TELLURIUM_NUB_PATH=/usr/palm/tellurium/telluriumnub.js
-ENABLE_INSPECTOR=1
-
-# Enable cursor by default
-ENABLE_CURSOR_BY_DEFAULT=1
-
-# Enable launch optimization
-ENABLE_LAUNCH_OPTIMIZATION=1
-
-# Set the duration(seconds) passed from last network activity (e.g. FMP Detector)
-# If set to a positive value, adjust a custom timeout for a network stable timer in FMPDetector
-NETWORK_STABLE_TIMEOUT=3
-
-# please keep it in alphabetical order
-#WAM_EXTRA_FLAGS=""
-#WAM_JS_FLAGS=""
-#WAM_COMMON_SWITCHES=" \
-# --application-cache-domain-limit=$WAM_APPCACHE_DOMAINLIMIT \
-# --application-cache-size=$WAM_APPCACHE_MAXSIZE \
-# --browser-subprocess-path=$WAM_EXE_PATH \
-# --disable-direct-npapi-requests \
-# --disable-extensions \
-# --disable-low-res-tiling \
-# --disable-new-video-renderer \
-# --disk-cache-size=$WAM_DISKCACHE_MAXSIZE \
-# --enable-aggressive-release-policy \
-# --enable-accelerated-plugin-rendering \
-# --accelerated-plugin-rendering-blacklist=device;drmAgent;sound;service \
-# --enable-gpu-rasterization \
-# --disable-gpu-rasterization-for-first-frame \
-# --enable-key-event-throttling \
-# --enable-threaded-compositing \
-# --enable-watchdog \
-# --hide-selection-handles \
-# --ignore-gpu-blacklist \
-# --ignore-netif=p2p \
-# --in-process-gpu \
-# --max-unused-resource-memory-usage-percentage=0 \
-# --network-stable-timeout=$NETWORK_STABLE_TIMEOUT \
-# --noerrdialogs \
-# --num-raster-threads=$BLINK_NUM_RASTER_THREADS \
-# --ozone-platform=wayland \
-# --remote-debugging-port=9998 \
-# --resource-buffer-max-allocation-size=$WAM_RESOURCE_BUFFER_MAX_ALLOC_SIZE \
-# --resource-buffer-size=$WAM_RESOURCE_BUFFER_SIZE \
-# --touch-events=disabled \
-# --ui-disable-opaque-shader-program \
-# --user-agent-suffix=SmartTV \
-# --user-data-dir=$WAM_DATA_PATH \
-# --enable-devtools-experiments \
-# --webos-wam \ "
-
-#WAM_LITE_SWITCHES=" --in-process-zygote "
-
-#export WAM_WEBOS_LITE=NO
-#if [ "${WAM_WEBOS_LITE}" = "YES" ] ; then
-# export WAM_SWITCHES=${WAM_COMMON_SWITCHES}${WAM_LITE_SWITCHES}
-# export SKIA_FONT_CACHE_SIZE=1
-# export SKIA_IMAGE_CACHE_SIZE=40
-# export SKIA_BACKGROUND_FONT_CACHE_SIZE=0
-#else
-# export WAM_SWITCHES=${WAM_COMMON_SWITCHES}
-# export SKIA_FONT_CACHE_SIZE=8
-# export SKIA_IMAGE_CACHE_SIZE=80
-# export SKIA_BACKGROUND_FONT_CACHE_SIZE=512
-#fi
-
-#export WAM_EXTRA_SKIA_CACHE_SWITCHES=" \
-# --skia-font-cache-size-mb=$SKIA_FONT_CACHE_SIZE \
-# --skia-image-cache-size-mb=$SKIA_IMAGE_CACHE_SIZE \
-# --skia-background-font-cache-size-kb=$SKIA_BACKGROUND_FONT_CACHE_SIZE \
-# "
-
-#export WAM_EXTRA_GPU_TUNING_SWITCHES=" \
-# --gpu-program-cache-size-kb=$GPU_PROGRAM_CACHE_SIZE \
-# "
-#export WAM_WATCHDOG_RENDER_TIMEOUT_SWITCHES=" \
-# --watchdog-render-timeout=$WATCHDOG_RENDER_TIMEOUT \
-# "
-
-#WEBOS_LOAD_ACCESSIBILITY_PLUGIN=1
-
-#WAM_V8_CODE_CACHE_SWITCHES=" --enable-local-resource-code-cache --disallow-code-cache-from-file-uris-with-query-string "
-
-# Load any special configuration from plugins
-#if [ -e "/etc/wam/plugins/conf.sh" ] ; then
-# . /etc/wam/plugins/conf.sh || true
-#fi
-
-#exec $WAM_EXE_PATH $WAM_SWITCHES $WAM_EXTRA_SKIA_CACHE_SWITCHES $WAM_EXTRA_GPU_TUNING_SWITCHES $WAM_WATCHDOG_RENDER_TIMEOUT_SWITCHES $WAM_EXTRA_FLAGS $WAM_V8_CODE_CACHE_SWITCHES --js-flags="$WAM_JS_FLAGS"
-
diff --git a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr@.service b/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr@.service
deleted file mode 100644
index a855bf9f5..000000000
--- a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/WebAppMgr@.service
+++ /dev/null
@@ -1,37 +0,0 @@
-# @@@LICENSE
-#
-# Copyright (c) 2017-2018 LG Electronics, Inc.
-#
-# Confidential computer software. Valid license from LG required for
-# possession, use or copying. Consistent with FAR 12.211 and 12.212,
-# Commercial Computer Software, Computer Software Documentation, and
-# Technical Data for Commercial Items are licensed to the U.S. Government
-# under vendor's standard commercial license.
-#
-# LICENSE@@@
-
-[Unit]
-Description="WebAppMgr is responsible for running web apps and manage their lifecycle"
-After=afm-service-homescreen-service--0.1--main@%i.service weston@display.service
-Wants=afm-service-homescreen-service--0.1--main@%i.service
-BindsTo=weston@display.service
-
-[Service]
-Type=simple
-User=%i
-Slice=user-%i.slice
-SmackProcessLabel=System
-SupplementaryGroups=audio display
-UMask=0077
-CapabilityBoundingSet=
-OOMScoreAdjust=-1000
-EnvironmentFile=-/etc/default/WebAppMgr.env
-Environment=XDG_RUNTIME_DIR=/run/user/%i
-Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus
-Environment=WAM_DATA_PATH="/home/%i/wamdata"
-ExecStart=/usr/bin/WebAppMgr --no-sandbox --in-process-gpu --remote-debugging-port=9998 --user-data-dir="/home/%i/wamdata" --webos-wam
-Restart=on-failure
-RestartSec=50
-
-[Install]
-WantedBy=default.target
diff --git a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/trunc-webapp-roles.patch b/meta-agl-profile-graphical-html5/recipes-wam/wam/files/trunc-webapp-roles.patch
deleted file mode 100644
index 829abe07f..000000000
--- a/meta-agl-profile-graphical-html5/recipes-wam/wam/files/trunc-webapp-roles.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From f31e93261f34abaa3dcdc4959963f5b5a8983002 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= <jsmoeller@linuxfoundation.org>
-Date: Thu, 25 Jun 2020 19:47:24 +0200
-Subject: [PATCH] Set webapp roles that are max 12 characters long.
-
-From: =?UTF-8?q?Jacobo=20Aragunde=20P=C3=A9rez?= <jaragunde@igalia.com>
-
-This is a workaround for SPEC-3127. To prevent repeated roles as much
-as possible, I'm using the appid as a basis instead of "Webapp-" +
-host + port, which has many chances to be redundant in the first 12
-chars.
-
-Bug-AGL: SPEC-3127
-
----
- src/agl/WebRuntimeAGL.cpp | 10 +++-------
- 1 file changed, 3 insertions(+), 7 deletions(-)
-
-diff --git a/src/agl/WebRuntimeAGL.cpp b/src/agl/WebRuntimeAGL.cpp
-index aed928b..efd2ee4 100644
---- a/src/agl/WebRuntimeAGL.cpp
-+++ b/src/agl/WebRuntimeAGL.cpp
-@@ -274,7 +274,6 @@ int WebAppLauncherRuntime::run(int argc, const char** argv) {
-
- m_id = getAppId(args);
- m_url = getAppUrl(args);
-- m_role = "WebApp";
-
- setup_signals();
-
-@@ -326,15 +325,9 @@ bool WebAppLauncherRuntime::init() {
- if (n != std::string::npos) {
- std::string sport = authority.substr(n+1);
- m_host = authority.substr(0, n);
-- m_role.push_back('-');
-- m_role.append(m_host);
-- m_role.push_back('-');
-- m_role.append(sport);
- m_port = stringTo<int>(sport);
- } else {
- m_host = authority;
-- m_role.push_back('-');
-- m_role.append(m_host);
- }
- }
-
-@@ -375,6 +368,9 @@ bool WebAppLauncherRuntime::init() {
- m_role = "homescreen";
- else if (m_id.rfind("webapps-homescreen", 0) == 0)
- m_role = "homescreen";
-+ else {
-+ m_role = m_id.substr(0,12);
-+ }
-
- LOG_DEBUG("id=[%s], name=[%s], role=[%s], url=[%s], host=[%s], port=%d, token=[%s], width=[%s], height[%s], surface_type[%d], panel_type[%d]",
- m_id.c_str(), m_name.c_str(), m_role.c_str(), m_url.c_str(),
diff --git a/meta-agl-profile-graphical-html5/recipes-wam/wam/wam_git.bb b/meta-agl-profile-graphical-html5/recipes-wam/wam/wam_git.bb
deleted file mode 100644
index d50a14fa0..000000000
--- a/meta-agl-profile-graphical-html5/recipes-wam/wam/wam_git.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-SUMMARY = "WAM"
-AUTHOR = "Jani Hautakangas <jani.hautakangas@lge.com>"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-inherit cmake
-
-DEPENDS = "glib-2.0 jsoncpp boost chromium68 wayland-ivi-extension libhomescreen"
-
-EXTRA_OECMAKE = "\
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=${prefix} \
- -DPLATFORM_NAME=${@'${DISTRO}'.upper().replace('-', '_')} \
- -DCHROMIUM_SRC_DIR=${STAGING_INCDIR}/chromium68"
-
-PR="r0"
-
-PROVIDES += "virtual/webruntime"
-RPROVIDES_${PN} += "virtual/webruntime"
-
-SRC_URI = "\
- git://github.com/igalia/${BPN}.git;branch=WIP@6.agl.compositor;protocol=https \
- file://WebAppMgr@.service \
- file://WebAppMgr.env \
- file://trunc-webapp-roles.patch \
-"
-S = "${WORKDIR}/git"
-SRCREV = "bd650046b688eb1593ae68c16ba3912837507d08"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/wam
- install -v -m 644 ${S}/files/launch/security_policy.conf ${D}${sysconfdir}/wam/security_policy.conf
- install -d ${D}${systemd_system_unitdir}
- install -v -m 644 ${WORKDIR}/WebAppMgr@.service ${D}${systemd_system_unitdir}/WebAppMgr@.service
- install -d ${D}${sysconfdir}/default/
- install -v -m 644 ${WORKDIR}/WebAppMgr.env ${D}${sysconfdir}/default/WebAppMgr.env
- ln -snf WebAppMgr ${D}${bindir}/web-runtime
- install -d ${D}${systemd_system_unitdir}/afm-user-session@.target.wants
- ln -sf ../WebAppMgr@.service ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/
-}
-
-FILES_${PN} += "${sysconfdir}/init ${sysconfdir}/wam ${libdir}/webappmanager/plugins/*.so ${systemd_system_unitdir}"
-
-CXXFLAGS_append_agl-devel = " -DAGL_DEVEL"
-
-do_install_append_agl-devel() {
- # Enable remote inspector and dev mode
- install -d ${D}${localstatedir}/agl-devel/preferences
- touch ${D}${localstatedir}/agl-devel/preferences/debug_system_apps
- touch ${D}${localstatedir}/agl-devel/preferences/devmode_enabled
-}
diff --git a/meta-agl-profile-graphical-qt5/LICENSE b/meta-agl-profile-graphical-qt5/LICENSE
deleted file mode 100644
index e8758f89c..000000000
--- a/meta-agl-profile-graphical-qt5/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Different components of the AGL layers are under different licenses (a mix
-of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further
-details of the individual licenses.
-
-All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar)
-is MIT licensed unless otherwise stated.
-Source code included in tree for individual recipes (e.g. patches) are under
-the LICENSE stated in the associated recipe (.bb file) unless otherwise stated.
-
-License information for any other files (scripts) is either explicitly stated
-or defaults to GPL version 2 only.
-
-Individual files can contain the following style tags instead of the full
-license text to identify their license:
-
- SPDX-License-Identifier: GPL-2.0-only
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-graphical-qt5/LICENSE.GPL-2.0-only b/meta-agl-profile-graphical-qt5/LICENSE.GPL-2.0-only
deleted file mode 100644
index 5db3c0a21..000000000
--- a/meta-agl-profile-graphical-qt5/LICENSE.GPL-2.0-only
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: GPL-2.0-only
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-graphical-qt5/LICENSE.MIT b/meta-agl-profile-graphical-qt5/LICENSE.MIT
deleted file mode 100644
index a6919eb7e..000000000
--- a/meta-agl-profile-graphical-qt5/LICENSE.MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-graphical-qt5/conf/layer.conf b/meta-agl-profile-graphical-qt5/conf/layer.conf
deleted file mode 100644
index ef39630d8..000000000
--- a/meta-agl-profile-graphical-qt5/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "aglprofilegraphicalqt5"
-BBFILE_PATTERN_aglprofilegraphicalqt5 = "^${LAYERDIR}/"
-BBFILE_PRIORITY_aglprofilegraphicalqt5 = "70"
-
-LAYERSERIES_COMPAT_aglprofilegraphicalqt5 = "dunfell"
diff --git a/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-native.bb b/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-native.bb
deleted file mode 100644
index a31c666ca..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-native.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "The software for application framework of AGL IVI profile"
-DESCRIPTION = "A set of packages belong to AGL application framework which required by \
-Native App Fw Subsystem"
-
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-appfw-native \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-appfw-native-qt5 \
- "
diff --git a/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-qt5.bb b/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-qt5.bb
deleted file mode 100644
index 2f0f01fec..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-appfw/packagegroups/packagegroup-agl-appfw-qt5.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "The software for application framework of AGL IVI profile"
-DESCRIPTION = "A set of packages belong to AGL application framework"
-
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-appfw-qt5 \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-appfw-native \
-" \ No newline at end of file
diff --git a/meta-agl-profile-graphical-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb b/meta-agl-profile-graphical-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb
deleted file mode 100644
index 802167b2d..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-devtools/libafb-helpers-qt/libafb-helpers-qt_git.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require recipes-devtools/libafb-helpers/libafb-helpers_git.inc
-
-DEPENDS_append = " qtwebsockets"
-RDEPENDS_${PN}_append = " af-binder"
-
-inherit cmake_qt5
-
-EXTRA_OECMAKE_append = " -DAFB_HELPERS_QT=ON -DAFB_HELPERS=OFF"
-
-ALLOW_EMPTY_${PN} = "1"
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb b/meta-agl-profile-graphical-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb
deleted file mode 100644
index dd270d048..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-devtools/libqtappfw/libqtappfw_git.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "AGL Qt AppFW Library"
-DESCRIPTION = "libqtappfw"
-HOMEPAGE = "http://docs.automotivelinux.org"
-LICENSE = "Apache-2.0"
-SECTION = "libs"
-
-BBCLASSEXTEND = "nativesdk"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-DEPENDS += "qtbase qtdeclarative qtwebsockets"
-
-inherit cmake_qt5
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libqtappfw;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "fe20f1b029f67dee1f790ade7a9114086f2abd38"
-S = "${WORKDIR}/git/"
-
-# PV needs to be modified with SRCPV to work AUTOREV correctly
-PV = "0.0+git${SRCPV}"
diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.bb b/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.bb
deleted file mode 100755
index 5147ea44a..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Cross SDK of Full AGL Distribution for IVI profile"
-
-DESCRIPTION = "SDK image for full AGL Distribution for IVI profile. \
-It includes the full meta-toolchain, plus developement headers and libraries \
-to form a standalone cross SDK."
-
-require agl-image-graphical-qt5.bb
-
-LICENSE = "MIT"
-
-require agl-image-graphical-qt5-crosssdk.inc
-
-inherit populate_sdk populate_sdk_qt5
-
-# Task do_populate_sdk and do_rootfs can't be exec simultaneously.
-# Both exec "createrepo" on the same directory, and so one of them
-# can failed (randomly).
-addtask do_populate_sdk after do_rootfs
diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.inc b/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.inc
deleted file mode 100644
index f43bb07d7..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5-crosssdk.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-require recipes-platform/images/agl-image-minimal-crosssdk.inc
-
-TOOLCHAIN_TARGET_TASK += "libafb-helpers-qt-staticdev"
-
-# Add wayland-scanner to SDK (SPEC-945)
-# Use TOOLCHAIN_HOST_TASK instead of adding to the packagegroup
-# wayland-scanner is in nativesdk-wayland-dev !
-# option: add also nativesdk-qtwayland-tools
-TOOLCHAIN_HOST_TASK_append = " nativesdk-wayland nativesdk-wayland-dev"
-
-TOOLCHAIN_HOST_TASK_append = " nativesdk-perl-modules "
-
-# Add qtwaylandscanner to the SDK
-TOOLCHAIN_HOST_TASK_append = " nativesdk-qtwayland-tools "
diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.bb b/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.bb
deleted file mode 100644
index bcfd724fa..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-SUMMARY = "A very basic Wayland image with a terminal"
-
-require agl-image-graphical-qt5.inc
-
-LICENSE = "MIT"
diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.inc b/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.inc
deleted file mode 100644
index 114d06a07..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-platform/images/agl-image-graphical-qt5.inc
+++ /dev/null
@@ -1 +0,0 @@
-require recipes-platform/images/agl-image-weston.inc
diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-native-qt5.bb b/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-native-qt5.bb
deleted file mode 100644
index a05d69f53..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-appfw-native-qt5.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Qt5 for native GUI framework of AGL IVI profile"
-DESCRIPTION = "A set of Qt5 packages which required by Native App Fw Subsystem"
-
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-appfw-native-qt5 \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- qtbase \
- qtbase-dev \
- qtbase-plugins \
- qtbase-staticdev \
- qtbase-tools \
- qtdeclarative \
- qtdeclarative-qmlplugins \
- qtdeclarative-tools \
- qtcharts \
- qtwayland \
- qtwayland-plugins \
- qtwayland-tools \
- qtgraphicaleffects-qmlplugins \
- qtvirtualkeyboard \
- "
diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-demo-qt-examples.bb b/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-demo-qt-examples.bb
deleted file mode 100644
index adebabe76..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-demo-qt-examples.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "The examples to test Qt5 on AGL Demo Platform"
-DESCRIPTION = "A set of packages which contains Qt5 examples"
-
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-demo-qt-examples \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- qt3d-examples \
- qtbase-examples \
- qtconnectivity-examples \
- qtdeclarative-examples \
- qtlocation-examples \
- qtmultimedia-examples \
- qtsensors-examples \
- qtsystems-examples \
- qttools-examples \
- qtwayland-examples \
- qtxmlpatterns-examples \
- "
diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-qt5.bb b/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-qt5.bb
deleted file mode 100644
index 74b35f70a..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-agl-profile-graphical-qt5.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "The middlewares for AGL IVI profile"
-DESCRIPTION = "The set of packages required for AGL Distribution"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-profile-graphical-qt5 \
- profile-graphical-qt5 \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-profile-graphical \
- packagegroup-agl-appfw-native-qt5 \
-"
-
-RDEPENDS_${PN} += "\
- agl-login-manager \
- "
-
-RDEPENDS_profile-graphical-qt5 = "${PN}"
diff --git a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-qt5-toolchain-target.bbappend b/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-qt5-toolchain-target.bbappend
deleted file mode 100644
index 08afa6c7f..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-platform/packagegroups/packagegroup-qt5-toolchain-target.bbappend
+++ /dev/null
@@ -1,18 +0,0 @@
-# add missing dependencies for SDK
-
-RDEPENDS_${PN} += " \
- qttools-plugins \
- qtquickcontrols-dev \
- qtquickcontrols-qmlplugins \
- qtquickcontrols2-dev \
- qtquickcontrols2-mkspecs \
- qtquickcontrols2-qmlplugins \
-"
-
-# remove dependency on qtwebkit (still added to SDK by packagegroup-qt5-toolchain-target)
-# see SPEC-1159
-RDEPENDS_${PN}_remove = " \
- qtwebkit-dev \
- qtwebkit-mkspecs \
- qtwebkit-qmlplugins \
-"
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qlibhomescreen/qlibhomescreen_git.bb b/meta-agl-profile-graphical-qt5/recipes-qt/qlibhomescreen/qlibhomescreen_git.bb
deleted file mode 100644
index 09a262eb7..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qlibhomescreen/qlibhomescreen_git.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "A wrapper library of libhomescreen for Qt Application in AGL"
-SECTION = "libs"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
-
-DEPENDS = "qtbase libhomescreen"
-RDEPENDS_${PN} = "libhomescreen"
-
-inherit qmake5
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libqthomescreen.git;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "b218476402bceda7eb42d41064552a7261ff3205"
-S = "${WORKDIR}/git"
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qml-execscript-plugin/qml-execscript-plugin_1.0.bb b/meta-agl-profile-graphical-qt5/recipes-qt/qml-execscript-plugin/qml-execscript-plugin_1.0.bb
deleted file mode 100644
index dbeda2d11..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qml-execscript-plugin/qml-execscript-plugin_1.0.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Execute Script QML plugin"
-DESCRIPTION = "This provides a simple QML plugin able to execute script file."
-
-LICENSE = "CLOSED"
-
-DEPENDS = "qtbase-native qtdeclarative"
-
-SRC_URI = "git://github.com/ntanibata/qml-execscript-plugin.git;protocol=git;"
-SRCREV = "1f05c44cccd8aef485d8df8206c8df4e5ad6f310"
-S = "${WORKDIR}/git"
-
-inherit qmake5
-
-EXTRA_OECONF = "--with-moc-dir=${STAGING_BINDIR_NATIVE}/qt5"
-QML_LIBDIR = "${libdir}/qt5/qml"
-
-do_install() {
- install -d ${D}${libdir}/qt5/qml/execScript/
- install -m 0755 execScript/*.so ${D}${libdir}/qt5/qml/execScript/
- install -m 0644 ../git/execScript/qmldir ${D}${libdir}/qt5/qml/execScript/
-}
-
-FILES_${PN} += "${QML_LIBDIR}/execScript/libexecscriptplugin.so"
-FILES_${PN} += "${QML_LIBDIR}/execScript/qmldir"
-FILES_${PN}-dbg += "${QML_LIBDIR}/execScript/.debug"
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase-native_git.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase-native_git.bbappend
deleted file mode 100644
index b7cfe8dce..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase-native_git.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-# Backport this fix from meta-qt5:
-# https://github.com/meta-qt5/meta-qt5/commit/bf7cdd963008f2d61bc4c324fff2bfafe511fb5f
-SRC_URI_remove = "file://0012-qdbuscpp2xml.pro-do-not-build-with-bootstrapped-depe.patch"
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase/0001-Force-qdbus-to-make-introspect-for-every-findMetaObj.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase/0001-Force-qdbus-to-make-introspect-for-every-findMetaObj.patch
deleted file mode 100644
index 10a1ddd88..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase/0001-Force-qdbus-to-make-introspect-for-every-findMetaObj.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From a4943bb5c7fdf5eb297223d2c3bb02d2271bea48 Mon Sep 17 00:00:00 2001
-From: Risto Avila <risto.avila@theqtcompany.com>
-Date: Thu, 17 Dec 2015 04:22:53 +0200
-Subject: [PATCH] Force qdbus to make introspect for every findMetaObject
-
----
- src/dbus/qdbusintegrator.cpp | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
-index cce8b9c..ae2a9dc 100644
---- a/src/dbus/qdbusintegrator.cpp
-+++ b/src/dbus/qdbusintegrator.cpp
-@@ -2512,8 +2512,11 @@ QDBusConnectionPrivate::findMetaObject(const QString &service, const QString &pa
- if (!interface.isEmpty()) {
- QDBusReadLocker locker(FindMetaObject1Action, this);
- QDBusMetaObject *mo = cachedMetaObjects.value(interface, 0);
-- if (mo)
-- return mo;
-+ if (mo) {
-+ // service is not unique. Remove cached object to force introspect
-+ cachedMetaObjects.remove(interface);
-+ delete mo;
-+ }
- }
-
- // introspect the target object
---
-1.9.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase_%.bbappend
deleted file mode 100644
index e939fa35a..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtbase_%.bbappend
+++ /dev/null
@@ -1,12 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-PACKAGECONFIG_WAYLAND = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)}"
-PACKAGECONFIG_GL = "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2', '', d)}"
-PACKAGECONFIG_append = " ${PACKAGECONFIG_WAYLAND} icu accessibility"
-PACKAGECONFIG_append = " fontconfig"
-PACKAGECONFIG_append = " sql-sqlite"
-
-EXTRA_OECONF_append = ""
-
-# '-qpa wayland-egl' set wayland-egl as default of platform plagins
-PACKAGECONFIG[wayland]="-qpa wayland-egl -no-qpa-platform-guard"
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia/0001-metadata-image-support-with-the-data-URL-scheme-for-.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia/0001-metadata-image-support-with-the-data-URL-scheme-for-.patch
deleted file mode 100644
index 007e46763..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia/0001-metadata-image-support-with-the-data-URL-scheme-for-.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From ed61f1d932c5c6d38458fcd2e1d5d154383f017e Mon Sep 17 00:00:00 2001
-From: Tasuku Suzuki <tasuku.suzuki@qt.io>
-Date: Mon, 12 Dec 2016 16:32:47 +0900
-Subject: [PATCH] metadata image support with the "data" URL scheme for QtQuick
-
-add posterImage, coverArtImage and thumbnailImage to metadata
-
-Change-Id: I10b9bae10c219ffa41506d6e6b345020790217a6
----
- .../multimedia/qdeclarativemediametadata_p.h | 33 ++++++++++++++++++++++
- 1 file changed, 33 insertions(+)
-
-diff --git a/src/imports/multimedia/qdeclarativemediametadata_p.h b/src/imports/multimedia/qdeclarativemediametadata_p.h
-index ede7f87..6a6a815 100644
---- a/src/imports/multimedia/qdeclarativemediametadata_p.h
-+++ b/src/imports/multimedia/qdeclarativemediametadata_p.h
-@@ -51,6 +51,9 @@
- // We mean it.
- //
-
-+#include <QtCore/QBuffer>
-+#include <QtGui/QImage>
-+#include <QtGui/QImageWriter>
- #include <QtQml/qqml.h>
- #include <QtMultimedia/qmediametadata.h>
- #include <QtMultimedia/qmediaservice.h>
-@@ -153,6 +156,9 @@ class QDeclarativeMediaMetaData : public QObject
- Q_PROPERTY(QVariant gpsProcessingMethod READ gpsProcessingMethod WRITE setGPSProcessingMethod NOTIFY metaDataChanged)
- Q_PROPERTY(QVariant gpsAreaInformation READ gpsAreaInformation WRITE setGPSAreaInformation NOTIFY metaDataChanged)
-
-+ Q_PROPERTY(QVariant posterImage READ posterImage NOTIFY metaDataChanged)
-+ Q_PROPERTY(QVariant coverArtImage READ coverArtImage NOTIFY metaDataChanged)
-+ Q_PROPERTY(QVariant thumbnailImage READ thumbnailImage NOTIFY metaDataChanged)
- public:
- QDeclarativeMediaMetaData(QMediaObject *player, QObject *parent = 0)
- : QObject(parent)
-@@ -425,6 +431,16 @@ QT_WARNING_POP
- void setGPSAreaInformation(const QVariant &information) {
- setMetaData(QMediaMetaData::GPSAreaInformation, information); }
-
-+ QVariant posterImage() const {
-+ return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::PosterImage));
-+ }
-+ QVariant coverArtImage() const {
-+ return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::CoverArtImage));
-+ }
-+ QVariant thumbnailImage() const {
-+ return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::ThumbnailImage));
-+ }
-+
- Q_SIGNALS:
- void metaDataChanged();
-
-@@ -440,6 +456,23 @@ private:
- m_writerControl->setMetaData(key, value);
- }
-
-+ QUrl convertImageToUrl(const QVariant &variant) const
-+ {
-+ if (variant.type() != QVariant::Image)
-+ return QUrl();
-+
-+ QImage image = variant.value<QImage>();
-+ QByteArray data;
-+ QBuffer buffer(&data);
-+ buffer.open(QBuffer::WriteOnly);
-+ QImageWriter png(&buffer, "png");
-+ if (!png.write(image)) {
-+ return QUrl();
-+ }
-+ buffer.close();
-+ return QUrl(QStringLiteral("data:image/png;base64,") + data.toBase64());
-+ }
-+
- QMediaObject *m_mediaObject;
- QMetaDataWriterControl *m_writerControl;
- bool m_requestedWriterControl;
---
-2.7.4
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia_%.bbappend
deleted file mode 100644
index a06ac2d89..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtmultimedia_%.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
-
-PACKAGECONFIG_append = " gstreamer"
-
-SRC_URI_append = " \
- file://0001-metadata-image-support-with-the-data-URL-scheme-for-.patch \
- "
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtsystems_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtsystems_%.bbappend
deleted file mode 100644
index 550c58d05..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtsystems_%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-DEPENDS_remove = "bluez4"
-# currently Qt5 does not support bluez5 "Nothing PROVIDES 'gconfbluez5'"
-#DEPENDS_append = "bluez5"
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config/qtwayland b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config/qtwayland
deleted file mode 100644
index a371c6c4e..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config/qtwayland
+++ /dev/null
@@ -1,12 +0,0 @@
-QT_WAYLAND_SHELL_INTEGRATION=@QT_WAYLAND_DEFAULT_SHELL@
-# The following might be necessary when multiple/split surfaces are created.
-# Without this, QtWayland will sometimes maintain the same/old size even if the
-# split surface is destroyed.
-# We keep it disabled by default as it causes an additional repaint of the
-# surface until the compositor sends a configure event to scale the window to
-# the actual area. Typical windows will, by default, have an initial size set
-# by qtwayland when starting-up (without an explicit size specified by the
-# application).
-# Note that QtWayland will only test the presence of the environment variable
-# so it will be enabled even if set to 0
-# QT_WAYLAND_RESIZE_AFTER_SWAP=1
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config_1.0.0.bb b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config_1.0.0.bb
deleted file mode 100644
index ae7c956d4..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland-config_1.0.0.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "QtWayland config file."
-DESCRIPTION = "Config file for qtwayland."
-SECTION = "apps"
-LICENSE = "MIT"
-
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-
-SRC_URI = "file://qtwayland"
-
-inherit allarch
-
-QTWAYLAND_DEFAULT_SHELL ?= "xdg-shell"
-
-do_compile[noexec] = "1"
-
-do_install () {
- install -D -m 644 ${WORKDIR}/qtwayland ${D}${sysconfdir}/afm/unit.env.d/qtwayland
- sed -i -e 's/@QT_WAYLAND_DEFAULT_SHELL@/${QTWAYLAND_DEFAULT_SHELL}/' ${D}${sysconfdir}/afm/unit.env.d/qtwayland
-}
-
-RPROVIDES_${PN} += "virtual/qtwayland-config"
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0001-protocol-update-3rd-party-ivi-application-protocol.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0001-protocol-update-3rd-party-ivi-application-protocol.patch
deleted file mode 100644
index c91e11704..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0001-protocol-update-3rd-party-ivi-application-protocol.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 8caaf802a8b42e9bb1d74fc335a571882c75d73e Mon Sep 17 00:00:00 2001
-From: Holger Behrens <holger.behrens@windriver.com>
-Date: Tue, 3 Feb 2015 09:52:52 +0100
-Subject: [meta-ivi-demo][PATCH 1/2] protocol: update 3rd party ivi-application
- protocol
-
-Signed-off-by: Holger Behrens <holger.behrens@windriver.com>
----
- src/3rdparty/protocol/ivi-application.xml | 31 +++----------------------------
- 1 file changed, 3 insertions(+), 28 deletions(-)
-
-diff --git a/src/3rdparty/protocol/ivi-application.xml b/src/3rdparty/protocol/ivi-application.xml
-index 833fd38..b06ae6c 100644
---- a/src/3rdparty/protocol/ivi-application.xml
-+++ b/src/3rdparty/protocol/ivi-application.xml
-@@ -42,34 +42,9 @@
- <arg name="visibility" type="int"/>
- </event>
-
-- <enum name="warning_code">
-- <description summary="possible warning codes returned by ivi compositor">
-- These define all possible warning codes returned by ivi compositor on server-side warnings.
-- invalid_wl_surface:
-- - wl_surface already has a another role.
-- - wl_surface is destroyed before the ivi_surface is destroyed.
-- ivi_id_in_use: ivi_id is already assigned by another application.
-- </description>
-- <entry name="invalid_wl_surface" value="1" summary="wl_surface is invalid"/>
-- <entry name="ivi_id_in_use" value="2" summary="ivi_id is in use and can not be shared"/>
-- </enum>
--
-- <event name="warning">
-- <description summary="server-side warning detected">
-- The ivi compositor encountered warning while processing a request by this
-- application. The warning is defined by argument warning_code and optional
-- warning_text. If the warning is detected, client shall destroy the ivi_surface
-- object.
--
-- When a warning event is sent, the compositor turns the ivi_surface object inert.
-- The ivi_surface will not deliver further events, all requests on it are ignored
-- except 'destroy', and the association to the ivi_id is removed. The client
-- should destroy the ivi_surface object. If an inert ivi_surface object is used as
-- an argument to any other object's request, that request will [produce a fatal
-- error / produce a warning / be ignored].
-- </description>
-- <arg name="warning_code" type="int"/>
-- <arg name="warning_text" type="string" allow-null="true"/>
-+ <event name="configure">
-+ <arg name="width" type="int"/>
-+ <arg name="height" type="int"/>
- </event>
-
- </interface>
---
-2.2.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch
deleted file mode 100644
index 591ef71c5..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 31c60aedf415fd06b5c1aa16fdcef1504b67b96d Mon Sep 17 00:00:00 2001
-From: Holger Behrens <holger.behrens@windriver.com>
-Date: Tue, 3 Feb 2015 09:53:43 +0100
-Subject: [meta-ivi-demo][PATCH 2/2] qwaylandwindow: add support for
- IVI-Surface-ID property
-
-Signed-off-by: Holger Behrens <holger.behrens@windriver.com>
----
- src/client/qwaylandwindow.cpp | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
-index 45a58f2..781081a 100644
---- a/src/client/qwaylandwindow.cpp
-+++ b/src/client/qwaylandwindow.cpp
-@@ -100,7 +100,14 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
-
- if (!(window->flags() & Qt::BypassWindowManagerHint)) {
- if (mDisplay->shellIvi()) {
-- mShellSurface = new QWaylandIviSurface(mDisplay->shellIvi()->surface_create(IVI_SURFACE_ID + getpid(), object()), this);
-+ unsigned int id = 0;
-+ QVariant value = window->property("IVI-Surface-ID");
-+ if (value.isValid()) {
-+ id = value.toUInt();
-+ } else {
-+ id = IVI_SURFACE_ID + getpid();
-+ }
-+ mShellSurface = new QWaylandIviSurface(mDisplay->shellIvi()->surface_create(id, object()), this);
- } else if (mDisplay->shellXdg()) {
- if (window->type() & Qt::Window) {
- mShellSurface = new QWaylandXdgSurface(mDisplay->shellXdg()->get_xdg_surface(object()), this);
---
-2.2.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0010-Added-manifest-file-according-to-smack-3-domain-mode.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0010-Added-manifest-file-according-to-smack-3-domain-mode.patch
deleted file mode 100644
index 39296c769..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0010-Added-manifest-file-according-to-smack-3-domain-mode.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Add qt5wayland.manifest. Removed specfile change from patch.
-
-Adapted from:
-
-From 424c23191d81b072255bd7f178ad0ee2c2ea091a Mon Sep 17 00:00:00 2001
-From: Tomasz Olszak <olszak.tomasz@gmail.com>
-Date: Fri, 25 Apr 2014 14:32:22 +0200
-Subject: [PATCH 10/21] Added manifest file according to smack 3-domain model.
-
-Bug-Tizen:TIVI-2416
-
-Change-Id: I414e245a5c8847bec32ef6a97569d0f06221e1db
-Signed-off-by: Tomasz Olszak <olszak.tomasz@gmail.com>
----
- packaging/qt5-qtwayland.manifest | 5 +++++
- packaging/qt5-qtwayland.spec | 4 ++++
- 2 files changed, 9 insertions(+)
- create mode 100644 packaging/qt5-qtwayland.manifest
-
-diff --git a/packaging/qt5-qtwayland.manifest b/packaging/qt5-qtwayland.manifest
-new file mode 100644
-index 0000000..75b0fa5
---- /dev/null
-+++ b/packaging/qt5-qtwayland.manifest
-@@ -0,0 +1,5 @@
-+<manifest>
-+ <request>
-+ <domain name="_"/>
-+ </request>
-+</manifest>
---
-1.9.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch
deleted file mode 100644
index 6bea62621..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch
+++ /dev/null
@@ -1,468 +0,0 @@
-From 5cd43dc7519f54f9786fb6c686a2ce1e682d4366 Mon Sep 17 00:00:00 2001
-From: Philippe Coval <philippe.coval@open.eurogiciel.org>
-Date: Fri, 25 Apr 2014 10:31:42 +0200
-Subject: [PATCH 16/21] xdg-shell: Add xdg-shell protocol file version 1.4.0
-
-Source: http://cgit.freedesktop.org/wayland/weston/plain/protocol/xdg-shell.xml?id=1.4.0
-
-This file will need to be refreshed on protocol update
-until xdg-shell land in wayland's public headers
-
-Task-number: QTBUG-38633/part/1of2
-Change-Id: I397d863dcfc2223ac6eb234c37dbcd7449ecffff
-Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
-Origin: https://www.qt.gitorious.org/qt/qtwayland/commit/c2a22eea6716e073875474adf624d8463eba836c
-Bug-Tizen: TIVI-3113/part
-Signed-off-by: Philippe Coval <philippe.coval@open.eurogiciel.org>
----
- src/3rdparty/protocol/xdg-shell.xml | 438 ++++++++++++++++++++++++++++++++++++
- 1 file changed, 438 insertions(+)
- create mode 100644 src/3rdparty/protocol/xdg-shell.xml
-
-diff --git a/src/3rdparty/protocol/xdg-shell.xml b/src/3rdparty/protocol/xdg-shell.xml
-new file mode 100644
-index 0000000..4e5cff8
---- /dev/null
-+++ b/src/3rdparty/protocol/xdg-shell.xml
-@@ -0,0 +1,438 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<protocol name="xdg_shell">
-+
-+ <copyright>
-+ Copyright © 2008-2013 Kristian Høgsberg
-+ Copyright © 2013 Rafael Antognolli
-+ Copyright © 2013 Jasper St. Pierre
-+ Copyright © 2010-2013 Intel Corporation
-+
-+ Permission to use, copy, modify, distribute, and sell this
-+ software and its documentation for any purpose is hereby granted
-+ without fee, provided that the above copyright notice appear in
-+ all copies and that both that copyright notice and this permission
-+ notice appear in supporting documentation, and that the name of
-+ the copyright holders not be used in advertising or publicity
-+ pertaining to distribution of the software without specific,
-+ written prior permission. The copyright holders make no
-+ representations about the suitability of this software for any
-+ purpose. It is provided "as is" without express or implied
-+ warranty.
-+
-+ THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
-+ SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-+ FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
-+ SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
-+ AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-+ THIS SOFTWARE.
-+ </copyright>
-+
-+ <interface name="xdg_shell" version="1">
-+ <description summary="create desktop-style surfaces">
-+ This interface is implemented by servers that provide
-+ desktop-style user interfaces.
-+
-+ It allows clients to associate a xdg_surface with
-+ a basic surface.
-+ </description>
-+
-+ <enum name="version">
-+ <description summary="latest protocol version">
-+ Use this enum to check the protocol version, and it will be updated
-+ automatically.
-+ </description>
-+ <entry name="current" value="1" summary="Always the latest version"/>
-+ </enum>
-+
-+
-+ <request name="use_unstable_version">
-+ <description summary="enable use of this unstable version">
-+ Use this request in order to enable use of this interface.
-+
-+ Understand and agree that one is using an unstable interface,
-+ that will likely change in the future, breaking the API.
-+ </description>
-+ <arg name="version" type="int"/>
-+ </request>
-+
-+ <request name="get_xdg_surface">
-+ <description summary="create a shell surface from a surface">
-+ Create a shell surface for an existing surface.
-+
-+ Only one shell or popup surface can be associated with a given
-+ surface.
-+ </description>
-+ <arg name="id" type="new_id" interface="xdg_surface"/>
-+ <arg name="surface" type="object" interface="wl_surface"/>
-+ </request>
-+
-+ <request name="get_xdg_popup">
-+ <description summary="create a shell surface from a surface">
-+ Create a popup surface for an existing surface.
-+
-+ Only one shell or popup surface can be associated with a given
-+ surface.
-+ </description>
-+ <arg name="id" type="new_id" interface="xdg_popup"/>
-+ <arg name="surface" type="object" interface="wl_surface"/>
-+ <arg name="parent" type="object" interface="wl_surface"/>
-+ <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/>
-+ <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
-+ <arg name="x" type="int"/>
-+ <arg name="y" type="int"/>
-+ <arg name="flags" type="uint"/>
-+ </request>
-+ </interface>
-+
-+ <interface name="xdg_surface" version="1">
-+
-+ <description summary="desktop-style metadata interface">
-+ An interface that may be implemented by a wl_surface, for
-+ implementations that provide a desktop-style user interface.
-+
-+ It provides requests to treat surfaces like windows, allowing to set
-+ properties like maximized, fullscreen, minimized, and to move and resize
-+ them, and associate metadata like title and app id.
-+
-+ On the server side the object is automatically destroyed when
-+ the related wl_surface is destroyed. On client side,
-+ xdg_surface.destroy() must be called before destroying
-+ the wl_surface object.
-+ </description>
-+
-+ <request name="destroy" type="destructor">
-+ <description summary="remove xdg_surface interface">
-+ The xdg_surface interface is removed from the wl_surface object
-+ that was turned into a xdg_surface with
-+ xdg_shell.get_xdg_surface request. The xdg_surface properties,
-+ like maximized and fullscreen, are lost. The wl_surface loses
-+ its role as a xdg_surface. The wl_surface is unmapped.
-+ </description>
-+ </request>
-+
-+ <request name="set_transient_for">
-+ <description summary="surface is a child of another surface">
-+ Setting a surface as transient of another means that it is child
-+ of another surface.
-+
-+ Child surfaces are stacked above their parents, and will be
-+ unmapped if the parent is unmapped too. They should not appear
-+ on task bars and alt+tab.
-+ </description>
-+ <arg name="parent" type="object" interface="wl_surface" allow-null="true"/>
-+ </request>
-+
-+ <request name="set_title">
-+ <description summary="set surface title">
-+ Set a short title for the surface.
-+
-+ This string may be used to identify the surface in a task bar,
-+ window list, or other user interface elements provided by the
-+ compositor.
-+
-+ The string must be encoded in UTF-8.
-+ </description>
-+ <arg name="title" type="string"/>
-+ </request>
-+
-+ <request name="set_app_id">
-+ <description summary="set surface class">
-+ Set an id for the surface.
-+
-+ The app id identifies the general class of applications to which
-+ the surface belongs.
-+
-+ It should be the ID that appears in the new desktop entry
-+ specification, the interface name.
-+ </description>
-+ <arg name="app_id" type="string"/>
-+ </request>
-+
-+ <request name="pong">
-+ <description summary="respond to a ping event">
-+ A client must respond to a ping event with a pong request or
-+ the client may be deemed unresponsive.
-+ </description>
-+ <arg name="serial" type="uint" summary="serial of the ping event"/>
-+ </request>
-+
-+ <event name="ping">
-+ <description summary="ping client">
-+ Ping a client to check if it is receiving events and sending
-+ requests. A client is expected to reply with a pong request.
-+ </description>
-+ <arg name="serial" type="uint"/>
-+ </event>
-+
-+ <request name="move">
-+ <description summary="start an interactive move">
-+ Start a pointer-driven move of the surface.
-+
-+ This request must be used in response to a button press event.
-+ The server may ignore move requests depending on the state of
-+ the surface (e.g. fullscreen or maximized).
-+ </description>
-+ <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/>
-+ <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
-+ </request>
-+
-+ <enum name="resize_edge">
-+ <description summary="edge values for resizing">
-+ These values are used to indicate which edge of a surface
-+ is being dragged in a resize operation. The server may
-+ use this information to adapt its behavior, e.g. choose
-+ an appropriate cursor image.
-+ </description>
-+ <entry name="none" value="0"/>
-+ <entry name="top" value="1"/>
-+ <entry name="bottom" value="2"/>
-+ <entry name="left" value="4"/>
-+ <entry name="top_left" value="5"/>
-+ <entry name="bottom_left" value="6"/>
-+ <entry name="right" value="8"/>
-+ <entry name="top_right" value="9"/>
-+ <entry name="bottom_right" value="10"/>
-+ </enum>
-+
-+ <request name="resize">
-+ <description summary="start an interactive resize">
-+ Start a pointer-driven resizing of the surface.
-+
-+ This request must be used in response to a button press event.
-+ The server may ignore resize requests depending on the state of
-+ the surface (e.g. fullscreen or maximized).
-+ </description>
-+ <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/>
-+ <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
-+ <arg name="edges" type="uint" summary="which edge or corner is being dragged"/>
-+ </request>
-+
-+ <event name="configure">
-+ <description summary="suggest resize">
-+ The configure event asks the client to resize its surface.
-+
-+ The size is a hint, in the sense that the client is free to
-+ ignore it if it doesn't resize, pick a smaller size (to
-+ satisfy aspect ratio or resize in steps of NxM pixels).
-+
-+ The edges parameter provides a hint about how the surface
-+ was resized. The client may use this information to decide
-+ how to adjust its content to the new size (e.g. a scrolling
-+ area might adjust its content position to leave the viewable
-+ content unmoved). Valid edge values are from resize_edge enum.
-+
-+ The client is free to dismiss all but the last configure
-+ event it received.
-+
-+ The width and height arguments specify the size of the window
-+ in surface local coordinates.
-+ </description>
-+
-+ <arg name="edges" type="uint"/>
-+ <arg name="width" type="int"/>
-+ <arg name="height" type="int"/>
-+ </event>
-+
-+ <request name="set_output">
-+ <description summary="set the default output used by this surface">
-+ Set the default output used by this surface when it is first mapped.
-+
-+ If this value is NULL (default), it's up to the compositor to choose
-+ which display will be used to map this surface.
-+
-+ When fullscreen or maximized state are set on this surface, and it
-+ wasn't mapped yet, the output set with this method will be used.
-+ Otherwise, the output where the surface is currently mapped will be
-+ used.
-+ </description>
-+ <arg name="output" type="object" interface="wl_output" allow-null="true"/>
-+ </request>
-+
-+ <event name="request_set_fullscreen">
-+ <description summary="server requests that the client set fullscreen">
-+ Event sent from the compositor to the client requesting that the client
-+ goes to a fullscreen state. It's the client job to call set_fullscreen
-+ and really trigger the fullscreen state.
-+ </description>
-+ </event>
-+
-+ <event name="request_unset_fullscreen">
-+ <description summary="server requests that the client unset fullscreen">
-+ Event sent from the compositor to the client requesting that the client
-+ leaves the fullscreen state. It's the client job to call
-+ unset_fullscreen and really leave the fullscreen state.
-+ </description>
-+ </event>
-+
-+ <request name="set_fullscreen">
-+ <description summary="set the surface state as fullscreen">
-+ Set the surface as fullscreen.
-+
-+ After this request, the compositor should send a configure event
-+ informing the output size.
-+
-+ This request informs the compositor that the next attached buffer
-+ committed will be in a fullscreen state. The buffer size should be the
-+ same size as the size informed in the configure event, if the client
-+ doesn't want to leave any empty area.
-+
-+ In other words: the next attached buffer after set_maximized is the new
-+ maximized buffer. And the surface will be positioned at the maximized
-+ position on commit.
-+
-+ A simple way to synchronize and wait for the correct configure event is
-+ to use a wl_display.sync request right after the set_fullscreen
-+ request. When the sync callback returns, the last configure event
-+ received just before it will be the correct one, and should contain the
-+ right size for the surface to maximize.
-+
-+ Setting one state won't unset another state. Use
-+ xdg_surface.unset_fullscreen for unsetting it.
-+ </description>
-+ </request>
-+
-+ <request name="unset_fullscreen">
-+ <description summary="unset the surface state as fullscreen">
-+ Unset the surface fullscreen state.
-+
-+ Same negotiation as set_fullscreen must be used.
-+ </description>
-+ </request>
-+
-+ <event name="request_set_maximized">
-+ <description summary="server requests that the client set maximized">
-+ Event sent from the compositor to the client requesting that the client
-+ goes to a maximized state. It's the client job to call set_maximized
-+ and really trigger the maximized state.
-+ </description>
-+ </event>
-+
-+ <event name="request_unset_maximized">
-+ <description summary="server requests that the client unset maximized">
-+ Event sent from the compositor to the client requesting that the client
-+ leaves the maximized state. It's the client job to call unset_maximized
-+ and really leave the maximized state.
-+ </description>
-+ </event>
-+
-+ <request name="set_maximized">
-+ <description summary="set the surface state as maximized">
-+ Set the surface as maximized.
-+
-+ After this request, the compositor will send a configure event
-+ informing the output size minus panel and other MW decorations.
-+
-+ This request informs the compositor that the next attached buffer
-+ committed will be in a maximized state. The buffer size should be the
-+ same size as the size informed in the configure event, if the client
-+ doesn't want to leave any empty area.
-+
-+ In other words: the next attached buffer after set_maximized is the new
-+ maximized buffer. And the surface will be positioned at the maximized
-+ position on commit.
-+
-+ A simple way to synchronize and wait for the correct configure event is
-+ to use a wl_display.sync request right after the set_maximized request.
-+ When the sync callback returns, the last configure event received just
-+ before it will be the correct one, and should contain the right size
-+ for the surface to maximize.
-+
-+ Setting one state won't unset another state. Use
-+ xdg_surface.unset_maximized for unsetting it.
-+ </description>
-+ </request>
-+
-+ <request name="unset_maximized">
-+ <description summary="unset the surface state as maximized">
-+ Unset the surface maximized state.
-+
-+ Same negotiation as set_maximized must be used.
-+ </description>
-+ </request>
-+
-+ <request name="set_minimized">
-+ <description summary="set the surface state as minimized">
-+ Set the surface minimized state.
-+
-+ Setting one state won't unset another state.
-+ </description>
-+ </request>
-+
-+ <event name="focused_set">
-+ <description summary="surface was focused">
-+ The focused_set event is sent when this surface has been
-+ activated. Window decorations should be updated accordingly.
-+ </description>
-+ </event>
-+
-+ <event name="focused_unset">
-+ <description summary="surface was unfocused">
-+ The focused_unset event is sent when this surface has been
-+ deactivated, because another surface has been activated. Window
-+ decorations should be updated accordingly.
-+ </description>
-+ </event>
-+ </interface>
-+
-+ <interface name="xdg_popup" version="1">
-+ <description summary="desktop-style metadata interface">
-+ An interface that may be implemented by a wl_surface, for
-+ implementations that provide a desktop-style popups/menus. A popup
-+ surface is a transient surface with an added pointer grab.
-+
-+ An existing implicit grab will be changed to owner-events mode,
-+ and the popup grab will continue after the implicit grab ends
-+ (i.e. releasing the mouse button does not cause the popup to be
-+ unmapped).
-+
-+ The popup grab continues until the window is destroyed or a mouse
-+ button is pressed in any other clients window. A click in any of
-+ the clients surfaces is reported as normal, however, clicks in
-+ other clients surfaces will be discarded and trigger the callback.
-+
-+ The x and y arguments specify the locations of the upper left
-+ corner of the surface relative to the upper left corner of the
-+ parent surface, in surface local coordinates.
-+
-+ xdg_popup surfaces are always transient for another surface.
-+ </description>
-+
-+ <request name="destroy" type="destructor">
-+ <description summary="remove xdg_surface interface">
-+ The xdg_surface interface is removed from the wl_surface object
-+ that was turned into a xdg_surface with
-+ xdg_shell.get_xdg_surface request. The xdg_surface properties,
-+ like maximized and fullscreen, are lost. The wl_surface loses
-+ its role as a xdg_surface. The wl_surface is unmapped.
-+ </description>
-+ </request>
-+
-+ <request name="pong">
-+ <description summary="respond to a ping event">
-+ A client must respond to a ping event with a pong request or
-+ the client may be deemed unresponsive.
-+ </description>
-+ <arg name="serial" type="uint" summary="serial of the ping event"/>
-+ </request>
-+
-+ <event name="ping">
-+ <description summary="ping client">
-+ Ping a client to check if it is receiving events and sending
-+ requests. A client is expected to reply with a pong request.
-+ </description>
-+ <arg name="serial" type="uint"/>
-+ </event>
-+
-+ <event name="popup_done">
-+ <description summary="popup interaction is done">
-+ The popup_done event is sent out when a popup grab is broken,
-+ that is, when the users clicks a surface that doesn't belong
-+ to the client owning the popup surface.
-+ </description>
-+ <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
-+ </event>
-+
-+ </interface>
-+</protocol>
---
-1.9.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch
deleted file mode 100644
index fe1bb50e8..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch
+++ /dev/null
@@ -1,1029 +0,0 @@
-From 0edba039247ce888dbb7ff0a93c7b9ec01bac46e Mon Sep 17 00:00:00 2001
-From: Philippe Coval <philippe.coval@open.eurogiciel.org>
-Date: Wed, 26 Mar 2014 10:16:01 +0100
-Subject: [PATCH 17/21] xdg-shell: Add minimize feature to QWindow using
- wayland's xdg-shell
-
-The feature is disabled by default,
-and can be enabled at runtime
-by exporting QT_WAYLAND_USE_XDG_SHELL env variable.
-
-This patch relies on presence of protocol file
-which has been imported from weston-1.4.0 sources,
-until the xdg-shell is merge into wayland itself.
-
-Because xdg-shell is experimental,
-code fallback to WaylandShell if no XdgShell
-but keep in mind those shells are exclusive.
-
-Since xdg-shell and wayland-shell share most of the API,
-some factorization is done by an (empty) abstraction class
-to keep the code more readable.
-
-Despite xdg-shell introduces new popups concept,
-they're not used on this change for maitainance purpose.
-
-Notes:
-
-* This change depends on presence of xdg-shell protocol file.
-
-* You can check a demo video
- (qt-tizen-cinematic-experience-20140430-rzr)
- of the test case at :
- https://www.youtube.com/watch?v=pY_XXvKc_0E#
-
-* Use Super+Tab to show window again if hidden
-
-Task-number: QTBUG-38633/part/2of2
-Change-Id: I2d7ed85bea1847d82439fdfc893a3dbb2581ffff
-Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
-Origin: https://www.qt.gitorious.org/qt/qtwayland/commit/768484daaa64bea965bef981a16f59be8db0c190
-Bug-Tizen: TIVI-3113/part
-Signed-off-by: Philippe Coval <philippe.coval@open.eurogiciel.org>
----
- src/client/client.pro | 5 +
- src/client/qwaylanddisplay.cpp | 5 +
- src/client/qwaylanddisplay_p.h | 4 +
- src/client/qwaylandshellsurface.cpp | 134 ------------------------
- src/client/qwaylandshellsurface_p.h | 40 +++-----
- src/client/qwaylandwindow.cpp | 40 ++++++--
- src/client/qwaylandwlshellsurface.cpp | 186 ++++++++++++++++++++++++++++++++++
- src/client/qwaylandwlshellsurface_p.h | 101 ++++++++++++++++++
- src/client/qwaylandxdgsurface.cpp | 173 +++++++++++++++++++++++++++++++
- src/client/qwaylandxdgsurface_p.h | 105 +++++++++++++++++++
- 10 files changed, 625 insertions(+), 168 deletions(-)
- create mode 100644 src/client/qwaylandwlshellsurface.cpp
- create mode 100644 src/client/qwaylandwlshellsurface_p.h
- create mode 100644 src/client/qwaylandxdgsurface.cpp
- create mode 100644 src/client/qwaylandxdgsurface_p.h
-
-diff --git a/src/client/client.pro b/src/client/client.pro
-index 10cbd31..9ecf82f 100644
---- a/src/client/client.pro
-+++ b/src/client/client.pro
-@@ -41,6 +41,7 @@ WAYLANDCLIENTSOURCES += \
- ../extensions/qtkey-extension.xml \
- ../extensions/windowmanager.xml \
- ../3rdparty/protocol/text.xml \
-+ ../3rdparty/protocol/xdg-shell.xml \
-
- SOURCES += qwaylandintegration.cpp \
- qwaylandnativeinterface.cpp \
-@@ -57,6 +58,8 @@ SOURCES += qwaylandintegration.cpp \
- qwaylanddatadevicemanager.cpp \
- qwaylanddatasource.cpp \
- qwaylandshellsurface.cpp \
-+ qwaylandwlshellsurface.cpp \
-+ qwaylandxdgsurface.cpp \
- qwaylandextendedoutput.cpp \
- qwaylandextendedsurface.cpp \
- qwaylandsubsurface.cpp \
-@@ -85,6 +88,8 @@ HEADERS += qwaylandintegration_p.h \
- qwaylanddatadevicemanager_p.h \
- qwaylanddatasource_p.h \
- qwaylandshellsurface_p.h \
-+ qwaylandwlshellsurface_p.h \
-+ qwaylandxdgsurface_p.h \
- qwaylandextendedoutput_p.h \
- qwaylandextendedsurface_p.h \
- qwaylandsubsurface_p.h \
-diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
-index 0b715c0..7f953ad 100644
---- a/src/client/qwaylanddisplay.cpp
-+++ b/src/client/qwaylanddisplay.cpp
-@@ -61,6 +61,7 @@
- #include "qwaylandqtkey_p.h"
-
- #include <QtWaylandClient/private/qwayland-text.h>
-+#include <QtWaylandClient/private/qwayland-xdg-shell.h>
-
- #include <QtCore/QAbstractEventDispatcher>
- #include <QtGui/private/qguiapplication_p.h>
-@@ -206,6 +207,10 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
- mCompositor.init(registry, id);
- } else if (interface == QStringLiteral("wl_shm")) {
- mShm = static_cast<struct wl_shm *>(wl_registry_bind(registry, id, &wl_shm_interface,1));
-+ } else if (interface == QStringLiteral("xdg_shell")
-+ && qEnvironmentVariableIsSet("QT_WAYLAND_USE_XDG_SHELL")) {
-+ mShellXdg.reset(new QtWayland::xdg_shell(registry, id));
-+ mShellXdg->use_unstable_version(QtWayland::xdg_shell::version_current);
- } else if (interface == QStringLiteral("wl_shell")){
- mShell.reset(new QtWayland::wl_shell(registry, id));
- } else if (interface == QStringLiteral("wl_seat")) {
-diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
-index 40cb2b2..cf5dfc2 100644
---- a/src/client/qwaylanddisplay_p.h
-+++ b/src/client/qwaylanddisplay_p.h
-@@ -51,6 +51,7 @@
-
- #include <QtWaylandClient/private/qwayland-wayland.h>
- #include <QtWaylandClient/private/qwaylandclientexport_p.h>
-+#include <QtWaylandClient/private/qwayland-xdg-shell.h>
-
- struct wl_cursor_image;
-
-@@ -78,6 +79,7 @@ namespace QtWayland {
- class qt_sub_surface_extension;
- class qt_surface_extension;
- class wl_text_input_manager;
-+ class xdg_shell;
- }
-
- typedef void (*RegistryListener)(void *data,
-@@ -113,6 +115,7 @@ public:
- QtWayland::wl_compositor *compositor() { return &mCompositor; }
-
- QtWayland::wl_shell *shell() { return mShell.data(); }
-+ QtWayland::xdg_shell *shellXdg() { return mShellXdg.data(); }
-
- QList<QWaylandInputDevice *> inputDevices() const { return mInputDevices; }
- QWaylandInputDevice *defaultInputDevice() const;
-@@ -168,6 +171,7 @@ private:
- QThread *mEventThread;
- QWaylandEventThread *mEventThreadObject;
- QScopedPointer<QtWayland::wl_shell> mShell;
-+ QScopedPointer<QtWayland::xdg_shell> mShellXdg;
- QList<QPlatformScreen *> mScreens;
- QList<QWaylandInputDevice *> mInputDevices;
- QList<Listener> mRegistryListeners;
-diff --git a/src/client/qwaylandshellsurface.cpp b/src/client/qwaylandshellsurface.cpp
-index b7a819f..80e509b 100644
---- a/src/client/qwaylandshellsurface.cpp
-+++ b/src/client/qwaylandshellsurface.cpp
-@@ -40,137 +40,3 @@
- ****************************************************************************/
-
- #include "qwaylandshellsurface_p.h"
--
--#include "qwaylanddisplay_p.h"
--#include "qwaylandwindow_p.h"
--#include "qwaylandinputdevice_p.h"
--#include "qwaylanddecoration_p.h"
--#include "qwaylandscreen_p.h"
--
--#include <QtCore/QDebug>
--
--QT_BEGIN_NAMESPACE
--
--QWaylandShellSurface::QWaylandShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window)
-- : QtWayland::wl_shell_surface(shell_surface)
-- , m_window(window)
-- , m_maximized(false)
-- , m_fullscreen(false)
--{
--}
--
--QWaylandShellSurface::~QWaylandShellSurface()
--{
-- wl_shell_surface_destroy(object());
--}
--
--void QWaylandShellSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges)
--{
-- resize(inputDevice->wl_seat(),
-- inputDevice->serial(),
-- edges);
--}
--
--void QWaylandShellSurface::move(QWaylandInputDevice *inputDevice)
--{
-- move(inputDevice->wl_seat(),
-- inputDevice->serial());
--}
--
--void QWaylandShellSurface::setMaximized()
--{
-- m_maximized = true;
-- m_size = m_window->window()->geometry().size();
-- set_maximized(0);
--}
--
--void QWaylandShellSurface::setFullscreen()
--{
-- m_fullscreen = true;
-- m_size = m_window->window()->geometry().size();
-- set_fullscreen(WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, 0);
--}
--
--void QWaylandShellSurface::setNormal()
--{
-- if (m_fullscreen || m_maximized) {
-- m_fullscreen = m_maximized = false;
-- setTopLevel();
-- QMargins m = m_window->frameMargins();
-- m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom());
-- }
--}
--
--void QWaylandShellSurface::setMinimized()
--{
-- // TODO: There's no wl_shell_surface API for this
--}
--
--void QWaylandShellSurface::setTopLevel()
--{
-- set_toplevel();
--}
--
--void QWaylandShellSurface::updateTransientParent(QWindow *parent)
--{
-- QWaylandWindow *parent_wayland_window = static_cast<QWaylandWindow *>(parent->handle());
-- if (!parent_wayland_window)
-- return;
--
-- // set_transient expects a position relative to the parent
-- QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
-- QWindow *parentWin = m_window->window()->transientParent();
-- transientPos -= parentWin->geometry().topLeft();
-- if (parent_wayland_window->decoration()) {
-- transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left());
-- transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top());
-- }
--
-- uint32_t flags = 0;
-- Qt::WindowFlags wf = m_window->window()->flags();
-- if (wf.testFlag(Qt::ToolTip)
-- || wf.testFlag(Qt::WindowTransparentForInput))
-- flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE;
--
-- set_transient(parent_wayland_window->object(),
-- transientPos.x(),
-- transientPos.y(),
-- flags);
--}
--
--void QWaylandShellSurface::setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial)
--{
-- QWaylandWindow *parent_wayland_window = parent;
-- if (!parent_wayland_window)
-- return;
--
-- // set_popup expects a position relative to the parent
-- QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
-- transientPos -= parent_wayland_window->geometry().topLeft();
-- if (parent_wayland_window->decoration()) {
-- transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left());
-- transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top());
-- }
--
-- set_popup(device->wl_seat(), serial, parent_wayland_window->object(),
-- transientPos.x(), transientPos.y(), 0);
--}
--
--void QWaylandShellSurface::shell_surface_ping(uint32_t serial)
--{
-- pong(serial);
--}
--
--void QWaylandShellSurface::shell_surface_configure(uint32_t edges,
-- int32_t width,
-- int32_t height)
--{
-- m_window->configure(edges, width, height);
--}
--
--void QWaylandShellSurface::shell_surface_popup_done()
--{
-- QCoreApplication::postEvent(m_window->window(), new QCloseEvent());
--}
--
--QT_END_NAMESPACE
-diff --git a/src/client/qwaylandshellsurface_p.h b/src/client/qwaylandshellsurface_p.h
-index 2477c3f..2f59f60 100644
---- a/src/client/qwaylandshellsurface_p.h
-+++ b/src/client/qwaylandshellsurface_p.h
-@@ -55,39 +55,25 @@ class QWaylandWindow;
- class QWaylandInputDevice;
- class QWindow;
-
--class Q_WAYLAND_CLIENT_EXPORT QWaylandShellSurface : public QtWayland::wl_shell_surface
-+class Q_WAYLAND_CLIENT_EXPORT QWaylandShellSurface
- {
- public:
-- QWaylandShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window);
-- ~QWaylandShellSurface();
-+ virtual ~QWaylandShellSurface() {}
-+ virtual void resize(QWaylandInputDevice * /*inputDevice*/, enum wl_shell_surface_resize /*edges*/)
-+ {}
-
-- using QtWayland::wl_shell_surface::resize;
-- void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges);
--
-- using QtWayland::wl_shell_surface::move;
-- void move(QWaylandInputDevice *inputDevice);
-+ virtual void move(QWaylandInputDevice * /*inputDevice*/) {}
-+ virtual void setTitle(const QString & /*title*/) {}
-+ virtual void setAppId(const QString & /*appId*/) {}
-
- private:
-- void setMaximized();
-- void setFullscreen();
-- void setNormal();
-- void setMinimized();
--
-- void setTopLevel();
-- void updateTransientParent(QWindow *parent);
-- void setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial);
--
-- QWaylandWindow *m_window;
-- bool m_maximized;
-- bool m_fullscreen;
-- QSize m_size;
--
-- void shell_surface_ping(uint32_t serial) Q_DECL_OVERRIDE;
-- void shell_surface_configure(uint32_t edges,
-- int32_t width,
-- int32_t height) Q_DECL_OVERRIDE;
-- void shell_surface_popup_done() Q_DECL_OVERRIDE;
-+ virtual void setMaximized() {}
-+ virtual void setFullscreen() {}
-+ virtual void setNormal() {}
-+ virtual void setMinimized() {}
-
-+ virtual void setTopLevel() {}
-+ virtual void updateTransientParent(QWindow * /*parent*/) {}
- friend class QWaylandWindow;
- };
-
-diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
-index 920c977..3fb3a49 100644
---- a/src/client/qwaylandwindow.cpp
-+++ b/src/client/qwaylandwindow.cpp
-@@ -46,6 +46,8 @@
- #include "qwaylandinputdevice_p.h"
- #include "qwaylandscreen_p.h"
- #include "qwaylandshellsurface_p.h"
-+#include "qwaylandwlshellsurface_p.h"
-+#include "qwaylandxdgsurface_p.h"
- #include "qwaylandextendedsurface_p.h"
- #include "qwaylandsubsurface_p.h"
- #include "qwaylanddecoration_p.h"
-@@ -92,8 +94,16 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
- static WId id = 1;
- mWindowId = id++;
-
-- if (mDisplay->shell() && window->type() & Qt::Window && !(window->flags() & Qt::BypassWindowManagerHint))
-- mShellSurface = new QWaylandShellSurface(mDisplay->shell()->get_shell_surface(object()), this);
-+ if (!(window->flags() & Qt::BypassWindowManagerHint)) {
-+ if (mDisplay->shellXdg()) {
-+ if (window->type() & Qt::Window) {
-+ mShellSurface = new QWaylandXdgSurface(mDisplay->shellXdg()->get_xdg_surface(object()), this);
-+ }
-+ } else if (mDisplay->shell() && window->type() & Qt::Window) {
-+ mShellSurface = new QWaylandWlShellSurface(mDisplay->shell()->get_shell_surface(object()), this);
-+ }
-+ }
-+
- if (mDisplay->windowExtension())
- mExtendedWindow = new QWaylandExtendedSurface(this, mDisplay->windowExtension()->get_extended_surface(object()));
- if (mDisplay->subSurfaceExtension())
-@@ -101,12 +111,12 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
-
- if (mShellSurface) {
- // Set initial surface title
-- mShellSurface->set_title(window->title());
-+ mShellSurface->setTitle(window->title());
-
- // Set surface class to the .desktop file name (obtained from executable name)
- QFileInfo exeFileInfo(qApp->applicationFilePath());
- QString className = exeFileInfo.baseName() + QLatin1String(".desktop");
-- mShellSurface->set_class(className);
-+ mShellSurface->setAppId(className);
- }
-
- if (QPlatformWindow::parent() && mSubSurfaceWindow) {
-@@ -170,7 +180,7 @@ void QWaylandWindow::setParent(const QPlatformWindow *parent)
- void QWaylandWindow::setWindowTitle(const QString &title)
- {
- if (mShellSurface) {
-- mShellSurface->set_title(title);
-+ mShellSurface->setTitle(title);
- }
-
- if (mWindowDecoration && window()->isVisible())
-@@ -212,8 +222,10 @@ void QWaylandWindow::setVisible(bool visible)
- mMouseDevice = parent->mMouseDevice;
- mMouseSerial = parent->mMouseSerial;
-
-- if (mMouseDevice)
-- mShellSurface->setPopup(transientParent(), mMouseDevice, mMouseSerial);
-+ QWaylandWlShellSurface *wlshellSurface = dynamic_cast<QWaylandWlShellSurface*>(mShellSurface);
-+ if (mMouseDevice && wlshellSurface) {
-+ wlshellSurface->setPopup(transientParent(), mMouseDevice, mMouseSerial);
-+ }
- }
-
- if (!mSentInitialResize) {
-@@ -428,6 +440,20 @@ void QWaylandWindow::setWindowFlags(Qt::WindowFlags flags)
-
- bool QWaylandWindow::createDecoration()
- {
-+ // so far only xdg-shell support this "unminimize" trick, may be moved elsewhere
-+ if (mState == Qt::WindowMinimized) {
-+ QWaylandXdgSurface *xdgSurface = dynamic_cast<QWaylandXdgSurface *>(mShellSurface);
-+ if ( xdgSurface ) {
-+ if (xdgSurface->isFullscreen()) {
-+ setWindowStateInternal(Qt::WindowFullScreen);
-+ } else if (xdgSurface->isMaximized()) {
-+ setWindowStateInternal(Qt::WindowMaximized);
-+ } else {
-+ setWindowStateInternal(Qt::WindowNoState);
-+ }
-+ }
-+ }
-+
- static bool disableWaylandDecorations = !qgetenv("QT_WAYLAND_DISABLE_WINDOWDECORATION").isEmpty();
- if (disableWaylandDecorations)
- return false;
-diff --git a/src/client/qwaylandwlshellsurface.cpp b/src/client/qwaylandwlshellsurface.cpp
-new file mode 100644
-index 0000000..4b73ec2
---- /dev/null
-+++ b/src/client/qwaylandwlshellsurface.cpp
-@@ -0,0 +1,186 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#include "qwaylandwlshellsurface_p.h"
-+
-+#include "qwaylanddisplay_p.h"
-+#include "qwaylandwindow_p.h"
-+#include "qwaylandinputdevice_p.h"
-+#include "qwaylanddecoration_p.h"
-+#include "qwaylandscreen_p.h"
-+
-+#include <QtCore/QDebug>
-+
-+QT_BEGIN_NAMESPACE
-+
-+QWaylandWlShellSurface::QWaylandWlShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window)
-+ : QtWayland::wl_shell_surface(shell_surface)
-+ , m_window(window)
-+ , m_maximized(false)
-+ , m_fullscreen(false)
-+{
-+}
-+
-+QWaylandWlShellSurface::~QWaylandWlShellSurface()
-+{
-+ wl_shell_surface_destroy(object());
-+}
-+
-+void QWaylandWlShellSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges)
-+{
-+ resize(inputDevice->wl_seat(),
-+ inputDevice->serial(),
-+ edges);
-+}
-+
-+void QWaylandWlShellSurface::move(QWaylandInputDevice *inputDevice)
-+{
-+ move(inputDevice->wl_seat(),
-+ inputDevice->serial());
-+}
-+
-+void QWaylandWlShellSurface::setTitle(const QString & title)
-+{
-+ return QtWayland::wl_shell_surface::set_title(title);
-+}
-+
-+void QWaylandWlShellSurface::setAppId(const QString & appId)
-+{
-+ return QtWayland::wl_shell_surface::set_class(appId);
-+}
-+
-+void QWaylandWlShellSurface::setMaximized()
-+{
-+ m_maximized = true;
-+ m_size = m_window->window()->geometry().size();
-+ set_maximized(0);
-+}
-+
-+void QWaylandWlShellSurface::setFullscreen()
-+{
-+ m_fullscreen = true;
-+ m_size = m_window->window()->geometry().size();
-+ set_fullscreen(WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, 0);
-+}
-+
-+void QWaylandWlShellSurface::setNormal()
-+{
-+ if (m_fullscreen || m_maximized) {
-+ m_fullscreen = m_maximized = false;
-+ setTopLevel();
-+ QMargins m = m_window->frameMargins();
-+ m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom());
-+ }
-+}
-+
-+void QWaylandWlShellSurface::setMinimized()
-+{
-+ // TODO: There's no wl_shell_surface API for this
-+}
-+
-+void QWaylandWlShellSurface::setTopLevel()
-+{
-+ set_toplevel();
-+}
-+
-+void QWaylandWlShellSurface::updateTransientParent(QWindow *parent)
-+{
-+ QWaylandWindow *parent_wayland_window = static_cast<QWaylandWindow *>(parent->handle());
-+ if (!parent_wayland_window)
-+ return;
-+
-+ // set_transient expects a position relative to the parent
-+ QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
-+ QWindow *parentWin = m_window->window()->transientParent();
-+ transientPos -= parentWin->geometry().topLeft();
-+ if (parent_wayland_window->decoration()) {
-+ transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left());
-+ transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top());
-+ }
-+
-+ uint32_t flags = 0;
-+ Qt::WindowFlags wf = m_window->window()->flags();
-+ if (wf.testFlag(Qt::ToolTip)
-+ || wf.testFlag(Qt::WindowTransparentForInput))
-+ flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE;
-+
-+ set_transient(parent_wayland_window->object(),
-+ transientPos.x(),
-+ transientPos.y(),
-+ flags);
-+}
-+
-+void QWaylandWlShellSurface::setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial)
-+{
-+ QWaylandWindow *parent_wayland_window = parent;
-+ if (!parent_wayland_window)
-+ return;
-+
-+ // set_popup expects a position relative to the parent
-+ QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
-+ transientPos -= parent_wayland_window->geometry().topLeft();
-+ if (parent_wayland_window->decoration()) {
-+ transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left());
-+ transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top());
-+ }
-+
-+ set_popup(device->wl_seat(), serial, parent_wayland_window->object(),
-+ transientPos.x(), transientPos.y(), 0);
-+}
-+
-+void QWaylandWlShellSurface::shell_surface_ping(uint32_t serial)
-+{
-+ pong(serial);
-+}
-+
-+void QWaylandWlShellSurface::shell_surface_configure(uint32_t edges,
-+ int32_t width,
-+ int32_t height)
-+{
-+ m_window->configure(edges, width, height);
-+}
-+
-+void QWaylandWlShellSurface::shell_surface_popup_done()
-+{
-+ QCoreApplication::postEvent(m_window->window(), new QCloseEvent());
-+}
-+
-+QT_END_NAMESPACE
-diff --git a/src/client/qwaylandwlshellsurface_p.h b/src/client/qwaylandwlshellsurface_p.h
-new file mode 100644
-index 0000000..d02bb7b
---- /dev/null
-+++ b/src/client/qwaylandwlshellsurface_p.h
-@@ -0,0 +1,101 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#ifndef QWAYLANDWLSHELLSURFACE_H
-+#define QWAYLANDWLSHELLSURFACE_H
-+
-+#include <QtCore/QSize>
-+
-+#include <wayland-client.h>
-+
-+#include <QtWaylandClient/private/qwayland-wayland.h>
-+#include <QtWaylandClient/private/qwaylandclientexport_p.h>
-+#include "qwaylandshellsurface_p.h"
-+
-+QT_BEGIN_NAMESPACE
-+
-+class QWaylandWindow;
-+class QWaylandInputDevice;
-+class QWindow;
-+
-+class Q_WAYLAND_CLIENT_EXPORT QWaylandWlShellSurface : public QtWayland::wl_shell_surface
-+ , public QWaylandShellSurface
-+{
-+public:
-+ QWaylandWlShellSurface(struct ::wl_shell_surface *shell_surface, QWaylandWindow *window);
-+ virtual ~QWaylandWlShellSurface();
-+
-+ using QtWayland::wl_shell_surface::resize;
-+ void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) Q_DECL_OVERRIDE;
-+
-+ using QtWayland::wl_shell_surface::move;
-+ void move(QWaylandInputDevice *inputDevice) Q_DECL_OVERRIDE;
-+
-+ void setTitle(const QString & title) Q_DECL_OVERRIDE;
-+ void setAppId(const QString &appId) Q_DECL_OVERRIDE;
-+
-+private:
-+ void setMaximized() Q_DECL_OVERRIDE;
-+ void setFullscreen() Q_DECL_OVERRIDE;
-+ void setNormal() Q_DECL_OVERRIDE;
-+ void setMinimized() Q_DECL_OVERRIDE;
-+
-+ void setTopLevel() Q_DECL_OVERRIDE;
-+ void updateTransientParent(QWindow *parent) Q_DECL_OVERRIDE;
-+ void setPopup(QWaylandWindow *parent, QWaylandInputDevice *device, int serial);
-+
-+ QWaylandWindow *m_window;
-+ bool m_maximized;
-+ bool m_fullscreen;
-+ QSize m_size;
-+
-+ void shell_surface_ping(uint32_t serial) Q_DECL_OVERRIDE;
-+ void shell_surface_configure(uint32_t edges,
-+ int32_t width,
-+ int32_t height) Q_DECL_OVERRIDE;
-+ void shell_surface_popup_done() Q_DECL_OVERRIDE;
-+
-+ friend class QWaylandWindow;
-+};
-+
-+QT_END_NAMESPACE
-+
-+#endif // QWAYLANDSHELLSURFACE_H
-diff --git a/src/client/qwaylandxdgsurface.cpp b/src/client/qwaylandxdgsurface.cpp
-new file mode 100644
-index 0000000..1b8affa
---- /dev/null
-+++ b/src/client/qwaylandxdgsurface.cpp
-@@ -0,0 +1,173 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#include "qwaylandxdgsurface_p.h"
-+
-+#include "qwaylanddisplay_p.h"
-+#include "qwaylandwindow_p.h"
-+#include "qwaylandinputdevice_p.h"
-+#include "qwaylanddecoration_p.h"
-+#include "qwaylandscreen_p.h"
-+
-+#include <QtCore/QDebug>
-+
-+QT_BEGIN_NAMESPACE
-+
-+QWaylandXdgSurface::QWaylandXdgSurface(struct ::xdg_surface *xdg_surface, QWaylandWindow *window)
-+ : QtWayland::xdg_surface(xdg_surface)
-+ , m_window(window)
-+ , m_maximized(false)
-+ , m_minimized(false)
-+ , m_fullscreen(false)
-+{
-+}
-+
-+QWaylandXdgSurface::~QWaylandXdgSurface()
-+{
-+ xdg_surface_destroy(object());
-+}
-+
-+void QWaylandXdgSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges)
-+{
-+ // May need some conversion if types get incompatibles, ATM they're identical
-+ enum resize_edge const * const arg = reinterpret_cast<enum resize_edge const * const>(&edges);
-+ resize(inputDevice, *arg);
-+}
-+
-+void QWaylandXdgSurface::resize(QWaylandInputDevice *inputDevice, enum resize_edge edges)
-+{
-+ resize(inputDevice->wl_seat(),
-+ inputDevice->serial(),
-+ edges);
-+}
-+
-+void QWaylandXdgSurface::move(QWaylandInputDevice *inputDevice)
-+{
-+ move(inputDevice->wl_seat(),
-+ inputDevice->serial());
-+}
-+
-+void QWaylandXdgSurface::setMaximized()
-+{
-+ m_maximized = true;
-+ m_size = m_window->window()->geometry().size();
-+ set_maximized();
-+}
-+
-+void QWaylandXdgSurface::setFullscreen()
-+{
-+ m_fullscreen = true;
-+ m_size = m_window->window()->geometry().size();
-+ set_fullscreen();
-+}
-+
-+void QWaylandXdgSurface::setNormal()
-+{
-+ if (m_fullscreen || m_maximized || m_minimized) {
-+ if (m_maximized) { unset_maximized(); }
-+ if (m_fullscreen) { unset_fullscreen(); }
-+
-+ m_fullscreen = m_maximized = m_minimized = false;
-+ setTopLevel();
-+ QMargins m = m_window->frameMargins();
-+ m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom());
-+ }
-+}
-+
-+void QWaylandXdgSurface::setMinimized()
-+{
-+ m_minimized = true;
-+ m_size = m_window->window()->geometry().size();
-+ set_minimized();
-+}
-+
-+void QWaylandXdgSurface::setTopLevel()
-+{
-+ // There's no xdg_shell_surface API for this, ignoring
-+}
-+
-+void QWaylandXdgSurface::updateTransientParent(QWindow *parent)
-+{
-+ QWaylandWindow *parent_wayland_window = static_cast<QWaylandWindow *>(parent->handle());
-+ if (!parent_wayland_window)
-+ return;
-+
-+ // set_transient expects a position relative to the parent
-+ QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
-+ QWindow *parentWin = m_window->window()->transientParent();
-+ transientPos -= parentWin->geometry().topLeft();
-+ if (parent_wayland_window->decoration()) {
-+ transientPos.setX(transientPos.x() + parent_wayland_window->decoration()->margins().left());
-+ transientPos.setY(transientPos.y() + parent_wayland_window->decoration()->margins().top());
-+ }
-+
-+ uint32_t flags = 0;
-+ Qt::WindowFlags wf = m_window->window()->flags();
-+ if (wf.testFlag(Qt::ToolTip)
-+ || wf.testFlag(Qt::WindowTransparentForInput))
-+ flags |= XDG_SURFACE_SET_TRANSIENT_FOR;
-+
-+ set_transient_for(parent_wayland_window->object());
-+}
-+
-+void QWaylandXdgSurface::setTitle(const QString & title)
-+{
-+ return QtWayland::xdg_surface::set_title(title);
-+}
-+
-+void QWaylandXdgSurface::setAppId(const QString & appId)
-+{
-+ return QtWayland::xdg_surface::set_app_id(appId);
-+}
-+
-+void QWaylandXdgSurface::xdg_surface_ping(uint32_t serial)
-+{
-+ pong(serial);
-+}
-+
-+void QWaylandXdgSurface::xdg_surface_configure(uint32_t edges, int32_t width,
-+ int32_t height)
-+{
-+ m_window->configure(edges, width, height);
-+}
-+
-+
-+QT_END_NAMESPACE
-diff --git a/src/client/qwaylandxdgsurface_p.h b/src/client/qwaylandxdgsurface_p.h
-new file mode 100644
-index 0000000..744d3f3
---- /dev/null
-+++ b/src/client/qwaylandxdgsurface_p.h
-@@ -0,0 +1,105 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#ifndef QWAYLANDXDGSURFACE_H
-+#define QWAYLANDXDGSURFACE_H
-+
-+#include <QtCore/QSize>
-+
-+#include <wayland-client.h>
-+
-+#include <QtWaylandClient/private/qwayland-xdg-shell.h>
-+#include <QtWaylandClient/private/qwaylandclientexport_p.h>
-+#include "qwaylandshellsurface_p.h"
-+
-+QT_BEGIN_NAMESPACE
-+
-+class QWaylandWindow;
-+class QWaylandInputDevice;
-+class QWindow;
-+
-+class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgSurface : public QtWayland::xdg_surface
-+ , public QWaylandShellSurface
-+{
-+public:
-+ QWaylandXdgSurface(struct ::xdg_surface *shell_surface, QWaylandWindow *window);
-+ virtual ~QWaylandXdgSurface();
-+
-+ using QtWayland::xdg_surface::resize;
-+ void resize(QWaylandInputDevice *inputDevice, enum resize_edge edges);
-+
-+ void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) Q_DECL_OVERRIDE;
-+
-+ using QtWayland::xdg_surface::move;
-+ void move(QWaylandInputDevice *inputDevice) Q_DECL_OVERRIDE;
-+
-+ void setTitle(const QString &title) Q_DECL_OVERRIDE;
-+ void setAppId(const QString &appId) Q_DECL_OVERRIDE;
-+
-+ bool isFullscreen() const { return m_fullscreen; }
-+ bool isMaximized() const { return m_maximized; }
-+
-+private:
-+ void setMaximized() Q_DECL_OVERRIDE;
-+ void setFullscreen() Q_DECL_OVERRIDE;
-+ void setNormal() Q_DECL_OVERRIDE;
-+ void setMinimized() Q_DECL_OVERRIDE;
-+
-+ void setTopLevel() Q_DECL_OVERRIDE;
-+ void updateTransientParent(QWindow *parent) Q_DECL_OVERRIDE;
-+
-+private:
-+ QWaylandWindow *m_window;
-+ bool m_maximized;
-+ bool m_minimized;
-+ bool m_fullscreen;
-+ QSize m_size;
-+
-+ void xdg_surface_ping(uint32_t serial) Q_DECL_OVERRIDE;
-+ void xdg_surface_configure(uint32_t edges,
-+ int32_t width,
-+ int32_t height) Q_DECL_OVERRIDE;
-+ friend class QWaylandWindow;
-+};
-+
-+QT_END_NAMESPACE
-+
-+#endif // QWAYLANDXDGSURFACE_H
---
-1.9.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0019-xdg-shell-upgrade-to-support-current-version-weston-.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0019-xdg-shell-upgrade-to-support-current-version-weston-.patch
deleted file mode 100644
index 8f0425a76..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0019-xdg-shell-upgrade-to-support-current-version-weston-.patch
+++ /dev/null
@@ -1,772 +0,0 @@
-From c4219cca0febd7119e0bec776fdc2877b3448e0b Mon Sep 17 00:00:00 2001
-From: Philippe Coval <philippe.coval@open.eurogiciel.org>
-Date: Tue, 10 Jun 2014 16:22:17 +0200
-Subject: [PATCH 19/21] xdg-shell: upgrade to support current version
- (weston-1.5.0)
-
-The protocol file is a raw copy of
-
-Source: http://cgit.freedesktop.org/wayland/weston/plain/protocol/xdg-shell.xml?id=1.5.0
-
-Task-number: QTBUG-38633/related
-Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
-Reviewed-by: Philippe Coval <rzr@gna.org>
-Origin: https://www.qt.gitorious.org/qt/qtwayland/commit/4bac130b97fbaa565aa9883eb302557ef0185d50
-Change-Id: I41ca2f89c09a8b6348ce2fbf6d59f44b4c81ffff
----
- src/3rdparty/protocol/xdg-shell.xml | 288 ++++++++++++++++++------------------
- src/client/client.pro | 2 +
- src/client/qwaylanddisplay.cpp | 10 +-
- src/client/qwaylanddisplay_p.h | 5 +-
- src/client/qwaylandxdgshell.cpp | 77 ++++++++++
- src/client/qwaylandxdgshell_p.h | 73 +++++++++
- src/client/qwaylandxdgsurface.cpp | 60 ++++++--
- src/client/qwaylandxdgsurface_p.h | 11 +-
- 8 files changed, 364 insertions(+), 162 deletions(-)
- create mode 100644 src/client/qwaylandxdgshell.cpp
- create mode 100644 src/client/qwaylandxdgshell_p.h
-
-diff --git a/src/3rdparty/protocol/xdg-shell.xml b/src/3rdparty/protocol/xdg-shell.xml
-index 4e5cff8..79a2831 100644
---- a/src/3rdparty/protocol/xdg-shell.xml
-+++ b/src/3rdparty/protocol/xdg-shell.xml
-@@ -40,19 +40,22 @@
-
- <enum name="version">
- <description summary="latest protocol version">
-- Use this enum to check the protocol version, and it will be updated
-- automatically.
-+ The 'current' member of this enum gives the version of the
-+ protocol. Implementations can compare this to the version
-+ they implement using static_assert to ensure the protocol and
-+ implementation versions match.
- </description>
-- <entry name="current" value="1" summary="Always the latest version"/>
-+ <entry name="current" value="3" summary="Always the latest version"/>
- </enum>
-
-
- <request name="use_unstable_version">
- <description summary="enable use of this unstable version">
-- Use this request in order to enable use of this interface.
--
-- Understand and agree that one is using an unstable interface,
-- that will likely change in the future, breaking the API.
-+ Negotiate the unstable version of the interface. This
-+ mechanism is in place to ensure client and server agree on the
-+ unstable versions of the protocol that they speak or exit
-+ cleanly if they don't agree. This request will go away once
-+ the xdg-shell protocol is stable.
- </description>
- <arg name="version" type="int"/>
- </request>
-@@ -84,6 +87,28 @@
- <arg name="y" type="int"/>
- <arg name="flags" type="uint"/>
- </request>
-+
-+ <event name="ping">
-+ <description summary="check if the client is alive">
-+ The ping event asks the client if it's still alive. Pass the
-+ serial specified in the event back to the compositor by sending
-+ a "pong" request back with the specified serial.
-+
-+ Compositors can use this to determine if the client is still
-+ alive. It's unspecified what will happen if the client doesn't
-+ respond to the ping request, or in what timeframe. Clients should
-+ try to respond in a reasonable amount of time.
-+ </description>
-+ <arg name="serial" type="uint" summary="pass this to the callback"/>
-+ </event>
-+
-+ <request name="pong">
-+ <description summary="respond to a ping event">
-+ A client must respond to a ping event with a pong request or
-+ the client may be deemed unresponsive.
-+ </description>
-+ <arg name="serial" type="uint" summary="serial of the ping event"/>
-+ </request>
- </interface>
-
- <interface name="xdg_surface" version="1">
-@@ -124,6 +149,32 @@
- <arg name="parent" type="object" interface="wl_surface" allow-null="true"/>
- </request>
-
-+ <request name="set_margin">
-+ <description summary="set the visible frame boundaries">
-+ This tells the compositor what the visible size of the window
-+ should be, so it can use it to determine what borders to use for
-+ constrainment and alignment.
-+
-+ CSD often has invisible areas for decoration purposes, like drop
-+ shadows. These "shadow" drawings need to be subtracted out of the
-+ normal boundaries of the window when computing where to place
-+ windows (e.g. to set this window so it's centered on top of another,
-+ or to put it to the left or right of the screen.)
-+
-+ This value should change as little as possible at runtime, to
-+ prevent flicker.
-+
-+ This value is also ignored when the window is maximized or
-+ fullscreen, and assumed to be 0.
-+
-+ If never called, this value is assumed to be 0.
-+ </description>
-+ <arg name="left_margin" type="int"/>
-+ <arg name="right_margin" type="int"/>
-+ <arg name="top_margin" type="int"/>
-+ <arg name="bottom_margin" type="int"/>
-+ </request>
-+
- <request name="set_title">
- <description summary="set surface title">
- Set a short title for the surface.
-@@ -150,22 +201,6 @@
- <arg name="app_id" type="string"/>
- </request>
-
-- <request name="pong">
-- <description summary="respond to a ping event">
-- A client must respond to a ping event with a pong request or
-- the client may be deemed unresponsive.
-- </description>
-- <arg name="serial" type="uint" summary="serial of the ping event"/>
-- </request>
--
-- <event name="ping">
-- <description summary="ping client">
-- Ping a client to check if it is receiving events and sending
-- requests. A client is expected to reply with a pong request.
-- </description>
-- <arg name="serial" type="uint"/>
-- </event>
--
- <request name="move">
- <description summary="start an interactive move">
- Start a pointer-driven move of the surface.
-@@ -217,12 +252,6 @@
- ignore it if it doesn't resize, pick a smaller size (to
- satisfy aspect ratio or resize in steps of NxM pixels).
-
-- The edges parameter provides a hint about how the surface
-- was resized. The client may use this information to decide
-- how to adjust its content to the new size (e.g. a scrolling
-- area might adjust its content position to leave the viewable
-- content unmoved). Valid edge values are from resize_edge enum.
--
- The client is free to dismiss all but the last configure
- event it received.
-
-@@ -230,7 +259,6 @@
- in surface local coordinates.
- </description>
-
-- <arg name="edges" type="uint"/>
- <arg name="width" type="int"/>
- <arg name="height" type="int"/>
- </event>
-@@ -250,128 +278,122 @@
- <arg name="output" type="object" interface="wl_output" allow-null="true"/>
- </request>
-
-- <event name="request_set_fullscreen">
-- <description summary="server requests that the client set fullscreen">
-- Event sent from the compositor to the client requesting that the client
-- goes to a fullscreen state. It's the client job to call set_fullscreen
-- and really trigger the fullscreen state.
-- </description>
-- </event>
--
-- <event name="request_unset_fullscreen">
-- <description summary="server requests that the client unset fullscreen">
-- Event sent from the compositor to the client requesting that the client
-- leaves the fullscreen state. It's the client job to call
-- unset_fullscreen and really leave the fullscreen state.
-- </description>
-- </event>
-+ <enum name="state">
-+ <description summary="types of state on the surface">
-+ The different state values used on the surface. This is designed for
-+ state values like maximized, fullscreen. It is paired with the
-+ request_change_state event to ensure that both the client and the
-+ compositor setting the state can be synchronized.
-
-- <request name="set_fullscreen">
-- <description summary="set the surface state as fullscreen">
-- Set the surface as fullscreen.
-+ States set in this way are double-buffered. They will get applied on
-+ the next commit.
-
-- After this request, the compositor should send a configure event
-- informing the output size.
-+ Desktop environments may extend this enum by taking up a range of
-+ values and documenting the range they chose in this description.
-+ They are not required to document the values for the range that they
-+ chose. Ideally, any good extensions from a desktop environment should
-+ make its way into standardization into this enum.
-
-- This request informs the compositor that the next attached buffer
-- committed will be in a fullscreen state. The buffer size should be the
-- same size as the size informed in the configure event, if the client
-- doesn't want to leave any empty area.
-+ The current reserved ranges are:
-
-- In other words: the next attached buffer after set_maximized is the new
-- maximized buffer. And the surface will be positioned at the maximized
-- position on commit.
--
-- A simple way to synchronize and wait for the correct configure event is
-- to use a wl_display.sync request right after the set_fullscreen
-- request. When the sync callback returns, the last configure event
-- received just before it will be the correct one, and should contain the
-- right size for the surface to maximize.
--
-- Setting one state won't unset another state. Use
-- xdg_surface.unset_fullscreen for unsetting it.
-+ 0x0000 - 0x0FFF: xdg-shell core values, documented below.
-+ 0x1000 - 0x1FFF: GNOME
- </description>
-- </request>
-+ <entry name="maximized" value="1" summary="the surface is maximized">
-+ A non-zero value indicates the surface is maximized. Otherwise,
-+ the surface is unmaximized.
-+ </entry>
-+ <entry name="fullscreen" value="2" summary="the surface is fullscreen">
-+ A non-zero value indicates the surface is fullscreen. Otherwise,
-+ the surface is not fullscreen.
-+ </entry>
-+ </enum>
-
-- <request name="unset_fullscreen">
-- <description summary="unset the surface state as fullscreen">
-- Unset the surface fullscreen state.
-+ <request name="request_change_state">
-+ <description summary="client requests to change a surface's state">
-+ This asks the compositor to change the state. If the compositor wants
-+ to change the state, it will send a change_state event with the same
-+ state_type, value, and serial, and the event flow continues as if it
-+ it was initiated by the compositor.
-
-- Same negotiation as set_fullscreen must be used.
-+ If the compositor does not want to change the state, it will send a
-+ change_state to the client with the old value of the state.
- </description>
-+ <arg name="state_type" type="uint" summary="the state to set"/>
-+ <arg name="value" type="uint" summary="the value to change the state to"/>
-+ <arg name="serial" type="uint" summary="an event serial">
-+ This serial is so the client can know which change_state event corresponds
-+ to which request_change_state request it sent out.
-+ </arg>
- </request>
-
-- <event name="request_set_maximized">
-- <description summary="server requests that the client set maximized">
-- Event sent from the compositor to the client requesting that the client
-- goes to a maximized state. It's the client job to call set_maximized
-- and really trigger the maximized state.
-+ <event name="change_state">
-+ <description summary="compositor wants to change a surface's state">
-+ This event tells the client to change a surface's state. The client
-+ should respond with an ack_change_state request to the compositor to
-+ guarantee that the compositor knows that the client has seen it.
- </description>
-- </event>
-
-- <event name="request_unset_maximized">
-- <description summary="server requests that the client unset maximized">
-- Event sent from the compositor to the client requesting that the client
-- leaves the maximized state. It's the client job to call unset_maximized
-- and really leave the maximized state.
-- </description>
-+ <arg name="state_type" type="uint" summary="the state to set"/>
-+ <arg name="value" type="uint" summary="the value to change the state to"/>
-+ <arg name="serial" type="uint" summary="a serial for the compositor's own tracking"/>
- </event>
-
-- <request name="set_maximized">
-- <description summary="set the surface state as maximized">
-- Set the surface as maximized.
--
-- After this request, the compositor will send a configure event
-- informing the output size minus panel and other MW decorations.
--
-- This request informs the compositor that the next attached buffer
-- committed will be in a maximized state. The buffer size should be the
-- same size as the size informed in the configure event, if the client
-- doesn't want to leave any empty area.
-+ <request name="ack_change_state">
-+ <description summary="ack a change_state event">
-+ When a change_state event is received, a client should then ack it
-+ using the ack_change_state request to ensure that the compositor
-+ knows the client has seen the event.
-
-- In other words: the next attached buffer after set_maximized is the new
-- maximized buffer. And the surface will be positioned at the maximized
-- position on commit.
-+ By this point, the state is confirmed, and the next attach should
-+ contain the buffer drawn for the new state value.
-
-- A simple way to synchronize and wait for the correct configure event is
-- to use a wl_display.sync request right after the set_maximized request.
-- When the sync callback returns, the last configure event received just
-- before it will be the correct one, and should contain the right size
-- for the surface to maximize.
--
-- Setting one state won't unset another state. Use
-- xdg_surface.unset_maximized for unsetting it.
-+ The values here need to be the same as the values in the cooresponding
-+ change_state event.
- </description>
-+ <arg name="state_type" type="uint" summary="the state to set"/>
-+ <arg name="value" type="uint" summary="the value to change the state to"/>
-+ <arg name="serial" type="uint" summary="a serial to pass to change_state"/>
- </request>
-
-- <request name="unset_maximized">
-- <description summary="unset the surface state as maximized">
-- Unset the surface maximized state.
--
-- Same negotiation as set_maximized must be used.
-+ <request name="set_minimized">
-+ <description summary="minimize the surface">
-+ Minimize the surface.
- </description>
- </request>
-
-- <request name="set_minimized">
-- <description summary="set the surface state as minimized">
-- Set the surface minimized state.
--
-- Setting one state won't unset another state.
-+ <event name="activated">
-+ <description summary="surface was activated">
-+ The activated_set event is sent when this surface has been
-+ activated, which means that the surface has user attention.
-+ Window decorations should be updated accordingly. You should
-+ not use this event for anything but the style of decorations
-+ you display, use wl_keyboard.enter and wl_keyboard.leave for
-+ determining keyboard focus.
- </description>
-- </request>
-+ </event>
-
-- <event name="focused_set">
-- <description summary="surface was focused">
-- The focused_set event is sent when this surface has been
-- activated. Window decorations should be updated accordingly.
-+ <event name="deactivated">
-+ <description summary="surface was deactivated">
-+ The deactivate event is sent when this surface has been
-+ deactivated, which means that the surface lost user attention.
-+ Window decorations should be updated accordingly. You should
-+ not use this event for anything but the style of decorations
-+ you display, use wl_keyboard.enter and wl_keyboard.leave for
-+ determining keyboard focus.
- </description>
- </event>
-
-- <event name="focused_unset">
-- <description summary="surface was unfocused">
-- The focused_unset event is sent when this surface has been
-- deactivated, because another surface has been activated. Window
-- decorations should be updated accordingly.
-+ <event name="close">
-+ <description summary="surface wants to be closed">
-+ The close event is sent by the compositor when the user
-+ wants the surface to be closed. This should be equivalent to
-+ the user clicking the close button in client-side decorations,
-+ if your application has any...
-+
-+ This is only a request that the user intends to close your
-+ window. The client may choose to ignore this request, or show
-+ a dialog to ask the user to save their data...
- </description>
- </event>
- </interface>
-@@ -409,22 +431,6 @@
- </description>
- </request>
-
-- <request name="pong">
-- <description summary="respond to a ping event">
-- A client must respond to a ping event with a pong request or
-- the client may be deemed unresponsive.
-- </description>
-- <arg name="serial" type="uint" summary="serial of the ping event"/>
-- </request>
--
-- <event name="ping">
-- <description summary="ping client">
-- Ping a client to check if it is receiving events and sending
-- requests. A client is expected to reply with a pong request.
-- </description>
-- <arg name="serial" type="uint"/>
-- </event>
--
- <event name="popup_done">
- <description summary="popup interaction is done">
- The popup_done event is sent out when a popup grab is broken,
-diff --git a/src/client/client.pro b/src/client/client.pro
-index 9ecf82f..73e3b7f 100644
---- a/src/client/client.pro
-+++ b/src/client/client.pro
-@@ -59,6 +59,7 @@ SOURCES += qwaylandintegration.cpp \
- qwaylanddatasource.cpp \
- qwaylandshellsurface.cpp \
- qwaylandwlshellsurface.cpp \
-+ qwaylandxdgshell.cpp \
- qwaylandxdgsurface.cpp \
- qwaylandextendedoutput.cpp \
- qwaylandextendedsurface.cpp \
-@@ -89,6 +90,7 @@ HEADERS += qwaylandintegration_p.h \
- qwaylanddatasource_p.h \
- qwaylandshellsurface_p.h \
- qwaylandwlshellsurface_p.h \
-+ qwaylandxdgshell_p.h \
- qwaylandxdgsurface_p.h \
- qwaylandextendedoutput_p.h \
- qwaylandextendedsurface_p.h \
-diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
-index 7f953ad..2e25672 100644
---- a/src/client/qwaylanddisplay.cpp
-+++ b/src/client/qwaylanddisplay.cpp
-@@ -50,7 +50,7 @@
- #include "qwaylandclipboard_p.h"
- #include "qwaylanddatadevicemanager_p.h"
- #include "qwaylandhardwareintegration_p.h"
--
-+#include "qwaylandxdgshell_p.h"
-
- #include "qwaylandwindowmanagerintegration_p.h"
-
-@@ -209,8 +209,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
- mShm = static_cast<struct wl_shm *>(wl_registry_bind(registry, id, &wl_shm_interface,1));
- } else if (interface == QStringLiteral("xdg_shell")
- && qEnvironmentVariableIsSet("QT_WAYLAND_USE_XDG_SHELL")) {
-- mShellXdg.reset(new QtWayland::xdg_shell(registry, id));
-- mShellXdg->use_unstable_version(QtWayland::xdg_shell::version_current);
-+ mShellXdg.reset(new QWaylandXdgShell(registry,id));
- } else if (interface == QStringLiteral("wl_shell")){
- mShell.reset(new QtWayland::wl_shell(registry, id));
- } else if (interface == QStringLiteral("wl_seat")) {
-@@ -275,4 +274,9 @@ void QWaylandDisplay::forceRoundTrip()
- wl_display_roundtrip(mDisplay);
- }
-
-+QtWayland::xdg_shell *QWaylandDisplay::shellXdg()
-+{
-+ return mShellXdg.data();
-+}
-+
- QT_END_NAMESPACE
-diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
-index cf5dfc2..f1b35a7 100644
---- a/src/client/qwaylanddisplay_p.h
-+++ b/src/client/qwaylanddisplay_p.h
-@@ -72,6 +72,7 @@ class QWaylandWindow;
- class QWaylandEventThread;
- class QWaylandIntegration;
- class QWaylandHardwareIntegration;
-+class QWaylandXdgShell;
-
- namespace QtWayland {
- class qt_output_extension;
-@@ -115,7 +116,7 @@ public:
- QtWayland::wl_compositor *compositor() { return &mCompositor; }
-
- QtWayland::wl_shell *shell() { return mShell.data(); }
-- QtWayland::xdg_shell *shellXdg() { return mShellXdg.data(); }
-+ QtWayland::xdg_shell *shellXdg();
-
- QList<QWaylandInputDevice *> inputDevices() const { return mInputDevices; }
- QWaylandInputDevice *defaultInputDevice() const;
-@@ -171,7 +172,7 @@ private:
- QThread *mEventThread;
- QWaylandEventThread *mEventThreadObject;
- QScopedPointer<QtWayland::wl_shell> mShell;
-- QScopedPointer<QtWayland::xdg_shell> mShellXdg;
-+ QScopedPointer<QWaylandXdgShell> mShellXdg;
- QList<QPlatformScreen *> mScreens;
- QList<QWaylandInputDevice *> mInputDevices;
- QList<Listener> mRegistryListeners;
-diff --git a/src/client/qwaylandxdgshell.cpp b/src/client/qwaylandxdgshell.cpp
-new file mode 100644
-index 0000000..eb9f91c
---- /dev/null
-+++ b/src/client/qwaylandxdgshell.cpp
-@@ -0,0 +1,77 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2014 Eurogiciel, author: <philippe.coval@eurogiciel.fr>
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#include "qwaylandxdgshell_p.h"
-+
-+#include "qwaylanddisplay_p.h"
-+#include "qwaylandwindow_p.h"
-+#include "qwaylandinputdevice_p.h"
-+#include "qwaylanddecoration_p.h"
-+#include "qwaylandscreen_p.h"
-+
-+#include <QtCore/QDebug>
-+
-+QT_BEGIN_NAMESPACE
-+
-+QWaylandXdgShell::QWaylandXdgShell(struct ::xdg_shell *shell)
-+ : QtWayland::xdg_shell(shell)
-+{
-+}
-+
-+QWaylandXdgShell::QWaylandXdgShell(struct ::wl_registry *registry, uint32_t id)
-+ : QtWayland::xdg_shell(registry, id)
-+{
-+ use_unstable_version(QtWayland::xdg_shell::version_current);
-+}
-+
-+QWaylandXdgShell::~QWaylandXdgShell()
-+{
-+ xdg_shell_destroy(object());
-+}
-+
-+
-+void QWaylandXdgShell::xdg_shell_ping(uint32_t serial)
-+{
-+ pong(serial);
-+}
-+
-+
-+QT_END_NAMESPACE
-diff --git a/src/client/qwaylandxdgshell_p.h b/src/client/qwaylandxdgshell_p.h
-new file mode 100644
-index 0000000..6a396bd
---- /dev/null
-+++ b/src/client/qwaylandxdgshell_p.h
-@@ -0,0 +1,73 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2014 Eurogiciel, author: <philippe.coval@eurogiciel.fr>
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#ifndef QWAYLANDXDGSHELL_H
-+#define QWAYLANDXDGSHELL_H
-+
-+#include <QtCore/QSize>
-+
-+#include <wayland-client.h>
-+
-+#include <QtWaylandClient/private/qwayland-xdg-shell.h>
-+#include <QtWaylandClient/private/qwaylandclientexport_p.h>
-+#include "qwaylandshellsurface_p.h"
-+
-+QT_BEGIN_NAMESPACE
-+
-+class QWaylandWindow;
-+class QWaylandInputDevice;
-+class QWindow;
-+
-+class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgShell : public QtWayland::xdg_shell
-+{
-+public:
-+ QWaylandXdgShell(struct ::xdg_shell *shell);
-+ QWaylandXdgShell(struct ::wl_registry *registry, uint32_t id);
-+
-+ virtual ~QWaylandXdgShell();
-+
-+private:
-+ void xdg_shell_ping(uint32_t serial) Q_DECL_OVERRIDE;
-+};
-+
-+QT_END_NAMESPACE
-+
-+#endif // QWAYLANDXDGSHELL_H
-diff --git a/src/client/qwaylandxdgsurface.cpp b/src/client/qwaylandxdgsurface.cpp
-index 1b8affa..5fb74d2 100644
---- a/src/client/qwaylandxdgsurface.cpp
-+++ b/src/client/qwaylandxdgsurface.cpp
-@@ -87,23 +87,25 @@ void QWaylandXdgSurface::move(QWaylandInputDevice *inputDevice)
-
- void QWaylandXdgSurface::setMaximized()
- {
-- m_maximized = true;
-- m_size = m_window->window()->geometry().size();
-- set_maximized();
-+ if (!m_maximized)
-+ request_change_state(XDG_SURFACE_STATE_MAXIMIZED, true, 0);
- }
-
- void QWaylandXdgSurface::setFullscreen()
- {
-- m_fullscreen = true;
-- m_size = m_window->window()->geometry().size();
-- set_fullscreen();
-+ if (!m_fullscreen)
-+ request_change_state(XDG_SURFACE_STATE_FULLSCREEN, true, 0);
- }
-
- void QWaylandXdgSurface::setNormal()
- {
- if (m_fullscreen || m_maximized || m_minimized) {
-- if (m_maximized) { unset_maximized(); }
-- if (m_fullscreen) { unset_fullscreen(); }
-+ if (m_maximized) {
-+ request_change_state(XDG_SURFACE_STATE_MAXIMIZED, false, 0);
-+ }
-+ if (m_fullscreen) {
-+ request_change_state(XDG_SURFACE_STATE_FULLSCREEN, false, 0);
-+ }
-
- m_fullscreen = m_maximized = m_minimized = false;
- setTopLevel();
-@@ -158,16 +160,48 @@ void QWaylandXdgSurface::setAppId(const QString & appId)
- return QtWayland::xdg_surface::set_app_id(appId);
- }
-
--void QWaylandXdgSurface::xdg_surface_ping(uint32_t serial)
-+void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height)
- {
-- pong(serial);
-+ m_window->configure(0 , width, height);
- }
-
--void QWaylandXdgSurface::xdg_surface_configure(uint32_t edges, int32_t width,
-- int32_t height)
-+void QWaylandXdgSurface::xdg_surface_change_state(uint32_t state,
-+ uint32_t value,
-+ uint32_t serial)
- {
-- m_window->configure(edges, width, height);
-+
-+ if (state == XDG_SURFACE_STATE_MAXIMIZED
-+ || state == XDG_SURFACE_STATE_FULLSCREEN) {
-+ if (value) {
-+ m_size = m_window->window()->geometry().size();
-+ } else {
-+ QMargins m = m_window->frameMargins();
-+ m_window->configure(0, m_size.width() + m.left() + m.right(), m_size.height() + m.top() + m.bottom());
-+ }
-+ }
-+
-+ switch (state) {
-+ case XDG_SURFACE_STATE_MAXIMIZED:
-+ m_maximized = value;
-+ break;
-+ case XDG_SURFACE_STATE_FULLSCREEN:
-+ m_fullscreen = value;
-+ break;
-+ }
-+
-+ xdg_surface_ack_change_state(object(), state, value, serial);
- }
-
-+void QWaylandXdgSurface::xdg_surface_activated()
-+{
-+}
-+
-+void QWaylandXdgSurface::xdg_surface_deactivated()
-+{
-+}
-+
-+void QWaylandXdgSurface::xdg_surface_close()
-+{
-+}
-
- QT_END_NAMESPACE
-diff --git a/src/client/qwaylandxdgsurface_p.h b/src/client/qwaylandxdgsurface_p.h
-index 744d3f3..d2a154e 100644
---- a/src/client/qwaylandxdgsurface_p.h
-+++ b/src/client/qwaylandxdgsurface_p.h
-@@ -93,10 +93,15 @@ private:
- bool m_fullscreen;
- QSize m_size;
-
-- void xdg_surface_ping(uint32_t serial) Q_DECL_OVERRIDE;
-- void xdg_surface_configure(uint32_t edges,
-- int32_t width,
-+ void xdg_surface_configure(int32_t width,
- int32_t height) Q_DECL_OVERRIDE;
-+ void xdg_surface_change_state(uint32_t state,
-+ uint32_t value,
-+ uint32_t serial) Q_DECL_OVERRIDE;
-+ void xdg_surface_activated() Q_DECL_OVERRIDE;
-+ void xdg_surface_deactivated() Q_DECL_OVERRIDE;
-+ void xdg_surface_close() Q_DECL_OVERRIDE;
-+
- friend class QWaylandWindow;
- };
-
---
-1.9.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch
deleted file mode 100644
index 413459fb6..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From b4f032b13338ad6c21024177b031c75063ef7493 Mon Sep 17 00:00:00 2001
-From: Manuel Bachmann <manuel.bachmann@open.eurogiciel.org>
-Date: Sun, 7 Sep 2014 08:19:30 +0200
-Subject: [PATCH 20/21] Add IVI-Shell protocol file version patch v6
-
-Source : http://lists.freedesktop.org/archives/wayland-devel/2014-June/015617.html
-
-This file comes from the last proposed definition of the IVI-Shell protocol,
-and will need to be refreshed on protocol update.
-
-Task-number: QTBUG-XXXXX/part/1of2
-
-Signed-off-by: Manuel Bachmann <manuel.bachmann@open.eurogiciel.org>
----
- src/3rdparty/protocol/ivi-application.xml | 101 ++++++++++++++++++++++++++++++
- 1 file changed, 101 insertions(+)
- create mode 100644 src/3rdparty/protocol/ivi-application.xml
-
-diff --git a/src/3rdparty/protocol/ivi-application.xml b/src/3rdparty/protocol/ivi-application.xml
-new file mode 100644
-index 0000000..833fd38
---- /dev/null
-+++ b/src/3rdparty/protocol/ivi-application.xml
-@@ -0,0 +1,101 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<protocol name="ivi_application">
-+
-+ <copyright>
-+ Copyright (C) 2013 DENSO CORPORATION
-+ Copyright (c) 2013 BMW Car IT GmbH
-+
-+ Permission is hereby granted, free of charge, to any person obtaining a copy
-+ of this software and associated documentation files (the "Software"), to deal
-+ in the Software without restriction, including without limitation the rights
-+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ copies of the Software, and to permit persons to whom the Software is
-+ furnished to do so, subject to the following conditions:
-+
-+ The above copyright notice and this permission notice shall be included in
-+ all copies or substantial portions of the Software.
-+
-+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-+ THE SOFTWARE.
-+ </copyright>
-+
-+ <interface name="ivi_surface" version="1">
-+ <description summary="application interface to surface in ivi compositor"/>
-+
-+ <request name="destroy" type="destructor">
-+ <description summary="destroy ivi_surface">
-+ This removes link from ivi_id to wl_surface and destroys ivi_surface.
-+ </description>
-+ </request>
-+
-+ <event name="visibility">
-+ <description summary="visibility of surface in ivi compositor has changed">
-+ The new visibility state is provided in argument visibility.
-+ If visibility is 0, the surface has become invisible.
-+ If visibility is not 0, the surface has become visible.
-+ </description>
-+ <arg name="visibility" type="int"/>
-+ </event>
-+
-+ <enum name="warning_code">
-+ <description summary="possible warning codes returned by ivi compositor">
-+ These define all possible warning codes returned by ivi compositor on server-side warnings.
-+ invalid_wl_surface:
-+ - wl_surface already has a another role.
-+ - wl_surface is destroyed before the ivi_surface is destroyed.
-+ ivi_id_in_use: ivi_id is already assigned by another application.
-+ </description>
-+ <entry name="invalid_wl_surface" value="1" summary="wl_surface is invalid"/>
-+ <entry name="ivi_id_in_use" value="2" summary="ivi_id is in use and can not be shared"/>
-+ </enum>
-+
-+ <event name="warning">
-+ <description summary="server-side warning detected">
-+ The ivi compositor encountered warning while processing a request by this
-+ application. The warning is defined by argument warning_code and optional
-+ warning_text. If the warning is detected, client shall destroy the ivi_surface
-+ object.
-+
-+ When a warning event is sent, the compositor turns the ivi_surface object inert.
-+ The ivi_surface will not deliver further events, all requests on it are ignored
-+ except 'destroy', and the association to the ivi_id is removed. The client
-+ should destroy the ivi_surface object. If an inert ivi_surface object is used as
-+ an argument to any other object's request, that request will [produce a fatal
-+ error / produce a warning / be ignored].
-+ </description>
-+ <arg name="warning_code" type="int"/>
-+ <arg name="warning_text" type="string" allow-null="true"/>
-+ </event>
-+
-+ </interface>
-+
-+ <interface name="ivi_application" version="1">
-+ <description summary="create ivi-style surfaces">
-+ This interface is implemented by servers that provide desktop-style user interfaces.
-+ It allows clients to associate a ivi_surface with a basic surface.
-+ </description>
-+
-+ <request name="surface_create">
-+ <description summary="create ivi_surface with numeric ID in ivi compositor">
-+ surface_create will create a interface:ivi_surface with numeric ID; ivi_id in
-+ ivi compositor. These ivi_ids are defined as unique in the system to identify
-+ it inside of ivi compositor. The ivi compositor implements business logic how to
-+ set properties of the surface with ivi_id according to status of the system.
-+ E.g. a unique ID for Car Navigation application is used for implementing special
-+ logic of the application about where it shall be located.
-+ if a wl_surface which already has another role is set, the server regards this as
-+ error and disconnects the client.
-+ </description>
-+ <arg name="ivi_id" type="uint"/>
-+ <arg name="surface" type="object" interface="wl_surface"/>
-+ <arg name="id" type="new_id" interface="ivi_surface"/>
-+ </request>
-+
-+ </interface>
-+
-+</protocol>
---
-1.9.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0021-Implement-initial-IVI-Shell-support.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0021-Implement-initial-IVI-Shell-support.patch
deleted file mode 100644
index 8723def26..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0021-Implement-initial-IVI-Shell-support.patch
+++ /dev/null
@@ -1,539 +0,0 @@
-From 1ddfa43692cabae0f552351cfbc09377e479471e Mon Sep 17 00:00:00 2001
-From: Manuel Bachmann <manuel.bachmann@open.eurogiciel.org>
-Date: Mon, 8 Sep 2014 11:38:01 +0200
-Subject: [PATCH 21/21] Implement initial IVI-Shell support
-
-IVI-Shell provides a shell interface for Weston, which maps the GENIVI API (http://www.genivi.org) for In-Vehicle Infotainment.
-
-This patch enables detecting the IVI-Shell interface at runtime, and creating compatible surfaces if found.
-
-Task-number: QTBUG-XXXXX/part/2of2
-
-Change-Id: I1f6c11bf56b727a54fb48faab9c076b61d635440
-Signed-off-by: Manuel Bachmann <manuel.bachmann@open.eurogiciel.org>
----
- src/client/client.pro | 5 ++
- src/client/qwaylanddisplay.cpp | 9 ++++
- src/client/qwaylanddisplay_p.h | 5 ++
- src/client/qwaylandivishell.cpp | 69 +++++++++++++++++++++++++
- src/client/qwaylandivishell_p.h | 70 +++++++++++++++++++++++++
- src/client/qwaylandivisurface.cpp | 105 ++++++++++++++++++++++++++++++++++++++
- src/client/qwaylandivisurface_p.h | 90 ++++++++++++++++++++++++++++++++
- src/client/qwaylandwindow.cpp | 8 ++-
- 8 files changed, 360 insertions(+), 1 deletion(-)
- create mode 100644 src/client/qwaylandivishell.cpp
- create mode 100644 src/client/qwaylandivishell_p.h
- create mode 100644 src/client/qwaylandivisurface.cpp
- create mode 100644 src/client/qwaylandivisurface_p.h
-
-diff --git a/src/client/client.pro b/src/client/client.pro
-index 73e3b7f..adb526d 100644
---- a/src/client/client.pro
-+++ b/src/client/client.pro
-@@ -42,6 +42,7 @@ WAYLANDCLIENTSOURCES += \
- ../extensions/windowmanager.xml \
- ../3rdparty/protocol/text.xml \
- ../3rdparty/protocol/xdg-shell.xml \
-+ ../3rdparty/protocol/ivi-application.xml \
-
- SOURCES += qwaylandintegration.cpp \
- qwaylandnativeinterface.cpp \
-@@ -61,6 +62,8 @@ SOURCES += qwaylandintegration.cpp \
- qwaylandwlshellsurface.cpp \
- qwaylandxdgshell.cpp \
- qwaylandxdgsurface.cpp \
-+ qwaylandivishell.cpp \
-+ qwaylandivisurface.cpp \
- qwaylandextendedoutput.cpp \
- qwaylandextendedsurface.cpp \
- qwaylandsubsurface.cpp \
-@@ -92,6 +95,8 @@ HEADERS += qwaylandintegration_p.h \
- qwaylandwlshellsurface_p.h \
- qwaylandxdgshell_p.h \
- qwaylandxdgsurface_p.h \
-+ qwaylandivishell_p.h \
-+ qwaylandivisurface_p.h \
- qwaylandextendedoutput_p.h \
- qwaylandextendedsurface_p.h \
- qwaylandsubsurface_p.h \
-diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
-index 2e25672..2a93db7 100644
---- a/src/client/qwaylanddisplay.cpp
-+++ b/src/client/qwaylanddisplay.cpp
-@@ -51,6 +51,7 @@
- #include "qwaylanddatadevicemanager_p.h"
- #include "qwaylandhardwareintegration_p.h"
- #include "qwaylandxdgshell_p.h"
-+#include "qwaylandivishell_p.h"
-
- #include "qwaylandwindowmanagerintegration_p.h"
-
-@@ -62,6 +63,7 @@
-
- #include <QtWaylandClient/private/qwayland-text.h>
- #include <QtWaylandClient/private/qwayland-xdg-shell.h>
-+#include <QtWaylandClient/private/qwayland-ivi-application.h>
-
- #include <QtCore/QAbstractEventDispatcher>
- #include <QtGui/private/qguiapplication_p.h>
-@@ -207,6 +209,8 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
- mCompositor.init(registry, id);
- } else if (interface == QStringLiteral("wl_shm")) {
- mShm = static_cast<struct wl_shm *>(wl_registry_bind(registry, id, &wl_shm_interface,1));
-+ } else if (interface == QStringLiteral("ivi_application")) {
-+ mShellIvi.reset(new QWaylandIviShell(registry,id));
- } else if (interface == QStringLiteral("xdg_shell")
- && qEnvironmentVariableIsSet("QT_WAYLAND_USE_XDG_SHELL")) {
- mShellXdg.reset(new QWaylandXdgShell(registry,id));
-@@ -279,4 +283,9 @@ QtWayland::xdg_shell *QWaylandDisplay::shellXdg()
- return mShellXdg.data();
- }
-
-+QtWayland::ivi_application *QWaylandDisplay::shellIvi()
-+{
-+ return mShellIvi.data();
-+}
-+
- QT_END_NAMESPACE
-diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
-index f1b35a7..b9c686c 100644
---- a/src/client/qwaylanddisplay_p.h
-+++ b/src/client/qwaylanddisplay_p.h
-@@ -52,6 +52,7 @@
- #include <QtWaylandClient/private/qwayland-wayland.h>
- #include <QtWaylandClient/private/qwaylandclientexport_p.h>
- #include <QtWaylandClient/private/qwayland-xdg-shell.h>
-+#include <QtWaylandClient/private/qwayland-ivi-application.h>
-
- struct wl_cursor_image;
-
-@@ -72,6 +73,7 @@ class QWaylandWindow;
- class QWaylandEventThread;
- class QWaylandIntegration;
- class QWaylandHardwareIntegration;
-+class QWaylandIviShell;
- class QWaylandXdgShell;
-
- namespace QtWayland {
-@@ -81,6 +83,7 @@ namespace QtWayland {
- class qt_surface_extension;
- class wl_text_input_manager;
- class xdg_shell;
-+ class ivi_application;
- }
-
- typedef void (*RegistryListener)(void *data,
-@@ -117,6 +120,7 @@ public:
-
- QtWayland::wl_shell *shell() { return mShell.data(); }
- QtWayland::xdg_shell *shellXdg();
-+ QtWayland::ivi_application *shellIvi();
-
- QList<QWaylandInputDevice *> inputDevices() const { return mInputDevices; }
- QWaylandInputDevice *defaultInputDevice() const;
-@@ -173,6 +177,7 @@ private:
- QWaylandEventThread *mEventThreadObject;
- QScopedPointer<QtWayland::wl_shell> mShell;
- QScopedPointer<QWaylandXdgShell> mShellXdg;
-+ QScopedPointer<QWaylandIviShell> mShellIvi;
- QList<QPlatformScreen *> mScreens;
- QList<QWaylandInputDevice *> mInputDevices;
- QList<Listener> mRegistryListeners;
-diff --git a/src/client/qwaylandivishell.cpp b/src/client/qwaylandivishell.cpp
-new file mode 100644
-index 0000000..9d63d0d
---- /dev/null
-+++ b/src/client/qwaylandivishell.cpp
-@@ -0,0 +1,69 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2014 Eurogiciel, author: <manuel.bachmann@open.eurogiciel.org>
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#include "qwaylandivishell_p.h"
-+
-+#include "qwaylanddisplay_p.h"
-+#include "qwaylandwindow_p.h"
-+#include "qwaylandinputdevice_p.h"
-+#include "qwaylanddecoration_p.h"
-+#include "qwaylandscreen_p.h"
-+
-+#include <QtCore/QDebug>
-+
-+QT_BEGIN_NAMESPACE
-+
-+QWaylandIviShell::QWaylandIviShell(struct ::ivi_application *shell)
-+ : QtWayland::ivi_application(shell)
-+{
-+}
-+
-+QWaylandIviShell::QWaylandIviShell(struct ::wl_registry *registry, uint32_t id)
-+ : QtWayland::ivi_application(registry, id)
-+{
-+}
-+
-+QWaylandIviShell::~QWaylandIviShell()
-+{
-+ ivi_application_destroy(object());
-+}
-+
-+QT_END_NAMESPACE
-diff --git a/src/client/qwaylandivishell_p.h b/src/client/qwaylandivishell_p.h
-new file mode 100644
-index 0000000..f9f6983
---- /dev/null
-+++ b/src/client/qwaylandivishell_p.h
-@@ -0,0 +1,70 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2014 Eurogiciel, author: <manuel.bachmann@open.eurogiciel.org>
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#ifndef QWAYLANDIVISHELL_H
-+#define QWAYLANDIVISHELL_H
-+
-+#include <QtCore/QSize>
-+
-+#include <wayland-client.h>
-+
-+#include <QtWaylandClient/private/qwayland-ivi-application.h>
-+#include <QtWaylandClient/private/qwaylandclientexport_p.h>
-+#include "qwaylandshellsurface_p.h"
-+
-+QT_BEGIN_NAMESPACE
-+
-+class QWaylandWindow;
-+class QWaylandInputDevice;
-+class QWindow;
-+
-+class Q_WAYLAND_CLIENT_EXPORT QWaylandIviShell : public QtWayland::ivi_application
-+{
-+public:
-+ QWaylandIviShell(struct ::ivi_application *shell);
-+ QWaylandIviShell(struct ::wl_registry *registry, uint32_t id);
-+
-+ virtual ~QWaylandIviShell();
-+};
-+
-+QT_END_NAMESPACE
-+
-+#endif // QWAYLANDIVISHELL_H
-diff --git a/src/client/qwaylandivisurface.cpp b/src/client/qwaylandivisurface.cpp
-new file mode 100644
-index 0000000..a12309e
---- /dev/null
-+++ b/src/client/qwaylandivisurface.cpp
-@@ -0,0 +1,105 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#include "qwaylandivisurface_p.h"
-+
-+#include "qwaylanddisplay_p.h"
-+#include "qwaylandwindow_p.h"
-+#include "qwaylandinputdevice_p.h"
-+#include "qwaylanddecoration_p.h"
-+#include "qwaylandscreen_p.h"
-+
-+#include <QtCore/QDebug>
-+
-+QT_BEGIN_NAMESPACE
-+
-+QWaylandIviSurface::QWaylandIviSurface(struct ::ivi_surface *ivi_surface, QWaylandWindow *window)
-+ : QtWayland::ivi_surface(ivi_surface)
-+ , m_window(window)
-+{
-+}
-+
-+QWaylandIviSurface::~QWaylandIviSurface()
-+{
-+ ivi_surface_destroy(object());
-+}
-+
-+void QWaylandIviSurface::resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges)
-+{
-+}
-+
-+void QWaylandIviSurface::move(QWaylandInputDevice *inputDevice)
-+{
-+}
-+
-+void QWaylandIviSurface::setMaximized()
-+{
-+}
-+
-+void QWaylandIviSurface::setFullscreen()
-+{
-+}
-+
-+void QWaylandIviSurface::setNormal()
-+{
-+}
-+
-+void QWaylandIviSurface::setMinimized()
-+{
-+}
-+
-+void QWaylandIviSurface::setTopLevel()
-+{
-+}
-+
-+void QWaylandIviSurface::updateTransientParent(QWindow *parent)
-+{
-+}
-+
-+void QWaylandIviSurface::setTitle(const QString & title)
-+{
-+}
-+
-+void QWaylandIviSurface::setAppId(const QString & appId)
-+{
-+}
-+
-+QT_END_NAMESPACE
-diff --git a/src/client/qwaylandivisurface_p.h b/src/client/qwaylandivisurface_p.h
-new file mode 100644
-index 0000000..c6a7ce6
---- /dev/null
-+++ b/src/client/qwaylandivisurface_p.h
-@@ -0,0 +1,90 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-+** Contact: http://www.qt-project.org/legal
-+**
-+** This file is part of the config.tests of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:LGPL$
-+** Commercial License Usage
-+** Licensees holding valid commercial Qt licenses may use this file in
-+** accordance with the commercial license agreement provided with the
-+** Software or, alternatively, in accordance with the terms contained in
-+** a written agreement between you and Digia. For licensing terms and
-+** conditions see http://qt.digia.com/licensing. For further information
-+** use the contact form at http://qt.digia.com/contact-us.
-+**
-+** GNU Lesser General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU Lesser
-+** General Public License version 2.1 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.LGPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU Lesser General Public License version 2.1 requirements
-+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-+**
-+** In addition, as a special exception, Digia gives you certain additional
-+** rights. These rights are described in the Digia Qt LGPL Exception
-+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-+**
-+** GNU General Public License Usage
-+** Alternatively, this file may be used under the terms of the GNU
-+** General Public License version 3.0 as published by the Free Software
-+** Foundation and appearing in the file LICENSE.GPL included in the
-+** packaging of this file. Please review the following information to
-+** ensure the GNU General Public License version 3.0 requirements will be
-+** met: http://www.gnu.org/copyleft/gpl.html.
-+**
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+#ifndef QWAYLANDIVISURFACE_H
-+#define QWAYLANDIVISURFACE_H
-+
-+#include <QtCore/QSize>
-+
-+#include <wayland-client.h>
-+
-+#include <QtWaylandClient/private/qwayland-ivi-application.h>
-+#include <QtWaylandClient/private/qwaylandclientexport_p.h>
-+#include "qwaylandshellsurface_p.h"
-+
-+QT_BEGIN_NAMESPACE
-+
-+class QWaylandWindow;
-+class QWaylandInputDevice;
-+class QWindow;
-+class QWaylandExtendedSurface;
-+
-+class Q_WAYLAND_CLIENT_EXPORT QWaylandIviSurface : public QtWayland::ivi_surface
-+ , public QWaylandShellSurface
-+{
-+public:
-+ QWaylandIviSurface(struct ::ivi_surface *shell_surface, QWaylandWindow *window);
-+ virtual ~QWaylandIviSurface();
-+
-+ void resize(QWaylandInputDevice *inputDevice, enum wl_shell_surface_resize edges) Q_DECL_OVERRIDE;
-+ void move(QWaylandInputDevice *inputDevice) Q_DECL_OVERRIDE;
-+
-+ void setTitle(const QString &title) Q_DECL_OVERRIDE;
-+ void setAppId(const QString &appId) Q_DECL_OVERRIDE;
-+
-+private:
-+ void setMaximized() Q_DECL_OVERRIDE;
-+ void setFullscreen() Q_DECL_OVERRIDE;
-+ void setNormal() Q_DECL_OVERRIDE;
-+ void setMinimized() Q_DECL_OVERRIDE;
-+
-+ void setTopLevel() Q_DECL_OVERRIDE;
-+ void updateTransientParent(QWindow *parent) Q_DECL_OVERRIDE;
-+
-+private:
-+ QWaylandWindow *m_window;
-+
-+ friend class QWaylandWindow;
-+};
-+
-+QT_END_NAMESPACE
-+
-+#endif // QWAYLANDIVISURFACE_H
-diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
-index 3fb3a49..45a58f2 100644
---- a/src/client/qwaylandwindow.cpp
-+++ b/src/client/qwaylandwindow.cpp
-@@ -39,6 +39,8 @@
- **
- ****************************************************************************/
-
-+#include <unistd.h>
-+
- #include "qwaylandwindow_p.h"
-
- #include "qwaylandbuffer_p.h"
-@@ -48,10 +50,12 @@
- #include "qwaylandshellsurface_p.h"
- #include "qwaylandwlshellsurface_p.h"
- #include "qwaylandxdgsurface_p.h"
-+#include "qwaylandivisurface_p.h"
- #include "qwaylandextendedsurface_p.h"
- #include "qwaylandsubsurface_p.h"
- #include "qwaylanddecoration_p.h"
- #include "qwaylandwindowmanagerintegration_p.h"
-+#define IVI_SURFACE_ID 8000
-
- #include <QtCore/QFileInfo>
- #include <QtGui/QWindow>
-@@ -95,7 +99,9 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
- mWindowId = id++;
-
- if (!(window->flags() & Qt::BypassWindowManagerHint)) {
-- if (mDisplay->shellXdg()) {
-+ if (mDisplay->shellIvi()) {
-+ mShellSurface = new QWaylandIviSurface(mDisplay->shellIvi()->surface_create(IVI_SURFACE_ID + getpid(), object()), this);
-+ } else if (mDisplay->shellXdg()) {
- if (window->type() & Qt::Window) {
- mShellSurface = new QWaylandXdgSurface(mDisplay->shellXdg()->get_xdg_surface(object()), this);
- }
---
-1.9.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0099_qtwayland_no_evdev.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0099_qtwayland_no_evdev.patch
deleted file mode 100644
index 984ae8132..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/0099_qtwayland_no_evdev.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/tests/auto/compositor/compositor/compositor.pro b/tests/auto/compositor/compositor/compositor.pro
-index 2919fa4..d9acac3 100644
---- a/tests/auto/compositor/compositor/compositor.pro
-+++ b/tests/auto/compositor/compositor/compositor.pro
-@@ -7,9 +7,6 @@ QT += core-private gui-private waylandcompositor waylandcompositor-private
-
- QMAKE_USE += wayland-client wayland-server
-
--qtConfig(xkbcommon-evdev): \
-- QMAKE_USE += xkbcommon_evdev
--
- WAYLANDCLIENTSOURCES += \
- ../../../../src/3rdparty/protocol/xdg-shell.xml \
- ../../../../src/3rdparty/protocol/ivi-application.xml \
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/UNUSED_NEEDS_CHECK_YOCTO_0018-packaging-enable-xdg-shell-at-runtime.patch b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/UNUSED_NEEDS_CHECK_YOCTO_0018-packaging-enable-xdg-shell-at-runtime.patch
deleted file mode 100644
index bca61b5db..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland/UNUSED_NEEDS_CHECK_YOCTO_0018-packaging-enable-xdg-shell-at-runtime.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 9617c349a212d5407087daf4f4a2386bce94ecc1 Mon Sep 17 00:00:00 2001
-From: Philippe Coval <philippe.coval@open.eurogiciel.org>
-Date: Thu, 12 Jun 2014 11:55:29 +0200
-Subject: [PATCH 18/21] packaging: enable xdg-shell at runtime
-
-Change-Id: Iffbae496f1e09c8fa44a28d4eb515678e3bbb297
-Bug-Tizen: TIVI-3113/part
-Signed-off-by: Philippe Coval <philippe.coval@open.eurogiciel.org>
----
- packaging/qt5-qtwayland.spec | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/packaging/qt5-qtwayland.spec b/packaging/qt5-qtwayland.spec
-index cba18e2..ff32185 100644
---- a/packaging/qt5-qtwayland.spec
-+++ b/packaging/qt5-qtwayland.spec
-@@ -97,6 +97,11 @@ rm -rf %{buildroot}
-
- %post
- /sbin/ldconfig
-+
-+f="/etc/profile.d/qt.sh"
-+grep QT_WAYLAND_USE_XDG_SHELL $f \
-+ || echo "QT_WAYLAND_USE_XDG_SHELL='defined'; export QT_WAYLAND_USE_XDG_SHELL" >> $f
-+
- %postun
- /sbin/ldconfig
-
---
-1.9.1
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland_%.bbappend
deleted file mode 100644
index 2f6072acd..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwayland_%.bbappend
+++ /dev/null
@@ -1,26 +0,0 @@
-FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
-
-# QT_MODULE_BRANCH = "5.4"
-
-# TODO:
-# These patches for IVI-SHELL are tempolary disabled because of issues. And new
-# patches are proposed.
-#
-# file://0020-Add-IVI-Shell-protocol-file-version-patch-v6.patch \
-# file://0021-Implement-initial-IVI-Shell-support.patch \
-# file://0001-protocol-update-3rd-party-ivi-application-protocol.patch \
-# file://0002-qwaylandwindow-add-support-for-IVI-Surface-ID-proper.patch \
-#
-# The xdg-shell merged into upstream, so we don't need these patch anymore.
-# But xdg-shell doesn't work well in current AGL Distro because of
-# mismatch of protocol versions between server(weston) and client(Qt Apps).
-#
-# file://0016-xdg-shell-Add-xdg-shell-protocol-file-version-1.4.0.patch \
-# file://0017-xdg-shell-Add-minimize-feature-to-QWindow-using-wayl.patch \
-# file://0019-xdg-shell-upgrade-to-support-current-version-weston-.patch \
-#
-
-SRC_URI_append = "\
- file://0010-Added-manifest-file-according-to-smack-3-domain-mode.patch \
- "
-
diff --git a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwebkit_%.bbappend b/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwebkit_%.bbappend
deleted file mode 100644
index 0420578e1..000000000
--- a/meta-agl-profile-graphical-qt5/recipes-qt/qt5/qtwebkit_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-PACKAGECONFIG = "gstreamer qtlocation qtmultimedia qtsensors"
diff --git a/meta-agl-profile-graphical/LICENSE b/meta-agl-profile-graphical/LICENSE
deleted file mode 100644
index e8758f89c..000000000
--- a/meta-agl-profile-graphical/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Different components of the AGL layers are under different licenses (a mix
-of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further
-details of the individual licenses.
-
-All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar)
-is MIT licensed unless otherwise stated.
-Source code included in tree for individual recipes (e.g. patches) are under
-the LICENSE stated in the associated recipe (.bb file) unless otherwise stated.
-
-License information for any other files (scripts) is either explicitly stated
-or defaults to GPL version 2 only.
-
-Individual files can contain the following style tags instead of the full
-license text to identify their license:
-
- SPDX-License-Identifier: GPL-2.0-only
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-graphical/LICENSE.GPL-2.0-only b/meta-agl-profile-graphical/LICENSE.GPL-2.0-only
deleted file mode 100644
index 5db3c0a21..000000000
--- a/meta-agl-profile-graphical/LICENSE.GPL-2.0-only
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: GPL-2.0-only
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-graphical/LICENSE.MIT b/meta-agl-profile-graphical/LICENSE.MIT
deleted file mode 100644
index a6919eb7e..000000000
--- a/meta-agl-profile-graphical/LICENSE.MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-graphical/classes/agl-graphical.bbclass b/meta-agl-profile-graphical/classes/agl-graphical.bbclass
deleted file mode 100644
index 65106db18..000000000
--- a/meta-agl-profile-graphical/classes/agl-graphical.bbclass
+++ /dev/null
@@ -1,6 +0,0 @@
-WESTONUSER ??= "display"
-WESTONGROUP ??= "display"
-WESTONARGS ?= "--idle-time=0 --tty=7"
-WESTONLAUNCHARGS ??= "--tty /dev/tty7 --user ${WESTONUSER}"
-DISPLAY_XDG_RUNTIME_DIR ??= "/run/platform/${WESTONUSER}"
-
diff --git a/meta-agl-profile-graphical/conf/layer.conf b/meta-agl-profile-graphical/conf/layer.conf
deleted file mode 100644
index 0a6efea74..000000000
--- a/meta-agl-profile-graphical/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "aglprofilegraphical"
-BBFILE_PATTERN_aglprofilegraphical = "^${LAYERDIR}/"
-BBFILE_PRIORITY_aglprofilegraphical = "70"
-
-LAYERSERIES_COMPAT_aglprofilegraphical = "dunfell"
diff --git a/meta-agl-profile-graphical/recipes-apis/agl-service-homescreen/agl-service-homescreen_git.bb b/meta-agl-profile-graphical/recipes-apis/agl-service-homescreen/agl-service-homescreen_git.bb
deleted file mode 100644
index 7d2661bc0..000000000
--- a/meta-agl-profile-graphical/recipes-apis/agl-service-homescreen/agl-service-homescreen_git.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "Homescreen binding and client library for application"
-DESCRIPTION = "agl-service-homescreen is the binding library"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/apps/agl-service-homescreen"
-SECTION = "HMI"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-DEPENDS = "dbus glib-2.0 af-binder json-c"
-
-inherit cmake aglwgt
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-homescreen;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-S = "${WORKDIR}/git"
diff --git a/meta-agl-profile-graphical/recipes-apis/agl-service-mediaplayer/agl-service-mediaplayer_git.bb b/meta-agl-profile-graphical/recipes-apis/agl-service-mediaplayer/agl-service-mediaplayer_git.bb
deleted file mode 100644
index 4f1757c7d..000000000
--- a/meta-agl-profile-graphical/recipes-apis/agl-service-mediaplayer/agl-service-mediaplayer_git.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Mediaplayer Service Binding"
-DESCRIPTION = "AGL Mediaplayer Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-mediaplayer"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-service-mediaplayer;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c gstreamer1.0 gstreamer1.0-plugins-base"
-RDEPENDS_${PN} = "agl-service-mediascanner agl-service-bluetooth gstreamer1.0-plugins-bad-waylandsink"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-graphical/recipes-apis/agl-service-radio/agl-service-radio_git.bb b/meta-agl-profile-graphical/recipes-apis/agl-service-radio/agl-service-radio_git.bb
deleted file mode 100644
index a46ce128c..000000000
--- a/meta-agl-profile-graphical/recipes-apis/agl-service-radio/agl-service-radio_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Radio Service Binding"
-DESCRIPTION = "AGL Radio Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-radio"
-SECTION = "apps"
-LICENSE = "Apache-2.0 & GPLv2"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \
- file://LICENSE.GPL-2.0-only;md5=751419260aa954499f7abaabaa882bbe"
-
-PV = "1.0+git${SRCPV}"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-radio;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-S = "${WORKDIR}/git"
-
-# build-time dependencies
-DEPENDS = "rtl-sdr glib-2.0 gstreamer1.0 libusb-compat"
-
-inherit cmake aglwgt pkgconfig
diff --git a/meta-agl-profile-graphical/recipes-apis/agl-service-taskmanager/agl-service-taskmanager.bb b/meta-agl-profile-graphical/recipes-apis/agl-service-taskmanager/agl-service-taskmanager.bb
deleted file mode 100644
index 6c5a18107..000000000
--- a/meta-agl-profile-graphical/recipes-apis/agl-service-taskmanager/agl-service-taskmanager.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Task Manager Service Binding"
-DESCRIPTION = "AGL Task Manager Service Binding"
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-taskmanager"
-SECTION = "apps"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-taskmanager;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c procps"
-
-inherit cmake aglwgt pkgconfig
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/hmi-debug/files/hmi-debug b/meta-agl-profile-graphical/recipes-graphics/hmi-debug/files/hmi-debug
deleted file mode 100644
index fee9573b7..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/hmi-debug/files/hmi-debug
+++ /dev/null
@@ -1,8 +0,0 @@
-#You can select log level of HMI framework
-#1 ERROR
-#2 WARNING
-#3 NOTICE
-#4 INFO
-#5 DEBUG
-#If you want to output debug log about hmi-framework, please uncomment the following.
-#USE_HMI_DEBUG=5
diff --git a/meta-agl-profile-graphical/recipes-graphics/hmi-debug/hmi-debug_git.bb b/meta-agl-profile-graphical/recipes-graphics/hmi-debug/hmi-debug_git.bb
deleted file mode 100644
index 27fb60d66..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/hmi-debug/hmi-debug_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "Configurations for HMI framework"
-
-SECTION = "HMI"
-LICENSE = "Apache-2.0"
-
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = " \
- file://hmi-debug \
-"
-
-FILES_${PN} = " \
- ${sysconfdir}/afm/unit.env.d \
-"
-
-do_install() {
- install -d ${D}${sysconfdir}/afm/unit.env.d
- install -m 644 ${WORKDIR}/hmi-debug ${D}${sysconfdir}/afm/unit.env.d
-}
diff --git a/meta-agl-profile-graphical/recipes-graphics/libhomescreen/libhomescreen_git.bb b/meta-agl-profile-graphical/recipes-graphics/libhomescreen/libhomescreen_git.bb
deleted file mode 100644
index da511c8a1..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/libhomescreen/libhomescreen_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "AGL Home Screen Library"
-DESCRIPTION = "libhomescreen"
-HOMEPAGE = "http://docs.automotivelinux.org"
-LICENSE = "Apache-2.0"
-SECTION = "libs"
-
-BBCLASSEXTEND = " nativesdk"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
-
-DEPENDS = "af-binder json-c"
-
-inherit cmake
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/libhomescreen.git;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "0d65d54ba63508c0ef545d02e94d5702f9c8ecb3"
-S = "${WORKDIR}/git"
-
-RDEPENDS_${PN} = "agl-service-homescreen"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/Readme.weston-ini-conf b/meta-agl-profile-graphical/recipes-graphics/wayland/Readme.weston-ini-conf
deleted file mode 100644
index bbd5a80c4..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/Readme.weston-ini-conf
+++ /dev/null
@@ -1,34 +0,0 @@
-##Generate a weston.ini file:
-
-To modify any of the default sections (core, shell, ivi-shell), add a
-do_configure() function to your bbappend:
-
-'''
-do_configure() {
- echo repaint-window=34 >> ${WORKDIR}/core.cfg
-
- echo transition-duration=300 >> ${WORKDIR}/ivishell.cfg
- echo cursor-theme=default >> ${WORKDIR}/ivishell.cfg
-}
-'''
-or:
-'''
-do_configure() {
- sed -i -e 's/drm-backend/fbdev-backend/' ${WORKDIR}/core.cfg
-}
-'''
-
-To change the display from the default assumption of an HDMI-1-A connected
-screen that needs to be rotated 270 degrees:
-
-'''
-SRC_URI_remove = "file://hdmi-a-1-270.cfg"
-SRC_URI += "file://hdmi-a-1-90.cfg"
-'''
-
-To add new sections just list them in SRC_URI:
-'''
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "file://dsi.cfg"
-'''
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/agl-compositor_git.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/agl-compositor_git.bb
deleted file mode 100644
index b7a672c39..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/agl-compositor_git.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Reference Wayland compositor for AGL"
-DESCRIPTION = "The AGL compositor is a reference Wayland server for Automotive \
-Grade Linux, using libweston as a base to provide a graphical environment for \
-the automotive environment."
-
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/q/project:src%252Fagl-compositor"
-SECTION = "x11"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fac6abe0003c4d142ff8fa1f18316df0"
-
-DEPENDS = "wayland wayland-protocols wayland-native weston"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/agl-compositor.git;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "9bb8ea6f6156502bf1639ce349907b391e9b124d"
-
-PV = "0.0.10+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-PACKAGECONFIG[policy-deny-all] = "-Dpolicy-default=deny-all,,"
-
-inherit meson pkgconfig python3native
-
-FILES_${PN} = " \
- ${bindir}/agl-compositor \
- ${bindir}/agl-screenshooter \
- ${datadir}/${PN}/protocols/agl-shell.xml \
- ${datadir}/${PN}/protocols/agl-shell-desktop.xml \
- "
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham-transmitter_git.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham-transmitter_git.bb
deleted file mode 100644
index 89d97f513..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham-transmitter_git.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-DESCRIPTION = "Waltham is a network IPC library designed to resemble Wayland both protocol and protocol-API wise"
-HOMEPAGE = "https://github.com/waltham/waltham"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://waltham-transmitter/COPYING;md5=f21c9af4de068fb53b83f0b37d262ec3"
-
-DEPENDS += "libdrm virtual/kernel wayland wayland-native waltham weston gstreamer1.0 gstreamer gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad wayland-ivi-extension"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/weston-ivi-plugins.git;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "5287483228fa1e28f3217a54606cfe760c6582bd"
-
-S = "${WORKDIR}/git/"
-
-WALTHAM_PIPELINE_TRANSMITTER ?= "waltham-transmitter/waltham-renderer/pipeline_example_general.cfg"
-WALTHAM_PIPELINE_RECEIVER ?= "waltham-receiver/receiver_pipeline_example_general.cfg"
-WALTHAM_RECIEVER_IP ?= "192.168.1.2"
-WALTHAM_RECEIVER_PORT ?= "3440"
-
-inherit pkgconfig cmake
-
-do_install_append () {
- install -d ${D}/etc/xdg/weston/
- install ${S}/${WALTHAM_PIPELINE_TRANSMITTER} ${D}/etc/xdg/weston/transmitter_pipeline.cfg
- install ${S}/${WALTHAM_PIPELINE_RECEIVER} ${D}/etc/xdg/weston/receiver_pipeline.cfg
-
- sed -i -e "s/YOUR_RECIEVER_IP/${WALTHAM_RECIEVER_IP}/g" ${D}/etc/xdg/weston/transmitter_pipeline.cfg
- sed -i -e "s/YOUR_RECIEVER_PORT/${WALTHAM_RECEIVER_PORT}/g" ${D}/etc/xdg/weston/transmitter_pipeline.cfg
- sed -i -e "s/YOUR_RECIEVER_PORT/${WALTHAM_RECEIVER_PORT}/g" ${D}/etc/xdg/weston/receiver_pipeline.cfg
-
-}
-
-FILES_${PN} += "/etc/xdg/weston/*.cfg"
-FILES_${PN} += "${libdir}/*"
-FILES_${PN} += "${bindir}/*"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch
deleted file mode 100644
index 32c2df3c4..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-Use-python3-instead-of-2.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 6ecdf10a10929164f3cbdb754ae91d27576e5036 Mon Sep 17 00:00:00 2001
-From: Marius Vlad <marius.vlad@collabora.com>
-Date: Fri, 16 Oct 2020 18:57:38 +0300
-Subject: [PATCH] Use python3 instead of 2
-
-Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
----
- configure.ac | 2 +-
- tools/gen.py | 6 +++---
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 5f65a6b..94b8644 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -32,7 +32,7 @@ AC_SUBST(VERSION_INFO)
- # Check for programs
- AC_PROG_CC
- AC_PROG_CC_STDC
--AC_CHECK_PROGS([PYTHON2], [python2 python])
-+AC_CHECK_PROGS([PYTHON3], [python3 python])
- PKG_PROG_PKG_CONFIG()
-
- AC_ARG_ENABLE(gprof,
-diff --git a/tools/gen.py b/tools/gen.py
-index 19e8baa..64c5870 100755
---- a/tools/gen.py
-+++ b/tools/gen.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python2
-+#!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
- # Copyright © 2013-2014 Collabora, Ltd.
-@@ -562,11 +562,11 @@ try:
- opts, args = getopt.getopt(sys.argv[1:], "hp:i:o:t:m:",
- ["preamble=", "input=", "output=", "type=", "mode="])
- except getopt.GetoptError:
-- print 'gen.py -p <preamblefile> -i <inputfile> -o <outputfile> -t <type> -m <mode>'
-+ print('gen.py -p <preamblefile> -i <inputfile> -o <outputfile> -t <type> -m <mode>')
- sys.exit(2)
- for opt, arg in opts:
- if opt == '-h':
-- print 'gen.py -p <preamblefile> -i <inputfile> -o <outputfile> -t <type> -m <mode>'
-+ print('gen.py -p <preamblefile> -i <inputfile> -o <outputfile> -t <type> -m <mode>')
- sys.exit()
- elif opt in ("-p", "--preamble"):
- preamble_files.append(arg)
---
-2.28.0
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch
deleted file mode 100644
index 354bcbc15..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0001-waltham-Fix-compile-build-error.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From cc87dddc2cdc0c20b053e3da1197efd671b4f50c Mon Sep 17 00:00:00 2001
-From: Marius Vlad <marius.vlad@collabora.com>
-Date: Wed, 23 Sep 2020 22:33:50 +0300
-Subject: [PATCH 1/2] waltham: Fix compile build error
-
-Newer compilers will complain about the fact debug_message is declared
-multiple times:
-
-multiple definition of `debug_message';
-.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35:
-first defined here multiple definition of `debug_message';
-.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35:
-first defined here /usr/bin/ld:
-.libs/client-serialice.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35:
-multiple definition of `debug_message';
-.libs/marshaller.o:/home/mvlad/src/native-agl-weston8/waltham/waltham/src/waltham/marshaller_log.h:35:
-first defined here
-
-Bug-AGL: SPEC-3649
-
-Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
----
- src/waltham/marshaller_log.h | 2 +-
- src/waltham/waltham-util.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/waltham/marshaller_log.h b/src/waltham/marshaller_log.h
-index 8254914..ffa87c1 100644
---- a/src/waltham/marshaller_log.h
-+++ b/src/waltham/marshaller_log.h
-@@ -32,7 +32,7 @@
- /* Comment/uncomment to disable/enable debugging log */
- #define DEBUG
- //#define PROFILE
--int debug_message;
-+extern int debug_message;
-
- #ifdef DEBUG
- static inline void DEBUG_STAMP (void) {
-diff --git a/src/waltham/waltham-util.c b/src/waltham/waltham-util.c
-index 410b114..8f898f8 100644
---- a/src/waltham/waltham-util.c
-+++ b/src/waltham/waltham-util.c
-@@ -34,7 +34,7 @@
- #include "waltham-connection.h"
- #include "waltham-private.h"
-
--int debug_message;
-+extern int debug_message;
-
- static void
- wth_pfx_print(const char *pfx, const char *fmt, va_list argp)
---
-2.28.0
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch
deleted file mode 100644
index 5aefb922b..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham/0002-commandxml-Add-support-wthp_app_id-interface.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From d30005429fe92daa14151c2a6175d5cf19506cac Mon Sep 17 00:00:00 2001
-From: Marius Vlad <marius.vlad@collabora.com>
-Date: Wed, 7 Oct 2020 16:36:38 +0300
-Subject: [PATCH 2/2] commandxml: Add support wthp_app_id interface
-
-With it, we hang off the app_id which we can use to pass it to the
-receiver side.
-
-Bug-AGL: SPEC-3601
-
-Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
----
- data/command.xml | 29 +++++++++++++++++++++++++++++
- src/waltham/header-preamble.txt | 1 +
- 2 files changed, 30 insertions(+)
-
-diff --git a/data/command.xml b/data/command.xml
-index a03082b..cb53f75 100644
---- a/data/command.xml
-+++ b/data/command.xml
-@@ -1814,6 +1814,35 @@
-
- </interface>
-
-+ <interface name="wthp_ivi_app_id" version="1">
-+ <description summary="create ivi-style surfaces">
-+ This interface is exposed as a global singleton.
-+ This interface is implemented by servers that provide IVI-style user interfaces.
-+ It allows clients to associate an ivi_surface with wthp_surface.
-+ </description>
-+
-+ <enum name="error">
-+ <entry name="role" value="0" summary="given wthp_surface has another role"/>
-+ </enum>
-+
-+ <request name="surface_create">
-+ <description summary="create ivi_surface with app_id in ivi compositor">
-+ This request gives the wthp_surface the role of an IVI Surface. Creating more than
-+ one ivi_surface for a wthp_surface is not allowed. Note, that this still allows the
-+ following example:
-+
-+ 1. create a wthp_surface
-+ 2. create ivi_surface for the wthp_surface
-+ 3. destroy the ivi_surface
-+
-+ </description>
-+ <arg name="app_id" type="string"/>
-+ <arg name="surface" type="object" interface="wthp_surface"/>
-+ <arg name="id" type="new_id" interface="wthp_ivi_surface"/>
-+ </request>
-+
-+ </interface>
-+
- <interface name="dummy" version="1">
- <request name="dummy_request">
- </request>
-diff --git a/src/waltham/header-preamble.txt b/src/waltham/header-preamble.txt
-index df765cc..2409859 100644
---- a/src/waltham/header-preamble.txt
-+++ b/src/waltham/header-preamble.txt
-@@ -50,5 +50,6 @@ struct wthp_touch;
-
- struct wthp_ivi_surface;
- struct wthp_ivi_application;
-+struct wthp_ivi_app_id;
-
- struct dummy;
---
-2.28.0
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_%.bbappend b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_%.bbappend
deleted file mode 100644
index 8d0436a3b..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_%.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI_append = "\
- file://0001-waltham-Fix-compile-build-error.patch \
- file://0002-commandxml-Add-support-wthp_app_id-interface.patch \
- file://0001-Use-python3-instead-of-2.patch \
- "
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_git.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_git.bb
deleted file mode 100644
index 01023a1f2..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/waltham_git.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-DESCRIPTION = "Waltham is a network IPC library designed to resemble Wayland both protocol and protocol-API wise"
-HOMEPAGE = "https://github.com/waltham/waltham"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = " \
- file://LICENSE;md5=e8ad01a5182f2c1b3a2640e9ea268264 \
-"
-SRCREV = "1de58c3ff746ddaba7584d760c5454243723d3ca"
-SRC_URI = "git://github.com/wmizuno/waltham.git \
- "
-S = "${WORKDIR}/git"
-
-inherit autotools pkgconfig
-
-DEPENDS += "libdrm virtual/kernel wayland"
-RDEPENDS_${PN} += "libdrm" \ No newline at end of file
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch
deleted file mode 100644
index 7ea0b6e9b..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0001-Added-ivi-id-agent-to-CMake.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 48977cb77410247df547063d9d7bcd381fb13cde Mon Sep 17 00:00:00 2001
-From: Michael Teyfel <mteyfel@de.adit-jv.com>
-Date: Fri, 12 Oct 2018 17:12:24 +0200
-Subject: [PATCH 1/3] Added ivi-id-agent to CMake
-
-Reworked for wayland-ivi-extension 2.2.0 by Scott Murray.
-
-Signed-off-by: Michael Teyfel <mteyfel@de.adit-jv.com>
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 7d0044a..988fc89 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -40,6 +40,7 @@ add_subdirectory(ivi-layermanagement-api/test)
- add_subdirectory(ivi-layermanagement-examples)
- add_subdirectory(ivi-layermanagement-api/ilmInput)
- add_subdirectory(ivi-input-modules/ivi-input-controller)
-+add_subdirectory(ivi-id-agent-modules/ivi-id-agent)
-
-
- #=============================================================================================
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch
deleted file mode 100644
index 9f1ab47b7..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-add-LayerManagerControl-error-status.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-LayerManagerControl: add error exit status
-
-Tweak to add a non-zero exit status on errors. This is useful for
-scripting, and allows writing a simple loop to detect Weston readiness.
-
-Upstream-Status: Pending
-
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp b/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp
-index 8ee0546..210e21e 100644
---- a/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp
-+++ b/ivi-layermanagement-examples/LayerManagerControl/src/main.cpp
-@@ -45,6 +45,7 @@ int main(int argc, char* argv[])
- if (CommandSuccess != interpreter.interpretCommand(userCommand))
- {
- cerr << "Interpreter error: " << interpreter.getLastError() << endl;
-+ return 1;
- }
-
- return 0;
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch
deleted file mode 100644
index 0fe2abb35..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0002-ivi-id-agent-added-ivi-id-agent.patch
+++ /dev/null
@@ -1,530 +0,0 @@
-From 42fc715a430068cdb4484e2cb119418da8ac4e6f Mon Sep 17 00:00:00 2001
-From: Michael Teyfel <mteyfel@de.adit-jv.com>
-Date: Fri, 12 Oct 2018 16:46:57 +0200
-Subject: [PATCH 2/3] ivi-id-agent: added ivi-id-agent
-
-This is a reference implementation of an ivi-id-agent plugin. It
-creates surface-ids for desktop-surfaces depending on the configuration
-provided in "weston.ini". For more please refer to the reference
-implementation in this commit.
-
-The only public interface available is the "id_agent_module_init"
-function. It is responsible for initialization of structs and reading
-the configuration.
-
-In the reference "weston.ini" two types of configurations can be found:
-
-[desktop-app] is used to configure a particular application. Therefore
-the desired surface-id must be provided. Moreover "app-title" is the
-title that is provided by the desktop application (xdg-protocol).
-"app-id" behaves accordingly. Although both parameters can be set, it
-is not mandatory. Finally at least one has to be set.
-
-[desktop-app-default] enables the id-agent to generate generic
-surface-ids for unconfigured applications, e.g. for development. This
-tag is optional. To generate the id an interval starting from
-"default-surface-id" to "default-surface-id-max" is used. The id is
-incremented until the interval is exceeded.
-
-In the function "get_id" a surface-id is assigned by means of the
-configuration. It can be adjusted, if another behavior is desired.
-In this plugin the parameters, that are described above, are evaluated.
-
-To use these patches please also apply the dedicated patches for
-weston: https://github.com/mtey/weston/tree/xdg_support_ivi_id_agent
-Since libweston-desktop is used to introduce desktop-surface support,
-xdg-protocol is supported.
-
-Reworked for wayland-ivi-extension 2.2.0 by Scott Murray.
-
-Signed-off-by: Michael Teyfel <mteyfel@de.adit-jv.com>
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt b/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt
-new file mode 100644
-index 0000000..7354a7e
---- /dev/null
-+++ b/ivi-id-agent-modules/ivi-id-agent/CMakeLists.txt
-@@ -0,0 +1,69 @@
-+###############################################################################
-+#
-+# Copyright (C) 2017 Advanced Driver Information Technology Joint Venture GmbH
-+#
-+#
-+# 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.
-+#
-+###############################################################################
-+
-+cmake_minimum_required (VERSION 2.6)
-+
-+project(ivi-id-agent)
-+
-+find_package(PkgConfig REQUIRED)
-+pkg_check_modules(WAYLAND_SERVER wayland-server REQUIRED)
-+pkg_check_modules(WESTON weston>=5.0.0 REQUIRED)
-+pkg_check_modules(PIXMAN pixman-1 REQUIRED)
-+pkg_check_modules(LIBWESTON_DESKTOP libweston-desktop-8 REQUIRED)
-+
-+find_package(Threads REQUIRED)
-+
-+include_directories(
-+ src
-+ ${WAYLAND_SERVER_INCLUDE_DIRS}
-+ ${WESTON_INCLUDE_DIRS}
-+ ${PIXMAN_INCLUDE_DIRS}
-+)
-+
-+link_directories(
-+ ${WAYLAND_SERVER_LIBRARY_DIRS}
-+ ${PIXMAN_LIBRARY_DIRS}
-+)
-+
-+
-+add_library(${PROJECT_NAME} MODULE
-+ src/ivi-id-agent.c
-+)
-+
-+set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
-+
-+add_dependencies(${PROJECT_NAME}
-+ ${WAYLAND_SERVER_LIBRARIES}
-+ ${PIXMAN_LIBRARIES}
-+)
-+
-+set(LIBS
-+ ${LIBS}
-+ ${WAYLAND_SERVER_LIBRARIES}
-+ ${LIBWESTON_DESKTOP_LIBRARIES}
-+)
-+
-+set(CMAKE_C_LDFLAGS "-module -avoid-version")
-+
-+target_link_libraries(${PROJECT_NAME} ${LIBS})
-+
-+install (
-+ TARGETS ${PROJECT_NAME}
-+ LIBRARY DESTINATION lib${LIB_SUFFIX}/weston
-+)
-diff --git a/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c b/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c
-new file mode 100644
-index 0000000..9bc115d
---- /dev/null
-+++ b/ivi-id-agent-modules/ivi-id-agent/src/ivi-id-agent.c
-@@ -0,0 +1,381 @@
-+/*
-+ * Copyright (C) 2017 Advanced Driver Information Technology Joint Venture GmbH
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and
-+ * its documentation for any purpose is hereby granted without fee, provided
-+ * that the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holders not be used in
-+ * advertising or publicity pertaining to distribution of the software
-+ * without specific, written prior permission. The copyright holders make
-+ * no representations about the suitability of this software for any
-+ * purpose. It is provided "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
-+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
-+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
-+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
-+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ */
-+
-+#include <stdlib.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <limits.h>
-+
-+#include <weston.h>
-+#include <libweston-desktop/libweston-desktop.h>
-+#include "libweston/config-parser.h"
-+#include <weston/ivi-layout-export.h>
-+
-+#ifndef INVALID_ID
-+#define INVALID_ID 0xFFFFFFFF
-+#endif
-+
-+struct db_elem
-+{
-+ struct wl_list link;
-+ uint32_t surface_id;
-+ char *cfg_app_id;
-+ char *cfg_title;
-+ struct ivi_layout_surface *layout_surface;
-+};
-+
-+struct ivi_id_agent
-+{
-+ uint32_t default_behavior_set;
-+ uint32_t default_surface_id;
-+ uint32_t default_surface_id_max;
-+ struct wl_list app_list;
-+ struct weston_compositor *compositor;
-+ const struct ivi_layout_interface *interface;
-+
-+ struct wl_listener desktop_surface_configured;
-+ struct wl_listener destroy_listener;
-+ struct wl_listener surface_removed;
-+};
-+
-+static int32_t
-+check_config_parameter(char *cfg_val, char *val)
-+{
-+ if (cfg_val == NULL)
-+ return IVI_SUCCEEDED;
-+ else if (val == NULL || strcmp(cfg_val, val) != 0)
-+ return IVI_FAILED;
-+
-+ return IVI_SUCCEEDED;
-+}
-+
-+static int32_t
-+get_id_from_config(struct ivi_id_agent *ida, struct ivi_layout_surface
-+ *layout_surface) {
-+ struct db_elem *db_elem;
-+ char *temp_app_id = NULL;
-+ char *temp_title = NULL;
-+ int ret = IVI_FAILED;
-+
-+ struct weston_surface *weston_surface =
-+ ida->interface->surface_get_weston_surface(layout_surface);
-+
-+ /* Get app id and title */
-+ struct weston_desktop_surface *wds = weston_surface_get_desktop_surface(
-+ weston_surface);
-+
-+ if (weston_desktop_surface_get_app_id(wds) != NULL)
-+ temp_app_id = strdup(weston_desktop_surface_get_app_id(wds));
-+
-+ if (weston_desktop_surface_get_title(wds) != NULL)
-+ temp_title = strdup(weston_desktop_surface_get_title(wds));
-+
-+ /*
-+ * Check for every config parameter to be fulfilled. This part must be
-+ * extended, if additional attributes are desired to be checked.
-+ */
-+ wl_list_for_each(db_elem, &ida->app_list, link)
-+ {
-+ if (check_config_parameter(db_elem->cfg_app_id, temp_app_id) == 0) {
-+ if (check_config_parameter(db_elem->cfg_title, temp_title) == 0) {
-+ /* Found configuration for application. */
-+ int res = ida->interface->surface_set_id(layout_surface,
-+ db_elem->surface_id);
-+ if (res)
-+ continue;
-+
-+ db_elem->layout_surface = layout_surface;
-+ ret = IVI_SUCCEEDED;
-+
-+ break;
-+ }
-+ }
-+ }
-+
-+ free(temp_app_id);
-+ free(temp_title);
-+
-+ return ret;
-+}
-+
-+/*
-+ * This function generates the id of a surface in regard to the desired
-+ * parameters. For implementation of different behavior in id generation please
-+ * adjust this function.
-+ * In this implementation the app_id and/or title of the application is used for
-+ * identification. It is also possible to use the pid, uid or gid for example.
-+ */
-+static int32_t
-+get_id(struct ivi_id_agent *ida, struct ivi_layout_surface *layout_surface)
-+{
-+ if (get_id_from_config(ida, layout_surface) == IVI_SUCCEEDED)
-+ return IVI_SUCCEEDED;
-+
-+ /* No default layer available */
-+ if (ida->default_behavior_set == 0) {
-+ weston_log("ivi-id-agent: Could not find configuration for application\n");
-+ goto ivi_failed;
-+
-+ /* Default behavior for unknown applications */
-+ } else if (ida->default_surface_id < ida->default_surface_id_max) {
-+ weston_log("ivi-id-agent: No configuration for application adding to "
-+ "default layer\n");
-+
-+ /*
-+ * Check if ivi-shell application already created an application with
-+ * desired surface_id
-+ */
-+ struct ivi_layout_surface *temp_layout_surf =
-+ ida->interface->get_surface_from_id(
-+ ida->default_surface_id);
-+ if ((temp_layout_surf != NULL) && (temp_layout_surf != layout_surface)) {
-+ weston_log("ivi-id-agent: surface_id already used by an ivi-shell "
-+ "application\n");
-+ goto ivi_failed;
-+ }
-+
-+ ida->interface->surface_set_id(layout_surface,
-+ ida->default_surface_id);
-+ ida->default_surface_id++;
-+
-+ } else {
-+ weston_log("ivi-id-agent: Interval for default surface_id generation "
-+ "exceeded\n");
-+ goto ivi_failed;
-+ }
-+
-+ return IVI_SUCCEEDED;
-+
-+ivi_failed:
-+ return IVI_FAILED;
-+}
-+
-+static void
-+desktop_surface_event_configure(struct wl_listener *listener,
-+ void *data)
-+{
-+ struct ivi_id_agent *ida = wl_container_of(listener, ida,
-+ desktop_surface_configured);
-+
-+ struct ivi_layout_surface *layout_surface =
-+ (struct ivi_layout_surface *) data;
-+
-+ if (get_id(ida, layout_surface) == IVI_FAILED)
-+ weston_log("ivi-id-agent: Could not create surface_id for application\n");
-+}
-+
-+static void
-+surface_event_remove(struct wl_listener *listener, void *data) {
-+ struct ivi_id_agent *ida = wl_container_of(listener, ida,
-+ surface_removed);
-+ struct ivi_layout_surface *layout_surface =
-+ (struct ivi_layout_surface *) data;
-+ struct db_elem *db_elem = NULL;
-+
-+ wl_list_for_each(db_elem, &ida->app_list, link)
-+ {
-+ if(db_elem->layout_surface == layout_surface) {
-+ db_elem->layout_surface = NULL;
-+ break;
-+ }
-+ }
-+}
-+
-+static int32_t deinit(struct ivi_id_agent *ida);
-+
-+static void
-+id_agent_module_deinit(struct wl_listener *listener, void *data) {
-+ (void)data;
-+ struct ivi_id_agent *ida = wl_container_of(listener, ida, destroy_listener);
-+
-+ deinit(ida);
-+}
-+
-+static int32_t
-+check_config(struct db_elem *curr_db_elem, struct ivi_id_agent *ida)
-+{
-+ struct db_elem *db_elem;
-+
-+ if (ida->default_surface_id <= curr_db_elem->surface_id
-+ && curr_db_elem->surface_id <= ida->default_surface_id_max) {
-+ weston_log("ivi-id-agent: surface_id: %d in default id interval "
-+ "[%d, %d] (CONFIG ERROR)\n", curr_db_elem->surface_id,
-+ ida->default_surface_id, ida->default_surface_id_max);
-+ goto ivi_failed;
-+ }
-+
-+ wl_list_for_each(db_elem, &ida->app_list, link)
-+ {
-+ if(curr_db_elem == db_elem)
-+ continue;
-+
-+ if (db_elem->surface_id == curr_db_elem->surface_id) {
-+ weston_log("ivi-id-agent: Duplicate surface_id: %d (CONFIG ERROR)\n",
-+ curr_db_elem->surface_id);
-+ goto ivi_failed;
-+ }
-+ }
-+
-+ return IVI_SUCCEEDED;
-+
-+ivi_failed:
-+ return IVI_FAILED;
-+}
-+
-+static int32_t
-+read_config(struct ivi_id_agent *ida)
-+{
-+ struct weston_config *config = NULL;
-+ struct weston_config_section *section = NULL;
-+ const char *name = NULL;
-+
-+ config = wet_get_config(ida->compositor);
-+ if (!config)
-+ goto ivi_failed;
-+
-+ section = weston_config_get_section(config, "desktop-app-default", NULL,
-+ NULL);
-+
-+ if (section) {
-+ weston_log("ivi-id-agent: Default behavior for unknown applications is "
-+ "set\n");
-+ ida->default_behavior_set = 1;
-+
-+ weston_config_section_get_uint(section, "default-surface-id",
-+ &ida->default_surface_id, INVALID_ID);
-+ weston_config_section_get_uint(section, "default-surface-id-max",
-+ &ida->default_surface_id_max, INVALID_ID);
-+
-+ if (ida->default_surface_id == INVALID_ID ||
-+ ida->default_surface_id_max == INVALID_ID) {
-+ weston_log("ivi-id-agent: Missing configuration for default "
-+ "behavior\n");
-+ ida->default_behavior_set = 0;
-+ }
-+ } else {
-+ ida->default_behavior_set = 0;
-+ }
-+
-+ section = NULL;
-+ while (weston_config_next_section(config, &section, &name)) {
-+ struct db_elem *db_elem = NULL;
-+
-+ if (strcmp(name, "desktop-app") != 0)
-+ continue;
-+
-+ db_elem = calloc(1, sizeof *db_elem);
-+ if (db_elem == NULL) {
-+ weston_log("ivi-id-agent: No memory to allocate\n");
-+ goto ivi_failed;
-+ }
-+
-+ wl_list_insert(&ida->app_list, &db_elem->link);
-+
-+ weston_config_section_get_uint(section, "surface-id",
-+ &db_elem->surface_id, INVALID_ID);
-+
-+ if (db_elem->surface_id == INVALID_ID) {
-+ weston_log("ivi-id-agent: surface-id is not set in configuration\n");
-+ goto ivi_failed;
-+ }
-+
-+ weston_config_section_get_string(section, "app-id",
-+ &db_elem->cfg_app_id, NULL);
-+ weston_config_section_get_string(section, "app-title",
-+ &db_elem->cfg_title, NULL);
-+
-+ if (db_elem->cfg_app_id == NULL && db_elem->cfg_title == NULL) {
-+ weston_log("ivi-id-agent: Every parameter is NULL in app "
-+ "configuration\n");
-+ goto ivi_failed;
-+ }
-+
-+ if (check_config(db_elem, ida) == IVI_FAILED) {
-+ weston_log("ivi-id-agent: No valid config found, deinit...\n");
-+ goto ivi_failed;
-+ }
-+ }
-+
-+ if(ida->default_behavior_set == 0 && wl_list_empty(&ida->app_list)) {
-+ weston_log("ivi-id-agent: No valid config found, deinit...\n");
-+ goto ivi_failed;
-+ }
-+
-+ return IVI_SUCCEEDED;
-+
-+ivi_failed:
-+ return IVI_FAILED;
-+}
-+
-+WL_EXPORT int32_t
-+id_agent_module_init(struct weston_compositor *compositor,
-+ const struct ivi_layout_interface *interface)
-+{
-+ struct ivi_id_agent *ida = NULL;
-+
-+ ida = calloc(1, sizeof *ida);
-+ if (ida == NULL) {
-+ weston_log("failed to allocate ivi_id_agent\n");
-+ goto ivi_failed;
-+ }
-+
-+ ida->compositor = compositor;
-+ ida->interface = interface;
-+ ida->desktop_surface_configured.notify = desktop_surface_event_configure;
-+ ida->destroy_listener.notify = id_agent_module_deinit;
-+ ida->surface_removed.notify = surface_event_remove;
-+
-+ wl_signal_add(&compositor->destroy_signal, &ida->destroy_listener);
-+ ida->interface->add_listener_configure_desktop_surface(
-+ &ida->desktop_surface_configured);
-+ interface->add_listener_remove_surface(&ida->surface_removed);
-+
-+ wl_list_init(&ida->app_list);
-+ if(read_config(ida) != 0) {
-+ weston_log("ivi-id-agent: Read config failed\n");
-+ deinit(ida);
-+ goto ivi_failed;
-+ }
-+
-+ return IVI_SUCCEEDED;
-+
-+ivi_failed:
-+ return IVI_FAILED;
-+}
-+
-+static int32_t
-+deinit(struct ivi_id_agent *ida)
-+{
-+ struct db_elem *db_elem;
-+ wl_list_for_each(db_elem, &ida->app_list, link) {
-+ free(db_elem->cfg_app_id);
-+ free(db_elem->cfg_title);
-+ free(db_elem);
-+ }
-+
-+ wl_list_remove(&ida->desktop_surface_configured.link);
-+ wl_list_remove(&ida->destroy_listener.link);
-+ wl_list_remove(&ida->surface_removed.link);
-+ free(ida);
-+
-+ return IVI_SUCCEEDED;
-+}
-diff --git a/ivi-id-agent-modules/ivi-id-agent/weston.ini.in b/ivi-id-agent-modules/ivi-id-agent/weston.ini.in
-new file mode 100644
-index 0000000..48a196c
---- /dev/null
-+++ b/ivi-id-agent-modules/ivi-id-agent/weston.ini.in
-@@ -0,0 +1,20 @@
-+[core]
-+shell=ivi-shell.so
-+require-input=false
-+
-+[ivi-shell]
-+ivi-module=ivi-controller.so
-+ivi-input-module=ivi-input-controller.so
-+ivi-id-agent-module=ivi-id-agent.so
-+
-+[desktop-app]
-+surface-id=111
-+app-title=Flower
-+
-+[desktop-app]
-+surface-id=251
-+app-title=Flower
-+
-+[desktop-app-default]
-+default-surface-id=2000000
-+default-surface-id-max=2001000
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch
deleted file mode 100644
index 8985879b0..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0003-ivi-controller-load-id-agent-module.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From 5fed5c51ca8c1574804362bfdea4930c16457d34 Mon Sep 17 00:00:00 2001
-From: Michael Teyfel <mteyfel@de.adit-jv.com>
-Date: Fri, 12 Oct 2018 16:57:24 +0200
-Subject: [PATCH 3/3] ivi-controller: load id-agent module
-
-Reworked for wayland-ivi-extension 2.2.0 by Scott Murray.
-
-Signed-off-by: Michael Teyfel <mteyfel@de.adit-jv.com>
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/weston-ivi-shell/src/ivi-controller.c b/weston-ivi-shell/src/ivi-controller.c
-index 8faec2a..8fa51f4 100644
---- a/weston-ivi-shell/src/ivi-controller.c
-+++ b/weston-ivi-shell/src/ivi-controller.c
-@@ -2154,6 +2154,41 @@ load_input_module(struct ivishell *shell)
- return 0;
- }
-
-+static int load_id_agent_module(struct ivishell *shell)
-+{
-+ struct weston_config *config = wet_get_config(shell->compositor);
-+ struct weston_config_section *section;
-+ char *id_agent_module = NULL;
-+
-+ int (*id_agent_module_init)(struct weston_compositor *compositor,
-+ const struct ivi_layout_interface *interface);
-+
-+ section = weston_config_get_section(config, "ivi-shell", NULL, NULL);
-+
-+ if (weston_config_section_get_string(section, "ivi-id-agent-module",
-+ &id_agent_module, NULL) < 0) {
-+ /* input events are handled by weston's default grabs */
-+ weston_log("ivi-controller: No ivi-id-agent-module set\n");
-+ return 0;
-+ }
-+
-+ id_agent_module_init = wet_load_module_entrypoint(id_agent_module, "id_agent_module_init");
-+ if (!id_agent_module_init) {
-+ free(id_agent_module);
-+ return -1;
-+ }
-+
-+ if (id_agent_module_init(shell->compositor, shell->interface) != 0) {
-+ weston_log("ivi-controller: Initialization of id-agent module failed\n");
-+ free(id_agent_module);
-+ return -1;
-+ }
-+
-+ free(id_agent_module);
-+
-+ return 0;
-+}
-+
- static void
- launch_client_process(void *data)
- {
-@@ -2221,6 +2256,10 @@ wet_module_init(struct weston_compositor *compositor,
- shell->destroy_listener.notify = ivi_shell_destroy;
- wl_signal_add(&compositor->destroy_signal, &shell->destroy_listener);
-
-+ if (load_id_agent_module(shell) < 0) {
-+ weston_log("ivi-controller: id-agent module not loaded\n");
-+ }
-+
- if (shell->bkgnd_surface_id && shell->ivi_client_name) {
- loop = wl_display_get_event_loop(compositor->wl_display);
- wl_event_loop_add_idle(loop, launch_client_process, shell);
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch
deleted file mode 100644
index 05d1cc238..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0004-ivi-ilmcontrol-added-focus-notification.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/ivi-layermanagement-api/ilmCommon/include/ilm_types.h b/ivi-layermanagement-api/ilmCommon/include/ilm_types.h
-index a88f2b0..12a2017 100644
---- a/ivi-layermanagement-api/ilmCommon/include/ilm_types.h
-+++ b/ivi-layermanagement-api/ilmCommon/include/ilm_types.h
-@@ -245,6 +245,7 @@ typedef enum
- ILM_NOTIFICATION_CONTENT_AVAILABLE = ILM_BIT(6),
- ILM_NOTIFICATION_CONTENT_REMOVED = ILM_BIT(7),
- ILM_NOTIFICATION_CONFIGURED = ILM_BIT(8),
-+ ILM_NOTIFICATION_FOCUS = ILM_BIT(9),
- ILM_NOTIFICATION_ALL = 0xffff
- } t_ilm_notification_mask;
-
-diff --git a/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c b/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c
-index a912e50..5166839 100644
---- a/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c
-+++ b/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c
-@@ -819,6 +819,12 @@ input_listener_input_focus(void *data,
- surf_ctx->prop.focus |= device;
- else
- surf_ctx->prop.focus &= ~device;
-+
-+ if (surf_ctx->notification != NULL) {
-+ surf_ctx->notification(surf_ctx->id_surface,
-+ &surf_ctx->prop,
-+ ILM_NOTIFICATION_FOCUS);
-+ }
- }
- }
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch
deleted file mode 100644
index 21028d58a..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0005-disable-EGLWLMockNavigation-example-build.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Disable EGLWLMockNavigation example build
-
-The EGLWLMockNavigation example code has build issues on TI platforms.
-To avoid needing to patch it just for those platforms, just disable
-building it since there are no known users inside AGL.
-
-Upstream-Status: Inappropriate [disable feature]
-
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/ivi-layermanagement-examples/CMakeLists.txt b/ivi-layermanagement-examples/CMakeLists.txt
-index 1eab8e9..48bdffd 100644
---- a/ivi-layermanagement-examples/CMakeLists.txt
-+++ b/ivi-layermanagement-examples/CMakeLists.txt
-@@ -24,7 +24,6 @@ project (ivi-layermanagement-examples)
- # cmake configuration
- #===========================================================================================================
- add_subdirectory(LayerManagerControl)
--add_subdirectory(EGLWLMockNavigation)
- add_subdirectory(EGLWLInputEventExample)
- add_subdirectory(layer-add-surfaces)
- add_subdirectory(multi-touch-viewer)
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0006-fix-plugin-registry-include.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0006-fix-plugin-registry-include.patch
deleted file mode 100644
index dddbfd370..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/0006-fix-plugin-registry-include.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c b/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c
-index a0bfc48..257a1dc 100644
---- a/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c
-+++ b/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c
-@@ -31,7 +31,7 @@
- #include <fcntl.h>
- #include <unistd.h>
-
--#include "plugin-registry.h"
-+#include <libweston/plugin-registry.h>
- #include "ilm_types.h"
-
- #include "ivi-input-server-protocol.h"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch
deleted file mode 100644
index 86b448be1..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension/wandboard_fix_build.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 3610fa9..8b4614d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -34,7 +34,7 @@ add_subdirectory(ivi-layermanagement-api/ilmCommon)
- add_subdirectory(ivi-layermanagement-api/ilmClient)
- add_subdirectory(ivi-layermanagement-api/ilmControl)
- add_subdirectory(ivi-layermanagement-api/test)
--add_subdirectory(ivi-layermanagement-examples)
-+#add_subdirectory(ivi-layermanagement-examples)
-
- if(WITH_ILM_INPUT)
- add_subdirectory(ivi-input-api/ilmInput)
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension_git.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension_git.bb
deleted file mode 100644
index 68fc694a8..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland-ivi-extension_git.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "Wayland IVI Extension"
-DESCRIPTION = "GENIVI Layer Management API based on Wayland IVI Extension"
-HOMEPAGE = "http://projects.genivi.org/wayland-ivi-extension"
-BUGTRACKER = "http://bugs.genivi.org/enter_bug.cgi?product=Wayland%20IVI%20Extension"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=1f1a56bb2dadf5f2be8eb342acf4ed79"
-
-SRC_URI = "git://github.com/GENIVI/${BPN}.git;protocol=http \
- file://0001-Added-ivi-id-agent-to-CMake.patch \
- file://0002-ivi-id-agent-added-ivi-id-agent.patch \
- file://0003-ivi-controller-load-id-agent-module.patch \
- file://0002-add-LayerManagerControl-error-status.patch \
- file://0004-ivi-ilmcontrol-added-focus-notification.patch \
- file://0005-disable-EGLWLMockNavigation-example-build.patch \
- file://0006-fix-plugin-registry-include.patch \
-"
-SRC_URI_append_wandboard = " file://wandboard_fix_build.patch"
-SRCREV = "736fb654ac81230cf4f9e51a5772d3a02d7639bf"
-
-PV = "2.2.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "weston virtual/libgles2 pixman wayland-native"
-
-FILESEXTRAPATHS_prepend := ":${THISDIR}/wayland-ivi-extension:"
-
-inherit cmake
-
-EXTRA_OECMAKE := "-DWITH_ILM_INPUT=1"
-
-FILES_${PN} += "${libdir}/weston/*"
-FILES_${PN} += "${datadir}/wayland-protocols/stable/ivi-application/*"
-
-FILES_${PN}-dbg += "${libdir}/weston/.debug/*"
-
-EXTRA_OECMAKE += "-DLIB_SUFFIX=${@d.getVar('baselib', True).replace('lib', '')}"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch
deleted file mode 100644
index d0dcb45af..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland/0001-Change-socket-mode-add-rw-for-group.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 9162f7d4cfeec7103474e8703218b3679ca9ed10 Mon Sep 17 00:00:00 2001
-From: Ronan Le Martret <ronan.lemartret@iot.bzh>
-Date: Tue, 18 Apr 2017 13:53:26 +0200
-Subject: [PATCH] Change socket mode:add rw for group
-
-Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
-[Updated for 1.18.0 to remove fuzz]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
- src/wayland-server.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/wayland-server.c b/src/wayland-server.c
-index 3f48dfe..fbccb45 100644
---- a/src/wayland-server.c
-+++ b/src/wayland-server.c
-@@ -1528,7 +1528,10 @@ _wl_display_add_socket(struct wl_display *display, struct wl_socket *s)
- wl_log("bind() failed with error: %s\n", strerror(errno));
- return -1;
- }
--
-+ if (chmod(s->addr.sun_path, 0660) < 0) {
-+ wl_log("chmod() failed with error: %m\n");
-+ return -1;
-+ }
- if (listen(s->fd, 128) < 0) {
- wl_log("listen() failed with error: %s\n", strerror(errno));
- return -1;
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland_%.bbappend b/meta-agl-profile-graphical/recipes-graphics/wayland/wayland_%.bbappend
deleted file mode 100644
index 9d1822697..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/wayland_%.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI_append = "\
- file://0001-Change-socket-mode-add-rw-for-group.patch \
- "
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend
deleted file mode 100644
index 374e9aa75..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend
+++ /dev/null
@@ -1,69 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-inherit agl-graphical
-
-AGL_DEFAULT_WESTONSTART ??= "/usr/bin/agl-compositor --config ${sysconfdir}/xdg/weston/weston.ini"
-
-WESTONSTART ??= "${AGL_DEFAULT_WESTONSTART} ${WESTONARGS}"
-WESTONSTART_append = " ${@bb.utils.contains("IMAGE_FEATURES", "debug-tweaks", " --log=${DISPLAY_XDG_RUNTIME_DIR}/compositor.log", "",d)}"
-
-WIFILES = " \
- file://weston.conf.in \
- file://tmpfiles.conf.in \
- file://zz-dri.rules.in \
- file://zz-input.rules.in \
- file://zz-tty.rules.in \
-"
-
-WIFILES_append_imx = " \
- file://zz-dri-imx.rules.in \
-"
-
-SRC_URI_append = " ${WIFILES}"
-
-do_install_append() {
- # Remove upstream weston.ini to avoid conflict with weston-ini-conf package
- rm -f ${D}${sysconfdir}/xdg/weston/weston.ini
-
- # Remove upstream weston udev rules just to be safe
- rm -f ${D}${sysconfdir}/udev/rules.d/71-weston-drm.rules
-
- # Process ".in" files
- files=$(echo ${WIFILES} | sed s,file://,,g)
- for f in ${files}; do
- g=${f%.in}
- if [ "${f}" != "${g}" ]; then
- sed -e "s,@WESTONUSER@,${WESTONUSER},g" \
- -e "s,@WESTONGROUP@,${WESTONGROUP},g" \
- -e "s,@XDG_RUNTIME_DIR@,${DISPLAY_XDG_RUNTIME_DIR},g" \
- -e "s,@WESTONSTART@,${WESTONSTART},g" \
- ${WORKDIR}/${f} > ${WORKDIR}/${g}
- fi
- done
-
- # Install weston drop-in
- install -d ${D}${systemd_system_unitdir}/weston@.service.d
- install -m644 ${WORKDIR}/weston.conf ${D}/${systemd_system_unitdir}/weston@.service.d/weston-init.conf
-
- # Install tmpfiles drop-in
- install -d ${D}${libdir}/tmpfiles.d
- install -m644 ${WORKDIR}/tmpfiles.conf ${D}${libdir}/tmpfiles.d/weston-init.conf
-
- # Install udev rules
- install -d ${D}${sysconfdir}/udev/rules.d
- for f in ${files}; do
- g=${f%.in}
- h=${g%.rules}
- if [ "${g}" != "${h}" ]; then
- install -m644 ${WORKDIR}/${g} ${D}${sysconfdir}/udev/rules.d
- fi
- done
-}
-
-FILES_${PN} += " \
- ${libdir}/tmpfiles.d/ \
- ${systemd_system_unitdir}/weston@.service.d/ \
-"
-
-SYSTEMD_AUTO_ENABLE = "enable"
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in
deleted file mode 100644
index c4b302faf..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in
+++ /dev/null
@@ -1,6 +0,0 @@
-# This file is distributed to create weston XDG_RUNTIME_DIR (/run/deamon/@WESTONUSER@)
-#
-# See tmpfiles.d(5) for details
-
-d /run/platform/ 0775 root root -
-d /run/platform/@WESTONUSER@ 0770 @WESTONUSER@ @WESTONGROUP@ -
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in
deleted file mode 100644
index 9c3df052d..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in
+++ /dev/null
@@ -1,12 +0,0 @@
-[Service]
-Type=notify
-Environment="XDG_RUNTIME_DIR=@XDG_RUNTIME_DIR@"
-# Note that clearing PAMName (thus not having PAMName=login) disables
-# logind support for the session, which allows setting XDG_RUNTIME_DIR
-# to something other than /run/user/% (as is done above).
-# Without systemd-logind support, weston needs to be patched to allow
-# its direct launcher to work for non-root users in this scenario.
-PAMName=
-ExecStart=
-ExecStart=@WESTONSTART@
-SmackProcessLabel=System::Weston
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in
deleted file mode 100644
index 585db6be8..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in
+++ /dev/null
@@ -1,2 +0,0 @@
-SUBSYSTEM=="gpu_class", MODE="0660", GROUP="@WESTONGROUP@", SECLABEL{smack}="*"
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in
deleted file mode 100644
index 51c68c303..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in
+++ /dev/null
@@ -1 +0,0 @@
-SUBSYSTEM=="drm", MODE="0660", GROUP="@WESTONGROUP@", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston@@WESTONUSER@.service"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules.in
deleted file mode 100644
index fb3e677f4..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules.in
+++ /dev/null
@@ -1 +0,0 @@
-SUBSYSTEM=="input", MODE="0660", GROUP="input", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston@@WESTONUSER@.service"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in
deleted file mode 100644
index e5ce4b553..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in
+++ /dev/null
@@ -1 +0,0 @@
-SUBSYSTEM=="tty", KERNEL=="tty7", OWNER="@WESTONUSER@", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston@@WESTONUSER@.service"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready
deleted file mode 100644
index c7cba3043..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2018, Konsulko Group
-#
-# 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.
-#
-
-#
-# Simple script to check if Weston+IVI shell is ready by calling
-# LayerManagerControl, optionally waiting for a specified timeout.
-#
-
-usage="Usage: weston-ready [-t timeout]"
-timeout=0
-
-function info() { echo "$@" >&2; }
-
-if [ $# -eq 2 ]; then
- if [ $1 = "-t" ]; then
- timeout=$(($2 * 10))
- else
- echo $usage
- exit 1
- fi
-fi
-
-info "using timeout $timeout"
-
-time=0
-rc=1
-while true; do
- if [ $time -gt $timeout ]; then
- info "Timeout reached"
- break
- elif LayerManagerControl get screens >/dev/null 2>&1; then
- info "Weston is now ready"
- rc=0
- break
- fi
- info "waiting..."
- if [ $timeout -gt 0 ]; then
- usleep 500000
- fi
- time=$(($time + 5))
-done
-exit $rc
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready.service b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready.service
deleted file mode 100644
index 82490fef4..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready/weston-ready.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=Wait for Weston readiness
-Requires=weston@display.service
-After=weston@display.service
-
-[Service]
-SupplementaryGroups=display
-Environment="XDG_RUNTIME_DIR=/run/platform/display"
-ExecStart=/usr/bin/weston-ready -t 10
-Type=oneshot
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready_1.0.bb b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready_1.0.bb
deleted file mode 100644
index a3d0bb248..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-ready_1.0.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Weston readiness checker"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-inherit systemd
-
-SRC_URI = "file://weston-ready \
- file://weston-ready.service \
-"
-
-do_install() {
- install -D -m 0755 ${WORKDIR}/weston-ready ${D}${bindir}/weston-ready
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -D -m 0644 ${WORKDIR}/weston-ready.service ${D}${systemd_system_unitdir}/weston-ready.service
- fi
-}
-
-SYSTEMD_SERVICE_${PN} = "weston-ready.service"
-
-RDEPENDS_${PN} += "weston bash"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch
deleted file mode 100644
index 362f6b064..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-Allow-regular-users-to-launch-Weston_7.0.0.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Allow regular users to launch Weston
-
-Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
-[Reworked for Weston 7.0.0 switch to meson]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
-diff --git a/libweston/launcher-direct.c b/libweston/launcher-direct.c
-index 9fa329b6..8e218804 100644
---- a/libweston/launcher-direct.c
-+++ b/libweston/launcher-direct.c
-@@ -291,8 +291,10 @@ launcher_direct_connect(struct weston_launcher **out, struct weston_compositor *
- {
- struct launcher_direct *launcher;
-
-+#ifndef ENABLE_USER_START
- if (geteuid() != 0)
- return -EINVAL;
-+#endif
-
- launcher = zalloc(sizeof(*launcher));
- if (launcher == NULL)
-diff --git a/libweston/meson.build b/libweston/meson.build
-index d8d3fc07..0d39ebf1 100644
---- a/libweston/meson.build
-+++ b/libweston/meson.build
-@@ -216,6 +216,10 @@ if get_option('weston-launch')
- meson.add_install_script('echo', 'REMINDER: You are installing weston-launch, please make it setuid-root.')
- endif
-
-+if get_option('enable-user-start')
-+ config_h.set('ENABLE_USER_START', '1')
-+endif
-+
- subdir('renderer-gl')
- subdir('backend-drm')
- subdir('backend-fbdev')
-diff --git a/meson_options.txt b/meson_options.txt
-index d5bf1d54..c93f31d1 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -217,3 +217,10 @@ option(
- value: false,
- description: 'Generate documentation'
- )
-+
-+option(
-+ 'enable-user-start',
-+ type: 'boolean',
-+ value: true,
-+ description: 'Tests: enable start as non-root user'
-+)
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch
deleted file mode 100644
index 32755c4b3..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-libweston-Expose-weston_output_damage-in-libweston.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 7e5fb58591a29d60657158262a0772796bfd3461 Mon Sep 17 00:00:00 2001
-From: Marius Vlad <marius.vlad@collabora.com>
-Date: Wed, 12 Feb 2020 13:18:19 +0200
-Subject: [PATCH] libweston: Expose weston_output_damage() in libweston
-
-We have weston_compositor_damage_all() exported and declared but users
-might need weston_output_damage() to refer to an individual output. The
-symbol already exported so just declare it.
-
-Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
----
- include/libweston/libweston.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h
-index 1439775e..9fac5be0 100644
---- a/include/libweston/libweston.h
-+++ b/include/libweston/libweston.h
-@@ -1604,6 +1604,8 @@ weston_compositor_schedule_repaint(struct weston_compositor *compositor);
- void
- weston_compositor_damage_all(struct weston_compositor *compositor);
- void
-+weston_output_damage(struct weston_output *woutput);
-+void
- weston_compositor_wake(struct weston_compositor *compositor);
- void
- weston_compositor_sleep(struct weston_compositor *compositor);
---
-2.20.1
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0002-ivi-shell-Fix-crash-due-no-transmitter-screen.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0002-ivi-shell-Fix-crash-due-no-transmitter-screen.patch
deleted file mode 100644
index 05ce7de30..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0002-ivi-shell-Fix-crash-due-no-transmitter-screen.patch
+++ /dev/null
@@ -1,264 +0,0 @@
-From e1fd1c9fc08b9e1b8a2f2d958ce591bb8d256b84 Mon Sep 17 00:00:00 2001
-From: Veeresh Kadasani <external.vkadasani@jp.adit-jv.com>
-Date: Mon, 16 Dec 2019 19:24:15 +0900
-Subject: [PATCH 1/1] ivi-shell: Fix crash due no transmitter screen
-
-Registered the events for the output_created, destroyed,
-resized events.So that the ivi_scrn can be destroyed,
-created dynamically during destroyed and created events.
-And the view properties are dynamically changed during
-resized/moved events.
-
-Signed-off-by: Veeresh Kadasani <external.vkadasani@jp.adit-jv.com>
----
- ivi-shell/ivi-layout-private.h | 5 ++
- ivi-shell/ivi-layout.c | 154 ++++++++++++++++++++++++++++++++++++-----
- 2 files changed, 140 insertions(+), 19 deletions(-)
-
-diff --git a/ivi-shell/ivi-layout-private.h b/ivi-shell/ivi-layout-private.h
-index c054130..8997edd 100644
---- a/ivi-shell/ivi-layout-private.h
-+++ b/ivi-shell/ivi-layout-private.h
-@@ -113,6 +113,11 @@ struct ivi_layout {
-
- struct ivi_layout_transition_set *transitions;
- struct wl_list pending_transition_list; /* transition_node::link */
-+
-+ struct wl_listener output_created;
-+ struct wl_listener output_destroyed;
-+ struct wl_listener output_resized;
-+ struct wl_listener output_moved;
- };
-
- struct ivi_layout *get_instance(void);
-diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
-index 2c450f3..1fbfeeb 100644
---- a/ivi-shell/ivi-layout.c
-+++ b/ivi-shell/ivi-layout.c
-@@ -67,7 +67,7 @@
- #include "ivi-layout-export.h"
- #include "ivi-layout-private.h"
- #include "ivi-layout-shell.h"
--
-+#include <libweston/plugin-registry.h>
- #include "shared/helpers.h"
- #include "shared/os-compatibility.h"
-
-@@ -259,6 +259,87 @@ ivi_layout_surface_destroy(struct ivi_layout_surface *ivisurf)
- free(ivisurf);
- }
-
-+
-+static void
-+destroy_screen(struct ivi_layout_screen *iviscrn)
-+{
-+ struct ivi_layout_layer *ivilayer;
-+ struct ivi_layout_layer *next;
-+
-+ /*we need to remove the layers from pending and order lists
-+ *otherwise the memory will be corrupted during the
-+ *wl_list_remove of pending.link or order.link from
-+ *ivi_layout_screen_add_layer() or commit_screen_list()
-+ *and on_screen has to be set as NULL otherwise the commit_changes()
-+ *API will try to refer the freed iviscrn*/
-+ wl_list_for_each_safe(ivilayer, next, &iviscrn->pending.layer_list, pending.link) {
-+ wl_list_remove(&ivilayer->pending.link);
-+ wl_list_init(&ivilayer->pending.link);
-+ ivilayer->on_screen = NULL;
-+ }
-+
-+ wl_list_for_each_safe(ivilayer, next, &iviscrn->order.layer_list, order.link) {
-+ wl_list_remove(&ivilayer->order.link);
-+ wl_list_init(&ivilayer->order.link);
-+ ivilayer->on_screen = NULL;
-+ }
-+
-+ wl_list_init(&iviscrn->pending.layer_list);
-+ wl_list_init(&iviscrn->order.layer_list);
-+
-+ wl_list_remove(&iviscrn->link);
-+ free(iviscrn);
-+}
-+
-+static void
-+output_destroyed_event(struct wl_listener *listener, void *data)
-+{
-+ struct ivi_layout *layout =
-+ wl_container_of(listener, layout, output_destroyed);
-+ struct ivi_layout_screen *iviscrn = NULL;
-+ struct ivi_layout_screen *next = NULL;
-+ struct weston_output *destroyed_output = (struct weston_output*)data;
-+
-+ wl_list_for_each_safe(iviscrn, next, &layout->screen_list, link) {
-+ if (iviscrn->output == destroyed_output) {
-+ destroy_screen(iviscrn);
-+ }
-+ }
-+ ivi_layout_commit_changes();
-+}
-+
-+static void
-+add_screen(struct weston_output *output)
-+{
-+ struct ivi_layout *layout = get_instance();
-+ struct ivi_layout_screen *iviscrn = NULL;
-+
-+ if(!output)
-+ return;
-+
-+ iviscrn = calloc(1, sizeof *iviscrn);
-+ if (iviscrn == NULL) {
-+ weston_log("fails to allocate memory\n");
-+ return;
-+ }
-+
-+ iviscrn->layout = layout;
-+ iviscrn->output = output;
-+
-+ wl_list_init(&iviscrn->pending.layer_list);
-+ wl_list_init(&iviscrn->order.layer_list);
-+ wl_list_insert(&layout->screen_list, &iviscrn->link);
-+}
-+
-+static void
-+output_created_event(struct wl_listener *listener, void *data)
-+{
-+ struct weston_output *created_output = (struct weston_output*)data;
-+
-+ add_screen(created_output);
-+ ivi_layout_commit_changes();
-+}
-+
- /**
- * Internal API to initialize ivi_screens found from output_list of weston_compositor.
- * Called by ivi_layout_init_with_compositor.
-@@ -266,27 +347,14 @@ ivi_layout_surface_destroy(struct ivi_layout_surface *ivisurf)
- static void
- create_screen(struct weston_compositor *ec)
- {
-+
- struct ivi_layout *layout = get_instance();
- struct ivi_layout_screen *iviscrn = NULL;
-- struct weston_output *output = NULL;
--
-- wl_list_for_each(output, &ec->output_list, link) {
-- iviscrn = calloc(1, sizeof *iviscrn);
-- if (iviscrn == NULL) {
-- weston_log("fails to allocate memory\n");
-- continue;
-- }
-
-- iviscrn->layout = layout;
--
-- iviscrn->output = output;
--
-- wl_list_init(&iviscrn->pending.layer_list);
--
-- wl_list_init(&iviscrn->order.layer_list);
-+ struct weston_output *output = NULL;
-
-- wl_list_insert(&layout->screen_list, &iviscrn->link);
-- }
-+ wl_list_for_each(output, &ec->output_list, link)
-+ add_screen(output);
- }
-
- /**
-@@ -822,7 +890,18 @@ build_view_list(struct ivi_layout *layout)
- if (!ivi_view_is_mapped(ivi_view))
- weston_view_unmap(ivi_view->view);
- }
-+ struct weston_view *view = NULL;
-+ struct weston_view *view_next = NULL;
-
-+ /* Earlier only the head node was reset, but the remaining links
-+ * won't be changed. Due to this, faced crash issue (or sometimes
-+ * list was looping) in weston_view_destroy API. So clearing the
-+ * entire list*/
-+ wl_list_for_each_safe(view, view_next,
-+ &layout->layout_layer.view_list.link, layer_link.link) {
-+ wl_list_remove(&view->layer_link.link);
-+ wl_list_init(&view->layer_link.link);
-+ }
- /* Clear view list of layout ivi_layer */
- wl_list_init(&layout->layout_layer.view_list.link);
-
-@@ -1791,7 +1870,22 @@ ivi_layout_commit_changes(void)
-
- return IVI_SUCCEEDED;
- }
-+static void
-+output_resized_moved_events(struct wl_listener *listener, void *data)
-+{
-+ struct ivi_layout_screen *iviscrn = NULL;
-+ struct ivi_layout_layer *ivilayer;
-+ struct ivi_layout_view *ivi_view;
-+ struct weston_output *output = (struct weston_output*)data;
-
-+ iviscrn = get_screen_from_output(output);
-+
-+ wl_list_for_each(ivilayer, &iviscrn->order.layer_list, order.link) {
-+ wl_list_for_each(ivi_view, &ivilayer->order.view_list,
-+ order_link)
-+ update_prop(ivi_view);
-+ }
-+}
- static int32_t
- ivi_layout_layer_set_transition(struct ivi_layout_layer *ivilayer,
- enum ivi_layout_transition_type type,
-@@ -1931,6 +2025,14 @@ surface_create(struct weston_surface *wl_surface, uint32_t id_surface)
- return NULL;
- }
-
-+ ivisurf = get_surface(&layout->surface_list, id_surface);
-+ if (ivisurf != NULL) {
-+ if (ivisurf->surface != NULL) {
-+ weston_log("id_surface(%d) is already created\n", id_surface);
-+ return NULL;
-+ }
-+ }
-+
- ivisurf = calloc(1, sizeof *ivisurf);
- if (ivisurf == NULL) {
- weston_log("fails to allocate memory\n");
-@@ -1954,6 +2056,8 @@ surface_create(struct weston_surface *wl_surface, uint32_t id_surface)
-
- wl_list_insert(&layout->surface_list, &ivisurf->link);
-
-+ wl_signal_emit(&layout->surface_notification.created, ivisurf);
-+
- return ivisurf;
- }
-
-@@ -2006,8 +2110,8 @@ ivi_layout_surface_create(struct weston_surface *wl_surface,
- return ivisurf;
- }
-
--static struct ivi_layout_interface ivi_layout_interface;
-
-+static struct ivi_layout_interface ivi_layout_interface;
- void
- ivi_layout_init_with_compositor(struct weston_compositor *ec)
- {
-@@ -2035,6 +2139,18 @@ ivi_layout_init_with_compositor(struct weston_compositor *ec)
-
- create_screen(ec);
-
-+ layout->output_created.notify = output_created_event;
-+ wl_signal_add(&ec->output_created_signal, &layout->output_created);
-+
-+ layout->output_destroyed.notify = output_destroyed_event;
-+ wl_signal_add(&ec->output_destroyed_signal, &layout->output_destroyed);
-+
-+ layout->output_resized.notify = output_resized_moved_events;
-+ wl_signal_add(&ec->output_resized_signal, &layout->output_resized);
-+
-+ layout->output_moved.notify = output_resized_moved_events;
-+ wl_signal_add(&ec->output_moved_signal, &layout->output_moved);
-+
- layout->transitions = ivi_layout_transition_set_create(ec);
- wl_list_init(&layout->pending_transition_list);
-
---
-2.7.4
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0003-compositor-drm-introduce-drm_get_dmafd_from_view.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0003-compositor-drm-introduce-drm_get_dmafd_from_view.patch
deleted file mode 100644
index 388e430d8..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0003-compositor-drm-introduce-drm_get_dmafd_from_view.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From 2cb25adac6b968104bbfb276c684506607dfbff4 Mon Sep 17 00:00:00 2001
-From: Veeresh Kadasani <external.vkadasani@jp.adit-jv.com>
-Date: Wed, 7 Aug 2019 21:05:11 +0900
-Subject: [PATCH 1/1] compositor-drm: introduce drm_get_dmafd_from_view
-
-This API enables to get dmafd from weston_view
-
-Signed-off-by: Veeresh Kadasani <external.vkadasani@jp.adit-jv.com>
----
- libweston/compositor-drm.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++
- libweston/compositor-drm.h | 7 ++++++
- 2 files changed, 66 insertions(+)
-
-diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
-index b83459a..98ad85c 100644
---- a/libweston/compositor-drm.c
-+++ b/libweston/compositor-drm.c
-@@ -5848,6 +5848,64 @@ drm_output_set_seat(struct weston_output *base,
- seat ? seat : "");
- }
-
-+ static int
-+drm_get_dma_fd_from_view(struct weston_output *base,
-+ struct weston_view *ev, int *buf_stride)
-+{
-+ struct drm_backend *b = to_drm_backend(base->compositor);
-+ struct weston_buffer *buffer = ev->surface->buffer_ref.buffer;
-+ struct gbm_bo *bo;
-+ struct drm_fb *current;
-+ struct linux_dmabuf_buffer *dmabuf;
-+ bool is_opaque = weston_view_is_opaque(ev,&ev->transform.boundingbox);
-+ uint32_t format;
-+ int fd, ret;
-+
-+ if(!buffer) {
-+ weston_log("buffer is NULL\n");
-+ return -1;
-+ }
-+
-+ if(dmabuf = linux_dmabuf_buffer_get(buffer->resource)) {
-+ current = drm_fb_get_from_dmabuf(dmabuf, b, is_opaque);
-+ if (!current)
-+ {
-+ fprintf(stderr, "failed to get drm_fb from dmabuf\n");
-+ return -1;
-+ }
-+ *buf_stride=current->strides[0];
-+ }
-+ else if(ev->surface->buffer_ref.buffer->legacy_buffer) {
-+ bo = gbm_bo_import(b->gbm, GBM_BO_IMPORT_WL_BUFFER,
-+ buffer->resource, GBM_BO_USE_SCANOUT);
-+ if (!bo) {
-+ weston_log("failed to get gbm_bo\n");
-+ return -1;
-+ }
-+ current = drm_fb_get_from_bo(bo, b, is_opaque, BUFFER_CLIENT);
-+
-+ if (!current) {
-+ weston_log("failed to get drm_fb from bo\n");
-+ return -1;
-+ }
-+ *buf_stride=current->strides[0];
-+ }
-+ else {
-+ weston_log("Buffer is not supported\n");
-+ return -1;
-+ }
-+
-+ ret = drmPrimeHandleToFD(b->drm.fd, current->handles[0],
-+ DRM_CLOEXEC, &fd);
-+ free(current);
-+ if (ret) {
-+ weston_log("failed to create prime fd for front buffer\n");
-+ return -1;
-+ }
-+
-+ return fd;
-+}
-+
- static int
- drm_output_init_gamma_size(struct drm_output *output)
- {
-@@ -7396,6 +7454,7 @@ static const struct weston_drm_output_api api = {
- drm_output_set_mode,
- drm_output_set_gbm_format,
- drm_output_set_seat,
-+ drm_get_dma_fd_from_view
- };
-
- static const struct weston_drm_virtual_output_api virt_api = {
-diff --git a/libweston/compositor-drm.h b/libweston/compositor-drm.h
-index 71a306f..a9379e4 100644
---- a/libweston/compositor-drm.h
-+++ b/libweston/compositor-drm.h
-@@ -78,6 +78,13 @@ struct weston_drm_output_api {
- */
- void (*set_seat)(struct weston_output *output,
- const char *seat);
-+
-+ /** Get the dma fd from drm view.
-+ *
-+ * The dma fd is got from weston_view.
-+ * Returns fd on success, -1 on failure.
-+ */
-+ int (*get_dma_fd_from_view)(struct weston_output *output, struct weston_view *view, int *buf_stride);
- };
-
- static inline const struct weston_drm_output_api *
---
-2.7.4
-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0004-main-change-remoting-initialization-timing.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0004-main-change-remoting-initialization-timing.patch
deleted file mode 100644
index 61772182c..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0004-main-change-remoting-initialization-timing.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 0a0103f20437d9ed63b6cec500027a6d7bf6185f Mon Sep 17 00:00:00 2001
-From: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
-Date: Mon, 20 May 2019 18:31:32 +0900
-Subject: [PATCH] main: change remoting initialization timing
-
-Upstream-Status: Pending[1]
-
-[1]: https://gitlab.freedesktop.org/wayland/weston/issues/246
-
-Signed-off-by: Tomohito Esaki <etom@igel.co.jp>
-Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
-[Updated for Weston 8.0.0]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-
----
-diff --git a/compositor/main.c b/compositor/main.c
-index 8eb8a47..22686b0 100644
---- a/compositor/main.c
-+++ b/compositor/main.c
-@@ -2518,9 +2518,6 @@ load_drm_backend(struct weston_compositor *c,
- ret = weston_compositor_load_backend(c, WESTON_BACKEND_DRM,
- &config.base);
-
-- /* remoting */
-- load_remoting(c, wc);
--
- /* pipewire */
- load_pipewire(c, wc);
-
-@@ -3278,6 +3275,10 @@ wet_main(int argc, char *argv[])
- if (wet.init_failed)
- goto out;
-
-+ /* remoting: only support on drm-backend */
-+ if (strstr(backend, "drm-backend.so"))
-+ load_remoting(wet.compositor, config);
-+
- if (idle_time < 0)
- weston_config_section_get_int(section, "idle-time", &idle_time, -1);
- if (idle_time < 0)
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/smack-weston b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/smack-weston
deleted file mode 100644
index 63a32405a..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/smack-weston
+++ /dev/null
@@ -1,8 +0,0 @@
-System System::Weston rwxa--
-System::Weston System rwx---
-System::Weston System::Shared rwx---
-System::Weston System::Run rwxat-
-System::Weston System::Log rwxa--
-System::Weston _ r-x--l
-System::Weston User::Home r-x--l
-System::Weston User::App-Shared rwxat-
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston_8.0.%.bbappend b/meta-agl-profile-graphical/recipes-graphics/wayland/weston_8.0.%.bbappend
deleted file mode 100644
index bada11c3f..000000000
--- a/meta-agl-profile-graphical/recipes-graphics/wayland/weston_8.0.%.bbappend
+++ /dev/null
@@ -1,30 +0,0 @@
-FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
-
-# NOTE:
-# file://0003-compositor-drm-introduce-drm_get_dmafd_from_view.patch
-# has been removed until someone more familiar with weston internals
-# and waltham can take a look and update it.
-SRC_URI_append = "\
- file://0001-Allow-regular-users-to-launch-Weston_7.0.0.patch \
- file://0002-ivi-shell-Fix-crash-due-no-transmitter-screen.patch \
- file://0001-libweston-Expose-weston_output_damage-in-libweston.patch \
- file://0004-main-change-remoting-initialization-timing.patch \
- file://smack-weston \
- "
-
-EXTRA_OEMESON_append = " -Denable-user-start=true"
-
-# Workaround for incorrect upstream definition
-PACKAGECONFIG[remoting] = "-Dremoting=true,-Dremoting=false,gstreamer1.0 gstreamer1.0-plugins-base"
-PACKAGECONFIG_append = "${@bb.utils.contains('DISTRO_FEATURES', 'weston-remoting', ' remoting', '', d)}"
-
-do_install_append() {
- if ${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'true', 'false', d)}; then
- # Install SMACK rules
- install -D -m 0644 ${WORKDIR}/smack-weston ${D}${sysconfdir}/smack/accesses.d/weston
- fi
-}
-
-FILES_${PN} += "\
- ${sysconfdir}/smack/accesses.d/* \
-"
diff --git a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad/0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch b/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad/0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch
deleted file mode 100644
index 443e7db8b..000000000
--- a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad/0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 03e502084633838badfcc2b91a1aca1651c18544 Mon Sep 17 00:00:00 2001
-From: Marius Vlad <marius.vlad@collabora.com>
-Date: Wed, 24 Jun 2020 19:44:35 +0300
-Subject: [PATCH] gst/wayland/: Install wayland header from gstwayland library
-
-Necessary for cluster-receiver to pass out the wl_surface.
-
-Bug-AGL: SPEC-3382
-
-Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
----
- gst-libs/gst/wayland/meson.build | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/gst-libs/gst/wayland/meson.build b/gst-libs/gst/wayland/meson.build
-index b1ede41f1..8957381d2 100644
---- a/gst-libs/gst/wayland/meson.build
-+++ b/gst-libs/gst/wayland/meson.build
-@@ -21,4 +21,6 @@ if use_wayland
- gstwayland_dep = declare_dependency(link_with : gstwayland,
- include_directories : [libsinc],
- dependencies : [gst_dep, gstvideo_dep])
-+
-+ install_headers('wayland.h', subdir: 'gst/wayland')
- endif
---
-2.26.2
-
diff --git a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_1.16.%.bbappend
deleted file mode 100644
index a74fb623d..000000000
--- a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-bad/gstreamer1.0-plugins-bad_1.16.%.bbappend
+++ /dev/null
@@ -1,2 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-SRC_URI_append=" file://0001-gst-wayland-Install-wayland-header-from-gstwayland-l.patch"
diff --git a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-good/gstreamer1.0-plugins-good_%.bbappend b/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-good/gstreamer1.0-plugins-good_%.bbappend
deleted file mode 100644
index 86a181fbb..000000000
--- a/meta-agl-profile-graphical/recipes-multimedia/gstreamer1.0-plugins-good/gstreamer1.0-plugins-good_%.bbappend
+++ /dev/null
@@ -1,2 +0,0 @@
-# libv4l2 is useful for making more efficient use of cameras via v4l2src.
-PACKAGECONFIG_append = " libv4l2"
diff --git a/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.bb b/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.bb
deleted file mode 100644
index bbb61c922..000000000
--- a/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "A very basic Wayland image with a terminal"
-
-require agl-image-weston.inc
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL_append = "\
- packagegroup-agl-profile-graphical \
- "
diff --git a/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.inc b/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.inc
deleted file mode 100644
index cef3bf64e..000000000
--- a/meta-agl-profile-graphical/recipes-platform/images/agl-image-weston.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-require recipes-platform/images/agl-image-minimal.inc
-
-IMAGE_FEATURES += "splash package-management ssh-server-dropbear"
-
-inherit features_check
-
-REQUIRED_DISTRO_FEATURES = "wayland"
diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb
deleted file mode 100644
index cd37cb7d5..000000000
--- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "The software for application framework of AGL IVI profile"
-DESCRIPTION = "A set of packages belong to AGL application framework which required by \
-Multimedia Subsystem"
-
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-graphical-multimedia \
- "
-
-RDEPENDS_${PN} += "\
- alsa-utils \
- gstreamer1.0-meta-base \
- "
diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend
deleted file mode 100644
index 4a98a233c..000000000
--- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-RDEPENDS_${PN}_append_ulcb = "\
- ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-multimedia-kernel-modules','',d)} \
- ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-multimedia-libs','',d)} \
- ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-gstreamer1.0-plugins','',d)} \
-"
diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-services.bb b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-services.bb
deleted file mode 100644
index e587ab21c..000000000
--- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-services.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "The minimal set of packages for Connectivity Subsystem"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-graphical-services \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} = "\
- ${@bb.utils.contains('DISTRO_FEATURES', 'pipewire', 'agl-service-mediaplayer', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'pipewire', 'agl-service-radio', '', d)} \
- "
diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb
deleted file mode 100644
index 79577c170..000000000
--- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "The minimal set of packages required for Wayland support"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-graphical-weston \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += " \
- weston \
- weston-init \
- weston-ini-conf \
- weston-examples \
- agl-login-manager \
- agl-compositor \
- "
-
diff --git a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb b/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb
deleted file mode 100644
index 406ebcdb4..000000000
--- a/meta-agl-profile-graphical/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "The middleware for AGL IVI profile"
-DESCRIPTION = "The set of packages required for AGL IVI Distribution"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-profile-graphical \
- profile-graphical \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-image-minimal \
- packagegroup-agl-graphical-weston \
- packagegroup-agl-graphical-services \
- packagegroup-agl-graphical-multimedia \
-"
-# FIXME: Removed due to issues building against weston 5.0.0:
-# waltham-transmitter
-
-RDEPENDS_profile-graphical = "${PN}"
diff --git a/meta-agl-profile-graphical/recipes-security/security-manager/security-manager_%.bbappend b/meta-agl-profile-graphical/recipes-security/security-manager/security-manager_%.bbappend
deleted file mode 100644
index d6fcb40af..000000000
--- a/meta-agl-profile-graphical/recipes-security/security-manager/security-manager_%.bbappend
+++ /dev/null
@@ -1,6 +0,0 @@
-
-do_install_append() {
- # Needed for wayland-0 socket access and memfd usage
- echo "~APP~ System::Weston rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack
- echo "System::Weston ~APP~ rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack
-}
diff --git a/meta-agl-profile-hud/LICENSE b/meta-agl-profile-hud/LICENSE
deleted file mode 100644
index e8758f89c..000000000
--- a/meta-agl-profile-hud/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Different components of the AGL layers are under different licenses (a mix
-of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further
-details of the individual licenses.
-
-All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar)
-is MIT licensed unless otherwise stated.
-Source code included in tree for individual recipes (e.g. patches) are under
-the LICENSE stated in the associated recipe (.bb file) unless otherwise stated.
-
-License information for any other files (scripts) is either explicitly stated
-or defaults to GPL version 2 only.
-
-Individual files can contain the following style tags instead of the full
-license text to identify their license:
-
- SPDX-License-Identifier: GPL-2.0-only
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-hud/LICENSE.GPL-2.0-only b/meta-agl-profile-hud/LICENSE.GPL-2.0-only
deleted file mode 100644
index 5db3c0a21..000000000
--- a/meta-agl-profile-hud/LICENSE.GPL-2.0-only
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: GPL-2.0-only
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-hud/LICENSE.MIT b/meta-agl-profile-hud/LICENSE.MIT
deleted file mode 100644
index a6919eb7e..000000000
--- a/meta-agl-profile-hud/LICENSE.MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-hud/conf/layer.conf b/meta-agl-profile-hud/conf/layer.conf
deleted file mode 100644
index f8f18cdc9..000000000
--- a/meta-agl-profile-hud/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "aglprofilehud"
-BBFILE_PATTERN_aglprofilehud = "^${LAYERDIR}/"
-BBFILE_PRIORITY_aglprofilehud = "70"
-
-LAYERSERIES_COMPAT_aglprofilehud = "dunfell"
diff --git a/meta-agl-profile-telematics/LICENSE b/meta-agl-profile-telematics/LICENSE
deleted file mode 100644
index e8758f89c..000000000
--- a/meta-agl-profile-telematics/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Different components of the AGL layers are under different licenses (a mix
-of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further
-details of the individual licenses.
-
-All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar)
-is MIT licensed unless otherwise stated.
-Source code included in tree for individual recipes (e.g. patches) are under
-the LICENSE stated in the associated recipe (.bb file) unless otherwise stated.
-
-License information for any other files (scripts) is either explicitly stated
-or defaults to GPL version 2 only.
-
-Individual files can contain the following style tags instead of the full
-license text to identify their license:
-
- SPDX-License-Identifier: GPL-2.0-only
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-telematics/LICENSE.GPL-2.0-only b/meta-agl-profile-telematics/LICENSE.GPL-2.0-only
deleted file mode 100644
index 5db3c0a21..000000000
--- a/meta-agl-profile-telematics/LICENSE.GPL-2.0-only
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: GPL-2.0-only
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-telematics/LICENSE.MIT b/meta-agl-profile-telematics/LICENSE.MIT
deleted file mode 100644
index a6919eb7e..000000000
--- a/meta-agl-profile-telematics/LICENSE.MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-agl-profile-telematics/conf/layer.conf b/meta-agl-profile-telematics/conf/layer.conf
deleted file mode 100644
index f9ef2e3bf..000000000
--- a/meta-agl-profile-telematics/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "aglprofiletelematics"
-BBFILE_PATTERN_aglprofiletelematics = "^${LAYERDIR}/"
-BBFILE_PRIORITY_aglprofiletelematics = "70"
-
-LAYERSERIES_COMPAT_aglprofiletelematics = "dunfell"
diff --git a/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.bb b/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.bb
deleted file mode 100644
index ad6ef9888..000000000
--- a/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "A basic telematics image"
-
-require agl-image-telematics.inc
-
-LICENSE = "MIT"
-
-IMAGE_INSTALL_append = "\
- profile-telematics \
- "
diff --git a/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.inc b/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.inc
deleted file mode 100644
index 3e951550e..000000000
--- a/meta-agl-profile-telematics/recipes-platform/images/agl-image-telematics.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-require recipes-platform/images/agl-image-boot.inc
-
-inherit features_check
-
-REQUIRED_DISTRO_FEATURES = "3g"
diff --git a/meta-agl-profile-telematics/recipes-platform/packagegroups/packagegroup-agl-profile-telematics.bb b/meta-agl-profile-telematics/recipes-platform/packagegroups/packagegroup-agl-profile-telematics.bb
deleted file mode 100644
index 66fc0f765..000000000
--- a/meta-agl-profile-telematics/recipes-platform/packagegroups/packagegroup-agl-profile-telematics.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "The middleware for AGL telematics profile"
-DESCRIPTION = "The set of packages required for AGL Telematics Distribution"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-profile-telematics \
- profile-telematics \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- packagegroup-agl-image-boot \
- packagegroup-agl-core-security \
- ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','connman','connman connman-client','',d)} \
- ${@bb.utils.contains("DISTRO_FEATURES", "3g", "libqmi", "", d)} \
- agl-login-manager \
- agl-service-can-low-level \
- agl-service-network \
- can-utils \
-"
-
-RDEPENDS_profile-telematics = "${PN}"
diff --git a/meta-agl.md b/meta-agl.md
index 6c3427cd5..be4369656 100755
--- a/meta-agl.md
+++ b/meta-agl.md
@@ -7,9 +7,6 @@ You use this layer as the minimal core on which to build AGL profiles.
**NOTE:** The `meta-agl` layer does not include a reference UI.
The reference UI is included as part of the
[`meta-agl-demo`](./meta-agl-demo.html) layer.
- Furthermore, `meta-agl` does not include additional components, such
- as security, which are part of the
- `meta-agl-extra` layer.
## Sub-Layers
@@ -17,59 +14,42 @@ The `meta-agl` layer itself contains many sub-layers and files.
Following is a "tree" look at the layer:
```
-.
-├── docs
-├── meta-agl
-├── meta-agl-bsp
-├── meta-agl-distro
-├── meta-agl-profile-cluster
-├── meta-agl-profile-cluster-qt5
-├── meta-agl-profile-core
-├── meta-agl-profile-graphical
-├── meta-agl-profile-graphical-html5
-├── meta-agl-profile-graphical-qt5
-├── meta-agl-profile-hud
-├── meta-agl-profile-telematics
-├── meta-app-framework
-├── meta-netboot
-├── meta-security
-├── README-AGL.md
-├── README.md
-├── scripts
-├── templates
+|-- LICENSE
+|-- LICENSE.GPL-2.0-only
+|-- LICENSE.MIT
+|-- README-AGL.md
+|-- README.md -> meta-agl.md
+|-- agl-layers-overview.md
+|-- docs
+|-- meta-agl-bsp
+|-- meta-agl-core
+|-- meta-agl-core-test
+|-- meta-agl-ic
+|-- meta-agl-ivi
+|-- meta-agl.md
+|-- meta-netboot
+|-- meta-pipewire
+|-- scripts
+`-- templates
```
This list provides some overview information on the files and sub-layers
in `meta-agl`:
+* LICENSE* : licenses of the various components.
+* README* : RTFM
+* agl-layers-overview.md: references to the various layers that make up AGL
* `docs`: Contains files that support AGL documentation.
-* `meta-agl`: Contains layer configuration for the `meta-agl` layer.
* `meta-agl-bsp`: Contains adaptations for recipes and required packages
to boot an AGL distribution on targeted hardware and emulation (i.e. QEMU).
-* `meta-agl-distro`: Contains distro configuration and supporting scripts.
-* `meta-agl-profile-cluster`: The middleware for the AGL cluster profile.
- The set of packages required for AGL Cluster Distribution.
- Profiles include support for Wayland images.
-* `meta-agl-profile-cluster-qt5`: The middleware for the AGL Qt5-based cluster profile.
- The set of packages required for AGL Qt5-based Cluster Distribution.
- Profiles include support for Wayland images with Qt5.
-* `meta-agl-profile-core`: Configuration and recipes for the AGL core profiles.
-* `meta-agl-profile-graphical`: Configuration and recipes supporting graphical user
- interfaces.
-* `meta-agl-profile-graphical-html5`: Configuration and recipes supporting profiles
- with HTML user interface support.
-* `meta-agl-profile-graphical-qt5`: Configuration and recipes supporting profiles
- with Qt5-based user interface support.
-* `meta-agl-profile-hud`: Configuration and recipes supporting profiles with
- Head-Up-Display (HUD) support.
-* `meta-agl-profile-telematics`: Configuration and recipes supporting profiles with
- telematics support.
-* `meta-app-framework`: Configuration and recipes supporting the AGL Application
- Framework.
+* `meta-agl-core`: This is the core layer with essential recipes and the distro.
+* `meta-agl-core-test`: recipes supporting qa images (separate layer due to external dependencies)
+* `meta-agl-ic`: Instrument Cluster platform
+* `meta-agl-ivi`: IVI platform
* `meta-netboot`: Contains recipes and configuration adjustments to allow network
boot through network block device (NBD) since network file system (NFS) does not
support security labels.
-* `meta-security`: Configuration and recipes supporting security applications.
+* `meta-pipewire`: Configuration and recipes supporting pipewire as audio manager
* `scripts`: AGL development setup and support scripts.
* `templates`: Base, feature, and machine templates used in the AGL development
environment.
@@ -80,41 +60,40 @@ This section describes the AGL
[packagegroup](https://yoctoproject.org/docs/2.4.4/dev-manual/dev-manual.html#usingpoky-extend-customimage-customtasks)
design:
-* packagegroup-agl-image-minimal
+### core non-ui packagegroups:
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-connectivity.bb
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-devel.bb
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-security.bb
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-os-commonlibs.bb
- packagegroup-agl-core-automotive.bb
- packagegroup-agl-core-connectivity.bb
- packagegroup-agl-core-graphics.bb
- packagegroup-agl-core-kernel.bb
- packagegroup-agl-core-multimedia.bb
- packagegroup-agl-core-navi-lbs.bb
- packagegroup-agl-core-os-commonlibs.bb
- packagegroup-agl-core-security.bb
- packagegroup-agl-core-speech-services.bb
+### graphical subsystem
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-profile-graphical.bb
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bb
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-graphical-weston.bb
- The previous list of Packagegroups are used to create the `agl-image-minimal` image,
- which is a small image just capable of allowing a device to boot.
+### image-related packagegroups
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-boot.bb
+meta-agl-core/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bb
- Subsystem should maintain packagegroup-agl-core-[subsystem].bb which should
- hold sufficient packages to build `agl-image-minimal`.
+### QA/Test related packagegroups
+meta-agl-core-test/recipes-test/packagegroups
+meta-agl-core-test/recipes-test/packagegroups/packagegroup-agl-test.bb
-* packagegroup-agl-image-ivi
+## Images
- packagegroup-agl-ivi-automotive.bb
- packagegroup-agl-ivi-connectivity.bb
- packagegroup-agl-ivi-graphics.bb
- packagegroup-agl-ivi-kernel.bb
- packagegroup-agl-ivi-multimedia.bb
- packagegroup-agl-ivi-navi-lbs.bb
- packagegroup-agl-ivi-os-commonlibs.bb
- packagegroup-agl-ivi-security.bb
- packagegroup-agl-ivi-speech-services.bb
+### (Barely) bootable image
+meta-agl-core/recipes-platform/images/agl-image-boot.bb
- The previous list of Packagegroups are used to create the `agl-image-ivi`
- image, which is a baseline image (i.e. Service Layer and Operating System
- Layer defined in AGL Spec v1.0) for the AGL profiles.
+### minimal image and SDK (console)
+meta-agl-core/recipes-platform/images/agl-image-minimal.bb
+meta-agl-core/recipes-platform/images/agl-image-minimal-crosssdk.bb
-* packagegroup-agl-test.bb
+### weston-based image for re-use
+meta-agl-core/recipes-platform/images/agl-image-weston.bb
- Additional tools used in QA tests (for agl-image*-qa).
+### image for use in the YP autobuilder
+meta-agl-core/recipes-platform/images/agl-image-core-autobuilder.bb
+### image with extra QA tooling (e.g. to run LTP)
+meta-agl-core-test/images/agl-image-minimal-qa.bb
diff --git a/meta-agl/conf/layer.conf b/meta-agl/conf/layer.conf
deleted file mode 100644
index 6f431e6ac..000000000
--- a/meta-agl/conf/layer.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have recipes-* directories, add to BBFILES
-BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-BBFILE_COLLECTIONS += "agl"
-BBFILE_PATTERN_agl = "^${LAYERDIR}/"
-BBFILE_PRIORITY_agl = "70"
-
-LAYERSERIES_COMPAT_agl = "dunfell"
diff --git a/meta-app-framework/LICENSE b/meta-app-framework/LICENSE
deleted file mode 100644
index e8758f89c..000000000
--- a/meta-app-framework/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Different components of the AGL layers are under different licenses (a mix
-of MIT and GPLv2). See LICENSE.GPL-2.0-only and LICENSE.MIT for further
-details of the individual licenses.
-
-All metadata (e.g. .bb, .bbappend, .bbclass, .inc, templates/* and similar)
-is MIT licensed unless otherwise stated.
-Source code included in tree for individual recipes (e.g. patches) are under
-the LICENSE stated in the associated recipe (.bb file) unless otherwise stated.
-
-License information for any other files (scripts) is either explicitly stated
-or defaults to GPL version 2 only.
-
-Individual files can contain the following style tags instead of the full
-license text to identify their license:
-
- SPDX-License-Identifier: GPL-2.0-only
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-app-framework/LICENSE.GPL-2.0-only b/meta-app-framework/LICENSE.GPL-2.0-only
deleted file mode 100644
index 5db3c0a21..000000000
--- a/meta-app-framework/LICENSE.GPL-2.0-only
+++ /dev/null
@@ -1,288 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: GPL-2.0-only
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-app-framework/LICENSE.MIT b/meta-app-framework/LICENSE.MIT
deleted file mode 100644
index a6919eb7e..000000000
--- a/meta-app-framework/LICENSE.MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-Note:
-Individual files contain the following tag instead of the full license text.
-
- SPDX-License-Identifier: MIT
-
-This enables machine processing of license information based on the SPDX
-License Identifiers that are here available: http://spdx.org/licenses/
diff --git a/meta-app-framework/README b/meta-app-framework/README
new file mode 120000
index 000000000..4a7a1a175
--- /dev/null
+++ b/meta-app-framework/README
@@ -0,0 +1 @@
+README-AGL.md \ No newline at end of file
diff --git a/meta-app-framework/README-AGL.md b/meta-app-framework/README-AGL.md
new file mode 100644
index 000000000..bd0c2de8f
--- /dev/null
+++ b/meta-app-framework/README-AGL.md
@@ -0,0 +1,31 @@
+Overview
+========
+
+The
+[AGL Project](https://www.automotivelinux.org/) is an automotive-specific
+development environment that provides a Linux distribution
+[AGL UCB](https://www.automotivelinux.org/software/unified-code-base).
+
+AGL uses layers designed to be compatible with the
+[Yocto Project](https://www.yoctoproject.org) and the
+[OpenEmbedded Project (OE)](https://www.openembedded.org/wiki/Main_Page).
+
+This section provides information about the layers used by the AGL Project:
+
+* **`meta-agl/meta-app-framework`**: Application (lifecycle) manager
+
+ ```
+ $ git clone https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl
+ ```
+
+Maintenance
+-----------
+
+All patches must be submitted via the AGL Gerrit instance at
+<https://gerrit.automotivelinux.org>. See this wiki page for
+details:
+
+<https://wiki.automotivelinux.org/agl-distro/contributing>
+
+Layer maintainers:
+* Jan-Simon Möller <jsmoeller@linuxfoundation.org>
diff --git a/meta-app-framework/classes/agl-app.bbclass b/meta-app-framework/classes/agl-app.bbclass
new file mode 100644
index 000000000..491a36e02
--- /dev/null
+++ b/meta-app-framework/classes/agl-app.bbclass
@@ -0,0 +1,83 @@
+#
+# AGL application systemd unit installation class
+#
+
+# Systemd template unit
+# * agl-app, agl-app-web, agl-app-flutter valid
+AGL_APP_TEMPLATE ?= "agl-app"
+
+# Application ID
+# This is what the application will be referred to in the list
+# exposed to clients by applaunchd, and generally ends up as the
+# identifier used by agl-compositor for application surface
+# activation.
+AGL_APP_ID ?= "${BPN}"
+
+# Application display name
+AGL_APP_NAME ?= "${AGL_APP_ID}"
+
+# Application executable
+# * agl-app template only
+# Use if the application ID and the executable name are both
+# different from the package name and each other as well.
+AGL_APP_EXEC ?= "${AGL_APP_ID}"
+
+# Web application bundle directory (non-absolute, so directory
+# name under /usr/lib/wam_apps)
+# * agl-app-web template only
+# Use if the web application bundle installs to a directory that
+# is not the same as the package name.
+AGL_APP_WAM_DIR ?= "${BPN}"
+
+do_install:append () {
+ install -d ${D}${systemd_system_unitdir}
+ ln -s ${AGL_APP_TEMPLATE}\@.service \
+ ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service
+
+ # NOTE: Unit & Service changes could potentially be collected
+ # and a single override .conf created, but things will be
+ # kept simple for now.
+
+ if [ "${AGL_APP_EXEC}" != "${AGL_APP_ID}" ]; then
+ install -d ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d
+ cat <<-EOF > ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d/exec.conf
+ [Service]
+ ExecStart=
+ ExecStart=${AGL_APP_EXEC}
+ EOF
+ fi
+
+ if [ "${AGL_APP_NAME}" != "${AGL_APP_ID}" ]; then
+ install -d ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d
+ cat <<-EOF > ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d/name.conf
+ [Unit]
+ Description=
+ Description=${AGL_APP_NAME}
+ EOF
+ fi
+
+ if [ "${AGL_APP_TEMPLATE}" = "agl-app-web" -a "${AGL_APP_ID}" != "${BPN}" ]; then
+ # The application ID does not necessarily match the package name
+ # used in the WAM install hierarchy, and the IDs are hard-coded in
+ # some of the web apps, so if necessary create an override for the
+ # environment variable used in place of directly deriving from %i
+ # (which will always be the app id).
+ install -d ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d
+ cat <<-EOF > ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d/wam.conf
+ [Service]
+ Environment=AGL_APP_WAM_DIR=${AGL_APP_WAM_DIR}
+ EOF
+ fi
+
+ if [ "${AGL_APP_TEMPLATE}" = "agl-app-flutter" ]; then
+ # Install icon if present
+ if [ -f ${S}/package/${AGL_APP_ID}.svg ]; then
+ install -d ${D}${datadir}/icons/hicolor/scalable
+ install -m 0644 ${S}/package/${AGL_APP_ID}.svg ${D}${datadir}/icons/hicolor/scalable/
+ fi
+ fi
+}
+
+FILES:${PN}:append = " ${systemd_system_unitdir} ${datadir}/icons"
+
+RDEPENDS:${PN}:append = " applaunchd-template-${AGL_APP_TEMPLATE}"
diff --git a/meta-app-framework/classes/aglwgt.bbclass b/meta-app-framework/classes/aglwgt.bbclass
deleted file mode 100644
index 00d3f9744..000000000
--- a/meta-app-framework/classes/aglwgt.bbclass
+++ /dev/null
@@ -1,185 +0,0 @@
-#
-# aglwgt bbclass
-#
-# Jan-Simon Moeller, jsmoeller@linuxfoundation.org
-#
-# This class expects a "make package" target in the makefile
-# which creates the wgt files in the package/ subfolder.
-# The makefile needs to use wgtpkg-pack.
-#
-
-# 'wgtpkg-pack' in af-main-native is required.
-DEPENDS_append = " af-main-native"
-
-# for bindings af-binder is required.
-DEPENDS_append = " af-binder"
-
-# for bindings that use the cmake-apps-module
-DEPENDS_append = " cmake-apps-module-native"
-
-# for hal bindings genskel is required.
-DEPENDS_append = " af-binder-devtools-native"
-
-# Re-enable strip for qmake based projects (default value is "echo")
-OE_QMAKE_STRIP = "${STRIP}"
-
-# Extra build arguments passed to the autobuild script invocations
-AGLWGT_EXTRA_BUILD_ARGS ?= 'VERBOSE=TRUE BUILD_ARGS="${PARALLEL_MAKE}"'
-
-# CMake based widgets that inherit cmake.bbclass will have the
-# following automatically appended to AGLWGT_EXTRA_BUILD_ARGS as
-# the value of CONFIGURE_FLAGS. This definition may need to be
-# extended to include more of what is passed in cmake.bbclass's
-# do_configure if it is found insufficient. Using the generated
-# toolchain.cmake file does fix issues with respect to finding the
-# Qt5 CMake modules that seem difficult to fix otherwise, so at the
-# very minimum it should be present.
-AGLWGT_CMAKE_CONFIGURE_ARGS ?= "-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake ${EXTRA_OECMAKE}"
-
-# Only widgets with recipe names starting with agl-service- are
-# assumed to have tests by default, set this to "1" to force
-# building/packaging of the test widget for other widgets.
-AGLWGT_HAVE_TESTS ?= "0"
-
-# Whether the widget should be auto-installed on first boot
-AGLWGT_AUTOINSTALL ?= "1"
-
-# Signature keys
-# These are default keys for development purposes !
-# Change it for production.
-WGTPKG_AUTOSIGN_0_agl-sign-wgts ??= "${WORKDIR}/recipe-sysroot-native/usr/share/afm/keys/developer.key.pem:${WORKDIR}/recipe-sysroot-native/usr/share/afm/certs/developer.cert.pem"
-WGTPKG_AUTOSIGN_1_agl-sign-wgts ??= "${WORKDIR}/recipe-sysroot-native/usr/share/afm/keys/platform.key.pem:${WORKDIR}/recipe-sysroot-native/usr/share/afm/certs/platform.cert.pem"
-
-export WGTPKG_AUTOSIGN_0
-export WGTPKG_AUTOSIGN_1
-
-python __anonymous () {
- # NOTE: AGLWGT_CMAKE_CONFIGURE_ARGS is not updated directly here,
- # but via the prefunc below to avoid issues around anonymous
- # python ordering conflicts with e.g. externalsrc.bbclass.
- if bb.data.inherits_class("cmake", d):
- d.appendVarFlag('do_compile', 'prefuncs', ' aglwgt_cmake_configure')
-}
-
-python aglwgt_cmake_configure () {
- # Define CONFIGURE_FLAGS appropriately if cmake.bbclass has been
- # inherited, see description of AGLWGT_CMAKE_CONFIGURE_ARGS above
- # for more details.
- cmake_config_args = d.getVar("AGLWGT_CMAKE_CONFIGURE_ARGS")
- if bb.data.inherits_class("cmake", d) and cmake_config_args:
- d.appendVar("AGLWGT_EXTRA_BUILD_ARGS", ' CONFIGURE_ARGS="' + cmake_config_args + '"')
- d.appendVarFlag("AGLWGT_EXTRA_BUILD_ARGS", "vardeps", " AGLWGT_CMAKE_CONFIGURE_ARGS")
-}
-
-# Placeholder to keep things like externalsrc that prefunc or append
-# do_configure working as expected.
-aglwgt_do_configure() {
- true
-}
-
-aglwgt_do_compile() {
- bldcmd=${S}/autobuild/agl/autobuild
- if [ ! -x "$bldcmd" ]; then
- bbfatal "Missing autobuild/agl/autobuild script"
- fi
-
- if [ "${S}" != "${B}" ]; then
- rm -rf ${B}
- mkdir -p ${B}
- cd ${B}
- fi
-
- $bldcmd package BUILD_DIR=${B}/build-release ${AGLWGT_EXTRA_BUILD_ARGS}
- $bldcmd package-debug BUILD_DIR_DEBUG=${B}/build-debug ${AGLWGT_EXTRA_BUILD_ARGS}
-
- if echo ${BPN} | grep -q '^agl-service-' || [ "${AGLWGT_HAVE_TESTS}" = "1" ]; then
- # Only try building the test widget if there's source for it, to avoid spurious errors
- if [ -f ${S}/test/CMakeLists.txt ]; then
- $bldcmd package-test BUILD_DIR_TEST=${B}/build-test ${AGLWGT_EXTRA_BUILD_ARGS}
- fi
-
- # The coverage widget should always build
- $bldcmd package-coverage BUILD_DIR_COVERAGE=${B}/build-coverage ${AGLWGT_EXTRA_BUILD_ARGS}
- fi
-}
-
-POST_INSTALL_LEVEL ?= "10"
-POST_INSTALL_SCRIPT ?= "${POST_INSTALL_LEVEL}-${PN}.sh"
-
-EXTRA_WGT_POSTINSTALL ?= ""
-
-aglwgt_do_install() {
- DEST=release
- if [ "${AGLWGT_AUTOINSTALL_${PN}}" = "0" ]; then
- DEST=manualinstall
- fi
-
- wgt="$(find ${B}/build-release -maxdepth 1 -name '*.wgt'| head -n 1)"
- if [ -n "$wgt" ]; then
- install -d ${D}/usr/AGL/apps/$DEST
- install -m 0644 $wgt ${D}/usr/AGL/apps/$DEST/
- else
- bbfatal "no package found in widget directory"
- fi
-
- for t in debug coverage test; do
- if [ "$(find ${B}/build-${t} -maxdepth 1 -name *-${t}.wgt)" ]; then
- install -d ${D}/usr/AGL/apps/${t}
- install -m 0644 ${B}/build-${t}/*-${t}.wgt ${D}/usr/AGL/apps/${t}/
- elif [ "$t" = "debug" ]; then
- # HTML5 widgets complicate things here, need to detect them and
- # not error out in that case. ATM this requires looking in the
- # config.xml of the release widget.
- rm -rf ${B}/tmp
- unzip $wgt config.xml -d ${B}/tmp
- if [ -f ${B}/tmp/config.xml -a \
- ! cat ${B}/tmp/config.xml | \
- grep -q '^[[:space:]]*<content[[:space:]]\+src="[^\"]*"[[:space:]]\+type="text/html"' ]; then
- bbfatal "no package found in ${t} widget directory"
- fi
- rm -rf ${B}/tmp
- elif echo ${BPN} | grep -q '^agl-service-' || [ "${AGLWGT_HAVE_TESTS}" = "1" ]; then
- if [ "$t" = "coverage" -o -f ${S}/test/CMakeLists.txt ]; then
- bbfatal "no package found in ${t} widget directory"
- fi
- fi
- done
-
- if [ "${AGLWGT_AUTOINSTALL}" != "0" ]; then
- # For now assume autoinstall of the release versions
- rm -rf ${D}/usr/AGL/apps/autoinstall
- ln -sf release ${D}/usr/AGL/apps/autoinstall
-
- APP_FILES=""
- for file in ${D}/usr/AGL/apps/autoinstall/*.wgt; do
- APP_FILES="${APP_FILES} $(basename $file)";
- done
- install -d ${D}/${sysconfdir}/agl-postinsts
- cat > ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} <<EOF
-#!/bin/sh -e
-for file in ${APP_FILES}; do
- /usr/bin/afm-install install /usr/AGL/apps/autoinstall/\$file
-done
-sync
-${EXTRA_WGT_POSTINSTALL}
-EOF
- chmod a+x ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT}
- fi
-}
-
-PACKAGES += "${PN}-test ${PN}-debug ${PN}-coverage"
-
-FILES_${PN} += " \
- /usr/AGL/apps/release/*.wgt \
- /usr/AGL/apps/autoinstall \
- /usr/AGL/apps/manualinstall \
- ${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} \
-"
-FILES_${PN}-test = "/usr/AGL/apps/test/*.wgt"
-FILES_${PN}-debug = "/usr/AGL/apps/debug/*.wgt"
-FILES_${PN}-coverage = "/usr/AGL/apps/coverage/*.wgt"
-
-# Test widgets need the parent widget and the test framework
-RDEPENDS_${PN}-test = "${PN} afb-test"
-
-EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/meta-app-framework/conf/include/agl-app-framework.inc b/meta-app-framework/conf/include/agl-app-framework.inc
new file mode 100644
index 000000000..296f49e79
--- /dev/null
+++ b/meta-app-framework/conf/include/agl-app-framework.inc
@@ -0,0 +1,2 @@
+# enable the layer
+AGL_FEATURES:append = " agl-app-fw"
diff --git a/meta-app-framework/conf/include/agl-appfw-smack.inc b/meta-app-framework/conf/include/agl-appfw-smack.inc
deleted file mode 100644
index 139722402..000000000
--- a/meta-app-framework/conf/include/agl-appfw-smack.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-# enable security features (smack, cynagora) - required by Application Framework
-OVERRIDES .= ":with-lsm-smack"
-DISTRO_FEATURES_append = " smack xattr"
-DISTRO_FEATURES_NATIVE_append = " smack xattr"
-
-# use tar-native to support SMACK extended attributes independently of host config
-IMAGE_CMD_TAR = "tar --xattrs --xattrs-include='*'"
-do_image_tar[depends] += "tar-replacement-native:do_populate_sysroot"
-EXTRANATIVEPATH += "tar-native"
-
-# security: enable ssh server in place of dropbear to support PAM on user sessions
-IMAGE_FEATURES += "ssh-server-openssh"
-
-# enforce copy of xattrs (to be removed, see SPEC-475)
-PACKAGECONFIG_append_pn-shadow = " attr"
-PACKAGECONFIG_append_pn-shadow-native = " attr"
-
-# set the home directory for root
-ROOT_HOME = "/home/0"
diff --git a/meta-app-framework/conf/layer.conf b/meta-app-framework/conf/layer.conf
index 21b8ee530..85565353e 100644
--- a/meta-app-framework/conf/layer.conf
+++ b/meta-app-framework/conf/layer.conf
@@ -5,8 +5,9 @@ BBPATH .= ":${LAYERDIR}"
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"
-BBFILE_COLLECTIONS += "app-framework"
-BBFILE_PATTERN_app-framework = "^${LAYERDIR}/"
-BBFILE_PRIORITY_app-framework = "70"
+BBFILE_COLLECTIONS += "meta-app-framework"
+BBFILE_PATTERN_meta-app-framework = "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-app-framework = "60"
-LAYERSERIES_COMPAT_app-framework = "dunfell"
+LAYERSERIES_COMPAT_meta-app-framework = "kirkstone"
+LAYERDEPENDS_meta-app-framework = "core aglcore openembedded-layer"
diff --git a/meta-app-framework/recipes-config/polkit-rule-agl-app/files/50-agl-app.rules b/meta-app-framework/recipes-config/polkit-rule-agl-app/files/50-agl-app.rules
new file mode 100644
index 000000000..35b9559c5
--- /dev/null
+++ b/meta-app-framework/recipes-config/polkit-rule-agl-app/files/50-agl-app.rules
@@ -0,0 +1,7 @@
+polkit.addRule(function(action, subject) {
+ if (action.id == "org.freedesktop.systemd1.manage-units" &&
+ action.lookup("unit").indexOf("agl-app") == 0 &&
+ subject.isInGroup("applaunchd")) {
+ return polkit.Result.YES;
+ }
+});
diff --git a/meta-app-framework/recipes-config/polkit-rule-agl-app/polkit-rule-agl-app.bb b/meta-app-framework/recipes-config/polkit-rule-agl-app/polkit-rule-agl-app.bb
new file mode 100644
index 000000000..57dda7787
--- /dev/null
+++ b/meta-app-framework/recipes-config/polkit-rule-agl-app/polkit-rule-agl-app.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Rule for agl-driver to control agl-app@ services"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://50-agl-app.rules"
+
+DEPENDS += "polkit"
+
+inherit useradd features_check
+REQUIRED_DISTRO_FEATURES = "polkit"
+
+do_install() {
+ install -m 700 -d ${D}${datadir}/polkit-1/rules.d
+ chown polkitd:root ${D}/${datadir}/polkit-1/rules.d
+ install -m 0644 ${WORKDIR}/50-agl-app.rules ${D}${datadir}/polkit-1/rules.d
+}
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} += "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;"
+
+FILES:${PN} += "${datadir}/polkit-1/rules.d/*.rules"
diff --git a/meta-app-framework/recipes-core/af-binder/af-binder-devtools-native_git.bb b/meta-app-framework/recipes-core/af-binder/af-binder-devtools-native_git.bb
deleted file mode 100644
index 70dafb38c..000000000
--- a/meta-app-framework/recipes-core/af-binder/af-binder-devtools-native_git.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require af-binder_${PV}.inc
-
-DEPENDS = "json-c-native"
-
-inherit cmake pkgconfig native
-
-EXTRA_OECMAKE_append = " -DONLY_DEVTOOLS=TRUE"
-
diff --git a/meta-app-framework/recipes-core/af-binder/af-binder_git.bb b/meta-app-framework/recipes-core/af-binder/af-binder_git.bb
deleted file mode 100644
index cf20e25a1..000000000
--- a/meta-app-framework/recipes-core/af-binder/af-binder_git.bb
+++ /dev/null
@@ -1,117 +0,0 @@
-require af-binder_${PV}.inc
-
-DEPENDS = "file json-c libmicrohttpd systemd util-linux openssl cynara"
-
-inherit cmake pkgconfig
-
-EXTRA_OECMAKE_append_class-target = "\
- -DUNITDIR_SYSTEM=${systemd_system_unitdir} \
-"
-
-EXTRA_OECMAKE_append_agl-devel = " \
- -DAGL_DEVEL=ON \
- -DINCLUDE_MONITORING=ON \
- -DINCLUDE_SUPERVISOR=ON -DAFS_SUPERVISION_SOCKET=/run/platform/supervisor \
-"
-
-pkg_postinst_${PN}() {
- mkdir -p "$D${libdir}/afb"
-}
-
-do_install_append_agl-devel_class-target() {
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d -m 0755 ${D}${systemd_system_unitdir}/multi-user.target.wants
- ln -s ../afm-api-supervisor.service ${D}${systemd_system_unitdir}/multi-user.target.wants/afm-api-supervisor.service
- fi
-}
-
-#############################################
-# main package
-#############################################
-
-FILES_${PN}_append_agl-devel = " ${libdir}/afb/monitoring ${systemd_system_unitdir}"
-
-RDEPENDS_${PN}-dev += "libafbwsc-dev"
-
-#############################################
-# intrinsic binding packages
-#############################################
-PACKAGES =+ "${PN}-intrinsic-bindings"
-ALLOW_EMPTY_${PN}-intrinsic-bindings = "1"
-
-PACKAGES_DYNAMIC = "${PN}-binding-*"
-
-python populate_packages_prepend () {
- afb_libdir = d.expand('${libdir}/afb')
- postinst = d.getVar('binding_postinst', True)
- pkgs = []
-
- pkgs += do_split_packages(d, afb_libdir, '(.*)-api\.so$', d.expand('${PN}-binding-%s'), 'AFB binding for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
- pkgs += do_split_packages(d, afb_libdir, '(.*(?!-api))\.so$', d.expand('${PN}-binding-%s'), 'AFB binding for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
-
- d.setVar('RDEPENDS_' + d.getVar('PN', True) + '-intrinsic-bindings', ' '.join(pkgs))
-}
-
-#############################################
-# tool package
-#############################################
-PACKAGES =+ "${PN}-tools"
-
-FILES_${PN}-tools = "\
- ${bindir}/afb-client-demo \
-"
-
-#############################################
-# setup libafbwsc package
-#############################################
-PACKAGES =+ "libafbwsc libafbwsc-dev"
-
-FILES_libafbwsc = "\
- ${libdir}/libafbwsc.so.* \
-"
-FILES_libafbwsc-dev = "\
- ${includedir}/afb/afb-wsj1.h \
- ${includedir}/afb/afb-ws-client.h \
- ${libdir}/libafbwsc.so \
- ${libdir}/pkgconfig/libafbwsc.pc \
-"
-
-#############################################
-# devtool package
-#############################################
-PACKAGES =+ "${PN}-devtools"
-
-FILES_${PN}-devtools = "\
- ${bindir}/afb-exprefs \
- ${bindir}/afb-json2c \
- ${bindir}/afb-genskel \
-"
-
-#############################################
-# supervisor package
-#############################################
-PACKAGES_append_agl-devel = " ${PN}-supervisor "
-
-FILES_${PN}-supervisor_agl-devel = "\
- ${bindir}/afs-supervisor \
- ${systemd_system_unitdir} \
-"
-
-#############################################
-# setup sample packages
-#############################################
-PACKAGES =+ "${PN}-samples"
-
-FILES_${PN}-samples = "\
- ${datadir}/af-binder \
-"
-
-#############################################
-# meta package
-#############################################
-PACKAGES =+ "${PN}-meta"
-ALLOW_EMPTY_${PN}-meta = "1"
-
-RDEPENDS_${PN}-meta += "${PN} ${PN}-tools libafbwsc ${PN}-intrinsic-bindings"
-RDEPENDS_${PN}-meta_append_agl-devel = " ${PN}-supervisor "
-
diff --git a/meta-app-framework/recipes-core/af-binder/af-binder_git.inc b/meta-app-framework/recipes-core/af-binder/af-binder_git.inc
deleted file mode 100644
index fbaa47bc7..000000000
--- a/meta-app-framework/recipes-core/af-binder/af-binder_git.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "HTTP REST interface to automotive backends for HTML5 UI support"
-DESCRIPTION = "Automotive-Framework-Binder Daemon provides a HTTP REST \
-interface to various automotive-oriented bindings, \
-allowing HTML5 UIs to send platform-specific requests in a secure way."
-
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/app-framework-binder"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/app-framework-binder;protocol=https;branch=${AGL_BRANCH}"
-
-SRCREV = "1b6249810b3ab2d0c7467355fa22fbf19ae4a725"
-PV = "${AGL_BRANCH}+git${SRCPV}"
-
-S = "${WORKDIR}/git"
-
-CFLAGS_append_agl-devel = " -DAGL_DEVEL"
-
-EXTRA_OECMAKE_append = "\
- -DAGLVERSION=${AGLVERSION} \
-"
-
diff --git a/meta-app-framework/recipes-core/af-binder/nativesdk-af-binder-devtools_git.bb b/meta-app-framework/recipes-core/af-binder/nativesdk-af-binder-devtools_git.bb
deleted file mode 100644
index 3223dd05d..000000000
--- a/meta-app-framework/recipes-core/af-binder/nativesdk-af-binder-devtools_git.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require af-binder_${PV}.inc
-
-DEPENDS = "nativesdk-json-c"
-
-inherit cmake pkgconfig nativesdk
-
-EXTRA_OECMAKE_append = " -DONLY_DEVTOOLS=TRUE"
-
diff --git a/meta-app-framework/recipes-core/af-main/af-main_git.bb b/meta-app-framework/recipes-core/af-main/af-main_git.bb
deleted file mode 100644
index 917eaa414..000000000
--- a/meta-app-framework/recipes-core/af-main/af-main_git.bb
+++ /dev/null
@@ -1,122 +0,0 @@
-require af-main_${PV}.inc
-
-# NOTE: using libcap-native and setcap in install doesn't work
-# NOTE: maybe setting afm_name to agl-framework is cleaner but has implications
-# NOTE: there is a hack of security for using groups and dbus (to be checked)
-# NOTE: using ZIP programs creates directories with mode 777 (very bad)
-
-inherit cmake pkgconfig useradd systemd
-BBCLASSEXTEND = "native"
-
-SECTION = "base"
-
-DEPENDS = "openssl libxml2 xmlsec1 systemd libzip json-c systemd security-manager af-binder sed m4"
-DEPENDS_class-native = "openssl libxml2 xmlsec1 libzip json-c"
-RDEPENDS_${PN}_class-target += "af-binder-tools nss-localuser cynagoauth"
-
-PACKAGE_WRITE_DEPS_append_with-lsm-smack = " smack-native libcap-native"
-
-EXTRA_OECMAKE_append_class-native = "\
- -DUSE_LIBZIP=1 \
- -DUSE_SIMULATION=1 \
- -DUSE_SDK=1 \
- -DAGLVERSION=${AGLVERSION} \
- -Dafm_name=${afm_name} \
- -Dafm_confdir=${afm_confdir} \
- -Dafm_datadir=${afm_datadir} \
-"
-
-EXTRA_OECMAKE_append_class-target = "\
- -DUSE_LIBZIP=1 \
- -DUSE_SIMULATION=0 \
- -DUSE_SDK=0 \
- -DAGLVERSION=${AGLVERSION} \
- -Dafm_name=${afm_name} \
- -Dafm_confdir=${afm_confdir} \
- -Dafm_datadir=${afm_datadir} \
- -Dsystemd_units_root=${systemd_units_root} \
- -DUNITDIR_USER=${systemd_user_unitdir} \
- -DUNITDIR_SYSTEM=${systemd_system_unitdir} \
-"
-
-# ------------------------ WARNING WARNING WARNNING ---------------------------
-#
-# ATM (FF.rc2), forcing all apps to be signed is an issue when building without
-# agl-devel feature. A workaround is to define ALLOW_NO_SIGNATURE=ON for all
-# builds but this must be removed later. See SPEC-1614 for more details.
-#
-# A variable AGL_FORBID_UNSIGNED_APPS is introduced to enable/disable this
-# workaround in local.conf and allow transition to signed apps:
-# * forbid unsigned apps by setting: AGL_FORBID_UNSIGNED_APPS="1"
-# * [DEFAULT] allow unsigned apps: do nothing (or set: AGL_FORBID_UNSIGNED_APPS="0")
-AGL_FORBID_UNSIGNED_APPS ?= "0"
-#
-# WORKAROUND:
-EXTRA_OECMAKE_append_agl-devel = " -DAGL_DEVEL=1"
-EXTRA_OECMAKE_append = " ${@bb.utils.contains('AGL_FORBID_UNSIGNED_APPS','1','','-DALLOW_NO_SIGNATURE=ON', d)}"
-#
-# Correct version (IMPORTANT TODO: to be restored later):
-#EXTRA_OECMAKE_append_agl-devel = " -DAGL_DEVEL=1 -DALLOW_NO_SIGNATURE=ON"
-#
-# ------------------------ WARNING WARNING WARNNING ---------------------------
-
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--system --gid ${afm_name} --home-dir ${afm_datadir} ${afm_name}"
-GROUPADD_PARAM_${PN} = "--system ${afm_name}"
-
-RDEPENDS_${PN}_append_with-lsm-smack = " smack bash"
-DEPENDS_append_with-lsm-smack = " smack-native"
-
-do_install_append_class-target() {
- install -d ${D}${bindir}
- install -d -m 0775 ${D}${systemd_units_root}/system
- install -d -m 0775 "${D}${systemd_units_root}/system/multi-user.target.wants"
- install -d -m 0775 "${D}${systemd_units_root}/system/afm-user-session@.target.wants"
- install -d -m 0775 ${D}${systemd_units_root}/user
- install -d -m 0775 ${D}${systemd_units_root}/user/default.target.wants
- install -d -m 0775 ${D}${systemd_units_root}/user/sockets.target.wants
- install -d ${D}${afm_datadir}/applications
- install -d ${D}${afm_datadir}/icons
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d -m 0755 ${D}${systemd_system_unitdir}/multi-user.target.wants
- install -d -m 0755 ${D}${systemd_system_unitdir}/sockets.target.wants
- ln -sf ../afm-system-setup.service ${D}${systemd_system_unitdir}/multi-user.target.wants/afm-system-setup.service
- ln -sf ../afm-system-daemon.service ${D}${systemd_system_unitdir}/multi-user.target.wants/afm-system-daemon.service
- ln -sf ../afm-system-daemon.socket ${D}${systemd_system_unitdir}/sockets.target.wants/afm-system-daemon.socket
- fi
-}
-
-pkg_postinst_ontarget_${PN}() {
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- chgrp ${afm_name} $D${systemd_units_root}/system
- chgrp ${afm_name} $D${systemd_units_root}/system/afm-user-session@.target.wants
- chgrp ${afm_name} $D${systemd_units_root}/user/default.target.wants
- chgrp ${afm_name} $D${systemd_units_root}/user/sockets.target.wants
- fi
- chown ${afm_name}:${afm_name} $D${afm_datadir}
- chown ${afm_name}:${afm_name} $D${afm_datadir}/applications
- chown ${afm_name}:${afm_name} $D${afm_datadir}/icons
-}
-
-pkg_postinst_ontarget_${PN}_append_with-lsm-smack() {
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- chsmack -a 'System::Shared' -t $D${systemd_units_root}/system
- chsmack -a 'System::Shared' -t $D${systemd_units_root}/system/afm-user-session@.target.wants
- chsmack -a 'System::Shared' -t $D${systemd_units_root}/user/default.target.wants
- chsmack -a 'System::Shared' -t $D${systemd_units_root}/user/sockets.target.wants
- fi
- chsmack -a 'System::Shared' -t $D${afm_datadir}
- chsmack -a 'System::Shared' -t $D${afm_datadir}/applications
- chsmack -a 'System::Shared' -t $D${afm_datadir}/icons
-}
-FILES_${PN} += "${systemd_units_root}/* ${systemd_system_unitdir} ${systemd_user_unitdir}"
-FILES_${PN}_append_agl-sign-wgts = " ${datadir}/afm"
-
-PACKAGES =+ "${PN}-binding ${PN}-binding-dbg"
-FILES_${PN}-binding = " ${afb_binding_dir}/afm-main-binding.so "
-FILES_${PN}-binding-dbg = " ${afb_binding_dir}/.debug/afm-main-binding.so "
-
-PACKAGES =+ "${PN}-tools ${PN}-tools-dbg"
-FILES_${PN}-tools = "${bindir}/wgtpkg-*"
-FILES_${PN}-tools-dbg = "${bindir}/.debug/wgtpkg-*"
diff --git a/meta-app-framework/recipes-core/af-main/af-main_git.inc b/meta-app-framework/recipes-core/af-main/af-main_git.inc
deleted file mode 100644
index 7eb94b23c..000000000
--- a/meta-app-framework/recipes-core/af-main/af-main_git.inc
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "AGL Framework Main part"
-DESCRIPTION = "\
-This is a core framework component for managing \
-applications, widgets, and components. \
-"
-
-HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/app-framework-main"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/app-framework-main;protocol=https;branch=${AGL_BRANCH}"
-
-SRCREV = "af8db35cc01c57b7d1d2e4fa7815df8c16f8454f"
-PV = "${AGL_BRANCH}+git${SRCPV}"
-
-S = "${WORKDIR}/git"
-
-afm_name = "afm"
-afm_confdir = "${sysconfdir}/${afm_name}"
-afm_datadir = "/var/local/lib/${afm_name}"
-afb_binding_dir = "${libdir}/afb"
-systemd_units_root = "/var/local/lib/systemd"
-
-CFLAGS_append_agl-devel = " -DAGL_DEVEL"
-# only install sample keys in agl-devel mode
-# for production you need to deploy real keys
-EXTRA_OECMAKE_append_agl-sign-wgts = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '-DINSTALL_SAMPLE_KEYS=ON', '-DINSTALL_SAMPLE_KEYS=OFF', d)}"
-
-
-
diff --git a/meta-app-framework/recipes-core/af-main/nativesdk-af-main_git.bb b/meta-app-framework/recipes-core/af-main/nativesdk-af-main_git.bb
deleted file mode 100644
index 88ab4ae68..000000000
--- a/meta-app-framework/recipes-core/af-main/nativesdk-af-main_git.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-require af-main_${PV}.inc
-
-inherit nativesdk cmake pkgconfig
-
-SECTION = "base"
-
-DEPENDS = "nativesdk-openssl nativesdk-libxml2 nativesdk-xmlsec1 nativesdk-libzip nativesdk-json-c"
-
-EXTRA_OECMAKE = "\
- -DUSE_LIBZIP=1 \
- -DUSE_SIMULATION=1 \
- -DUSE_SDK=1 \
- -DAGLVERSION=${AGLVERSION} \
- -Dafm_name=${afm_name} \
- -Dafm_confdir=${afm_confdir} \
- -Dafm_datadir=${afm_datadir} \
-"
-
-do_install_append() {
- # remove unused .pc file we don't want to package
- rm -rf ${D}/${libdir}
-}
-
-PACKAGES = "${PN}-tools ${PN}-tools-dbg"
-FILES_${PN}-tools = "${bindir}/wgtpkg-* ${afm_confdir}/*"
-FILES_${PN}-tools_append_agl-sign-wgts = " ${datadir}/afm"
-FILES_${PN}-tools-dbg = "${bindir}/.debug/wgtpkg-*"
-
diff --git a/meta-app-framework/recipes-core/af-platform-setup/af-platform-setup_1.0.bb b/meta-app-framework/recipes-core/af-platform-setup/af-platform-setup_1.0.bb
deleted file mode 100644
index eb473cd14..000000000
--- a/meta-app-framework/recipes-core/af-platform-setup/af-platform-setup_1.0.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-HOMEPAGE = "here"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = "file://udev-shared.conf"
-
-S = "${WORKDIR}"
-
-do_install() {
- d=${D}${systemd_system_unitdir}/systemd-udevd.service.d
- install -d $d
- install -m 0644 ${S}/udev-shared.conf $d
-}
-
-FILES_${PN} = "${systemd_system_unitdir}"
diff --git a/meta-app-framework/recipes-core/af-platform-setup/files/udev-shared.conf b/meta-app-framework/recipes-core/af-platform-setup/files/udev-shared.conf
deleted file mode 100644
index cce02bc58..000000000
--- a/meta-app-framework/recipes-core/af-platform-setup/files/udev-shared.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-[Service]
-ExecStartPre=/bin/mkdir -p /run/udev
-ExecStartPre=/usr/bin/chsmack -r -a System::Shared -t /run/udev
-
diff --git a/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app-flutter@.service b/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app-flutter@.service
new file mode 100644
index 000000000..a9a2527e0
--- /dev/null
+++ b/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app-flutter@.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=%I
+
+[Service]
+Type=simple
+User=agl-driver
+Environment=FLUTTER_VERSION=3.3.7
+Environment=FLUTTER_RUNTIME=release
+EnvironmentFile=-/etc/default/flutter
+EnvironmentFile=-/etc/default/%I
+Environment=XDG_RUNTIME_DIR=/run/user/1001/
+ExecStart=/usr/bin/flutter-auto --b=/usr/share/flutter/%I/${FLUTTER_VERSION}/${FLUTTER_RUNTIME} --xdg-shell-app-id=%I
diff --git a/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app-web@.service b/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app-web@.service
new file mode 100644
index 000000000..e0353b6ae
--- /dev/null
+++ b/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app-web@.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=%I
+
+[Service]
+Type=simple
+User=agl-driver
+EnvironmentFile=-/etc/default/WebAppMgr.env
+Environment=XDG_RUNTIME_DIR=/run/user/1001/
+Environment=AGL_APP_WAM_DIR=%I
+ExecStart=/usr/bin/WebAppMgrCli --appid=%I --app-install-dir=/usr/lib/wam_apps/${AGL_APP_WAM_DIR}/
+
diff --git a/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app@.service b/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app@.service
new file mode 100644
index 000000000..234348846
--- /dev/null
+++ b/meta-app-framework/recipes-core/applaunchd/applaunchd/agl-app@.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=%I
+
+[Service]
+Type=simple
+User=agl-driver
+Environment=XDG_RUNTIME_DIR=/run/user/1001/
+ExecStart=%i
diff --git a/meta-app-framework/recipes-core/applaunchd/applaunchd/applaunchd.service b/meta-app-framework/recipes-core/applaunchd/applaunchd/applaunchd.service
new file mode 100644
index 000000000..73d36bd0c
--- /dev/null
+++ b/meta-app-framework/recipes-core/applaunchd/applaunchd/applaunchd.service
@@ -0,0 +1,13 @@
+[Unit]
+Wants=network.target polkit.service
+After=network.target polkit.service
+
+[Service]
+Type=notify
+User=applaunchd
+Environment=XDG_DATA_DIRS=/usr/share
+ExecStart=/usr/bin/applaunchd
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-app-framework/recipes-core/applaunchd/applaunchd/no-network.conf b/meta-app-framework/recipes-core/applaunchd/applaunchd/no-network.conf
new file mode 100644
index 000000000..c7c4f8a31
--- /dev/null
+++ b/meta-app-framework/recipes-core/applaunchd/applaunchd/no-network.conf
@@ -0,0 +1,2 @@
+[Service]
+PrivateNetwork=true
diff --git a/meta-app-framework/recipes-core/applaunchd/applaunchd/private-tmp.conf b/meta-app-framework/recipes-core/applaunchd/applaunchd/private-tmp.conf
new file mode 100644
index 000000000..0bdba7c99
--- /dev/null
+++ b/meta-app-framework/recipes-core/applaunchd/applaunchd/private-tmp.conf
@@ -0,0 +1,2 @@
+[Service]
+PrivateTmp=yes
diff --git a/meta-app-framework/recipes-core/applaunchd/applaunchd_git.bb b/meta-app-framework/recipes-core/applaunchd/applaunchd_git.bb
new file mode 100644
index 000000000..c1bafad8e
--- /dev/null
+++ b/meta-app-framework/recipes-core/applaunchd/applaunchd_git.bb
@@ -0,0 +1,78 @@
+SUMMARY = "AGL Application Launcher service"
+DESCRIPTION = "AGL Application Launcher service build with recipe method"
+HOMEPAGE = "https://git.automotivelinux.org/src/applaunchd"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+DEPENDS = " \
+ glib-2.0 \
+ glib-2.0-native \
+ protobuf-native \
+ grpc-native \
+ grpc \
+ systemd \
+"
+
+PV = "2.0+git${SRCPV}"
+
+SRC_URI = " \
+ git://gerrit.automotivelinux.org/gerrit/src/applaunchd;protocol=https;branch=${AGL_BRANCH} \
+ file://applaunchd.service \
+ file://agl-app@.service \
+ file://agl-app-web@.service \
+ file://agl-app-flutter@.service \
+ file://no-network.conf \
+ file://private-tmp.conf \
+"
+SRCREV = "c32fe42f40d0af8b31b6113a3140f52b83be7769"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig systemd useradd features_check
+
+REQUIRED_DISTRO_FEATURES = "systemd polkit"
+
+USERADD_PACKAGES = "${PN}"
+USERADDEXTENSION = "useradd-staticids"
+GROUPADD_PARAM:${PN} = "-g 1003 applaunchd ; "
+USERADD_PARAM:${PN} = "\
+ -g 1003 -u 1003 -o -d / -K PASS_MAX_DAYS=-1 applaunchd ; \
+"
+
+SYSTEMD_SERVICE:${PN} = "applaunchd.service"
+
+do_install:append() {
+ # Install generic template for all agl-app services
+ install -d ${D}${systemd_system_unitdir}
+ install -m 644 ${WORKDIR}/applaunchd.service ${D}${systemd_system_unitdir}/
+ install -m 644 ${WORKDIR}/agl-app@.service ${D}${systemd_system_unitdir}/
+ install -m 644 ${WORKDIR}/agl-app-web@.service ${D}${systemd_system_unitdir}/
+ install -m 644 ${WORKDIR}/agl-app-flutter@.service ${D}${systemd_system_unitdir}/
+
+ # Install individual sandboxing overrides/drop-ins to be used by apps
+ install -d ${D}${systemd_system_unitdir}/sandboxing
+ install -m 644 ${WORKDIR}/no-network.conf ${D}${systemd_system_unitdir}/sandboxing/
+ install -m 644 ${WORKDIR}/private-tmp.conf ${D}${systemd_system_unitdir}/sandboxing/
+}
+
+PACKAGE_BEFORE_PN += "${PN}-template-agl-app ${PN}-template-agl-app-web ${PN}-template-agl-app-flutter"
+
+FILES:${PN} += "${systemd_system_unitdir}"
+
+FILES:${PN}-template-agl-app = "${systemd_system_unitdir}/agl-app@.service"
+
+FILES:${PN}-template-agl-app-web = "${systemd_system_unitdir}/agl-app-web@.service"
+
+FILES:${PN}-template-agl-app-flutter = "${systemd_system_unitdir}/agl-app-flutter@.service"
+
+RDEPENDS:${PN} += " \
+ agl-users \
+ polkit-rule-agl-app \
+"
+
+RDEPENDS:${PN}-template-agl-app = "${PN}"
+
+RDEPENDS:${PN}-template-agl-app-web = "${PN}"
+
+RDEPENDS:${PN}-template-agl-app-flutter = "${PN}"
diff --git a/meta-app-framework/recipes-core/base-files/base-files_%.bbappend b/meta-app-framework/recipes-core/base-files/base-files_%.bbappend
deleted file mode 100644
index 1dddcd6f2..000000000
--- a/meta-app-framework/recipes-core/base-files/base-files_%.bbappend
+++ /dev/null
@@ -1,32 +0,0 @@
-RDEPENDS_${PN}_append_with-lsm-smack = " smack"
-PACKAGE_WRITE_DEPS_append_with-lsm-smack = " smack-native"
-
-do_install_append() {
- install -m 0700 -d ${D}/${sysconfdir}/skel
- chmod -R 0700 ${D}/${sysconfdir}/skel
- install -m 0700 -d ${D}/${sysconfdir}/skel/app-data
- install -m 0700 -d ${D}/${sysconfdir}/skel/.config
- install -m 0755 -d ${D}/var
- if [ -d ${D}/usr/local ]; then
- mv ${D}/usr/local ${D}/var
- else
- install -m 0755 -d ${D}/var/local
- fi
- ln -s ../var/local ${D}/usr/local
-}
-
-do_install_append_with-lsm-smack () {
- install -d ${D}/${sysconfdir}/smack/accesses.d
- cat > ${D}/${sysconfdir}/smack/accesses.d/default-access-domains-no-user <<EOF
-System User::App-Shared rwxat
-System User::Home rwxat
-EOF
- chmod 0644 ${D}/${sysconfdir}/smack/accesses.d/default-access-domains-no-user
-}
-
-pkg_postinst_${PN}_append_with-lsm-smack() {
- chsmack -r -a 'User::Home' -t -D $D/${sysconfdir}/skel
- chsmack -a 'User::App-Shared' -D $D/${sysconfdir}/skel/app-data
- cp -rTf --preserve=all $D/${sysconfdir}/skel $D/${ROOT_HOME}
-}
-
diff --git a/meta-app-framework/recipes-core/nss-localuser/nss-localuser_0.1.bb b/meta-app-framework/recipes-core/nss-localuser/nss-localuser_0.1.bb
deleted file mode 100644
index 45861f7cc..000000000
--- a/meta-app-framework/recipes-core/nss-localuser/nss-localuser_0.1.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "Name Service Switch module for resolving the local user hostname"
-
-DESCRIPTION = "plugin for the GNU Name Service Switch (NSS) \
-functionality of the GNU C Library (`glibc`) providing host name \
-resolution for *"localuser"* family of virtual hostnames."
-
-HOMEPAGE = "https://git.automotivelinux.org/src/nss-localuser/"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=79ad77111c398994735201536a4749ba"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/nss-localuser;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "66803c6fdb609ed83a78b9194ecb23e9c1b773e7"
-PV = "${AGL_BRANCH}+git${SRCPV}"
-
-RDEPENDS_${PN} = "base-files"
-
-S = "${WORKDIR}/git"
-
-do_compile() {
- make
-}
-
-do_install() {
- make nssdir=${D}${libdir} install
-}
-
-pkg_postinst_ontarget_${PN} () {
- sed -e '/^hosts:/s/\<localuser\>\s*//' \
- -e 's/\(^hosts:\s\s*\)\(.*\)/\1localuser \2/' \
- -i $D${sysconfdir}/nsswitch.conf
-}
-
-pkg_prerm_${PN} () {
- sed -e '/^hosts:/s/\<localuser\>\s*//' \
- -i $D${sysconfdir}/nsswitch.conf
-}
-
-INSANE_SKIP_${PN} = "ldflags"
diff --git a/meta-app-framework/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/meta-app-framework/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
deleted file mode 100644
index fc73e8f3d..000000000
--- a/meta-app-framework/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend
+++ /dev/null
@@ -1,2 +0,0 @@
-RDEPENDS_${PN} =+ "nativesdk-af-main-tools nativesdk-af-binder-devtools"
-
diff --git a/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework-examples.bb b/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework-examples.bb
deleted file mode 100644
index 7ba909162..000000000
--- a/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework-examples.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "AGL Application Framework examples"
-DESCRIPTION = "The set of examples associated to the AGL Application Framework"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-app-framework-examples \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- "
diff --git a/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework.bb b/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework.bb
deleted file mode 100644
index 854835d4c..000000000
--- a/meta-app-framework/recipes-core/packagegroups/packagegroup-agl-app-framework.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "AGL Application Framework core packages"
-DESCRIPTION = "The set of packages required by the AGL Application Framework"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PACKAGES = "\
- packagegroup-agl-app-framework \
- "
-
-ALLOW_EMPTY_${PN} = "1"
-
-RDEPENDS_${PN} += "\
- af-binder \
- libafbwsc \
- af-main \
- nss-localuser \
- systemd-agl-sync \
- af-platform-setup \
- "
diff --git a/meta-app-framework/recipes-core/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch b/meta-app-framework/recipes-core/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch
deleted file mode 100644
index 4c91f7fa3..000000000
--- a/meta-app-framework/recipes-core/security-manager/security-manager/0001-Adapt-rules-to-AGL.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 935e4e4e746b5ffcda80c80097dc75c2581c1a89 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Wed, 19 Oct 2016 13:45:54 +0200
-Subject: [PATCH] Adapt rules to AGL
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-AGL distribution uses the repository https://github.com/01org/meta-intel-iot-security.git
-as basis for the integration of security framework. The security framework
-that it provides is an evolution of the security framework of tizen refited
-to the distribution Ostro of Intel. This refit took the decision to simplify
-the model by removing the running label "User". More can be viewed here:
-https://github.com/01org/meta-intel-iot-security/pull/116
-
-This commits adapt the template to the rules that are now needed
-after this evolution.
-
-It also integrates one other evolutions: the shared label becomes User::App-Shared instead
-of User::App::Shared to avoid collision with application of id "Shared".
-
-Change-Id: Ieb566b63f8c8e691b5f75e06499a3b576d042546
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- policy/app-rules-template.smack | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/policy/app-rules-template.smack b/policy/app-rules-template.smack
-index 1311169..b4cd2e3 100644
---- a/policy/app-rules-template.smack
-+++ b/policy/app-rules-template.smack
-@@ -1,12 +1,10 @@
--System ~APP~ rwx
-+System ~APP~ rwxa
-+System ~PKG~ rwxat
- ~APP~ System wx
- ~APP~ System::Shared rx
- ~APP~ System::Run rwxat
- ~APP~ System::Log rwxa
- ~APP~ _ l
--User ~APP~ rwxa
--User ~PKG~ rwxat
--~APP~ User wx
- ~APP~ User::Home rxl
--~APP~ User::App::Shared rwxat
-+~APP~ User::App-Shared rwxat
- ~APP~ ~PKG~ rwxat
---
-2.7.4
-
diff --git a/meta-app-framework/recipes-core/security-manager/security-manager_%.bbappend b/meta-app-framework/recipes-core/security-manager/security-manager_%.bbappend
deleted file mode 100644
index 3306d4c72..000000000
--- a/meta-app-framework/recipes-core/security-manager/security-manager_%.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/security-manager:"
-
-EXTRA_OECMAKE =+ " -DGLOBALUSER=afm"
-SRC_URI += " \
- file://0001-Adapt-rules-to-AGL.patch \
-"
-
diff --git a/meta-app-framework/recipes-core/shadow/shadow_%.bbappend b/meta-app-framework/recipes-core/shadow/shadow_%.bbappend
deleted file mode 100644
index 4f594d47c..000000000
--- a/meta-app-framework/recipes-core/shadow/shadow_%.bbappend
+++ /dev/null
@@ -1,6 +0,0 @@
-
-do_install_append() {
- sed -i '/^UMASK/s:^.*$:UMASK 077:' ${D}${sysconfdir}/login.defs
-}
-
-
diff --git a/meta-app-framework/recipes-core/systemd-sync/systemd-agl-sync_1.0.bb b/meta-app-framework/recipes-core/systemd-sync/systemd-agl-sync_1.0.bb
deleted file mode 100644
index 389ab2424..000000000
--- a/meta-app-framework/recipes-core/systemd-sync/systemd-agl-sync_1.0.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "Systemd synchronization script"
-DESCRIPTION = "\
-Systemd synchronization script \
-reload daemon at the first boot. \
-"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-#This script should be the last to be execute at the first boot
-POST_INSTALL_LEVEL = "X0"
-POST_INSTALL_SCRIPT ?= "${POST_INSTALL_LEVEL}-${PN}.sh"
-
-do_install() {
- install -d ${D}/${sysconfdir}/agl-postinsts
- cat > ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} <<EOF
-#!/bin/sh -e
-echo "restart daemon ..."
-result=0
-systemctl daemon-reload
-if [ \$? -ne 0 ]; then
- result=1
-fi
-systemctl restart sockets.target
-if [ \$? -ne 0 ]; then
- result=1
-fi
-
-if [ \$result -eq 0 ]; then
- echo "restart daemon OK"
- exit \$result
-else
- echo "restart daemon failed"
- exit \$result
-fi
-EOF
- chmod a+x ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT}
-}
-
-FILES_${PN} = "${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT}"
diff --git a/meta-app-framework/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bbappend b/meta-app-framework/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bbappend
deleted file mode 100644
index 590ab708a..000000000
--- a/meta-app-framework/recipes-devtools/run-agl-postinsts/run-agl-postinsts_1.0.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-SYSTEMD_SERVICE_AFTER_append = " afm-system-daemon.service"
diff --git a/meta-app-framework/recipes-kernel/linux/linux-%.bbappend b/meta-app-framework/recipes-kernel/linux/linux-%.bbappend
deleted file mode 100644
index fba5bf13d..000000000
--- a/meta-app-framework/recipes-kernel/linux/linux-%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/linux:"
-SRC_URI_append_with-lsm-smack = " file://audit.cfg"
-
diff --git a/meta-app-framework/recipes-kernel/linux/linux/audit.cfg b/meta-app-framework/recipes-kernel/linux/linux/audit.cfg
deleted file mode 100644
index 214dbe33f..000000000
--- a/meta-app-framework/recipes-kernel/linux/linux/audit.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend
deleted file mode 100644
index 8445a9edd..000000000
--- a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-core-security.bbappend
+++ /dev/null
@@ -1,9 +0,0 @@
-RDEPENDS_${PN} += "\
- smack-system-setup \
- xmlsec1 \
- cynagora \
- security-manager \
- security-manager-policy \
- agl-users \
- "
-
diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend
deleted file mode 100644
index ad09e5ddf..000000000
--- a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-boot.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-RDEPENDS_${PN} += "\
- packagegroup-agl-app-framework \
- "
diff --git a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend b/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend
deleted file mode 100644
index ad09e5ddf..000000000
--- a/meta-app-framework/recipes-platform/packagegroups/packagegroup-agl-image-minimal.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-RDEPENDS_${PN} += "\
- packagegroup-agl-app-framework \
- "
diff --git a/meta-app-framework/recipes-security/xmlsec1/xmlsec1_1.%.bbappend b/meta-app-framework/recipes-security/xmlsec1/xmlsec1_1.%.bbappend
deleted file mode 100644
index 09820be2f..000000000
--- a/meta-app-framework/recipes-security/xmlsec1/xmlsec1_1.%.bbappend
+++ /dev/null
@@ -1,4 +0,0 @@
-# Disable nss to avoid build issues on native
-PACKAGECONFIG = "gnutls libgcrypt openssl des"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-app-framework/recipes-support/libcap/libcap/removing-capability-enforcement.patch b/meta-app-framework/recipes-support/libcap/libcap/removing-capability-enforcement.patch
deleted file mode 100644
index fa359fa87..000000000
--- a/meta-app-framework/recipes-support/libcap/libcap/removing-capability-enforcement.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From c34b2725817d4fd1fd6878bbb16617cb9e3e3a70 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Fri, 22 Jan 2016 16:23:59 +0100
-Subject: [PATCH] removing capability enforcement
-
-Signed-off-by: ronan <ronan@iot.bzh>
-
-Change-Id: Idb724192ceab176a611bbed45c0ebc9c8eb5dd30
----
- progs/setcap.c | 45 +--------------------------------------------
- 1 file changed, 1 insertion(+), 44 deletions(-)
-
-diff --git a/progs/setcap.c b/progs/setcap.c
-index 7304343..71999b6 100644
---- a/progs/setcap.c
-+++ b/progs/setcap.c
-@@ -58,11 +58,9 @@ static int read_caps(int quiet, const char *filename, char *buffer)
-
- int main(int argc, char **argv)
- {
-- int tried_to_cap_setfcap = 0;
- char buffer[MAXCAP+1];
- int retval, quiet=0, verify=0;
- cap_t mycaps;
-- cap_value_t capflag;
-
- if (argc < 3) {
- usage();
-@@ -150,54 +148,13 @@ int main(int argc, char **argv)
- printf("%s: OK\n", *argv);
- }
- } else {
-- if (!tried_to_cap_setfcap) {
-- capflag = CAP_SETFCAP;
--
-- /*
-- * Raise the effective CAP_SETFCAP.
-- */
-- if (cap_set_flag(mycaps, CAP_EFFECTIVE, 1, &capflag, CAP_SET)
-- != 0) {
-- perror("unable to manipulate CAP_SETFCAP - "
-- "try a newer libcap?");
-- exit(1);
-- }
-- if (cap_set_proc(mycaps) != 0) {
-- perror("unable to set CAP_SETFCAP effective capability");
-- exit(1);
-- }
-- tried_to_cap_setfcap = 1;
-- }
- retval = cap_set_file(*++argv, cap_d);
- if (retval != 0) {
-- int explained = 0;
- int oerrno = errno;
--#ifdef linux
-- cap_value_t cap;
-- cap_flag_value_t per_state;
--
-- for (cap = 0;
-- cap_get_flag(cap_d, cap, CAP_PERMITTED, &per_state) != -1;
-- cap++) {
-- cap_flag_value_t inh_state, eff_state;
--
-- cap_get_flag(cap_d, cap, CAP_INHERITABLE, &inh_state);
-- cap_get_flag(cap_d, cap, CAP_EFFECTIVE, &eff_state);
-- if ((inh_state | per_state) != eff_state) {
-- fprintf(stderr, "NOTE: Under Linux, effective file capabilities must either be empty, or\n"
-- " exactly match the union of selected permitted and inheritable bits.\n");
-- explained = 1;
-- break;
-- }
-- }
--#endif /* def linux */
--
- fprintf(stderr,
- "Failed to set capabilities on file `%s' (%s)\n",
- argv[0], strerror(oerrno));
-- if (!explained) {
-- usage();
-- }
-+
- }
- }
- if (cap_d) {
---
-2.6.6
-
diff --git a/meta-app-framework/recipes-support/libcap/libcap_%.bbappend b/meta-app-framework/recipes-support/libcap/libcap_%.bbappend
deleted file mode 100644
index ac909a64c..000000000
--- a/meta-app-framework/recipes-support/libcap/libcap_%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS_append_class-native := ":${THISDIR}/${PN}"
-# FIXME: It needs to be determined if this is still required
-#SRC_URI_append_class-native = " file://removing-capability-enforcement.patch"
diff --git a/meta-app-framework/recipes-support/libzip/libzip_%.bbappend b/meta-app-framework/recipes-support/libzip/libzip_%.bbappend
deleted file mode 100644
index 5174650b1..000000000
--- a/meta-app-framework/recipes-support/libzip/libzip_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-BBCLASSEXTEND += "native nativesdk"
diff --git a/meta-app-framework/scripts/run-yocto-check-layer.sh b/meta-app-framework/scripts/run-yocto-check-layer.sh
new file mode 100755
index 000000000..cbe35ed8d
--- /dev/null
+++ b/meta-app-framework/scripts/run-yocto-check-layer.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+#set -x
+
+SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )"
+echo $SCRIPTPATH
+AGLROOT="$SCRIPTPATH/../../.."
+POKYDIR="$AGLROOT/external/poky"
+TMPROOT=`mktemp -d`
+
+rm -rf ${TMPROOT}/testbuild-ycl || true
+mkdir -p ${TMPROOT}/testbuild-ycl
+cd ${TMPROOT}/testbuild-ycl
+
+source $POKYDIR/oe-init-build-env .
+
+cat << EOF >> conf/local.conf
+# just define defaults
+AGL_FEATURES ?= ""
+AGL_EXTRA_IMAGE_FSTYPES ?= ""
+
+# important settings imported from poky-agl.conf
+# we cannot import the distro config right away
+# as the initial values are poky only till the layer
+# is added in
+
+AGL_DEFAULT_DISTRO_FEATURES := "usrmerge largefile opengl wayland pam bluetooth bluez5 3g polkit"
+DISTRO_FEATURES:append := " systemd wayland pam \${AGL_DEFAULT_DISTRO_FEATURES}"
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
+VIRTUAL-RUNTIME_init_manager = "systemd"
+
+EOF
+
+yocto-check-layer --no-auto-dependency \
+ --dependency \
+ $AGLROOT/meta-agl/meta-agl-core \
+ $AGLROOT/external/meta-openembedded/meta-oe \
+ -- \
+ $AGLROOT/meta-agl/meta-app-framework
+
+
+[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl
+
+exit 0
diff --git a/meta-netboot/README b/meta-netboot/README
index 7efa22650..a30238b9d 100644
--- a/meta-netboot/README
+++ b/meta-netboot/README
@@ -3,6 +3,19 @@ meta-netboot
This layer contains some recipes and configuration adjustments to allow network boot through NBD (network block device).
+Maintenance
+-----------
+
+All patches must be submitted via the AGL Gerrit instance at
+https://gerrit.automotivelinux.org. See this wiki page for
+details:
+
+https://wiki.automotivelinux.org/agl-distro/contributing
+
+Layer maintainers:
+ Jan-Simon Möller <jsmoeller@linuxfoundation.org>
+
+
Content and usage
-----------------
@@ -59,7 +72,7 @@ setenv bootargs_root 'root=/dev/ram0 ramdisk_size=16384 ip=dhcp'
setenv bootargs_video 'vmalloc=384M video=HDMI-A-1:1920x1080-32@60'
setenv serverip '<your_serverip>'
setenv 'bootdaddr' '0x48000000'
-setenv 'bootdfile' 'Image-r8a7795-h3ulcb.dtb'
+setenv 'bootdfile' 'Image-r8a77951-ulcb.dtb'
setenv 'bootdload_net' 'tftp ${bootdaddr} h3ulcb/${bootdfile}'
setenv 'bootkaddr' '0x48080000'
setenv 'bootkfile' 'Image'
diff --git a/meta-netboot/README.renesas-gen3 b/meta-netboot/README.renesas-gen3
deleted file mode 100644
index 496141eef..000000000
--- a/meta-netboot/README.renesas-gen3
+++ /dev/null
@@ -1,90 +0,0 @@
-Below are the environment variables that can be set in the u-boot console to boot the Renesas Gen3 ULCB boards.
-
-Adjust board type with the following identifiers:
-
-* 'm3ulcb' for Renesas Gen3 Starter Kit Pro
-* 'h3ulcb' for Renesas Gen3 Starter Kit Premium
-
-################## Common options #####################
-# these options are common to all configurations:
-
-##### board info
-
-# choose board
-setenv board m3ulcb
-setenv soc r8a7796
-# or
-setenv board h3ulcb
-setenv soc r8a7795
-
-##### boot mode
-# choose bootmode:
-# netboot
-setenv bootmode net
-# or sdcard
-setenv bootmode sd
-# or sdcard with initrd
-setenv bootmode sdi
-
-##### sdcard options
-# which sdcard slot to use
-setenv bootmmc '0:1'
-
-##### netboot options
-# replace <IP> and <NUM> by appropriate addresses
-setenv ipaddr '<board_IP>'
-setenv serverip '<server_IP>'
-setenv ethact ravb
-setenv ethaddr DE:AD:C0:FF:EE:<NUM>
-
-################## Internal variables #####################
-
-# kernel file
-setenv set_bootkfile 'setenv bootkfile Image'
-setenv bootkaddr 0x48080000
-
-# dtb file
-setenv set_bootdfile 'setenv bootdfile Image-${soc}-${board}.dtb'
-setenv bootdaddr 0x48000000
-
-# initrd
-setenv set_bootifile 'setenv bootifile initramfs-netboot-image-${board}.ext4.gz'
-setenv bootiaddr 0x5C3F9520
-setenv bootisize 3A6AB6
-
-# kernel args
-setenv bootargs_console 'console=ttySC0,115200 ignore_loglevel'
-setenv bootargs_video 'vmalloc=384M video=HDMI-A-1:1920x1080-32@60'
-setenv bootargs_extra 'rw rootfstype=ext4 rootwait rootdelay=2'
-
-# final boot command
-setenv bootcmd 'run bootcmd_${bootmode}'
-
-################ Boot on MMC (SDcard) #################
-
-setenv bootkload_sd 'ext4load mmc ${bootmmc} ${bootkaddr} boot/${bootkfile}'
-setenv bootiload_sd 'ext4load mmc ${bootmmc} ${bootiaddr} boot/${bootifile}'
-setenv bootdload_sd 'ext4load mmc ${bootmmc} ${bootdaddr} boot/${bootdfile}'
-
-# without initrd
-setenv bootargs_root_sd 'root=/dev/mmcblk1p1'
-setenv bootload_sd 'run set_bootkfile; run bootkload_sd; run set_bootdfile; run bootdload_sd'
-setenv bootcmd_sd 'setenv bootargs ${bootargs_console} ${bootargs_video} ${bootargs_root_sd} ${bootargs_extra}; run bootload_sd; booti ${bootkaddr} - ${bootdaddr}'
-
-# with initrd
-setenv bootargs_root_sdi 'root=/dev/ram0 ramdisk_size=16384'
-setenv bootload_sdi 'run set_bootkfile; run bootkload_sd; run set_bootdfile; run bootdload_sd; run set_bootifile; run bootiload_sd'
-setenv bootcmd_sdi 'setenv bootargs ${bootargs_console} ${bootargs_video} ${bootargs_root_sdi} ${bootargs_extra}; run bootload_sdi; booti ${bootkaddr} ${bootiaddr}:${bootisize} ${bootdaddr}'
-
-################ Netboot through TFTP+NBD ##################
-
-setenv bootkload_net 'tftp ${bootkaddr} ${board}/${bootkfile}'
-setenv bootdload_net 'tftp ${bootdaddr} ${board}/${bootdfile}'
-setenv bootiload_net 'tftp ${bootiaddr} ${board}/${bootifile}'
-
-setenv bootargs_root_net 'root=/dev/ram0 ramdisk_size=16384 ip=dhcp'
-setenv bootload_net 'run set_bootkfile; run bootkload_net; run set_bootdfile; run bootdload_net; run set_bootifile; run bootiload_net'
-
-setenv bootcmd_net 'setenv bootargs ${bootargs_console} ${bootargs_video} ${bootargs_root_net} ${bootargs_extra} nbd.server=${serverip}; run bootload_net; booti ${bootkaddr} ${bootiaddr}:${bootisize} ${bootdaddr}'
-
-
diff --git a/meta-netboot/classes/netboot.bbclass b/meta-netboot/classes/netboot.bbclass
index 63369285f..a18d64f5b 100644
--- a/meta-netboot/classes/netboot.bbclass
+++ b/meta-netboot/classes/netboot.bbclass
@@ -1,5 +1,10 @@
# Enable network bootable image and initrd/initramfs
+OVERRIDES .= ":netboot"
+# add 512MB of extra space in ext4 output image
+IMAGE_ROOTFS_EXTRA_SPACE = "524288"
+NETBOOT_ENABLED ??= "1"
+
python () {
if (bb.utils.contains("IMAGE_FSTYPES","live",True,False,d)):
# typical case for Minnowboard Max
diff --git a/meta-netboot/conf/include/agl-netboot.inc b/meta-netboot/conf/include/agl-netboot.inc
index fcff8c318..2c1307e81 100644
--- a/meta-netboot/conf/include/agl-netboot.inc
+++ b/meta-netboot/conf/include/agl-netboot.inc
@@ -1,5 +1,6 @@
INHERIT += "netboot"
-OVERRIDES .= ":netboot"
-# add 512MB of extra space in ext4 output image
-IMAGE_ROOTFS_EXTRA_SPACE = "524288"
+IMAGE_INSTALL:append:netboot = " \
+ curl \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'resolv-conf-relabel policycoreutils-loadpolicy', '', d)} \
+"
diff --git a/meta-netboot/conf/layer.conf b/meta-netboot/conf/layer.conf
index 50def90fc..ddf63c4a2 100644
--- a/meta-netboot/conf/layer.conf
+++ b/meta-netboot/conf/layer.conf
@@ -1,6 +1,3 @@
-# Added for futur conditionnals tests
-DISTRO_FEATURES_append = " netboot"
-
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"
@@ -12,4 +9,5 @@ BBFILE_COLLECTIONS += "meta-netboot"
BBFILE_PATTERN_meta-netboot = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-netboot = "60"
-LAYERSERIES_COMPAT_meta-netboot = "dunfell"
+LAYERSERIES_COMPAT_meta-netboot = "kirkstone"
+LAYERDEPENDS_meta-netboot = "core networking-layer"
diff --git a/meta-netboot/recipes-core/busybox/busybox_%.bbappend b/meta-netboot/recipes-core/busybox/busybox_%.bbappend
index 358913448..fcf6acfd1 100644
--- a/meta-netboot/recipes-core/busybox/busybox_%.bbappend
+++ b/meta-netboot/recipes-core/busybox/busybox_%.bbappend
@@ -1,6 +1 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI += " \
- file://enable_nbd.cfg \
- "
-
+require ${@bb.utils.contains('NETBOOT_ENABLED', '1', 'busybox_netboot.inc', '', d)}
diff --git a/meta-netboot/recipes-core/busybox/busybox_netboot.inc b/meta-netboot/recipes-core/busybox/busybox_netboot.inc
new file mode 100644
index 000000000..836493834
--- /dev/null
+++ b/meta-netboot/recipes-core/busybox/busybox_netboot.inc
@@ -0,0 +1,6 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+SRC_URI:append = " \
+ file://enable_nbd.cfg \
+ "
+
diff --git a/meta-netboot/recipes-core/images/initramfs-netboot-image.bb b/meta-netboot/recipes-core/images/initramfs-netboot-image.bb
index 965a0bd37..b5610f30d 100644
--- a/meta-netboot/recipes-core/images/initramfs-netboot-image.bb
+++ b/meta-netboot/recipes-core/images/initramfs-netboot-image.bb
@@ -1,23 +1,2 @@
-# Netboot initramfs image.
-DESCRIPTION = "Netboot initrd image"
-
-PACKAGE_INSTALL = "initramfs-netboot busybox base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}"
-
-# Do not pollute the initrd image with rootfs features
-IMAGE_FEATURES = ""
-
-export IMAGE_BASENAME = "initramfs-netboot-image"
-IMAGE_LINGUAS = ""
-
LICENSE = "MIT"
-
-IMAGE_FSTYPES := "${NETBOOT_FSTYPES}"
-inherit core-image
-
-# hotfix for dragonboard (which uses _append in the bsp)
-IMAGE_FSTYPES_remove += "wic.gz"
-
-IMAGE_ROOTFS_SIZE = "8192"
-IMAGE_ROOTFS_EXTRA_SPACE = "256"
-
-BAD_RECOMMENDATIONS += "busybox-syslog"
+require ${@bb.utils.contains('NETBOOT_ENABLED', '1', 'initramfs-netboot-image_netboot.inc', '', d)}
diff --git a/meta-netboot/recipes-core/images/initramfs-netboot-image_netboot.inc b/meta-netboot/recipes-core/images/initramfs-netboot-image_netboot.inc
new file mode 100644
index 000000000..b98024de6
--- /dev/null
+++ b/meta-netboot/recipes-core/images/initramfs-netboot-image_netboot.inc
@@ -0,0 +1,23 @@
+# Netboot initramfs image.
+DESCRIPTION = "Netboot initrd image"
+
+PACKAGE_INSTALL = "initramfs-netboot busybox base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}"
+
+# Do not pollute the initrd image with rootfs features
+IMAGE_FEATURES = ""
+
+export IMAGE_BASENAME = "initramfs-netboot-image"
+IMAGE_LINGUAS = ""
+
+LICENSE = "MIT"
+
+IMAGE_FSTYPES := "${NETBOOT_FSTYPES}"
+inherit core-image
+
+# hotfix for dragonboard (which uses _append in the bsp)
+IMAGE_FSTYPES:remove = "wic.gz"
+
+IMAGE_ROOTFS_SIZE = "8192"
+IMAGE_ROOTFS_EXTRA_SPACE = "256"
+
+BAD_RECOMMENDATIONS += "busybox-syslog"
diff --git a/meta-netboot/recipes-core/initramfs-netboot/files/init.sh b/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
index 2b8bc63d0..87a1acb80 100644
--- a/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
+++ b/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
@@ -21,7 +21,6 @@ EOF
# global variables
-SMACK=n
NBD_SERVER=
NBD_PORT=10809
NBD_DEV=/dev/nbd0
@@ -109,17 +108,6 @@ check_debug "Debug point 1. Exit to continue initrd script (mount NBD device)."
log_info "NBD parameters: device $NBD_DEV, server $NBD_SERVER:$NBD_PORT"
-# check if smack is active (and if so, mount smackfs)
-grep -q smackfs /proc/filesystems && {
- SMACK=y
-
- do_mount_fs smackfs /sys/fs/smackfs
-
- # adjust current label and network label
- echo System >/proc/self/attr/current
- echo System >/sys/fs/smackfs/ambient
-}
-
# start nbd client
try=5
while :;do
@@ -165,9 +153,24 @@ fi
# also use /proc/net/pnp to generate /etc/resolv.conf
rm -f /etc/resolv.conf
grep -v bootserver /proc/net/pnp | sed 's/^domain/search/g' >/etc/resolv.conf
-chsmack -A /etc/resolv.conf
-# unmount tmp and run to let systemd remount them with correct smack labels (SPEC-2596)
+# Do SELinux relabeling if required, to avoid a reboot that would complicate CI
+if [ -f /.autorelabel ]; then
+ # Nothing SELinux related works w/o the fs mounted
+ do_mount_fs selinuxfs /sys/fs/selinux
+
+ # Labeling requires the policy to be loaded
+ log_info "Loading SELinux policy"
+ /usr/sbin/load_policy
+
+ /usr/bin/selinux-autorelabel.sh
+
+ # Will get remounted by systemd startup, unmount to keep that behavior
+ # more like the non-netboot case.
+ umount /sys/fs/selinux
+fi
+
+# unmount tmp and run to let systemd remount them
log_info "Unmounting /tmp and /run"
umount /tmp
umount /run
diff --git a/meta-netboot/recipes-core/initramfs-netboot/initramfs-netboot_1.0.bb b/meta-netboot/recipes-core/initramfs-netboot/initramfs-netboot_1.0.bb
index f519694ed..dd61a1ea8 100644
--- a/meta-netboot/recipes-core/initramfs-netboot/initramfs-netboot_1.0.bb
+++ b/meta-netboot/recipes-core/initramfs-netboot/initramfs-netboot_1.0.bb
@@ -5,17 +5,17 @@ SRC_URI = "file://init.sh"
S = "${WORKDIR}"
-RDEPENDS_${PN} += "nbd-client"
+RDEPENDS:${PN} += "nbd-client"
do_install() {
- install -dm 0755 ${D}/etc
- touch ${D}/etc/initrd-release
+ install -dm 0755 ${D}${sysconfdir}
+ touch ${D}${sysconfdir}/initrd-release
install -dm 0755 ${D}/dev
- install -dm 0755 ${D}/sbin
- install -m 0755 ${WORKDIR}/init.sh ${D}/sbin/init
+ install -dm 0755 ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/init.sh ${D}${sbindir}/init
}
inherit allarch
-FILES_${PN} += " /dev /etc/initrd-release /sbin/init "
+FILES:${PN} += " /dev ${sysconfdir}/initrd-release ${sbindir}/init "
diff --git a/meta-netboot/recipes-core/systemd/files/resolv-conf-relabel.service b/meta-netboot/recipes-core/systemd/files/resolv-conf-relabel.service
new file mode 100644
index 000000000..5d9216cc2
--- /dev/null
+++ b/meta-netboot/recipes-core/systemd/files/resolv-conf-relabel.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=SELinux resolv.conf relabeling
+DefaultDependencies=no
+ConditionKernelCommandLine=ip
+ConditionKernelCommandLine=nbd.server
+After=local-fs.target
+Before=sysinit.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/restorecon -Fi /etc/resolv.conf
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta-netboot/recipes-core/systemd/resolv-conf-relabel.bb b/meta-netboot/recipes-core/systemd/resolv-conf-relabel.bb
new file mode 100644
index 000000000..36d096b44
--- /dev/null
+++ b/meta-netboot/recipes-core/systemd/resolv-conf-relabel.bb
@@ -0,0 +1,21 @@
+SUMMARY = "System unit to relabel resolve.conf"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://resolv-conf-relabel.service"
+
+inherit systemd allarch features_check
+
+SYSTEMD_SERVICE:${PN} = "${BPN}.service"
+
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/resolv-conf-relabel.service ${D}${systemd_system_unitdir}/
+}
+
+FILES:${PN} += "${systemd_system_unitdir}"
diff --git a/meta-netboot/recipes-support/nbd/nbd_%.bbappend b/meta-netboot/recipes-support/nbd/nbd_%.bbappend
index fb11ef9c2..e67e591ff 100644
--- a/meta-netboot/recipes-support/nbd/nbd_%.bbappend
+++ b/meta-netboot/recipes-support/nbd/nbd_%.bbappend
@@ -1,6 +1 @@
-
-do_install_append() {
- mv ${D}/${sbindir}/${BPN}-client ${D}/${sbindir}/${BPN}3-client
-}
-
-FILES_${PN}-client = "${sbindir}/${BPN}3-client"
+require ${@bb.utils.contains('NETBOOT_ENABLED', '1', 'nbd_netboot.inc', '', d)}
diff --git a/meta-netboot/recipes-support/nbd/nbd_netboot.inc b/meta-netboot/recipes-support/nbd/nbd_netboot.inc
new file mode 100644
index 000000000..4c9489de1
--- /dev/null
+++ b/meta-netboot/recipes-support/nbd/nbd_netboot.inc
@@ -0,0 +1,5 @@
+do_install:append() {
+ mv ${D}/${sbindir}/nbd-client ${D}/${sbindir}/nbd3-client
+}
+
+FILES:${PN}-client:append = " ${sbindir}/nbd3-client"
diff --git a/meta-netboot/scripts/run-yocto-check-layer.sh b/meta-netboot/scripts/run-yocto-check-layer.sh
new file mode 100755
index 000000000..979c76838
--- /dev/null
+++ b/meta-netboot/scripts/run-yocto-check-layer.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+#set -x
+
+SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )"
+echo $SCRIPTPATH
+AGLROOT="$SCRIPTPATH/../../.."
+POKYDIR="$AGLROOT/external/poky"
+TMPROOT=`mktemp -d`
+
+rm -rf ${TMPROOT}/testbuild-ycl || true
+mkdir -p ${TMPROOT}/testbuild-ycl
+cd ${TMPROOT}/testbuild-ycl
+
+source $POKYDIR/oe-init-build-env .
+
+cat << EOF >> conf/local.conf
+# just define defaults
+AGL_FEATURES ?= ""
+AGL_EXTRA_IMAGE_FSTYPES ?= ""
+
+# important settings imported from poky-agl.conf
+# we cannot import the distro config right away
+# as the initial values are poky only till the layer
+# is added in
+
+AGL_DEFAULT_DISTRO_FEATURES = "usrmerge largefile opengl wayland pam bluetooth bluez5 3g polkit"
+DISTRO_FEATURES:append = " systemd wayland pam \${AGL_DEFAULT_DISTRO_FEATURES}"
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
+VIRTUAL-RUNTIME_init_manager = "systemd"
+
+EOF
+
+yocto-check-layer --no-auto-dependency \
+ --dependency \
+ $AGLROOT/external/meta-openembedded/meta-oe \
+ $AGLROOT/external/meta-openembedded/meta-python \
+ $AGLROOT/external/meta-openembedded/meta-networking \
+ -- \
+ $AGLROOT/meta-agl/meta-netboot
+
+
+[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl
+
+exit 0
diff --git a/meta-pipewire/README b/meta-pipewire/README
new file mode 100644
index 000000000..3df3a289c
--- /dev/null
+++ b/meta-pipewire/README
@@ -0,0 +1,16 @@
+meta-pipewire
+=============
+
+This layer holds the sound manager 'pipewire' and session manager 'wireplumber'.
+
+Maintenance
+-----------
+
+All patches must be submitted via the AGL Gerrit instance at
+https://gerrit.automotivelinux.org. See this wiki page for
+details:
+
+https://wiki.automotivelinux.org/agl-distro/contributing
+
+Layer maintainers:
+ Jan-Simon Möller <jsmoeller@linuxfoundation.org>
diff --git a/meta-pipewire/conf/include/agl-pipewire.inc b/meta-pipewire/conf/include/agl-pipewire.inc
index edd893115..03b419c2a 100644
--- a/meta-pipewire/conf/include/agl-pipewire.inc
+++ b/meta-pipewire/conf/include/agl-pipewire.inc
@@ -1,3 +1 @@
-DISTRO_FEATURES_append = " pipewire"
-PREFERRED_RPROVIDER_virtual/pipewire-config = "pipewire-conf-agl"
-PREFERRED_RPROVIDER_virtual/wireplumber-config = "wireplumber-board-config-agl"
+DISTRO_FEATURES:append = " pipewire"
diff --git a/meta-pipewire/conf/layer.conf b/meta-pipewire/conf/layer.conf
index 68113221d..639a3ef43 100644
--- a/meta-pipewire/conf/layer.conf
+++ b/meta-pipewire/conf/layer.conf
@@ -9,4 +9,8 @@ BBFILE_COLLECTIONS += "meta-pipewire"
BBFILE_PATTERN_meta-pipewire = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-pipewire = "71"
-LAYERSERIES_COMPAT_meta-pipewire = "dunfell"
+LAYERSERIES_COMPAT_meta-pipewire = "kirkstone"
+LAYERDEPENDS_meta-pipewire = "openembedded-layer"
+
+#
+LICENSE_PATH += "${LAYERDIR}/licenses"
diff --git a/meta-pipewire/licenses/GPL-2.0-only b/meta-pipewire/licenses/GPL-2.0-only
new file mode 100644
index 000000000..7f5abbce2
--- /dev/null
+++ b/meta-pipewire/licenses/GPL-2.0-only
@@ -0,0 +1,132 @@
+
+GNU GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation`s software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author`s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors` reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone`s free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program`s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients` exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+one line to give the program`s name and an idea of what it does.
+Copyright (C) yyyy name of author
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w`. This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c`
+for details.
+The hypothetical commands `show w` and `show c` should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w` and `show c`; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision`
+(which makes passes at compilers) written
+by James Hacker.
+
+signature of Ty Coon, 1 April 1989
+Ty Coon, President of Vice
+This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License.
+
diff --git a/meta-pipewire/licenses/LGPL-2.1-or-later b/meta-pipewire/licenses/LGPL-2.1-or-later
new file mode 100644
index 000000000..04bb156e7
--- /dev/null
+++ b/meta-pipewire/licenses/LGPL-2.1-or-later
@@ -0,0 +1,468 @@
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 2.1, February 1999
+
+Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts as the
+successor of the GNU Library Public License, version 2, hence the version
+number 2.1.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially
+designated software packages--typically libraries--of the Free Software Foundation
+and other authors who decide to use it. You can use it too, but we suggest
+you first think carefully about whether this license or the ordinary General
+Public License is the better strategy to use in any particular case, based
+on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, not price.
+Our General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish); that you receive source code or can get it if you want it; that you
+can change the software and use pieces of it in new free programs; and that
+you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors
+to deny you these rights or to ask you to surrender these rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of
+the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+other code with the library, you must provide complete object files to the
+recipients, so that they can relink them with the library after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library,
+and (2) we offer you this license, which gives you legal permission to copy,
+distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no
+warranty for the free library. Also, if the library is modified by someone
+else and passed on, the recipients should know that what they have is not
+the original version, so that the original author's reputation will not be
+affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free
+program. We wish to make sure that a company cannot effectively restrict the
+users of a free program by obtaining a restrictive license from a patent holder.
+Therefore, we insist that any patent license obtained for a version of the
+library must be consistent with the full freedom of use specified in this
+license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License. This license, the GNU Lesser General Public License,
+applies to certain designated libraries, and is quite different from the ordinary
+General Public License. We use this license for certain libraries in order
+to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared
+library, the combination of the two is legally speaking a combined work, a
+derivative of the original library. The ordinary General Public License therefore
+permits such linking only if the entire combination fits its criteria of freedom.
+The Lesser General Public License permits more lax criteria for linking other
+code with the library.
+
+We call this license the "Lesser" General Public License because it does Less
+to protect the user's freedom than the ordinary General Public License. It
+also provides other free software developers Less of an advantage over competing
+non-free programs. These disadvantages are the reason we use the ordinary
+General Public License for many libraries. However, the Lesser license provides
+advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the
+widest possible use of a certain library, so that it becomes a de-facto standard.
+To achieve this, non-free programs must be allowed to use the library. A more
+frequent case is that a free library does the same job as widely used non-free
+libraries. In this case, there is little to gain by limiting the free library
+to free software only, so we use the Lesser General Public License.
+
+In other cases, permission to use a particular library in non-free programs
+enables a greater number of people to use a large body of free software. For
+example, permission to use the GNU C Library in non-free programs enables
+many more people to use the whole GNU operating system, as well as its variant,
+the GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users'
+freedom, it does ensure that the user of a program that is linked with the
+Library has the freedom and the wherewithal to run that program using a modified
+version of the Library.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code derived
+from the library, whereas the latter must be combined with the library in
+order to run.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library or other program
+which contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Lesser General
+Public License (also called "this License"). Each licensee is addressed as
+"you".
+
+A "library" means a collection of software functions and/or data prepared
+so as to be conveniently linked with application programs (which use some
+of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means either
+the Library or any derivative work under copyright law: that is to say, a
+work containing the Library or a portion of it, either verbatim or with modifications
+and/or translated straightforwardly into another language. (Hereinafter, translation
+is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications
+to it. For a library, complete source code means all the source code for all
+modules it contains, plus any associated interface definition files, plus
+the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and disclaimer
+of warranty; keep intact all the notices that refer to this License and to
+the absence of any warranty; and distribute a copy of this License along with
+the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all
+of these conditions:
+
+ a) The modified work must itself be a software library.
+
+b) You must cause the files modified to carry prominent notices stating that
+you changed the files and the date of any change.
+
+c) You must cause the whole of the work to be licensed at no charge to all
+third parties under the terms of this License.
+
+d) If a facility in the modified Library refers to a function or a table of
+data to be supplied by an application program that uses the facility, other
+than as an argument passed when the facility is invoked, then you must make
+a good faith effort to ensure that, in the event an application does not supply
+such function or table, the facility still operates, and performs whatever
+part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore, Subsection
+2d requires that any application-supplied function or table used by this function
+must be optional: if the application does not supply it, the square root function
+must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Library, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend
+to the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works based
+on the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public License
+has appeared, then you can specify that version instead if you wish.) Do not
+make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete corresponding
+machine-readable source code, which must be distributed under the terms of
+Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated
+place, then offering equivalent access to copy the source code from the same
+place satisfies the requirement to distribute the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that
+is part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not precisely
+defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+6. As an exception to the Sections above, you may also combine or link a "work
+that uses the Library" with the Library to produce a work containing portions
+of the Library, and distribute that work under terms of your choice, provided
+that the terms permit modification of the work for the customer's own use
+and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+a) Accompany the work with the complete corresponding machine-readable source
+code for the Library including whatever changes were used in the work (which
+must be distributed under Sections 1 and 2 above); and, if the work is an
+executable linked with the Library, with the complete machine-readable "work
+that uses the Library", as object code and/or source code, so that the user
+can modify the Library and then relink to produce a modified executable containing
+the modified Library. (It is understood that the user who changes the contents
+of definitions files in the Library will not necessarily be able to recompile
+the application to use the modified definitions.)
+
+b) Use a suitable shared library mechanism for linking with the Library. A
+suitable mechanism is one that (1) uses at run time a copy of the library
+already present on the user's computer system, rather than copying library
+functions into the executable, and (2) will operate properly with a modified
+version of the library, if the user installs one, as long as the modified
+version is interface-compatible with the version that the work was made with.
+
+c) Accompany the work with a written offer, valid for at least three years,
+to give the same user the materials specified in Subsection 6a, above, for
+a charge no more than the cost of performing this distribution.
+
+d) If distribution of the work is made by offering access to copy from a designated
+place, offer equivalent access to copy the above specified materials from
+the same place.
+
+e) Verify that the user has already received a copy of these materials or
+that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must
+include any data and utility programs needed for reproducing the executable
+from it. However, as a special exception, the materials to be distributed
+need not include anything that is normally distributed (in either source or
+binary form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component itself
+accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating system.
+Such a contradiction means you cannot use both them and the Library together
+in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side
+in a single library together with other library facilities not covered by
+this License, and distribute such a combined library, provided that the separate
+distribution of the work based on the Library and of the other library facilities
+is otherwise permitted, and provided that you do these two things:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities. This must be distributed
+under the terms of the Sections above.
+
+b) Give prominent notice with the combined library of the fact that part of
+it is a work based on the Library, and explaining where to find the accompanying
+uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense, link with, or distribute the Library is void, and
+will automatically terminate your rights under this License. However, parties
+who have received copies, or rights, from you under this License will not
+have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Library
+(or any work based on the Library), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library),
+the recipient automatically receives a license from the original licensor
+to copy, distribute, link with or modify the Library subject to these terms
+and conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties with this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement
+or for any other reason (not limited to patent issues), conditions are imposed
+on you (whether by court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the conditions of
+this License. If you cannot distribute so as to satisfy simultaneously your
+obligations under this License and any other pertinent obligations, then as
+a consequence you may not distribute the Library at all. For example, if a
+patent license would not permit royalty-free redistribution of the Library
+by all those who receive copies directly or indirectly through you, then the
+only way you could satisfy both it and this License would be to refrain entirely
+from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system which is implemented by public license practices.
+Many people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Library under this License may add an explicit geographical
+distribution limitation excluding those countries, so that distribution is
+permitted only in or among countries not thus excluded. In such case, this
+License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Lesser General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that version
+or of any later version published by the Free Software Foundation. If the
+Library does not specify a license version number, you may choose any version
+ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the author
+to ask for permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make exceptions
+for this. Our decision will be guided by the two goals of preserving the free
+status of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
+THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
+OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. It is safest
+to attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the "copyright"
+line and a pointer to where the full notice is found.
+
+<one line to give the library's name and an idea of what it does.>
+
+Copyright (C) <year> <name of author>
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free
+Software Foundation; either version 2.1 of the License, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this library; if not, write to the Free Software Foundation, Inc., 51
+Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the library, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+
+the library `Frob' (a library for tweaking knobs) written
+
+by James Random Hacker.
+
+< signature of Ty Coon > , 1 April 1990
+
+Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/0001-utils-add-a-gstreamer-helper-application-for-interco.patch b/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/0001-utils-add-a-gstreamer-helper-application-for-interco.patch
deleted file mode 100644
index 6c9a388c8..000000000
--- a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/0001-utils-add-a-gstreamer-helper-application-for-interco.patch
+++ /dev/null
@@ -1,517 +0,0 @@
-From f2e6a0a324106b40195f88953e55a355875d2b1b Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Fri, 4 Oct 2019 20:51:24 +0300
-Subject: [PATCH] utils: add a gstreamer helper application for interconnection
- with pipewire
-
-Unfortunately, the bluez-alsa PCM plugin does not work correctly
-when it is used through pipewire (or gstreamer, or anywhere really...).
-
-Thanfully, the bluez-alsa PCM plugin is only a simple client that
-reads/writes on a file descriptor that was opened by bluealsa.
-This allows us to use bluealsa without the PCM plugin, just like it
-is done in the aplay.c util.
-
-This one uses GStreamer to implement the plumbing between pipewire
-and the file descriptor. On the reading side we are also doing some
-tricks to ensure a smooth stream, which is not the case for the
-stream that is coming out of bluealsa.
-
-This helper is implemented as a patch to bluez-alsa so that it can
-use its internal private API. In the future this needs some re-thinking.
-
-Upstream-Status: Inappropriate
----
- configure.ac | 7 +
- utils/Makefile.am | 20 +++
- utils/gst-helper.c | 432 +++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 459 insertions(+)
- create mode 100644 utils/gst-helper.c
-
-diff --git a/configure.ac b/configure.ac
-index 4825afa..9125871 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -141,6 +141,13 @@ AM_COND_IF([ENABLE_HCITOP], [
- PKG_CHECK_MODULES([NCURSES], [ncurses])
- ])
-
-+AC_ARG_ENABLE([gsthelper],
-+ [AS_HELP_STRING([--enable-gsthelper], [enable building of gsthelper tool])])
-+AM_CONDITIONAL([ENABLE_GSTHELPER], [test "x$enable_gsthelper" = "xyes"])
-+AM_COND_IF([ENABLE_GSTHELPER], [
-+ PKG_CHECK_MODULES([GST], [gstreamer-1.0 glib-2.0])
-+])
-+
- AC_ARG_ENABLE([test],
- [AS_HELP_STRING([--enable-test], [enable unit test])])
- AM_CONDITIONAL([ENABLE_TEST], [test "x$enable_test" = "xyes"])
-diff --git a/utils/Makefile.am b/utils/Makefile.am
-index 9057f2c..9790474 100644
---- a/utils/Makefile.am
-+++ b/utils/Makefile.am
-@@ -47,3 +47,23 @@ hcitop_LDADD = \
- @LIBBSD_LIBS@ \
- @NCURSES_LIBS@
- endif
-+
-+if ENABLE_GSTHELPER
-+bin_PROGRAMS += bluealsa-gst-helper
-+bluealsa_gst_helper_SOURCES = \
-+ ../src/shared/dbus-client.c \
-+ ../src/shared/ffb.c \
-+ ../src/shared/log.c \
-+ gst-helper.c
-+bluealsa_gst_helper_CFLAGS = \
-+ -I$(top_srcdir)/src \
-+ @ALSA_CFLAGS@ \
-+ @BLUEZ_CFLAGS@ \
-+ @DBUS1_CFLAGS@ \
-+ @GST_CFLAGS@
-+bluealsa_gst_helper_LDADD = \
-+ @ALSA_LIBS@ \
-+ @BLUEZ_LIBS@ \
-+ @DBUS1_LIBS@ \
-+ @GST_LIBS@
-+endif
-diff --git a/utils/gst-helper.c b/utils/gst-helper.c
-new file mode 100644
-index 0000000..de1d47c
---- /dev/null
-+++ b/utils/gst-helper.c
-@@ -0,0 +1,432 @@
-+/* Bluez-Alsa PipeWire integration GStreamer helper
-+ *
-+ * Copyright © 2016-2019 Arkadiusz Bokowy
-+ * Copyright © 2019 Collabora Ltd.
-+ * @author George Kiagiadakis <george.kiagiadakis@collabora.com>
-+ *
-+ * SPDX-License-Identifier: MIT
-+ */
-+
-+#if HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include <errno.h>
-+#include <getopt.h>
-+#include <poll.h>
-+#include <pthread.h>
-+#include <signal.h>
-+#include <stdbool.h>
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <unistd.h>
-+
-+#include <bluetooth/bluetooth.h>
-+#include <dbus/dbus.h>
-+#include <gst/gst.h>
-+
-+#include "shared/dbus-client.h"
-+#include "shared/defs.h"
-+#include "shared/ffb.h"
-+#include "shared/log.h"
-+
-+struct worker {
-+ /* used BlueALSA PCM device */
-+ struct ba_pcm ba_pcm;
-+ /* file descriptor of PCM FIFO */
-+ int ba_pcm_fd;
-+ /* file descriptor of PCM control */
-+ int ba_pcm_ctrl_fd;
-+ /* the gstreamer pipelines (sink & source) */
-+ GstElement *pipeline[2];
-+ /* the queue & pwaudiosink of the sink pipeline */
-+ GstElement *queue;
-+ GstElement *pwelem;
-+};
-+
-+static struct ba_dbus_ctx dbus_ctx;
-+static GHashTable *workers;
-+static bool main_loop_on = true;
-+
-+static void
-+main_loop_stop(int sig)
-+{
-+ /* Call to this handler restores the default action, so on the
-+ * second call the program will be forcefully terminated. */
-+
-+ struct sigaction sigact = { .sa_handler = SIG_DFL };
-+ sigaction(sig, &sigact, NULL);
-+
-+ main_loop_on = false;
-+}
-+
-+static GstBusSyncReply
-+bus_sync_handler(GstBus *bus, GstMessage *message, gpointer user_data)
-+{
-+ struct worker *w = user_data;
-+ GstState s;
-+
-+ switch (GST_MESSAGE_TYPE (message)) {
-+ case GST_MESSAGE_REQUEST_STATE:
-+ gst_message_parse_request_state (message, &s);
-+
-+ debug ("corked: %d", (s == GST_STATE_PAUSED));
-+
-+ /* drop queue data when corked */
-+ g_object_set (w->queue,
-+ "leaky", (s == GST_STATE_PAUSED) ? 2 /* downstream */ : 0 /* no */,
-+ NULL);
-+ gst_element_set_state (w->pwelem, s);
-+
-+ /* flush the queue when resuming */
-+ if (s == GST_STATE_PLAYING) {
-+ gst_element_send_event (w->queue, gst_event_new_flush_start ());
-+ gst_element_send_event (w->queue, gst_event_new_flush_stop (FALSE));
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ gst_message_unref (message);
-+ return GST_BUS_DROP;
-+}
-+
-+static int
-+worker_start_pipeline(struct worker *w, int id, int mode, int profile)
-+{
-+ GError *gerr = NULL;
-+ DBusError err = DBUS_ERROR_INIT;
-+ const gchar * role = NULL;
-+
-+ if (w->pipeline[id])
-+ return 0;
-+
-+ if (!bluealsa_dbus_pcm_open(&dbus_ctx, w->ba_pcm.pcm_path, mode,
-+ &w->ba_pcm_fd, &w->ba_pcm_ctrl_fd, &err)) {
-+ error("Couldn't open PCM: %s", err.message);
-+ dbus_error_free(&err);
-+ goto fail;
-+ }
-+
-+ if (mode == BA_PCM_FLAG_SINK) {
-+ debug("sink start");
-+ w->pipeline[id] = gst_parse_launch(
-+ /* add a silent live source to ensure a perfect live stream on the
-+ output, even when the bt device is not sending or has gaps;
-+ this also effectively changes the clock to be the system clock,
-+ which is the same clock used by bluez-alsa on the sending side */
-+ "audiotestsrc is-live=true wave=silence ! capsfilter name=capsf "
-+ "! audiomixer name=m "
-+ /* mix the input from bluez-alsa using fdsrc; rawaudioparse
-+ is necessary to convert bytes to time and align the buffers */
-+ "fdsrc name=fdelem do-timestamp=true ! capsfilter name=capsf2 "
-+ "! rawaudioparse use-sink-caps=true ! m. "
-+ /* take the mixer output, convert and push to pipewire */
-+ "m.src ! capsfilter name=capsf3 ! audioconvert ! audioresample "
-+ "! audio/x-raw,format=F32LE,rate=48000 ! identity sync=true "
-+ "! queue name=queue leaky=no max-size-time=0 max-size-buffers=0 max-size-bytes=192000 "
-+ "! pwaudiosink name=pwelem",
-+ &gerr);
-+
-+ /* a2dp is for music, sco is for calls */
-+ role = (profile == BA_PCM_FLAG_PROFILE_A2DP) ? "Multimedia" : "Communication";
-+ }
-+ else if (mode == BA_PCM_FLAG_SOURCE && profile == BA_PCM_FLAG_PROFILE_SCO) {
-+ debug("source start");
-+ w->pipeline[id] = gst_parse_launch(
-+ /* read from pipewire and put the buffers on a leaky queue, which
-+ will essentially allow pwaudiosrc to continue working while
-+ the fdsink is blocked (when there is no phone call in progress).
-+ 9600 bytes = 50ms @ F32LE/1ch/48000
-+ */
-+ "pwaudiosrc name=pwelem ! audio/x-raw,format=F32LE,rate=48000 "
-+ "! queue name=queue leaky=downstream max-size-time=0 max-size-buffers=0 max-size-bytes=9600 "
-+ "! audioconvert ! audioresample ! capsfilter name=capsf "
-+ "! fdsink name=fdelem", &gerr);
-+
-+ role = "Communication";
-+ }
-+
-+ if (gerr) {
-+ error("Failed to start pipeline: %s", gerr->message);
-+ g_error_free(gerr);
-+ goto fail;
-+ }
-+
-+ if (w->pipeline[id]) {
-+ g_autofree gchar *capsstr = NULL;
-+ g_autoptr (GstElement) fdelem = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "fdelem");
-+ g_autoptr (GstElement) pwelem = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "pwelem");
-+ g_autoptr (GstElement) queue = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "queue");
-+ g_autoptr (GstElement) capsf = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "capsf");
-+ g_autoptr (GstElement) capsf2 = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "capsf2");
-+ g_autoptr (GstElement) capsf3 = gst_bin_get_by_name(GST_BIN(w->pipeline[id]), "capsf3");
-+ g_autoptr (GstCaps) caps = gst_caps_new_simple("audio/x-raw",
-+ "format", G_TYPE_STRING, "S16LE",
-+ "layout", G_TYPE_STRING, "interleaved",
-+ "channels", G_TYPE_INT, w->ba_pcm.channels,
-+ "rate", G_TYPE_INT, w->ba_pcm.sampling,
-+ NULL);
-+ g_autoptr (GstStructure) stream_props = gst_structure_new("props",
-+ "media.role", G_TYPE_STRING, role,
-+ "bluealsa.profile", G_TYPE_STRING,
-+ (profile == BA_PCM_FLAG_PROFILE_SCO) ? "sco" : "a2dp",
-+ NULL);
-+
-+ g_object_set(capsf, "caps", caps, NULL);
-+ if (capsf2)
-+ g_object_set(capsf2, "caps", caps, NULL);
-+ if (capsf3)
-+ g_object_set(capsf3, "caps", caps, NULL);
-+
-+ capsstr = gst_caps_to_string (caps);
-+ debug(" caps: %s", capsstr);
-+
-+ g_object_set(fdelem, "fd", w->ba_pcm_fd, NULL);
-+ g_object_set(pwelem, "stream-properties", stream_props, NULL);
-+
-+ if (mode == BA_PCM_FLAG_SINK) {
-+ g_autoptr (GstBus) bus = gst_pipeline_get_bus(GST_PIPELINE(w->pipeline[id]));
-+ gst_bus_set_sync_handler(bus, bus_sync_handler, w, NULL);
-+ w->queue = queue;
-+ w->pwelem = pwelem;
-+ }
-+
-+ gst_element_set_state(w->pipeline[id], GST_STATE_PLAYING);
-+ }
-+
-+ return 0;
-+fail:
-+ g_clear_object(&w->pipeline[id]);
-+ return -1;
-+}
-+
-+static int
-+worker_start(struct worker *w)
-+{
-+ int mode = w->ba_pcm.flags & (BA_PCM_FLAG_SOURCE | BA_PCM_FLAG_SINK);
-+ int profile = w->ba_pcm.flags & (BA_PCM_FLAG_PROFILE_A2DP | BA_PCM_FLAG_PROFILE_SCO);
-+ /* human-readable BT address */
-+ char addr[18];
-+
-+ g_return_val_if_fail (profile != 0 && profile != (BA_PCM_FLAG_PROFILE_A2DP | BA_PCM_FLAG_PROFILE_SCO), -1);
-+
-+ ba2str(&w->ba_pcm.addr, addr);
-+ debug("%p: worker start addr:%s, mode:0x%x, profile:0x%x", w, addr, mode, profile);
-+
-+ if (mode & BA_PCM_FLAG_SINK)
-+ worker_start_pipeline(w, 0, BA_PCM_FLAG_SINK, profile);
-+ if (mode & BA_PCM_FLAG_SOURCE)
-+ worker_start_pipeline(w, 1, BA_PCM_FLAG_SOURCE, profile);
-+}
-+
-+static int
-+worker_stop(struct worker *w)
-+{
-+ debug("stop worker %p", w);
-+ if (w->pipeline[0]) {
-+ gst_element_set_state(w->pipeline[0], GST_STATE_NULL);
-+ g_clear_object(&w->pipeline[0]);
-+ }
-+ if (w->pipeline[1]) {
-+ gst_element_set_state(w->pipeline[1], GST_STATE_NULL);
-+ g_clear_object(&w->pipeline[1]);
-+ }
-+ if (w->ba_pcm_fd != -1) {
-+ close(w->ba_pcm_fd);
-+ w->ba_pcm_fd = -1;
-+ }
-+ if (w->ba_pcm_ctrl_fd != -1) {
-+ close(w->ba_pcm_ctrl_fd);
-+ w->ba_pcm_ctrl_fd = -1;
-+ }
-+ return 0;
-+}
-+
-+static int
-+supervise_pcm_worker(struct worker *worker)
-+{
-+ if (worker == NULL)
-+ return -1;
-+
-+ /* no mode? */
-+ if (worker->ba_pcm.flags & (BA_PCM_FLAG_SOURCE | BA_PCM_FLAG_SINK) == 0)
-+ goto stop;
-+
-+ /* no profile? */
-+ if (worker->ba_pcm.flags & (BA_PCM_FLAG_PROFILE_A2DP | BA_PCM_FLAG_PROFILE_SCO) == 0)
-+ goto stop;
-+
-+ /* check whether SCO has selected codec */
-+ if (worker->ba_pcm.flags & BA_PCM_FLAG_PROFILE_SCO &&
-+ worker->ba_pcm.codec == 0) {
-+ debug("Skipping SCO with codec not selected");
-+ goto stop;
-+ }
-+
-+start:
-+ return worker_start(worker);
-+stop:
-+ return worker_stop(worker);
-+}
-+
-+static void
-+worker_new(struct ba_pcm *pcm)
-+{
-+ struct worker *w = g_slice_new0 (struct worker);
-+ memcpy(&w->ba_pcm, pcm, sizeof(struct ba_pcm));
-+ w->ba_pcm_fd = -1;
-+ w->ba_pcm_ctrl_fd = -1;
-+ g_hash_table_insert(workers, w->ba_pcm.pcm_path, w);
-+ supervise_pcm_worker(w);
-+}
-+
-+static DBusHandlerResult
-+dbus_signal_handler(DBusConnection *conn, DBusMessage *message, void *data)
-+{
-+ (void)conn;
-+ (void)data;
-+
-+ const char *path = dbus_message_get_path(message);
-+ const char *interface = dbus_message_get_interface(message);
-+ const char *signal = dbus_message_get_member(message);
-+
-+ DBusMessageIter iter;
-+ struct worker *worker;
-+
-+ if (strcmp(interface, BLUEALSA_INTERFACE_MANAGER) == 0) {
-+
-+ if (strcmp(signal, "PCMAdded") == 0) {
-+ struct ba_pcm pcm;
-+ if (!dbus_message_iter_init(message, &iter) ||
-+ !bluealsa_dbus_message_iter_get_pcm(&iter, NULL, &pcm)) {
-+ error("Couldn't add new PCM: %s", "Invalid signal signature");
-+ goto fail;
-+ }
-+ worker_new(&pcm);
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+ if (strcmp(signal, "PCMRemoved") == 0) {
-+ if (!dbus_message_iter_init(message, &iter) ||
-+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH) {
-+ error("Couldn't remove PCM: %s", "Invalid signal signature");
-+ goto fail;
-+ }
-+ dbus_message_iter_get_basic(&iter, &path);
-+ g_hash_table_remove(workers, path);
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+ }
-+
-+ if (strcmp(interface, DBUS_INTERFACE_PROPERTIES) == 0) {
-+ worker = g_hash_table_lookup(workers, path);
-+ if (!worker)
-+ goto fail;
-+ if (!dbus_message_iter_init(message, &iter) ||
-+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) {
-+ error("Couldn't update PCM: %s", "Invalid signal signature");
-+ goto fail;
-+ }
-+ dbus_message_iter_get_basic(&iter, &interface);
-+ dbus_message_iter_next(&iter);
-+ if (!bluealsa_dbus_message_iter_get_pcm_props(&iter, NULL, &worker->ba_pcm))
-+ goto fail;
-+ supervise_pcm_worker(worker);
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+fail:
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static void
-+destroy_worker(void *worker)
-+{
-+ struct worker *w = worker;
-+ worker_stop(w);
-+ g_slice_free(struct worker, w);
-+}
-+
-+int
-+main(int argc, char *argv[])
-+{
-+ int ret = EXIT_SUCCESS;
-+
-+ log_open(argv[0], false, false);
-+ gst_init(&argc, &argv);
-+ dbus_threads_init_default();
-+
-+ DBusError err = DBUS_ERROR_INIT;
-+ if (!bluealsa_dbus_connection_ctx_init(&dbus_ctx, BLUEALSA_SERVICE, &err)) {
-+ error("Couldn't initialize D-Bus context: %s", err.message);
-+ return EXIT_FAILURE;
-+ }
-+
-+ bluealsa_dbus_connection_signal_match_add(&dbus_ctx,
-+ BLUEALSA_SERVICE, NULL, BLUEALSA_INTERFACE_MANAGER, "PCMAdded", NULL);
-+ bluealsa_dbus_connection_signal_match_add(&dbus_ctx,
-+ BLUEALSA_SERVICE, NULL, BLUEALSA_INTERFACE_MANAGER, "PCMRemoved", NULL);
-+ bluealsa_dbus_connection_signal_match_add(&dbus_ctx,
-+ BLUEALSA_SERVICE, NULL, DBUS_INTERFACE_PROPERTIES, "PropertiesChanged",
-+ "arg0='"BLUEALSA_INTERFACE_PCM"'");
-+
-+ if (!dbus_connection_add_filter(dbus_ctx.conn, dbus_signal_handler, NULL, NULL)) {
-+ error("Couldn't add D-Bus filter: %s", err.message);
-+ return EXIT_FAILURE;
-+ }
-+
-+ workers = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, destroy_worker);
-+
-+ {
-+ struct ba_pcm *pcms = NULL;
-+ size_t pcms_count = 0, i;
-+
-+ if (!bluealsa_dbus_get_pcms(&dbus_ctx, &pcms, &pcms_count, &err))
-+ warn("Couldn't get BlueALSA PCM list: %s", err.message);
-+
-+ for (i = 0; i < pcms_count; i++) {
-+ worker_new(&pcms[i]);
-+ }
-+
-+ free(pcms);
-+ }
-+
-+ struct sigaction sigact = { .sa_handler = main_loop_stop };
-+ sigaction(SIGTERM, &sigact, NULL);
-+ sigaction(SIGINT, &sigact, NULL);
-+
-+ /* Ignore SIGPIPE, which may be received when writing to the bluealsa
-+ socket when it is closed on the remote end */
-+ signal(SIGPIPE, SIG_IGN);
-+
-+ debug("Starting main loop");
-+ while (main_loop_on) {
-+
-+ struct pollfd pfds[10];
-+ nfds_t pfds_len = ARRAYSIZE(pfds);
-+
-+ if (!bluealsa_dbus_connection_poll_fds(&dbus_ctx, pfds, &pfds_len)) {
-+ error("Couldn't get D-Bus connection file descriptors");
-+ ret = EXIT_FAILURE;
-+ goto out;
-+ }
-+
-+ if (poll(pfds, pfds_len, -1) == -1 &&
-+ errno == EINTR)
-+ continue;
-+
-+ if (bluealsa_dbus_connection_poll_dispatch(&dbus_ctx, pfds, pfds_len))
-+ while (dbus_connection_dispatch(dbus_ctx.conn) == DBUS_DISPATCH_DATA_REMAINS)
-+ continue;
-+
-+ }
-+
-+out:
-+ g_hash_table_unref(workers);
-+ return ret;
-+}
---
-2.24.0
-
diff --git a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/bluealsa-gst-helper@.service b/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/bluealsa-gst-helper@.service
deleted file mode 100644
index 495ab6222..000000000
--- a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa/bluealsa-gst-helper@.service
+++ /dev/null
@@ -1,18 +0,0 @@
-[Unit]
-Description=Bluetooth audio helper for user %i
-Requires=pipewire@%i.socket bluez-alsa.service
-After=pipewire@%i.socket bluez-alsa.service
-
-[Service]
-Type=simple
-Restart=on-failure
-ExecStart=/usr/bin/bluealsa-gst-helper
-
-Environment=XDG_RUNTIME_DIR=/run/user/%i
-Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus
-
-User=%i
-Slice=user-%i.slice
-SupplementaryGroups=audio
-UMask=0077
-CapabilityBoundingSet=
diff --git a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa_git.bbappend b/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa_git.bbappend
deleted file mode 100644
index 2f9699a83..000000000
--- a/meta-pipewire/recipes-connectivity/bluez-alsa/bluez-alsa_git.bbappend
+++ /dev/null
@@ -1,35 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "\
- file://0001-utils-add-a-gstreamer-helper-application-for-interco.patch \
- file://bluealsa-gst-helper@.service \
- "
-
-PACKAGECONFIG += "gsthelper"
-PACKAGECONFIG[gsthelper] = "--enable-gsthelper, --disable-gsthelper, gstreamer1.0"
-
-do_install_append() {
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- # install the service file
- mkdir -p ${D}${systemd_system_unitdir}/
- install -m 0644 ${WORKDIR}/bluealsa-gst-helper@.service ${D}${systemd_system_unitdir}/bluealsa-gst-helper@.service
-
- # enable the helper to start together with afm-user-session
- mkdir -p ${D}${systemd_system_unitdir}/afm-user-session@.target.wants
- ln -sf ../bluealsa-gst-helper@.service ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/bluealsa-gst-helper@.service
- fi
-}
-
-PACKAGES =+ "${PN}-pipewire"
-
-FILES_${PN}-pipewire = "\
- ${bindir}/bluealsa-gst-helper \
- ${systemd_system_unitdir}/bluealsa-gst-helper@.service \
- ${systemd_system_unitdir}/afm-user-session@.target.wants/bluealsa-gst-helper@.service \
- "
-RDEPENDS_${PN}-pipewire += "\
- bluez-alsa \
- pipewire \
- gstreamer1.0-plugins-base \
- gstreamer1.0-pipewire \
- "
diff --git a/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire-base.bb b/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire-base.bb
new file mode 100644
index 000000000..6237dcf80
--- /dev/null
+++ b/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire-base.bb
@@ -0,0 +1,17 @@
+SUMMARY = "PipeWire Media Server Base"
+DESCRIPTION = "The set of packages required to use PipeWire API in AGL"
+LICENSE = "MIT"
+
+inherit packagegroup
+
+PACKAGES = "\
+ packagegroup-pipewire-base \
+ "
+
+RDEPENDS:${PN} += "\
+ pipewire-spa-plugins-meta \
+ pipewire-modules-meta \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'pipewire-tools pipewire-spa-tools alsa-utils', '', d)} \
+ pipewire-alsa \
+ pipewire-alsa-card-profile \
+"
diff --git a/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb b/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb
index 4020f1e24..e7ad14258 100644
--- a/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb
+++ b/meta-pipewire/recipes-core/packagegroups/packagegroup-pipewire.bb
@@ -1,17 +1,24 @@
SUMMARY = "PipeWire Media Server"
DESCRIPTION = "The set of packages required to use PipeWire in AGL"
-LICENSE = "MIT & LGPL-2.1"
+LICENSE = "MIT"
inherit packagegroup
PACKAGES = "\
packagegroup-pipewire \
+ packagegroup-pipewire-tools \
"
-RDEPENDS_${PN} += "\
- agl-service-audiomixer \
+RDEPENDS:${PN} += "\
pipewire \
+ pipewire-modules-meta \
+ pipewire-spa-plugins-meta \
pipewire-alsa \
gstreamer1.0-pipewire \
- bluez-alsa-pipewire \
+ wireplumber \
"
+
+RDEPENDS:${PN}-tools += "\
+ pipewire-tools \
+ pipewire-spa-tools \
+" \ No newline at end of file
diff --git a/meta-pipewire/recipes-multimedia/agl-service-audiomixer/agl-service-audiomixer_git.bb b/meta-pipewire/recipes-multimedia/agl-service-audiomixer/agl-service-audiomixer_git.bb
deleted file mode 100644
index 2a8261195..000000000
--- a/meta-pipewire/recipes-multimedia/agl-service-audiomixer/agl-service-audiomixer_git.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Audio Mixer Service Binding"
-DESCRIPTION = "AGL Audio Mixer Service Binding"
-SECTION = "apps"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;beginline=3;md5=e8ad01a5182f2c1b3a2640e9ea268264"
-
-PV = "0.1+git${SRCPV}"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-audiomixer.git;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-S = "${WORKDIR}/git"
-
-inherit cmake aglwgt pkgconfig
-
-DEPENDS += "pipewire wireplumber json-c"
-RDEPENDS_${PN} = "agl-service-signal-composer"
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/client.env b/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/client.env
deleted file mode 100644
index 9b44cee01..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/client.env
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file contains environment variables that will apply
-# to pipewire clients started by the application framework
-
-# libpipewire by default tries to obtain real-time scheduling
-# for the streaming thread. This is only useful on the desktop, disable here.
-DISABLE_RTKIT=1
-
-# Uncomment to enable libpipewire debug for clients
-# 1=error, 2=warning, 3=info, 4=debug, 5=trace
-#PIPEWIRE_DEBUG=4
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in b/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in
deleted file mode 100644
index 6c055bcff..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/pipewire.conf.in
+++ /dev/null
@@ -1,17 +0,0 @@
-# daemon config file for PipeWire version "0.2.9"
-# distributed by Automotive Grade Linux
-
-add-spa-lib audio.convert* audioconvert/libspa-audioconvert
-add-spa-lib api.alsa.* alsa/libspa-alsa
-add-spa-lib api.v4l2.* v4l2/libspa-v4l2
-add-spa-lib api.bluez5.* bluez5/libspa-bluez5
-
-load-module libpipewire-module-protocol-native
-load-module libpipewire-module-spa-node-factory
-load-module libpipewire-module-client-node
-load-module libpipewire-module-client-device
-load-module libpipewire-module-access same-sec-label-mode=1
-load-module libpipewire-module-adapter
-load-module libpipewire-module-link-factory
-load-module libpipewire-module-session-manager
-exec /usr/bin/wireplumber
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/server.env b/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/server.env
deleted file mode 100644
index c74b941d6..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl/server.env
+++ /dev/null
@@ -1,12 +0,0 @@
-# This file contains environment variables that will apply
-# to the pipewire daemon as well as its session manager
-
-# Disable rtkit for wireplumber, which is also a client
-DISABLE_RTKIT=1
-
-# Uncomment to enable wireplumber debug
-#G_MESSAGES_DEBUG=all
-
-# Uncomment to enable pipewire debug
-# 1=error, 2=warning, 3=info, 4=debug, 5=trace
-#PIPEWIRE_DEBUG=4
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb b/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb
deleted file mode 100644
index a28c6534e..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire-conf-agl_git.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "AGL configuration file for pipewire"
-HOMEPAGE = "https://pipewire.org"
-BUGTRACKER = "https://jira.automotivelinux.org"
-AUTHOR = "George Kiagiadakis <george.kiagiadakis@collabora.com>"
-SECTION = "multimedia"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-
-SRC_URI = " \
- file://pipewire.conf.in \
- file://client.env \
- file://server.env \
- "
-
-do_configure[noexec] = "1"
-do_compile[noexec] = "1"
-
-do_install_append() {
- # enable optional features in the config
- BLUEZ5=${@bb.utils.contains('DISTRO_FEATURES', 'bluez5', '', '#', d)}
- sed -e "s/#IF_BLUEZ5 /${BLUEZ5}/" ${WORKDIR}/pipewire.conf.in > ${WORKDIR}/pipewire.conf
-
- # install our custom config
- install -d ${D}/${sysconfdir}/pipewire/
- install -m 0644 ${WORKDIR}/pipewire.conf ${D}${sysconfdir}/pipewire/pipewire.conf
-
- # install environment variable files
- install -d ${D}/${sysconfdir}/afm/unit.env.d/
- install -m 0644 ${WORKDIR}/client.env ${D}/${sysconfdir}/afm/unit.env.d/pipewire
- install -m 0644 ${WORKDIR}/server.env ${D}${sysconfdir}/pipewire/environment
-}
-
-FILES_${PN} = "\
- ${sysconfdir}/pipewire/* \
- ${sysconfdir}/afm/unit.env.d/* \
-"
-CONFFILES_${PN} += "\
- ${sysconfdir}/pipewire/* \
- ${sysconfdir}/afm/unit.env.d/* \
-"
-
-RPROVIDES_${PN} += "virtual/pipewire-config"
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire.inc b/meta-pipewire/recipes-multimedia/pipewire/pipewire.inc
deleted file mode 100644
index b3081ca43..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire.inc
+++ /dev/null
@@ -1,120 +0,0 @@
-SUMMARY = "Multimedia processing server for Linux"
-HOMEPAGE = "https://pipewire.org"
-BUGTRACKER = "https://github.com/PipeWire/pipewire/issues"
-AUTHOR = "Wim Taymans <wtaymans@redhat.com>"
-SECTION = "multimedia"
-
-LICENSE = "MIT & LGPL-2.1"
-LIC_FILES_CHKSUM = "\
- file://COPYING;beginline=3;md5=b3adc775ca6ee80056383a5ae814cc75 \
- file://pipewire-alsa/LICENSE;md5=fc178bcd425090939a8b634d1d6a9594 \
- file://pipewire-jack/LICENSE;md5=fc178bcd425090939a8b634d1d6a9594 \
- file://pipewire-pulseaudio/LICENSE;md5=fc178bcd425090939a8b634d1d6a9594 \
-"
-
-inherit meson pkgconfig systemd manpages
-
-DEPENDS = "dbus"
-
-PACKAGECONFIG ??= "\
- ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'bluez5', d)} \
- alsa audioconvert audiomixer \
- pipewire-alsa \
- gstreamer \
-"
-
-GST_VER = "1.0"
-
-# systemd integration
-PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
-
-# SPA plugins
-PACKAGECONFIG[alsa] = "-Dalsa=true,-Dalsa=false,udev alsa-lib"
-PACKAGECONFIG[audioconvert] = "-Daudioconvert=true,-Daudioconvert=false,"
-PACKAGECONFIG[audiomixer] = "-Daudiomixer=true,-Daudiomixer=false,"
-PACKAGECONFIG[audiotestsrc] = "-Daudiotestsrc=true,-Daudiotestsrc=false, "
-PACKAGECONFIG[bluez5] = "-Dbluez5=true,-Dbluez5=false,bluez5 sbc"
-PACKAGECONFIG[jack] = "-Djack=true,-Djack=false,jack"
-PACKAGECONFIG[v4l2] = "-Dv4l2=true,-Dv4l2=false,udev v4l-utils"
-PACKAGECONFIG[videotestsrc] = "-Dvideotestsrc=true,-Dvideotestsrc=false, "
-PACKAGECONFIG[vulkan] = "-Dvulkan=true,-Dvulkan=false,vulkan"
-
-# alsa plugin to redirect audio to pipewire
-PACKAGECONFIG[pipewire-alsa] = "-Dpipewire-alsa=true,-Dpipewire-alsa=false,alsa-lib"
-# pulseaudio drop-in replacement library
-PACKAGECONFIG[pipewire-pulseaudio] = "-Dpipewire-pulseaudio=true,-Dpipewire-pulseaudio=false,pulseaudio glib-2.0"
-# jack drop-in replacement library
-PACKAGECONFIG[pipewire-jack] = "-Dpipewire-jack=true,-Dpipewire-jack=false,jack"
-
-# GStreamer plugins
-PACKAGECONFIG[gstreamer] = "-Dgstreamer=true,-Dgstreamer=false,glib-2.0 gstreamer${GST_VER} gstreamer${GST_VER}-plugins-base"
-
-# man pages
-PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxml-parser-perl-native"
-
-do_install_append() {
- # only install the alsa config file if the alsa-lib plugin has been built
- # this avoids creating the pipewire-alsa package when the pipewire-alsa
- # feature is not enabled
- if [ -d ${D}${libdir}/alsa-lib ]
- then
- mkdir -p ${D}${datadir}/alsa/alsa.conf.d
- install -m 0644 ${S}/pipewire-alsa/conf/50-pipewire.conf ${D}${datadir}/alsa/alsa.conf.d/50-pipewire.conf
- fi
-}
-
-PACKAGES =+ "\
- ${PN}-spa-plugins \
- ${PN}-alsa \
- ${PN}-pulseaudio \
- ${PN}-jack \
- ${PN}-config \
- gstreamer${GST_VER}-${PN} \
- lib${PN} \
- lib${PN}-modules \
-"
-
-FILES_${PN} = "\
- ${bindir}/pipewire* \
- ${systemd_user_unitdir}/* \
-"
-
-FILES_lib${PN} = "\
- ${libdir}/libpipewire-*.so.* \
-"
-
-FILES_lib${PN}-modules = "\
- ${libdir}/pipewire-*/* \
-"
-
-FILES_${PN}-spa-plugins = "\
- ${bindir}/spa-* \
- ${libdir}/spa/* \
-"
-
-FILES_${PN}-alsa = "\
- ${libdir}/alsa-lib/* \
- ${datadir}/alsa/alsa.conf.d/50-pipewire.conf \
-"
-
-FILES_${PN}-pulseaudio = "\
- ${libdir}/libpulse*.so.* \
-"
-
-FILES_gstreamer${GST_VER}-${PN} = "\
- ${libdir}/gstreamer-${GST_VER}/* \
-"
-
-RDEPENDS_lib${PN} += "lib${PN}-modules ${PN}-spa-plugins"
-
-# The default pipewire config.
-# Replace in your own package using
-# "virtual/pipewire-config"
-FILES_${PN}-config = "\
- ${sysconfdir}/pipewire/pipewire.conf \
-"
-CONFFILES_${PN}-config += "\
- ${sysconfdir}/pipewire/pipewire.conf \
-"
-RPROVIDES_${PN}-config += "virtual/pipewire-config"
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-meson-revert-version-check-to-require-meson-0.47-not.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-meson-revert-version-check-to-require-meson-0.47-not.patch
deleted file mode 100644
index 4e7bb0d4f..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-meson-revert-version-check-to-require-meson-0.47-not.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 5a249321aa84cd74e3d83bcd555c85fba3cd682d Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Sun, 22 Sep 2019 17:59:19 +0300
-Subject: [PATCH] meson: revert version check to require meson 0.47, not 0.50
-
-meson 0.50 is not really needed, but there are some strange warnings
-if you require an older version; in any case, AGL does not have 0.50
-yet, so let's not fail compilation because of that...
-
-Upstream-Status: Inappropriate [workaround]
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 2734b0d2..c9da6b4d 100644
---- a/meson.build
-+++ b/meson.build
-@@ -1,7 +1,7 @@
- project('pipewire', ['c' ],
- version : '0.2.9',
- license : 'MIT',
-- meson_version : '>= 0.50.0',
-+ meson_version : '>= 0.47.0',
- default_options : [ 'warning_level=1',
- 'c_std=gnu99',
- 'buildtype=debugoptimized' ])
---
-2.24.0
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-systemd-Do-not-override-rootprefix.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-systemd-Do-not-override-rootprefix.patch
new file mode 100644
index 000000000..45d09e6b0
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-systemd-Do-not-override-rootprefix.patch
@@ -0,0 +1,35 @@
+From 2501972518a67b1710998452d164cd077a4370f1 Mon Sep 17 00:00:00 2001
+From: Scott Murray <scott.murray@konsulko.com>
+Date: Thu, 17 Mar 2022 10:44:00 -0400
+Subject: [PATCH] systemd: Do not override rootprefix
+
+Do not override rootprefix with the value of prefix when querying
+systemdsystemunitdir from the systemd pkgconfig, as doing so forces
+the assumption that the system is running with usrmerge, which may
+not be the case. Instead, rely on the systemd.pc correctly
+representing the desired install locations.
+
+Reworked version of change in:
+
+https://git.automotivelinux.org/AGL/meta-agl/tree/meta-pipewire/recipes-multimedia/pipewire/pipewire/0012-Miscellanous-changes-to-account-for-lower-version-of.patch
+
+Upstream-Status: Pending
+
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+---
+ src/daemon/systemd/system/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/daemon/systemd/system/meson.build b/src/daemon/systemd/system/meson.build
+index 84ca0b068..6956f2be3 100644
+--- a/src/daemon/systemd/system/meson.build
++++ b/src/daemon/systemd/system/meson.build
+@@ -1,4 +1,4 @@
+-systemd_system_services_dir = systemd.get_variable('systemdsystemunitdir', pkgconfig_define : [ 'rootprefix', prefix])
++systemd_system_services_dir = systemd.get_variable('systemdsystemunitdir')
+ if get_option('systemd-system-unit-dir') != ''
+ systemd_system_services_dir = get_option('systemd-system-unit-dir')
+ endif
+--
+2.35.1
+
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0002-arm-build-with-mno-unaligned-access.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0002-arm-build-with-mno-unaligned-access.patch
deleted file mode 100644
index 2077af63d..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0002-arm-build-with-mno-unaligned-access.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From e4b81946baf2d8c08de87088c01a1d87ae4f03d9 Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Mon, 24 Jun 2019 12:19:20 +0300
-Subject: [PATCH] arm: build with -mno-unaligned-access
-
-Upstream-Status: Inappropriate [workaround]
-See also https://gitlab.freedesktop.org/pipewire/pipewire/issues/161
----
- meson.build | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/meson.build b/meson.build
-index c9da6b4d..5c121339 100644
---- a/meson.build
-+++ b/meson.build
-@@ -52,6 +52,11 @@ if cc.get_id() == 'gcc'
- language : 'c')
- endif
-
-+if host_machine.cpu_family() == 'arm'
-+ add_global_arguments('-mno-unaligned-access',
-+ language: 'c')
-+endif
-+
- sse_args = '-msse'
- sse2_args = '-msse2'
- ssse3_args = '-mssse3'
---
-2.24.0
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0003-gst-Implement-new-pwaudio-src-sink-elements-based-on.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0003-gst-Implement-new-pwaudio-src-sink-elements-based-on.patch
deleted file mode 100644
index b3eba21f7..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0003-gst-Implement-new-pwaudio-src-sink-elements-based-on.patch
+++ /dev/null
@@ -1,1280 +0,0 @@
-From 1b1f884a165ed7b2147affbdddf85a641d4cf180 Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Tue, 19 Feb 2019 18:23:19 +0200
-Subject: [PATCH] gst: Implement new pwaudio{src,sink} elements, based on
- GstAudioBase{Src,Sink}
-
-These are much more reliable elements to use for audio data.
-* GstAudioBaseSink provides a reliable clock implementation based
- on the number of samples read/written
-* on the pipewire side we make sure to dequeue, fill and enqueue
- a single buffer inside the process() function, which avoids
- underruns
-
-Both elements share a common ringbuffer that actually implements
-the pipewire integration.
-
-Upstream-Status: Denied
-See https://gitlab.freedesktop.org/pipewire/pipewire/merge_requests/140
----
- src/gst/gstpipewire.c | 8 +-
- src/gst/gstpwaudioringbuffer.c | 565 +++++++++++++++++++++++++++++++++
- src/gst/gstpwaudioringbuffer.h | 83 +++++
- src/gst/gstpwaudiosink.c | 207 ++++++++++++
- src/gst/gstpwaudiosink.h | 48 +++
- src/gst/gstpwaudiosrc.c | 200 ++++++++++++
- src/gst/gstpwaudiosrc.h | 48 +++
- src/gst/meson.build | 6 +
- 8 files changed, 1164 insertions(+), 1 deletion(-)
- create mode 100644 src/gst/gstpwaudioringbuffer.c
- create mode 100644 src/gst/gstpwaudioringbuffer.h
- create mode 100644 src/gst/gstpwaudiosink.c
- create mode 100644 src/gst/gstpwaudiosink.h
- create mode 100644 src/gst/gstpwaudiosrc.c
- create mode 100644 src/gst/gstpwaudiosrc.h
-
-diff --git a/src/gst/gstpipewire.c b/src/gst/gstpipewire.c
-index 4040264b..68fd446f 100644
---- a/src/gst/gstpipewire.c
-+++ b/src/gst/gstpipewire.c
-@@ -40,6 +40,8 @@
- #include "gstpipewiresrc.h"
- #include "gstpipewiresink.h"
- #include "gstpipewiredeviceprovider.h"
-+#include "gstpwaudiosrc.h"
-+#include "gstpwaudiosink.h"
-
- GST_DEBUG_CATEGORY (pipewire_debug);
-
-@@ -52,12 +54,16 @@ plugin_init (GstPlugin *plugin)
- GST_TYPE_PIPEWIRE_SRC);
- gst_element_register (plugin, "pipewiresink", GST_RANK_NONE,
- GST_TYPE_PIPEWIRE_SINK);
-+ gst_element_register (plugin, "pwaudiosrc", GST_RANK_NONE,
-+ GST_TYPE_PW_AUDIO_SRC);
-+ gst_element_register (plugin, "pwaudiosink", GST_RANK_NONE,
-+ GST_TYPE_PW_AUDIO_SINK);
-
- if (!gst_device_provider_register (plugin, "pipewiredeviceprovider",
- GST_RANK_PRIMARY + 1, GST_TYPE_PIPEWIRE_DEVICE_PROVIDER))
- return FALSE;
-
-- GST_DEBUG_CATEGORY_INIT (pipewire_debug, "pipewire", 0, "PipeWirie elements");
-+ GST_DEBUG_CATEGORY_INIT (pipewire_debug, "pipewire", 0, "PipeWire elements");
-
- return TRUE;
- }
-diff --git a/src/gst/gstpwaudioringbuffer.c b/src/gst/gstpwaudioringbuffer.c
-new file mode 100644
-index 00000000..babf2d83
---- /dev/null
-+++ b/src/gst/gstpwaudioringbuffer.c
-@@ -0,0 +1,565 @@
-+/* PipeWire
-+ *
-+ * Copyright © 2018 Wim Taymans
-+ * Copyright © 2019 Collabora Ltd.
-+ * @author George Kiagiadakis <george.kiagiadakis@collabora.com>
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include "gstpwaudioringbuffer.h"
-+
-+#include <spa/param/audio/format-utils.h>
-+#include <spa/pod/builder.h>
-+
-+GST_DEBUG_CATEGORY_STATIC (pw_audio_ring_buffer_debug);
-+#define GST_CAT_DEFAULT pw_audio_ring_buffer_debug
-+
-+#define gst_pw_audio_ring_buffer_parent_class parent_class
-+G_DEFINE_TYPE (GstPwAudioRingBuffer, gst_pw_audio_ring_buffer, GST_TYPE_AUDIO_RING_BUFFER);
-+
-+enum
-+{
-+ PROP_0,
-+ PROP_ELEMENT,
-+ PROP_DIRECTION,
-+ PROP_PROPS
-+};
-+
-+static void
-+gst_pw_audio_ring_buffer_init (GstPwAudioRingBuffer * self)
-+{
-+ self->loop = pw_loop_new (NULL);
-+ self->main_loop = pw_thread_loop_new (self->loop, "pw-audioringbuffer-loop");
-+ self->core = pw_core_new (self->loop, NULL, 0);
-+}
-+
-+static void
-+gst_pw_audio_ring_buffer_finalize (GObject * object)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (object);
-+
-+ pw_core_destroy (self->core);
-+ pw_thread_loop_destroy (self->main_loop);
-+ pw_loop_destroy (self->loop);
-+}
-+
-+static void
-+gst_pw_audio_ring_buffer_set_property (GObject * object, guint prop_id,
-+ const GValue * value, GParamSpec * pspec)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (object);
-+
-+ switch (prop_id) {
-+ case PROP_ELEMENT:
-+ self->elem = g_value_get_object (value);
-+ break;
-+
-+ case PROP_DIRECTION:
-+ self->direction = g_value_get_int (value);
-+ break;
-+
-+ case PROP_PROPS:
-+ self->props = g_value_get_pointer (value);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+on_remote_state_changed (void *data, enum pw_remote_state old,
-+ enum pw_remote_state state, const char *error)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (data);
-+
-+ GST_DEBUG_OBJECT (self->elem, "got remote state %d", state);
-+
-+ switch (state) {
-+ case PW_REMOTE_STATE_UNCONNECTED:
-+ case PW_REMOTE_STATE_CONNECTING:
-+ case PW_REMOTE_STATE_CONNECTED:
-+ break;
-+ case PW_REMOTE_STATE_ERROR:
-+ GST_ELEMENT_ERROR (self->elem, RESOURCE, FAILED,
-+ ("remote error: %s", error), (NULL));
-+ break;
-+ }
-+ pw_thread_loop_signal (self->main_loop, FALSE);
-+}
-+
-+static const struct pw_remote_events remote_events = {
-+ PW_VERSION_REMOTE_EVENTS,
-+ .state_changed = on_remote_state_changed,
-+};
-+
-+static gboolean
-+wait_for_remote_state (GstPwAudioRingBuffer *self,
-+ enum pw_remote_state target)
-+{
-+ while (TRUE) {
-+ enum pw_remote_state state = pw_remote_get_state (self->remote, NULL);
-+ if (state == target)
-+ return TRUE;
-+ if (state == PW_REMOTE_STATE_ERROR)
-+ return FALSE;
-+ pw_thread_loop_wait (self->main_loop);
-+ }
-+}
-+
-+static gboolean
-+gst_pw_audio_ring_buffer_open_device (GstAudioRingBuffer *buf)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (buf);
-+
-+ GST_DEBUG_OBJECT (self->elem, "open device");
-+
-+ if (pw_thread_loop_start (self->main_loop) < 0)
-+ goto mainloop_error;
-+
-+ pw_thread_loop_lock (self->main_loop);
-+
-+ self->remote = pw_remote_new (self->core, NULL, 0);
-+ pw_remote_add_listener (self->remote, &self->remote_listener, &remote_events,
-+ self);
-+
-+ if (self->props->fd == -1)
-+ pw_remote_connect (self->remote);
-+ else
-+ pw_remote_connect_fd (self->remote, self->props->fd);
-+
-+ GST_DEBUG_OBJECT (self->elem, "waiting for connection");
-+
-+ if (!wait_for_remote_state (self, PW_REMOTE_STATE_CONNECTED))
-+ goto connect_error;
-+
-+ pw_thread_loop_unlock (self->main_loop);
-+
-+ return TRUE;
-+
-+ /* ERRORS */
-+mainloop_error:
-+ {
-+ GST_ELEMENT_ERROR (self->elem, RESOURCE, FAILED,
-+ ("Failed to start mainloop"), (NULL));
-+ return FALSE;
-+ }
-+connect_error:
-+ {
-+ pw_thread_loop_unlock (self->main_loop);
-+ return FALSE;
-+ }
-+}
-+
-+static gboolean
-+gst_pw_audio_ring_buffer_close_device (GstAudioRingBuffer *buf)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (buf);
-+
-+ GST_DEBUG_OBJECT (self->elem, "closing device");
-+
-+ pw_thread_loop_lock (self->main_loop);
-+ if (self->remote) {
-+ pw_remote_disconnect (self->remote);
-+ wait_for_remote_state (self, PW_REMOTE_STATE_UNCONNECTED);
-+ }
-+ pw_thread_loop_unlock (self->main_loop);
-+
-+ pw_thread_loop_stop (self->main_loop);
-+
-+ if (self->remote) {
-+ pw_remote_destroy (self->remote);
-+ self->remote = NULL;
-+ }
-+ return TRUE;
-+}
-+
-+static void
-+on_stream_state_changed (void *data, enum pw_stream_state old,
-+ enum pw_stream_state state, const char *error)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (data);
-+ GstMessage *msg;
-+
-+ GST_DEBUG_OBJECT (self->elem, "got stream state: %s",
-+ pw_stream_state_as_string (state));
-+
-+ switch (state) {
-+ case PW_STREAM_STATE_ERROR:
-+ GST_ELEMENT_ERROR (self->elem, RESOURCE, FAILED,
-+ ("stream error: %s", error), (NULL));
-+ break;
-+ case PW_STREAM_STATE_UNCONNECTED:
-+ GST_ELEMENT_ERROR (self->elem, RESOURCE, FAILED,
-+ ("stream disconnected unexpectedly"), (NULL));
-+ break;
-+ case PW_STREAM_STATE_CONNECTING:
-+ break;
-+ case PW_STREAM_STATE_PAUSED:
-+ if (old == PW_STREAM_STATE_STREAMING) {
-+ if (GST_STATE (self->elem) != GST_STATE_PAUSED &&
-+ GST_STATE_TARGET (self->elem) != GST_STATE_PAUSED) {
-+ GST_DEBUG_OBJECT (self->elem, "requesting GST_STATE_PAUSED");
-+ msg = gst_message_new_request_state (GST_OBJECT (self->elem),
-+ GST_STATE_PAUSED);
-+ gst_element_post_message (self->elem, msg);
-+ }
-+ }
-+ break;
-+ case PW_STREAM_STATE_STREAMING:
-+ if (GST_STATE (self->elem) != GST_STATE_PLAYING &&
-+ GST_STATE_TARGET (self->elem) != GST_STATE_PLAYING) {
-+ GST_DEBUG_OBJECT (self->elem, "requesting GST_STATE_PLAYING");
-+ msg = gst_message_new_request_state (GST_OBJECT (self->elem),
-+ GST_STATE_PLAYING);
-+ gst_element_post_message (self->elem, msg);
-+ }
-+ break;
-+ }
-+ pw_thread_loop_signal (self->main_loop, FALSE);
-+}
-+
-+static gboolean
-+wait_for_stream_state (GstPwAudioRingBuffer *self,
-+ enum pw_stream_state target)
-+{
-+ while (TRUE) {
-+ enum pw_stream_state state = pw_stream_get_state (self->stream, NULL);
-+ if (state >= target)
-+ return TRUE;
-+ if (state == PW_STREAM_STATE_ERROR || state == PW_STREAM_STATE_UNCONNECTED)
-+ return FALSE;
-+ pw_thread_loop_wait (self->main_loop);
-+ }
-+}
-+
-+static void
-+on_stream_param_changed (void *data, uint32_t id, const struct spa_pod *format)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (data);
-+ const struct spa_pod *params[1];
-+ struct spa_pod_builder b = { NULL };
-+ uint8_t buffer[512];
-+
-+ if (format == NULL || id != SPA_PARAM_Format)
-+ return;
-+
-+ spa_pod_builder_init (&b, buffer, sizeof (buffer));
-+ params[0] = spa_pod_builder_add_object (&b,
-+ SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers,
-+ SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(16, 1, INT32_MAX),
-+ SPA_PARAM_BUFFERS_blocks, SPA_POD_Int(1),
-+ SPA_PARAM_BUFFERS_size, SPA_POD_Int(self->segsize),
-+ SPA_PARAM_BUFFERS_stride, SPA_POD_Int(self->bpf),
-+ SPA_PARAM_BUFFERS_align, SPA_POD_Int(16));
-+
-+ GST_DEBUG_OBJECT (self->elem, "doing finish format, buffer size:%d", self->segsize);
-+ pw_stream_update_params (self->stream, params, 1);
-+}
-+
-+static void
-+on_stream_process (void *data)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (data);
-+ GstAudioRingBuffer *buf = GST_AUDIO_RING_BUFFER (data);
-+ struct pw_buffer *b;
-+ struct spa_data *d;
-+ gint size; /*< size to read/write from/to the spa buffer */
-+ gint offset; /*< offset to read/write from/to in the spa buffer */
-+ gint segment; /*< the current segment number in the ringbuffer */
-+ guint8 *ringptr; /*< pointer to the beginning of the current segment */
-+ gint segsize; /*< the size of one segment in the ringbuffer */
-+ gint copy_size; /*< the bytes to copy in one memcpy() invocation */
-+ gint remain; /*< remainder of bytes available in the spa buffer */
-+
-+ if (g_atomic_int_get (&buf->state) != GST_AUDIO_RING_BUFFER_STATE_STARTED) {
-+ GST_LOG_OBJECT (self->elem, "ring buffer is not started");
-+ return;
-+ }
-+
-+ b = pw_stream_dequeue_buffer (self->stream);
-+ if (!b) {
-+ GST_INFO_OBJECT (self->elem, "no pipewire buffer available");
-+ return;
-+ }
-+
-+ d = &b->buffer->datas[0];
-+
-+ if (self->direction == PW_DIRECTION_OUTPUT) {
-+ /* in output mode, always fill the entire spa buffer */
-+ offset = d->chunk->offset = 0;
-+ size = d->chunk->size = d->maxsize;
-+ b->size = size / self->bpf;
-+ } else {
-+ offset = SPA_MIN (d->chunk->offset, d->maxsize);
-+ size = SPA_MIN (d->chunk->size, d->maxsize - offset);
-+ }
-+
-+ do {
-+ gst_audio_ring_buffer_prepare_read (buf, &segment, &ringptr, &segsize);
-+
-+ /* in INPUT (src) mode, it is possible that the skew algorithm
-+ * advances the ringbuffer behind our back */
-+ if (self->segoffset > 0 && self->cur_segment != segment)
-+ self->segoffset = 0;
-+
-+ copy_size = SPA_MIN (size, segsize - self->segoffset);
-+
-+ if (self->direction == PW_DIRECTION_OUTPUT) {
-+ memcpy (((guint8*) d->data) + offset, ringptr + self->segoffset,
-+ copy_size);
-+ } else {
-+ memcpy (ringptr + self->segoffset, ((guint8*) d->data) + offset,
-+ copy_size);
-+ }
-+
-+ remain = size - (segsize - self->segoffset);
-+
-+ GST_TRACE_OBJECT (self->elem,
-+ "seg %d: %s %d bytes remained:%d offset:%d segoffset:%d", segment,
-+ self->direction == PW_DIRECTION_INPUT ? "INPUT" : "OUTPUT",
-+ copy_size, remain, offset, self->segoffset);
-+
-+ if (remain >= 0) {
-+ offset += (segsize - self->segoffset);
-+ size = remain;
-+
-+ /* write silence on the segment we just read */
-+ if (self->direction == PW_DIRECTION_OUTPUT)
-+ gst_audio_ring_buffer_clear (buf, segment);
-+
-+ /* notify that we have read a complete segment */
-+ gst_audio_ring_buffer_advance (buf, 1);
-+ self->segoffset = 0;
-+ } else {
-+ self->segoffset += size;
-+ self->cur_segment = segment;
-+ }
-+ } while (remain > 0);
-+
-+ pw_stream_queue_buffer (self->stream, b);
-+}
-+
-+static const struct pw_stream_events stream_events = {
-+ PW_VERSION_STREAM_EVENTS,
-+ .state_changed = on_stream_state_changed,
-+ .param_changed = on_stream_param_changed,
-+ .process = on_stream_process,
-+};
-+
-+static gboolean
-+copy_properties (GQuark field_id, const GValue *value, gpointer user_data)
-+{
-+ struct pw_properties *properties = user_data;
-+
-+ if (G_VALUE_HOLDS_STRING (value))
-+ pw_properties_set (properties,
-+ g_quark_to_string (field_id),
-+ g_value_get_string (value));
-+ return TRUE;
-+}
-+
-+static gboolean
-+gst_pw_audio_ring_buffer_acquire (GstAudioRingBuffer *buf,
-+ GstAudioRingBufferSpec *spec)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (buf);
-+ struct pw_properties *props;
-+ struct spa_pod_builder b = { NULL };
-+ uint8_t buffer[512];
-+ const struct spa_pod *params[1];
-+
-+ g_return_val_if_fail (spec, FALSE);
-+ g_return_val_if_fail (GST_AUDIO_INFO_IS_VALID (&spec->info), FALSE);
-+ g_return_val_if_fail (!self->stream, TRUE); /* already acquired */
-+
-+ g_return_val_if_fail (spec->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW, FALSE);
-+ g_return_val_if_fail (GST_AUDIO_INFO_IS_FLOAT (&spec->info), FALSE);
-+
-+ GST_DEBUG_OBJECT (self->elem, "acquire");
-+
-+ /* construct param & props objects */
-+
-+ props = pw_properties_new (NULL, NULL);
-+ if (self->props->properties) {
-+ gst_structure_foreach (self->props->properties, copy_properties, props);
-+ }
-+
-+ spa_pod_builder_init (&b, buffer, sizeof (buffer));
-+ params[0] = spa_pod_builder_add_object (&b,
-+ SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
-+ SPA_FORMAT_mediaType, SPA_POD_Id (SPA_MEDIA_TYPE_audio),
-+ SPA_FORMAT_mediaSubtype, SPA_POD_Id (SPA_MEDIA_SUBTYPE_raw),
-+ SPA_FORMAT_AUDIO_format, SPA_POD_Id (SPA_AUDIO_FORMAT_F32),
-+ SPA_FORMAT_AUDIO_rate, SPA_POD_Int (GST_AUDIO_INFO_RATE (&spec->info)),
-+ SPA_FORMAT_AUDIO_channels, SPA_POD_Int (GST_AUDIO_INFO_CHANNELS (&spec->info)));
-+
-+ self->segsize = spec->segsize;
-+ self->bpf = GST_AUDIO_INFO_BPF (&spec->info);
-+ self->rate = GST_AUDIO_INFO_RATE (&spec->info);
-+ self->segoffset = 0;
-+
-+ pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%u/%u",
-+ self->segsize / self->bpf, self->rate);
-+ GST_DEBUG_OBJECT (self->elem, "segsize:%u, bpf:%u, node.latency = %s",
-+ self->segsize, self->bpf, pw_properties_get (props, PW_KEY_NODE_LATENCY));
-+
-+ /* connect stream */
-+
-+ pw_thread_loop_lock (self->main_loop);
-+
-+ GST_DEBUG_OBJECT (self->elem, "creating stream");
-+
-+ self->stream = pw_stream_new (self->remote, self->props->client_name, props);
-+ pw_stream_add_listener(self->stream, &self->stream_listener, &stream_events,
-+ self);
-+
-+ if (pw_stream_connect (self->stream,
-+ self->direction,
-+ self->props->path ? (uint32_t)atoi(self->props->path) : SPA_ID_INVALID,
-+ PW_STREAM_FLAG_AUTOCONNECT |
-+ PW_STREAM_FLAG_MAP_BUFFERS |
-+ PW_STREAM_FLAG_RT_PROCESS,
-+ params, 1) < 0)
-+ goto start_error;
-+
-+ GST_DEBUG_OBJECT (self->elem, "waiting for stream CONFIGURE");
-+
-+ if (!wait_for_stream_state (self, PW_STREAM_STATE_PAUSED))
-+ goto start_error;
-+
-+ pw_thread_loop_unlock (self->main_loop);
-+
-+ /* allocate the internal ringbuffer */
-+
-+ spec->seglatency = spec->segtotal + 1;
-+ buf->size = spec->segtotal * spec->segsize;
-+ buf->memory = g_malloc (buf->size);
-+
-+ gst_audio_format_fill_silence (buf->spec.info.finfo, buf->memory,
-+ buf->size);
-+
-+ GST_DEBUG_OBJECT (self->elem, "acquire done");
-+
-+ return TRUE;
-+
-+start_error:
-+ {
-+ GST_ERROR_OBJECT (self->elem, "could not start stream");
-+ pw_stream_destroy (self->stream);
-+ self->stream = NULL;
-+ pw_thread_loop_unlock (self->main_loop);
-+ return FALSE;
-+ }
-+}
-+
-+static gboolean
-+gst_pw_audio_ring_buffer_release (GstAudioRingBuffer *buf)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (buf);
-+
-+ GST_DEBUG_OBJECT (self->elem, "release");
-+
-+ pw_thread_loop_lock (self->main_loop);
-+ if (self->stream) {
-+ spa_hook_remove (&self->stream_listener);
-+ pw_stream_disconnect (self->stream);
-+ pw_stream_destroy (self->stream);
-+ self->stream = NULL;
-+ }
-+ pw_thread_loop_unlock (self->main_loop);
-+
-+ /* free the buffer */
-+ g_free (buf->memory);
-+ buf->memory = NULL;
-+
-+ return TRUE;
-+}
-+
-+static guint
-+gst_pw_audio_ring_buffer_delay (GstAudioRingBuffer *buf)
-+{
-+ GstPwAudioRingBuffer *self = GST_PW_AUDIO_RING_BUFFER (buf);
-+ struct pw_time t;
-+
-+ if (!self->stream || pw_stream_get_time (self->stream, &t) < 0)
-+ return 0;
-+
-+ if (self->direction == PW_DIRECTION_OUTPUT) {
-+ /* on output streams, we set the pw_buffer.size in frames,
-+ so no conversion is necessary */
-+ return t.queued;
-+ } else {
-+ /* on input streams, pw_buffer.size is set by pw_stream in ticks,
-+ so we need to convert it to frames and also add segoffset, which
-+ is the number of bytes we have read but not advertised yet, as
-+ the segment is incomplete */
-+ if (t.rate.denom > 0)
-+ return
-+ gst_util_uint64_scale (t.queued, self->rate * t.rate.num, t.rate.denom)
-+ + self->segoffset / self->bpf;
-+ else
-+ return self->segoffset / self->bpf;
-+ }
-+
-+ return 0;
-+}
-+
-+static void
-+gst_pw_audio_ring_buffer_class_init (GstPwAudioRingBufferClass * klass)
-+{
-+ GObjectClass *gobject_class;
-+ GstAudioRingBufferClass *gstaudiorbuf_class;
-+
-+ gobject_class = (GObjectClass *) klass;
-+ gstaudiorbuf_class = (GstAudioRingBufferClass *) klass;
-+
-+ gobject_class->finalize = gst_pw_audio_ring_buffer_finalize;
-+ gobject_class->set_property = gst_pw_audio_ring_buffer_set_property;
-+
-+ gstaudiorbuf_class->open_device = gst_pw_audio_ring_buffer_open_device;
-+ gstaudiorbuf_class->acquire = gst_pw_audio_ring_buffer_acquire;
-+ gstaudiorbuf_class->release = gst_pw_audio_ring_buffer_release;
-+ gstaudiorbuf_class->close_device = gst_pw_audio_ring_buffer_close_device;
-+ gstaudiorbuf_class->delay = gst_pw_audio_ring_buffer_delay;
-+
-+ g_object_class_install_property (gobject_class, PROP_ELEMENT,
-+ g_param_spec_object ("element", "Element", "The audio source or sink",
-+ GST_TYPE_ELEMENT,
-+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-+
-+ g_object_class_install_property (gobject_class, PROP_DIRECTION,
-+ g_param_spec_int ("direction", "Direction", "The stream direction",
-+ PW_DIRECTION_INPUT, PW_DIRECTION_OUTPUT, PW_DIRECTION_INPUT,
-+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-+
-+ g_object_class_install_property (gobject_class, PROP_PROPS,
-+ g_param_spec_pointer ("props", "Properties", "The properties struct",
-+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-+
-+ GST_DEBUG_CATEGORY_INIT (pw_audio_ring_buffer_debug, "pwaudioringbuffer", 0,
-+ "PipeWire Audio Ring Buffer");
-+}
-diff --git a/src/gst/gstpwaudioringbuffer.h b/src/gst/gstpwaudioringbuffer.h
-new file mode 100644
-index 00000000..f47f668a
---- /dev/null
-+++ b/src/gst/gstpwaudioringbuffer.h
-@@ -0,0 +1,83 @@
-+/* PipeWire
-+ *
-+ * Copyright © 2018 Wim Taymans
-+ * Copyright © 2019 Collabora Ltd.
-+ * @author George Kiagiadakis <george.kiagiadakis@collabora.com>
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ */
-+
-+#ifndef __GST_PW_AUDIO_RING_BUFFER_H__
-+#define __GST_PW_AUDIO_RING_BUFFER_H__
-+
-+#include <gst/gst.h>
-+#include <gst/audio/audio.h>
-+#include <pipewire/pipewire.h>
-+
-+G_BEGIN_DECLS
-+
-+#define GST_TYPE_PW_AUDIO_RING_BUFFER \
-+ (gst_pw_audio_ring_buffer_get_type ())
-+
-+G_DECLARE_FINAL_TYPE(GstPwAudioRingBuffer, gst_pw_audio_ring_buffer,
-+ GST, PW_AUDIO_RING_BUFFER, GstAudioRingBuffer);
-+
-+typedef struct _GstPwAudioRingBufferProps GstPwAudioRingBufferProps;
-+
-+struct _GstPwAudioRingBuffer
-+{
-+ GstAudioRingBuffer parent;
-+
-+ /* properties */
-+ GstElement *elem;
-+ enum pw_direction direction;
-+ GstPwAudioRingBufferProps *props;
-+
-+ /* internal */
-+ struct pw_loop *loop;
-+ struct pw_thread_loop *main_loop;
-+
-+ struct pw_core *core;
-+ struct pw_remote *remote;
-+ struct spa_hook remote_listener;
-+
-+ struct pw_stream *stream;
-+ struct spa_hook stream_listener;
-+
-+ gint segsize;
-+ gint bpf;
-+ gint rate;
-+
-+ /* on_stream_process() state */
-+ gint segoffset;
-+ gint cur_segment;
-+};
-+
-+struct _GstPwAudioRingBufferProps
-+{
-+ gchar *path;
-+ gchar *client_name;
-+ GstStructure *properties;
-+ int fd;
-+};
-+
-+G_END_DECLS
-+
-+#endif
-diff --git a/src/gst/gstpwaudiosink.c b/src/gst/gstpwaudiosink.c
-new file mode 100644
-index 00000000..069996c3
---- /dev/null
-+++ b/src/gst/gstpwaudiosink.c
-@@ -0,0 +1,207 @@
-+/* PipeWire
-+ *
-+ * Copyright © 2018 Wim Taymans
-+ * Copyright © 2019 Collabora Ltd.
-+ * @author George Kiagiadakis <george.kiagiadakis@collabora.com>
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include "gstpwaudiosink.h"
-+
-+GST_DEBUG_CATEGORY_STATIC (pw_audio_sink_debug);
-+#define GST_CAT_DEFAULT pw_audio_sink_debug
-+
-+G_DEFINE_TYPE (GstPwAudioSink, gst_pw_audio_sink, GST_TYPE_AUDIO_BASE_SINK);
-+
-+enum
-+{
-+ PROP_0,
-+ PROP_PATH,
-+ PROP_CLIENT_NAME,
-+ PROP_STREAM_PROPERTIES,
-+ PROP_FD
-+};
-+
-+static GstStaticPadTemplate gst_pw_audio_sink_template =
-+GST_STATIC_PAD_TEMPLATE ("sink",
-+ GST_PAD_SINK,
-+ GST_PAD_ALWAYS,
-+ GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_NE (F32))
-+ ", layout = (string)\"interleaved\"")
-+);
-+
-+
-+static void
-+gst_pw_audio_sink_init (GstPwAudioSink * self)
-+{
-+ self->props.fd = -1;
-+
-+ /* Bump the default buffer size up to 21.3 ms, which is the default on most
-+ * sound cards, in hope to match the alsa buffer size on the pipewire server.
-+ * This may not always happen, but it still sounds better than the 10ms
-+ * default latency. This is temporary until we have a better mechanism to
-+ * select the appropriate latency */
-+ GST_AUDIO_BASE_SINK (self)->latency_time = 21333;
-+}
-+
-+static void
-+gst_pw_audio_sink_finalize (GObject * object)
-+{
-+ GstPwAudioSink *pwsink = GST_PW_AUDIO_SINK (object);
-+
-+ g_free (pwsink->props.path);
-+ g_free (pwsink->props.client_name);
-+ if (pwsink->props.properties)
-+ gst_structure_free (pwsink->props.properties);
-+}
-+
-+static void
-+gst_pw_audio_sink_set_property (GObject * object, guint prop_id,
-+ const GValue * value, GParamSpec * pspec)
-+{
-+ GstPwAudioSink *pwsink = GST_PW_AUDIO_SINK (object);
-+
-+ switch (prop_id) {
-+ case PROP_PATH:
-+ g_free (pwsink->props.path);
-+ pwsink->props.path = g_value_dup_string (value);
-+ break;
-+
-+ case PROP_CLIENT_NAME:
-+ g_free (pwsink->props.client_name);
-+ pwsink->props.client_name = g_value_dup_string (value);
-+ break;
-+
-+ case PROP_STREAM_PROPERTIES:
-+ if (pwsink->props.properties)
-+ gst_structure_free (pwsink->props.properties);
-+ pwsink->props.properties =
-+ gst_structure_copy (gst_value_get_structure (value));
-+ break;
-+
-+ case PROP_FD:
-+ pwsink->props.fd = g_value_get_int (value);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+gst_pw_audio_sink_get_property (GObject * object, guint prop_id,
-+ GValue * value, GParamSpec * pspec)
-+{
-+ GstPwAudioSink *pwsink = GST_PW_AUDIO_SINK (object);
-+
-+ switch (prop_id) {
-+ case PROP_PATH:
-+ g_value_set_string (value, pwsink->props.path);
-+ break;
-+
-+ case PROP_CLIENT_NAME:
-+ g_value_set_string (value, pwsink->props.client_name);
-+ break;
-+
-+ case PROP_STREAM_PROPERTIES:
-+ gst_value_set_structure (value, pwsink->props.properties);
-+ break;
-+
-+ case PROP_FD:
-+ g_value_set_int (value, pwsink->props.fd);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static GstAudioRingBuffer *
-+gst_pw_audio_sink_create_ringbuffer (GstAudioBaseSink * sink)
-+{
-+ GstPwAudioSink *self = GST_PW_AUDIO_SINK (sink);
-+ GstAudioRingBuffer *buffer;
-+
-+ GST_DEBUG_OBJECT (sink, "creating ringbuffer");
-+ buffer = g_object_new (GST_TYPE_PW_AUDIO_RING_BUFFER,
-+ "element", sink,
-+ "direction", PW_DIRECTION_OUTPUT,
-+ "props", &self->props,
-+ NULL);
-+ GST_DEBUG_OBJECT (sink, "created ringbuffer @%p", buffer);
-+
-+ return buffer;
-+}
-+
-+static void
-+gst_pw_audio_sink_class_init (GstPwAudioSinkClass * klass)
-+{
-+ GObjectClass *gobject_class;
-+ GstElementClass *gstelement_class;
-+ GstAudioBaseSinkClass *gstaudiobsink_class;
-+
-+ gobject_class = (GObjectClass *) klass;
-+ gstelement_class = (GstElementClass *) klass;
-+ gstaudiobsink_class = (GstAudioBaseSinkClass *) klass;
-+
-+ gobject_class->finalize = gst_pw_audio_sink_finalize;
-+ gobject_class->set_property = gst_pw_audio_sink_set_property;
-+ gobject_class->get_property = gst_pw_audio_sink_get_property;
-+
-+ gstaudiobsink_class->create_ringbuffer = gst_pw_audio_sink_create_ringbuffer;
-+
-+ g_object_class_install_property (gobject_class, PROP_PATH,
-+ g_param_spec_string ("path", "Path",
-+ "The sink path to connect to (NULL = default)", NULL,
-+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+
-+ g_object_class_install_property (gobject_class, PROP_CLIENT_NAME,
-+ g_param_spec_string ("client-name", "Client Name",
-+ "The client name to use (NULL = default)", NULL,
-+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+
-+ g_object_class_install_property (gobject_class, PROP_STREAM_PROPERTIES,
-+ g_param_spec_boxed ("stream-properties", "Stream properties",
-+ "List of PipeWire stream properties", GST_TYPE_STRUCTURE,
-+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+
-+ g_object_class_install_property (gobject_class, PROP_FD,
-+ g_param_spec_int ("fd", "Fd", "The fd to connect with", -1, G_MAXINT, -1,
-+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+
-+ gst_element_class_set_static_metadata (gstelement_class,
-+ "PipeWire Audio sink", "Sink/Audio",
-+ "Send audio to PipeWire",
-+ "George Kiagiadakis <george.kiagiadakis@collabora.com>");
-+
-+ gst_element_class_add_pad_template (gstelement_class,
-+ gst_static_pad_template_get (&gst_pw_audio_sink_template));
-+
-+ GST_DEBUG_CATEGORY_INIT (pw_audio_sink_debug, "pwaudiosink", 0,
-+ "PipeWire Audio Sink");
-+}
-+
-diff --git a/src/gst/gstpwaudiosink.h b/src/gst/gstpwaudiosink.h
-new file mode 100644
-index 00000000..7ed0de7b
---- /dev/null
-+++ b/src/gst/gstpwaudiosink.h
-@@ -0,0 +1,48 @@
-+/* PipeWire
-+ *
-+ * Copyright © 2018 Wim Taymans
-+ * Copyright © 2019 Collabora Ltd.
-+ * @author George Kiagiadakis <george.kiagiadakis@collabora.com>
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ */
-+
-+#ifndef __GST_PW_AUDIO_SINK_H__
-+#define __GST_PW_AUDIO_SINK_H__
-+
-+#include "gstpwaudioringbuffer.h"
-+
-+G_BEGIN_DECLS
-+
-+#define GST_TYPE_PW_AUDIO_SINK \
-+ (gst_pw_audio_sink_get_type ())
-+
-+G_DECLARE_FINAL_TYPE(GstPwAudioSink, gst_pw_audio_sink,
-+ GST, PW_AUDIO_SINK, GstAudioBaseSink);
-+
-+struct _GstPwAudioSink
-+{
-+ GstAudioBaseSink parent;
-+ GstPwAudioRingBufferProps props;
-+};
-+
-+G_END_DECLS
-+
-+#endif
-diff --git a/src/gst/gstpwaudiosrc.c b/src/gst/gstpwaudiosrc.c
-new file mode 100644
-index 00000000..6c522982
---- /dev/null
-+++ b/src/gst/gstpwaudiosrc.c
-@@ -0,0 +1,200 @@
-+/* PipeWire
-+ *
-+ * Copyright © 2018 Wim Taymans
-+ * Copyright © 2019 Collabora Ltd.
-+ * @author George Kiagiadakis <george.kiagiadakis@collabora.com>
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include "gstpwaudiosrc.h"
-+
-+GST_DEBUG_CATEGORY_STATIC (pw_audio_src_debug);
-+#define GST_CAT_DEFAULT pw_audio_src_debug
-+
-+G_DEFINE_TYPE (GstPwAudioSrc, gst_pw_audio_src, GST_TYPE_AUDIO_BASE_SRC);
-+
-+enum
-+{
-+ PROP_0,
-+ PROP_PATH,
-+ PROP_CLIENT_NAME,
-+ PROP_STREAM_PROPERTIES,
-+ PROP_FD
-+};
-+
-+static GstStaticPadTemplate gst_pw_audio_src_template =
-+GST_STATIC_PAD_TEMPLATE ("src",
-+ GST_PAD_SRC,
-+ GST_PAD_ALWAYS,
-+ GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_NE (F32))
-+ ", layout = (string)\"interleaved\"")
-+);
-+
-+
-+static void
-+gst_pw_audio_src_init (GstPwAudioSrc * self)
-+{
-+ self->props.fd = -1;
-+}
-+
-+static void
-+gst_pw_audio_src_finalize (GObject * object)
-+{
-+ GstPwAudioSrc *self = GST_PW_AUDIO_SRC (object);
-+
-+ g_free (self->props.path);
-+ g_free (self->props.client_name);
-+ if (self->props.properties)
-+ gst_structure_free (self->props.properties);
-+}
-+
-+static void
-+gst_pw_audio_src_set_property (GObject * object, guint prop_id,
-+ const GValue * value, GParamSpec * pspec)
-+{
-+ GstPwAudioSrc *self = GST_PW_AUDIO_SRC (object);
-+
-+ switch (prop_id) {
-+ case PROP_PATH:
-+ g_free (self->props.path);
-+ self->props.path = g_value_dup_string (value);
-+ break;
-+
-+ case PROP_CLIENT_NAME:
-+ g_free (self->props.client_name);
-+ self->props.client_name = g_value_dup_string (value);
-+ break;
-+
-+ case PROP_STREAM_PROPERTIES:
-+ if (self->props.properties)
-+ gst_structure_free (self->props.properties);
-+ self->props.properties =
-+ gst_structure_copy (gst_value_get_structure (value));
-+ break;
-+
-+ case PROP_FD:
-+ self->props.fd = g_value_get_int (value);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+gst_pw_audio_src_get_property (GObject * object, guint prop_id,
-+ GValue * value, GParamSpec * pspec)
-+{
-+ GstPwAudioSrc *self = GST_PW_AUDIO_SRC (object);
-+
-+ switch (prop_id) {
-+ case PROP_PATH:
-+ g_value_set_string (value, self->props.path);
-+ break;
-+
-+ case PROP_CLIENT_NAME:
-+ g_value_set_string (value, self->props.client_name);
-+ break;
-+
-+ case PROP_STREAM_PROPERTIES:
-+ gst_value_set_structure (value, self->props.properties);
-+ break;
-+
-+ case PROP_FD:
-+ g_value_set_int (value, self->props.fd);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static GstAudioRingBuffer *
-+gst_pw_audio_src_create_ringbuffer (GstAudioBaseSrc * sink)
-+{
-+ GstPwAudioSrc *self = GST_PW_AUDIO_SRC (sink);
-+ GstAudioRingBuffer *buffer;
-+
-+ GST_DEBUG_OBJECT (sink, "creating ringbuffer");
-+ buffer = g_object_new (GST_TYPE_PW_AUDIO_RING_BUFFER,
-+ "element", sink,
-+ "direction", PW_DIRECTION_INPUT,
-+ "props", &self->props,
-+ NULL);
-+ GST_DEBUG_OBJECT (sink, "created ringbuffer @%p", buffer);
-+
-+ return buffer;
-+}
-+
-+static void
-+gst_pw_audio_src_class_init (GstPwAudioSrcClass * klass)
-+{
-+ GObjectClass *gobject_class;
-+ GstElementClass *gstelement_class;
-+ GstAudioBaseSrcClass *gstaudiobsrc_class;
-+
-+ gobject_class = (GObjectClass *) klass;
-+ gstelement_class = (GstElementClass *) klass;
-+ gstaudiobsrc_class = (GstAudioBaseSrcClass *) klass;
-+
-+ gobject_class->finalize = gst_pw_audio_src_finalize;
-+ gobject_class->set_property = gst_pw_audio_src_set_property;
-+ gobject_class->get_property = gst_pw_audio_src_get_property;
-+
-+ gstaudiobsrc_class->create_ringbuffer = gst_pw_audio_src_create_ringbuffer;
-+
-+ g_object_class_install_property (gobject_class, PROP_PATH,
-+ g_param_spec_string ("path", "Path",
-+ "The sink path to connect to (NULL = default)", NULL,
-+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+
-+ g_object_class_install_property (gobject_class, PROP_CLIENT_NAME,
-+ g_param_spec_string ("client-name", "Client Name",
-+ "The client name to use (NULL = default)", NULL,
-+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+
-+ g_object_class_install_property (gobject_class, PROP_STREAM_PROPERTIES,
-+ g_param_spec_boxed ("stream-properties", "Stream properties",
-+ "List of PipeWire stream properties", GST_TYPE_STRUCTURE,
-+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+
-+ g_object_class_install_property (gobject_class, PROP_FD,
-+ g_param_spec_int ("fd", "Fd", "The fd to connect with", -1, G_MAXINT, -1,
-+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+
-+ gst_element_class_set_static_metadata (gstelement_class,
-+ "PipeWire Audio source", "Source/Audio",
-+ "Receive audio from PipeWire",
-+ "George Kiagiadakis <george.kiagiadakis@collabora.com>");
-+
-+ gst_element_class_add_pad_template (gstelement_class,
-+ gst_static_pad_template_get (&gst_pw_audio_src_template));
-+
-+ GST_DEBUG_CATEGORY_INIT (pw_audio_src_debug, "pwaudiosrc", 0,
-+ "PipeWire Audio Src");
-+}
-+
-diff --git a/src/gst/gstpwaudiosrc.h b/src/gst/gstpwaudiosrc.h
-new file mode 100644
-index 00000000..c46e644c
---- /dev/null
-+++ b/src/gst/gstpwaudiosrc.h
-@@ -0,0 +1,48 @@
-+/* PipeWire
-+ *
-+ * Copyright © 2018 Wim Taymans
-+ * Copyright © 2019 Collabora Ltd.
-+ * @author George Kiagiadakis <george.kiagiadakis@collabora.com>
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ */
-+
-+#ifndef __GST_PW_AUDIO_SRC_H__
-+#define __GST_PW_AUDIO_SRC_H__
-+
-+#include "gstpwaudioringbuffer.h"
-+
-+G_BEGIN_DECLS
-+
-+#define GST_TYPE_PW_AUDIO_SRC \
-+ (gst_pw_audio_src_get_type ())
-+
-+G_DECLARE_FINAL_TYPE(GstPwAudioSrc, gst_pw_audio_src,
-+ GST, PW_AUDIO_SRC, GstAudioBaseSrc);
-+
-+struct _GstPwAudioSrc
-+{
-+ GstAudioBaseSrc parent;
-+ GstPwAudioRingBufferProps props;
-+};
-+
-+G_END_DECLS
-+
-+#endif
-diff --git a/src/gst/meson.build b/src/gst/meson.build
-index ad0e0801..0e922347 100644
---- a/src/gst/meson.build
-+++ b/src/gst/meson.build
-@@ -6,6 +6,9 @@ pipewire_gst_sources = [
- 'gstpipewirepool.c',
- 'gstpipewiresink.c',
- 'gstpipewiresrc.c',
-+ 'gstpwaudioringbuffer.c',
-+ 'gstpwaudiosink.c',
-+ 'gstpwaudiosrc.c',
- ]
-
- pipewire_gst_headers = [
-@@ -15,6 +18,9 @@ pipewire_gst_headers = [
- 'gstpipewirepool.h',
- 'gstpipewiresink.h',
- 'gstpipewiresrc.h',
-+ 'gstpwaudioringbuffer.h',
-+ 'gstpwaudiosink.h',
-+ 'gstpwaudiosrc.h',
- ]
-
- pipewire_gst_c_args = [
---
-2.24.0
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-audioconvert-always-assume-that-output-ports-are-NOT.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-audioconvert-always-assume-that-output-ports-are-NOT.patch
deleted file mode 100644
index beb878390..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-audioconvert-always-assume-that-output-ports-are-NOT.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From ce155eb0073fba84556782633f79bb7d03492c07 Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Wed, 2 Oct 2019 21:40:34 +0300
-Subject: [PATCH] audioconvert: always assume that output ports are NOT monitor
- ports
-
-Otherwise, when we setup audioconvert in merge+split mode,
-it assumes that the splitter's ports are monitor ports and
-belong to the merger.
-
-Upstream-Status: Inappropriate [workaround]
----
- spa/plugins/audioconvert/audioconvert.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/spa/plugins/audioconvert/audioconvert.c b/spa/plugins/audioconvert/audioconvert.c
-index 74a62a35..72da37d1 100644
---- a/spa/plugins/audioconvert/audioconvert.c
-+++ b/spa/plugins/audioconvert/audioconvert.c
-@@ -113,8 +113,12 @@ struct impl {
- unsigned int add_listener:1;
- };
-
-+#if 0
- #define IS_MONITOR_PORT(this,dir,port_id) (dir == SPA_DIRECTION_OUTPUT && port_id > 0 && \
- this->mode[SPA_DIRECTION_INPUT] == SPA_PARAM_PORT_CONFIG_MODE_dsp)
-+#else
-+#define IS_MONITOR_PORT(this,dir,port_id) (false)
-+#endif
-
- static void emit_node_info(struct impl *this, bool full)
- {
---
-2.24.0
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0005-module-access-add-same-sec-label-mode.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0005-module-access-add-same-sec-label-mode.patch
deleted file mode 100644
index 07a1ec114..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0005-module-access-add-same-sec-label-mode.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 19fad1a4fa8bdc4f02aac4e169e7ff9cab18bdcd Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Tue, 19 Nov 2019 17:09:07 +0200
-Subject: [PATCH] module-access: add same-sec-label-mode
-
-This is a mode where the access module allows all clients that have
-the same security label as the pipewire daemon, and every other
-client is put on the restricted state.
-
-In systems that use SMACK security labels, such as AGL, this allows
-the session manager (which is spawned by pipewire, inheriting the
-same smack label) to have full access to all objects, while every
-other client is restricted and the session manager must decide
-what to do with it
-
-Note that while this option is configurable, there is no loss of
-security if this option is not set in the configuration. Clients
-that don't have the same security context will be considered to
-be flatpak clients because pipewire will not be able to open
-/proc/pid/cmdline. This however results in some unwanted error
-messages that may be confusing.
-
-Upstream-Status: Inappropriate [agl/smack specific]
----
- src/modules/module-access.c | 45 ++++++++++++++++++++++++++++++++++++-
- 1 file changed, 44 insertions(+), 1 deletion(-)
-
-diff --git a/src/modules/module-access.c b/src/modules/module-access.c
-index 09dafa43..f75306d9 100644
---- a/src/modules/module-access.c
-+++ b/src/modules/module-access.c
-@@ -50,6 +50,30 @@ struct impl {
- struct spa_hook module_listener;
- };
-
-+static int check_seclabel(const char *str)
-+{
-+ char attr[1024];
-+ int fd, len;
-+
-+ fd = open("/proc/self/attr/current", O_RDONLY);
-+ if (fd < 0)
-+ return -errno;
-+
-+ if ((len = read(fd, attr, 1024)) <= 0) {
-+ close(fd);
-+ return -EIO;
-+ }
-+ attr[len] = '\0';
-+
-+ if (strcmp(attr, str) == 0) {
-+ close(fd);
-+ return 1;
-+ }
-+
-+ close(fd);
-+ return 0;
-+}
-+
- static int check_cmdline(struct pw_client *client, int pid, const char *str)
- {
- char path[2048];
-@@ -121,8 +145,27 @@ core_check_access(void *data, struct pw_client *client)
- const char *str;
- int pid, res;
-
-+ props = pw_client_get_properties(client);
-+
-+ if (impl->properties &&
-+ (str = pw_properties_get(impl->properties, "same-sec-label-mode")) != NULL &&
-+ strcmp(str, "1") == 0) {
-+ if (props && (str = pw_properties_get(props, PW_KEY_SEC_LABEL)) != NULL) {
-+ res = check_seclabel(str);
-+ if (res == 1)
-+ goto granted;
-+ else if (res < 0)
-+ pw_log_warn("module %p: client %p seclabel check failed: %s",
-+ impl, client, spa_strerror(res));
-+ }
-+ pw_log_debug("module %p: seclabel restricted client %p added",
-+ impl, client);
-+ items[0] = SPA_DICT_ITEM_INIT(PW_KEY_ACCESS, "restricted");
-+ goto wait_permissions;
-+ }
-+
- pid = -EINVAL;
-- if ((props = pw_client_get_properties(client)) != NULL) {
-+ if (props != NULL) {
- if ((str = pw_properties_get(props, PW_KEY_SEC_PID)) != NULL)
- pid = atoi(str);
- }
---
-2.24.0
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0006-alsa-pcm-call-reuse_buffers-when-resetting-the-state.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0006-alsa-pcm-call-reuse_buffers-when-resetting-the-state.patch
deleted file mode 100644
index cae4d70f6..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0006-alsa-pcm-call-reuse_buffers-when-resetting-the-state.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 5946fbd2ca3a7f892b4ebc10090f62df6bb1ec88 Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Thu, 9 Jan 2020 19:27:23 +0200
-Subject: [PATCH] alsa-pcm: call reuse_buffers when resetting the state of the
- buffers
-
-This allows the upstream node to put buffers back to its pool in case
-they were left around in the ready list locally when the alsa-pcm-sink
-was last paused.
-
-Fixes #203
----
- spa/plugins/alsa/alsa-pcm.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/spa/plugins/alsa/alsa-pcm.c b/spa/plugins/alsa/alsa-pcm.c
-index 63d75549..a6f22cf0 100644
---- a/spa/plugins/alsa/alsa-pcm.c
-+++ b/spa/plugins/alsa/alsa-pcm.c
-@@ -1115,6 +1115,7 @@ static void reset_buffers(struct state *this)
- struct buffer *b = &this->buffers[i];
- if (this->stream == SND_PCM_STREAM_PLAYBACK) {
- SPA_FLAG_SET(b->flags, BUFFER_FLAG_OUT);
-+ spa_node_call_reuse_buffer(&this->callbacks, 0, b->id);
- } else {
- spa_list_append(&this->free, &b->link);
- SPA_FLAG_CLEAR(b->flags, BUFFER_FLAG_OUT);
---
-2.24.1
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0007-alsa-Set-period_size-depending-on-hardware.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0007-alsa-Set-period_size-depending-on-hardware.patch
deleted file mode 100644
index f9649400e..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0007-alsa-Set-period_size-depending-on-hardware.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From bbf9c767d5b353142e03080762bdd805e124d50b Mon Sep 17 00:00:00 2001
-From: Walter Lozano <walter.lozano@collabora.com>
-Date: Fri, 7 Aug 2020 10:58:29 -0300
-Subject: [PATCH] alsa: Set period_size depending on hardware
-
-Currently PipeWire is unable to reproduce audio in systems where DMA
-granularity is not burst.
-
-In order to mitigate this issue, set period_size depending on hardware,
-lowering it when snd_pcm_hw_params_is_batch == 1, to reduce DMA
-transfers size.
-
-Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
----
- spa/plugins/alsa/alsa-pcm.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/spa/plugins/alsa/alsa-pcm.c b/spa/plugins/alsa/alsa-pcm.c
-index 63d75549..2d3850b7 100644
---- a/spa/plugins/alsa/alsa-pcm.c
-+++ b/spa/plugins/alsa/alsa-pcm.c
-@@ -463,6 +463,10 @@ int spa_alsa_set_format(struct state *state, struct spa_audio_info *fmt, uint32_
-
- dir = 0;
- period_size = 1024;
-+ if (snd_pcm_hw_params_is_batch(params)) {
-+ period_size = 512;
-+ spa_log_warn(state->log, NAME" hardware does double buffering, changing period_size to %ld", period_size);
-+ }
- CHECK(snd_pcm_hw_params_set_period_size_near(hndl, params, &period_size, &dir), "set_period_size_near");
- CHECK(snd_pcm_hw_params_get_buffer_size_max(params, &state->buffer_frames), "get_buffer_size_max");
- CHECK(snd_pcm_hw_params_set_buffer_size_near(hndl, params, &state->buffer_frames), "set_buffer_size_near");
---
-2.20.1
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0008-alsa-add-warning-in-case-of-partial-read-write.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0008-alsa-add-warning-in-case-of-partial-read-write.patch
deleted file mode 100644
index 98a2c98fc..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0008-alsa-add-warning-in-case-of-partial-read-write.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 45658f75e61da47b274f2eba3a55e62d016f8b42 Mon Sep 17 00:00:00 2001
-From: Walter Lozano <walter.lozano@collabora.com>
-Date: Mon, 24 Aug 2020 12:08:32 -0300
-Subject: [PATCH 8/9] alsa: add warning in case of partial read/write
-
-Currently alsa_read and alsa_write assumes that all the frames committed
-using snd_pcm_mmap_commit are read or written, which is probably true.
-However, as it could be some corner cases add a warning to notice this
-fact.
-
-Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
----
- spa/plugins/alsa/alsa-pcm.c | 28 ++++++++++++++++++++--------
- 1 file changed, 20 insertions(+), 8 deletions(-)
-
-diff --git a/spa/plugins/alsa/alsa-pcm.c b/spa/plugins/alsa/alsa-pcm.c
-index ed9bf42b..92ef2151 100644
---- a/spa/plugins/alsa/alsa-pcm.c
-+++ b/spa/plugins/alsa/alsa-pcm.c
-@@ -721,6 +721,7 @@ int spa_alsa_write(struct state *state, snd_pcm_uframes_t silence)
- snd_pcm_t *hndl = state->hndl;
- const snd_pcm_channel_area_t *my_areas;
- snd_pcm_uframes_t written, frames, offset, off, to_write, total_written;
-+ snd_pcm_sframes_t commitres;
- int res;
-
- if (state->position && state->duration != state->position->clock.duration) {
-@@ -834,11 +835,16 @@ again:
- state, offset, written, state->sample_count);
- total_written += written;
-
-- if ((res = snd_pcm_mmap_commit(hndl, offset, written)) < 0) {
-+ if ((commitres = snd_pcm_mmap_commit(hndl, offset, written)) < 0) {
- spa_log_error(state->log, NAME" %p: snd_pcm_mmap_commit error: %s",
-- state, snd_strerror(res));
-- if (res != -EPIPE && res != -ESTRPIPE)
-- return res;
-+ state, snd_strerror(commitres));
-+ if (commitres != -EPIPE && commitres != -ESTRPIPE)
-+ return commitres;
-+ }
-+
-+ if (commitres > 0 && written != (snd_pcm_uframes_t) commitres) {
-+ spa_log_warn(state->log, NAME" %p: mmap_commit wrote %ld instead of %ld",
-+ state, commitres, written);
- }
-
- if (!spa_list_is_empty(&state->ready) && written > 0)
-@@ -922,6 +928,7 @@ int spa_alsa_read(struct state *state, snd_pcm_uframes_t silence)
- snd_pcm_uframes_t total_read = 0, to_read;
- const snd_pcm_channel_area_t *my_areas;
- snd_pcm_uframes_t read, frames, offset;
-+ snd_pcm_sframes_t commitres;
- int res;
-
- if (state->position) {
-@@ -994,11 +1001,16 @@ int spa_alsa_read(struct state *state, snd_pcm_uframes_t silence)
- offset, read, state->sample_count);
- total_read += read;
-
-- if ((res = snd_pcm_mmap_commit(hndl, offset, read)) < 0) {
-+ if ((commitres = snd_pcm_mmap_commit(hndl, offset, read)) < 0) {
- spa_log_error(state->log, NAME" %p: snd_pcm_mmap_commit error: %s",
-- state, snd_strerror(res));
-- if (res != -EPIPE && res != -ESTRPIPE)
-- return res;
-+ state, snd_strerror(commitres));
-+ if (commitres != -EPIPE && commitres != -ESTRPIPE)
-+ return commitres;
-+ }
-+
-+ if (commitres > 0 && read != (snd_pcm_uframes_t) commitres) {
-+ spa_log_warn(state->log, NAME" %p: mmap_commit read %ld instead of %ld",
-+ state, commitres, read);
- }
-
- state->sample_count += total_read;
---
-2.20.1
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0009-alsa-adjust-delay-depending-on-hardware.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0009-alsa-adjust-delay-depending-on-hardware.patch
deleted file mode 100644
index a448063f1..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0009-alsa-adjust-delay-depending-on-hardware.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 38cdfa4483de4c2e91bfccb9c22ec72d9c3720f4 Mon Sep 17 00:00:00 2001
-From: Walter Lozano <walter.lozano@collabora.com>
-Date: Sat, 22 Aug 2020 11:51:30 -0300
-Subject: [PATCH 9/9] alsa: adjust delay depending on hardware
-
-Currently PipeWire is able to reproduce audio in systems where
-DMA granularity is not burst but it could face an xrun.
-
-In order to mitigate this issue, adjust the delay PipeWire
-calculates to make sure that a period is available in the buffer
-when snd_pcm_hw_params_is_batch == 1.
-
-Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
----
- spa/plugins/alsa/alsa-pcm.c | 12 +++++++++++-
- spa/plugins/alsa/alsa-pcm.h | 1 +
- 2 files changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/spa/plugins/alsa/alsa-pcm.c b/spa/plugins/alsa/alsa-pcm.c
-index 92ef2151..1f15085f 100644
---- a/spa/plugins/alsa/alsa-pcm.c
-+++ b/spa/plugins/alsa/alsa-pcm.c
-@@ -462,8 +462,9 @@ int spa_alsa_set_format(struct state *state, struct spa_audio_info *fmt, uint32_
- state->frame_size = info->channels * (snd_pcm_format_physical_width(format) / 8);
-
- dir = 0;
-+ state->pcm_is_batch = snd_pcm_hw_params_is_batch(params);
- period_size = 1024;
-- if (snd_pcm_hw_params_is_batch(params)) {
-+ if (state->pcm_is_batch) {
- period_size = 512;
- spa_log_warn(state->log, NAME" hardware does double buffering, changing period_size to %ld", period_size);
- }
-@@ -639,6 +640,15 @@ static int get_status(struct state *state, snd_pcm_uframes_t *delay, snd_pcm_ufr
-
- if (state->stream == SND_PCM_STREAM_PLAYBACK) {
- *delay = state->buffer_frames - avail;
-+ if (state->pcm_is_batch) {
-+ /* In this case, as we don't have a good granularity in the
-+ * avail report try to compensate this by tweaking the delay
-+ * and make sure that a period is available in the buffer */
-+ if (*delay > state->period_frames)
-+ *delay = *delay - state->period_frames;
-+ else
-+ *delay = 0;
-+ }
- }
- else {
- *delay = avail;
-diff --git a/spa/plugins/alsa/alsa-pcm.h b/spa/plugins/alsa/alsa-pcm.h
-index b7a2dd29..3b5c0d7b 100644
---- a/spa/plugins/alsa/alsa-pcm.h
-+++ b/spa/plugins/alsa/alsa-pcm.h
-@@ -100,6 +100,7 @@ struct state {
-
- bool have_format;
- struct spa_audio_info current_format;
-+ bool pcm_is_batch;
-
- snd_pcm_uframes_t buffer_frames;
- snd_pcm_uframes_t period_frames;
---
-2.20.1
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.service b/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.service
deleted file mode 100644
index e116dc1fa..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.service
+++ /dev/null
@@ -1,24 +0,0 @@
-[Unit]
-Description=Multimedia Service for user %i
-Requires=pipewire@%i.socket
-
-[Install]
-Also=pipewire@%i.socket
-
-[Service]
-Type=simple
-Restart=on-failure
-ExecStart=/usr/bin/pipewire
-
-Environment=XDG_RUNTIME_DIR=/run/user/%i
-Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus
-EnvironmentFile=-/etc/pipewire/environment
-
-User=%i
-Slice=user-%i.slice
-SmackProcessLabel=System::Pipewire
-SupplementaryGroups=audio
-UMask=0077
-CapabilityBoundingSet=
-SystemCallFilter=@basic-io @file-system @io-event @ipc \
- @memlock @network-io @process @resources @signal
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.socket b/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.socket
deleted file mode 100644
index 10cb32276..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/pipewire@.socket
+++ /dev/null
@@ -1,19 +0,0 @@
-[Unit]
-Description=Multimedia Service socket for user %i
-Requires=afm-user-setup@%i.service
-After=afm-user-setup@%i.service
-
-[Socket]
-Priority=6
-Backlog=5
-ListenStream=/run/user/%i/pipewire-0
-Service=pipewire@%i.service
-SmackLabel=*
-SmackLabelIPIn=System
-SmackLabelIPOut=System
-SocketUser=%i
-SocketGroup=%i
-SocketMode=0660
-
-[Install]
-WantedBy=afm-user-session@%i.target
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/smack-pipewire b/meta-pipewire/recipes-multimedia/pipewire/pipewire/smack-pipewire
deleted file mode 100644
index 8d5b541ff..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/smack-pipewire
+++ /dev/null
@@ -1,8 +0,0 @@
-System System::Pipewire rwxa--
-System::Pipewire System -wx---
-System::Pipewire System::Shared r-x---
-System::Pipewire System::Run rwxat-
-System::Pipewire System::Log rwxa--
-System::Pipewire _ r-x--l
-System::Pipewire User::Home r-x--l
-System::Pipewire User::App-Shared rwxat-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bb b/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bb
new file mode 100644
index 000000000..6fa851caa
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bb
@@ -0,0 +1,329 @@
+# This recipe was written by Carlos Rafael Giani <crg7475@mailbox.org>
+# for meta-oe
+#
+# The intention is to keep this synced with meta-oe and remove it when we
+# can depend on meta-oe to provide this recipe for us
+#
+# AGL-specific overrides and configuration should go in the .bbappend file
+#
+SUMMARY = "Multimedia processing server for Linux"
+DESCRIPTION = "Linux server for handling and routing audio and video streams between applications and multimedia I/O devices"
+HOMEPAGE = "https://pipewire.org/"
+BUGTRACKER = "https://gitlab.freedesktop.org/pipewire/pipewire/issues"
+LICENSE = "MIT & GPL-2.0-only & LGPL-2.1-or-later"
+
+LIC_FILES_CHKSUM = " \
+ file://LICENSE;md5=2158739e172e58dc9ab1bdd2d6ec9c72 \
+ file://COPYING;md5=97be96ca4fab23e9657ffa590b931c1a \
+"
+SECTION = "multimedia"
+
+DEPENDS = "dbus"
+
+# v1.0.0(El Presidente)
+SRCREV = "4debdcd40b055b3eaa83a8f4443aa990ea566bfe"
+SRC_URI = "git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig systemd manpages gettext useradd
+
+USERADD_PACKAGES = "${PN}"
+
+GROUPADD_PARAM:${PN} = "--system pipewire"
+
+USERADD_PARAM:${PN} = "--system --home / --no-create-home \
+ --comment 'PipeWire multimedia daemon' \
+ --gid pipewire --groups audio,video \
+ pipewire"
+
+# For "EVL", look up https://evlproject.org/ . It involves
+# a specially prepared kernel, and is currently unavailable
+# in Yocto.
+#
+# FFmpeg and Vulkan aren't really supported - at the current
+# stage (version 0.3.22), these are just experiments, not
+# actual features.
+#
+# libcamera support currently does not build successfully.
+#
+# systemd user service files are disabled because per-user
+# PipeWire instances aren't really something that makes
+# much sense in an embedded environment. A system-wide
+# instance does.
+#
+# manpage generation requires xmltoman, which is not available.
+#
+# Dont build any session managers along with pipewire
+# wireplumber is the session manger used in AGL and it will
+# be build in a different recipe
+#
+EXTRA_OEMESON += " \
+ -Daudiotestsrc=enabled \
+ -Devl=disabled \
+ -Dsystemd-user-service=disabled \
+ -Dtests=disabled \
+ -Dudevrulesdir=${nonarch_base_libdir}/udev/rules.d/ \
+ -Dvideotestsrc=enabled \
+ -Dffmpeg=disabled \
+ -Dvulkan=disabled \
+ -Dlibcamera=disabled \
+ -Dman=disabled \
+ -Dsession-managers=[] \
+"
+
+PACKAGECONFIG ??= "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'alsa systemd', d)} \
+ gstreamer jack v4l2 \
+"
+
+# "jack" and "pipewire-jack" packageconfigs cannot be both enabled,
+# since "jack" imports libjack, and "pipewire-jack" generates
+# libjack.so* files, thus colliding with the libpack package. This
+# is why these two are marked in their respective packageconfigs
+# as being in conflict.
+
+PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib udev,,pipewire-alsa-card-profile"
+PACKAGECONFIG[bluez] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc"
+PACKAGECONFIG[docs] = "-Ddocs=enabled,-Ddocs=disabled,doxygen-native"
+PACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base"
+PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack,,,pipewire-jack"
+PACKAGECONFIG[sdl2] = "-Dsdl2=enabled,-Dsdl2=disabled,virtual/libsdl2"
+PACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1"
+PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemd-system-service=enabled ,-Dsystemd=disabled -Dsystemd-system-service=disabled,systemd"
+PACKAGECONFIG[v4l2] = "-Dv4l2=enabled,-Dv4l2=disabled,udev"
+PACKAGECONFIG[pipewire-alsa] = "-Dpipewire-alsa=enabled,-Dpipewire-alsa=disabled,alsa-lib"
+PACKAGECONFIG[pipewire-jack] = "-Dpipewire-jack=enabled -Dlibjack-path=${libdir}/${PW_MODULE_SUBDIR}/jack,-Dpipewire-jack=disabled,jack,,,jack"
+PACKAGECONFIG[pipewire-v4l2] = "-Dpipewire-v4l2=enabled -Dpipewire-v4l2=${libdir}/${PW_MODULE_SUBDIR}/v4l2,-Dpipewire-v4l2=disabled,v4l2"
+
+PACKAGESPLITFUNCS:prepend = " split_dynamic_packages "
+PACKAGESPLITFUNCS:append = " set_dynamic_metapkg_rdepends "
+PACKAGESPLITFUNCS:append = " fixup_dynamic_pkg_licenses "
+
+SPA_SUBDIR = "spa-0.2"
+PW_MODULE_SUBDIR = "pipewire-0.3"
+
+remove_unused_installed_files() {
+ # jack.conf is used by pipewire-jack (not the JACK SPA plugin).
+ # Remove it if pipewire-jack is not built to avoid creating the
+ # pipewire-jack package.
+ if ${@bb.utils.contains('PACKAGECONFIG', 'pipewire-jack', 'false', 'true', d)}; then
+ rm -f "${D}${datadir}/pipewire/jack.conf"
+ fi
+}
+
+do_install[postfuncs] += "remove_unused_installed_files"
+
+python fixup_dynamic_pkg_licenses () {
+ #dynamic packages inherit currently whatever is specified in LICENSE (thus multiple)
+ packages = (d.getVar('PACKAGES') or "").split()
+
+ for pkg in packages:
+ # we manually assign the LICENSES here to cover all packages (even dynamically created ones)
+ d.setVar("LICENSE:" + pkg ,"MIT")
+
+ # next handle special cases
+ # ==> LICENSE:${PN}-spa-plugins-alsa = "LGPL-2.1-or-later"
+ if "pipewire-spa-plugins-alsa" in pkg:
+ d.setVar("LICENSE:pipewire-spa-plugins-alsa", "LGPL-2.1-or-later")
+ # ==> LICENSE:${PN}-alsa-card-profile = "LGPL-2.1-or-later"
+ if "pipewire-alsa-card-profile" in pkg:
+ d.setVar("LICENSE:pipewire-alsa-card-profile", "LGPL-2.1-or-later")
+ # ==> LICENSE:${PN}-jack = "GPL-2.0-only"
+ if "pipewire-jack" in pkg:
+ d.setVar("LICENSE:pipewire-jack", "GPL-2.0-only")
+}
+
+python split_dynamic_packages () {
+ # Create packages for each SPA plugin. These plugins are located
+ # in individual subdirectories, so a recursive search is needed.
+ spa_libdir = d.expand('${libdir}/${SPA_SUBDIR}')
+ do_split_packages(d, spa_libdir, r'^libspa-(.*)\.so$', d.expand('${PN}-spa-plugins-%s'), 'PipeWire SPA plugin for %s', extra_depends='', recursive=True)
+
+ # Create packages for each PipeWire module.
+ pw_module_libdir = d.expand('${libdir}/${PW_MODULE_SUBDIR}')
+ do_split_packages(d, pw_module_libdir, r'^libpipewire-module-(.*)\.so$', d.expand('${PN}-modules-%s'), 'PipeWire %s module', extra_depends='', recursive=False)
+}
+
+python set_dynamic_metapkg_rdepends () {
+ import os
+ import oe.utils
+
+ # Go through all generated SPA plugin and PipeWire module packages
+ # (excluding the main package and the -meta package itself) and
+ # add them to the -meta package as RDEPENDS.
+
+ base_pn = d.getVar('PN')
+
+ spa_pn = base_pn + '-spa-plugins'
+ spa_metapkg = spa_pn + '-meta'
+
+ pw_module_pn = base_pn + '-modules'
+ pw_module_metapkg = pw_module_pn + '-meta'
+
+ d.setVar('ALLOW_EMPTY:' + spa_metapkg, "1")
+ d.setVar('FILES:' + spa_metapkg, "")
+
+ d.setVar('ALLOW_EMPTY:' + pw_module_metapkg, "1")
+ d.setVar('FILES:' + pw_module_metapkg, "")
+
+ blacklist = [ spa_pn, spa_metapkg, pw_module_pn, pw_module_metapkg ]
+ spa_metapkg_rdepends = []
+ pw_module_metapkg_rdepends = []
+ pkgdest = d.getVar('PKGDEST')
+
+ for pkg in oe.utils.packages_filter_out_system(d):
+ if pkg in blacklist:
+ continue
+
+ is_spa_pkg = pkg.startswith(spa_pn)
+ is_pw_module_pkg = pkg.startswith(pw_module_pn)
+ if not is_spa_pkg and not is_pw_module_pkg:
+ continue
+
+ if pkg in spa_metapkg_rdepends or pkg in pw_module_metapkg_rdepends:
+ continue
+
+ # See if the package is empty by looking at the contents of its
+ # PKGDEST subdirectory. If this subdirectory is empty, then then
+ # package is empty as well. Empty packages do not get added to
+ # the meta package's RDEPENDS.
+ pkgdir = os.path.join(pkgdest, pkg)
+ if os.path.exists(pkgdir):
+ dir_contents = os.listdir(pkgdir) or []
+ else:
+ dir_contents = []
+ is_empty = len(dir_contents) == 0
+ if not is_empty:
+ if is_spa_pkg:
+ spa_metapkg_rdepends.append(pkg)
+ if is_pw_module_pkg:
+ pw_module_metapkg_rdepends.append(pkg)
+
+ d.setVar('RDEPENDS:' + spa_metapkg, ' '.join(spa_metapkg_rdepends))
+ d.setVar('DESCRIPTION:' + spa_metapkg, spa_pn + ' meta package')
+
+ d.setVar('RDEPENDS:' + pw_module_metapkg, ' '.join(pw_module_metapkg_rdepends))
+ d.setVar('DESCRIPTION:' + pw_module_metapkg, pw_module_pn + ' meta package')
+}
+
+PACKAGES =+ "\
+ libpipewire \
+ ${PN}-tools \
+ ${PN}-pulse \
+ ${PN}-alsa \
+ ${PN}-jack \
+ ${PN}-v4l2 \
+ ${PN}-spa-plugins \
+ ${PN}-spa-plugins-meta \
+ ${PN}-spa-tools \
+ ${PN}-modules \
+ ${PN}-modules-meta \
+ ${PN}-alsa-card-profile \
+ gstreamer1.0-pipewire \
+"
+
+PACKAGES_DYNAMIC = "^${PN}-spa-plugins.* ^${PN}-modules.*"
+
+SYSTEMD_SERVICE:${PN} = "pipewire.service"
+CONFFILES:${PN} += "${datadir}/pipewire/pipewire.conf"
+FILES:${PN} = " \
+ ${datadir}/pipewire/pipewire.conf \
+ ${datadir}/pipewire/filter-chain.conf \
+ ${datadir}/pipewire/filter-chain \
+ ${systemd_user_unitdir}/pipewire.* \
+ ${systemd_system_unitdir}/pipewire* \
+ ${bindir}/pipewire \
+ ${datadir}/pipewire/pipewire-avb.conf \
+ ${bindir}/pipewire-avb \
+ ${datadir}/pipewire/pipewire-aes67.conf \
+ ${bindir}/pipewire-aes67 \
+ ${datadir}/pipewire/pipewire.conf.avail \
+ ${datadir}/pipewire/pipewire-pulse.conf.avail \
+ ${datadir}/pipewire/client-rt.conf.avail \
+ ${datadir}/pipewire/client.conf.avail \
+ ${sysconfdir}/security/limits.d \
+"
+
+FILES:${PN}-dev += " \
+ ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so \
+"
+
+CONFFILES:libpipewire += "${datadir}/pipewire/client.conf"
+FILES:libpipewire = " \
+ ${datadir}/pipewire/client.conf \
+ ${datadir}/pipewire/client-rt.conf \
+ ${datadir}/pipewire/minimal.conf \
+ ${libdir}/libpipewire-*.so.* \
+"
+# Add the bare minimum modules and plugins required to be able
+# to use libpipewire. Without these, it is essentially unusable.
+RDEPENDS:libpipewire += " \
+ ${PN}-modules-client-node \
+ ${PN}-modules-protocol-native \
+ ${PN}-spa-plugins-support \
+"
+
+FILES:${PN}-tools = " \
+ ${bindir}/pw-* \
+"
+
+# This is a shim daemon that is intended to be used as a
+# drop-in PulseAudio replacement, providing a pulseaudio-compatible
+# socket that can be used by applications that use libpulse.
+CONFFILES:${PN}-pulse += "${datadir}/pipewire/pipewire-pulse.conf"
+
+FILES:${PN}-pulse = " \
+ ${datadir}/pipewire/pipewire-pulse.conf \
+ ${systemd_user_unitdir}/pipewire-pulse.* \
+ ${bindir}/pipewire-pulse \
+"
+RDEPENDS:${PN}-pulse += " \
+ ${PN}-modules-protocol-pulse \
+"
+
+# alsa plugin to redirect audio to pipewire
+FILES:${PN}-alsa = "\
+ ${libdir}/alsa-lib/* \
+ ${datadir}/alsa/alsa.conf.d/* \
+"
+
+#lib to emulate v4l2 system calls on top of PipeWire
+FILES:${PN}-v4l2 = "\
+ ${libdir}/${PW_MODULE_SUBDIR}/v4l2/libpw-v4l2.so \
+"
+
+# jack drop-in libraries to redirect audio to pipewire
+CONFFILES:${PN}-jack = "${datadir}/pipewire/jack.conf"
+FILES:${PN}-jack = "\
+ ${datadir}/pipewire/jack.conf \
+ ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so.* \
+"
+# Dynamic packages (see set_dynamic_metapkg_rdepends).
+FILES:${PN}-spa-plugins-bluez5 += " \
+ ${datadir}/${SPA_SUBDIR}/bluez5/bluez-hardware.conf \
+"
+RRECOMMENDS:${PN}-spa-plugins += "${PN}-spa-plugins-meta"
+
+FILES:${PN}-spa-tools = " \
+ ${bindir}/spa-* \
+"
+
+# Dynamic packages (see set_dynamic_metapkg_rdepends).
+FILES:${PN}-modules = ""
+RRECOMMENDS:${PN}-modules += "${PN}-modules-meta"
+
+CONFFILES:${PN}-modules-rtkit = "${datadir}/pipewire/client-rt.conf"
+FILES:${PN}-modules-rtkit += " \
+ ${datadir}/pipewire/client-rt.conf \
+ "
+
+FILES:${PN}-alsa-card-profile = " \
+ ${datadir}/alsa-card-profile/* \
+ ${nonarch_base_libdir}/udev/rules.d/90-pipewire-alsa.rules \
+"
+
+FILES:gstreamer1.0-pipewire = " \
+ ${libdir}/gstreamer-1.0/* \
+"
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bbappend b/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bbappend
new file mode 100644
index 000000000..beb7c0817
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bbappend
@@ -0,0 +1,25 @@
+SRC_URI += "\
+ file://0001-systemd-Do-not-override-rootprefix.patch \
+"
+
+PACKAGECONFIG = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluez5', 'bluez', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa pipewire-alsa', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'sndfile', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ gstreamer v4l2 \
+"
+
+do_install:append() {
+ # install symlinks to alsalib configuration files
+ for i in 50-pipewire.conf 99-pipewire-default.conf; do
+ if [ -f ${D}${datadir}/alsa/alsa.conf.d/${i} ]; then
+ install -d ${D}${sysconfdir}/alsa/conf.d
+ ln -s ${datadir}/alsa/alsa.conf.d/${i} ${D}${sysconfdir}/alsa/conf.d/${i}
+ fi
+ done
+}
+
+FILES:${PN}-alsa:append = "\
+ ${sysconfdir}/alsa/conf.d/* \
+"
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bb b/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bb
deleted file mode 100644
index e2560ad9d..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-require pipewire.inc
-
-SRC_URI = "git://gitlab.freedesktop.org/pipewire/pipewire.git;protocol=https;branch=master \
- file://0001-meson-revert-version-check-to-require-meson-0.47-not.patch \
- file://0002-arm-build-with-mno-unaligned-access.patch \
- file://0003-gst-Implement-new-pwaudio-src-sink-elements-based-on.patch \
- file://0004-audioconvert-always-assume-that-output-ports-are-NOT.patch \
- file://0005-module-access-add-same-sec-label-mode.patch \
- file://0006-alsa-pcm-call-reuse_buffers-when-resetting-the-state.patch \
- file://0007-alsa-Set-period_size-depending-on-hardware.patch \
- file://0008-alsa-add-warning-in-case-of-partial-read-write.patch \
- file://0009-alsa-adjust-delay-depending-on-hardware.patch \
- "
-
-SRCREV = "b0932e687fc47e0872ca291531f2291d99042d70"
-
-PV = "0.2.91+git${SRCPV}+2"
-S = "${WORKDIR}/git"
-
-RDEPENDS_${PN} += "virtual/pipewire-sessionmanager virtual/pipewire-config"
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bbappend b/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bbappend
deleted file mode 100644
index 8a0b0741f..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire_git.bbappend
+++ /dev/null
@@ -1,30 +0,0 @@
-SRC_URI += "\
- file://pipewire@.service \
- file://pipewire@.socket \
- file://smack-pipewire \
- "
-
-do_install_append() {
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- # remove the original user unit files shipped by pipewire
- rm -rf ${D}${systemd_unitdir}
-
- # install our own system-level templates
- mkdir -p ${D}${systemd_system_unitdir}/
- install -m 0644 ${WORKDIR}/pipewire@.service ${D}${systemd_system_unitdir}/pipewire@.service
- install -m 0644 ${WORKDIR}/pipewire@.socket ${D}${systemd_system_unitdir}/pipewire@.socket
-
- # enable the socket to start together with afm-user-session
- mkdir -p ${D}${systemd_system_unitdir}/afm-user-session@.target.wants
- ln -sf ../pipewire@.socket ${D}${systemd_system_unitdir}/afm-user-session@.target.wants/pipewire@.socket
-
- # install smack rules
- mkdir -p ${D}${sysconfdir}/smack/accesses.d
- install -m 0644 ${WORKDIR}/smack-pipewire ${D}${sysconfdir}/smack/accesses.d/pipewire
- fi
-}
-
-FILES_${PN} += "\
- ${systemd_system_unitdir}/* \
- ${sysconfdir}/smack/accesses.d/* \
-"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-audio-sink.endpoint
deleted file mode 100644
index 4bc435742..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-audio-sink.endpoint
+++ /dev/null
@@ -1,10 +0,0 @@
-[match-node]
-priority = 0
-properties = [
- { name = "media.class", value = "Audio/Sink" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-audio-source.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-audio-source.endpoint
deleted file mode 100644
index 7657f6f40..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-audio-source.endpoint
+++ /dev/null
@@ -1,10 +0,0 @@
-[match-node]
-priority = 0
-properties = [
- { name = "media.class", value = "Audio/Source" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "source"
-streams = "capture.streams"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-default-input-audio.endpoint-link b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-default-input-audio.endpoint-link
deleted file mode 100644
index 4b70dc89f..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-default-input-audio.endpoint-link
+++ /dev/null
@@ -1,7 +0,0 @@
-[match-endpoint]
-priority = 0
-direction = "sink"
-media_class = "Stream/Input/Audio"
-
-[endpoint-link]
-keep = false
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-default-output-audio.endpoint-link b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-default-output-audio.endpoint-link
deleted file mode 100644
index 5d6428f94..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-default-output-audio.endpoint-link
+++ /dev/null
@@ -1,7 +0,0 @@
-[match-endpoint]
-priority = 0
-direction = "source"
-media_class = "Stream/Output/Audio"
-
-[endpoint-link]
-keep = false
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-stream-input-audio.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-stream-input-audio.endpoint
deleted file mode 100644
index 2993f3e44..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-stream-input-audio.endpoint
+++ /dev/null
@@ -1,9 +0,0 @@
-[match-node]
-priority = 0
-properties = [
- { name = "media.class", value = "Stream/Input/Audio" },
-]
-
-[endpoint]
-direction = "sink"
-type = "pw-audio-softdsp-endpoint"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-stream-output-audio.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-stream-output-audio.endpoint
deleted file mode 100644
index 1cf82ea02..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/00-stream-output-audio.endpoint
+++ /dev/null
@@ -1,9 +0,0 @@
-[match-node]
-priority = 0
-properties = [
- { name = "media.class", value = "Stream/Output/Audio" },
-]
-
-[endpoint]
-direction = "source"
-type = "pw-audio-softdsp-endpoint"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/01-hw00-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/01-hw00-audio-sink.endpoint
deleted file mode 100644
index 85a9b5117..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/01-hw00-audio-sink.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 1
-properties = [
- { name = "media.class", value = "Audio/Sink" },
- { name = "api.alsa.path", value = "hw:0,0" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
-priority = 1
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/01-hw00-audio-source.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/01-hw00-audio-source.endpoint
deleted file mode 100644
index c77701c0d..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/01-hw00-audio-source.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 1
-properties = [
- { name = "media.class", value = "Audio/Source" },
- { name = "api.alsa.path", value = "hw:0,0" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "source"
-streams = "capture.streams"
-priority = 1
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-sink.endpoint
deleted file mode 100644
index 4405f7b7a..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-sink.endpoint
+++ /dev/null
@@ -1,13 +0,0 @@
-[match-node]
-priority = 30
-properties = [
- { name = "media.class", value = "Audio/Sink" },
- { name = "api.alsa.card.id", value = "ak4613" },
- { name = "api.alsa.pcm.device", value = "0" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
-priority = 30
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-source.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-source.endpoint
deleted file mode 100644
index ad5680592..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-ak4613-audio-source.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 30
-properties = [
- { name = "media.class", value = "Audio/Source" },
- { name = "api.alsa.card.id", value = "ak4613" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "source"
-streams = "capture.streams"
-priority = 30
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-dra7xx-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-dra7xx-audio-sink.endpoint
deleted file mode 100644
index becd21e2e..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-dra7xx-audio-sink.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 30
-properties = [
- { name = "media.class", value = "Audio/Sink" },
- { name = "api.alsa.card.id", value = "DRA7xx-EVM" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
-priority = 30
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-dra7xx-audio-source.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-dra7xx-audio-source.endpoint
deleted file mode 100644
index 72ef46770..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-dra7xx-audio-source.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 30
-properties = [
- { name = "media.class", value = "Audio/Source" },
- { name = "api.alsa.card.id", value = "DRA7xx-EVM" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "source"
-streams = "capture.streams"
-priority = 30
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-imx8mq-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-imx8mq-audio-sink.endpoint
deleted file mode 100644
index 538d31376..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-imx8mq-audio-sink.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 30
-properties = [
- { name = "media.class", value = "Audio/Sink" },
- { name = "api.alsa.card.id", value = "wm8524audio" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
-priority = 30
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-sink.endpoint
deleted file mode 100644
index 0c7b20805..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-sink.endpoint
+++ /dev/null
@@ -1,13 +0,0 @@
-[match-node]
-priority = 30
-properties = [
- { name = "media.class", value = "Audio/Sink" },
- { name = "api.alsa.card.id", value = "rcarsound" },
- { name = "api.alsa.pcm.device", value = "0" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
-priority = 30
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-source.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-source.endpoint
deleted file mode 100644
index d72d7e31c..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rcarsound-audio-source.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 30
-properties = [
- { name = "media.class", value = "Audio/Source" },
- { name = "api.alsa.card.id", value = "rcarsound" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "source"
-streams = "capture.streams"
-priority = 30
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rpi3-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rpi3-audio-sink.endpoint
deleted file mode 100644
index 74e4d62e6..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/30-rpi3-audio-sink.endpoint
+++ /dev/null
@@ -1,13 +0,0 @@
-[match-node]
-priority = 30
-properties = [
- { name = "media.class", value = "Audio/Sink" },
- { name = "api.alsa.card.name", value = "bcm2835 ALSA" },
- { name = "api.alsa.pcm.name", value = "bcm2835 ALSA" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
-priority = 30
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/40-fiberdyne-amp.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/40-fiberdyne-amp.endpoint
deleted file mode 100644
index 807ad4688..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/40-fiberdyne-amp.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 40
-properties = [
- { name = "media.class", value = "Audio/Sink" },
- { name = "api.alsa.card.id", value = "ep016ch" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
-priority = 40
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/40-microchip-mic.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/40-microchip-mic.endpoint
deleted file mode 100644
index bbfcd43a5..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/40-microchip-mic.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 40
-properties = [
- { name = "media.class", value = "Audio/Source" },
- { name = "api.alsa.card.id", value = "ep811ch" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "source"
-streams = "capture.streams"
-priority = 40
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/70-usb-audio-sink.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/70-usb-audio-sink.endpoint
deleted file mode 100644
index 62e279090..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/70-usb-audio-sink.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 70
-properties = [
- { name = "media.class", value = "Audio/Sink" },
- { name = "api.alsa.card.driver", value = "USB-Audio" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "sink"
-streams = "playback.streams"
-priority = 70
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/70-usb-audio-source.endpoint b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/70-usb-audio-source.endpoint
deleted file mode 100644
index 505ae8d81..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/70-usb-audio-source.endpoint
+++ /dev/null
@@ -1,12 +0,0 @@
-[match-node]
-priority = 70
-properties = [
- { name = "media.class", value = "Audio/Source" },
- { name = "api.alsa.card.driver", value = "USB-Audio" },
-]
-
-[endpoint]
-type = "pw-audio-softdsp-endpoint"
-direction = "source"
-streams = "capture.streams"
-priority = 70
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/bluealsa-input-audio.endpoint-link b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/bluealsa-input-audio.endpoint-link
deleted file mode 100644
index b5753a102..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/bluealsa-input-audio.endpoint-link
+++ /dev/null
@@ -1,11 +0,0 @@
-[match-endpoint]
-priority = 75
-direction = "sink"
-name = "bluealsa*"
-media_class = "Stream/Input/Audio"
-properties = [
- { name = "bluealsa.profile", value = "sco" },
-]
-
-[endpoint-link]
-keep = true
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/bluealsa-output-audio.endpoint-link b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/bluealsa-output-audio.endpoint-link
deleted file mode 100644
index d1b3cec07..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/bluealsa-output-audio.endpoint-link
+++ /dev/null
@@ -1,11 +0,0 @@
-[match-endpoint]
-priority = 75
-direction = "source"
-name = "bluealsa*"
-media_class = "Stream/Output/Audio"
-properties = [
- { name = "bluealsa.profile", value = "sco" },
-]
-
-[endpoint-link]
-keep = true
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/capture.streams b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/capture.streams
deleted file mode 100644
index e7ce36f6a..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/capture.streams
+++ /dev/null
@@ -1,3 +0,0 @@
-[[streams]]
-name = "Default"
-priority = 25
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/playback.streams b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/playback.streams
deleted file mode 100644
index c645416ad..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/playback.streams
+++ /dev/null
@@ -1,31 +0,0 @@
-[[streams]]
-name = "Multimedia"
-priority = 25
-
-[[streams]]
-name = "Speech-Low"
-priority = 30
-
-[[streams]]
-name = "Custom-Low"
-priority = 35
-
-[[streams]]
-name = "Navigation"
-priority = 50
-
-[[streams]]
-name = "Speech-High"
-priority = 60
-
-[[streams]]
-name = "Custom-High"
-priority = 65
-
-[[streams]]
-name = "Communication"
-priority = 75
-
-[[streams]]
-name = "Emergency"
-priority = 99
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/wireplumber.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/wireplumber.conf
deleted file mode 100644
index e0975a81f..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl/wireplumber.conf
+++ /dev/null
@@ -1,30 +0,0 @@
-# Register well-known SPA factories
-# These do not need to exist on the system to be registered
-add-spa-lib audio.convert* audioconvert/libspa-audioconvert
-add-spa-lib api.alsa.* alsa/libspa-alsa
-add-spa-lib api.v4l2.* v4l2/libspa-v4l2
-add-spa-lib api.bluez5.* bluez5/libspa-bluez5
-
-# the client-device pipewire module is needed for libwireplumber-module-monitor
-load-pipewire-module libpipewire-module-client-device
-
-# Session object implementation
-# This keeps track of the default input & output device endpoint
-load-module C libwireplumber-module-session
-
-# Basic pipewire integration - do not remove
-load-module C libwireplumber-module-pipewire
-
-# Grants access to security confined clients
-load-module C libwireplumber-module-client-permissions
-
-load-module C libwireplumber-module-monitor {
- "factory": <"api.alsa.enum.udev">,
- "flags": <["use-adapter", "activate-devices"]>
-}
-
-# Implements endpoint creation based on TOML configuration files
-load-module C libwireplumber-module-config-endpoint
-
-# Implements linking clients to devices based on TOML configuration files
-load-module C libwireplumber-module-config-policy
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl_git.bb
deleted file mode 100644
index 8b9a64594..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-board-config-agl_git.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-SUMMARY = "AGL configuration file for wireplumber"
-HOMEPAGE = "https://gitlab.freedesktop.org/gkiagia/wireplumber"
-BUGTRACKER = "https://jira.automotivelinux.org"
-AUTHOR = "George Kiagiadakis <george.kiagiadakis@collabora.com>"
-SECTION = "multimedia"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-
-SRC_URI = "\
- file://wireplumber.conf \
- file://00-audio-sink.endpoint \
- file://00-audio-source.endpoint \
- file://00-default-input-audio.endpoint-link \
- file://00-default-output-audio.endpoint-link \
- file://00-stream-input-audio.endpoint \
- file://00-stream-output-audio.endpoint \
- file://01-hw00-audio-sink.endpoint \
- file://01-hw00-audio-source.endpoint \
- file://30-ak4613-audio-sink.endpoint \
- file://30-ak4613-audio-source.endpoint \
- file://30-rcarsound-audio-sink.endpoint \
- file://30-rcarsound-audio-source.endpoint \
- file://30-dra7xx-audio-sink.endpoint \
- file://30-dra7xx-audio-source.endpoint \
- file://30-rpi3-audio-sink.endpoint \
- file://30-imx8mq-audio-sink.endpoint \
- file://40-fiberdyne-amp.endpoint \
- file://40-microchip-mic.endpoint \
- file://70-usb-audio-sink.endpoint \
- file://70-usb-audio-source.endpoint \
- file://bluealsa-input-audio.endpoint-link \
- file://bluealsa-output-audio.endpoint-link \
- file://capture.streams \
- file://playback.streams \
-"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-do_configure[noexec] = "1"
-do_compile[noexec] = "1"
-
-do_install_append() {
- install -d ${D}/${sysconfdir}/wireplumber/
- install -m 644 ${WORKDIR}/wireplumber.conf ${D}/${sysconfdir}/wireplumber/wireplumber.conf
- install -m 644 ${WORKDIR}/*.endpoint ${D}/${sysconfdir}/wireplumber/
- install -m 644 ${WORKDIR}/*.endpoint-link ${D}/${sysconfdir}/wireplumber/
- install -m 644 ${WORKDIR}/*.streams ${D}/${sysconfdir}/wireplumber/
-}
-
-FILES_${PN} += "\
- ${sysconfdir}/wireplumber/* \
-"
-CONFFILES_${PN} += "\
- ${sysconfdir}/wireplumber/* \
-"
-
-RPROVIDES_${PN} += "virtual/wireplumber-config"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua
new file mode 100644
index 000000000..7e1794df0
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua
@@ -0,0 +1,27 @@
+components = {}
+
+function load_module(m)
+ if not components[m] then
+ components[m] = { "libwireplumber-module-" .. m, type = "module" }
+ end
+end
+
+function load_pw_module(m)
+ if not components[m] then
+ components[m] = { "libpipewire-module-" .. m, type = "pw_module" }
+ end
+end
+
+function load_script(s, a)
+ if not components[s] then
+ components[s] = { s, type = "script/lua", args = a }
+ end
+end
+
+function load_monitor(s, a)
+ load_script("monitors/" .. s .. ".lua", a)
+end
+
+function load_access(s, a)
+ load_script("access/access-" .. s .. ".lua", a)
+end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/alsa-suspend.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/alsa-suspend.lua
new file mode 100644
index 000000000..55edd12cf
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/alsa-suspend.lua
@@ -0,0 +1,45 @@
+-- WirePlumber
+--
+-- This script mutes all ALSA sinks when the "suspend.playback" metadata
+-- key is set to 1; compliments pipewire-ic-ipc and the respective support
+-- for handling "suspend.playback" in the policy scripts
+--
+-- Copyright © 2021 Collabora Ltd.
+-- @author George Kiagiadakis <george.kiagiadakis@collabora.com>
+--
+-- SPDX-License-Identifier: MIT
+
+mixer_api = Plugin.find("mixer-api")
+
+nodes_om = ObjectManager {
+ Interest { type = "node",
+ Constraint { "media.class", "matches", "Audio/Sink" },
+ Constraint { "object.path", "matches", "alsa:pcm:*" },
+ },
+}
+
+metadata_om = ObjectManager {
+ Interest { type = "metadata",
+ Constraint { "metadata.name", "=", "default" },
+ }
+}
+
+metadata_om:connect("object-added", function (om, metadata)
+ metadata:connect("changed", function (m, subject, key, t, value)
+ if key == "suspend.playback" then
+ local suspended = (value == "1")
+
+ Log.info(string.format("%s ALSA nodes for IC sound",
+ suspended and "muting" or "unmuting"))
+
+ for n in nodes_om:iterate() do
+ mixer_api:call("set-volume", n["bound-id"], {
+ ["mute"] = suspended,
+ })
+ end
+ end
+ end)
+end)
+
+nodes_om:activate()
+metadata_om:activate()
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf
new file mode 100644
index 000000000..9077e3f45
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf
@@ -0,0 +1,74 @@
+# WirePlumber daemon context configuration #
+
+context.properties = {
+ ## Properties to configure the PipeWire context and some modules
+
+ application.name = "WirePlumber Bluetooth"
+ log.level = 2
+ wireplumber.script-engine = lua-scripting
+ wireplumber.export-core = true
+
+ #mem.mlock-all = false
+ #support.dbus = true
+}
+
+context.spa-libs = {
+ #<factory-name regex> = <library-name>
+ #
+ # Used to find spa factory names. It maps an spa factory name
+ # regular expression to a library name that should contain
+ # that factory.
+ #
+ api.bluez5.* = bluez5/libspa-bluez5
+ audio.convert.* = audioconvert/libspa-audioconvert
+ support.* = support/libspa-support
+}
+
+context.modules = [
+ #{ name = <module-name>
+ # [ args = { <key> = <value> ... } ]
+ # [ flags = [ [ ifexists ] [ nofail ] ]
+ #}
+ #
+ # PipeWire modules to load.
+ # If ifexists is given, the module is ignored when it is not found.
+ # If nofail is given, module initialization failures are ignored.
+ #
+
+ # The native communication protocol.
+ { name = libpipewire-module-protocol-native }
+
+ # Allows creating nodes that run in the context of the
+ # client. Is used by all clients that want to provide
+ # data to PipeWire.
+ { name = libpipewire-module-client-node }
+
+ # Allows creating devices that run in the context of the
+ # client. Is used by the session manager.
+ { name = libpipewire-module-client-device }
+
+ # Makes a factory for wrapping nodes in an adapter with a
+ # converter and resampler.
+ { name = libpipewire-module-adapter }
+
+ # Allows applications to create metadata objects. It creates
+ # a factory for Metadata objects.
+ { name = libpipewire-module-metadata }
+
+ # Provides factories to make session manager objects.
+ { name = libpipewire-module-session-manager }
+]
+
+wireplumber.components = [
+ #{ name = <component-name>, type = <component-type> }
+ #
+ # WirePlumber components to load
+ #
+
+ # The lua scripting engine
+ { name = libwireplumber-module-lua-scripting, type = module }
+
+ # The lua configuration file
+ # Other components are loaded from there
+ { name = bluetooth.lua, type = config/lua }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua
new file mode 100644
index 000000000..530f4cc62
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua
@@ -0,0 +1,110 @@
+-- Bluez monitor config file --
+
+bluez_monitor = {}
+
+bluez_monitor.properties = {
+ -- These features do not work on all headsets, so they are enabled
+ -- by default based on the hardware database. They can also be
+ -- forced on/off for all devices by the following options:
+
+ --["bluez5.enable-sbc-xq"] = true,
+ --["bluez5.enable-msbc"] = true,
+ --["bluez5.enable-hw-volume"] = true,
+
+ -- See bluez-hardware.conf for the hardware database.
+
+ -- Enabled headset roles (default: [ hsp_hs hfp_ag ]), this
+ -- property only applies to native backend. Currently some headsets
+ -- (Sony WH-1000XM3) are not working with both hsp_ag and hfp_ag
+ -- enabled, disable either hsp_ag or hfp_ag to work around it.
+ --
+ -- Supported headset roles: hsp_hs (HSP Headset),
+ -- hsp_ag (HSP Audio Gateway),
+ -- hfp_hf (HFP Hands-Free),
+ -- hfp_ag (HFP Audio Gateway)
+ ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]",
+
+ -- Enabled A2DP codecs (default: all).
+ --["bluez5.codecs"] = "[ sbc sbc_xq aac ldac aptx aptx_hd aptx_ll aptx_ll_duplex faststream faststream_duplex ]",
+
+ -- HFP/HSP backend (default: native).
+ -- Available values: any, none, hsphfpd, ofono, native
+ ["bluez5.hfphsp-backend"] = "ofono",
+
+ -- Properties for the A2DP codec configuration
+ --["bluez5.default.rate"] = 48000,
+ --["bluez5.default.channels"] = 2,
+}
+
+bluez_monitor.rules = {
+ -- An array of matches/actions to evaluate.
+ {
+ -- Rules for matching a device or node. It is an array of
+ -- properties that all need to match the regexp. If any of the
+ -- matches work, the actions are executed for the object.
+ matches = {
+ {
+ -- This matches all cards.
+ { "device.name", "matches", "bluez_card.*" },
+ },
+ },
+ -- Apply properties on the matched object.
+ apply_properties = {
+ -- Auto-connect device profiles on start up or when only partial
+ -- profiles have connected. Disabled by default if the property
+ -- is not specified.
+ --["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]",
+ ["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink ]",
+
+ -- Hardware volume control (default: [ hfp_ag hsp_ag a2dp_source ])
+ --["bluez5.hw-volume"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]",
+
+ -- LDAC encoding quality
+ -- Available values: auto (Adaptive Bitrate, default)
+ -- hq (High Quality, 990/909kbps)
+ -- sq (Standard Quality, 660/606kbps)
+ -- mq (Mobile use Quality, 330/303kbps)
+ --["bluez5.a2dp.ldac.quality"] = "auto",
+
+ -- AAC variable bitrate mode
+ -- Available values: 0 (cbr, default), 1-5 (quality level)
+ --["bluez5.a2dp.aac.bitratemode"] = 0,
+
+ -- Profile connected first
+ -- Available values: a2dp-sink (default), headset-head-unit
+ --["device.profile"] = "a2dp-sink",
+ },
+ },
+ {
+ -- Make output hsp/hfp stream nodes go through the Communication endpoint
+ -- Unfortunately we cannot match on "media.class" because this property
+ -- is not known before the node is created
+ matches = {
+ {
+ { "api.bluez5.profile", "equals", "headset-audio-gateway" },
+ { "factory.name", "matches", "*source*" },
+ },
+ },
+ apply_properties = {
+ ["media.role"] = "Communication",
+ },
+ },
+ {
+ -- Make output a2dp stream nodes go through the Multimedia endpoint
+ -- Unfortunately we cannot match on "media.class" because this property
+ -- is not known before the node is created
+ matches = {
+ {
+ { "api.bluez5.profile", "equals", "a2dp-source" },
+ },
+ },
+ apply_properties = {
+ ["media.role"] = "Multimedia",
+ },
+ },
+}
+
+load_monitor("bluez", {
+ properties = bluez_monitor.properties,
+ rules = bluez_monitor.rules,
+})
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua
new file mode 100644
index 000000000..d07f7ab85
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua
@@ -0,0 +1,151 @@
+-- ALSA monitor config file --
+
+alsa_monitor = {}
+
+alsa_monitor.properties = {
+ ["alsa.jack-device"] = false,
+ ["alsa.reserve"] = false,
+}
+
+alsa_monitor.rules = {
+ -- enable ACP (PulseAudio-like profiles)
+ {
+ matches = {
+ {
+ { "device.name", "matches", "alsa_card.*" },
+ },
+ },
+ apply_properties = {
+ ["api.alsa.use-acp"] = true,
+ },
+ },
+
+ --
+ -- Bump priority of well-known output devices
+ -- Higher priority means it gets selected as the default if it's present
+ --
+
+ -- USB card
+ {
+ matches = {
+ {
+ { "node.name", "matches", "alsa_output.*" },
+ { "api.alsa.card.driver", "=", "USB-Audio" },
+ },
+ },
+ apply_properties = {
+ ["priority.driver"] = 1300,
+ ["priority.session"] = 1300,
+ }
+ },
+
+ -- fiberdyne amp
+ {
+ matches = {
+ {
+ { "node.name", "matches", "alsa_output.*" },
+ { "api.alsa.card.id", "=", "ep016ch" },
+ },
+ },
+ apply_properties = {
+ ["priority.driver"] = 1200,
+ ["priority.session"] = 1200,
+ }
+ },
+
+ -- well-known internal devices
+ {
+ matches = {
+ {
+ -- ak4613
+ { "node.name", "matches", "alsa_output.*" },
+ { "api.alsa.card.id", "=", "ak4613" },
+ { "api.alsa.pcm.device", "=", "0" },
+ },
+ {
+ -- imx8mq
+ { "node.name", "matches", "alsa_output.*" },
+ { "api.alsa.card.id", "=", "wm8524audio" },
+ },
+ {
+ -- rcarsound
+ { "node.name", "matches", "alsa_output.*" },
+ { "api.alsa.card.id", "=", "rcarsound" },
+ { "api.alsa.pcm.device", "=", "0" },
+ },
+ {
+ -- rpi3
+ { "node.name", "matches", "alsa_output.*" },
+ { "api.alsa.pcm.name", "=", "bcm2835 ALSA" },
+ },
+ },
+ apply_properties = {
+ ["priority.driver"] = 1100,
+ ["priority.session"] = 1100,
+ }
+ },
+
+ --
+ -- Same for input devices
+ --
+
+ -- USB card
+ {
+ matches = {
+ {
+ { "node.name", "matches", "alsa_input.*" },
+ { "api.alsa.card.driver", "=", "USB-Audio" },
+ },
+ },
+ apply_properties = {
+ ["priority.driver"] = 2300,
+ ["priority.session"] = 2300,
+ }
+ },
+
+ -- microchip mic
+ {
+ matches = {
+ {
+ { "node.name", "matches", "alsa_input.*" },
+ { "api.alsa.card.id", "=", "ep811ch" },
+ },
+ },
+ apply_properties = {
+ ["priority.driver"] = 2200,
+ ["priority.session"] = 2200,
+ }
+ },
+
+ -- well-known internal devices
+ {
+ matches = {
+ {
+ -- ak4613
+ { "node.name", "matches", "alsa_input.*" },
+ { "api.alsa.card.id", "=", "ak4613" },
+ },
+ {
+ -- imx8mq
+ { "node.name", "matches", "alsa_input.*" },
+ { "api.alsa.card.id", "=", "wm8524audio" },
+ },
+ {
+ -- rcarsound
+ { "node.name", "matches", "alsa_input.*" },
+ { "api.alsa.card.id", "=", "rcarsound" },
+ },
+ },
+ apply_properties = {
+ ["priority.driver"] = 2100,
+ ["priority.session"] = 2100,
+ }
+ },
+}
+
+function alsa_monitor.enable()
+ load_monitor("alsa", {
+ properties = alsa_monitor.properties,
+ rules = alsa_monitor.rules,
+ })
+end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua
new file mode 100644
index 000000000..a4eb58ac8
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua
@@ -0,0 +1,48 @@
+-- V4L2 monitor config file --
+
+v4l2_monitor = {}
+v4l2_monitor.properties = {}
+
+v4l2_monitor.rules = {
+ -- An array of matches/actions to evaluate.
+ {
+ -- Rules for matching a device or node. It is an array of
+ -- properties that all need to match the regexp. If any of the
+ -- matches work, the actions are executed for the object.
+ matches = {
+ {
+ -- This matches all cards.
+ { "device.name", "matches", "v4l2_device.*" },
+ },
+ },
+ -- Apply properties on the matched object.
+ apply_properties = {
+ -- ["device.nick"] = "My Device",
+ },
+ },
+ {
+ matches = {
+ {
+ -- Matches all sources.
+ { "node.name", "matches", "v4l2_input.*" },
+ },
+ {
+ -- Matches all sinks.
+ { "node.name", "matches", "v4l2_output.*" },
+ },
+ },
+ apply_properties = {
+ --["node.nick"] = "My Node",
+ --["priority.driver"] = 100,
+ --["priority.session"] = 100,
+ --["node.pause-on-idle"] = false,
+ },
+ },
+}
+
+function v4l2_monitor.enable()
+ load_monitor("v4l2", {
+ properties = v4l2_monitor.properties,
+ rules = v4l2_monitor.rules,
+ })
+end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua
new file mode 100644
index 000000000..e0d332422
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua
@@ -0,0 +1,26 @@
+device_defaults = {}
+
+device_defaults.properties = {
+ -- store preferences to the file system and restore them at startup;
+ -- when set to false, default nodes and routes are selected based on
+ -- their priorities and any runtime changes do not persist after restart
+ ["use-persistent-storage"] = false,
+}
+
+function device_defaults.enable()
+ -- Selects appropriate default nodes and enables saving and restoring them
+ load_module("default-nodes", device_defaults.properties)
+
+ -- Selects appropriate default routes ("ports" in pulseaudio terminology)
+ -- and enables saving and restoring them together with
+ -- their properties (per-route/port volume levels, channel maps, etc)
+ load_script("policy-device-routes.lua", device_defaults.properties)
+
+ if device_defaults.properties["use-persistent-storage"] then
+ -- Enables functionality to save and restore default device profiles
+ load_module("default-profile")
+
+ -- Save and restore stream-specific properties
+ load_script("restore-stream.lua")
+ end
+end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua
new file mode 100644
index 000000000..ecb7da476
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua
@@ -0,0 +1,20 @@
+-- Provide the "default" pw_metadata, which stores
+-- dynamic properties of pipewire objects in RAM
+load_module("metadata")
+
+-- Load devices
+alsa_monitor.enable()
+v4l2_monitor.enable()
+
+-- Track/store/restore user choices about devices
+device_defaults.enable()
+
+-- Automatically suspends idle nodes after 3 seconds
+load_script("suspend-node.lua")
+
+-- Automatically sets device profiles to 'On'
+load_script("policy-device-profile.lua")
+
+-- Mute ALSA sinks when requested by pipewire-ic-ipc
+load_module("mixer-api")
+load_script("alsa-suspend.lua")
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber-bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber-bluetooth.conf
new file mode 100644
index 000000000..950e6a5d2
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber-bluetooth.conf
@@ -0,0 +1,13 @@
+<!-- This configuration file specifies the required security policies
+ for wireplumber to talk to system bluetooth-related services. -->
+
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+ <policy user="pipewire">
+ <allow send_destination="org.bluez"/>
+ <allow send_destination="org.ofono"/>
+ </policy>
+
+</busconfig>
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf
new file mode 100644
index 000000000..46ad11302
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf
@@ -0,0 +1,115 @@
+# WirePlumber daemon context configuration #
+
+context.properties = {
+ ## Properties to configure the PipeWire context and some modules
+
+ # 1=error/critical/warning, 2=message, 3=info, 4=debug, 5=trace
+ log.level = 2
+
+ wireplumber.script-engine = lua-scripting
+}
+
+context.spa-libs = {
+ #<factory-name regex> = <library-name>
+ #
+ # Used to find spa factory names. It maps an spa factory name
+ # regular expression to a library name that should contain
+ # that factory.
+ #
+ api.alsa.* = alsa/libspa-alsa
+ api.bluez5.* = bluez5/libspa-bluez5
+ api.v4l2.* = v4l2/libspa-v4l2
+ api.libcamera.* = libcamera/libspa-libcamera
+ audio.convert.* = audioconvert/libspa-audioconvert
+ support.* = support/libspa-support
+}
+
+context.modules = [
+ #{ name = <module-name>
+ # [ args = { <key> = <value> ... } ]
+ # [ flags = [ [ ifexists ] [ nofail ] ]
+ #}
+ #
+ # PipeWire modules to load.
+ # If ifexists is given, the module is ignored when it is not found.
+ # If nofail is given, module initialization failures are ignored.
+ #
+
+ # The native communication protocol.
+ { name = libpipewire-module-protocol-native }
+
+ # Allows creating nodes that run in the context of the
+ # client. Is used by all clients that want to provide
+ # data to PipeWire.
+ { name = libpipewire-module-client-node }
+
+ # Allows creating devices that run in the context of the
+ # client. Is used by the session manager.
+ { name = libpipewire-module-client-device }
+
+ # Makes a factory for wrapping nodes in an adapter with a
+ # converter and resampler.
+ { name = libpipewire-module-adapter }
+
+ # Allows applications to create metadata objects. It creates
+ # a factory for Metadata objects.
+ { name = libpipewire-module-metadata }
+
+ # Provides factories to make session manager objects.
+ { name = libpipewire-module-session-manager }
+
+ { name = libpipewire-module-filter-chain
+ args = {
+ node.description = "Equalizer Sink"
+ media.name = "Equalizer Sink"
+ filter.graph = {
+ nodes = [
+ {
+ type = builtin
+ name = bass
+ label = bq_lowshelf
+ # the cut off freq of the bass filter can be adjusted here.
+ control = { "Freq" = 250.0 "Q" = 1.0 "Gain" = 0.0 }
+ }
+ {
+ type = builtin
+ name = treble
+ label = bq_peaking
+ # the cut off freq of the treble filter can be adjusted here.
+ control = { "Freq" = 6000.0 "Q" = 1.0 "Gain" = 0.0 }
+ }
+ ]
+ links = [
+ { output = "bass:Out" input = "treble:In" }
+ ]
+ }
+ audio.channels = 2
+ audio.position = [ FL FR ]
+ capture.props = {
+ node.name = "eq-sink"
+ media.class = Audio/Sink
+ # select the endpoint to which the node is attached
+ target.endpoint = "endpoint.multimedia"
+ node.passive = true
+ }
+ playback.props = {
+ node.name = "eq-output-stream"
+ node.passive = true
+ }
+ }
+ }
+]
+
+wireplumber.components = [
+ #{ name = <component-name>, type = <component-type> }
+ #
+ # WirePlumber components to load
+ #
+
+ # The lua scripting engine
+ { name = libwireplumber-module-lua-scripting, type = module }
+
+ # The lua configuration file(s)
+ # Other components are loaded from there
+ { name = host.lua, type = config/lua }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
new file mode 100644
index 000000000..22ffe5bf3
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
@@ -0,0 +1,61 @@
+SUMMARY = "AGL configuration file for wireplumber"
+HOMEPAGE = "https://gitlab.freedesktop.org/gkiagia/wireplumber"
+BUGTRACKER = "https://jira.automotivelinux.org"
+AUTHOR = "George Kiagiadakis <george.kiagiadakis@collabora.com>"
+SECTION = "multimedia"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+SRC_URI = "\
+ file://bluetooth.lua.d/ \
+ file://host.lua.d/ \
+ file://00-functions.lua \
+ file://alsa-suspend.lua \
+ file://bluetooth.conf \
+ file://wireplumber.conf \
+ file://wireplumber-bluetooth.conf \
+"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+do_install:append() {
+ config_dir="${D}${sysconfdir}/wireplumber/"
+ scripts_dir="${D}${datadir}/wireplumber/scripts/"
+ dbus_config_dir="${D}${sysconfdir}/dbus-1/system.d/"
+ systemd_dir="${D}${sysconfdir}/systemd/system/pipewire.service.wants/"
+
+ install -d ${config_dir}
+ install -m 0644 ${WORKDIR}/00-functions.lua ${config_dir}
+
+ # config of the main (host) instance
+ install -d ${config_dir}/host.lua.d/
+ ln -s ../00-functions.lua ${config_dir}/host.lua.d/00-functions.lua
+ install -m 0644 ${WORKDIR}/host.lua.d/*.lua ${config_dir}/host.lua.d/
+ install -m 0644 ${WORKDIR}/wireplumber.conf ${config_dir}
+
+ # config of the bluetooth instance
+ install -d ${config_dir}/bluetooth.lua.d/
+ ln -s ../00-functions.lua ${config_dir}/bluetooth.lua.d/00-functions.lua
+ install -m 0644 ${WORKDIR}/bluetooth.lua.d/*.lua ${config_dir}/bluetooth.lua.d/
+ install -m 0644 ${WORKDIR}/bluetooth.conf ${config_dir}
+
+ # install the alsa-suspend script, loaded by the main instance
+ install -d ${scripts_dir}
+ install -m 0644 ${WORKDIR}/alsa-suspend.lua ${scripts_dir}
+
+ # install dbus daemon configuration
+ install -d ${dbus_config_dir}
+ install -m 0644 ${WORKDIR}/wireplumber-bluetooth.conf ${dbus_config_dir}
+
+ # enable additional systemd services
+ install -d ${systemd_dir}
+ ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@bluetooth.service
+}
+
+FILES:${PN} += "\
+ ${sysconfdir}/* \
+ ${datadir}/wireplumber/* \
+"
+CONFFILES:${PN} += "\
+ ${sysconfdir}/* \
+"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua
new file mode 100644
index 000000000..7e1794df0
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua
@@ -0,0 +1,27 @@
+components = {}
+
+function load_module(m)
+ if not components[m] then
+ components[m] = { "libwireplumber-module-" .. m, type = "module" }
+ end
+end
+
+function load_pw_module(m)
+ if not components[m] then
+ components[m] = { "libpipewire-module-" .. m, type = "pw_module" }
+ end
+end
+
+function load_script(s, a)
+ if not components[s] then
+ components[s] = { s, type = "script/lua", args = a }
+ end
+end
+
+function load_monitor(s, a)
+ load_script("monitors/" .. s .. ".lua", a)
+end
+
+function load_access(s, a)
+ load_script("access/access-" .. s .. ".lua", a)
+end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf
new file mode 100644
index 000000000..42f714849
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf
@@ -0,0 +1,73 @@
+# WirePlumber daemon context configuration #
+
+context.properties = {
+ ## Properties to configure the PipeWire context and some modules
+
+ application.name = "WirePlumber Policy"
+ log.level = 2
+ wireplumber.script-engine = lua-scripting
+ wireplumber.export-core = false
+
+ #mem.mlock-all = false
+ #support.dbus = true
+}
+
+context.spa-libs = {
+ #<factory-name regex> = <library-name>
+ #
+ # Used to find spa factory names. It maps an spa factory name
+ # regular expression to a library name that should contain
+ # that factory.
+ #
+ audio.convert.* = audioconvert/libspa-audioconvert
+ support.* = support/libspa-support
+}
+
+context.modules = [
+ #{ name = <module-name>
+ # [ args = { <key> = <value> ... } ]
+ # [ flags = [ [ ifexists ] [ nofail ] ]
+ #}
+ #
+ # PipeWire modules to load.
+ # If ifexists is given, the module is ignored when it is not found.
+ # If nofail is given, module initialization failures are ignored.
+ #
+
+ # The native communication protocol.
+ { name = libpipewire-module-protocol-native }
+
+ # Allows creating nodes that run in the context of the
+ # client. Is used by all clients that want to provide
+ # data to PipeWire.
+ { name = libpipewire-module-client-node }
+
+ # Allows creating devices that run in the context of the
+ # client. Is used by the session manager.
+ { name = libpipewire-module-client-device }
+
+ # Makes a factory for wrapping nodes in an adapter with a
+ # converter and resampler.
+ { name = libpipewire-module-adapter }
+
+ # Allows applications to create metadata objects. It creates
+ # a factory for Metadata objects.
+ { name = libpipewire-module-metadata }
+
+ # Provides factories to make session manager objects.
+ { name = libpipewire-module-session-manager }
+]
+
+wireplumber.components = [
+ #{ name = <component-name>, type = <component-type> }
+ #
+ # WirePlumber components to load
+ #
+
+ # The lua scripting engine
+ { name = libwireplumber-module-lua-scripting, type = module }
+
+ # The lua configuration file
+ # Other components are loaded from there
+ { name = policy.lua, type = config/lua }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua
new file mode 100644
index 000000000..6814fce4d
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua
@@ -0,0 +1,137 @@
+-- Policy config file --
+
+policy_config = {}
+
+policy_config.endpoints = {
+ -- [endpoint name] = { endpoint properties }
+ ["endpoint.capture"] = {
+ ["media.class"] = "Audio/Source",
+ ["role"] = "Capture",
+ },
+ ["endpoint.multimedia"] = {
+ ["media.class"] = "Audio/Sink",
+ ["role"] = "Multimedia",
+ },
+ ["endpoint.speech_low"] = {
+ ["media.class"] = "Audio/Sink",
+ ["role"] = "Speech-Low",
+ },
+ ["endpoint.custom_low"] = {
+ ["media.class"] = "Audio/Sink",
+ ["role"] = "Custom-Low",
+ },
+ ["endpoint.navigation"] = {
+ ["media.class"] = "Audio/Sink",
+ ["role"] = "Navigation",
+ },
+ ["endpoint.speech_high"] = {
+ ["media.class"] = "Audio/Sink",
+ ["role"] = "Speech-High",
+ },
+ ["endpoint.custom_high"] = {
+ ["media.class"] = "Audio/Sink",
+ ["role"] = "Custom-High",
+ },
+ ["endpoint.communication"] = {
+ ["media.class"] = "Audio/Sink",
+ ["role"] = "Communication",
+ },
+ ["endpoint.emergency"] = {
+ ["media.class"] = "Audio/Sink",
+ ["role"] = "Emergency",
+ },
+}
+
+policy_config.policy = {
+ ["move"] = false, -- moves session items when metadata target.node changes
+ ["follow"] = true, -- moves session items to the default device when it has changed
+
+ -- Set to 'true' to disable channel splitting & merging on nodes and enable
+ -- passthrough of audio in the same format as the format of the device.
+ -- Note that this breaks JACK support; it is generally not recommended
+ ["audio.no-dsp"] = false,
+
+ -- how much to lower the volume of lower priority streams when ducking
+ -- note that this is a linear volume modifier (not cubic as in pulseaudio)
+ ["duck.level"] = 0.2,
+
+ ["roles"] = {
+ ["Capture"] = {
+ ["alias"] = { "Multimedia", "Music", "Voice", "Capture" },
+ ["priority"] = 25,
+ ["action.default"] = "cork",
+ ["action.Capture"] = "mix",
+ ["media.class"] = "Audio/Source",
+ },
+ ["Multimedia"] = {
+ ["alias"] = { "Movie", "Music", "Game" },
+ ["priority"] = 25,
+ ["action.default"] = "mix",
+ },
+ ["Speech-Low"] = {
+ ["priority"] = 30,
+ ["action.default"] = "cork",
+ ["action.Speech-Low"] = "mix",
+ },
+ ["Custom-Low"] = {
+ ["priority"] = 35,
+ ["action.default"] = "cork",
+ ["action.Custom-Low"] = "mix",
+ },
+ ["Navigation"] = {
+ ["priority"] = 50,
+ ["action.default"] = "duck",
+ ["action.Navigation"] = "mix",
+ },
+ ["Speech-High"] = {
+ ["priority"] = 60,
+ ["action.default"] = "cork",
+ ["action.Speech-High"] = "mix",
+ },
+ ["Custom-High"] = {
+ ["priority"] = 65,
+ ["action.default"] = "cork",
+ ["action.Custom-High"] = "mix",
+ },
+ ["Communication"] = {
+ ["priority"] = 75,
+ ["action.default"] = "cork",
+ ["action.Communication"] = "mix",
+ },
+ ["Emergency"] = {
+ ["alias"] = { "Alert" },
+ ["priority"] = 99,
+ ["action.default"] = "cork",
+ ["action.Emergency"] = "mix",
+ },
+ },
+}
+
+-- Session item factories, building blocks for the session management graph
+-- Do not disable these unless you really know what you are doing
+load_module("si-node")
+load_module("si-audio-adapter")
+load_module("si-standard-link")
+load_module("si-audio-endpoint")
+
+-- API to access default nodes from scripts
+load_module("default-nodes-api")
+
+-- API to access mixer controls, needed for volume ducking
+load_module("mixer-api")
+
+-- Create endpoints statically at startup
+load_script("static-endpoints.lua", policy_config.endpoints)
+
+-- Create session items for nodes that appear in the graph
+load_script("create-item.lua", policy_config.policy)
+
+-- Link nodes to each other to make media flow in the graph
+load_script("policy-node.lua", policy_config.policy)
+
+-- Link client nodes with endpoints to make media flow in the graph
+load_script("policy-endpoint-client.lua", policy_config.policy)
+load_script("policy-endpoint-client-links.lua", policy_config.policy)
+
+-- Link endpoints with device nodes to make media flow in the graph
+load_script("policy-endpoint-device.lua", policy_config.policy)
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb
new file mode 100644
index 000000000..1a031160e
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb
@@ -0,0 +1,41 @@
+SUMMARY = "AGL configuration file for wireplumber policy"
+HOMEPAGE = "https://gitlab.freedesktop.org/gkiagia/wireplumber"
+BUGTRACKER = "https://jira.automotivelinux.org"
+AUTHOR = "Ashok Sidipotu <ashok.sidipotu@collabora.com>"
+SECTION = "multimedia"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+SRC_URI = "\
+ file://policy.lua.d \
+ file://00-functions.lua \
+ file://policy.conf \
+"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+do_install:append() {
+ config_dir="${D}${sysconfdir}/wireplumber/"
+ systemd_dir="${D}${sysconfdir}/systemd/system/pipewire.service.wants"
+
+ install -d ${config_dir}
+ install -m 0644 ${WORKDIR}/00-functions.lua ${config_dir}
+
+ # config of the policy instance
+ install -d ${config_dir}/policy.lua.d/
+ ln -s ../00-functions.lua ${config_dir}/policy.lua.d/00-functions.lua
+ install -m 0644 ${WORKDIR}/policy.lua.d/*.lua ${config_dir}/policy.lua.d/
+ install -m 0644 ${WORKDIR}/policy.conf ${config_dir}
+
+ # enable additional systemd services
+ install -d ${systemd_dir}
+ ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@policy.service
+}
+
+FILES:${PN} += "\
+ ${sysconfdir}/* \
+ ${datadir}/wireplumber/* \
+"
+CONFFILES:${PN} += "\
+ ${sysconfdir}/* \
+"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber/0001-Build-cpptoml-without-a-cmake-subproject.patch b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber/0001-Build-cpptoml-without-a-cmake-subproject.patch
deleted file mode 100644
index 726b35e74..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber/0001-Build-cpptoml-without-a-cmake-subproject.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From e5efe3d4f0abc28251dac245ce0cf4124e7e2a12 Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Thu, 5 Dec 2019 17:59:44 +0200
-Subject: [PATCH] Build cpptoml without a cmake subproject
-
-Upstream-Status: Inappropriate
----
- meson.build | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index 5a75d96..0b21377 100644
---- a/meson.build
-+++ b/meson.build
-@@ -24,9 +24,7 @@ else
- wireplumber_config_dir = join_paths(get_option('prefix'), get_option('sysconfdir'), 'wireplumber')
- endif
-
--cmake = import('cmake')
--cpptoml = cmake.subproject('cpptoml')
--cpptoml_dep = cpptoml.dependency('cpptoml')
-+cpptoml_dep = declare_dependency(include_directories: include_directories('subprojects/cpptoml'))
-
- gobject_dep = dependency('gobject-2.0')
- gmodule_dep = dependency('gmodule-2.0')
---
-2.24.0
-
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb
index 0e810b375..a04f115c3 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb
@@ -7,40 +7,79 @@ SECTION = "multimedia"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;beginline=3;md5=e8ad01a5182f2c1b3a2640e9ea268264"
-inherit meson pkgconfig gobject-introspection
+inherit meson pkgconfig systemd
-DEPENDS = "glib-2.0 glib-2.0-native pipewire"
+DEPENDS = "glib-2.0 glib-2.0-native pipewire lua"
SRC_URI = "\
git://gitlab.freedesktop.org/pipewire/wireplumber.git;protocol=https;branch=master \
- https://raw.githubusercontent.com/skystrife/cpptoml/fededad7169e538ca47e11a9ee9251bc361a9a65/include/cpptoml.h \
- file://0001-Build-cpptoml-without-a-cmake-subproject.patch \
"
-SRCREV = "0e98e4150b73d0bed9b72bf8d3eba49671962991"
-SRC_URI[sha256sum] = "3e4e1d315fa1229921c7a4297ead08775b5bb1220c18a7eac62db9ca7e79df0d"
+# v0.4.17
+SRCREV = "d3eb77b292655cef333a8f4cab4e861415bc37c2"
-PV = "0.1.90+git${SRCPV}"
+# patches to be able to compile with lower version of meson that is available in AGL.
+SRC_URI += "\
+"
+
+PV = "0.4.17"
S = "${WORKDIR}/git"
-do_configure_prepend() {
- mkdir -p ${WORKDIR}/git/subprojects/cpptoml/include
- cp -f ${WORKDIR}/cpptoml.h ${WORKDIR}/git/subprojects/cpptoml/include/
-}
+WPAPI="0.4"
+
+# use shared lua from the system instead of the static bundled one
+EXTRA_OEMESON += "-Dsystem-lua=true"
-PACKAGES =+ "${PN}-config"
+# introspection in practice is only used for generating API docs
+# API docs are available on the website and we don't need to build them
+# (plus they depend on hotdoc which is not available here)
+EXTRA_OEMESON += "-Dintrospection=disabled -Ddoc=disabled"
-FILES_${PN} += "\
- ${libdir}/wireplumber-*/* \
+PACKAGECONFIG = "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
"
-RPROVIDES_${PN} += "virtual/pipewire-sessionmanager"
-RDEPENDS_${PN} += "virtual/wireplumber-config"
+PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemd-system-service=true -Dsystemd-user-service=false,-Dsystemd=disabled -Dsystemd-system-service=false -Dsystemd-user-service=false,systemd"
-FILES_${PN}-config += "\
- ${sysconfdir}/wireplumber/* \
+do_configure:prepend() {
+ # relax meson version requirement
+ # we only need 0.54 when building with -Dsystem-lua=false
+ sed "s/meson_version : '>= 0.56.0'/meson_version : '>= 0.53.2'/" ${S}/meson.build > ${S}/tmp.build
+ mv -f ${S}/tmp.build ${S}/meson.build
+}
+
+PACKAGES =+ "\
+ lib${PN}-${WPAPI} \
+ ${PN}-config \
"
-CONFFILES_${PN}-config += "\
- ${sysconfdir}/wireplumber/* \
+
+SYSTEMD_SERVICE:${PN} = "wireplumber.service"
+FILES:${PN} = "\
+ ${bindir}/wireplumber \
+ ${bindir}/wpctl \
+ ${bindir}/wpexec \
+ ${libdir}/wireplumber-${WPAPI}/* \
+ ${datadir}/wireplumber/scripts/* \
+ ${datadir}/zsh/* \
+ ${systemd_system_unitdir}/* \
+"
+
+FILES:lib${PN}-${WPAPI} = "\
+ ${libdir}/libwireplumber-${WPAPI}.so.* \
"
-RPROVIDES_${PN}-config += "virtual/wireplumber-config"
+FILES:${PN}-config += "\
+ ${sysconfdir}/wireplumber/* \
+ ${datadir}/wireplumber/*conf \
+ ${datadir}/wireplumber/common/* \
+ ${datadir}/wireplumber/main.lua.d/* \
+ ${datadir}/wireplumber/bluetooth.lua.d/* \
+ ${datadir}/wireplumber/policy.lua.d/* \
+"
+do_install:append() {
+ rm -rf ${D}${sysconfdir}/wireplumber/
+ rm -f ${D}${datadir}/wireplumber/*conf
+ rm -rf ${D}${datadir}/wireplumber/common
+ rm -rf ${D}${datadir}/wireplumber/main.lua.d
+ rm -rf ${D}${datadir}/wireplumber/bluetooth.lua.d
+ rm -rf ${D}${datadir}/wireplumber/policy.lua.d
+}
diff --git a/meta-pipewire/recipes-security/cynagora/cynagora_%.bbappend b/meta-pipewire/recipes-security/cynagora/cynagora_%.bbappend
deleted file mode 100644
index 9395c90c7..000000000
--- a/meta-pipewire/recipes-security/cynagora/cynagora_%.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-
-do_install_append() {
- echo "System::Pipewire * * http://tizen.org/privilege/internal/dbus yes forever" >> ${D}${sysconfdir}/security/cynagora.initial
-}
-
diff --git a/meta-pipewire/recipes-security/security-manager/security-manager_%.bbappend b/meta-pipewire/recipes-security/security-manager/security-manager_%.bbappend
deleted file mode 100644
index 594494463..000000000
--- a/meta-pipewire/recipes-security/security-manager/security-manager_%.bbappend
+++ /dev/null
@@ -1,4 +0,0 @@
-
-do_install_append() {
- echo "~APP~ System::Pipewire rw" >> ${D}${datadir}/security-manager/policy/app-rules-template.smack
-}
diff --git a/meta-pipewire/scripts/run-yocto-check-layer.sh b/meta-pipewire/scripts/run-yocto-check-layer.sh
new file mode 100755
index 000000000..0e911a145
--- /dev/null
+++ b/meta-pipewire/scripts/run-yocto-check-layer.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+#set -x
+
+SCRIPTPATH="$( cd $(dirname $0) >/dev/null 2>&1 ; pwd -P )"
+echo $SCRIPTPATH
+AGLROOT="$SCRIPTPATH/../../.."
+POKYDIR="$AGLROOT/external/poky"
+TMPROOT=`mktemp -d`
+
+rm -rf ${TMPROOT}/testbuild-ycl || true
+mkdir -p ${TMPROOT}/testbuild-ycl
+cd ${TMPROOT}/testbuild-ycl
+
+source $POKYDIR/oe-init-build-env .
+
+cat << EOF >> conf/local.conf
+# just define defaults
+AGL_FEATURES ?= ""
+AGL_EXTRA_IMAGE_FSTYPES ?= ""
+
+# important settings imported from poky-agl.conf
+# we cannot import the distro config right away
+# as the initial values are poky only till the layer
+# is added in
+
+AGL_DEFAULT_DISTRO_FEATURES = "usrmerge largefile opengl wayland pam bluetooth bluez5 3g polkit"
+DISTRO_FEATURES:append = " systemd wayland pam \${AGL_DEFAULT_DISTRO_FEATURES}"
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
+VIRTUAL-RUNTIME_init_manager = "systemd"
+
+EOF
+
+yocto-check-layer --no-auto-dependency \
+ --dependency \
+ $AGLROOT/external/meta-openembedded/meta-oe \
+ -- \
+ $AGLROOT/meta-agl/meta-pipewire
+
+
+[ $? = 0 ] && rm -rf ${TMPROOT}/testbuild-ycl
+
+exit 0
diff --git a/meta-security/COPYING.MIT b/meta-security/COPYING.MIT
deleted file mode 100644
index 89de35479..000000000
--- a/meta-security/COPYING.MIT
+++ /dev/null
@@ -1,17 +0,0 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/meta-security/README.md b/meta-security/README.md
deleted file mode 100644
index 6a8024bc6..000000000
--- a/meta-security/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-This README file contains information on the contents of the
-meta-security layer.
-
-Please see the corresponding sections below for details.
-
-
-Dependencies
-============
-
-This layer depends on:
-
- URI: git://git.openembedded.org/bitbake
- branch: master
-
- URI: git://git.openembedded.org/openembedded-core
- layers: meta
- branch: master
-
- URI: git://git.yoctoproject.org/meta-security
- branch: master
-
-
-Patches
-=======
-
-Please submit any patches against the meta-security layer via gerrit
-reviews.
-
-For discussion use the discussion mailing list
-https://lists.automotivelinux.org/g/agl-dev-community
-
diff --git a/meta-security/conf/layer.conf b/meta-security/conf/layer.conf
deleted file mode 100644
index 6024d2847..000000000
--- a/meta-security/conf/layer.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-# We have a conf and classes directory, add to BBPATH
-BBPATH =. "${LAYERDIR}:"
-
-# We have a packages directory, add to BBFILES
-BBFILES += " ${LAYERDIR}/recipes-*/*/*.bb \
- ${LAYERDIR}/recipes-*/*/*.bbappend \
- "
-
-# Must prioritize our rpm recipe over the default ones.
-BBFILE_COLLECTIONS += "security-smack"
-BBFILE_PATTERN_security-smack := "^${LAYERDIR}/"
-BBFILE_PRIORITY_security-smack = "60"
-
-LAYERSERIES_COMPAT_security-smack = "dunfell"
diff --git a/meta-security/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-security/recipes-connectivity/bluez5/bluez5_%.bbappend
deleted file mode 100644
index 3767681b0..000000000
--- a/meta-security/recipes-connectivity/bluez5/bluez5_%.bbappend
+++ /dev/null
@@ -1,55 +0,0 @@
-# Recent bluez5 releases started limiting the capabilities of
-# bluetoothd. When running on a Smack-enabled system, that change has the
-# effect that bluetoothd can no longer create the input device under
-# /sys because bluez5 running with label "System" has no write
-# access to that.
-#
-# It works when running as normal root with unrestricted capabilities
-# because then CAP_MAC_OVERRIDE (a Smack-specific capability) allows
-# the process to ignore Smack rules.
-#
-# We need to ensure that bluetoothd still has that capability.
-#
-# To fix the issue, Patick and Casey(the Smack architect) had a talk
-# about it in Ostro dev mail list. Casey has some ideas about the issue:
-# "Turning off privilege is a great thing to do *so long as you don't
-# really need the privilege*. In this case you really need it.
-# The application package isn't written to account for Smack's use of
-# CAP_MAC_OVERRIDE as the mechanism for controlling this dangerous operation.
-# Yes, it would be possible to change /proc to change the Smack label on
-# that particular file, but that might open other paths for exploit.
-# I say give the program the required capability. The program maintainer
-# may well say change the kernel handling of /proc. You're stuck in the
-# middle, as both work the way they're intended and hence the system
-# doesn't work. :( There isn't a way to make this work without "loosening"
-# something."
-# Therefore, when we we run the program with CAP_MAC_OVERRIDE,
-# the whole reason for having capabilities is so the we can give a
-# process the ability to bypass one kind of check without giving it the
-# ability to bypass other, unrelated checks. A process with
-# CAP_MAC_OVERRIDE is still constrained by the file mode bits.
-# We was overly worried about granting that capability.
-# When it has no other effect than excluding a process from Smack MAC enforcement,
-# then adding to the process seems like the right solution for now.
-#
-# The conclusion from Patick and Casey is that the Smack architect give the key point
-# that this is the solution preferred.
-#
-# Because the solution is to some extend specific to the environment
-# in which connmand runs, this change is not submitted upstream
-# and it can be overridden by a distro via FIX_BLUEZ5_CAPABILITIES.
-#
-# The related patch has been submitted to upstream too.
-# upstream link: http://permalink.gmane.org/gmane.linux.bluez.kernel/67993
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI_append_with-lsm-smack = "\
- file://bluetooth.service.conf \
-"
-
-FILES_${PN} += "${systemd_unitdir}"
-
-do_install_append_with-lsm-smack() {
- install -Dm0644 ${WORKDIR}/bluetooth.service.conf ${D}${systemd_unitdir}/system/bluetooth.service.d/smack.conf
-}
diff --git a/meta-security/recipes-connectivity/bluez5/files/bluetooth.service.conf b/meta-security/recipes-connectivity/bluez5/files/bluetooth.service.conf
deleted file mode 100644
index b93ab4fee..000000000
--- a/meta-security/recipes-connectivity/bluez5/files/bluetooth.service.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Service]
-CapabilityBoundingSet=CAP_MAC_OVERRIDE
diff --git a/meta-security/recipes-connectivity/connman/connman_%.bbappend b/meta-security/recipes-connectivity/connman/connman_%.bbappend
deleted file mode 100644
index 3b010490d..000000000
--- a/meta-security/recipes-connectivity/connman/connman_%.bbappend
+++ /dev/null
@@ -1,34 +0,0 @@
-# Recent ConnMan releases started limiting the capabilities of
-# ConnMan. When running on a Smack-enabled system, that change has the
-# effect that connmand can no longer change network settings under
-# /proc/net because the Smack label of /proc is "_", and connmand
-# running with label "System" has no write access to that.
-#
-# It works when running as normal root with unrestricted capabilities
-# because then CAP_MAC_OVERRIDE (a Smack-specific capability) allows
-# the process to ignore Smack rules.
-#
-# We need to ensure that connmand still has that capability.
-#
-# The alternative would be to set up fine-grained labelling of
-# /proc with corresponding rules, which is considerably more work
-# and also may depend on kernel changes (like supporting smackfsroot
-# for procfs, which seems to be missing at the moment).
-#
-# Because the solution is to some extend specific to the environment
-# in which connmand runs, this change is not submitted upstream
-# and it can be overridden by a distro via FIX_CONNMAN_CAPABILITIES.
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
-
-SRC_URI_append_with-lsm-smack = "\
- file://connman.service.conf \
-"
-
-RDEPENDS_${PN}_append_with-lsm-smack = " smack"
-
-FILES_${PN} += "${systemd_unitdir}"
-
-do_install_append_with-lsm-smack() {
- install -Dm0644 ${WORKDIR}/connman.service.conf ${D}${systemd_unitdir}/system/connman.service.d/smack.conf
-}
diff --git a/meta-security/recipes-connectivity/connman/files/connman.service.conf b/meta-security/recipes-connectivity/connman/files/connman.service.conf
deleted file mode 100644
index 6ebbf6ad1..000000000
--- a/meta-security/recipes-connectivity/connman/files/connman.service.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-[Service]
-CapabilityBoundingSet=CAP_MAC_OVERRIDE
-ExecStartPre=+-/bin/mkdir -p /run/connman
-ExecStartPre=+-/usr/bin/chsmack -t -a System::Shared /run/connman
diff --git a/meta-security/recipes-core/base-files/base-files_%.bbappend b/meta-security/recipes-core/base-files/base-files_%.bbappend
deleted file mode 100644
index f0e340f5b..000000000
--- a/meta-security/recipes-core/base-files/base-files_%.bbappend
+++ /dev/null
@@ -1,79 +0,0 @@
-# Install default Smack rules, copied from a running Tizen IVI 3.0.
-# Corresponds to manifest file from default-access-domains in Tizen:
-# https://review.tizen.org/git?p=platform/core/security/default-ac-domains.git;a=blob;f=packaging/default-ac-domains.manifest
-do_install_append_with-lsm-smack () {
- install -d ${D}/${sysconfdir}/smack/accesses.d
- cat >${D}/${sysconfdir}/smack/accesses.d/default-access-domains <<EOF
-System _ -----l
-System System::Log rwxa--
-System System::Run rwxat-
-System System::Shared rwxat-
-System ^ rwxa--
-_ System::Run rwxat-
-_ System -wx---
-^ System::Log rwxa--
-^ System::Run rwxat-
-^ System rwxa--
-EOF
- chmod 0644 ${D}/${sysconfdir}/smack/accesses.d/default-access-domains
-
- install -d ${D}/${libdir}/tmpfiles.d
- cat >${D}/${libdir}/tmpfiles.d/packet-forwarding.conf <<EOF
-t /proc/sys/net/ipv4/conf/all/forwarding - - - - security.SMACK64=*
-t /proc/sys/net/ipv6/conf/all/forwarding - - - - security.SMACK64=*
-t /proc/sys/net/ipv4/conf/default/forwarding - - - - security.SMACK64=*
-t /proc/sys/net/ipv6/conf/default/forwarding - - - - security.SMACK64=*
-EOF
- chmod 0644 ${D}/${libdir}/tmpfiles.d/packet-forwarding.conf
-
- install -d ${D}/${base_libdir}/udev/rules.d
- cat >${D}/${base_libdir}/udev/rules.d/85-netdev-ipconf-smacklabel.rules <<EOF
-SUBSYSTEM=="net", ENV{ID_NET_NAME}=="", RUN+="/bin/sh -c '/usr/bin/chsmack -a \* /proc/sys/net/ipv4/conf/%k/*'", RUN+="/bin/sh -c '/usr/bin/chsmack -a \* /proc/sys/net/ipv6/conf/%k/*'"
-
-SUBSYSTEM=="net", ENV{ID_NET_NAME}!="", RUN+="/bin/sh -c '/usr/bin/chsmack -a \* /proc/sys/net/ipv4/conf/\$env{ID_NET_NAME}/*'", RUN+="/bin/sh -c '/usr/bin/chsmack -a \* /proc/sys/net/ipv6/conf/\$env{ID_NET_NAME}/*'"
-EOF
- chmod 0644 ${D}/${base_libdir}/udev/rules.d/85-netdev-ipconf-smacklabel.rules
-}
-
-# Do not rely on an rpm with manifest support. Apparently that approach
-# will no longer be used in Tizen 3.0. Instead set special Smack attributes
-# via postinst. This is much easier to use with bitbake, too:
-# - no need to maintain a patched rpm
-# - works for directories which are not packaged by default when empty
-RDEPENDS_${PN}_append_with-lsm-smack = " smack"
-DEPENDS_append_with-lsm-smack = " smack-native"
-pkg_postinst_${PN}_with-lsm-smack() {
- #!/bin/sh -e
-
- # https://review.tizen.org/gerrit/gitweb?p=platform/upstream/filesystem.git;a=blob;f=packaging/filesystem.manifest:
- # <filesystem path="/etc" label="System::Shared" type="transmutable" />
- install -d $D${sysconfdir}
- # This has no effect on files installed into /etc during image construction
- # because pseudo does not know the special semantic of SMACK::TRANSMUTE.
- # To avoid having different xattrs on files inside /etc when pre-installed
- # in an image vs. installed on a device, the xattr-images.bbclass has
- # a workaround for this deficiency in pseudo.
- chsmack -t $D${sysconfdir}
- chsmack -a 'System::Shared' $D${sysconfdir}
-
- # Same for /media. Any daemon running as "System" will get write access
- # to everything.
- install -d $D/media
- chsmack -t $D/media
- chsmack -a 'System::Shared' $D/media
-
- # Same for /var. Any daemon running as "System" will get write access
- # to everything.
- install -d $D${localstatedir}
- chsmack -t $D${localstatedir}
- chsmack -a 'System::Shared' $D${localstatedir}
-
- # <filesystem path="/tmp" label="*" />
- mkdir -p $D/tmp
- chsmack -a '*' $D/tmp
-
- # <filesystem path="/var/log" label="System::Log" type="transmutable" />
- # <filesystem path="/var/tmp" label="*" />
- # These are in a file system mounted by systemd. We patch the systemd service
- # to set these attributes.
-}
diff --git a/meta-security/recipes-core/coreutils/coreutils_%.bbappend b/meta-security/recipes-core/coreutils/coreutils_%.bbappend
deleted file mode 100644
index 1b9b722ec..000000000
--- a/meta-security/recipes-core/coreutils/coreutils_%.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-# Smack patches are included in coreutils v8.22, we just need to enable them.
-# The default is not deterministic (enabled if libsmack found), so disable
-# explicitly otherwise.
-EXTRA_OECONF_SMACK_class-target = "--disable-libsmack"
-EXTRA_OECONF_SMACK_with-lsm-smack_class-target = "--enable-libsmack"
-EXTRA_OECONF_append_class-target = " ${EXTRA_OECONF_SMACK}"
-DEPENDS_append_with-lsm-smack_class-target = " smack"
diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch
deleted file mode 100644
index 55cedb9c7..000000000
--- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0001-Integration-of-Cynara-asynchronous-security-checks.patch
+++ /dev/null
@@ -1,2309 +0,0 @@
-From ea4b650366261e4257e4b0fb95e7f48e30ef36f0 Mon Sep 17 00:00:00 2001
-From: Jacek Bukarewicz <j.bukarewicz@samsung.com>
-Date: Thu, 27 Nov 2014 18:11:05 +0100
-Subject: [PATCH 1/8] Integration of Cynara asynchronous security checks
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This commit introduces basic framework for asynchronous policy
-checks and Cynara integration code. Functions for checking security
-policy can now return third value - BUS_RESULT_LATER denoting check
-result unavailability. Whenever policy checker cannot decide on the
-result of the check it is supposed to allocate DeferredMessage structure
-that will be passed to the upper layers which can decide what should be
-done in such situation.
-Proper handling of such case will be implemented in subsequent commits.
-Currently such return value results in message denial.
-
-Cherry picked from 4dcfb02f17247ff9de966b62182cd2e08f301238
-by José Bollo.
-
-Updated for dbus 1.10.20 by Scott Murray and José Bollo
-Updated for dbus 1.12.16 by José Bollo
-
-Change-Id: I9bcbce34577e5dc2a3cecf6233a0a2b0e43e1108
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
- bus/Makefile.am | 6 +
- bus/activation.c | 5 +-
- bus/bus.c | 124 ++++--
- bus/bus.h | 22 +-
- bus/check.c | 217 ++++++++++
- bus/check.h | 68 ++++
- bus/config-parser-common.c | 6 +
- bus/config-parser-common.h | 1 +
- bus/config-parser-trivial.c | 2 +
- bus/config-parser.c | 72 +++-
- bus/connection.c | 57 ++-
- bus/connection.h | 4 +
- bus/cynara.c | 374 ++++++++++++++++++
- bus/cynara.h | 37 ++
- bus/dispatch.c | 46 ++-
- bus/driver.h | 2 +
- bus/policy.c | 195 ++++++---
- bus/policy.h | 29 +-
- configure.ac | 12 +
- test/Makefile.am | 1 +
- .../data/invalid-config-files/badcheck-1.conf | 9 +
- .../data/invalid-config-files/badcheck-2.conf | 9 +
- test/data/valid-config-files/check-1.conf | 9 +
- .../debug-check-some.conf.in | 18 +
- 24 files changed, 1181 insertions(+), 144 deletions(-)
- create mode 100644 bus/check.c
- create mode 100644 bus/check.h
- create mode 100644 bus/cynara.c
- create mode 100644 bus/cynara.h
- create mode 100644 test/data/invalid-config-files/badcheck-1.conf
- create mode 100644 test/data/invalid-config-files/badcheck-2.conf
- create mode 100644 test/data/valid-config-files/check-1.conf
- create mode 100644 test/data/valid-config-files/debug-check-some.conf.in
-
-diff --git a/bus/Makefile.am b/bus/Makefile.am
-index c917063..2a8a72c 100644
---- a/bus/Makefile.am
-+++ b/bus/Makefile.am
-@@ -13,6 +13,7 @@ DBUS_BUS_LIBS = \
- $(THREAD_LIBS) \
- $(ADT_LIBS) \
- $(NETWORK_libs) \
-+ $(CYNARA_LIBS) \
- $(NULL)
-
- DBUS_LAUNCHER_LIBS = \
-@@ -30,6 +31,7 @@ AM_CPPFLAGS = \
- $(APPARMOR_CFLAGS) \
- -DDBUS_SYSTEM_CONFIG_FILE=\""$(dbusdatadir)/system.conf"\" \
- -DDBUS_COMPILATION \
-+ $(CYNARA_CFLAGS) \
- $(NULL)
-
- # if assertions are enabled, improve backtraces
-@@ -90,6 +92,8 @@ BUS_SOURCES= \
- audit.h \
- bus.c \
- bus.h \
-+ check.c \
-+ check.h \
- config-loader-expat.c \
- config-parser.c \
- config-parser.h \
-@@ -97,6 +101,8 @@ BUS_SOURCES= \
- config-parser-common.h \
- connection.c \
- connection.h \
-+ cynara.c \
-+ cynara.h \
- desktop-file.c \
- desktop-file.h \
- $(DIR_WATCH_SOURCE) \
-diff --git a/bus/activation.c b/bus/activation.c
-index 99404b9..f9c6c62 100644
---- a/bus/activation.c
-+++ b/bus/activation.c
-@@ -1789,14 +1789,15 @@ bus_activation_activate_service (BusActivation *activation,
-
- if (auto_activation &&
- entry != NULL &&
-- !bus_context_check_security_policy (activation->context,
-+ BUS_RESULT_TRUE != bus_context_check_security_policy (activation->context,
- transaction,
- connection, /* sender */
- NULL, /* addressed recipient */
- NULL, /* proposed recipient */
- activation_message,
- entry,
-- error))
-+ error,
-+ NULL))
- {
- _DBUS_ASSERT_ERROR_IS_SET (error);
- _dbus_verbose ("activation not authorized: %s: %s\n",
-diff --git a/bus/bus.c b/bus/bus.c
-index 2ad8e78..6fc45d0 100644
---- a/bus/bus.c
-+++ b/bus/bus.c
-@@ -38,6 +38,7 @@
- #include "apparmor.h"
- #include "audit.h"
- #include "dir-watch.h"
-+#include "check.h"
- #include <dbus/dbus-auth.h>
- #include <dbus/dbus-list.h>
- #include <dbus/dbus-hash.h>
-@@ -67,6 +68,7 @@ struct BusContext
- BusRegistry *registry;
- BusPolicy *policy;
- BusMatchmaker *matchmaker;
-+ BusCheck *check;
- BusLimits limits;
- DBusRLimit *initial_fd_limit;
- unsigned int fork : 1;
-@@ -1003,6 +1005,10 @@ bus_context_new (const DBusString *config_file,
- parser = NULL;
- }
-
-+ context->check = bus_check_new(context, error);
-+ if (context->check == NULL)
-+ goto failed;
-+
- dbus_server_free_data_slot (&server_data_slot);
-
- return context;
-@@ -1127,6 +1133,12 @@ bus_context_unref (BusContext *context)
-
- bus_context_shutdown (context);
-
-+ if (context->check)
-+ {
-+ bus_check_unref(context->check);
-+ context->check = NULL;
-+ }
-+
- if (context->connections)
- {
- bus_connections_unref (context->connections);
-@@ -1256,6 +1268,12 @@ bus_context_get_loop (BusContext *context)
- return context->loop;
- }
-
-+BusCheck*
-+bus_context_get_check (BusContext *context)
-+{
-+ return context->check;
-+}
-+
- dbus_bool_t
- bus_context_allow_unix_user (BusContext *context,
- unsigned long uid)
-@@ -1451,6 +1469,7 @@ complain_about_message (BusContext *context,
- DBusConnection *proposed_recipient,
- dbus_bool_t requested_reply,
- dbus_bool_t log,
-+ const char *privilege,
- DBusError *error)
- {
- DBusError stack_error = DBUS_ERROR_INIT;
-@@ -1480,7 +1499,8 @@ complain_about_message (BusContext *context,
- dbus_set_error (&stack_error, error_name,
- "%s, %d matched rules; type=\"%s\", sender=\"%s\" (%s) "
- "interface=\"%s\" member=\"%s\" error name=\"%s\" "
-- "requested_reply=\"%d\" destination=\"%s\" (%s)",
-+ "requested_reply=\"%d\" destination=\"%s\" (%s) "
-+ "privilege=\"%s\"",
- complaint,
- matched_rules,
- dbus_message_type_to_string (dbus_message_get_type (message)),
-@@ -1491,7 +1511,8 @@ complain_about_message (BusContext *context,
- nonnull (dbus_message_get_error_name (message), "(unset)"),
- requested_reply,
- nonnull (dbus_message_get_destination (message), DBUS_SERVICE_DBUS),
-- proposed_recipient_loginfo);
-+ proposed_recipient_loginfo,
-+ nonnull (privilege, "(n/a)"));
-
- /* If we hit OOM while setting the error, this will syslog "out of memory"
- * which is itself an indication that something is seriously wrong */
-@@ -1519,7 +1540,7 @@ complain_about_message (BusContext *context,
- * NULL for addressed_recipient may mean the bus driver, or may mean
- * no destination was specified in the message (e.g. a signal).
- */
--dbus_bool_t
-+BusResult
- bus_context_check_security_policy (BusContext *context,
- BusTransaction *transaction,
- DBusConnection *sender,
-@@ -1527,7 +1548,8 @@ bus_context_check_security_policy (BusContext *context,
- DBusConnection *proposed_recipient,
- DBusMessage *message,
- BusActivationEntry *activation_entry,
-- DBusError *error)
-+ DBusError *error,
-+ BusDeferredMessage **deferred_message)
- {
- const char *src, *dest;
- BusClientPolicy *sender_policy;
-@@ -1536,6 +1558,7 @@ bus_context_check_security_policy (BusContext *context,
- dbus_bool_t log;
- int type;
- dbus_bool_t requested_reply;
-+ const char *privilege;
-
- type = dbus_message_get_type (message);
- src = dbus_message_get_sender (message);
-@@ -1565,7 +1588,7 @@ bus_context_check_security_policy (BusContext *context,
- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
- "Message bus will not accept messages of unknown type\n");
-
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- requested_reply = FALSE;
-@@ -1595,7 +1618,7 @@ bus_context_check_security_policy (BusContext *context,
- if (dbus_error_is_set (&error2))
- {
- dbus_move_error (&error2, error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- }
- }
-@@ -1624,11 +1647,11 @@ bus_context_check_security_policy (BusContext *context,
- complain_about_message (context, DBUS_ERROR_ACCESS_DENIED,
- "An SELinux policy prevents this sender from sending this "
- "message to this recipient",
-- 0, message, sender, proposed_recipient, FALSE, FALSE, error);
-+ 0, message, sender, proposed_recipient, FALSE, FALSE, NULL, error);
- _dbus_verbose ("SELinux security check denying send to service\n");
- }
-
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- /* next verify AppArmor access controls. If allowed then
-@@ -1646,7 +1669,7 @@ bus_context_check_security_policy (BusContext *context,
- src ? src : DBUS_SERVICE_DBUS,
- activation_entry,
- error))
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- if (!bus_connection_is_active (sender))
- {
-@@ -1660,7 +1683,7 @@ bus_context_check_security_policy (BusContext *context,
- {
- _dbus_verbose ("security check allowing %s message\n",
- "Hello");
-- return TRUE;
-+ return BUS_RESULT_TRUE;
- }
- else
- {
-@@ -1671,7 +1694,7 @@ bus_context_check_security_policy (BusContext *context,
- "Client tried to send a message other than %s without being registered",
- "Hello");
-
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- }
- }
-@@ -1720,20 +1743,29 @@ bus_context_check_security_policy (BusContext *context,
- (proposed_recipient == NULL && recipient_policy == NULL));
-
- log = FALSE;
-- if (sender_policy &&
-- !bus_client_policy_check_can_send (sender_policy,
-- context->registry,
-- requested_reply,
-- proposed_recipient,
-- message, &toggles, &log))
-- {
-- complain_about_message (context, DBUS_ERROR_ACCESS_DENIED,
-- "Rejected send message", toggles,
-- message, sender, proposed_recipient, requested_reply,
-- (addressed_recipient == proposed_recipient), error);
-- _dbus_verbose ("security policy disallowing message due to sender policy\n");
-- return FALSE;
-- }
-+ if (sender_policy)
-+ {
-+ BusResult res = bus_client_policy_check_can_send (sender,
-+ sender_policy,
-+ context->registry,
-+ requested_reply,
-+ addressed_recipient,
-+ proposed_recipient,
-+ message, &toggles, &log, &privilege,
-+ deferred_message);
-+ if (res == BUS_RESULT_FALSE)
-+ {
-+ complain_about_message (context, DBUS_ERROR_ACCESS_DENIED,
-+ "Rejected send message", toggles,
-+ message, sender, proposed_recipient, requested_reply,
-+ (addressed_recipient == proposed_recipient), privilege,
-+ error);
-+ _dbus_verbose ("security policy disallowing message due to sender policy\n");
-+ return BUS_RESULT_FALSE;
-+ }
-+ else if (res == BUS_RESULT_LATER)
-+ return BUS_RESULT_LATER;
-+ }
-
- if (log)
- {
-@@ -1742,23 +1774,29 @@ bus_context_check_security_policy (BusContext *context,
- complain_about_message (context, DBUS_ERROR_ACCESS_DENIED,
- "Would reject message", toggles,
- message, sender, proposed_recipient, requested_reply,
-- TRUE, NULL);
-+ TRUE, privilege, NULL);
- }
-
-- if (recipient_policy &&
-- !bus_client_policy_check_can_receive (recipient_policy,
-- context->registry,
-- requested_reply,
-- sender,
-- addressed_recipient, proposed_recipient,
-- message, &toggles))
-+ if (recipient_policy)
- {
-- complain_about_message (context, DBUS_ERROR_ACCESS_DENIED,
-- "Rejected receive message", toggles,
-- message, sender, proposed_recipient, requested_reply,
-- (addressed_recipient == proposed_recipient), error);
-- _dbus_verbose ("security policy disallowing message due to recipient policy\n");
-- return FALSE;
-+ BusResult res;
-+ res = bus_client_policy_check_can_receive (recipient_policy,
-+ context->registry,
-+ requested_reply,
-+ sender,
-+ addressed_recipient, proposed_recipient,
-+ message, &toggles, &privilege, deferred_message);
-+ if (res == BUS_RESULT_FALSE)
-+ {
-+ complain_about_message(context, DBUS_ERROR_ACCESS_DENIED, "Rejected receive message",
-+ toggles, message, sender, proposed_recipient, requested_reply,
-+ (addressed_recipient == proposed_recipient), privilege, error);
-+ _dbus_verbose(
-+ "security policy disallowing message due to recipient policy\n");
-+ return BUS_RESULT_FALSE;
-+ }
-+ else if (res == BUS_RESULT_LATER)
-+ return BUS_RESULT_LATER;
- }
-
- /* See if limits on size have been exceeded */
-@@ -1768,10 +1806,10 @@ bus_context_check_security_policy (BusContext *context,
- {
- complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED,
- "Rejected: destination has a full message queue",
-- 0, message, sender, proposed_recipient, requested_reply, TRUE,
-+ 0, message, sender, proposed_recipient, requested_reply, TRUE, NULL,
- error);
- _dbus_verbose ("security policy disallowing message due to full message queue\n");
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- /* Record that we will allow a reply here in the future (don't
-@@ -1792,11 +1830,11 @@ bus_context_check_security_policy (BusContext *context,
- message, error))
- {
- _dbus_verbose ("Failed to record reply expectation or problem with the message expecting a reply\n");
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- _dbus_verbose ("security policy allowing message\n");
-- return TRUE;
-+ return BUS_RESULT_TRUE;
- }
-
- void
-diff --git a/bus/bus.h b/bus/bus.h
-index 2e0de82..82c32c8 100644
---- a/bus/bus.h
-+++ b/bus/bus.h
-@@ -45,6 +45,22 @@ typedef struct BusTransaction BusTransaction;
- typedef struct BusMatchmaker BusMatchmaker;
- typedef struct BusMatchRule BusMatchRule;
- typedef struct BusActivationEntry BusActivationEntry;
-+typedef struct BusCheck BusCheck;
-+typedef struct BusDeferredMessage BusDeferredMessage;
-+typedef struct BusCynara BusCynara;
-+
-+/**
-+ * BusResult is defined as a pointer to a dummy structure to allow detection of type mismatches.
-+ * The disadvantage of such solution is that now BusResult variables cannot be used in switch
-+ * statement.
-+ * Additionally, BUS_RESULT_TRUE is defined as 0 instead of 1 to help detect type mismatches
-+ * at runtime.
-+ */
-+typedef const struct BusResultStruct { int dummy; } *BusResult;
-+
-+static const BusResult BUS_RESULT_TRUE = (BusResult)0x0;
-+static const BusResult BUS_RESULT_FALSE = (BusResult)0x1;
-+static const BusResult BUS_RESULT_LATER = (BusResult)0x2;
-
- typedef struct
- {
-@@ -101,6 +117,7 @@ BusConnections* bus_context_get_connections (BusContext
- BusActivation* bus_context_get_activation (BusContext *context);
- BusMatchmaker* bus_context_get_matchmaker (BusContext *context);
- DBusLoop* bus_context_get_loop (BusContext *context);
-+BusCheck * bus_context_get_check (BusContext *context);
- dbus_bool_t bus_context_allow_unix_user (BusContext *context,
- unsigned long uid);
- dbus_bool_t bus_context_allow_windows_user (BusContext *context,
-@@ -136,14 +153,15 @@ void bus_context_log_and_set_error (BusContext
- const char *name,
- const char *msg,
- ...) _DBUS_GNUC_PRINTF (5, 6);
--dbus_bool_t bus_context_check_security_policy (BusContext *context,
-+BusResult bus_context_check_security_policy (BusContext *context,
- BusTransaction *transaction,
- DBusConnection *sender,
- DBusConnection *addressed_recipient,
- DBusConnection *proposed_recipient,
- DBusMessage *message,
- BusActivationEntry *activation_entry,
-- DBusError *error);
-+ DBusError *error,
-+ BusDeferredMessage **deferred_message);
- void bus_context_check_all_watches (BusContext *context);
-
- #endif /* BUS_BUS_H */
-diff --git a/bus/check.c b/bus/check.c
-new file mode 100644
-index 0000000..5b72d31
---- /dev/null
-+++ b/bus/check.c
-@@ -0,0 +1,217 @@
-+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-+/* check.c Bus security policy runtime check
-+ *
-+ * Copyright (C) 2014 Intel, Inc.
-+ * Copyright (c) 2014 Samsung Electronics, Ltd.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "check.h"
-+#include "connection.h"
-+#include "dispatch.h"
-+#include "cynara.h"
-+#include "utils.h"
-+#include <dbus/dbus-connection-internal.h>
-+#include <dbus/dbus-message-internal.h>
-+#include <dbus/dbus-internals.h>
-+
-+
-+typedef struct BusCheck
-+{
-+ int refcount;
-+
-+ BusContext *context;
-+ BusCynara *cynara;
-+} BusCheck;
-+
-+typedef struct BusDeferredMessage
-+{
-+ int refcount;
-+
-+ DBusMessage *message;
-+ DBusConnection *sender;
-+ DBusConnection *proposed_recipient;
-+ DBusConnection *addressed_recipient;
-+ dbus_bool_t full_dispatch;
-+ BusDeferredMessageStatus status;
-+ BusResult response;
-+ BusCheckResponseFunc response_callback;
-+} BusDeferredMessage;
-+
-+BusCheck *
-+bus_check_new (BusContext *context, DBusError *error)
-+{
-+ BusCheck *check;
-+
-+ check = dbus_new(BusCheck, 1);
-+ if (check == NULL)
-+ {
-+ BUS_SET_OOM(error);
-+ return NULL;
-+ }
-+
-+ check->refcount = 1;
-+ check->context = context;
-+ check->cynara = bus_cynara_new(check, error);
-+ if (dbus_error_is_set(error))
-+ {
-+ dbus_free(check);
-+ return NULL;
-+ }
-+
-+ return check;
-+}
-+
-+BusCheck *
-+bus_check_ref (BusCheck *check)
-+{
-+ _dbus_assert (check->refcount > 0);
-+ check->refcount += 1;
-+
-+ return check;
-+}
-+
-+void
-+bus_check_unref (BusCheck *check)
-+{
-+ _dbus_assert (check->refcount > 0);
-+
-+ check->refcount -= 1;
-+
-+ if (check->refcount == 0)
-+ {
-+ bus_cynara_unref(check->cynara);
-+ dbus_free(check);
-+ }
-+}
-+
-+BusContext *
-+bus_check_get_context (BusCheck *check)
-+{
-+ return check->context;
-+}
-+
-+BusCynara *
-+bus_check_get_cynara (BusCheck *check)
-+{
-+ return check->cynara;
-+}
-+
-+BusResult
-+bus_check_privilege (BusCheck *check,
-+ DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ const char *privilege,
-+ BusDeferredMessageStatus check_type,
-+ BusDeferredMessage **deferred_message)
-+{
-+ BusResult result = BUS_RESULT_FALSE;
-+#ifdef DBUS_ENABLE_CYNARA
-+ BusCynara *cynara;
-+#endif
-+ DBusConnection *connection;
-+
-+ connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender;
-+
-+ if (!dbus_connection_get_is_connected(connection))
-+ {
-+ return BUS_RESULT_FALSE;
-+ }
-+
-+ /* ask policy checkers */
-+#ifdef DBUS_ENABLE_CYNARA
-+ cynara = bus_check_get_cynara(check);
-+ result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient,
-+ proposed_recipient, privilege, check_type, deferred_message);
-+#endif
-+
-+ if (result == BUS_RESULT_LATER && deferred_message != NULL)
-+ {
-+ (*deferred_message)->status |= check_type;
-+ }
-+ return result;
-+}
-+
-+BusDeferredMessage *bus_deferred_message_new (DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ BusResult response)
-+{
-+ BusDeferredMessage *deferred_message;
-+
-+ deferred_message = dbus_new(BusDeferredMessage, 1);
-+ if (deferred_message == NULL)
-+ {
-+ return NULL;
-+ }
-+
-+ deferred_message->refcount = 1;
-+ deferred_message->sender = sender != NULL ? dbus_connection_ref(sender) : NULL;
-+ deferred_message->addressed_recipient = addressed_recipient != NULL ? dbus_connection_ref(addressed_recipient) : NULL;
-+ deferred_message->proposed_recipient = proposed_recipient != NULL ? dbus_connection_ref(proposed_recipient) : NULL;
-+ deferred_message->message = dbus_message_ref(message);
-+ deferred_message->response = response;
-+ deferred_message->status = 0;
-+ deferred_message->full_dispatch = FALSE;
-+ deferred_message->response_callback = NULL;
-+
-+ return deferred_message;
-+}
-+
-+BusDeferredMessage *
-+bus_deferred_message_ref (BusDeferredMessage *deferred_message)
-+{
-+ _dbus_assert (deferred_message->refcount > 0);
-+ deferred_message->refcount += 1;
-+ return deferred_message;
-+}
-+
-+void
-+bus_deferred_message_unref (BusDeferredMessage *deferred_message)
-+{
-+ _dbus_assert (deferred_message->refcount > 0);
-+
-+ deferred_message->refcount -= 1;
-+
-+ if (deferred_message->refcount == 0)
-+ {
-+ dbus_message_unref(deferred_message->message);
-+ if (deferred_message->sender != NULL)
-+ dbus_connection_unref(deferred_message->sender);
-+ if (deferred_message->addressed_recipient != NULL)
-+ dbus_connection_unref(deferred_message->addressed_recipient);
-+ if (deferred_message->proposed_recipient != NULL)
-+ dbus_connection_unref(deferred_message->proposed_recipient);
-+ dbus_free(deferred_message);
-+ }
-+}
-+
-+void
-+bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
-+ BusResult result)
-+{
-+ if (deferred_message->response_callback != NULL)
-+ {
-+ deferred_message->response_callback(deferred_message, result);
-+ }
-+}
-diff --git a/bus/check.h b/bus/check.h
-new file mode 100644
-index 0000000..c3fcaf9
---- /dev/null
-+++ b/bus/check.h
-@@ -0,0 +1,68 @@
-+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-+/* check.h Bus security policy runtime check
-+ *
-+ * Copyright (C) 2014 Intel, Inc.
-+ * Copyright (c) 2014 Samsung Electronics, Ltd.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ *
-+ */
-+
-+#ifndef BUS_CHECK_H
-+#define BUS_CHECK_H
-+
-+#include "bus.h"
-+#include "policy.h"
-+
-+
-+typedef void (*BusCheckResponseFunc) (BusDeferredMessage *message,
-+ BusResult result);
-+
-+typedef enum {
-+ BUS_DEFERRED_MESSAGE_CHECK_SEND = 1 << 0,
-+ BUS_DEFERRED_MESSAGE_CHECK_RECEIVE = 1 << 1,
-+ BUS_DEFERRED_MESSAGE_CHECK_OWN = 1 << 2,
-+} BusDeferredMessageStatus;
-+
-+
-+BusCheck *bus_check_new (BusContext *context,
-+ DBusError *error);
-+BusCheck *bus_check_ref (BusCheck *check);
-+void bus_check_unref (BusCheck *check);
-+
-+BusContext *bus_check_get_context (BusCheck *check);
-+BusCynara *bus_check_get_cynara (BusCheck *check);
-+BusResult bus_check_privilege (BusCheck *check,
-+ DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ const char *privilege,
-+ BusDeferredMessageStatus check_type,
-+ BusDeferredMessage **deferred_message);
-+
-+BusDeferredMessage *bus_deferred_message_new (DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ BusResult response);
-+
-+BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage *deferred_message);
-+void bus_deferred_message_unref (BusDeferredMessage *deferred_message);
-+void bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
-+ BusResult result);
-+#endif /* BUS_CHECK_H */
-diff --git a/bus/config-parser-common.c b/bus/config-parser-common.c
-index c1c4191..e2f253d 100644
---- a/bus/config-parser-common.c
-+++ b/bus/config-parser-common.c
-@@ -75,6 +75,10 @@ bus_config_parser_element_name_to_type (const char *name)
- {
- return ELEMENT_DENY;
- }
-+ else if (strcmp (name, "check") == 0)
-+ {
-+ return ELEMENT_CHECK;
-+ }
- else if (strcmp (name, "servicehelper") == 0)
- {
- return ELEMENT_SERVICEHELPER;
-@@ -159,6 +163,8 @@ bus_config_parser_element_type_to_name (ElementType type)
- return "allow";
- case ELEMENT_DENY:
- return "deny";
-+ case ELEMENT_CHECK:
-+ return "check";
- case ELEMENT_FORK:
- return "fork";
- case ELEMENT_PIDFILE:
-diff --git a/bus/config-parser-common.h b/bus/config-parser-common.h
-index 382a014..9e026d1 100644
---- a/bus/config-parser-common.h
-+++ b/bus/config-parser-common.h
-@@ -36,6 +36,7 @@ typedef enum
- ELEMENT_LIMIT,
- ELEMENT_ALLOW,
- ELEMENT_DENY,
-+ ELEMENT_CHECK,
- ELEMENT_FORK,
- ELEMENT_PIDFILE,
- ELEMENT_SERVICEDIR,
-diff --git a/bus/config-parser-trivial.c b/bus/config-parser-trivial.c
-index dd65c6d..23dedb4 100644
---- a/bus/config-parser-trivial.c
-+++ b/bus/config-parser-trivial.c
-@@ -194,6 +194,7 @@ bus_config_parser_start_element (BusConfigParser *parser,
- case ELEMENT_POLICY:
- case ELEMENT_LIMIT:
- case ELEMENT_ALLOW:
-+ case ELEMENT_CHECK:
- case ELEMENT_DENY:
- case ELEMENT_FORK:
- case ELEMENT_PIDFILE:
-@@ -316,6 +317,7 @@ bus_config_parser_content (BusConfigParser *parser,
- case ELEMENT_POLICY:
- case ELEMENT_LIMIT:
- case ELEMENT_ALLOW:
-+ case ELEMENT_CHECK:
- case ELEMENT_DENY:
- case ELEMENT_FORK:
- case ELEMENT_PIDFILE:
-diff --git a/bus/config-parser.c b/bus/config-parser.c
-index be27d38..7f91469 100644
---- a/bus/config-parser.c
-+++ b/bus/config-parser.c
-@@ -1318,7 +1318,7 @@ append_rule_from_element (BusConfigParser *parser,
- const char *element_name,
- const char **attribute_names,
- const char **attribute_values,
-- dbus_bool_t allow,
-+ BusPolicyRuleAccess access,
- DBusError *error)
- {
- const char *log;
-@@ -1360,6 +1360,7 @@ append_rule_from_element (BusConfigParser *parser,
- const char *own_prefix;
- const char *user;
- const char *group;
-+ const char *privilege;
-
- BusPolicyRule *rule;
-
-@@ -1390,6 +1391,7 @@ append_rule_from_element (BusConfigParser *parser,
- "user", &user,
- "group", &group,
- "log", &log,
-+ "privilege", &privilege,
- NULL))
- return FALSE;
-
-@@ -1422,6 +1424,7 @@ append_rule_from_element (BusConfigParser *parser,
-
- if (!(any_send_attribute ||
- any_receive_attribute ||
-+ privilege ||
- own || own_prefix || user || group))
- {
- dbus_set_error (error, DBUS_ERROR_FAILED,
-@@ -1438,7 +1441,30 @@ append_rule_from_element (BusConfigParser *parser,
- element_name);
- return FALSE;
- }
--
-+
-+ if (access == BUS_POLICY_RULE_ACCESS_CHECK)
-+ {
-+ if (privilege == NULL || !*privilege)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "On element <%s>, you must specify the privilege to be checked.",
-+ element_name);
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ if (privilege != NULL && *privilege)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "On element <%s>, privilege %s is used outside of a check rule.",
-+ element_name, privilege);
-+ return FALSE;
-+ }
-+ else
-+ privilege = NULL; /* replace (potentially) empty string with NULL pointer, it wouldn't be used anyway */
-+ }
-+
- /* Allowed combinations of elements are:
- *
- * base, must be all send or all receive:
-@@ -1589,7 +1615,7 @@ append_rule_from_element (BusConfigParser *parser,
- error))
- return FALSE;
-
-- rule = bus_policy_rule_new (BUS_POLICY_RULE_SEND, allow);
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_SEND, access);
- if (rule == NULL)
- goto nomem;
-
-@@ -1694,7 +1720,7 @@ append_rule_from_element (BusConfigParser *parser,
- error))
- return FALSE;
-
-- rule = bus_policy_rule_new (BUS_POLICY_RULE_RECEIVE, allow);
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_RECEIVE, access);
- if (rule == NULL)
- goto nomem;
-
-@@ -1726,7 +1752,7 @@ append_rule_from_element (BusConfigParser *parser,
- }
- else if (own || own_prefix)
- {
-- rule = bus_policy_rule_new (BUS_POLICY_RULE_OWN, allow);
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_OWN, access);
- if (rule == NULL)
- goto nomem;
-
-@@ -1752,7 +1778,7 @@ append_rule_from_element (BusConfigParser *parser,
- {
- if (IS_WILDCARD (user))
- {
-- rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, allow);
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, access);
- if (rule == NULL)
- goto nomem;
-
-@@ -1767,7 +1793,7 @@ append_rule_from_element (BusConfigParser *parser,
-
- if (_dbus_parse_unix_user_from_config (&username, &uid))
- {
-- rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, allow);
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, access);
- if (rule == NULL)
- goto nomem;
-
-@@ -1784,7 +1810,7 @@ append_rule_from_element (BusConfigParser *parser,
- {
- if (IS_WILDCARD (group))
- {
-- rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, allow);
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, access);
- if (rule == NULL)
- goto nomem;
-
-@@ -1799,7 +1825,7 @@ append_rule_from_element (BusConfigParser *parser,
-
- if (_dbus_parse_unix_group_from_config (&groupname, &gid))
- {
-- rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, allow);
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, access);
- if (rule == NULL)
- goto nomem;
-
-@@ -1823,6 +1849,10 @@ append_rule_from_element (BusConfigParser *parser,
- _dbus_assert (pe != NULL);
- _dbus_assert (pe->type == ELEMENT_POLICY);
-
-+ rule->privilege = _dbus_strdup (privilege);
-+ if (privilege && !rule->privilege)
-+ goto nomem;
-+
- switch (pe->d.policy.type)
- {
- case POLICY_IGNORED:
-@@ -1898,7 +1928,7 @@ start_policy_child (BusConfigParser *parser,
- {
- if (!append_rule_from_element (parser, element_name,
- attribute_names, attribute_values,
-- TRUE, error))
-+ BUS_POLICY_RULE_ACCESS_ALLOW, error))
- return FALSE;
-
- if (push_element (parser, ELEMENT_ALLOW) == NULL)
-@@ -1913,7 +1943,7 @@ start_policy_child (BusConfigParser *parser,
- {
- if (!append_rule_from_element (parser, element_name,
- attribute_names, attribute_values,
-- FALSE, error))
-+ BUS_POLICY_RULE_ACCESS_DENY, error))
- return FALSE;
-
- if (push_element (parser, ELEMENT_DENY) == NULL)
-@@ -1922,6 +1952,21 @@ start_policy_child (BusConfigParser *parser,
- return FALSE;
- }
-
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "check") == 0)
-+ {
-+ if (!append_rule_from_element (parser, element_name,
-+ attribute_names, attribute_values,
-+ BUS_POLICY_RULE_ACCESS_CHECK, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_CHECK) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
- return TRUE;
- }
- else
-@@ -2284,6 +2329,7 @@ bus_config_parser_end_element (BusConfigParser *parser,
- case ELEMENT_POLICY:
- case ELEMENT_ALLOW:
- case ELEMENT_DENY:
-+ case ELEMENT_CHECK:
- case ELEMENT_FORK:
- case ELEMENT_SYSLOG:
- case ELEMENT_KEEP_UMASK:
-@@ -2600,6 +2646,7 @@ bus_config_parser_content (BusConfigParser *parser,
- case ELEMENT_POLICY:
- case ELEMENT_ALLOW:
- case ELEMENT_DENY:
-+ case ELEMENT_CHECK:
- case ELEMENT_FORK:
- case ELEMENT_SYSLOG:
- case ELEMENT_KEEP_UMASK:
-@@ -3127,6 +3174,8 @@ do_load (const DBusString *full_path,
- dbus_error_init (&error);
-
- parser = bus_config_load (full_path, TRUE, NULL, &error);
-+ if (dbus_error_is_set (&error))
-+ _dbus_verbose ("Failed to load file: %s\n", error.message);
- if (parser == NULL)
- {
- _DBUS_ASSERT_ERROR_IS_SET (&error);
-@@ -3359,6 +3408,7 @@ elements_equal (const Element *a,
- case ELEMENT_LISTEN:
- case ELEMENT_AUTH:
- case ELEMENT_ALLOW:
-+ case ELEMENT_CHECK:
- case ELEMENT_DENY:
- case ELEMENT_FORK:
- case ELEMENT_PIDFILE:
-diff --git a/bus/connection.c b/bus/connection.c
-index 53605fa..b348d42 100644
---- a/bus/connection.c
-+++ b/bus/connection.c
-@@ -36,6 +36,10 @@
- #include <dbus/dbus-timeout.h>
- #include <dbus/dbus-connection-internal.h>
- #include <dbus/dbus-internals.h>
-+#ifdef DBUS_ENABLE_CYNARA
-+#include <stdlib.h>
-+#include <cynara-session.h>
-+#endif
-
- /* Trim executed commands to this length; we want to keep logs readable */
- #define MAX_LOG_COMMAND_LEN 50
-@@ -116,6 +120,9 @@ typedef struct
-
- /** non-NULL if and only if this is a monitor */
- DBusList *link_in_monitors;
-+#ifdef DBUS_ENABLE_CYNARA
-+ char *cynara_session_id;
-+#endif
- } BusConnectionData;
-
- static dbus_bool_t bus_pending_reply_expired (BusExpireList *list,
-@@ -129,8 +136,8 @@ static dbus_bool_t expire_incomplete_timeout (void *data);
-
- #define BUS_CONNECTION_DATA(connection) (dbus_connection_get_data ((connection), connection_data_slot))
-
--static DBusLoop*
--connection_get_loop (DBusConnection *connection)
-+DBusLoop*
-+bus_connection_get_loop (DBusConnection *connection)
- {
- BusConnectionData *d;
-
-@@ -354,7 +361,7 @@ add_connection_watch (DBusWatch *watch,
- {
- DBusConnection *connection = data;
-
-- return _dbus_loop_add_watch (connection_get_loop (connection), watch);
-+ return _dbus_loop_add_watch (bus_connection_get_loop (connection), watch);
- }
-
- static void
-@@ -363,7 +370,7 @@ remove_connection_watch (DBusWatch *watch,
- {
- DBusConnection *connection = data;
-
-- _dbus_loop_remove_watch (connection_get_loop (connection), watch);
-+ _dbus_loop_remove_watch (bus_connection_get_loop (connection), watch);
- }
-
- static void
-@@ -372,7 +379,7 @@ toggle_connection_watch (DBusWatch *watch,
- {
- DBusConnection *connection = data;
-
-- _dbus_loop_toggle_watch (connection_get_loop (connection), watch);
-+ _dbus_loop_toggle_watch (bus_connection_get_loop (connection), watch);
- }
-
- static dbus_bool_t
-@@ -381,7 +388,7 @@ add_connection_timeout (DBusTimeout *timeout,
- {
- DBusConnection *connection = data;
-
-- return _dbus_loop_add_timeout (connection_get_loop (connection), timeout);
-+ return _dbus_loop_add_timeout (bus_connection_get_loop (connection), timeout);
- }
-
- static void
-@@ -390,7 +397,7 @@ remove_connection_timeout (DBusTimeout *timeout,
- {
- DBusConnection *connection = data;
-
-- _dbus_loop_remove_timeout (connection_get_loop (connection), timeout);
-+ _dbus_loop_remove_timeout (bus_connection_get_loop (connection), timeout);
- }
-
- static void
-@@ -448,6 +455,10 @@ free_connection_data (void *data)
-
- dbus_free (d->name);
-
-+#ifdef DBUS_ENABLE_CYNARA
-+ free (d->cynara_session_id);
-+#endif
-+
- dbus_free (d);
- }
-
-@@ -1078,6 +1089,22 @@ bus_connection_get_policy (DBusConnection *connection)
- return d->policy;
- }
-
-+#ifdef DBUS_ENABLE_CYNARA
-+const char *bus_connection_get_cynara_session_id (DBusConnection *connection)
-+{
-+ BusConnectionData *d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ if (d->cynara_session_id == NULL)
-+ {
-+ unsigned long pid;
-+ if (dbus_connection_get_unix_process_id(connection, &pid))
-+ d->cynara_session_id = cynara_session_from_pid(pid);
-+ }
-+ return d->cynara_session_id;
-+}
-+#endif
-+
- static dbus_bool_t
- foreach_active (BusConnections *connections,
- BusConnectionForeachFunction function,
-@@ -2333,6 +2360,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction,
- DBusMessage *message)
- {
- DBusError error = DBUS_ERROR_INIT;
-+ BusResult res;
-
- /* We have to set the sender to the driver, and have
- * to check security policy since it was not done in
-@@ -2370,10 +2398,11 @@ bus_transaction_send_from_driver (BusTransaction *transaction,
- * if we're actively capturing messages, it's nice to log that we
- * tried to send it and did not allow ourselves to do so.
- */
-- if (!bus_context_check_security_policy (bus_transaction_get_context (transaction),
-- transaction,
-- NULL, connection, connection,
-- message, NULL, &error))
-+ res = bus_context_check_security_policy (bus_transaction_get_context (transaction),
-+ transaction,
-+ NULL, connection, connection, message, NULL,
-+ &error, NULL);
-+ if (res == BUS_RESULT_FALSE)
- {
- if (!bus_transaction_capture_error_reply (transaction, connection,
- &error, message))
-@@ -2388,6 +2417,12 @@ bus_transaction_send_from_driver (BusTransaction *transaction,
- dbus_error_free (&error);
- return TRUE;
- }
-+ else if (res == BUS_RESULT_LATER)
-+ {
-+ _dbus_verbose ("Cannot delay sending message from bus driver, dropping it\n");
-+ dbus_error_free (&error);
-+ return TRUE;
-+ }
-
- return bus_transaction_send (transaction, connection, message);
- }
-diff --git a/bus/connection.h b/bus/connection.h
-index 9e253ae..71078ea 100644
---- a/bus/connection.h
-+++ b/bus/connection.h
-@@ -31,6 +31,7 @@
- typedef dbus_bool_t (* BusConnectionForeachFunction) (DBusConnection *connection,
- void *data);
-
-+DBusLoop* bus_connection_get_loop (DBusConnection *connection);
-
- BusConnections* bus_connections_new (BusContext *context);
- BusConnections* bus_connections_ref (BusConnections *connections);
-@@ -124,6 +125,9 @@ dbus_bool_t bus_connection_be_monitor (DBusConnection *connection,
- BusTransaction *transaction,
- DBusList **rules,
- DBusError *error);
-+#ifdef DBUS_ENABLE_CYNARA
-+const char *bus_connection_get_cynara_session_id (DBusConnection *connection);
-+#endif
-
- /* transaction API so we can send or not send a block of messages as a whole */
-
-diff --git a/bus/cynara.c b/bus/cynara.c
-new file mode 100644
-index 0000000..57a4c45
---- /dev/null
-+++ b/bus/cynara.c
-@@ -0,0 +1,374 @@
-+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-+/* cynara.c Cynara runtime privilege checking
-+ *
-+ * Copyright (c) 2014 Samsung Electronics, Ltd.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "cynara.h"
-+#include "check.h"
-+#include "utils.h"
-+
-+#include <stdio.h>
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-watch.h>
-+#include <dbus/dbus-connection-internal.h>
-+#include <bus/connection.h>
-+#ifdef DBUS_ENABLE_CYNARA
-+#include <cynara-client-async.h>
-+#endif
-+
-+
-+#ifdef DBUS_ENABLE_CYNARA
-+typedef struct BusCynara
-+{
-+ int refcount;
-+
-+ BusContext *context;
-+ BusCheck *check;
-+ cynara_async *cynara;
-+ DBusWatch *cynara_watch;
-+} BusCynara;
-+
-+#define USE_CYNARA_CACHE 1
-+#ifdef USE_CYNARA_CACHE
-+#define CYNARA_CACHE_SIZE 1000
-+#endif
-+
-+static dbus_bool_t bus_cynara_watch_callback(DBusWatch *watch,
-+ unsigned int flags,
-+ void *data);
-+
-+static void status_callback(int old_fd,
-+ int new_fd,
-+ cynara_async_status status,
-+ void *user_status_data);
-+static void bus_cynara_check_response_callback (cynara_check_id check_id,
-+ cynara_async_call_cause cause,
-+ int response,
-+ void *user_response_data);
-+#endif
-+
-+
-+BusCynara *
-+bus_cynara_new(BusCheck *check, DBusError *error)
-+{
-+#ifdef DBUS_ENABLE_CYNARA
-+ BusContext *context;
-+ BusCynara *cynara;
-+ cynara_async_configuration *conf = NULL;
-+ int ret;
-+
-+ cynara = dbus_new(BusCynara, 1);
-+ if (cynara == NULL)
-+ {
-+ BUS_SET_OOM(error);
-+ return NULL;
-+ }
-+
-+ context = bus_check_get_context(check);
-+
-+ cynara->refcount = 1;
-+ cynara->check = check;
-+ cynara->context = context;
-+ cynara->cynara_watch = NULL;
-+
-+ ret = cynara_async_configuration_create(&conf);
-+ if (ret != CYNARA_API_SUCCESS)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynara configuration");
-+ goto out;
-+ }
-+
-+#ifdef CYNARA_CACHE_SIZE
-+ ret = cynara_async_configuration_set_cache_size(conf, CYNARA_CACHE_SIZE);
-+ if (ret != CYNARA_API_SUCCESS)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to Cynara cache size");
-+ goto out;
-+ }
-+#endif
-+
-+ ret = cynara_async_initialize(&cynara->cynara, conf, &status_callback, cynara);
-+ if (ret != CYNARA_API_SUCCESS)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynara client");
-+ goto out;
-+ }
-+
-+out:
-+ cynara_async_configuration_destroy(conf);
-+ if (ret != CYNARA_API_SUCCESS)
-+ {
-+ dbus_free(cynara);
-+ return NULL;
-+ }
-+
-+ return cynara;
-+#else
-+ return NULL;
-+#endif
-+}
-+
-+BusCynara *
-+bus_cynara_ref (BusCynara *cynara)
-+{
-+#ifdef DBUS_ENABLE_CYNARA
-+ _dbus_assert (cynara->refcount > 0);
-+ cynara->refcount += 1;
-+
-+ return cynara;
-+#else
-+ return NULL;
-+#endif
-+}
-+
-+void
-+bus_cynara_unref (BusCynara *cynara)
-+{
-+#ifdef DBUS_ENABLE_CYNARA
-+ _dbus_assert (cynara->refcount > 0);
-+
-+ cynara->refcount -= 1;
-+
-+ if (cynara->refcount == 0)
-+ {
-+ cynara_async_finish(cynara->cynara);
-+ dbus_free(cynara);
-+ }
-+#endif
-+}
-+
-+BusResult
-+bus_cynara_check_privilege (BusCynara *cynara,
-+ DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ const char *privilege,
-+ BusDeferredMessageStatus check_type,
-+ BusDeferredMessage **deferred_message_param)
-+{
-+#ifdef DBUS_ENABLE_CYNARA
-+ int result;
-+ unsigned long uid;
-+ char *label;
-+ const char *session_id;
-+ char user[32];
-+ cynara_check_id check_id;
-+ DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender;
-+ BusDeferredMessage *deferred_message;
-+ BusResult ret;
-+
-+ _dbus_assert(connection != NULL);
-+
-+ if (dbus_connection_get_unix_user(connection, &uid) == FALSE)
-+ return BUS_RESULT_FALSE;
-+
-+ if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL)
-+ {
-+ _dbus_warn("Failed to obtain security label for connection\n");
-+ return BUS_RESULT_FALSE;
-+ }
-+
-+ session_id = bus_connection_get_cynara_session_id (connection);
-+ if (session_id == NULL)
-+ {
-+ ret = BUS_RESULT_FALSE;
-+ goto out;
-+ }
-+
-+ snprintf(user, sizeof(user), "%lu", uid);
-+
-+#if USE_CYNARA_CACHE
-+ result = cynara_async_check_cache(cynara->cynara, label, session_id, user, privilege);
-+#else
-+ result = CYNARA_API_CACHE_MISS;
-+#endif
-+
-+ switch (result)
-+ {
-+ case CYNARA_API_ACCESS_ALLOWED:
-+ _dbus_verbose("Cynara: got ALLOWED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n",
-+ label, session_id, user, privilege);
-+ ret = BUS_RESULT_TRUE;
-+ break;
-+
-+ case CYNARA_API_ACCESS_DENIED:
-+ _dbus_verbose("Cynara: got DENIED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n",
-+ label, session_id, user, privilege);
-+ ret = BUS_RESULT_FALSE;
-+ break;
-+
-+ case CYNARA_API_CACHE_MISS:
-+ deferred_message = bus_deferred_message_new(message, sender, addressed_recipient,
-+ proposed_recipient, BUS_RESULT_LATER);
-+ if (deferred_message == NULL)
-+ {
-+ _dbus_verbose("Failed to allocate memory for deferred message\n");
-+ ret = BUS_RESULT_FALSE;
-+ goto out;
-+ }
-+
-+ /* callback is supposed to unref deferred_message*/
-+ result = cynara_async_create_request(cynara->cynara, label, session_id, user, privilege, &check_id,
-+ &bus_cynara_check_response_callback, deferred_message);
-+ if (result == CYNARA_API_SUCCESS)
-+ {
-+ _dbus_verbose("Created Cynara request: client=%s session_id=%s user=%s privilege=%s check_id=%u "
-+ "deferred_message=%p\n", label, session_id, user, privilege, (unsigned int)check_id, deferred_message);
-+ if (deferred_message_param != NULL)
-+ *deferred_message_param = deferred_message;
-+ ret = BUS_RESULT_LATER;
-+ }
-+ else
-+ {
-+ _dbus_verbose("Error on cynara request create: %i\n", result);
-+ bus_deferred_message_unref(deferred_message);
-+ ret = BUS_RESULT_FALSE;
-+ }
-+ break;
-+ default:
-+ _dbus_verbose("Error when accessing Cynara cache: %i\n", result);
-+ ret = BUS_RESULT_FALSE;
-+ }
-+out:
-+ dbus_free(label);
-+ return ret;
-+
-+#else
-+ return BUS_RESULT_FALSE;
-+#endif
-+}
-+
-+
-+
-+#ifdef DBUS_ENABLE_CYNARA
-+static void
-+status_callback(int old_fd, int new_fd, cynara_async_status status,
-+ void *user_status_data)
-+{
-+ BusCynara *cynara = (BusCynara *)user_status_data;
-+ DBusLoop *loop = bus_context_get_loop(cynara->context);
-+
-+ if (cynara->cynara_watch != NULL)
-+ {
-+ _dbus_loop_remove_watch(loop, cynara->cynara_watch);
-+ _dbus_watch_invalidate(cynara->cynara_watch);
-+ _dbus_watch_unref(cynara->cynara_watch);
-+ cynara->cynara_watch = NULL;
-+ }
-+
-+ if (new_fd != -1)
-+ {
-+ unsigned int flags;
-+ DBusWatch *watch;
-+
-+ switch (status)
-+ {
-+ case CYNARA_STATUS_FOR_READ:
-+ flags = DBUS_WATCH_READABLE;
-+ break;
-+ case CYNARA_STATUS_FOR_RW:
-+ flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE;
-+ break;
-+ default:
-+ /* Cynara passed unknown status - warn and add RW watch */
-+ _dbus_verbose("Cynara passed unknown status value: 0x%08X\n", (unsigned int)status);
-+ flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE;
-+ break;
-+ }
-+
-+ watch = _dbus_watch_new(new_fd, flags, TRUE, &bus_cynara_watch_callback, cynara, NULL);
-+ if (watch != NULL)
-+ {
-+ if (_dbus_loop_add_watch(loop, watch) == TRUE)
-+ {
-+ cynara->cynara_watch = watch;
-+ return;
-+ }
-+
-+ _dbus_watch_invalidate(watch);
-+ _dbus_watch_unref(watch);
-+ }
-+
-+ /* It seems like not much can be done at this point. Cynara events won't be processed
-+ * until next Cynara function call triggering status callback */
-+ _dbus_verbose("Failed to add dbus watch\n");
-+ }
-+}
-+
-+static dbus_bool_t
-+bus_cynara_watch_callback(DBusWatch *watch,
-+ unsigned int flags,
-+ void *data)
-+{
-+ BusCynara *cynara = (BusCynara *)data;
-+ int result = cynara_async_process(cynara->cynara);
-+ if (result != CYNARA_API_SUCCESS)
-+ _dbus_verbose("cynara_async_process returned %d\n", result);
-+
-+ return result != CYNARA_API_OUT_OF_MEMORY ? TRUE : FALSE;
-+}
-+
-+static inline const char *
-+call_cause_to_string(cynara_async_call_cause cause)
-+{
-+ switch (cause)
-+ {
-+ case CYNARA_CALL_CAUSE_ANSWER:
-+ return "ANSWER";
-+ case CYNARA_CALL_CAUSE_CANCEL:
-+ return "CANCEL";
-+ case CYNARA_CALL_CAUSE_FINISH:
-+ return "FINSIH";
-+ case CYNARA_CALL_CAUSE_SERVICE_NOT_AVAILABLE:
-+ return "SERVICE NOT AVAILABLE";
-+ default:
-+ return "INVALID";
-+ }
-+}
-+
-+static void
-+bus_cynara_check_response_callback (cynara_check_id check_id,
-+ cynara_async_call_cause cause,
-+ int response,
-+ void *user_response_data)
-+{
-+ BusDeferredMessage *deferred_message = user_response_data;
-+ BusResult result;
-+
-+ _dbus_verbose("Cynara callback: check_id=%u, cause=%s response=%i response_data=%p\n",
-+ (unsigned int)check_id, call_cause_to_string(cause), response, user_response_data);
-+
-+ if (deferred_message == NULL)
-+ return;
-+
-+ if (cause == CYNARA_CALL_CAUSE_ANSWER && response == CYNARA_API_ACCESS_ALLOWED)
-+ result = BUS_RESULT_TRUE;
-+ else
-+ result = BUS_RESULT_FALSE;
-+
-+ bus_deferred_message_response_received(deferred_message, result);
-+ bus_deferred_message_unref(deferred_message);
-+}
-+
-+#endif /* DBUS_ENABLE_CYNARA */
-diff --git a/bus/cynara.h b/bus/cynara.h
-new file mode 100644
-index 0000000..c4728bb
---- /dev/null
-+++ b/bus/cynara.h
-@@ -0,0 +1,37 @@
-+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-+/* cynara.h Cynara runtime privilege checking
-+ *
-+ * Copyright (c) 2014 Samsung Electronics, Ltd.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ *
-+ */
-+
-+#include "bus.h"
-+#include "check.h"
-+
-+BusCynara *bus_cynara_new (BusCheck *check, DBusError *error);
-+BusCynara *bus_cynara_ref (BusCynara *cynara);
-+void bus_cynara_unref (BusCynara *cynara);
-+BusResult bus_cynara_check_privilege (BusCynara *cynara,
-+ DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ const char *privilege,
-+ BusDeferredMessageStatus check_type,
-+ BusDeferredMessage **deferred_message);
-diff --git a/bus/dispatch.c b/bus/dispatch.c
-index 19228be..d3867f7 100644
---- a/bus/dispatch.c
-+++ b/bus/dispatch.c
-@@ -25,6 +25,7 @@
-
- #include <config.h>
- #include "dispatch.h"
-+#include "check.h"
- #include "connection.h"
- #include "driver.h"
- #include "services.h"
-@@ -64,14 +65,18 @@ send_one_message (DBusConnection *connection,
- DBusError *error)
- {
- DBusError stack_error = DBUS_ERROR_INIT;
-+ BusDeferredMessage *deferred_message;
-+ BusResult result;
-
-- if (!bus_context_check_security_policy (context, transaction,
-+ result = bus_context_check_security_policy (context, transaction,
- sender,
- addressed_recipient,
- connection,
- message,
- NULL,
-- &stack_error))
-+ &stack_error,
-+ &deferred_message);
-+ if (result != BUS_RESULT_TRUE)
- {
- if (!bus_transaction_capture_error_reply (transaction, sender,
- &stack_error, message))
-@@ -130,6 +135,8 @@ bus_dispatch_matches (BusTransaction *transaction,
- BusMatchmaker *matchmaker;
- DBusList *link;
- BusContext *context;
-+ BusDeferredMessage *deferred_message;
-+ BusResult res;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-
-@@ -145,11 +152,20 @@ bus_dispatch_matches (BusTransaction *transaction,
- /* First, send the message to the addressed_recipient, if there is one. */
- if (addressed_recipient != NULL)
- {
-- if (!bus_context_check_security_policy (context, transaction,
-- sender, addressed_recipient,
-- addressed_recipient,
-- message, NULL, error))
-+ res = bus_context_check_security_policy (context, transaction,
-+ sender, addressed_recipient,
-+ addressed_recipient,
-+ message, NULL, error,
-+ &deferred_message);
-+ if (res == BUS_RESULT_FALSE)
- return FALSE;
-+ else if (res == BUS_RESULT_LATER)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_ACCESS_DENIED,
-+ "Rejecting message because time is needed to check security policy");
-+ return FALSE;
-+ }
-
- if (dbus_message_contains_unix_fds (message) &&
- !dbus_connection_can_send_type (addressed_recipient,
-@@ -374,19 +390,31 @@ bus_dispatch (DBusConnection *connection,
- if (service_name &&
- strcmp (service_name, DBUS_SERVICE_DBUS) == 0) /* to bus driver */
- {
-+ BusDeferredMessage *deferred_message;
-+ BusResult res;
-+
- if (!bus_transaction_capture (transaction, connection, NULL, message))
- {
- BUS_SET_OOM (&error);
- goto out;
- }
-
-- if (!bus_context_check_security_policy (context, transaction,
-- connection, NULL, NULL, message,
-- NULL, &error))
-+ res = bus_context_check_security_policy (context, transaction,
-+ connection, NULL, NULL, message, NULL,
-+ &error, &deferred_message);
-+ if (res == BUS_RESULT_FALSE)
- {
- _dbus_verbose ("Security policy rejected message\n");
- goto out;
- }
-+ else if (res == BUS_RESULT_LATER)
-+ {
-+ dbus_set_error (&error,
-+ DBUS_ERROR_ACCESS_DENIED,
-+ "Rejecting message because time is needed to check security policy");
-+ _dbus_verbose ("Security policy needs time to check policy. Dropping message\n");
-+ goto out;
-+ }
-
- _dbus_verbose ("Giving message to %s\n", DBUS_SERVICE_DBUS);
- if (!bus_driver_handle_message (connection, transaction, message, &error))
-diff --git a/bus/driver.h b/bus/driver.h
-index ac1289d..a7297ad 100644
---- a/bus/driver.h
-+++ b/bus/driver.h
-@@ -66,5 +66,7 @@ dbus_bool_t bus_driver_send_ack_reply (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error);
-+dbus_bool_t bus_driver_check_message_is_for_us (DBusMessage *message,
-+ DBusError *error);
-
- #endif /* BUS_DRIVER_H */
-diff --git a/bus/policy.c b/bus/policy.c
-index a37be80..7de92c6 100644
---- a/bus/policy.c
-+++ b/bus/policy.c
-@@ -22,6 +22,7 @@
- */
-
- #include <config.h>
-+#include "check.h"
- #include "policy.h"
- #include "services.h"
- #include "test.h"
-@@ -33,7 +34,7 @@
-
- BusPolicyRule*
- bus_policy_rule_new (BusPolicyRuleType type,
-- dbus_bool_t allow)
-+ BusPolicyRuleAccess access)
- {
- BusPolicyRule *rule;
-
-@@ -43,7 +44,7 @@ bus_policy_rule_new (BusPolicyRuleType type,
-
- rule->type = type;
- rule->refcount = 1;
-- rule->allow = allow;
-+ rule->access = access;
-
- switch (rule->type)
- {
-@@ -55,18 +56,19 @@ bus_policy_rule_new (BusPolicyRuleType type,
- break;
- case BUS_POLICY_RULE_SEND:
- rule->d.send.message_type = DBUS_MESSAGE_TYPE_INVALID;
--
- /* allow rules default to TRUE (only requested replies allowed)
-+ * check rules default to TRUE (only requested replies are checked)
- * deny rules default to FALSE (only unrequested replies denied)
- */
-- rule->d.send.requested_reply = rule->allow;
-+ rule->d.send.requested_reply = rule->access != BUS_POLICY_RULE_ACCESS_DENY;
- break;
- case BUS_POLICY_RULE_RECEIVE:
- rule->d.receive.message_type = DBUS_MESSAGE_TYPE_INVALID;
- /* allow rules default to TRUE (only requested replies allowed)
-+ * check rules default to TRUE (only requested replies are checked)
- * deny rules default to FALSE (only unrequested replies denied)
- */
-- rule->d.receive.requested_reply = rule->allow;
-+ rule->d.receive.requested_reply = rule->access != BUS_POLICY_RULE_ACCESS_DENY;
- break;
- case BUS_POLICY_RULE_OWN:
- break;
-@@ -122,7 +124,8 @@ bus_policy_rule_unref (BusPolicyRule *rule)
- default:
- _dbus_assert_not_reached ("invalid rule");
- }
--
-+
-+ dbus_free (rule->privilege);
- dbus_free (rule);
- }
- }
-@@ -435,7 +438,10 @@ list_allows_user (dbus_bool_t def,
- else
- continue;
-
-- allowed = rule->allow;
-+ /* We don't intend to support <check user="..." /> and <check group="..." />
-+ rules. They are treated like deny.
-+ */
-+ allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW;
- }
-
- return allowed;
-@@ -873,18 +879,23 @@ bus_client_policy_append_rule (BusClientPolicy *policy,
- return TRUE;
- }
-
--dbus_bool_t
--bus_client_policy_check_can_send (BusClientPolicy *policy,
-- BusRegistry *registry,
-- dbus_bool_t requested_reply,
-- DBusConnection *receiver,
-- DBusMessage *message,
-- dbus_int32_t *toggles,
-- dbus_bool_t *log)
-+BusResult
-+bus_client_policy_check_can_send (DBusConnection *sender,
-+ BusClientPolicy *policy,
-+ BusRegistry *registry,
-+ dbus_bool_t requested_reply,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *receiver,
-+ DBusMessage *message,
-+ dbus_int32_t *toggles,
-+ dbus_bool_t *log,
-+ const char **privilege_param,
-+ BusDeferredMessage **deferred_message)
- {
- DBusList *link;
-- dbus_bool_t allowed;
--
-+ BusResult result;
-+ const char *privilege;
-+
- /* policy->rules is in the order the rules appeared
- * in the config file, i.e. last rule that applies wins
- */
-@@ -892,7 +903,7 @@ bus_client_policy_check_can_send (BusClientPolicy *policy,
- _dbus_verbose (" (policy) checking send rules\n");
- *toggles = 0;
-
-- allowed = FALSE;
-+ result = BUS_RESULT_FALSE;
- link = _dbus_list_get_first_link (&policy->rules);
- while (link != NULL)
- {
-@@ -923,13 +934,14 @@ bus_client_policy_check_can_send (BusClientPolicy *policy,
- /* If it's a reply, the requested_reply flag kicks in */
- if (dbus_message_get_reply_serial (message) != 0)
- {
-- /* for allow, requested_reply=true means the rule applies
-- * only when reply was requested. requested_reply=false means
-- * always allow.
-+ /* for allow or check requested_reply=true means the rule applies
-+ * only when reply was requested. requested_reply=false means the
-+ * rule always applies
- */
-- if (!requested_reply && rule->allow && rule->d.send.requested_reply && !rule->d.send.eavesdrop)
-+ if (!requested_reply && rule->access != BUS_POLICY_RULE_ACCESS_DENY && rule->d.send.requested_reply && !rule->d.send.eavesdrop)
- {
-- _dbus_verbose (" (policy) skipping allow rule since it only applies to requested replies and does not allow eavesdropping\n");
-+ _dbus_verbose (" (policy) skipping %s rule since it only applies to requested replies and does not allow eavesdropping\n",
-+ rule->access == BUS_POLICY_RULE_ACCESS_ALLOW ? "allow" : "check");
- continue;
- }
-
-@@ -937,7 +949,7 @@ bus_client_policy_check_can_send (BusClientPolicy *policy,
- * when the reply was not requested. requested_reply=true means the
- * rule always applies.
- */
-- if (requested_reply && !rule->allow && !rule->d.send.requested_reply)
-+ if (requested_reply && rule->access == BUS_POLICY_RULE_ACCESS_DENY && !rule->d.send.requested_reply)
- {
- _dbus_verbose (" (policy) skipping deny rule since it only applies to unrequested replies\n");
- continue;
-@@ -960,13 +972,15 @@ bus_client_policy_check_can_send (BusClientPolicy *policy,
- /* The interface is optional in messages. For allow rules, if the message
- * has no interface we want to skip the rule (and thus not allow);
- * for deny rules, if the message has no interface we want to use the
-- * rule (and thus deny).
-+ * rule (and thus deny). Check rules are meant to be used like allow
-+ * rules (they can grant access, but not remove it), so we treat it like
-+ * allow here.
- */
- dbus_bool_t no_interface;
-
- no_interface = dbus_message_get_interface (message) == NULL;
-
-- if ((no_interface && rule->allow) ||
-+ if ((no_interface && rule->access != BUS_POLICY_RULE_ACCESS_DENY) ||
- (!no_interface &&
- strcmp (dbus_message_get_interface (message),
- rule->d.send.interface) != 0))
-@@ -1079,33 +1093,64 @@ bus_client_policy_check_can_send (BusClientPolicy *policy,
- }
-
- /* Use this rule */
-- allowed = rule->allow;
-+ switch (rule->access)
-+ {
-+ case BUS_POLICY_RULE_ACCESS_ALLOW:
-+ result = BUS_RESULT_TRUE;
-+ break;
-+ case BUS_POLICY_RULE_ACCESS_DENY:
-+ default:
-+ result = BUS_RESULT_FALSE;
-+ break;
-+ case BUS_POLICY_RULE_ACCESS_CHECK:
-+ result = BUS_RESULT_LATER;
-+ privilege = rule->privilege;
-+ break;
-+ }
-+
- *log = rule->d.send.log;
- (*toggles)++;
-
-- _dbus_verbose (" (policy) used rule, allow now = %d\n",
-- allowed);
-+ _dbus_verbose (" (policy) used rule, result now = %d\n",
-+ (int)(intptr_t)result);
- }
-
-- return allowed;
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ BusContext *context = bus_connection_get_context(sender);
-+ BusCheck *check = bus_context_get_check(context);
-+
-+ result = bus_check_privilege(check, message, sender, addressed_recipient, receiver,
-+ privilege, BUS_DEFERRED_MESSAGE_CHECK_SEND, deferred_message);
-+ }
-+ else
-+ privilege = NULL;
-+
-+ if (privilege_param != NULL)
-+ *privilege_param = privilege;
-+
-+ return result;
- }
-
- /* See docs on what the args mean on bus_context_check_security_policy()
- * comment
- */
--dbus_bool_t
--bus_client_policy_check_can_receive (BusClientPolicy *policy,
-- BusRegistry *registry,
-- dbus_bool_t requested_reply,
-- DBusConnection *sender,
-- DBusConnection *addressed_recipient,
-- DBusConnection *proposed_recipient,
-- DBusMessage *message,
-- dbus_int32_t *toggles)
-+BusResult
-+bus_client_policy_check_can_receive (BusClientPolicy *policy,
-+ BusRegistry *registry,
-+ dbus_bool_t requested_reply,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ DBusMessage *message,
-+ dbus_int32_t *toggles,
-+ const char **privilege_param,
-+ BusDeferredMessage **deferred_message)
- {
- DBusList *link;
-- dbus_bool_t allowed;
- dbus_bool_t eavesdropping;
-+ BusResult result;
-+ const char *privilege;
-
- eavesdropping =
- addressed_recipient != proposed_recipient &&
-@@ -1118,7 +1163,7 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy,
- _dbus_verbose (" (policy) checking receive rules, eavesdropping = %d\n", eavesdropping);
- *toggles = 0;
-
-- allowed = FALSE;
-+ result = BUS_RESULT_FALSE;
- link = _dbus_list_get_first_link (&policy->rules);
- while (link != NULL)
- {
-@@ -1141,19 +1186,21 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy,
- }
- }
-
-- /* for allow, eavesdrop=false means the rule doesn't apply when
-- * eavesdropping. eavesdrop=true means always allow.
-+
-+ /* for allow or check, eavesdrop=false means the rule doesn't apply when
-+ * eavesdropping. eavesdrop=true means the rule always applies
- */
-- if (eavesdropping && rule->allow && !rule->d.receive.eavesdrop)
-+ if (eavesdropping && rule->access != BUS_POLICY_RULE_ACCESS_DENY && !rule->d.receive.eavesdrop)
- {
-- _dbus_verbose (" (policy) skipping allow rule since it doesn't apply to eavesdropping\n");
-+ _dbus_verbose (" (policy) skipping %s rule since it doesn't apply to eavesdropping\n",
-+ rule->access == BUS_POLICY_RULE_ACCESS_ALLOW ? "allow" : "check");
- continue;
- }
-
- /* for deny, eavesdrop=true means the rule applies only when
- * eavesdropping; eavesdrop=false means always deny.
- */
-- if (!eavesdropping && !rule->allow && rule->d.receive.eavesdrop)
-+ if (!eavesdropping && rule->access == BUS_POLICY_RULE_ACCESS_DENY && rule->d.receive.eavesdrop)
- {
- _dbus_verbose (" (policy) skipping deny rule since it only applies to eavesdropping\n");
- continue;
-@@ -1162,13 +1209,14 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy,
- /* If it's a reply, the requested_reply flag kicks in */
- if (dbus_message_get_reply_serial (message) != 0)
- {
-- /* for allow, requested_reply=true means the rule applies
-- * only when reply was requested. requested_reply=false means
-- * always allow.
-+ /* for allow or check requested_reply=true means the rule applies
-+ * only when reply was requested. requested_reply=false means the
-+ * rule always applies
- */
-- if (!requested_reply && rule->allow && rule->d.receive.requested_reply && !rule->d.receive.eavesdrop)
-+ if (!requested_reply && rule->access != BUS_POLICY_RULE_ACCESS_DENY && rule->d.send.requested_reply && !rule->d.send.eavesdrop)
- {
-- _dbus_verbose (" (policy) skipping allow rule since it only applies to requested replies and does not allow eavesdropping\n");
-+ _dbus_verbose (" (policy) skipping %s rule since it only applies to requested replies and does not allow eavesdropping\n",
-+ rule->access == BUS_POLICY_RULE_ACCESS_DENY ? "allow" : "deny");
- continue;
- }
-
-@@ -1176,7 +1224,7 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy,
- * when the reply was not requested. requested_reply=true means the
- * rule always applies.
- */
-- if (requested_reply && !rule->allow && !rule->d.receive.requested_reply)
-+ if (requested_reply && rule->access == BUS_POLICY_RULE_ACCESS_DENY && !rule->d.receive.requested_reply)
- {
- _dbus_verbose (" (policy) skipping deny rule since it only applies to unrequested replies\n");
- continue;
-@@ -1199,13 +1247,13 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy,
- /* The interface is optional in messages. For allow rules, if the message
- * has no interface we want to skip the rule (and thus not allow);
- * for deny rules, if the message has no interface we want to use the
-- * rule (and thus deny).
-+ * rule (and thus deny). Check rules are treated like allow rules.
- */
- dbus_bool_t no_interface;
-
- no_interface = dbus_message_get_interface (message) == NULL;
-
-- if ((no_interface && rule->allow) ||
-+ if ((no_interface && rule->access != BUS_POLICY_RULE_ACCESS_DENY) ||
- (!no_interface &&
- strcmp (dbus_message_get_interface (message),
- rule->d.receive.interface) != 0))
-@@ -1295,14 +1343,43 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy,
- }
-
- /* Use this rule */
-- allowed = rule->allow;
-+ switch (rule->access)
-+ {
-+ case BUS_POLICY_RULE_ACCESS_ALLOW:
-+ result = BUS_RESULT_TRUE;
-+ break;
-+ case BUS_POLICY_RULE_ACCESS_DENY:
-+ default:
-+ result = BUS_RESULT_FALSE;
-+ break;
-+ case BUS_POLICY_RULE_ACCESS_CHECK:
-+ result = BUS_RESULT_LATER;
-+ privilege = rule->privilege;
-+ break;
-+ }
-+
- (*toggles)++;
-
-- _dbus_verbose (" (policy) used rule, allow now = %d\n",
-- allowed);
-+ _dbus_verbose (" (policy) used rule, result now = %d\n",
-+ (int)(intptr_t)result);
- }
-
-- return allowed;
-+
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ BusContext *context = bus_connection_get_context(proposed_recipient);
-+ BusCheck *check = bus_context_get_check(context);
-+
-+ result = bus_check_privilege(check, message, sender, addressed_recipient, proposed_recipient,
-+ privilege, BUS_DEFERRED_MESSAGE_CHECK_RECEIVE, deferred_message);
-+ }
-+ else
-+ privilege = NULL;
-+
-+ if (privilege_param != NULL)
-+ *privilege_param = privilege;
-+
-+ return result;
- }
-
-
-@@ -1354,7 +1431,7 @@ bus_rules_check_can_own (DBusList *rules,
- }
-
- /* Use this rule */
-- allowed = rule->allow;
-+ allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW;
- }
-
- return allowed;
-diff --git a/bus/policy.h b/bus/policy.h
-index ec43ffa..f839d23 100644
---- a/bus/policy.h
-+++ b/bus/policy.h
-@@ -46,6 +46,14 @@ typedef enum
- BUS_POLICY_TRISTATE_TRUE
- } BusPolicyTristate;
-
-+typedef enum
-+{
-+ BUS_POLICY_RULE_ACCESS_DENY,
-+ BUS_POLICY_RULE_ACCESS_ALLOW,
-+ /** runtime check resulting in allow or deny */
-+ BUS_POLICY_RULE_ACCESS_CHECK
-+} BusPolicyRuleAccess;
-+
- /** determines whether the rule affects a connection, or some global item */
- #define BUS_POLICY_RULE_IS_PER_CLIENT(rule) (!((rule)->type == BUS_POLICY_RULE_USER || \
- (rule)->type == BUS_POLICY_RULE_GROUP))
-@@ -56,8 +64,9 @@ struct BusPolicyRule
-
- BusPolicyRuleType type;
-
-- unsigned int allow : 1; /**< #TRUE if this allows, #FALSE if it denies */
--
-+ unsigned int access : 2; /**< BusPolicyRuleAccess */
-+ char *privilege; /**< for BUS_POLICY_RULE_ACCESS_CHECK */
-+
- union
- {
- struct
-@@ -118,7 +127,7 @@ struct BusPolicyRule
- };
-
- BusPolicyRule* bus_policy_rule_new (BusPolicyRuleType type,
-- dbus_bool_t allow);
-+ BusPolicyRuleAccess access);
- BusPolicyRule* bus_policy_rule_ref (BusPolicyRule *rule);
- void bus_policy_rule_unref (BusPolicyRule *rule);
-
-@@ -152,21 +161,27 @@ dbus_bool_t bus_policy_merge (BusPolicy *policy,
- BusClientPolicy* bus_client_policy_new (void);
- BusClientPolicy* bus_client_policy_ref (BusClientPolicy *policy);
- void bus_client_policy_unref (BusClientPolicy *policy);
--dbus_bool_t bus_client_policy_check_can_send (BusClientPolicy *policy,
-+BusResult bus_client_policy_check_can_send (DBusConnection *sender,
-+ BusClientPolicy *policy,
- BusRegistry *registry,
- dbus_bool_t requested_reply,
-+ DBusConnection *addressed_recipient,
- DBusConnection *receiver,
- DBusMessage *message,
- dbus_int32_t *toggles,
-- dbus_bool_t *log);
--dbus_bool_t bus_client_policy_check_can_receive (BusClientPolicy *policy,
-+ dbus_bool_t *log,
-+ const char **privilege_param,
-+ BusDeferredMessage **deferred_message);
-+BusResult bus_client_policy_check_can_receive (BusClientPolicy *policy,
- BusRegistry *registry,
- dbus_bool_t requested_reply,
- DBusConnection *sender,
- DBusConnection *addressed_recipient,
- DBusConnection *proposed_recipient,
- DBusMessage *message,
-- dbus_int32_t *toggles);
-+ dbus_int32_t *toggles,
-+ const char **privilege_param,
-+ BusDeferredMessage **deferred_message);
- dbus_bool_t bus_client_policy_check_can_own (BusClientPolicy *policy,
- const DBusString *service_name);
- dbus_bool_t bus_client_policy_append_rule (BusClientPolicy *policy,
-diff --git a/configure.ac b/configure.ac
-index d1e3a29..11b5ffd 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1742,6 +1742,17 @@ AC_ARG_ENABLE([user-session],
- AM_CONDITIONAL([DBUS_ENABLE_USER_SESSION],
- [test "x$enable_user_session" = xyes])
-
-+#enable cynara integration
-+AC_ARG_ENABLE([cynara], [AS_HELP_STRING([--enable-cynara], [enable Cynara integration])], [], [enable_cynara=no])
-+if test "x$enable_cynara" = xyes; then
-+ PKG_CHECK_MODULES([CYNARA], [cynara-client-async >= 0.6.0 cynara-session >= 0.6.0],
-+ [AC_DEFINE([DBUS_ENABLE_CYNARA], [1], [Define to enable Cynara privilege checks in dbus-daemon])],
-+ [AC_MSG_ERROR([libcynara-client-async and cynara-session are required to enable Cynara integration])])
-+fi
-+
-+AC_SUBST([CYNARA_CFLAGS])
-+AC_SUBST([CYNARA_LIBS])
-+
- AC_CONFIG_FILES([
- Doxyfile
- dbus/Version
-@@ -1824,6 +1835,7 @@ echo "
- Building bus stats API: ${enable_stats}
- Building SELinux support: ${have_selinux}
- Building AppArmor support: ${have_apparmor}
-+ Building Cynara support: ${enable_cynara}
- Building inotify support: ${have_inotify}
- Building kqueue support: ${have_kqueue}
- Building systemd support: ${have_systemd}
-diff --git a/test/Makefile.am b/test/Makefile.am
-index af1e13b..e6f50e1 100644
---- a/test/Makefile.am
-+++ b/test/Makefile.am
-@@ -439,6 +439,7 @@ in_data = \
- data/valid-config-files/debug-allow-all.conf.in \
- data/valid-config-files/finite-timeout.conf.in \
- data/valid-config-files/forbidding.conf.in \
-+ data/valid-config-files/debug-check-some.conf.in \
- data/valid-config-files/incoming-limit.conf.in \
- data/valid-config-files/max-completed-connections.conf.in \
- data/valid-config-files/max-connections-per-user.conf.in \
-diff --git a/test/data/invalid-config-files/badcheck-1.conf b/test/data/invalid-config-files/badcheck-1.conf
-new file mode 100644
-index 0000000..fad9f50
---- /dev/null
-+++ b/test/data/invalid-config-files/badcheck-1.conf
-@@ -0,0 +1,9 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <policy context="default">
-+ <allow privilege="foo" send_destination="*"/> <!-- extra privilege="foo" -->
-+ </policy>
-+</busconfig>
-diff --git a/test/data/invalid-config-files/badcheck-2.conf b/test/data/invalid-config-files/badcheck-2.conf
-new file mode 100644
-index 0000000..63c7ef2
---- /dev/null
-+++ b/test/data/invalid-config-files/badcheck-2.conf
-@@ -0,0 +1,9 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <policy context="default">
-+ <check send_destination="*"/> <!-- missing privilege="foo" -->
-+ </policy>
-+</busconfig>
-diff --git a/test/data/valid-config-files/check-1.conf b/test/data/valid-config-files/check-1.conf
-new file mode 100644
-index 0000000..ad71473
---- /dev/null
-+++ b/test/data/valid-config-files/check-1.conf
-@@ -0,0 +1,9 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <policy context="default">
-+ <check privilege="foo" send_destination="*"/>
-+ </policy>
-+</busconfig>
-diff --git a/test/data/valid-config-files/debug-check-some.conf.in b/test/data/valid-config-files/debug-check-some.conf.in
-new file mode 100644
-index 0000000..47ee854
---- /dev/null
-+++ b/test/data/valid-config-files/debug-check-some.conf.in
-@@ -0,0 +1,18 @@
-+<!-- Bus that listens on a debug pipe and doesn't create any restrictions -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <listen>debug-pipe:name=test-server</listen>
-+ <listen>@TEST_LISTEN@</listen>
-+ <servicedir>@DBUS_TEST_DATA@/valid-service-files</servicedir>
-+ <policy context="default">
-+ <allow send_interface="*"/>
-+ <allow receive_interface="*"/>
-+ <allow own="*"/>
-+ <allow user="*"/>
-+
-+ <deny send_interface="org.freedesktop.TestSuite" send_member="Echo"/>
-+ <check privilege="foo" send_interface="org.freedesktop.TestSuite" send_member="Echo"/>
-+ </policy>
-+</busconfig>
---
-2.21.1
-
diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch
deleted file mode 100644
index bac8cf97f..000000000
--- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0002-Disable-message-dispatching-when-send-rule-result-is.patch
+++ /dev/null
@@ -1,967 +0,0 @@
-From c2f4ba585c777b731df6b6b8a165b6cc4dc5d639 Mon Sep 17 00:00:00 2001
-From: Jacek Bukarewicz <j.bukarewicz@samsung.com>
-Date: Fri, 28 Nov 2014 12:07:39 +0100
-Subject: [PATCH 2/8] Disable message dispatching when send rule result is not
- known
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When unicast message is sent to addressed recipient and policy result
-is not available message dispatch from the sender is disabled.
-This also means that any further messages from the given connection are
-put into the incoming queue without being processed. If response is received
-message dispatching is resumed. This time answer is attached to the message
-which is now processed synchronously.
-Receive rule result unavailability is not yet handled - such messages are
-rejected. Also, if message is sent to non-addressed recipient and policy result
-is unknown, message is silently dropped.
-
-Cherry-picked from b1b87ad9f20b2052c28431b48e81073078a745ce
-by Jose Bollo.
-
-Updated for dbus 1.10.20 by Scott Murray and José Bollo
-
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
- bus/activation.c | 76 +++++++++++--
- bus/check.c | 109 +++++++++++++++++--
- bus/check.h | 10 ++
- bus/cynara.c | 1 -
- bus/dispatch.c | 184 ++++++++++++++++++++++++++++----
- bus/dispatch.h | 2 +-
- bus/driver.c | 12 ++-
- dbus/dbus-connection-internal.h | 15 +++
- dbus/dbus-connection.c | 125 +++++++++++++++++++++-
- dbus/dbus-list.c | 29 +++++
- dbus/dbus-list.h | 3 +
- dbus/dbus-shared.h | 3 +-
- 12 files changed, 528 insertions(+), 41 deletions(-)
-
-diff --git a/bus/activation.c b/bus/activation.c
-index f9c6c62..8301b59 100644
---- a/bus/activation.c
-+++ b/bus/activation.c
-@@ -32,6 +32,7 @@
- #include "services.h"
- #include "test.h"
- #include "utils.h"
-+#include <dbus/dbus-connection-internal.h>
- #include <dbus/dbus-internals.h>
- #include <dbus/dbus-hash.h>
- #include <dbus/dbus-list.h>
-@@ -94,6 +95,8 @@ struct BusPendingActivationEntry
- DBusConnection *connection;
-
- dbus_bool_t auto_activation;
-+
-+ dbus_bool_t is_put_back;
- };
-
- typedef struct
-@@ -1241,20 +1244,23 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation
- BusPendingActivationEntry *entry = link->data;
- DBusList *next = _dbus_list_get_next_link (&pending_activation->entries, link);
-
-- if (entry->auto_activation && (entry->connection == NULL || dbus_connection_get_is_connected (entry->connection)))
-+ if (entry->auto_activation && !entry->is_put_back &&
-+ (entry->connection == NULL || dbus_connection_get_is_connected (entry->connection)))
- {
- DBusConnection *addressed_recipient;
- DBusError error;
-+ BusResult res;
-
- dbus_error_init (&error);
-
- addressed_recipient = bus_service_get_primary_owners_connection (service);
-
- /* Resume dispatching where we left off in bus_dispatch() */
-- if (!bus_dispatch_matches (transaction,
-- entry->connection,
-- addressed_recipient,
-- entry->activation_message, &error))
-+ res = bus_dispatch_matches (transaction,
-+ entry->connection,
-+ addressed_recipient,
-+ entry->activation_message, &error);
-+ if (res == BUS_RESULT_FALSE)
- {
- /* If permission is denied, we just want to return the error
- * to the original method invoker; in particular, we don't
-@@ -1266,11 +1272,44 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation
- bus_connection_send_oom_error (entry->connection,
- entry->activation_message);
- }
--
- dbus_error_free (&error);
- link = next;
- continue;
- }
-+ else if (res == BUS_RESULT_LATER)
-+ {
-+ DBusList *putback_message_link = link;
-+ DBusMessage *last_inserted_message = NULL;
-+
-+ /* NULL entry->connection implies sending pending ActivationRequest message to systemd */
-+ if (entry->connection == NULL)
-+ {
-+ _dbus_assert_not_reached ("bus_dispatch_matches returned BUS_RESULT_LATER unexpectedly when sender is NULL");
-+ link = next;
-+ continue;
-+ }
-+
-+ /**
-+ * Getting here means that policy check result is not yet available and dispatching
-+ * messages from entry->connection has been disabled.
-+ * Let's put back all messages for the given connection in the incoming queue and mark
-+ * this entry as put back so they are not handled twice.
-+ */
-+ while (putback_message_link != NULL)
-+ {
-+ BusPendingActivationEntry *putback_message = putback_message_link->data;
-+ if (putback_message->connection == entry->connection)
-+ {
-+ if (!_dbus_connection_putback_message (putback_message->connection, last_inserted_message,
-+ putback_message->activation_message, &error))
-+ goto error;
-+ last_inserted_message = putback_message->activation_message;
-+ putback_message->is_put_back = TRUE;
-+ }
-+
-+ putback_message_link = _dbus_list_get_next_link(&pending_activation->entries, putback_message_link);
-+ }
-+ }
- }
-
- link = next;
-@@ -1287,6 +1326,19 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation
- return TRUE;
-
- error:
-+ /* remove all messages that have been put to connections' incoming queues */
-+ link = _dbus_list_get_first_link (&pending_activation->entries);
-+ while (link != NULL)
-+ {
-+ BusPendingActivationEntry *entry = link->data;
-+ if (entry->is_put_back)
-+ {
-+ _dbus_connection_remove_message(entry->connection, entry->activation_message);
-+ entry->is_put_back = FALSE;
-+ }
-+ link = _dbus_list_get_next_link(&pending_activation->entries, link);
-+ }
-+
- return FALSE;
- }
-
-@@ -2079,6 +2131,7 @@ bus_activation_activate_service (BusActivation *activation,
-
- if (service != NULL)
- {
-+ BusResult res;
- bus_context_log (activation->context,
- DBUS_SYSTEM_LOG_INFO, "Activating via systemd: service name='%s' unit='%s' requested by '%s' (%s)",
- service_name,
-@@ -2086,8 +2139,17 @@ bus_activation_activate_service (BusActivation *activation,
- bus_connection_get_name (connection),
- bus_connection_get_loginfo (connection));
- /* Wonderful, systemd is connected, let's just send the msg */
-- retval = bus_dispatch_matches (activation_transaction, NULL,
-+ res = bus_dispatch_matches (activation_transaction, NULL,
- systemd, message, error);
-+
-+ if (res == BUS_RESULT_TRUE)
-+ retval = TRUE;
-+ else
-+ {
-+ retval = FALSE;
-+ if (res == BUS_RESULT_LATER)
-+ _dbus_verbose("Unexpectedly need time to check message from bus driver to systemd - dropping the message.\n");
-+ }
- }
- else
- {
-diff --git a/bus/check.c b/bus/check.c
-index 5b72d31..4b8a699 100644
---- a/bus/check.c
-+++ b/bus/check.c
-@@ -55,6 +55,8 @@ typedef struct BusDeferredMessage
- BusCheckResponseFunc response_callback;
- } BusDeferredMessage;
-
-+static dbus_int32_t deferred_message_data_slot = -1;
-+
- BusCheck *
- bus_check_new (BusContext *context, DBusError *error)
- {
-@@ -67,11 +69,19 @@ bus_check_new (BusContext *context, DBusError *error)
- return NULL;
- }
-
-+ if (!dbus_message_allocate_data_slot(&deferred_message_data_slot))
-+ {
-+ dbus_free(check);
-+ BUS_SET_OOM(error);
-+ return NULL;
-+ }
-+
- check->refcount = 1;
- check->context = context;
- check->cynara = bus_cynara_new(check, error);
- if (dbus_error_is_set(error))
- {
-+ dbus_message_free_data_slot(&deferred_message_data_slot);
- dbus_free(check);
- return NULL;
- }
-@@ -98,6 +108,7 @@ bus_check_unref (BusCheck *check)
- if (check->refcount == 0)
- {
- bus_cynara_unref(check->cynara);
-+ dbus_message_free_data_slot(&deferred_message_data_slot);
- dbus_free(check);
- }
- }
-@@ -114,6 +125,45 @@ bus_check_get_cynara (BusCheck *check)
- return check->cynara;
- }
-
-+static void
-+bus_check_enable_dispatch_callback (BusDeferredMessage *deferred_message,
-+ BusResult result)
-+{
-+ _dbus_verbose("bus_check_enable_dispatch_callback called deferred_message=%p\n", deferred_message);
-+
-+ deferred_message->response = result;
-+ _dbus_connection_enable_dispatch(deferred_message->sender);
-+}
-+
-+static void
-+deferred_message_free_function(void *data)
-+{
-+ BusDeferredMessage *deferred_message = (BusDeferredMessage *)data;
-+ bus_deferred_message_unref(deferred_message);
-+}
-+
-+void
-+bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message)
-+{
-+ _dbus_assert(deferred_message != NULL);
-+ _dbus_assert(deferred_message->sender != NULL);
-+
-+ if (dbus_message_get_data(deferred_message->message, deferred_message_data_slot) == NULL)
-+ {
-+ if (dbus_message_set_data(deferred_message->message, deferred_message_data_slot, deferred_message,
-+ deferred_message_free_function))
-+ bus_deferred_message_ref(deferred_message);
-+ }
-+
-+ _dbus_connection_disable_dispatch(deferred_message->sender);
-+ deferred_message->response_callback = bus_check_enable_dispatch_callback;
-+}
-+
-+#ifdef DBUS_ENABLE_EMBEDDED_TESTS
-+BusResult (*bus_check_test_override) (DBusConnection *connection,
-+ const char *privilege);
-+#endif
-+
- BusResult
- bus_check_privilege (BusCheck *check,
- DBusMessage *message,
-@@ -124,6 +174,7 @@ bus_check_privilege (BusCheck *check,
- BusDeferredMessageStatus check_type,
- BusDeferredMessage **deferred_message)
- {
-+ BusDeferredMessage *previous_deferred_message;
- BusResult result = BUS_RESULT_FALSE;
- #ifdef DBUS_ENABLE_CYNARA
- BusCynara *cynara;
-@@ -137,16 +188,54 @@ bus_check_privilege (BusCheck *check,
- return BUS_RESULT_FALSE;
- }
-
-- /* ask policy checkers */
--#ifdef DBUS_ENABLE_CYNARA
-- cynara = bus_check_get_cynara(check);
-- result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient,
-- proposed_recipient, privilege, check_type, deferred_message);
-+#ifdef DBUS_ENABLE_EMBEDDED_TESTS
-+ if (bus_check_test_override)
-+ return bus_check_test_override (connection, privilege);
- #endif
-
-- if (result == BUS_RESULT_LATER && deferred_message != NULL)
-+ previous_deferred_message = dbus_message_get_data(message, deferred_message_data_slot);
-+ /* check if message blocked at sender's queue is being processed */
-+ if (previous_deferred_message != NULL)
-+ {
-+ if ((check_type & BUS_DEFERRED_MESSAGE_CHECK_SEND) &&
-+ !(previous_deferred_message->status & BUS_DEFERRED_MESSAGE_CHECK_SEND))
-+ {
-+ /**
-+ * Message has been deferred due to receive or own rule which means that sending this message
-+ * is allowed - it must have been checked previously.
-+ * This might happen when client calls RequestName method which depending on security
-+ * policy might result in both "can_send" and "can_own" Cynara checks.
-+ */
-+ result = BUS_RESULT_TRUE;
-+ }
-+ else
-+ {
-+ result = previous_deferred_message->response;
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ /* result is still not known - reuse deferred message object */
-+ if (deferred_message != NULL)
-+ *deferred_message = previous_deferred_message;
-+ }
-+ else
-+ {
-+ /* result is available - we can remove deferred message from the processed message */
-+ dbus_message_set_data(message, deferred_message_data_slot, NULL, NULL);
-+ }
-+ }
-+ }
-+ else
- {
-- (*deferred_message)->status |= check_type;
-+ /* ask policy checkers */
-+#ifdef DBUS_ENABLE_CYNARA
-+ cynara = bus_check_get_cynara(check);
-+ result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient,
-+ proposed_recipient, privilege, check_type, deferred_message);
-+#endif
-+ if (result == BUS_RESULT_LATER && deferred_message != NULL)
-+ {
-+ (*deferred_message)->status |= check_type;
-+ }
- }
- return result;
- }
-@@ -206,6 +295,12 @@ bus_deferred_message_unref (BusDeferredMessage *deferred_message)
- }
- }
-
-+BusDeferredMessageStatus
-+bus_deferred_message_get_status (BusDeferredMessage *deferred_message)
-+{
-+ return deferred_message->status;
-+}
-+
- void
- bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
- BusResult result)
-diff --git a/bus/check.h b/bus/check.h
-index c3fcaf9..d177549 100644
---- a/bus/check.h
-+++ b/bus/check.h
-@@ -55,6 +55,7 @@ BusResult bus_check_privilege (BusCheck *check,
- BusDeferredMessageStatus check_type,
- BusDeferredMessage **deferred_message);
-
-+
- BusDeferredMessage *bus_deferred_message_new (DBusMessage *message,
- DBusConnection *sender,
- DBusConnection *addressed_recipient,
-@@ -65,4 +66,13 @@ BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage
- void bus_deferred_message_unref (BusDeferredMessage *deferred_message);
- void bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
- BusResult result);
-+void bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message);
-+
-+BusDeferredMessageStatus bus_deferred_message_get_status (BusDeferredMessage *deferred_message);
-+
-+#ifdef DBUS_ENABLE_EMBEDDED_TESTS
-+extern BusResult (*bus_check_test_override) (DBusConnection *connection,
-+ const char *privilege);
-+#endif
-+
- #endif /* BUS_CHECK_H */
-diff --git a/bus/cynara.c b/bus/cynara.c
-index 57a4c45..77aed62 100644
---- a/bus/cynara.c
-+++ b/bus/cynara.c
-@@ -36,7 +36,6 @@
- #include <cynara-client-async.h>
- #endif
-
--
- #ifdef DBUS_ENABLE_CYNARA
- typedef struct BusCynara
- {
-diff --git a/bus/dispatch.c b/bus/dispatch.c
-index d3867f7..50a22a3 100644
---- a/bus/dispatch.c
-+++ b/bus/dispatch.c
-@@ -35,6 +35,7 @@
- #include "signals.h"
- #include "test.h"
- #include <dbus/dbus-internals.h>
-+#include <dbus/dbus-connection-internal.h>
- #include <dbus/dbus-misc.h>
- #include <string.h>
-
-@@ -122,7 +123,7 @@ send_one_message (DBusConnection *connection,
- return TRUE;
- }
-
--dbus_bool_t
-+BusResult
- bus_dispatch_matches (BusTransaction *transaction,
- DBusConnection *sender,
- DBusConnection *addressed_recipient,
-@@ -158,13 +159,29 @@ bus_dispatch_matches (BusTransaction *transaction,
- message, NULL, error,
- &deferred_message);
- if (res == BUS_RESULT_FALSE)
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- else if (res == BUS_RESULT_LATER)
- {
-- dbus_set_error (error,
-- DBUS_ERROR_ACCESS_DENIED,
-- "Rejecting message because time is needed to check security policy");
-- return FALSE;
-+ BusDeferredMessageStatus status;
-+ status = bus_deferred_message_get_status(deferred_message);
-+
-+ if (status & BUS_DEFERRED_MESSAGE_CHECK_SEND)
-+ {
-+ /* send rule result not available - disable dispatching messages from the sender */
-+ bus_deferred_message_disable_sender(deferred_message);
-+ return BUS_RESULT_LATER;
-+ }
-+ else if (status & BUS_DEFERRED_MESSAGE_CHECK_RECEIVE)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "Rejecting message because time is needed to check security policy");
-+ return BUS_RESULT_FALSE;
-+ }
-+ else
-+ {
-+ _dbus_verbose("deferred message has no status field set to send or receive unexpectedly\n");
-+ return BUS_RESULT_FALSE;
-+ }
- }
-
- if (dbus_message_contains_unix_fds (message) &&
-@@ -175,14 +192,14 @@ bus_dispatch_matches (BusTransaction *transaction,
- DBUS_ERROR_NOT_SUPPORTED,
- "Tried to send message with Unix file descriptors"
- "to a client that doesn't support that.");
-- return FALSE;
-- }
-+ return BUS_RESULT_FALSE;
-+ }
-
- /* Dispatch the message */
- if (!bus_transaction_send (transaction, addressed_recipient, message))
- {
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- }
-
-@@ -197,7 +214,7 @@ bus_dispatch_matches (BusTransaction *transaction,
- &recipients))
- {
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- link = _dbus_list_get_first_link (&recipients);
-@@ -219,10 +236,10 @@ bus_dispatch_matches (BusTransaction *transaction,
- if (dbus_error_is_set (&tmp_error))
- {
- dbus_move_error (&tmp_error, error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- else
-- return TRUE;
-+ return BUS_RESULT_TRUE;
- }
-
- static DBusHandlerResult
-@@ -409,10 +426,12 @@ bus_dispatch (DBusConnection *connection,
- }
- else if (res == BUS_RESULT_LATER)
- {
-- dbus_set_error (&error,
-- DBUS_ERROR_ACCESS_DENIED,
-- "Rejecting message because time is needed to check security policy");
-- _dbus_verbose ("Security policy needs time to check policy. Dropping message\n");
-+ /* Disable dispatching messages from the sender,
-+ * roll back and dispatch the message once the policy result is available */
-+ bus_deferred_message_disable_sender(deferred_message);
-+ bus_transaction_cancel_and_free (transaction);
-+ transaction = NULL;
-+ result = DBUS_HANDLER_RESULT_LATER;
- goto out;
- }
-
-@@ -514,8 +533,14 @@ bus_dispatch (DBusConnection *connection,
- * addressed_recipient == NULL), and match it against other connections'
- * match rules.
- */
-- if (!bus_dispatch_matches (transaction, connection, addressed_recipient, message, &error))
-- goto out;
-+ if (BUS_RESULT_LATER == bus_dispatch_matches (transaction, connection, addressed_recipient,
-+ message, &error))
-+ {
-+ /* Roll back and dispatch the message once the policy result is available */
-+ bus_transaction_cancel_and_free (transaction);
-+ transaction = NULL;
-+ result = DBUS_HANDLER_RESULT_LATER;
-+ }
-
- out:
- if (dbus_error_is_set (&error))
-@@ -5060,9 +5085,132 @@ bus_dispatch_test_conf_fail (const DBusString *test_data_dir,
- }
- #endif
-
-+typedef struct {
-+ DBusTimeout *timeout;
-+ DBusConnection *connection;
-+ dbus_bool_t timedout;
-+ int check_counter;
-+} BusTestCheckData;
-+
-+static BusTestCheckData *cdata;
-+
-+static dbus_bool_t
-+bus_dispatch_test_check_timeout (void *data)
-+{
-+ _dbus_verbose ("timeout triggered - pretend that privilege check result is available\n");
-+
-+ /* should only happen once during the test */
-+ _dbus_assert (!cdata->timedout);
-+ cdata->timedout = TRUE;
-+ _dbus_connection_enable_dispatch (cdata->connection);
-+
-+ /* don't call this again */
-+ _dbus_loop_remove_timeout (bus_connection_get_loop (cdata->connection),
-+ cdata->timeout);
-+ dbus_connection_unref (cdata->connection);
-+ cdata->connection = NULL;
-+ return TRUE;
-+}
-+
-+static BusResult
-+bus_dispatch_test_check_override (DBusConnection *connection,
-+ const char *privilege)
-+{
-+ _dbus_verbose ("overriding privilege check %s #%d\n", privilege, cdata->check_counter);
-+ cdata->check_counter++;
-+ if (!cdata->timedout)
-+ {
-+ dbus_bool_t added;
-+
-+ /* Should be the first privilege check for the "Echo" method. */
-+ _dbus_assert (cdata->check_counter == 1);
-+ cdata->timeout = _dbus_timeout_new (1, bus_dispatch_test_check_timeout,
-+ NULL, NULL);
-+ _dbus_assert (cdata->timeout);
-+ added = _dbus_loop_add_timeout (bus_connection_get_loop (connection),
-+ cdata->timeout);
-+ _dbus_assert (added);
-+ cdata->connection = connection;
-+ dbus_connection_ref (connection);
-+ _dbus_connection_disable_dispatch (connection);
-+ return BUS_RESULT_LATER;
-+ }
-+ else
-+ {
-+ /* Should only be checked one more time, and this time succeeds. */
-+ _dbus_assert (cdata->check_counter == 2);
-+ return BUS_RESULT_TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+bus_dispatch_test_check (const DBusString *test_data_dir)
-+{
-+ const char *filename = "valid-config-files/debug-check-some.conf";
-+ BusContext *context;
-+ DBusConnection *foo;
-+ DBusError error;
-+ dbus_bool_t result = TRUE;
-+ BusTestCheckData data;
-+
-+ /* save the config name for the activation helper */
-+ if (!setenv_TEST_LAUNCH_HELPER_CONFIG (test_data_dir, filename))
-+ _dbus_assert_not_reached ("no memory setting TEST_LAUNCH_HELPER_CONFIG");
-+
-+ dbus_error_init (&error);
-+
-+ context = bus_context_new_test (test_data_dir, filename);
-+ if (context == NULL)
-+ return FALSE;
-+
-+ foo = dbus_connection_open_private (TEST_DEBUG_PIPE, &error);
-+ if (foo == NULL)
-+ _dbus_assert_not_reached ("could not alloc connection");
-+
-+ if (!bus_setup_debug_client (foo))
-+ _dbus_assert_not_reached ("could not set up connection");
-+
-+ spin_connection_until_authenticated (context, foo);
-+
-+ if (!check_hello_message (context, foo))
-+ _dbus_assert_not_reached ("hello message failed");
-+
-+ if (!check_double_hello_message (context, foo))
-+ _dbus_assert_not_reached ("double hello message failed");
-+
-+ if (!check_add_match (context, foo, ""))
-+ _dbus_assert_not_reached ("AddMatch message failed");
-+
-+ /*
-+ * Cause bus_check_send_privilege() to return BUS_RESULT_LATER in the
-+ * first call, then BUS_RESULT_TRUE.
-+ */
-+ cdata = &data;
-+ memset (cdata, 0, sizeof(*cdata));
-+ bus_check_test_override = bus_dispatch_test_check_override;
-+
-+ result = check_existent_service_auto_start (context, foo);
-+
-+ _dbus_assert (cdata->check_counter == 2);
-+ _dbus_assert (cdata->timedout);
-+ _dbus_assert (cdata->timeout);
-+ _dbus_assert (!cdata->connection);
-+ _dbus_timeout_unref (cdata->timeout);
-+
-+ kill_client_connection_unchecked (foo);
-+
-+ bus_context_unref (context);
-+
-+ return result;
-+}
-+
- dbus_bool_t
- bus_dispatch_test (const DBusString *test_data_dir)
- {
-+ _dbus_verbose ("<check> tests\n");
-+ if (!bus_dispatch_test_check (test_data_dir))
-+ return FALSE;
-+
- /* run normal activation tests */
- _dbus_verbose ("Normal activation tests\n");
- if (!bus_dispatch_test_conf (test_data_dir,
-diff --git a/bus/dispatch.h b/bus/dispatch.h
-index fb5ba7a..afba6a2 100644
---- a/bus/dispatch.h
-+++ b/bus/dispatch.h
-@@ -29,7 +29,7 @@
-
- dbus_bool_t bus_dispatch_add_connection (DBusConnection *connection);
- void bus_dispatch_remove_connection (DBusConnection *connection);
--dbus_bool_t bus_dispatch_matches (BusTransaction *transaction,
-+BusResult bus_dispatch_matches (BusTransaction *transaction,
- DBusConnection *sender,
- DBusConnection *recipient,
- DBusMessage *message,
-diff --git a/bus/driver.c b/bus/driver.c
-index cd0a714..f414f64 100644
---- a/bus/driver.c
-+++ b/bus/driver.c
-@@ -218,6 +218,7 @@ bus_driver_send_service_owner_changed (const char *service_name,
- {
- DBusMessage *message;
- dbus_bool_t retval;
-+ BusResult res;
- const char *null_service;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -253,7 +254,16 @@ bus_driver_send_service_owner_changed (const char *service_name,
- if (!bus_transaction_capture (transaction, NULL, NULL, message))
- goto oom;
-
-- retval = bus_dispatch_matches (transaction, NULL, NULL, message, error);
-+ res = bus_dispatch_matches (transaction, NULL, NULL, message, error);
-+ if (res == BUS_RESULT_TRUE)
-+ retval = TRUE;
-+ else
-+ {
-+ retval = FALSE;
-+ if (res == BUS_RESULT_LATER)
-+ /* should never happen */
-+ _dbus_assert_not_reached ("bus_dispatch_matches returned BUS_RESULT_LATER unexpectedly");
-+ }
- dbus_message_unref (message);
-
- return retval;
-diff --git a/dbus/dbus-connection-internal.h b/dbus/dbus-connection-internal.h
-index 4835732..94b1c95 100644
---- a/dbus/dbus-connection-internal.h
-+++ b/dbus/dbus-connection-internal.h
-@@ -118,6 +118,21 @@ DBUS_PRIVATE_EXPORT
- dbus_bool_t _dbus_connection_get_linux_security_label (DBusConnection *connection,
- char **label_p);
-
-+DBUS_PRIVATE_EXPORT
-+void _dbus_connection_enable_dispatch (DBusConnection *connection);
-+DBUS_PRIVATE_EXPORT
-+void _dbus_connection_disable_dispatch (DBusConnection *connection);
-+
-+DBUS_PRIVATE_EXPORT
-+dbus_bool_t _dbus_connection_putback_message (DBusConnection *connection,
-+ DBusMessage *after_message,
-+ DBusMessage *message,
-+ DBusError *error);
-+
-+DBUS_PRIVATE_EXPORT
-+dbus_bool_t _dbus_connection_remove_message (DBusConnection *connection,
-+ DBusMessage *message);
-+
- /* if DBUS_ENABLE_STATS */
- DBUS_PRIVATE_EXPORT
- void _dbus_connection_get_stats (DBusConnection *connection,
-diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
-index c525b6d..958968c 100644
---- a/dbus/dbus-connection.c
-+++ b/dbus/dbus-connection.c
-@@ -311,7 +311,8 @@ struct DBusConnection
- */
- dbus_bool_t dispatch_acquired; /**< Someone has dispatch path (can drain incoming queue) */
- dbus_bool_t io_path_acquired; /**< Someone has transport io path (can use the transport to read/write messages) */
--
-+
-+ unsigned int dispatch_disabled : 1; /**< if true, then dispatching incoming messages is stopped until enabled again */
- unsigned int shareable : 1; /**< #TRUE if libdbus owns a reference to the connection and can return it from dbus_connection_open() more than once */
-
- unsigned int exit_on_disconnect : 1; /**< If #TRUE, exit after handling disconnect signal */
-@@ -439,6 +440,39 @@ _dbus_connection_wakeup_mainloop (DBusConnection *connection)
- (*connection->wakeup_main_function) (connection->wakeup_main_data);
- }
-
-+static void
-+_dbus_connection_set_dispatch(DBusConnection *connection,
-+ dbus_bool_t disabled)
-+{
-+ CONNECTION_LOCK (connection);
-+ if (connection->dispatch_disabled != disabled)
-+ {
-+ DBusDispatchStatus status;
-+
-+ connection->dispatch_disabled = disabled;
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+ }
-+ else
-+ {
-+ CONNECTION_UNLOCK (connection);
-+ }
-+}
-+
-+
-+void
-+_dbus_connection_enable_dispatch (DBusConnection *connection)
-+{
-+ _dbus_connection_set_dispatch (connection, FALSE);
-+}
-+
-+void
-+ _dbus_connection_disable_dispatch (DBusConnection *connection)
-+{
-+ _dbus_connection_set_dispatch (connection, TRUE);
-+}
-+
-+
- #ifdef DBUS_ENABLE_EMBEDDED_TESTS
- /**
- * Gets the locks so we can examine them
-@@ -4069,6 +4103,82 @@ _dbus_connection_putback_message_link_unlocked (DBusConnection *connection,
- "_dbus_connection_putback_message_link_unlocked");
- }
-
-+dbus_bool_t
-+_dbus_connection_putback_message (DBusConnection *connection,
-+ DBusMessage *after_message,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusDispatchStatus status;
-+ DBusList *message_link = _dbus_list_alloc_link (message);
-+ DBusList *after_link;
-+ if (message_link == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ dbus_message_ref (message);
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_connection_acquire_dispatch (connection);
-+ HAVE_LOCK_CHECK (connection);
-+
-+ after_link = _dbus_list_find_first(&connection->incoming_messages, after_message);
-+ _dbus_list_insert_after_link (&connection->incoming_messages, after_link, message_link);
-+ connection->n_incoming += 1;
-+
-+ _dbus_verbose ("Message %p (%s %s %s '%s') put back into queue %p, %d incoming\n",
-+ message_link->data,
-+ dbus_message_type_to_string (dbus_message_get_type (message_link->data)),
-+ dbus_message_get_interface (message_link->data) ?
-+ dbus_message_get_interface (message_link->data) :
-+ "no interface",
-+ dbus_message_get_member (message_link->data) ?
-+ dbus_message_get_member (message_link->data) :
-+ "no member",
-+ dbus_message_get_signature (message_link->data),
-+ connection, connection->n_incoming);
-+
-+ _dbus_message_trace_ref (message_link->data, -1, -1,
-+ "_dbus_connection_putback_message");
-+
-+ _dbus_connection_release_dispatch (connection);
-+
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+_dbus_connection_remove_message (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ DBusDispatchStatus status;
-+ dbus_bool_t removed;
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_connection_acquire_dispatch (connection);
-+ HAVE_LOCK_CHECK (connection);
-+
-+ removed = _dbus_list_remove(&connection->incoming_messages, message);
-+
-+ if (removed)
-+ {
-+ connection->n_incoming -= 1;
-+ dbus_message_unref(message);
-+ _dbus_verbose ("Message %p removed from incoming queue\n", message);
-+ }
-+ else
-+ _dbus_verbose ("Message %p not found in the incoming queue\n", message);
-+
-+ _dbus_connection_release_dispatch (connection);
-+
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+ return removed;
-+}
-+
- /**
- * Returns the first-received message from the incoming message queue,
- * removing it from the queue. The caller owns a reference to the
-@@ -4252,8 +4362,9 @@ static DBusDispatchStatus
- _dbus_connection_get_dispatch_status_unlocked (DBusConnection *connection)
- {
- HAVE_LOCK_CHECK (connection);
--
-- if (connection->n_incoming > 0)
-+ if (connection->dispatch_disabled && _dbus_connection_get_is_connected_unlocked(connection))
-+ return DBUS_DISPATCH_COMPLETE;
-+ else if (connection->n_incoming > 0)
- return DBUS_DISPATCH_DATA_REMAINS;
- else if (!_dbus_transport_queue_messages (connection->transport))
- return DBUS_DISPATCH_NEED_MEMORY;
-@@ -4716,6 +4827,8 @@ dbus_connection_dispatch (DBusConnection *connection)
-
- CONNECTION_LOCK (connection);
-
-+ if (result == DBUS_HANDLER_RESULT_LATER)
-+ goto out;
- if (result == DBUS_HANDLER_RESULT_NEED_MEMORY)
- {
- _dbus_verbose ("No memory\n");
-@@ -4838,9 +4951,11 @@ dbus_connection_dispatch (DBusConnection *connection)
- connection);
-
- out:
-- if (result == DBUS_HANDLER_RESULT_NEED_MEMORY)
-+ if (result == DBUS_HANDLER_RESULT_LATER ||
-+ result == DBUS_HANDLER_RESULT_NEED_MEMORY)
- {
-- _dbus_verbose ("out of memory\n");
-+ if (result == DBUS_HANDLER_RESULT_NEED_MEMORY)
-+ _dbus_verbose ("out of memory\n");
-
- /* Put message back, and we'll start over.
- * Yes this means handlers must be idempotent if they
-diff --git a/dbus/dbus-list.c b/dbus/dbus-list.c
-index 8e713c0..32ea871 100644
---- a/dbus/dbus-list.c
-+++ b/dbus/dbus-list.c
-@@ -458,6 +458,35 @@ _dbus_list_remove_last (DBusList **list,
- return FALSE;
- }
-
-+/**
-+ * Finds a value in the list. Returns the first link
-+ * with value equal to the given data pointer.
-+ * This is a linear-time operation.
-+ * Returns #NULL if no value found that matches.
-+ *
-+ * @param list address of the list head.
-+ * @param data the value to find.
-+ * @returns the link if found
-+ */
-+DBusList*
-+_dbus_list_find_first (DBusList **list,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (list);
-+
-+ while (link != NULL)
-+ {
-+ if (link->data == data)
-+ return link;
-+
-+ link = _dbus_list_get_next_link (list, link);
-+ }
-+
-+ return NULL;
-+}
-+
- /**
- * Finds a value in the list. Returns the last link
- * with value equal to the given data pointer.
-diff --git a/dbus/dbus-list.h b/dbus/dbus-list.h
-index 9350a0d..fee9f1b 100644
---- a/dbus/dbus-list.h
-+++ b/dbus/dbus-list.h
-@@ -68,6 +68,9 @@ DBUS_PRIVATE_EXPORT
- void _dbus_list_remove_link (DBusList **list,
- DBusList *link);
- DBUS_PRIVATE_EXPORT
-+DBusList* _dbus_list_find_first (DBusList **list,
-+ void *data);
-+DBUS_PRIVATE_EXPORT
- DBusList* _dbus_list_find_last (DBusList **list,
- void *data);
- DBUS_PRIVATE_EXPORT
-diff --git a/dbus/dbus-shared.h b/dbus/dbus-shared.h
-index 7ab9103..e5bfbed 100644
---- a/dbus/dbus-shared.h
-+++ b/dbus/dbus-shared.h
-@@ -67,7 +67,8 @@ typedef enum
- {
- DBUS_HANDLER_RESULT_HANDLED, /**< Message has had its effect - no need to run more handlers. */
- DBUS_HANDLER_RESULT_NOT_YET_HANDLED, /**< Message has not had any effect - see if other handlers want it. */
-- DBUS_HANDLER_RESULT_NEED_MEMORY /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */
-+ DBUS_HANDLER_RESULT_NEED_MEMORY, /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */
-+ DBUS_HANDLER_RESULT_LATER /**< Message dispatch deferred due to pending policy check */
- } DBusHandlerResult;
-
- /* Bus names */
---
-2.21.1
-
diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch
deleted file mode 100644
index 7d89a7496..000000000
--- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0003-Handle-unavailability-of-policy-results-for-broadcas.patch
+++ /dev/null
@@ -1,1095 +0,0 @@
-From 9d39aa9dd55680529d721a0389ce9ef579bb669a Mon Sep 17 00:00:00 2001
-From: Jacek Bukarewicz <j.bukarewicz@samsung.com>
-Date: Fri, 28 Nov 2014 12:39:33 +0100
-Subject: [PATCH 3/8] Handle unavailability of policy results for broadcasts
- and receive rules
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When message is sent to the addressed recipient and receive rule
-result is unavailable we don't want to block the sender
-as it most likely will be the privileged service, so instead we queue
-it at the recipient. Any further messages sent to it will be queued to
-maintain message order. Once the answer from Cynara arrives messages are
-dispatched from the recipient queue. In such case full dispatch is
-performed - messages are sent to addressed recipient and other
-interested connections.
-Messages sent to non-addressed recipients (eavesdroppers or broadcast
-message recipients) are handled in a similar way. The difference is
-that it is not full dispatch meaning message is sent to a single recipient.
-
-Cherry picked from 1e231194610892dd4360224998d91336097b05a1 by Jose Bollo
-
-Updated for dbus 1.10.20 by Scott Murray and José Bollo
-
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
- bus/activation.c | 4 +-
- bus/bus.c | 50 ++++++--
- bus/bus.h | 19 +++
- bus/check.c | 307 +++++++++++++++++++++++++++++++++++++++++++++++
- bus/check.h | 25 ++++
- bus/connection.c | 168 ++++++++++++++++++++++++--
- bus/connection.h | 19 ++-
- bus/dispatch.c | 115 +++++++++++++++---
- bus/dispatch.h | 11 +-
- bus/driver.c | 2 +-
- bus/policy.c | 6 +
- 11 files changed, 683 insertions(+), 43 deletions(-)
-
-diff --git a/bus/activation.c b/bus/activation.c
-index 8301b59..d4b597c 100644
---- a/bus/activation.c
-+++ b/bus/activation.c
-@@ -1259,7 +1259,7 @@ bus_activation_send_pending_auto_activation_messages (BusActivation *activation
- res = bus_dispatch_matches (transaction,
- entry->connection,
- addressed_recipient,
-- entry->activation_message, &error);
-+ entry->activation_message, NULL, &error);
- if (res == BUS_RESULT_FALSE)
- {
- /* If permission is denied, we just want to return the error
-@@ -2140,7 +2140,7 @@ bus_activation_activate_service (BusActivation *activation,
- bus_connection_get_loginfo (connection));
- /* Wonderful, systemd is connected, let's just send the msg */
- res = bus_dispatch_matches (activation_transaction, NULL,
-- systemd, message, error);
-+ systemd, message, NULL, error);
-
- if (res == BUS_RESULT_TRUE)
- retval = TRUE;
-diff --git a/bus/bus.c b/bus/bus.c
-index 6fc45d0..0aa700b 100644
---- a/bus/bus.c
-+++ b/bus/bus.c
-@@ -1800,17 +1800,9 @@ bus_context_check_security_policy (BusContext *context,
- }
-
- /* See if limits on size have been exceeded */
-- if (proposed_recipient &&
-- ((dbus_connection_get_outgoing_size (proposed_recipient) > context->limits.max_outgoing_bytes) ||
-- (dbus_connection_get_outgoing_unix_fds (proposed_recipient) > context->limits.max_outgoing_unix_fds)))
-- {
-- complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED,
-- "Rejected: destination has a full message queue",
-- 0, message, sender, proposed_recipient, requested_reply, TRUE, NULL,
-- error);
-- _dbus_verbose ("security policy disallowing message due to full message queue\n");
-+ if (!bus_context_check_recipient_message_limits(context, proposed_recipient, sender, message,
-+ requested_reply, error))
- return BUS_RESULT_FALSE;
-- }
-
- /* Record that we will allow a reply here in the future (don't
- * bother if the recipient is the bus or this is an eavesdropping
-@@ -1869,3 +1861,41 @@ bus_context_check_all_watches (BusContext *context)
- _dbus_server_toggle_all_watches (server, enabled);
- }
- }
-+
-+void
-+bus_context_complain_about_message (BusContext *context,
-+ const char *error_name,
-+ const char *complaint,
-+ int matched_rules,
-+ DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *proposed_recipient,
-+ dbus_bool_t requested_reply,
-+ dbus_bool_t log,
-+ const char *privilege,
-+ DBusError *error)
-+{
-+ complain_about_message(context, error_name, complaint, matched_rules, message, sender,
-+ proposed_recipient, requested_reply, log, privilege, error);
-+}
-+
-+dbus_bool_t bus_context_check_recipient_message_limits (BusContext *context,
-+ DBusConnection *recipient,
-+ DBusConnection *sender,
-+ DBusMessage *message,
-+ dbus_bool_t requested_reply,
-+ DBusError *error)
-+{
-+ if (recipient &&
-+ ((dbus_connection_get_outgoing_size (recipient) > context->limits.max_outgoing_bytes) ||
-+ (dbus_connection_get_outgoing_unix_fds (recipient) > context->limits.max_outgoing_unix_fds)))
-+ {
-+ complain_about_message (context, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "Rejected: destination has a full message queue",
-+ 0, message, sender, recipient, requested_reply, TRUE, NULL,
-+ error);
-+ _dbus_verbose ("security policy disallowing message due to full message queue\n");
-+ return FALSE;
-+ }
-+ return TRUE;
-+}
-diff --git a/bus/bus.h b/bus/bus.h
-index 82c32c8..1b08f7c 100644
---- a/bus/bus.h
-+++ b/bus/bus.h
-@@ -164,4 +164,23 @@ BusResult bus_context_check_security_policy (BusContext
- BusDeferredMessage **deferred_message);
- void bus_context_check_all_watches (BusContext *context);
-
-+dbus_bool_t bus_context_check_recipient_message_limits (BusContext *context,
-+ DBusConnection *recipient,
-+ DBusConnection *sender,
-+ DBusMessage *message,
-+ dbus_bool_t requested_reply,
-+ DBusError *error);
-+void bus_context_complain_about_message (BusContext *context,
-+ const char *error_name,
-+ const char *complaint,
-+ int matched_rules,
-+ DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *proposed_recipient,
-+ dbus_bool_t requested_reply,
-+ dbus_bool_t log,
-+ const char *privilege,
-+ DBusError *error);
-+
-+
- #endif /* BUS_BUS_H */
-diff --git a/bus/check.c b/bus/check.c
-index 4b8a699..f3d283f 100644
---- a/bus/check.c
-+++ b/bus/check.c
-@@ -49,6 +49,9 @@ typedef struct BusDeferredMessage
- DBusConnection *sender;
- DBusConnection *proposed_recipient;
- DBusConnection *addressed_recipient;
-+ dbus_bool_t requested_reply;
-+ int matched_rules;
-+ const char *privilege;
- dbus_bool_t full_dispatch;
- BusDeferredMessageStatus status;
- BusResult response;
-@@ -135,6 +138,89 @@ bus_check_enable_dispatch_callback (BusDeferredMessage *deferred_message,
- _dbus_connection_enable_dispatch(deferred_message->sender);
- }
-
-+static void
-+bus_check_queued_message_reply_callback (BusDeferredMessage *deferred_message,
-+ BusResult result)
-+{
-+ int status;
-+
-+ _dbus_verbose("bus_check_queued_message_reply_callback called message=%p\n", deferred_message);
-+
-+ if (!bus_connection_is_active(deferred_message->proposed_recipient))
-+ return;
-+
-+ status = deferred_message->status;
-+
-+ deferred_message->status = 0; /* mark message as not waiting for response */
-+ deferred_message->response = result;
-+
-+ /*
-+ * If send rule allows us to send message we still need to check receive rules.
-+ */
-+ if ((status & BUS_DEFERRED_MESSAGE_CHECK_SEND) && (result == BUS_RESULT_TRUE))
-+ {
-+ int toggles;
-+ BusContext *context;
-+ BusRegistry *registry;
-+ BusClientPolicy *recipient_policy;
-+ BusDeferredMessage *deferred_message_receive;
-+
-+ context = bus_connection_get_context(deferred_message->proposed_recipient);
-+ registry = bus_context_get_registry(context);
-+ recipient_policy = bus_connection_get_policy(deferred_message->proposed_recipient);
-+
-+ deferred_message->response = bus_client_policy_check_can_receive(recipient_policy, registry,
-+ deferred_message->requested_reply, deferred_message->sender,
-+ deferred_message->addressed_recipient, deferred_message->proposed_recipient, deferred_message->message,
-+ &toggles, NULL, &deferred_message_receive);
-+ if (deferred_message->response == BUS_RESULT_LATER)
-+ {
-+ /* replace deferred message associated with send check with the one associated with
-+ * receive check */
-+ if (!bus_deferred_message_replace(deferred_message, deferred_message_receive))
-+ {
-+ /* failed to replace deferred message (due to oom). Set it to rejected */
-+ deferred_message->response = BUS_RESULT_FALSE;
-+ }
-+ }
-+ }
-+
-+ bus_connection_dispatch_deferred(deferred_message->proposed_recipient);
-+}
-+
-+static void
-+queue_deferred_message_cancel_transaction_hook (void *data)
-+{
-+ BusDeferredMessage *deferred_message = (BusDeferredMessage *)data;
-+ bus_connection_remove_deferred_message(deferred_message->proposed_recipient, deferred_message);
-+}
-+
-+
-+dbus_bool_t
-+bus_deferred_message_queue_at_recipient (BusDeferredMessage *deferred_message,
-+ BusTransaction *transaction,
-+ dbus_bool_t full_dispatch,
-+ dbus_bool_t prepend)
-+{
-+ _dbus_assert(deferred_message != NULL);
-+ _dbus_assert(deferred_message->proposed_recipient != NULL);
-+
-+ if (!bus_connection_queue_deferred_message(deferred_message->proposed_recipient,
-+ deferred_message, prepend))
-+ return FALSE;
-+
-+ if (!bus_transaction_add_cancel_hook(transaction, queue_deferred_message_cancel_transaction_hook,
-+ deferred_message, NULL))
-+ {
-+ bus_connection_remove_deferred_message(deferred_message->proposed_recipient, deferred_message);
-+ return FALSE;
-+ }
-+ deferred_message->response_callback = bus_check_queued_message_reply_callback;
-+ deferred_message->full_dispatch = full_dispatch;
-+
-+ return TRUE;
-+}
-+
- static void
- deferred_message_free_function(void *data)
- {
-@@ -159,6 +245,20 @@ bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message)
- deferred_message->response_callback = bus_check_enable_dispatch_callback;
- }
-
-+void
-+bus_deferred_message_set_policy_check_info (BusDeferredMessage *deferred_message,
-+ dbus_bool_t requested_reply,
-+ int matched_rules,
-+ const char *privilege)
-+{
-+ _dbus_assert(deferred_message != NULL);
-+
-+ deferred_message->requested_reply = requested_reply;
-+ deferred_message->matched_rules = matched_rules;
-+ deferred_message->privilege = privilege;
-+}
-+
-+
- #ifdef DBUS_ENABLE_EMBEDDED_TESTS
- BusResult (*bus_check_test_override) (DBusConnection *connection,
- const char *privilege);
-@@ -259,6 +359,9 @@ BusDeferredMessage *bus_deferred_message_new (DBusMessage *message,
- deferred_message->addressed_recipient = addressed_recipient != NULL ? dbus_connection_ref(addressed_recipient) : NULL;
- deferred_message->proposed_recipient = proposed_recipient != NULL ? dbus_connection_ref(proposed_recipient) : NULL;
- deferred_message->message = dbus_message_ref(message);
-+ deferred_message->requested_reply = FALSE;
-+ deferred_message->matched_rules = 0;
-+ deferred_message->privilege = NULL;
- deferred_message->response = response;
- deferred_message->status = 0;
- deferred_message->full_dispatch = FALSE;
-@@ -295,12 +398,215 @@ bus_deferred_message_unref (BusDeferredMessage *deferred_message)
- }
- }
-
-+dbus_bool_t
-+bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message, DBusError *error)
-+{
-+ BusContext *context = bus_connection_get_context(deferred_message->proposed_recipient);
-+
-+ return bus_context_check_recipient_message_limits(context, deferred_message->proposed_recipient,
-+ deferred_message->sender, deferred_message->message, deferred_message->requested_reply,
-+ error);
-+}
-+
-+dbus_bool_t
-+bus_deferred_message_expect_method_reply(BusDeferredMessage *deferred_message, BusTransaction *transaction, DBusError *error)
-+{
-+ int type = dbus_message_get_type(deferred_message->message);
-+ if (type == DBUS_MESSAGE_TYPE_METHOD_CALL &&
-+ deferred_message->sender &&
-+ deferred_message->addressed_recipient &&
-+ deferred_message->addressed_recipient == deferred_message->proposed_recipient && /* not eavesdropping */
-+ !bus_connections_expect_reply (bus_connection_get_connections (deferred_message->sender),
-+ transaction,
-+ deferred_message->sender, deferred_message->addressed_recipient,
-+ deferred_message->message, error))
-+ {
-+ _dbus_verbose ("Failed to record reply expectation or problem with the message expecting a reply\n");
-+ return FALSE;
-+ }
-+ return TRUE;
-+}
-+
-+void
-+bus_deferred_message_create_error(BusDeferredMessage *deferred_message,
-+ const char *error_message, DBusError *error)
-+{
-+ BusContext *context;
-+ _dbus_assert (deferred_message->status == 0 && deferred_message->response == BUS_RESULT_FALSE);
-+
-+ if (deferred_message->sender == NULL)
-+ return; /* error won't be sent to bus driver anyway */
-+
-+ context = bus_connection_get_context(deferred_message->sender);
-+ bus_context_complain_about_message(context, DBUS_ERROR_ACCESS_DENIED, "Rejected message",
-+ deferred_message->matched_rules, deferred_message->message, deferred_message->sender,
-+ deferred_message->proposed_recipient, deferred_message->requested_reply, FALSE,
-+ deferred_message->privilege, error);
-+}
-+
-+BusResult
-+bus_deferred_message_dispatch (BusDeferredMessage *deferred_message)
-+{
-+ BusContext *context = bus_connection_get_context (deferred_message->proposed_recipient);
-+ BusTransaction *transaction = bus_transaction_new (context);
-+ BusResult result = BUS_RESULT_TRUE;
-+ DBusError error;
-+
-+ if (transaction == NULL)
-+ {
-+ return BUS_RESULT_FALSE;
-+ }
-+
-+ dbus_error_init(&error);
-+
-+ if (!deferred_message->full_dispatch)
-+ {
-+ result = deferred_message->response;
-+ if (result == BUS_RESULT_TRUE)
-+ {
-+ if (!bus_context_check_recipient_message_limits(context, deferred_message->proposed_recipient,
-+ deferred_message->sender, deferred_message->message, deferred_message->requested_reply, &error))
-+ result = BUS_RESULT_FALSE;
-+ }
-+ else if (result == BUS_RESULT_LATER)
-+ {
-+ BusDeferredMessage *deferred_message2;
-+ result = bus_context_check_security_policy (context, transaction,
-+ deferred_message->sender,
-+ deferred_message->addressed_recipient,
-+ deferred_message->proposed_recipient,
-+ deferred_message->message, NULL, NULL,
-+ &deferred_message2);
-+
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ /* prepend at recipient */
-+ if (!bus_deferred_message_queue_at_recipient(deferred_message2, transaction,
-+ FALSE, TRUE))
-+ result = BUS_RESULT_FALSE;
-+ }
-+ }
-+
-+ /* silently drop messages on access denial */
-+ if (result == BUS_RESULT_TRUE)
-+ {
-+ if (!bus_transaction_send (transaction, deferred_message->proposed_recipient, deferred_message->message, TRUE))
-+ result = BUS_RESULT_FALSE;
-+ }
-+
-+ bus_transaction_execute_and_free(transaction);
-+
-+ goto out;
-+ }
-+
-+ /* do not attempt to send message if sender has disconnected */
-+ if (deferred_message->sender != NULL && !bus_connection_is_active(deferred_message->sender))
-+ {
-+ bus_transaction_cancel_and_free(transaction);
-+ result = BUS_RESULT_FALSE;
-+ goto out;
-+ }
-+
-+ result = bus_dispatch_matches(transaction, deferred_message->sender,
-+ deferred_message->addressed_recipient, deferred_message->message, deferred_message, &error);
-+
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ /* Message deferring was already done in bus_dispatch_matches */
-+ bus_transaction_cancel_and_free(transaction);
-+ goto out;
-+ }
-+
-+ /* this part is a copy & paste from bus_dispatch function. Probably can be moved to a function */
-+ if (dbus_error_is_set (&error))
-+ {
-+ if (!dbus_connection_get_is_connected (deferred_message->sender))
-+ {
-+ /* If we disconnected it, we won't bother to send it any error
-+ * messages.
-+ */
-+ _dbus_verbose ("Not sending error to connection we disconnected\n");
-+ }
-+ else if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ bus_connection_send_oom_error (deferred_message->sender, deferred_message->message);
-+
-+ /* cancel transaction due to OOM */
-+ if (transaction != NULL)
-+ {
-+ bus_transaction_cancel_and_free (transaction);
-+ transaction = NULL;
-+ }
-+ }
-+ else
-+ {
-+ /* Try to send the real error, if no mem to do that, send
-+ * the OOM error
-+ */
-+ _dbus_assert (transaction != NULL);
-+ if (!bus_transaction_send_error_reply (transaction, deferred_message->sender,
-+ &error, deferred_message->message))
-+ {
-+ bus_connection_send_oom_error (deferred_message->sender, deferred_message->message);
-+
-+ /* cancel transaction due to OOM */
-+ if (transaction != NULL)
-+ {
-+ bus_transaction_cancel_and_free (transaction);
-+ transaction = NULL;
-+ }
-+ }
-+ }
-+ }
-+
-+ if (transaction != NULL)
-+ {
-+ bus_transaction_execute_and_free (transaction);
-+ }
-+
-+out:
-+ dbus_error_free(&error);
-+
-+ return result;
-+}
-+
-+dbus_bool_t
-+bus_deferred_message_replace (BusDeferredMessage *old_message, BusDeferredMessage *new_message)
-+{
-+ if (bus_connection_replace_deferred_message(old_message->proposed_recipient,
-+ old_message, new_message))
-+ {
-+ new_message->response_callback = old_message->response_callback;
-+ new_message->full_dispatch = old_message->full_dispatch;
-+ return TRUE;
-+ }
-+ return FALSE;
-+}
-+
-+dbus_bool_t
-+bus_deferred_message_waits_for_check(BusDeferredMessage *deferred_message)
-+{
-+ return deferred_message->status != 0;
-+}
-+
-+DBusConnection *
-+bus_deferred_message_get_recipient(BusDeferredMessage *deferred_message)
-+{
-+ return deferred_message->proposed_recipient;
-+}
-+
- BusDeferredMessageStatus
- bus_deferred_message_get_status (BusDeferredMessage *deferred_message)
- {
- return deferred_message->status;
- }
-
-+BusResult
-+bus_deferred_message_get_response (BusDeferredMessage *deferred_message)
-+{
-+ return deferred_message->response;
-+}
-+
- void
- bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
- BusResult result)
-@@ -310,3 +616,4 @@ bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
- deferred_message->response_callback(deferred_message, result);
- }
- }
-+
-diff --git a/bus/check.h b/bus/check.h
-index d177549..9c13c18 100644
---- a/bus/check.h
-+++ b/bus/check.h
-@@ -64,12 +64,37 @@ BusDeferredMessage *bus_deferred_message_new (DBusMessage *messag
-
- BusDeferredMessage *bus_deferred_message_ref (BusDeferredMessage *deferred_message);
- void bus_deferred_message_unref (BusDeferredMessage *deferred_message);
-+BusResult bus_deferred_message_dispatch (BusDeferredMessage *deferred_message);
-+dbus_bool_t bus_deferred_message_waits_for_check (BusDeferredMessage *deferred_message);
-+DBusConnection *bus_deferred_message_get_recipient (BusDeferredMessage *deferred_message);
- void bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
- BusResult result);
-+dbus_bool_t bus_deferred_message_queue_at_recipient (BusDeferredMessage *deferred_message,
-+ BusTransaction *transaction,
-+ dbus_bool_t full_dispatch,
-+ dbus_bool_t prepend);
-+dbus_bool_t bus_deferred_message_replace (BusDeferredMessage *old_message,
-+ BusDeferredMessage *new_message);
- void bus_deferred_message_disable_sender (BusDeferredMessage *deferred_message);
-+BusResult bus_deferred_message_get_response (BusDeferredMessage *deferred_message);
-
- BusDeferredMessageStatus bus_deferred_message_get_status (BusDeferredMessage *deferred_message);
-
-+
-+dbus_bool_t bus_deferred_message_expect_method_reply (BusDeferredMessage *deferred_message,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+void bus_deferred_message_create_error (BusDeferredMessage *deferred_message,
-+ const char *error_message,
-+ DBusError *error);
-+void bus_deferred_message_set_policy_check_info (BusDeferredMessage *deferred_message,
-+ dbus_bool_t requested_reply,
-+ int matched_rules,
-+ const char *privilege);
-+dbus_bool_t bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message,
-+ DBusError *error);
-+
-+
- #ifdef DBUS_ENABLE_EMBEDDED_TESTS
- extern BusResult (*bus_check_test_override) (DBusConnection *connection,
- const char *privilege);
-diff --git a/bus/connection.c b/bus/connection.c
-index b348d42..ee93384 100644
---- a/bus/connection.c
-+++ b/bus/connection.c
-@@ -31,11 +31,13 @@
- #include "expirelist.h"
- #include "selinux.h"
- #include "apparmor.h"
-+#include "check.h"
- #include <dbus/dbus-list.h>
- #include <dbus/dbus-hash.h>
- #include <dbus/dbus-timeout.h>
- #include <dbus/dbus-connection-internal.h>
- #include <dbus/dbus-internals.h>
-+#include <dbus/dbus-message-internal.h>
- #ifdef DBUS_ENABLE_CYNARA
- #include <stdlib.h>
- #include <cynara-session.h>
-@@ -102,6 +104,7 @@ typedef struct
- DBusMessage *oom_message;
- DBusPreallocatedSend *oom_preallocated;
- BusClientPolicy *policy;
-+ DBusList *deferred_messages; /**< Queue of messages deferred due to pending policy check */
-
- char *cached_loginfo_string;
- BusSELinuxID *selinux_id;
-@@ -268,6 +271,8 @@ bus_connection_disconnected (DBusConnection *connection)
- bus_transaction_execute_and_free (transaction);
- }
-
-+ bus_connection_clear_deferred_messages(connection);
-+
- bus_dispatch_remove_connection (connection);
-
- /* no more watching */
-@@ -2307,7 +2312,7 @@ bus_transaction_capture (BusTransaction *transaction,
- {
- DBusConnection *recipient = link->data;
-
-- if (!bus_transaction_send (transaction, recipient, message))
-+ if (!bus_transaction_send (transaction, recipient, message, FALSE))
- goto out;
- }
-
-@@ -2361,6 +2366,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction,
- {
- DBusError error = DBUS_ERROR_INIT;
- BusResult res;
-+ BusDeferredMessage *deferred_message;
-
- /* We have to set the sender to the driver, and have
- * to check security policy since it was not done in
-@@ -2401,7 +2407,7 @@ bus_transaction_send_from_driver (BusTransaction *transaction,
- res = bus_context_check_security_policy (bus_transaction_get_context (transaction),
- transaction,
- NULL, connection, connection, message, NULL,
-- &error, NULL);
-+ &error, &deferred_message);
- if (res == BUS_RESULT_FALSE)
- {
- if (!bus_transaction_capture_error_reply (transaction, connection,
-@@ -2419,18 +2425,20 @@ bus_transaction_send_from_driver (BusTransaction *transaction,
- }
- else if (res == BUS_RESULT_LATER)
- {
-- _dbus_verbose ("Cannot delay sending message from bus driver, dropping it\n");
- dbus_error_free (&error);
-- return TRUE;
-+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, FALSE, FALSE))
-+ return FALSE;
-+ return TRUE; /* pretend to have sent it */
- }
-
-- return bus_transaction_send (transaction, connection, message);
-+ return bus_transaction_send (transaction, connection, message, FALSE);
- }
-
- dbus_bool_t
- bus_transaction_send (BusTransaction *transaction,
- DBusConnection *connection,
-- DBusMessage *message)
-+ DBusMessage *message,
-+ dbus_bool_t deferred_dispatch)
- {
- MessageToSend *to_send;
- BusConnectionData *d;
-@@ -2456,7 +2464,28 @@ bus_transaction_send (BusTransaction *transaction,
-
- d = BUS_CONNECTION_DATA (connection);
- _dbus_assert (d != NULL);
--
-+
-+ if (!deferred_dispatch && d->deferred_messages != NULL)
-+ {
-+ BusDeferredMessage *deferred_message;
-+ dbus_bool_t success;
-+ /* sender and addressed recipient are not required at this point as we only need to send message
-+ * to a single recipient without performing policy check. */
-+ deferred_message = bus_deferred_message_new (message,
-+ NULL,
-+ NULL,
-+ connection,
-+ BUS_RESULT_TRUE);
-+ if (deferred_message == NULL)
-+ return FALSE;
-+
-+ success = bus_deferred_message_queue_at_recipient(deferred_message, transaction,
-+ FALSE, FALSE);
-+ bus_deferred_message_unref(deferred_message);
-+
-+ return success;
-+ }
-+
- to_send = dbus_new (MessageToSend, 1);
- if (to_send == NULL)
- {
-@@ -2708,6 +2737,131 @@ bus_transaction_add_cancel_hook (BusTransaction *transaction,
- return TRUE;
- }
-
-+void
-+bus_connection_dispatch_deferred (DBusConnection *connection)
-+{
-+ BusDeferredMessage *message;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+
-+ while ((message = bus_connection_pop_deferred_message(connection)) != NULL)
-+ {
-+ bus_deferred_message_dispatch(message);
-+ bus_deferred_message_unref(message);
-+ }
-+}
-+
-+dbus_bool_t
-+bus_connection_has_deferred_messages (DBusConnection *connection)
-+{
-+ BusConnectionData *d = BUS_CONNECTION_DATA(connection);
-+ return d->deferred_messages != NULL ? TRUE : FALSE;
-+}
-+
-+dbus_bool_t
-+bus_connection_queue_deferred_message (DBusConnection *connection,
-+ BusDeferredMessage *message,
-+ dbus_bool_t prepend)
-+{
-+ BusConnectionData *d = BUS_CONNECTION_DATA(connection);
-+ dbus_bool_t success;
-+ if (prepend)
-+ success = _dbus_list_prepend(&d->deferred_messages, message);
-+ else
-+ success = _dbus_list_append(&d->deferred_messages, message);
-+
-+ if (success)
-+ {
-+ bus_deferred_message_ref(message);
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+
-+dbus_bool_t
-+bus_connection_replace_deferred_message (DBusConnection *connection,
-+ BusDeferredMessage *oldMessage,
-+ BusDeferredMessage *newMessage)
-+{
-+ DBusList *link;
-+ BusConnectionData *d = BUS_CONNECTION_DATA(connection);
-+
-+ link = _dbus_list_find_first(&d->deferred_messages, oldMessage);
-+ if (link == NULL)
-+ return FALSE;
-+
-+ if (!_dbus_list_insert_after(&d->deferred_messages, link, newMessage))
-+ return FALSE;
-+
-+ bus_deferred_message_ref(newMessage);
-+ _dbus_list_remove_link(&d->deferred_messages, link);
-+ bus_deferred_message_unref(oldMessage);
-+ return TRUE;
-+}
-+
-+BusDeferredMessage *
-+bus_connection_pop_deferred_message (DBusConnection *connection)
-+{
-+ DBusList *link;
-+ BusDeferredMessage *message;
-+ BusConnectionData *d = BUS_CONNECTION_DATA(connection);
-+
-+ link =_dbus_list_get_first_link(&d->deferred_messages);
-+ if (link != NULL)
-+ {
-+ message = link->data;
-+ if (!bus_deferred_message_waits_for_check(message))
-+ {
-+ _dbus_list_remove_link(&d->deferred_messages, link);
-+ return message;
-+ }
-+ }
-+
-+ return NULL;
-+}
-+
-+dbus_bool_t
-+bus_connection_putback_deferred_message (DBusConnection *connection, BusDeferredMessage *message)
-+{
-+ BusConnectionData *d = BUS_CONNECTION_DATA(connection);
-+ if (_dbus_list_prepend(&d->deferred_messages, message))
-+ {
-+ return TRUE;
-+ }
-+ return FALSE;
-+}
-+
-+void
-+bus_connection_clear_deferred_messages (DBusConnection *connection)
-+{
-+ BusConnectionData *d = BUS_CONNECTION_DATA(connection);
-+ DBusList *link;
-+ DBusList *next;
-+ BusDeferredMessage *message;
-+
-+ link =_dbus_list_get_first_link(&d->deferred_messages);
-+ while (link != NULL)
-+ {
-+ next = _dbus_list_get_next_link (&d->deferred_messages, link);
-+ message = link->data;
-+
-+ bus_deferred_message_unref(message);
-+ _dbus_list_remove_link(&d->deferred_messages, link);
-+
-+ link = next;
-+ }
-+}
-+
-+void
-+bus_connection_remove_deferred_message (DBusConnection *connection,
-+ BusDeferredMessage *message)
-+{
-+ BusConnectionData *d = BUS_CONNECTION_DATA(connection);
-+ if (_dbus_list_remove(&d->deferred_messages, message))
-+ bus_deferred_message_unref(message);
-+}
-+
- int
- bus_connections_get_n_active (BusConnections *connections)
- {
-diff --git a/bus/connection.h b/bus/connection.h
-index 71078ea..97dae96 100644
---- a/bus/connection.h
-+++ b/bus/connection.h
-@@ -85,6 +85,22 @@ dbus_bool_t bus_connection_preallocate_oom_error (DBusConnection *connection);
- void bus_connection_send_oom_error (DBusConnection *connection,
- DBusMessage *in_reply_to);
-
-+dbus_bool_t bus_connection_has_deferred_messages (DBusConnection *connection);
-+dbus_bool_t bus_connection_queue_deferred_message (DBusConnection *connection,
-+ BusDeferredMessage *message,
-+ dbus_bool_t prepend);
-+BusDeferredMessage *bus_connection_pop_deferred_message (DBusConnection *connection);
-+dbus_bool_t bus_connection_putback_deferred_message (DBusConnection *connection,
-+ BusDeferredMessage *message);
-+void bus_connection_remove_deferred_message (DBusConnection *connection,
-+ BusDeferredMessage *message);
-+dbus_bool_t bus_connection_replace_deferred_message (DBusConnection *connection,
-+ BusDeferredMessage *oldMessage,
-+ BusDeferredMessage *newMessage);
-+void bus_connection_dispatch_deferred (DBusConnection *connection);
-+void bus_connection_clear_deferred_messages (DBusConnection *connection);
-+
-+
- /* called by signals.c */
- dbus_bool_t bus_connection_add_match_rule (DBusConnection *connection,
- BusMatchRule *rule);
-@@ -137,7 +153,8 @@ BusTransaction* bus_transaction_new (BusContext *
- BusContext* bus_transaction_get_context (BusTransaction *transaction);
- dbus_bool_t bus_transaction_send (BusTransaction *transaction,
- DBusConnection *connection,
-- DBusMessage *message);
-+ DBusMessage *message,
-+ dbus_bool_t deferred_dispatch);
- dbus_bool_t bus_transaction_capture (BusTransaction *transaction,
- DBusConnection *connection,
- DBusConnection *addressed_recipient,
-diff --git a/bus/dispatch.c b/bus/dispatch.c
-index 50a22a3..7d30ce4 100644
---- a/bus/dispatch.c
-+++ b/bus/dispatch.c
-@@ -33,6 +33,7 @@
- #include "utils.h"
- #include "bus.h"
- #include "signals.h"
-+#include "dispatch.h"
- #include "test.h"
- #include <dbus/dbus-internals.h>
- #include <dbus/dbus-connection-internal.h>
-@@ -77,7 +78,7 @@ send_one_message (DBusConnection *connection,
- NULL,
- &stack_error,
- &deferred_message);
-- if (result != BUS_RESULT_TRUE)
-+ if (result == BUS_RESULT_FALSE)
- {
- if (!bus_transaction_capture_error_reply (transaction, sender,
- &stack_error, message))
-@@ -112,9 +113,19 @@ send_one_message (DBusConnection *connection,
- return TRUE; /* don't send it but don't return an error either */
- }
-
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, FALSE, FALSE))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ return TRUE; /* pretend to have sent it */
-+ }
-+
- if (!bus_transaction_send (transaction,
- connection,
-- message))
-+ message, FALSE))
- {
- BUS_SET_OOM (error);
- return FALSE;
-@@ -124,11 +135,12 @@ send_one_message (DBusConnection *connection,
- }
-
- BusResult
--bus_dispatch_matches (BusTransaction *transaction,
-- DBusConnection *sender,
-- DBusConnection *addressed_recipient,
-- DBusMessage *message,
-- DBusError *error)
-+bus_dispatch_matches (BusTransaction *transaction,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusMessage *message,
-+ BusDeferredMessage *dispatched_deferred_message,
-+ DBusError *error)
- {
- DBusError tmp_error;
- BusConnections *connections;
-@@ -137,7 +149,6 @@ bus_dispatch_matches (BusTransaction *transaction,
- DBusList *link;
- BusContext *context;
- BusDeferredMessage *deferred_message;
-- BusResult res;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-
-@@ -153,16 +164,80 @@ bus_dispatch_matches (BusTransaction *transaction,
- /* First, send the message to the addressed_recipient, if there is one. */
- if (addressed_recipient != NULL)
- {
-- res = bus_context_check_security_policy (context, transaction,
-+ BusResult result;
-+ /* To maintain message order message needs to be appended at the recipient if there are already
-+ * deferred messages and we are not doing deferred dispatch
-+ */
-+ if (dispatched_deferred_message == NULL && bus_connection_has_deferred_messages(addressed_recipient))
-+ {
-+ deferred_message = bus_deferred_message_new(message, sender,
-+ addressed_recipient, addressed_recipient, BUS_RESULT_LATER);
-+
-+ if (deferred_message == NULL)
-+ {
-+ BUS_SET_OOM(error);
-+ return BUS_RESULT_FALSE;
-+ }
-+
-+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, FALSE))
-+ {
-+ bus_deferred_message_unref(deferred_message);
-+ BUS_SET_OOM(error);
-+ return BUS_RESULT_FALSE;
-+ }
-+
-+ bus_deferred_message_unref(deferred_message);
-+ return BUS_RESULT_TRUE; /* pretend to have sent it */
-+ }
-+
-+ if (dispatched_deferred_message != NULL)
-+ {
-+ result = bus_deferred_message_get_response(dispatched_deferred_message);
-+ if (result == BUS_RESULT_TRUE)
-+ {
-+ /* if we know the result of policy check we still need to check if message limits
-+ * are not exceeded. It is also required to add entry in expected replies list if
-+ * this is a method call
-+ */
-+ if (!bus_deferred_message_check_message_limits(dispatched_deferred_message, error))
-+ return BUS_RESULT_FALSE;
-+
-+ if (!bus_deferred_message_expect_method_reply(dispatched_deferred_message, transaction, error))
-+ return BUS_RESULT_FALSE;
-+ }
-+ else if (result == BUS_RESULT_FALSE)
-+ {
-+ bus_deferred_message_create_error(dispatched_deferred_message, "Rejected message", error);
-+ return BUS_RESULT_FALSE;
-+ }
-+ }
-+ else
-+ result = BUS_RESULT_LATER;
-+
-+ if (result == BUS_RESULT_LATER)
-+ result = bus_context_check_security_policy (context, transaction,
- sender, addressed_recipient,
- addressed_recipient,
- message, NULL, error,
- &deferred_message);
-- if (res == BUS_RESULT_FALSE)
-+
-+ if (result == BUS_RESULT_FALSE)
- return BUS_RESULT_FALSE;
-- else if (res == BUS_RESULT_LATER)
-+ else if (result == BUS_RESULT_LATER)
- {
- BusDeferredMessageStatus status;
-+
-+ if (dispatched_deferred_message != NULL)
-+ {
-+ /* for deferred dispatch prepend message at the recipient */
-+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, TRUE))
-+ {
-+ BUS_SET_OOM(error);
-+ return BUS_RESULT_FALSE;
-+ }
-+ return BUS_RESULT_TRUE; /* pretend to have sent it */
-+ }
-+
- status = bus_deferred_message_get_status(deferred_message);
-
- if (status & BUS_DEFERRED_MESSAGE_CHECK_SEND)
-@@ -173,13 +248,18 @@ bus_dispatch_matches (BusTransaction *transaction,
- }
- else if (status & BUS_DEFERRED_MESSAGE_CHECK_RECEIVE)
- {
-- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-- "Rejecting message because time is needed to check security policy");
-- return BUS_RESULT_FALSE;
-+ /* receive rule result not available - queue message at the recipient */
-+ if (!bus_deferred_message_queue_at_recipient(deferred_message, transaction, TRUE, FALSE))
-+ {
-+ BUS_SET_OOM(error);
-+ return BUS_RESULT_FALSE;
-+ }
-+
-+ return BUS_RESULT_TRUE; /* pretend to have sent it */
- }
- else
- {
-- _dbus_verbose("deferred message has no status field set to send or receive unexpectedly\n");
-+ _dbus_verbose("deferred message has no status field set unexpectedly\n");
- return BUS_RESULT_FALSE;
- }
- }
-@@ -196,7 +276,8 @@ bus_dispatch_matches (BusTransaction *transaction,
- }
-
- /* Dispatch the message */
-- if (!bus_transaction_send (transaction, addressed_recipient, message))
-+ if (!bus_transaction_send(transaction, addressed_recipient, message,
-+ dispatched_deferred_message != NULL ? TRUE : FALSE))
- {
- BUS_SET_OOM (error);
- return BUS_RESULT_FALSE;
-@@ -534,7 +615,7 @@ bus_dispatch (DBusConnection *connection,
- * match rules.
- */
- if (BUS_RESULT_LATER == bus_dispatch_matches (transaction, connection, addressed_recipient,
-- message, &error))
-+ message, NULL, &error))
- {
- /* Roll back and dispatch the message once the policy result is available */
- bus_transaction_cancel_and_free (transaction);
-diff --git a/bus/dispatch.h b/bus/dispatch.h
-index afba6a2..f6102e8 100644
---- a/bus/dispatch.h
-+++ b/bus/dispatch.h
-@@ -29,10 +29,11 @@
-
- dbus_bool_t bus_dispatch_add_connection (DBusConnection *connection);
- void bus_dispatch_remove_connection (DBusConnection *connection);
--BusResult bus_dispatch_matches (BusTransaction *transaction,
-- DBusConnection *sender,
-- DBusConnection *recipient,
-- DBusMessage *message,
-- DBusError *error);
-+BusResult bus_dispatch_matches (BusTransaction *transaction,
-+ DBusConnection *sender,
-+ DBusConnection *recipient,
-+ DBusMessage *message,
-+ BusDeferredMessage *dispatched_deferred_message,
-+ DBusError *error);
-
- #endif /* BUS_DISPATCH_H */
-diff --git a/bus/driver.c b/bus/driver.c
-index f414f64..d89a658 100644
---- a/bus/driver.c
-+++ b/bus/driver.c
-@@ -254,7 +254,7 @@ bus_driver_send_service_owner_changed (const char *service_name,
- if (!bus_transaction_capture (transaction, NULL, NULL, message))
- goto oom;
-
-- res = bus_dispatch_matches (transaction, NULL, NULL, message, error);
-+ res = bus_dispatch_matches (transaction, NULL, NULL, message, NULL, error);
- if (res == BUS_RESULT_TRUE)
- retval = TRUE;
- else
-diff --git a/bus/policy.c b/bus/policy.c
-index 7de92c6..483cc97 100644
---- a/bus/policy.c
-+++ b/bus/policy.c
-@@ -1122,6 +1122,9 @@ bus_client_policy_check_can_send (DBusConnection *sender,
-
- result = bus_check_privilege(check, message, sender, addressed_recipient, receiver,
- privilege, BUS_DEFERRED_MESSAGE_CHECK_SEND, deferred_message);
-+ if (result == BUS_RESULT_LATER && deferred_message != NULL)
-+ bus_deferred_message_set_policy_check_info(*deferred_message, requested_reply,
-+ *toggles, privilege);
- }
- else
- privilege = NULL;
-@@ -1372,6 +1375,9 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy,
-
- result = bus_check_privilege(check, message, sender, addressed_recipient, proposed_recipient,
- privilege, BUS_DEFERRED_MESSAGE_CHECK_RECEIVE, deferred_message);
-+ if (result == BUS_RESULT_LATER && deferred_message != NULL)
-+ bus_deferred_message_set_policy_check_info(*deferred_message, requested_reply,
-+ *toggles, privilege);
- }
- else
- privilege = NULL;
---
-2.21.1
-
diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch
deleted file mode 100644
index 9953dcaac..000000000
--- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0004-Add-own-rule-result-unavailability-handling.patch
+++ /dev/null
@@ -1,1505 +0,0 @@
-From 28ada62c98d74285dc22b66650b09b6c8f2c28c4 Mon Sep 17 00:00:00 2001
-From: Jacek Bukarewicz <j.bukarewicz@samsung.com>
-Date: Thu, 27 Nov 2014 11:26:21 +0100
-Subject: [PATCH 4/8] Add own rule result unavailability handling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Own rule result unavailability is handled like send rules - dispatching
-messages from the sender is blocked and resumed when result becomes
-available.
-
-Handler of "RequestName" method needs to return BUS_RESULT_LATER when
-policy result is not known therefore its return type is modified.
-Since bus message handlers are put into function pointer array other
-message handler function singatures are also affected.
-
-Cherry-picked from 35ef89cd6777ea2430077fc621d21bd01df92349 by Jose.bollo
-
-Updated for dbus 1.10.20 by Scott Murray and José Bollo
-
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
- bus/dispatch.c | 11 +-
- bus/driver.c | 334 ++++++++++++++++++++++++++++---------------------
- bus/driver.h | 2 +-
- bus/policy.c | 52 ++++++--
- bus/policy.h | 6 +-
- bus/services.c | 26 ++--
- bus/services.h | 3 +-
- bus/stats.c | 23 ++--
- bus/stats.h | 6 +-
- 9 files changed, 283 insertions(+), 180 deletions(-)
-
-diff --git a/bus/dispatch.c b/bus/dispatch.c
-index 7d30ce4..4b84c21 100644
---- a/bus/dispatch.c
-+++ b/bus/dispatch.c
-@@ -517,8 +517,17 @@ bus_dispatch (DBusConnection *connection,
- }
-
- _dbus_verbose ("Giving message to %s\n", DBUS_SERVICE_DBUS);
-- if (!bus_driver_handle_message (connection, transaction, message, &error))
-+ res = bus_driver_handle_message (connection, transaction, message, &error);
-+ if (res == BUS_RESULT_FALSE)
- goto out;
-+ else if (res == BUS_RESULT_LATER)
-+ {
-+ /* connection has been disabled in message handler */
-+ bus_transaction_cancel_and_free (transaction);
-+ transaction = NULL;
-+ result = DBUS_HANDLER_RESULT_LATER;
-+ goto out;
-+ }
- }
- else if (!bus_connection_is_active (connection)) /* clients must talk to bus driver first */
- {
-diff --git a/bus/driver.c b/bus/driver.c
-index d89a658..aaeb3b2 100644
---- a/bus/driver.c
-+++ b/bus/driver.c
-@@ -420,7 +420,7 @@ create_unique_client_name (BusRegistry *registry,
- return TRUE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_hello (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -428,7 +428,7 @@ bus_driver_handle_hello (DBusConnection *connection,
- {
- DBusString unique_name;
- BusService *service;
-- dbus_bool_t retval;
-+ BusResult retval;
- BusRegistry *registry;
- BusConnections *connections;
- DBusError tmp_error;
-@@ -442,7 +442,7 @@ bus_driver_handle_hello (DBusConnection *connection,
- /* We already handled an Hello message for this connection. */
- dbus_set_error (error, DBUS_ERROR_FAILED,
- "Already handled an Hello message");
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- /* Note that when these limits are exceeded we don't disconnect the
-@@ -464,16 +464,16 @@ bus_driver_handle_hello (DBusConnection *connection,
- bus_context_log (context, DBUS_SYSTEM_LOG_WARNING, "%s (%s=%d)",
- tmp_error.message, limit_name, limit);
- dbus_move_error (&tmp_error, error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- if (!_dbus_string_init (&unique_name))
- {
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
-- retval = FALSE;
-+ retval = BUS_RESULT_FALSE;
-
- registry = bus_connection_get_registry (connection);
-
-@@ -506,7 +506,7 @@ bus_driver_handle_hello (DBusConnection *connection,
- goto out_0;
-
- _dbus_assert (bus_connection_is_active (connection));
-- retval = TRUE;
-+ retval = BUS_RESULT_TRUE;
-
- out_0:
- _dbus_string_free (&unique_name);
-@@ -558,7 +558,7 @@ bus_driver_send_welcome_message (DBusConnection *connection,
- }
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_list_services (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -580,14 +580,14 @@ bus_driver_handle_list_services (DBusConnection *connection,
- if (reply == NULL)
- {
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- if (!bus_registry_list_services (registry, &services, &len))
- {
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- dbus_message_iter_init_append (reply, &iter);
-@@ -599,7 +599,7 @@ bus_driver_handle_list_services (DBusConnection *connection,
- dbus_free_string_array (services);
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- {
-@@ -611,7 +611,7 @@ bus_driver_handle_list_services (DBusConnection *connection,
- dbus_free_string_array (services);
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- }
-
-@@ -624,7 +624,7 @@ bus_driver_handle_list_services (DBusConnection *connection,
- dbus_free_string_array (services);
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- ++i;
- }
-@@ -635,23 +635,23 @@ bus_driver_handle_list_services (DBusConnection *connection,
- {
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- if (!bus_transaction_send_from_driver (transaction, connection, reply))
- {
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- else
- {
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
- }
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_list_activatable_services (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -673,14 +673,14 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection,
- if (reply == NULL)
- {
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- if (!bus_activation_list_services (activation, &services, &len))
- {
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- dbus_message_iter_init_append (reply, &iter);
-@@ -692,7 +692,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection,
- dbus_free_string_array (services);
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- {
-@@ -704,7 +704,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection,
- dbus_free_string_array (services);
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- }
-
-@@ -717,7 +717,7 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection,
- dbus_free_string_array (services);
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- ++i;
- }
-@@ -728,23 +728,23 @@ bus_driver_handle_list_activatable_services (DBusConnection *connection,
- {
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- if (!bus_transaction_send_from_driver (transaction, connection, reply))
- {
- dbus_message_unref (reply);
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- else
- {
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
- }
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_acquire_service (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -755,7 +755,8 @@ bus_driver_handle_acquire_service (DBusConnection *connection,
- const char *name;
- dbus_uint32_t service_reply;
- dbus_uint32_t flags;
-- dbus_bool_t retval;
-+ BusResult retval;
-+ BusResult res;
- BusRegistry *registry;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -766,20 +767,24 @@ bus_driver_handle_acquire_service (DBusConnection *connection,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_UINT32, &flags,
- DBUS_TYPE_INVALID))
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- _dbus_verbose ("Trying to own name %s with flags 0x%x\n", name, flags);
-
-- retval = FALSE;
-+ retval = BUS_RESULT_FALSE;
- reply = NULL;
-
- _dbus_string_init_const (&service_name, name);
-
-- if (!bus_registry_acquire_service (registry, connection,
-- &service_name, flags,
-- &service_reply, transaction,
-- error))
-- goto out;
-+ res = bus_registry_acquire_service (registry, connection, message,
-+ &service_name, flags,
-+ &service_reply, transaction,
-+ error);
-+ if (res != BUS_RESULT_TRUE)
-+ {
-+ retval = res;
-+ goto out;
-+ }
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL)
-@@ -800,7 +805,7 @@ bus_driver_handle_acquire_service (DBusConnection *connection,
- goto out;
- }
-
-- retval = TRUE;
-+ retval = BUS_RESULT_TRUE;
-
- out:
- if (reply)
-@@ -808,7 +813,7 @@ bus_driver_handle_acquire_service (DBusConnection *connection,
- return retval;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_release_service (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -818,7 +823,7 @@ bus_driver_handle_release_service (DBusConnection *connection,
- DBusString service_name;
- const char *name;
- dbus_uint32_t service_reply;
-- dbus_bool_t retval;
-+ BusResult retval;
- BusRegistry *registry;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -828,11 +833,11 @@ bus_driver_handle_release_service (DBusConnection *connection,
- if (!dbus_message_get_args (message, error,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_INVALID))
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- _dbus_verbose ("Trying to release name %s\n", name);
-
-- retval = FALSE;
-+ retval = BUS_RESULT_FALSE;
- reply = NULL;
-
- _dbus_string_init_const (&service_name, name);
-@@ -861,7 +866,7 @@ bus_driver_handle_release_service (DBusConnection *connection,
- goto out;
- }
-
-- retval = TRUE;
-+ retval = BUS_RESULT_TRUE;
-
- out:
- if (reply)
-@@ -869,7 +874,7 @@ bus_driver_handle_release_service (DBusConnection *connection,
- return retval;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_service_exists (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -880,7 +885,7 @@ bus_driver_handle_service_exists (DBusConnection *connection,
- BusService *service;
- dbus_bool_t service_exists;
- const char *name;
-- dbus_bool_t retval;
-+ BusResult retval;
- BusRegistry *registry;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -890,9 +895,9 @@ bus_driver_handle_service_exists (DBusConnection *connection,
- if (!dbus_message_get_args (message, error,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_INVALID))
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
-- retval = FALSE;
-+ retval = BUS_RESULT_FALSE;
-
- if (strcmp (name, DBUS_SERVICE_DBUS) == 0)
- {
-@@ -926,7 +931,7 @@ bus_driver_handle_service_exists (DBusConnection *connection,
- goto out;
- }
-
-- retval = TRUE;
-+ retval = BUS_RESULT_TRUE;
-
- out:
- if (reply)
-@@ -935,7 +940,7 @@ bus_driver_handle_service_exists (DBusConnection *connection,
- return retval;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_activate_service (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -943,7 +948,7 @@ bus_driver_handle_activate_service (DBusConnection *connection,
- {
- dbus_uint32_t flags;
- const char *name;
-- dbus_bool_t retval;
-+ BusResult retval;
- BusActivation *activation;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -957,10 +962,10 @@ bus_driver_handle_activate_service (DBusConnection *connection,
- {
- _DBUS_ASSERT_ERROR_IS_SET (error);
- _dbus_verbose ("No memory to get arguments to StartServiceByName\n");
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
-- retval = FALSE;
-+ retval = BUS_RESULT_FALSE;
-
- if (!bus_activation_activate_service (activation, connection, transaction, FALSE,
- message, name, error))
-@@ -970,7 +975,7 @@ bus_driver_handle_activate_service (DBusConnection *connection,
- goto out;
- }
-
-- retval = TRUE;
-+ retval = BUS_RESULT_TRUE;
-
- out:
- return retval;
-@@ -1072,13 +1077,13 @@ bus_driver_send_or_activate (BusTransaction *transaction,
- return TRUE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_update_activation_environment (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error)
- {
-- dbus_bool_t retval;
-+ BusResult retval;
- BusActivation *activation;
- BusContext *context;
- DBusMessageIter iter;
-@@ -1100,7 +1105,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection,
- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
- "Cannot change activation environment "
- "on a system bus.");
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- activation = bus_connection_get_activation (connection);
-@@ -1114,7 +1119,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection,
-
- dbus_message_iter_recurse (&iter, &dict_iter);
-
-- retval = FALSE;
-+ retval = BUS_RESULT_FALSE;
- systemd_message = NULL;
-
- /* Then loop through the sent dictionary, add the location of
-@@ -1279,7 +1284,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection,
- if (!bus_driver_send_ack_reply (connection, transaction, message, error))
- goto out;
-
-- retval = TRUE;
-+ retval = BUS_RESULT_TRUE;
-
- out:
- if (systemd_message != NULL)
-@@ -1289,7 +1294,7 @@ bus_driver_handle_update_activation_environment (DBusConnection *connection,
- return retval;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_add_match (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1371,16 +1376,16 @@ bus_driver_handle_add_match (DBusConnection *connection,
-
- bus_match_rule_unref (rule);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- failed:
- _DBUS_ASSERT_ERROR_IS_SET (error);
- if (rule)
- bus_match_rule_unref (rule);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_remove_match (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1423,16 +1428,16 @@ bus_driver_handle_remove_match (DBusConnection *connection,
-
- bus_match_rule_unref (rule);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- failed:
- _DBUS_ASSERT_ERROR_IS_SET (error);
- if (rule)
- bus_match_rule_unref (rule);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_service_owner (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1502,7 +1507,7 @@ bus_driver_handle_get_service_owner (DBusConnection *connection,
-
- dbus_message_unref (reply);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -1511,10 +1516,10 @@ bus_driver_handle_get_service_owner (DBusConnection *connection,
- _DBUS_ASSERT_ERROR_IS_SET (error);
- if (reply)
- dbus_message_unref (reply);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_list_queued_owners (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1606,7 +1611,7 @@ bus_driver_handle_list_queued_owners (DBusConnection *connection,
-
- dbus_message_unref (reply);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -1619,10 +1624,10 @@ bus_driver_handle_list_queued_owners (DBusConnection *connection,
- if (base_names)
- _dbus_list_clear (&base_names);
-
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_connection_unix_user (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1679,7 +1684,7 @@ bus_driver_handle_get_connection_unix_user (DBusConnection *connection,
-
- dbus_message_unref (reply);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -1688,10 +1693,10 @@ bus_driver_handle_get_connection_unix_user (DBusConnection *connection,
- _DBUS_ASSERT_ERROR_IS_SET (error);
- if (reply)
- dbus_message_unref (reply);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1748,7 +1753,7 @@ bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection,
-
- dbus_message_unref (reply);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -1757,10 +1762,10 @@ bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection,
- _DBUS_ASSERT_ERROR_IS_SET (error);
- if (reply)
- dbus_message_unref (reply);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1811,7 +1816,7 @@ bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection,
-
- dbus_message_unref (reply);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -1820,10 +1825,10 @@ bus_driver_handle_get_adt_audit_session_data (DBusConnection *connection,
- _DBUS_ASSERT_ERROR_IS_SET (error);
- if (reply)
- dbus_message_unref (reply);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_connection_selinux_security_context (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1872,7 +1877,7 @@ bus_driver_handle_get_connection_selinux_security_context (DBusConnection *conne
-
- dbus_message_unref (reply);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -1881,10 +1886,10 @@ bus_driver_handle_get_connection_selinux_security_context (DBusConnection *conne
- _DBUS_ASSERT_ERROR_IS_SET (error);
- if (reply)
- dbus_message_unref (reply);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_connection_credentials (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -1998,7 +2003,7 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection,
-
- dbus_message_unref (reply);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -2012,10 +2017,10 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection,
- dbus_message_unref (reply);
- }
-
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_reload_config (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -2040,7 +2045,7 @@ bus_driver_handle_reload_config (DBusConnection *connection,
- goto oom;
-
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -2049,11 +2054,11 @@ bus_driver_handle_reload_config (DBusConnection *connection,
- _DBUS_ASSERT_ERROR_IS_SET (error);
- if (reply)
- dbus_message_unref (reply);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- #ifdef DBUS_ENABLE_VERBOSE_MODE
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_enable_verbose (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -2073,7 +2078,7 @@ bus_driver_handle_enable_verbose (DBusConnection *connection,
- _dbus_set_verbose(TRUE);
-
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -2082,10 +2087,10 @@ bus_driver_handle_enable_verbose (DBusConnection *connection,
-
- if (reply)
- dbus_message_unref (reply);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_disable_verbose (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -2105,7 +2110,7 @@ bus_driver_handle_disable_verbose (DBusConnection *connection,
- _dbus_set_verbose(FALSE);
-
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -2114,11 +2119,11 @@ bus_driver_handle_disable_verbose (DBusConnection *connection,
-
- if (reply)
- dbus_message_unref (reply);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
- #endif
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_id (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -2134,7 +2139,7 @@ bus_driver_handle_get_id (DBusConnection *connection,
- if (!_dbus_string_init (&uuid))
- {
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- reply = NULL;
-@@ -2160,7 +2165,7 @@ bus_driver_handle_get_id (DBusConnection *connection,
-
- _dbus_string_free (&uuid);
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -2170,10 +2175,10 @@ bus_driver_handle_get_id (DBusConnection *connection,
- if (reply)
- dbus_message_unref (reply);
- _dbus_string_free (&uuid);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_become_monitor (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -2189,7 +2194,7 @@ bus_driver_handle_become_monitor (DBusConnection *connection,
- int i;
- int n_match_rules;
- dbus_uint32_t flags;
-- dbus_bool_t ret = FALSE;
-+ BusResult ret = BUS_RESULT_FALSE;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-
-@@ -2262,10 +2267,10 @@ bus_driver_handle_become_monitor (DBusConnection *connection,
- if (!bus_connection_be_monitor (connection, transaction, &rules, error))
- goto out;
-
-- ret = TRUE;
-+ ret = BUS_RESULT_TRUE;
-
- out:
-- if (ret)
-+ if (ret == BUS_RESULT_TRUE)
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
- else
- _DBUS_ASSERT_ERROR_IS_SET (error);
-@@ -2281,7 +2286,7 @@ out:
- return ret;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_machine_id (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -2296,7 +2301,7 @@ bus_driver_handle_get_machine_id (DBusConnection *connection,
- if (!_dbus_string_init (&uuid))
- {
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- if (!_dbus_get_local_machine_uuid_encoded (&uuid, error))
-@@ -2321,7 +2326,7 @@ bus_driver_handle_get_machine_id (DBusConnection *connection,
-
- _dbus_string_free (&uuid);
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-@@ -2335,29 +2340,30 @@ fail:
- dbus_message_unref (reply);
-
- _dbus_string_free (&uuid);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_ping (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error)
- {
-- return bus_driver_send_ack_reply (connection, transaction, message, error);
-+ return bus_driver_send_ack_reply (connection, transaction, message, error) == TRUE
-+ ? BUS_RESULT_TRUE : BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t bus_driver_handle_get (DBusConnection *connection,
-+static BusResult bus_driver_handle_get (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error);
-
--static dbus_bool_t bus_driver_handle_get_all (DBusConnection *connection,
-+static BusResult bus_driver_handle_get_all (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error);
-
--static dbus_bool_t bus_driver_handle_set (DBusConnection *connection,
-+static BusResult bus_driver_handle_set (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error);
-@@ -2389,10 +2395,10 @@ typedef struct
- const char *name;
- const char *in_args;
- const char *out_args;
-- dbus_bool_t (* handler) (DBusConnection *connection,
-- BusTransaction *transaction,
-- DBusMessage *message,
-- DBusError *error);
-+ BusResult (* handler) (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error);
- MethodFlags flags;
- } MessageHandler;
-
-@@ -2511,7 +2517,7 @@ static const PropertyHandler dbus_property_handlers[] = {
- { NULL, NULL, NULL }
- };
-
--static dbus_bool_t bus_driver_handle_introspect (DBusConnection *,
-+static BusResult bus_driver_handle_introspect (DBusConnection *,
- BusTransaction *, DBusMessage *, DBusError *);
-
- static const MessageHandler properties_message_handlers[] = {
-@@ -2763,7 +2769,7 @@ bus_driver_generate_introspect_string (DBusString *xml,
- return TRUE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_introspect (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -2784,13 +2790,13 @@ bus_driver_handle_introspect (DBusConnection *connection,
- DBUS_TYPE_INVALID))
- {
- _DBUS_ASSERT_ERROR_IS_SET (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- if (!_dbus_string_init (&xml))
- {
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- is_canonical_path = dbus_message_has_path (message, DBUS_PATH_DBUS);
-@@ -2815,7 +2821,7 @@ bus_driver_handle_introspect (DBusConnection *connection,
- dbus_message_unref (reply);
- _dbus_string_free (&xml);
-
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -2825,10 +2831,42 @@ bus_driver_handle_introspect (DBusConnection *connection,
-
- _dbus_string_free (&xml);
-
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
-+/*
-+ * Set @error and return FALSE if the message is not directed to the
-+ * dbus-daemon by its canonical object path. This is hardening against
-+ * system services with poorly-written security policy files, which
-+ * might allow sending dangerously broad equivalence classes of messages
-+ * such as "anything with this assumed-to-be-safe object path".
-+ *
-+ * dbus-daemon is unusual in that it normally ignores the object path
-+ * of incoming messages; we need to keep that behaviour for the "read"
-+ * read-only method calls like GetConnectionUnixUser for backwards
-+ * compatibility, but it seems safer to be more restrictive for things
-+ * intended to be root-only or privileged-developers-only.
-+ *
-+ * It is possible that there are other system services with the same
-+ * quirk as dbus-daemon.
-+ */
- dbus_bool_t
-+bus_driver_check_message_is_for_us (DBusMessage *message,
-+ DBusError *error)
-+{
-+ if (!dbus_message_has_path (message, DBUS_PATH_DBUS))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "Method '%s' is only available at the canonical object path '%s'",
-+ dbus_message_get_member (message), DBUS_PATH_DBUS);
-+
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+BusResult
- bus_driver_handle_message (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -2839,6 +2877,7 @@ bus_driver_handle_message (DBusConnection *connection,
- const MessageHandler *mh;
- dbus_bool_t found_interface = FALSE;
- dbus_bool_t is_canonical_path;
-+ BusResult res;
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-
-@@ -2854,7 +2893,7 @@ bus_driver_handle_message (DBusConnection *connection,
- transaction,
- message,
- error))
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- context = bus_connection_get_context (connection);
- systemd = bus_driver_get_owner_of_name (connection,
-@@ -2871,7 +2910,7 @@ bus_driver_handle_message (DBusConnection *connection,
- attacker ? attacker : "(unauthenticated)",
- bus_connection_get_loginfo (connection));
- /* ignore it */
-- return TRUE;
-+ return BUS_RESULT_TRUE;
- }
-
- if (!bus_context_get_systemd_activation (context))
-@@ -2879,16 +2918,16 @@ bus_driver_handle_message (DBusConnection *connection,
- bus_context_log (context, DBUS_SYSTEM_LOG_WARNING,
- "Ignoring unexpected ActivationFailure message "
- "while not using systemd activation");
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
-- return dbus_activation_systemd_failure(bus_context_get_activation(context), message);
-+ return dbus_activation_systemd_failure(bus_context_get_activation(context), message) == TRUE ? BUS_RESULT_TRUE : BUS_RESULT_FALSE;
- }
-
- if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
- {
- _dbus_verbose ("Driver got a non-method-call message, ignoring\n");
-- return TRUE; /* we just ignore this */
-+ return BUS_RESULT_TRUE; /* we just ignore this */
- }
-
- /* may be NULL, which means "any interface will do" */
-@@ -2953,20 +2992,27 @@ bus_driver_handle_message (DBusConnection *connection,
- name, dbus_message_get_signature (message),
- mh->in_args);
- _DBUS_ASSERT_ERROR_IS_SET (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
-- if ((* mh->handler) (connection, transaction, message, error))
-+ res = (* mh->handler) (connection, transaction, message, error);
-+ if (res == BUS_RESULT_TRUE)
- {
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
- _dbus_verbose ("Driver handler succeeded\n");
-- return TRUE;
-+ return BUS_RESULT_TRUE;
- }
-- else
-+ else if (res == BUS_RESULT_FALSE)
- {
- _DBUS_ASSERT_ERROR_IS_SET (error);
- _dbus_verbose ("Driver handler returned failure\n");
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-+ }
-+ else if (res == BUS_RESULT_LATER)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ _dbus_verbose ("Driver handler delayed message processing due to policy check\n");
-+ return BUS_RESULT_LATER;
- }
- }
- }
-@@ -2978,7 +3024,7 @@ bus_driver_handle_message (DBusConnection *connection,
- "%s does not understand message %s",
- DBUS_SERVICE_DBUS, name);
-
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- void
-@@ -3099,7 +3145,7 @@ interface_handler_find_property (const InterfaceHandler *ih,
- return NULL;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -3120,18 +3166,18 @@ bus_driver_handle_get (DBusConnection *connection,
- DBUS_TYPE_STRING, &iface,
- DBUS_TYPE_STRING, &prop,
- DBUS_TYPE_INVALID))
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- /* We only implement Properties on /org/freedesktop/DBus so far. */
- ih = bus_driver_find_interface (iface, TRUE, error);
-
- if (ih == NULL)
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- handler = interface_handler_find_property (ih, prop, error);
-
- if (handler == NULL)
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- context = bus_transaction_get_context (transaction);
-
-@@ -3159,17 +3205,17 @@ bus_driver_handle_get (DBusConnection *connection,
- goto oom;
-
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- if (reply != NULL)
- dbus_message_unref (reply);
-
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_get_all (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -3188,13 +3234,13 @@ bus_driver_handle_get_all (DBusConnection *connection,
- if (!dbus_message_get_args (message, error,
- DBUS_TYPE_STRING, &iface,
- DBUS_TYPE_INVALID))
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- /* We only implement Properties on /org/freedesktop/DBus so far. */
- ih = bus_driver_find_interface (iface, TRUE, error);
-
- if (ih == NULL)
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- context = bus_transaction_get_context (transaction);
-
-@@ -3229,7 +3275,7 @@ bus_driver_handle_get_all (DBusConnection *connection,
- goto oom;
-
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom_abandon_message:
- _dbus_asv_abandon (&reply_iter, &array_iter);
-@@ -3239,10 +3285,10 @@ oom:
- dbus_message_unref (reply);
-
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--static dbus_bool_t
-+static BusResult
- bus_driver_handle_set (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -3271,15 +3317,15 @@ bus_driver_handle_set (DBusConnection *connection,
- ih = bus_driver_find_interface (iface, TRUE, error);
-
- if (ih == NULL)
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- handler = interface_handler_find_property (ih, prop, error);
-
- if (handler == NULL)
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- /* We don't implement any properties that can be set yet. */
- dbus_set_error (error, DBUS_ERROR_PROPERTY_READ_ONLY,
- "Property '%s.%s' cannot be set", iface, prop);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-diff --git a/bus/driver.h b/bus/driver.h
-index a7297ad..05e9886 100644
---- a/bus/driver.h
-+++ b/bus/driver.h
-@@ -35,7 +35,7 @@ typedef enum
- } BusDriverFound;
-
- void bus_driver_remove_connection (DBusConnection *connection);
--dbus_bool_t bus_driver_handle_message (DBusConnection *connection,
-+BusResult bus_driver_handle_message (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error);
-diff --git a/bus/policy.c b/bus/policy.c
-index 483cc97..f6f4d85 100644
---- a/bus/policy.c
-+++ b/bus/policy.c
-@@ -1390,18 +1390,21 @@ bus_client_policy_check_can_receive (BusClientPolicy *policy,
-
-
-
--static dbus_bool_t
-+static BusResult
- bus_rules_check_can_own (DBusList *rules,
-- const DBusString *service_name)
-+ const DBusString *service_name,
-+ DBusConnection *connection,
-+ DBusMessage *message)
- {
- DBusList *link;
-- dbus_bool_t allowed;
-+ BusResult result;
-+ const char *privilege;
-
- /* rules is in the order the rules appeared
- * in the config file, i.e. last rule that applies wins
- */
-
-- allowed = FALSE;
-+ result = BUS_RESULT_FALSE;
- link = _dbus_list_get_first_link (&rules);
- while (link != NULL)
- {
-@@ -1437,17 +1440,46 @@ bus_rules_check_can_own (DBusList *rules,
- }
-
- /* Use this rule */
-- allowed = rule->access == BUS_POLICY_RULE_ACCESS_ALLOW;
-+ switch (rule->access)
-+ {
-+ case BUS_POLICY_RULE_ACCESS_ALLOW:
-+ result = BUS_RESULT_TRUE;
-+ break;
-+ default:
-+ case BUS_POLICY_RULE_ACCESS_DENY:
-+ result = BUS_RESULT_FALSE;
-+ break;
-+ case BUS_POLICY_RULE_ACCESS_CHECK:
-+ result = BUS_RESULT_LATER;
-+ privilege = rule->privilege;
-+ break;
-+ }
- }
-
-- return allowed;
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ BusContext *context = bus_connection_get_context(connection);
-+ BusCheck *check = bus_context_get_check(context);
-+ BusDeferredMessage *deferred_message;
-+
-+ result = bus_check_privilege(check, message, connection, NULL, NULL,
-+ privilege, BUS_DEFERRED_MESSAGE_CHECK_OWN, &deferred_message);
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ bus_deferred_message_disable_sender(deferred_message);
-+ }
-+ }
-+
-+ return result;
- }
-
--dbus_bool_t
-+BusResult
- bus_client_policy_check_can_own (BusClientPolicy *policy,
-- const DBusString *service_name)
-+ const DBusString *service_name,
-+ DBusConnection *connection,
-+ DBusMessage *message)
- {
-- return bus_rules_check_can_own (policy->rules, service_name);
-+ return bus_rules_check_can_own (policy->rules, service_name, connection, message);
- }
-
- #ifdef DBUS_ENABLE_EMBEDDED_TESTS
-@@ -1455,7 +1487,7 @@ dbus_bool_t
- bus_policy_check_can_own (BusPolicy *policy,
- const DBusString *service_name)
- {
-- return bus_rules_check_can_own (policy->default_rules, service_name);
-+ return bus_rules_check_can_own (policy->default_rules, service_name, NULL, NULL) == BUS_RESULT_TRUE;
- }
- #endif /* DBUS_ENABLE_EMBEDDED_TESTS */
-
-diff --git a/bus/policy.h b/bus/policy.h
-index f839d23..28ce8f2 100644
---- a/bus/policy.h
-+++ b/bus/policy.h
-@@ -182,8 +182,10 @@ BusResult bus_client_policy_check_can_receive (BusClientPolicy *policy,
- dbus_int32_t *toggles,
- const char **privilege_param,
- BusDeferredMessage **deferred_message);
--dbus_bool_t bus_client_policy_check_can_own (BusClientPolicy *policy,
-- const DBusString *service_name);
-+BusResult bus_client_policy_check_can_own (BusClientPolicy *policy,
-+ const DBusString *service_name,
-+ DBusConnection *connection,
-+ DBusMessage *message);
- dbus_bool_t bus_client_policy_append_rule (BusClientPolicy *policy,
- BusPolicyRule *rule);
- void bus_client_policy_optimize (BusClientPolicy *policy);
-diff --git a/bus/services.c b/bus/services.c
-index 127edda..586af18 100644
---- a/bus/services.c
-+++ b/bus/services.c
-@@ -376,16 +376,17 @@ bus_registry_list_services (BusRegistry *registry,
- return FALSE;
- }
-
--dbus_bool_t
-+BusResult
- bus_registry_acquire_service (BusRegistry *registry,
- DBusConnection *connection,
-+ DBusMessage *message,
- const DBusString *service_name,
- dbus_uint32_t flags,
- dbus_uint32_t *result,
- BusTransaction *transaction,
- DBusError *error)
- {
-- dbus_bool_t retval;
-+ BusResult retval;
- DBusConnection *old_owner_conn;
- BusClientPolicy *policy;
- BusService *service;
-@@ -393,8 +394,9 @@ bus_registry_acquire_service (BusRegistry *registry,
- BusSELinuxID *sid;
- BusOwner *primary_owner;
- int limit;
-+ BusResult res;
-
-- retval = FALSE;
-+ retval = BUS_RESULT_FALSE;
-
- if (!_dbus_validate_bus_name (service_name, 0,
- _dbus_string_get_length (service_name)))
-@@ -467,7 +469,8 @@ bus_registry_acquire_service (BusRegistry *registry,
- _dbus_string_get_const_data (service_name), error))
- goto out;
-
-- if (!bus_client_policy_check_can_own (policy, service_name))
-+ res = bus_client_policy_check_can_own (policy, service_name, connection, message);
-+ if (res == BUS_RESULT_FALSE)
- {
- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
- "Connection \"%s\" is not allowed to own the service \"%s\" due "
-@@ -478,6 +481,11 @@ bus_registry_acquire_service (BusRegistry *registry,
- _dbus_string_get_const_data (service_name));
- goto out;
- }
-+ else if (res == BUS_RESULT_LATER)
-+ {
-+ retval = BUS_RESULT_LATER;
-+ goto out;
-+ }
-
- limit = bus_context_get_max_services_per_connection (registry->context);
-
-@@ -603,11 +611,13 @@ bus_registry_acquire_service (BusRegistry *registry,
- }
-
- activation = bus_context_get_activation (registry->context);
-- retval = bus_activation_send_pending_auto_activation_messages (activation,
-+
-+ if (bus_activation_send_pending_auto_activation_messages (activation,
- service,
-- transaction);
-- if (!retval)
-- BUS_SET_OOM (error);
-+ transaction))
-+ retval = BUS_RESULT_TRUE;
-+ else
-+ BUS_SET_OOM (error);
-
- out:
- return retval;
-diff --git a/bus/services.h b/bus/services.h
-index 056dd9f..3df3dd7 100644
---- a/bus/services.h
-+++ b/bus/services.h
-@@ -50,8 +50,9 @@ void bus_registry_foreach (BusRegistry *registry
- dbus_bool_t bus_registry_list_services (BusRegistry *registry,
- char ***listp,
- int *array_len);
--dbus_bool_t bus_registry_acquire_service (BusRegistry *registry,
-+BusResult bus_registry_acquire_service (BusRegistry *registry,
- DBusConnection *connection,
-+ DBusMessage *message,
- const DBusString *service_name,
- dbus_uint32_t flags,
- dbus_uint32_t *result,
-diff --git a/bus/stats.c b/bus/stats.c
-index 1582255..c25be98 100644
---- a/bus/stats.c
-+++ b/bus/stats.c
-@@ -36,7 +36,7 @@
-
- #ifdef DBUS_ENABLE_STATS
-
--dbus_bool_t
-+BusResult
- bus_stats_handle_get_stats (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -51,6 +51,9 @@ bus_stats_handle_get_stats (DBusConnection *connection,
-
- _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-
-+ if (!bus_driver_check_message_is_for_us (message, error))
-+ return BUS_RESULT_FALSE;
-+
- context = bus_transaction_get_context (transaction);
- connections = bus_context_get_connections (context);
-
-@@ -104,17 +107,17 @@ bus_stats_handle_get_stats (DBusConnection *connection,
- goto oom;
-
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- if (reply != NULL)
- dbus_message_unref (reply);
-
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
--dbus_bool_t
-+BusResult
- bus_stats_handle_get_connection_stats (DBusConnection *caller_connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -209,7 +212,7 @@ bus_stats_handle_get_connection_stats (DBusConnection *caller_connection,
- goto oom;
-
- dbus_message_unref (reply);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- BUS_SET_OOM (error);
-@@ -218,11 +221,11 @@ failed:
- if (reply != NULL)
- dbus_message_unref (reply);
-
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
-
--dbus_bool_t
-+BusResult
- bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection,
- BusTransaction *transaction,
- DBusMessage *message,
-@@ -246,7 +249,7 @@ bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection,
- matchmaker = bus_context_get_matchmaker (context);
-
- if (!bus_registry_list_services (registry, &services, &services_len))
-- return FALSE;
-+ return BUS_RESULT_FALSE;
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL)
-@@ -325,7 +328,7 @@ bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection,
-
- dbus_message_unref (reply);
- dbus_free_string_array (services);
-- return TRUE;
-+ return BUS_RESULT_TRUE;
-
- oom:
- if (reply != NULL)
-@@ -334,7 +337,7 @@ oom:
- dbus_free_string_array (services);
-
- BUS_SET_OOM (error);
-- return FALSE;
-+ return BUS_RESULT_FALSE;
- }
-
- #endif
-diff --git a/bus/stats.h b/bus/stats.h
-index dcb022c..683fa17 100644
---- a/bus/stats.h
-+++ b/bus/stats.h
-@@ -25,17 +25,17 @@
-
- #define BUS_INTERFACE_STATS "org.freedesktop.DBus.Debug.Stats"
-
--dbus_bool_t bus_stats_handle_get_stats (DBusConnection *connection,
-+BusResult bus_stats_handle_get_stats (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error);
-
--dbus_bool_t bus_stats_handle_get_connection_stats (DBusConnection *connection,
-+BusResult bus_stats_handle_get_connection_stats (DBusConnection *connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error);
-
--dbus_bool_t bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection,
-+BusResult bus_stats_handle_get_all_match_rules (DBusConnection *caller_connection,
- BusTransaction *transaction,
- DBusMessage *message,
- DBusError *error);
---
-2.21.1
-
diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch
deleted file mode 100644
index 5f7e96a3b..000000000
--- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0005-Perform-Cynara-runtime-policy-checks-by-default.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-From 1f7ba56c9ced669951061d13b06e31d96a170e37 Mon Sep 17 00:00:00 2001
-From: Jacek Bukarewicz <j.bukarewicz@samsung.com>
-Date: Tue, 23 Jun 2015 11:08:48 +0200
-Subject: [PATCH 5/8] Perform Cynara runtime policy checks by default
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This change introduces http://tizen.org/privilege/internal/dbus privilege
-which is supposed to be available only to trusted system resources.
-Checks for this privilege are used in place of certain allow rules to
-make security policy more strict.
-
-For system bus sending and receiving signals now requires
-http://tizen.org/privilege/internal/dbus privilege. Requesting name
-ownership and sending methods is still denied by default.
-
-For session bus http://tizen.org/privilege/internal/dbus privilege
-is now required for requesting name, calling methods, sending and receiving
-signals.
-
-Services are supposed to override these default settings to implement their
-own security policy.
-
-Cherry picked from e8610297cf7031e94eb314a2e8c11246f4405403 by Jose Bollo
-
-Updated for dbus 1.10.20 by Scott Murray and José Bollo
-
-Signed-off-by: Jacek Bukarewicz <j.bukarewicz@samsung.com>
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
- bus/activation.c | 42 ++++++++++++++++++++++++++----------------
- bus/session.conf.in | 32 ++++++++++++++++++++++++++------
- bus/system.conf.in | 19 +++++++++++++++----
- 3 files changed, 67 insertions(+), 26 deletions(-)
-
-diff --git a/bus/activation.c b/bus/activation.c
-index d4b597c..8aabeaa 100644
---- a/bus/activation.c
-+++ b/bus/activation.c
-@@ -1840,22 +1840,32 @@ bus_activation_activate_service (BusActivation *activation,
- }
-
- if (auto_activation &&
-- entry != NULL &&
-- BUS_RESULT_TRUE != bus_context_check_security_policy (activation->context,
-- transaction,
-- connection, /* sender */
-- NULL, /* addressed recipient */
-- NULL, /* proposed recipient */
-- activation_message,
-- entry,
-- error,
-- NULL))
-- {
-- _DBUS_ASSERT_ERROR_IS_SET (error);
-- _dbus_verbose ("activation not authorized: %s: %s\n",
-- error != NULL ? error->name : "(error ignored)",
-- error != NULL ? error->message : "(error ignored)");
-- return FALSE;
-+ entry != NULL)
-+ {
-+ BusResult result;
-+
-+ result = bus_context_check_security_policy (activation->context,
-+ transaction,
-+ connection, /* sender */
-+ NULL, /* addressed recipient */
-+ NULL, /* proposed recipient */
-+ activation_message,
-+ entry,
-+ error,
-+ NULL);
-+ if (result == BUS_RESULT_FALSE)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_verbose ("activation not authorized: %s: %s\n",
-+ error != NULL ? error->name : "(error ignored)",
-+ error != NULL ? error->message : "(error ignored)");
-+ return FALSE;
-+ }
-+ if (result == BUS_RESULT_LATER)
-+ {
-+ /* TODO */
-+ _dbus_verbose ("ALERT FIX ME!!!!!!!!!!!!!!!");
-+ }
- }
-
- /* Bypass the registry lookup if we're auto-activating, bus_dispatch would not
-diff --git a/bus/session.conf.in b/bus/session.conf.in
-index affa7f1..157dfb4 100644
---- a/bus/session.conf.in
-+++ b/bus/session.conf.in
-@@ -27,12 +27,32 @@
- <standard_session_servicedirs />
-
- <policy context="default">
-- <!-- Allow everything to be sent -->
-- <allow send_destination="*" eavesdrop="true"/>
-- <!-- Allow everything to be received -->
-- <allow eavesdrop="true"/>
-- <!-- Allow anyone to own anything -->
-- <allow own="*"/>
-+ <!-- By default clients require internal/dbus privilege to communicate
-+ with D-Bus services and to claim name ownership. This is internal privilege that
-+ is only accessible to trusted system services -->
-+ <check own="*" privilege="http://tizen.org/privilege/internal/dbus" />
-+ <check send_type="method_call" privilege="http://tizen.org/privilege/internal/dbus" />
-+ <check send_type="signal" privilege="http://tizen.org/privilege/internal/dbus" />
-+ <check receive_type="signal" privilege="http://tizen.org/privilege/internal/dbus" />
-+
-+ <!-- Reply messages (method returns, errors) are allowed
-+ by default -->
-+ <allow send_requested_reply="true" send_type="method_return"/>
-+ <allow send_requested_reply="true" send_type="error"/>
-+
-+ <!-- All messages but signals may be received by default -->
-+ <allow receive_type="method_call"/>
-+ <allow receive_type="method_return"/>
-+ <allow receive_type="error"/>
-+
-+ <!-- Allow anyone to talk to the message bus -->
-+ <allow send_destination="org.freedesktop.DBus"/>
-+ <allow receive_sender="org.freedesktop.DBus"/>
-+
-+ <!-- But disallow some specific bus services -->
-+ <deny send_destination="org.freedesktop.DBus"
-+ send_interface="org.freedesktop.DBus"
-+ send_member="UpdateActivationEnvironment"/>
- </policy>
-
- <!-- Include legacy configuration location -->
-diff --git a/bus/system.conf.in b/bus/system.conf.in
-index f139b55..19d0c04 100644
---- a/bus/system.conf.in
-+++ b/bus/system.conf.in
-@@ -50,17 +50,20 @@
- <deny own="*"/>
- <deny send_type="method_call"/>
-
-- <!-- Signals and reply messages (method returns, errors) are allowed
-+ <!-- By default clients require internal/dbus privilege to send and receive signaks.
-+ This is internal privilege that is only accessible to trusted system services -->
-+ <check send_type="signal" privilege="http://tizen.org/privilege/internal/dbus" />
-+ <check receive_type="signal" privilege="http://tizen.org/privilege/internal/dbus" />
-+
-+ <!-- Reply messages (method returns, errors) are allowed
- by default -->
-- <allow send_type="signal"/>
- <allow send_requested_reply="true" send_type="method_return"/>
- <allow send_requested_reply="true" send_type="error"/>
-
-- <!-- All messages may be received by default -->
-+ <!-- All messages but signals may be received by default -->
- <allow receive_type="method_call"/>
- <allow receive_type="method_return"/>
- <allow receive_type="error"/>
-- <allow receive_type="signal"/>
-
- <!-- Allow anyone to talk to the message bus -->
- <allow send_destination="org.freedesktop.DBus"
-@@ -69,6 +72,14 @@
- send_interface="org.freedesktop.DBus.Introspectable"/>
- <allow send_destination="org.freedesktop.DBus"
- send_interface="org.freedesktop.DBus.Properties"/>
-+ <!-- If there is a need specific bus services could be protected by Cynara as well.
-+ However, this can lead to deadlock during the boot process when such check is made and
-+ Cynara is not yet activated (systemd calls protected method synchronously,
-+ dbus daemon tries to consult Cynara, Cynara waits for systemd activation).
-+ Therefore it is advised to allow root processes to use bus services.
-+ Currently anyone is allowed to talk to the message bus -->
-+ <allow receive_sender="org.freedesktop.DBus"/>
-+
- <!-- But disallow some specific bus services -->
- <deny send_destination="org.freedesktop.DBus"
- send_interface="org.freedesktop.DBus"
---
-2.21.1
-
diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0006-Fix-SIGSEGV-on-disconnections.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0006-Fix-SIGSEGV-on-disconnections.patch
deleted file mode 100644
index e51ad7ce4..000000000
--- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0006-Fix-SIGSEGV-on-disconnections.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From 28077faa11827e1ca7a7245ffd62ee78091b6bd2 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Fri, 16 Aug 2019 13:29:23 +0200
-Subject: [PATCH 6/8] Fix SIGSEGV on disconnections
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Sometime, at start of the system, dbus-daemon was crashing
-because a pending authorisation were reactivating a closed
-connection.
-
-Also, clean unused function.
-
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- bus/check.c | 5 +++++
- bus/check.h | 1 +
- bus/connection.c | 14 +++-----------
- bus/connection.h | 3 ---
- 4 files changed, 9 insertions(+), 14 deletions(-)
-
-diff --git a/bus/check.c b/bus/check.c
-index f3d283f..b73d08b 100644
---- a/bus/check.c
-+++ b/bus/check.c
-@@ -617,3 +617,8 @@ bus_deferred_message_response_received (BusDeferredMessage *deferred_message,
- }
- }
-
-+void
-+bus_deferred_message_abort (BusDeferredMessage *deferred_message)
-+{
-+ deferred_message->response_callback = NULL;
-+}
-diff --git a/bus/check.h b/bus/check.h
-index 9c13c18..d718a69 100644
---- a/bus/check.h
-+++ b/bus/check.h
-@@ -93,6 +93,7 @@ void bus_deferred_message_set_policy_check_info (BusDeferredMessa
- const char *privilege);
- dbus_bool_t bus_deferred_message_check_message_limits (BusDeferredMessage *deferred_message,
- DBusError *error);
-+void bus_deferred_message_abort (BusDeferredMessage *deferred_message);
-
-
- #ifdef DBUS_ENABLE_EMBEDDED_TESTS
-diff --git a/bus/connection.c b/bus/connection.c
-index ee93384..b520d57 100644
---- a/bus/connection.c
-+++ b/bus/connection.c
-@@ -47,6 +47,7 @@
- #define MAX_LOG_COMMAND_LEN 50
-
- static void bus_connection_remove_transactions (DBusConnection *connection);
-+static void bus_connection_clear_deferred_messages (DBusConnection *connection);
-
- typedef struct
- {
-@@ -2821,17 +2822,7 @@ bus_connection_pop_deferred_message (DBusConnection *connection)
- return NULL;
- }
-
--dbus_bool_t
--bus_connection_putback_deferred_message (DBusConnection *connection, BusDeferredMessage *message)
--{
-- BusConnectionData *d = BUS_CONNECTION_DATA(connection);
-- if (_dbus_list_prepend(&d->deferred_messages, message))
-- {
-- return TRUE;
-- }
-- return FALSE;
--}
--
-+static
- void
- bus_connection_clear_deferred_messages (DBusConnection *connection)
- {
-@@ -2846,6 +2837,7 @@ bus_connection_clear_deferred_messages (DBusConnection *connection)
- next = _dbus_list_get_next_link (&d->deferred_messages, link);
- message = link->data;
-
-+ bus_deferred_message_abort(message);
- bus_deferred_message_unref(message);
- _dbus_list_remove_link(&d->deferred_messages, link);
-
-diff --git a/bus/connection.h b/bus/connection.h
-index 97dae96..6af7bf1 100644
---- a/bus/connection.h
-+++ b/bus/connection.h
-@@ -90,15 +90,12 @@ dbus_bool_t bus_connection_queue_deferred_message (DBusConnection *con
- BusDeferredMessage *message,
- dbus_bool_t prepend);
- BusDeferredMessage *bus_connection_pop_deferred_message (DBusConnection *connection);
--dbus_bool_t bus_connection_putback_deferred_message (DBusConnection *connection,
-- BusDeferredMessage *message);
- void bus_connection_remove_deferred_message (DBusConnection *connection,
- BusDeferredMessage *message);
- dbus_bool_t bus_connection_replace_deferred_message (DBusConnection *connection,
- BusDeferredMessage *oldMessage,
- BusDeferredMessage *newMessage);
- void bus_connection_dispatch_deferred (DBusConnection *connection);
--void bus_connection_clear_deferred_messages (DBusConnection *connection);
-
-
- /* called by signals.c */
---
-2.21.1
-
diff --git a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch b/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch
deleted file mode 100644
index 7a69efcd2..000000000
--- a/meta-security/recipes-core/dbus-cynagora/dbus-cynagora/0007-Switch-from-cynara-to-cynagora.patch
+++ /dev/null
@@ -1,1048 +0,0 @@
-From 43cc361a5c32c81c0f93451bdb0ef781cd19a1cb Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Tue, 4 Feb 2020 12:23:36 +0100
-Subject: [PATCH 7/8] Switch from cynara to cynagora
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- bus/Makefile.am | 8 +-
- bus/bus.h | 2 +-
- bus/check.c | 26 +-
- bus/check.h | 2 +-
- bus/connection.c | 27 ---
- bus/connection.h | 3 -
- bus/cynagora-check.c | 330 +++++++++++++++++++++++++
- bus/{cynara.h => cynagora-check.h} | 10 +-
- bus/cynara.c | 373 -----------------------------
- bus/system.conf.in | 6 +-
- configure.ac | 18 +-
- 11 files changed, 366 insertions(+), 439 deletions(-)
- create mode 100644 bus/cynagora-check.c
- rename bus/{cynara.h => cynagora-check.h} (81%)
- delete mode 100644 bus/cynara.c
-
-diff --git a/bus/Makefile.am b/bus/Makefile.am
-index 2a8a72c..1720048 100644
---- a/bus/Makefile.am
-+++ b/bus/Makefile.am
-@@ -13,7 +13,7 @@ DBUS_BUS_LIBS = \
- $(THREAD_LIBS) \
- $(ADT_LIBS) \
- $(NETWORK_libs) \
-- $(CYNARA_LIBS) \
-+ $(CYNAGORA_LIBS) \
- $(NULL)
-
- DBUS_LAUNCHER_LIBS = \
-@@ -31,7 +31,7 @@ AM_CPPFLAGS = \
- $(APPARMOR_CFLAGS) \
- -DDBUS_SYSTEM_CONFIG_FILE=\""$(dbusdatadir)/system.conf"\" \
- -DDBUS_COMPILATION \
-- $(CYNARA_CFLAGS) \
-+ $(CYNAGORA_CFLAGS) \
- $(NULL)
-
- # if assertions are enabled, improve backtraces
-@@ -101,8 +101,8 @@ BUS_SOURCES= \
- config-parser-common.h \
- connection.c \
- connection.h \
-- cynara.c \
-- cynara.h \
-+ cynagora-check.c \
-+ cynagora-check.h \
- desktop-file.c \
- desktop-file.h \
- $(DIR_WATCH_SOURCE) \
-diff --git a/bus/bus.h b/bus/bus.h
-index 1b08f7c..e167d9e 100644
---- a/bus/bus.h
-+++ b/bus/bus.h
-@@ -47,7 +47,7 @@ typedef struct BusMatchRule BusMatchRule;
- typedef struct BusActivationEntry BusActivationEntry;
- typedef struct BusCheck BusCheck;
- typedef struct BusDeferredMessage BusDeferredMessage;
--typedef struct BusCynara BusCynara;
-+typedef struct BusCynagora BusCynagora;
-
- /**
- * BusResult is defined as a pointer to a dummy structure to allow detection of type mismatches.
-diff --git a/bus/check.c b/bus/check.c
-index b73d08b..ec30770 100644
---- a/bus/check.c
-+++ b/bus/check.c
-@@ -26,7 +26,7 @@
- #include "check.h"
- #include "connection.h"
- #include "dispatch.h"
--#include "cynara.h"
-+#include "cynagora-check.h"
- #include "utils.h"
- #include <dbus/dbus-connection-internal.h>
- #include <dbus/dbus-message-internal.h>
-@@ -38,7 +38,7 @@ typedef struct BusCheck
- int refcount;
-
- BusContext *context;
-- BusCynara *cynara;
-+ BusCynagora *cynagora;
- } BusCheck;
-
- typedef struct BusDeferredMessage
-@@ -81,7 +81,7 @@ bus_check_new (BusContext *context, DBusError *error)
-
- check->refcount = 1;
- check->context = context;
-- check->cynara = bus_cynara_new(check, error);
-+ check->cynagora = bus_cynagora_new(check, error);
- if (dbus_error_is_set(error))
- {
- dbus_message_free_data_slot(&deferred_message_data_slot);
-@@ -110,7 +110,7 @@ bus_check_unref (BusCheck *check)
-
- if (check->refcount == 0)
- {
-- bus_cynara_unref(check->cynara);
-+ bus_cynagora_unref(check->cynagora);
- dbus_message_free_data_slot(&deferred_message_data_slot);
- dbus_free(check);
- }
-@@ -122,10 +122,10 @@ bus_check_get_context (BusCheck *check)
- return check->context;
- }
-
--BusCynara *
--bus_check_get_cynara (BusCheck *check)
-+BusCynagora *
-+bus_check_get_cynagora (BusCheck *check)
- {
-- return check->cynara;
-+ return check->cynagora;
- }
-
- static void
-@@ -276,8 +276,8 @@ bus_check_privilege (BusCheck *check,
- {
- BusDeferredMessage *previous_deferred_message;
- BusResult result = BUS_RESULT_FALSE;
--#ifdef DBUS_ENABLE_CYNARA
-- BusCynara *cynara;
-+#ifdef DBUS_ENABLE_CYNAGORA
-+ BusCynagora *cynagora;
- #endif
- DBusConnection *connection;
-
-@@ -304,7 +304,7 @@ bus_check_privilege (BusCheck *check,
- * Message has been deferred due to receive or own rule which means that sending this message
- * is allowed - it must have been checked previously.
- * This might happen when client calls RequestName method which depending on security
-- * policy might result in both "can_send" and "can_own" Cynara checks.
-+ * policy might result in both "can_send" and "can_own" Cynagora checks.
- */
- result = BUS_RESULT_TRUE;
- }
-@@ -327,9 +327,9 @@ bus_check_privilege (BusCheck *check,
- else
- {
- /* ask policy checkers */
--#ifdef DBUS_ENABLE_CYNARA
-- cynara = bus_check_get_cynara(check);
-- result = bus_cynara_check_privilege(cynara, message, sender, addressed_recipient,
-+#ifdef DBUS_ENABLE_CYNAGORA
-+ cynagora = bus_check_get_cynagora(check);
-+ result = bus_cynagora_check_privilege(cynagora, message, sender, addressed_recipient,
- proposed_recipient, privilege, check_type, deferred_message);
- #endif
- if (result == BUS_RESULT_LATER && deferred_message != NULL)
-diff --git a/bus/check.h b/bus/check.h
-index d718a69..ab63c18 100644
---- a/bus/check.h
-+++ b/bus/check.h
-@@ -45,7 +45,7 @@ BusCheck *bus_check_ref (BusCheck *check);
- void bus_check_unref (BusCheck *check);
-
- BusContext *bus_check_get_context (BusCheck *check);
--BusCynara *bus_check_get_cynara (BusCheck *check);
-+BusCynagora *bus_check_get_cynagora (BusCheck *check);
- BusResult bus_check_privilege (BusCheck *check,
- DBusMessage *message,
- DBusConnection *sender,
-diff --git a/bus/connection.c b/bus/connection.c
-index b520d57..48910e0 100644
---- a/bus/connection.c
-+++ b/bus/connection.c
-@@ -38,10 +38,6 @@
- #include <dbus/dbus-connection-internal.h>
- #include <dbus/dbus-internals.h>
- #include <dbus/dbus-message-internal.h>
--#ifdef DBUS_ENABLE_CYNARA
--#include <stdlib.h>
--#include <cynara-session.h>
--#endif
-
- /* Trim executed commands to this length; we want to keep logs readable */
- #define MAX_LOG_COMMAND_LEN 50
-@@ -124,9 +120,6 @@ typedef struct
-
- /** non-NULL if and only if this is a monitor */
- DBusList *link_in_monitors;
--#ifdef DBUS_ENABLE_CYNARA
-- char *cynara_session_id;
--#endif
- } BusConnectionData;
-
- static dbus_bool_t bus_pending_reply_expired (BusExpireList *list,
-@@ -461,10 +454,6 @@ free_connection_data (void *data)
-
- dbus_free (d->name);
-
--#ifdef DBUS_ENABLE_CYNARA
-- free (d->cynara_session_id);
--#endif
--
- dbus_free (d);
- }
-
-@@ -1095,22 +1084,6 @@ bus_connection_get_policy (DBusConnection *connection)
- return d->policy;
- }
-
--#ifdef DBUS_ENABLE_CYNARA
--const char *bus_connection_get_cynara_session_id (DBusConnection *connection)
--{
-- BusConnectionData *d = BUS_CONNECTION_DATA (connection);
-- _dbus_assert (d != NULL);
--
-- if (d->cynara_session_id == NULL)
-- {
-- unsigned long pid;
-- if (dbus_connection_get_unix_process_id(connection, &pid))
-- d->cynara_session_id = cynara_session_from_pid(pid);
-- }
-- return d->cynara_session_id;
--}
--#endif
--
- static dbus_bool_t
- foreach_active (BusConnections *connections,
- BusConnectionForeachFunction function,
-diff --git a/bus/connection.h b/bus/connection.h
-index 6af7bf1..3116bcf 100644
---- a/bus/connection.h
-+++ b/bus/connection.h
-@@ -138,9 +138,6 @@ dbus_bool_t bus_connection_be_monitor (DBusConnection *connection,
- BusTransaction *transaction,
- DBusList **rules,
- DBusError *error);
--#ifdef DBUS_ENABLE_CYNARA
--const char *bus_connection_get_cynara_session_id (DBusConnection *connection);
--#endif
-
- /* transaction API so we can send or not send a block of messages as a whole */
-
-diff --git a/bus/cynagora-check.c b/bus/cynagora-check.c
-new file mode 100644
-index 0000000..6c0c635
---- /dev/null
-+++ b/bus/cynagora-check.c
-@@ -0,0 +1,330 @@
-+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-+/* cynagora.c Cynagora runtime privilege checking
-+ *
-+ * Copyright (c) 2014 Samsung Electronics, Ltd.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "cynagora-check.h"
-+#include "check.h"
-+#include "utils.h"
-+
-+#include <stdlib.h>
-+#include <stdio.h>
-+#include <errno.h>
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-watch.h>
-+#include <dbus/dbus-connection-internal.h>
-+#include <bus/connection.h>
-+
-+#ifndef DBUS_ENABLE_CYNAGORA
-+
-+BusCynagora *
-+bus_cynagora_new(BusCheck *check, DBusError *error)
-+{
-+ return NULL;
-+}
-+
-+BusCynagora *
-+bus_cynagora_ref (BusCynagora *cynagora)
-+{
-+ return NULL;
-+}
-+
-+void
-+bus_cynagora_unref (BusCynagora *cynagora)
-+{
-+}
-+
-+BusResult
-+bus_cynagora_check_privilege (BusCynagora *cynagora,
-+ DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ const char *privilege,
-+ BusDeferredMessageStatus check_type,
-+ BusDeferredMessage **deferred_message_param)
-+{
-+ return BUS_RESULT_FALSE;
-+}
-+
-+#endif
-+
-+#ifdef DBUS_ENABLE_CYNAGORA
-+
-+#include <time.h>
-+#include <sys/epoll.h>
-+
-+#include <cynagora.h>
-+
-+#ifndef CYNAGORA_CACHE_SIZE
-+#define CYNAGORA_CACHE_SIZE 8000
-+#endif
-+
-+typedef struct BusCynagora
-+{
-+ int refcount;
-+
-+ BusContext *context;
-+ BusCheck *check;
-+ cynagora_t *cynagora;
-+ DBusWatch *cynagora_watch;
-+} BusCynagora;
-+
-+static int async_callback(void *closure,
-+ int op,
-+ int fd,
-+ uint32_t events);
-+
-+BusCynagora *
-+bus_cynagora_new(BusCheck *check, DBusError *error)
-+{
-+ BusContext *context;
-+ BusCynagora *cynagora;
-+ int ret;
-+
-+ cynagora = dbus_new(BusCynagora, 1);
-+ if (cynagora == NULL)
-+ {
-+ BUS_SET_OOM(error);
-+ return NULL;
-+ }
-+
-+ context = bus_check_get_context(check);
-+
-+ cynagora->refcount = 1;
-+ cynagora->check = check;
-+ cynagora->context = context;
-+ cynagora->cynagora_watch = NULL;
-+
-+ ret = cynagora_create(&cynagora->cynagora, cynagora_Check, CYNAGORA_CACHE_SIZE, NULL);
-+ if (ret < 0)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynagora configuration");
-+ }
-+ else
-+ {
-+ ret = cynagora_async_setup(cynagora->cynagora, async_callback, cynagora);
-+ if (ret < 0)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynagora client");
-+ }
-+ else
-+ {
-+ return cynagora;
-+ }
-+ cynagora_destroy(cynagora->cynagora);
-+ }
-+
-+ dbus_free(cynagora);
-+ return NULL;
-+}
-+
-+BusCynagora *
-+bus_cynagora_ref (BusCynagora *cynagora)
-+{
-+ _dbus_assert (cynagora->refcount > 0);
-+ cynagora->refcount += 1;
-+
-+ return cynagora;
-+}
-+
-+void
-+bus_cynagora_unref (BusCynagora *cynagora)
-+{
-+ _dbus_assert (cynagora->refcount > 0);
-+
-+ cynagora->refcount -= 1;
-+
-+ if (cynagora->refcount == 0)
-+ {
-+ cynagora_destroy(cynagora->cynagora);
-+ dbus_free(cynagora);
-+ }
-+}
-+
-+static void
-+async_check_callback (void *closure, int status)
-+{
-+ BusDeferredMessage *deferred_message = closure;
-+ BusResult result;
-+
-+ if (deferred_message == NULL)
-+ return;
-+
-+ if (status == 1)
-+ result = BUS_RESULT_TRUE;
-+ else
-+ result = BUS_RESULT_FALSE;
-+
-+ bus_deferred_message_response_received(deferred_message, result);
-+ bus_deferred_message_unref(deferred_message);
-+}
-+
-+BusResult
-+bus_cynagora_check_privilege (BusCynagora *cynagora,
-+ DBusMessage *message,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ const char *permission,
-+ BusDeferredMessageStatus check_type,
-+ BusDeferredMessage **deferred_message_param)
-+{
-+ int result;
-+ unsigned long uid;
-+ unsigned long pid;
-+ char *label;
-+ char user[32];
-+ char session[32];
-+ DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender;
-+ BusDeferredMessage *deferred_message;
-+ BusResult ret;
-+ cynagora_key_t key;
-+
-+ _dbus_assert(connection != NULL);
-+
-+ if (dbus_connection_get_unix_user(connection, &uid) == FALSE)
-+ return BUS_RESULT_FALSE;
-+
-+ if (dbus_connection_get_unix_process_id(connection, &pid) == FALSE)
-+ return BUS_RESULT_FALSE;
-+
-+ if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL)
-+ {
-+ _dbus_warn("Failed to obtain security label for connection\n");
-+ return BUS_RESULT_FALSE;
-+ }
-+
-+ snprintf(user, sizeof(user), "%lu", uid);
-+ snprintf(session, sizeof(session), "%lu", pid);
-+
-+ key.client = label;
-+ key.session = session;
-+ key.user = user;
-+ key.permission = permission;
-+
-+ result = cynagora_cache_check(cynagora->cynagora, &key);
-+ switch (result)
-+ {
-+ case 1:
-+ _dbus_verbose("Cynagora: got ALLOWED answer from cache (client=%s session_id=%s user=%s permission=%s)\n",
-+ label, session_id, user, permission);
-+ ret = BUS_RESULT_TRUE;
-+ break;
-+
-+ case 0:
-+ _dbus_verbose("Cynagora: got DENIED answer from cache (client=%s session_id=%s user=%s permission=%s)\n",
-+ label, session_id, user, permission);
-+ ret = BUS_RESULT_FALSE;
-+ break;
-+
-+ default:
-+ deferred_message = bus_deferred_message_new(message, sender, addressed_recipient,
-+ proposed_recipient, BUS_RESULT_LATER);
-+ if (deferred_message == NULL)
-+ {
-+ _dbus_verbose("Failed to allocate memory for deferred message\n");
-+ ret = BUS_RESULT_FALSE;
-+ goto out;
-+ }
-+
-+ /* callback is supposed to unref deferred_message*/
-+ result = cynagora_async_check(cynagora->cynagora, &key, 1, 0, async_check_callback, deferred_message);
-+ if (result == 0)
-+ {
-+ _dbus_verbose("Created Cynagora request: client=%s session_id=%s user=%s permission=%s "
-+ "deferred_message=%p\n", label, session_id, user, permission, deferred_message);
-+ if (deferred_message_param != NULL)
-+ *deferred_message_param = deferred_message;
-+ ret = BUS_RESULT_LATER;
-+ }
-+ else
-+ {
-+ _dbus_verbose("Error on cynagora request create: %i\n", result);
-+ bus_deferred_message_unref(deferred_message);
-+ ret = BUS_RESULT_FALSE;
-+ }
-+ break;
-+ }
-+out:
-+ dbus_free(label);
-+ return ret;
-+}
-+
-+static dbus_bool_t
-+watch_handler_callback(DBusWatch *watch,
-+ unsigned int flags,
-+ void *data)
-+{
-+ BusCynagora *cynagora = (BusCynagora *)data;
-+ int result = cynagora_async_process(cynagora->cynagora);
-+ if (result < 0)
-+ _dbus_verbose("cynagora_async_process returned %d\n", result);
-+
-+ return result != -ENOMEM ? TRUE : FALSE;
-+}
-+
-+static int
-+async_callback(void *closure, int op, int fd, uint32_t events)
-+{
-+ BusCynagora *cynagora = (BusCynagora *)closure;
-+ DBusLoop *loop = bus_context_get_loop(cynagora->context);
-+ unsigned int flags;
-+ DBusWatch *watch;
-+
-+ /* compute flags */
-+ flags = 0;
-+ if (events & EPOLLIN)
-+ flags |= DBUS_WATCH_READABLE;
-+ if (events & EPOLLOUT)
-+ flags |= DBUS_WATCH_WRITABLE;
-+
-+ /* remove the watch if needed */
-+ watch = cynagora->cynagora_watch;
-+ if (watch != NULL)
-+ {
-+ cynagora->cynagora_watch = NULL;
-+ _dbus_loop_remove_watch(loop, watch);
-+ _dbus_watch_invalidate(watch);
-+ _dbus_watch_unref(watch);
-+ }
-+
-+ /* create the watch if needed */
-+ watch = cynagora->cynagora_watch;
-+ if (op != EPOLL_CTL_DEL)
-+ {
-+ watch = _dbus_watch_new(fd, flags, TRUE, watch_handler_callback, cynagora, NULL);
-+ if (watch == NULL)
-+ return -ENOMEM;
-+ if (_dbus_loop_add_watch(loop, watch) != TRUE)
-+ {
-+ _dbus_watch_invalidate(watch);
-+ _dbus_watch_unref(watch);
-+ return -ENOMEM;
-+ }
-+ cynagora->cynagora_watch = watch;
-+ }
-+ return 0;
-+}
-+
-+#endif /* DBUS_ENABLE_CYNAGORA */
-diff --git a/bus/cynara.h b/bus/cynagora-check.h
-similarity index 81%
-rename from bus/cynara.h
-rename to bus/cynagora-check.h
-index c4728bb..c0892c3 100644
---- a/bus/cynara.h
-+++ b/bus/cynagora-check.h
-@@ -1,5 +1,5 @@
- /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
--/* cynara.h Cynara runtime privilege checking
-+/* cynagora.h Cynagora runtime privilege checking
- *
- * Copyright (c) 2014 Samsung Electronics, Ltd.
- *
-@@ -24,10 +24,10 @@
- #include "bus.h"
- #include "check.h"
-
--BusCynara *bus_cynara_new (BusCheck *check, DBusError *error);
--BusCynara *bus_cynara_ref (BusCynara *cynara);
--void bus_cynara_unref (BusCynara *cynara);
--BusResult bus_cynara_check_privilege (BusCynara *cynara,
-+BusCynagora *bus_cynagora_new (BusCheck *check, DBusError *error);
-+BusCynagora *bus_cynagora_ref (BusCynagora *cynagora);
-+void bus_cynagora_unref (BusCynagora *cynagora);
-+BusResult bus_cynagora_check_privilege (BusCynagora *cynagora,
- DBusMessage *message,
- DBusConnection *sender,
- DBusConnection *addressed_recipient,
-diff --git a/bus/cynara.c b/bus/cynara.c
-deleted file mode 100644
-index 77aed62..0000000
---- a/bus/cynara.c
-+++ /dev/null
-@@ -1,373 +0,0 @@
--/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
--/* cynara.c Cynara runtime privilege checking
-- *
-- * Copyright (c) 2014 Samsung Electronics, Ltd.
-- *
-- * Licensed under the Academic Free License version 2.1
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-- *
-- */
--
--#include <config.h>
--#include "cynara.h"
--#include "check.h"
--#include "utils.h"
--
--#include <stdio.h>
--
--#include <dbus/dbus.h>
--#include <dbus/dbus-watch.h>
--#include <dbus/dbus-connection-internal.h>
--#include <bus/connection.h>
--#ifdef DBUS_ENABLE_CYNARA
--#include <cynara-client-async.h>
--#endif
--
--#ifdef DBUS_ENABLE_CYNARA
--typedef struct BusCynara
--{
-- int refcount;
--
-- BusContext *context;
-- BusCheck *check;
-- cynara_async *cynara;
-- DBusWatch *cynara_watch;
--} BusCynara;
--
--#define USE_CYNARA_CACHE 1
--#ifdef USE_CYNARA_CACHE
--#define CYNARA_CACHE_SIZE 1000
--#endif
--
--static dbus_bool_t bus_cynara_watch_callback(DBusWatch *watch,
-- unsigned int flags,
-- void *data);
--
--static void status_callback(int old_fd,
-- int new_fd,
-- cynara_async_status status,
-- void *user_status_data);
--static void bus_cynara_check_response_callback (cynara_check_id check_id,
-- cynara_async_call_cause cause,
-- int response,
-- void *user_response_data);
--#endif
--
--
--BusCynara *
--bus_cynara_new(BusCheck *check, DBusError *error)
--{
--#ifdef DBUS_ENABLE_CYNARA
-- BusContext *context;
-- BusCynara *cynara;
-- cynara_async_configuration *conf = NULL;
-- int ret;
--
-- cynara = dbus_new(BusCynara, 1);
-- if (cynara == NULL)
-- {
-- BUS_SET_OOM(error);
-- return NULL;
-- }
--
-- context = bus_check_get_context(check);
--
-- cynara->refcount = 1;
-- cynara->check = check;
-- cynara->context = context;
-- cynara->cynara_watch = NULL;
--
-- ret = cynara_async_configuration_create(&conf);
-- if (ret != CYNARA_API_SUCCESS)
-- {
-- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to create Cynara configuration");
-- goto out;
-- }
--
--#ifdef CYNARA_CACHE_SIZE
-- ret = cynara_async_configuration_set_cache_size(conf, CYNARA_CACHE_SIZE);
-- if (ret != CYNARA_API_SUCCESS)
-- {
-- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to Cynara cache size");
-- goto out;
-- }
--#endif
--
-- ret = cynara_async_initialize(&cynara->cynara, conf, &status_callback, cynara);
-- if (ret != CYNARA_API_SUCCESS)
-- {
-- dbus_set_error (error, DBUS_ERROR_FAILED, "Failed to initialize Cynara client");
-- goto out;
-- }
--
--out:
-- cynara_async_configuration_destroy(conf);
-- if (ret != CYNARA_API_SUCCESS)
-- {
-- dbus_free(cynara);
-- return NULL;
-- }
--
-- return cynara;
--#else
-- return NULL;
--#endif
--}
--
--BusCynara *
--bus_cynara_ref (BusCynara *cynara)
--{
--#ifdef DBUS_ENABLE_CYNARA
-- _dbus_assert (cynara->refcount > 0);
-- cynara->refcount += 1;
--
-- return cynara;
--#else
-- return NULL;
--#endif
--}
--
--void
--bus_cynara_unref (BusCynara *cynara)
--{
--#ifdef DBUS_ENABLE_CYNARA
-- _dbus_assert (cynara->refcount > 0);
--
-- cynara->refcount -= 1;
--
-- if (cynara->refcount == 0)
-- {
-- cynara_async_finish(cynara->cynara);
-- dbus_free(cynara);
-- }
--#endif
--}
--
--BusResult
--bus_cynara_check_privilege (BusCynara *cynara,
-- DBusMessage *message,
-- DBusConnection *sender,
-- DBusConnection *addressed_recipient,
-- DBusConnection *proposed_recipient,
-- const char *privilege,
-- BusDeferredMessageStatus check_type,
-- BusDeferredMessage **deferred_message_param)
--{
--#ifdef DBUS_ENABLE_CYNARA
-- int result;
-- unsigned long uid;
-- char *label;
-- const char *session_id;
-- char user[32];
-- cynara_check_id check_id;
-- DBusConnection *connection = check_type == BUS_DEFERRED_MESSAGE_CHECK_RECEIVE ? proposed_recipient : sender;
-- BusDeferredMessage *deferred_message;
-- BusResult ret;
--
-- _dbus_assert(connection != NULL);
--
-- if (dbus_connection_get_unix_user(connection, &uid) == FALSE)
-- return BUS_RESULT_FALSE;
--
-- if (_dbus_connection_get_linux_security_label(connection, &label) == FALSE || label == NULL)
-- {
-- _dbus_warn("Failed to obtain security label for connection\n");
-- return BUS_RESULT_FALSE;
-- }
--
-- session_id = bus_connection_get_cynara_session_id (connection);
-- if (session_id == NULL)
-- {
-- ret = BUS_RESULT_FALSE;
-- goto out;
-- }
--
-- snprintf(user, sizeof(user), "%lu", uid);
--
--#if USE_CYNARA_CACHE
-- result = cynara_async_check_cache(cynara->cynara, label, session_id, user, privilege);
--#else
-- result = CYNARA_API_CACHE_MISS;
--#endif
--
-- switch (result)
-- {
-- case CYNARA_API_ACCESS_ALLOWED:
-- _dbus_verbose("Cynara: got ALLOWED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n",
-- label, session_id, user, privilege);
-- ret = BUS_RESULT_TRUE;
-- break;
--
-- case CYNARA_API_ACCESS_DENIED:
-- _dbus_verbose("Cynara: got DENIED answer from cache (client=%s session_id=%s user=%s privilege=%s)\n",
-- label, session_id, user, privilege);
-- ret = BUS_RESULT_FALSE;
-- break;
--
-- case CYNARA_API_CACHE_MISS:
-- deferred_message = bus_deferred_message_new(message, sender, addressed_recipient,
-- proposed_recipient, BUS_RESULT_LATER);
-- if (deferred_message == NULL)
-- {
-- _dbus_verbose("Failed to allocate memory for deferred message\n");
-- ret = BUS_RESULT_FALSE;
-- goto out;
-- }
--
-- /* callback is supposed to unref deferred_message*/
-- result = cynara_async_create_request(cynara->cynara, label, session_id, user, privilege, &check_id,
-- &bus_cynara_check_response_callback, deferred_message);
-- if (result == CYNARA_API_SUCCESS)
-- {
-- _dbus_verbose("Created Cynara request: client=%s session_id=%s user=%s privilege=%s check_id=%u "
-- "deferred_message=%p\n", label, session_id, user, privilege, (unsigned int)check_id, deferred_message);
-- if (deferred_message_param != NULL)
-- *deferred_message_param = deferred_message;
-- ret = BUS_RESULT_LATER;
-- }
-- else
-- {
-- _dbus_verbose("Error on cynara request create: %i\n", result);
-- bus_deferred_message_unref(deferred_message);
-- ret = BUS_RESULT_FALSE;
-- }
-- break;
-- default:
-- _dbus_verbose("Error when accessing Cynara cache: %i\n", result);
-- ret = BUS_RESULT_FALSE;
-- }
--out:
-- dbus_free(label);
-- return ret;
--
--#else
-- return BUS_RESULT_FALSE;
--#endif
--}
--
--
--
--#ifdef DBUS_ENABLE_CYNARA
--static void
--status_callback(int old_fd, int new_fd, cynara_async_status status,
-- void *user_status_data)
--{
-- BusCynara *cynara = (BusCynara *)user_status_data;
-- DBusLoop *loop = bus_context_get_loop(cynara->context);
--
-- if (cynara->cynara_watch != NULL)
-- {
-- _dbus_loop_remove_watch(loop, cynara->cynara_watch);
-- _dbus_watch_invalidate(cynara->cynara_watch);
-- _dbus_watch_unref(cynara->cynara_watch);
-- cynara->cynara_watch = NULL;
-- }
--
-- if (new_fd != -1)
-- {
-- unsigned int flags;
-- DBusWatch *watch;
--
-- switch (status)
-- {
-- case CYNARA_STATUS_FOR_READ:
-- flags = DBUS_WATCH_READABLE;
-- break;
-- case CYNARA_STATUS_FOR_RW:
-- flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE;
-- break;
-- default:
-- /* Cynara passed unknown status - warn and add RW watch */
-- _dbus_verbose("Cynara passed unknown status value: 0x%08X\n", (unsigned int)status);
-- flags = DBUS_WATCH_READABLE | DBUS_WATCH_WRITABLE;
-- break;
-- }
--
-- watch = _dbus_watch_new(new_fd, flags, TRUE, &bus_cynara_watch_callback, cynara, NULL);
-- if (watch != NULL)
-- {
-- if (_dbus_loop_add_watch(loop, watch) == TRUE)
-- {
-- cynara->cynara_watch = watch;
-- return;
-- }
--
-- _dbus_watch_invalidate(watch);
-- _dbus_watch_unref(watch);
-- }
--
-- /* It seems like not much can be done at this point. Cynara events won't be processed
-- * until next Cynara function call triggering status callback */
-- _dbus_verbose("Failed to add dbus watch\n");
-- }
--}
--
--static dbus_bool_t
--bus_cynara_watch_callback(DBusWatch *watch,
-- unsigned int flags,
-- void *data)
--{
-- BusCynara *cynara = (BusCynara *)data;
-- int result = cynara_async_process(cynara->cynara);
-- if (result != CYNARA_API_SUCCESS)
-- _dbus_verbose("cynara_async_process returned %d\n", result);
--
-- return result != CYNARA_API_OUT_OF_MEMORY ? TRUE : FALSE;
--}
--
--static inline const char *
--call_cause_to_string(cynara_async_call_cause cause)
--{
-- switch (cause)
-- {
-- case CYNARA_CALL_CAUSE_ANSWER:
-- return "ANSWER";
-- case CYNARA_CALL_CAUSE_CANCEL:
-- return "CANCEL";
-- case CYNARA_CALL_CAUSE_FINISH:
-- return "FINSIH";
-- case CYNARA_CALL_CAUSE_SERVICE_NOT_AVAILABLE:
-- return "SERVICE NOT AVAILABLE";
-- default:
-- return "INVALID";
-- }
--}
--
--static void
--bus_cynara_check_response_callback (cynara_check_id check_id,
-- cynara_async_call_cause cause,
-- int response,
-- void *user_response_data)
--{
-- BusDeferredMessage *deferred_message = user_response_data;
-- BusResult result;
--
-- _dbus_verbose("Cynara callback: check_id=%u, cause=%s response=%i response_data=%p\n",
-- (unsigned int)check_id, call_cause_to_string(cause), response, user_response_data);
--
-- if (deferred_message == NULL)
-- return;
--
-- if (cause == CYNARA_CALL_CAUSE_ANSWER && response == CYNARA_API_ACCESS_ALLOWED)
-- result = BUS_RESULT_TRUE;
-- else
-- result = BUS_RESULT_FALSE;
--
-- bus_deferred_message_response_received(deferred_message, result);
-- bus_deferred_message_unref(deferred_message);
--}
--
--#endif /* DBUS_ENABLE_CYNARA */
-diff --git a/bus/system.conf.in b/bus/system.conf.in
-index 19d0c04..81c39c8 100644
---- a/bus/system.conf.in
-+++ b/bus/system.conf.in
-@@ -72,10 +72,10 @@
- send_interface="org.freedesktop.DBus.Introspectable"/>
- <allow send_destination="org.freedesktop.DBus"
- send_interface="org.freedesktop.DBus.Properties"/>
-- <!-- If there is a need specific bus services could be protected by Cynara as well.
-+ <!-- If there is a need specific bus services could be protected by Cynagora as well.
- However, this can lead to deadlock during the boot process when such check is made and
-- Cynara is not yet activated (systemd calls protected method synchronously,
-- dbus daemon tries to consult Cynara, Cynara waits for systemd activation).
-+ Cynagora is not yet activated (systemd calls protected method synchronously,
-+ dbus daemon tries to consult Cynagora, Cynagora waits for systemd activation).
- Therefore it is advised to allow root processes to use bus services.
- Currently anyone is allowed to talk to the message bus -->
- <allow receive_sender="org.freedesktop.DBus"/>
-diff --git a/configure.ac b/configure.ac
-index 11b5ffd..df9341c 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1742,16 +1742,16 @@ AC_ARG_ENABLE([user-session],
- AM_CONDITIONAL([DBUS_ENABLE_USER_SESSION],
- [test "x$enable_user_session" = xyes])
-
--#enable cynara integration
--AC_ARG_ENABLE([cynara], [AS_HELP_STRING([--enable-cynara], [enable Cynara integration])], [], [enable_cynara=no])
--if test "x$enable_cynara" = xyes; then
-- PKG_CHECK_MODULES([CYNARA], [cynara-client-async >= 0.6.0 cynara-session >= 0.6.0],
-- [AC_DEFINE([DBUS_ENABLE_CYNARA], [1], [Define to enable Cynara privilege checks in dbus-daemon])],
-- [AC_MSG_ERROR([libcynara-client-async and cynara-session are required to enable Cynara integration])])
-+#enable cynagora integration
-+AC_ARG_ENABLE([cynagora], [AS_HELP_STRING([--enable-cynagora], [enable Cynagora integration])], [], [enable_cynagora=no])
-+if test "x$enable_cynagora" = xyes; then
-+ PKG_CHECK_MODULES([CYNAGORA], [cynagora],
-+ [AC_DEFINE([DBUS_ENABLE_CYNAGORA], [1], [Define to enable Cynagora privilege checks in dbus-daemon])],
-+ [AC_MSG_ERROR([libcynagora is required to enable Cynagora integration])])
- fi
-
--AC_SUBST([CYNARA_CFLAGS])
--AC_SUBST([CYNARA_LIBS])
-+AC_SUBST([CYNAGORA_CFLAGS])
-+AC_SUBST([CYNAGORA_LIBS])
-
- AC_CONFIG_FILES([
- Doxyfile
-@@ -1835,7 +1835,7 @@ echo "
- Building bus stats API: ${enable_stats}
- Building SELinux support: ${have_selinux}
- Building AppArmor support: ${have_apparmor}
-- Building Cynara support: ${enable_cynara}
-+ Building Cynagora support: ${enable_cynagora}
- Building inotify support: ${have_inotify}
- Building kqueue support: ${have_kqueue}
- Building systemd support: ${have_systemd}
---
-2.21.1
-
diff --git a/meta-security/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend b/meta-security/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend
deleted file mode 100644
index 177a117b8..000000000
--- a/meta-security/recipes-core/dbus-cynagora/dbus_1.12.16.bbappend
+++ /dev/null
@@ -1,15 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/dbus-cynagora:"
-
-SRC_URI_append_class-target = "\
- file://0001-Integration-of-Cynara-asynchronous-security-checks.patch \
- file://0002-Disable-message-dispatching-when-send-rule-result-is.patch \
- file://0003-Handle-unavailability-of-policy-results-for-broadcas.patch \
- file://0004-Add-own-rule-result-unavailability-handling.patch \
- file://0005-Perform-Cynara-runtime-policy-checks-by-default.patch \
- file://0006-Fix-SIGSEGV-on-disconnections.patch \
- file://0007-Switch-from-cynara-to-cynagora.patch \
-"
-
-DEPENDS_append_class-target = " cynagora smack"
-EXTRA_OECONF_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES','smack','--enable-cynagora --disable-selinux','',d)}"
-
diff --git a/meta-security/recipes-core/packagegroups/packagegroup-security-framework.bb b/meta-security/recipes-core/packagegroups/packagegroup-security-framework.bb
deleted file mode 100644
index bc708600f..000000000
--- a/meta-security/recipes-core/packagegroups/packagegroup-security-framework.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Security middleware components"
-LICENSE = "MIT"
-
-inherit packagegroup
-
-# Install Cynara and security-manager by default if (and only if)
-# Smack is enabled.
-#
-# Cynara does not have a hard dependency on Smack security,
-# but is meant to be used with it. security-manager however
-# links against smack and expects Smack to be active,
-# so we do not have any choice.
-#
-# Without configuration, security-manager is not usable. We use
-# the policy packaged from the upstream source code here. Adapting
-# it for the distro can be done by patching that source.
-RDEPENDS_${PN}_append_with-lsm-smack = " \
- cynagora \
- security-manager \
- security-manager-policy \
- smacknet \
- smack-system-setup \
-"
diff --git a/meta-security/recipes-core/smack-system-setup/files/55-udev-smack-default.rules b/meta-security/recipes-core/smack-system-setup/files/55-udev-smack-default.rules
deleted file mode 100644
index eca65292f..000000000
--- a/meta-security/recipes-core/smack-system-setup/files/55-udev-smack-default.rules
+++ /dev/null
@@ -1,27 +0,0 @@
-# do not edit this file, it will be overwritten on update
-
-KERNEL=="null", SECLABEL{smack}="*"
-KERNEL=="zero", SECLABEL{smack}="*"
-KERNEL=="console", SECLABEL{smack}="*"
-KERNEL=="kmsg", SECLABEL{smack}="*"
-KERNEL=="video*", SECLABEL{smack}="*"
-KERNEL=="card*", SECLABEL{smack}="*"
-KERNEL=="ptmx", SECLABEL{smack}="*"
-KERNEL=="tty", SECLABEL{smack}="*"
-KERNEL=="rfkill", SECLABEL{smack}="*"
-
-SUBSYSTEM=="most_cdev_aim", SECLABEL{smack}="*"
-
-SUBSYSTEM=="graphics", GROUP="video", SECLABEL{smack}="*"
-SUBSYSTEM=="drm", GROUP="video", SECLABEL{smack}="*"
-SUBSYSTEM=="dvb", GROUP="video", SECLABEL{smack}="*"
-SUBSYSTEM=="sound", GROUP="audio", SECLABEL{smack}="*"
-
-SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666", SECLABEL{smack}="*"
-SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666", SECLABEL{smack}="*"
-SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620", SECLABEL{smack}="*"
-SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty", SECLABEL{smack}="*"
-KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", SECLABEL{smack}="*"
-
-SUBSYSTEM=="input", KERNEL=="mouse*|mice|event*", MODE="0640", SECLABEL{smack}="*"
-SUBSYSTEM=="input", KERNEL=="ts[0-9]*|uinput", MODE="0640", SECLABEL{smack}="*"
diff --git a/meta-security/recipes-core/smack-system-setup/files/systemd-journald.service.conf b/meta-security/recipes-core/smack-system-setup/files/systemd-journald.service.conf
deleted file mode 100644
index 7035a1410..000000000
--- a/meta-security/recipes-core/smack-system-setup/files/systemd-journald.service.conf
+++ /dev/null
@@ -1,16 +0,0 @@
-# Run systemd-journald with the hat ("^") Smack label.
-#
-# The journal daemon needs global read access to gather information
-# about the services spawned by systemd. The hat label is intended
-# for this purpose. The journal daemon is the only part of the
-# System domain that needs read access to the User domain. Giving
-# the journal daemon the hat label means that we can remove the
-# System domain's read access to the User domain and we can avoid
-# hard-coding a specific label name for that domain.
-#
-# Original author: Casey Schaufler <casey@schaufler-ca.com>
-#
-# This is considered a configuration change and thus distro specific.
-[Service]
-SmackProcessLabel=^
-
diff --git a/meta-security/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf b/meta-security/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf
deleted file mode 100644
index db43c8c51..000000000
--- a/meta-security/recipes-core/smack-system-setup/files/systemd-tmpfiles-setup.service.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Service]
-ExecStartPost=/bin/sh -c '([ ! -d /var/tmp ] || chsmack -L -a \"*\" /var/tmp) && ([ ! -d /var/log ] || chsmack -L -a System::Log /var/log && chsmack -L -t /var/log)'
diff --git a/meta-security/recipes-core/smack-system-setup/files/tmp.mount.conf b/meta-security/recipes-core/smack-system-setup/files/tmp.mount.conf
deleted file mode 100644
index 388986e82..000000000
--- a/meta-security/recipes-core/smack-system-setup/files/tmp.mount.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# Mount /tmp publicly accessable. Based on patch by Michael Demeter <michael.demeter@intel.com>.
-# Upstream systemd temporarily had SmackFileSystemRoot for this (https://github.com/systemd/systemd/pull/1664),
-# but it was removed again (https://github.com/systemd/systemd/issues/1696) because
-# util-linux mount will ignore smackfsroot when Smack is not active. However,
-# busybox is not that intelligent.
-#
-# When using busybox mount, adding smackfsroot=* and booting without
-# Smack (i.e. security=none), tmp.mount will fail with an error about
-# "Bad mount option smackfsroot".
-[Mount]
-Options=smackfsroot=*
-
diff --git a/meta-security/recipes-core/smack-system-setup/smack-system-setup_1.bb b/meta-security/recipes-core/smack-system-setup/smack-system-setup_1.bb
deleted file mode 100644
index 49b12ad3f..000000000
--- a/meta-security/recipes-core/smack-system-setup/smack-system-setup_1.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "setup of a system using smack"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
-
-SRC_URI = "\
- file://55-udev-smack-default.rules \
- file://systemd-journald.service.conf \
- file://systemd-tmpfiles-setup.service.conf \
- file://tmp.mount.conf \
-"
-
-RDEPENDS_${PN}_append_with-lsm-smack = " smack"
-
-do_install_append_with-lsm-smack() {
- # tuning systemd units
- install -Dm0644 ${WORKDIR}/systemd-tmpfiles-setup.service.conf \
- ${D}${systemd_unitdir}/system/systemd-tmpfiles-setup.service.d/smack.conf
- install -Dm0644 ${WORKDIR}/systemd-journald.service.conf \
- ${D}${systemd_unitdir}/system/systemd-journald.service.d/smack.conf
- install -Dm0644 ${WORKDIR}/tmp.mount.conf \
- ${D}${systemd_unitdir}/system/tmp.mount.d/smack.conf
-
- # add udev rules
- install -Dm0644 ${WORKDIR}/55-udev-smack-default.rules \
- ${D}${sysconfdir}/udev/rules.d/55-udev-smack-default.rules
-}
-
-FILES_${PN} += "${systemd_unitdir}"
diff --git a/meta-security/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch b/meta-security/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch
deleted file mode 100644
index 46445be73..000000000
--- a/meta-security/recipes-core/systemd/systemd/0001-Switch-Smack-label-earlier.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 6cc74075797edb6f698cb7f312bb1c3d8cc6cb28 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Thu, 12 Oct 2017 17:17:56 +0200
-Subject: [PATCH] Switch Smack label earlier
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Switching label after removing capability isn't
-possible.
-
-Change-Id: Ib7dac8f071f36119520ed3205d743c1e3df3cd5e
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- src/core/execute.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/src/core/execute.c b/src/core/execute.c
-index d72e5bf08..0abffd569 100644
---- a/src/core/execute.c
-+++ b/src/core/execute.c
-@@ -2707,6 +2707,13 @@ static int exec_child(
- }
- }
-
-+ r = setup_smack(context, command);
-+ if (r < 0) {
-+ *exit_status = EXIT_SMACK_PROCESS_LABEL;
-+ *error_message = strdup("Failed to set SMACK process label");
-+ return r;
-+ }
-+
- if (!cap_test_all(context->capability_bounding_set)) {
- r = capability_bounding_set_drop(context->capability_bounding_set, false);
- if (r < 0) {
-@@ -2775,13 +2782,6 @@ static int exec_child(
- }
- #endif
-
-- r = setup_smack(context, command);
-- if (r < 0) {
-- *exit_status = EXIT_SMACK_PROCESS_LABEL;
-- *error_message = strdup("Failed to set SMACK process label");
-- return r;
-- }
--
- #ifdef HAVE_APPARMOR
- if (context->apparmor_profile && mac_apparmor_use()) {
- r = aa_change_onexec(context->apparmor_profile);
---
-2.14.3
-
diff --git a/meta-security/recipes-core/systemd/systemd_2%.bbappend b/meta-security/recipes-core/systemd/systemd_2%.bbappend
deleted file mode 100644
index 789c05f83..000000000
--- a/meta-security/recipes-core/systemd/systemd_2%.bbappend
+++ /dev/null
@@ -1,40 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-# Ensures systemd runs with label "System"
-EXTRA_OEMESON_append_with-lsm-smack = " -Dsmack-run-label=System"
-
-##################################################################################
-# Maintaining trivial, non-upstreamable configuration changes as patches
-# is tedious. But in same cases (like early mounting of special directories)
-# the configuration has to be in code. We make these changes here directly.
-##################################################################################
-do_patch[prefuncs] += "patch_systemd"
-do_patch[vardeps] += "patch_systemd"
-patch_systemd() {
- # Handling of /run and /sys/fs/cgroup. Make /run a transmuting directory to
- # enable systemd communications with services in the User domain.
- # Original patch by Michael Demeter <michael.demeter@intel.com>.
- #
- # We simplify the patching by touching only lines which check the result of
- # mac_smack_use(). Those are the ones which are used when Smack is active.
- #
- # smackfsroot=* on /sys/fs/cgroup may be upstreamable, but smackfstransmute=System::Run
- # is too distro specific (depends on Smack rules) and thus has to remain here.
- sed -i -e 's;\("/sys/fs/cgroup", *"[^"]*", *"[^"]*\)\(.*mac_smack_use.*\);\1,smackfsroot=*\2;' \
- -e 's;\("/run", *"[^"]*", *"[^"]*\)\(.*mac_smack_use.*\);\1,smackfstransmute=System::Run\2;' \
- ${S}/src/core/mount-setup.c
-}
-
-##################################################################################
-# What follows is temporary.
-# This is a solution to the Bug-AGL SPEC-539
-# (see https://jira.automotivelinux.org/browse/SPEC-539).
-#
-# It renames the file "touchscreen.rules" to "55-touchscreen.rules"
-# This comes with the recipe systemd_230/234 of poky (meta/recipes-core/systemd)
-# It should be removed when poky changes.
-##################################################################################
-do_install_prepend() {
- mv ${WORKDIR}/touchscreen.rules ${WORKDIR}/55-touchscreen.rules || true
-}
-
diff --git a/meta-security/recipes-core/util-linux/util-linux_%.bbappend b/meta-security/recipes-core/util-linux/util-linux_%.bbappend
deleted file mode 100644
index 05286f80d..000000000
--- a/meta-security/recipes-core/util-linux/util-linux_%.bbappend
+++ /dev/null
@@ -1,8 +0,0 @@
-# Enabling Smack support in util-linux enables special support
-# in [lib]mount for Smack mount options: they get removed if
-# Smack is not active in the current kernel. Important for
-# booting with "security=none" when userspace otherwise is
-# compiled to use Smack.
-
-PACKAGECONFIG_append_with-lsm-smack_class-target = " smack"
-PACKAGECONFIG[smack] = "--with-smack, --without-smack"
diff --git a/meta-security/recipes-kernel/linux/linux-%.bbappend b/meta-security/recipes-kernel/linux/linux-%.bbappend
deleted file mode 100644
index 717d32e3a..000000000
--- a/meta-security/recipes-kernel/linux/linux-%.bbappend
+++ /dev/null
@@ -1,17 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/linux:"
-
-IS_KERNEL_RECIPE := "${@bb.data.inherits_class('kernel', d) and 'yes' or 'no'}"
-SMACK_KERNEL_SRC_URI_no = ""
-SMACK_KERNEL_SRC_URI_yes = ""
-
-# Kernel config fragment enabling Smack, without making it the default explicitly.
-SMACK_KERNEL_SRC_URI_yes += "file://smack.cfg"
-
-# When added, set Smack as the default LSM.
-SMACK_DEFAULT_SECURITY_CFG = "file://smack-default-lsm.cfg"
-
-# Add it by default, can be overridden by changing this variable here.
-SMACK_DEFAULT_SECURITY ??= "${SMACK_DEFAULT_SECURITY_CFG}"
-SMACK_KERNEL_SRC_URI_yes += " ${SMACK_DEFAULT_SECURITY}"
-
-SRC_URI_append_with-lsm-smack = "${SMACK_KERNEL_SRC_URI_${IS_KERNEL_RECIPE}}"
diff --git a/meta-security/recipes-kernel/linux/linux/audit.cfg b/meta-security/recipes-kernel/linux/linux/audit.cfg
deleted file mode 100644
index 214dbe33f..000000000
--- a/meta-security/recipes-kernel/linux/linux/audit.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
diff --git a/meta-security/recipes-kernel/linux/linux/smack-default-lsm.cfg b/meta-security/recipes-kernel/linux/linux/smack-default-lsm.cfg
deleted file mode 100644
index b5c48454e..000000000
--- a/meta-security/recipes-kernel/linux/linux/smack-default-lsm.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-CONFIG_DEFAULT_SECURITY="smack"
-CONFIG_DEFAULT_SECURITY_SMACK=y
diff --git a/meta-security/recipes-kernel/linux/linux/smack.cfg b/meta-security/recipes-kernel/linux/linux/smack.cfg
deleted file mode 100644
index 45a92f148..000000000
--- a/meta-security/recipes-kernel/linux/linux/smack.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG_IP_NF_SECURITY=m
-CONFIG_IP6_NF_SECURITY=m
-CONFIG_EXT2_FS_SECURITY=y
-CONFIG_EXT3_FS_SECURITY=y
-CONFIG_EXT4_FS_SECURITY=y
-CONFIG_SECURITY=y
-CONFIG_SECURITY_SMACK=y
-CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y
-CONFIG_TMPFS_XATTR=y
diff --git a/meta-security/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch b/meta-security/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch
deleted file mode 100644
index 6e1827c08..000000000
--- a/meta-security/recipes-security/audit/audit/0001-lib-i386_table.h-add-new-syscall.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From df878b92e01f4d1c3de7f7d8229cea6a431509eb Mon Sep 17 00:00:00 2001
-From: Mingli Yu <mingli.yu@windriver.com>
-Date: Wed, 19 Feb 2020 15:23:40 +0800
-Subject: [PATCH] lib/i386_table.h: add new syscall
-
-On 32bit system,
-After upgrade glibc to 2.31
- # strace -o /tmp/test.log date -s 09:16:45
- # tail -f /tmp/test.log
- close(3) = 0
- stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=114, ...}) = 0
- clock_settime64(CLOCK_REALTIME, {tv_sec=1582103805, tv_nsec=0}) = 0
- fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(0x4, 0x40), ...}) = 0
- ioctl(1, TCGETS, {B115200 opost isig icanon echo ...}) = 0
- write(1, "Wed Feb 19 09:16:45 UTC 2020\n", 29) = 29
- close(1) = 0
- close(2) = 0
- exit_group(0) = ?
- +++ exited with 0 +++
-
-It means the clock_settime64 syscall is used, so
-add the syscall.
-
-Upstream-Status: Submitted [https://github.com/linux-audit/audit-userspace/pull/116]
-
-Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
----
- lib/i386_table.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/lib/i386_table.h b/lib/i386_table.h
-index 1a64c88..65fd4d9 100644
---- a/lib/i386_table.h
-+++ b/lib/i386_table.h
-@@ -405,3 +405,4 @@ _S(383, "statx")
- _S(384, "arch_prctl")
- _S(385, "io_pgetevents")
- _S(386, "rseq")
-+_S(404, "clock_settime64")
---
-2.7.4
-
diff --git a/meta-security/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch b/meta-security/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch
deleted file mode 100644
index bb6c61e80..000000000
--- a/meta-security/recipes-security/audit/audit/Add-substitue-functions-for-strndupa-rawmemchr.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From bdcdc3dff4469aac88e718bd15958d5ed4b9392a Mon Sep 17 00:00:00 2001
-From: Steve Grubb <sgrubb@redhat.com>
-Date: Tue, 26 Feb 2019 18:33:33 -0500
-Subject: [PATCH] Add substitue functions for strndupa & rawmemchr
-
-Upstream-Status: Backport
-[https://github.com/linux-audit/audit-userspace/commit/d579a08bb1cde71f939c13ac6b2261052ae9f77e]
----
- auparse/auparse.c | 12 +++++++++++-
- auparse/interpret.c | 9 ++++++++-
- configure.ac | 14 +++++++++++++-
- src/ausearch-lol.c | 12 +++++++++++-
- 4 files changed, 43 insertions(+), 4 deletions(-)
-
-diff --git a/auparse/auparse.c b/auparse/auparse.c
-index 650db02..2e1c737 100644
---- a/auparse/auparse.c
-+++ b/auparse/auparse.c
-@@ -1,5 +1,5 @@
- /* auparse.c --
-- * Copyright 2006-08,2012-17 Red Hat Inc., Durham, North Carolina.
-+ * Copyright 2006-08,2012-19 Red Hat Inc., Durham, North Carolina.
- * All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
-@@ -1118,6 +1118,16 @@ static int str2event(char *s, au_event_t *e)
- return 0;
- }
-
-+#ifndef HAVE_STRNDUPA
-+static inline char *strndupa(const char *old, size_t n)
-+{
-+ size_t len = strnlen(old, n);
-+ char *tmp = alloca(len + 1);
-+ tmp[len] = 0;
-+ return memcpy(tmp, old, len);
-+}
-+#endif
-+
- /* Returns 0 on success and 1 on error */
- static int extract_timestamp(const char *b, au_event_t *e)
- {
-diff --git a/auparse/interpret.c b/auparse/interpret.c
-index 51c4a5e..67b7b77 100644
---- a/auparse/interpret.c
-+++ b/auparse/interpret.c
-@@ -853,6 +853,13 @@ err_out:
- return print_escaped(id->val);
- }
-
-+// rawmemchr is faster. Let's use it if we have it.
-+#ifdef HAVE_RAWMEMCHR
-+#define STRCHR rawmemchr
-+#else
-+#define STRCHR strchr
-+#endif
-+
- static const char *print_proctitle(const char *val)
- {
- char *out = (char *)print_escaped(val);
-@@ -863,7 +870,7 @@ static const char *print_proctitle(const char *val)
- // Proctitle has arguments separated by NUL bytes
- // We need to write over the NUL bytes with a space
- // so that we can see the arguments
-- while ((ptr = rawmemchr(ptr, '\0'))) {
-+ while ((ptr = STRCHR(ptr, '\0'))) {
- if (ptr >= end)
- break;
- *ptr = ' ';
-diff --git a/configure.ac b/configure.ac
-index 54bdbf1..aef07fb 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1,7 +1,7 @@
- dnl
- define([AC_INIT_NOTICE],
- [### Generated automatically using autoconf version] AC_ACVERSION [
--### Copyright 2005-18 Steve Grubb <sgrubb@redhat.com>
-+### Copyright 2005-19 Steve Grubb <sgrubb@redhat.com>
- ###
- ### Permission is hereby granted, free of charge, to any person obtaining a
- ### copy of this software and associated documentation files (the "Software"),
-@@ -72,6 +72,18 @@ dnl; posix_fallocate is used in audisp-remote
- AC_CHECK_FUNCS([posix_fallocate])
- dnl; signalfd is needed for libev
- AC_CHECK_FUNC([signalfd], [], [ AC_MSG_ERROR([The signalfd system call is necessary for auditd]) ])
-+dnl; check if rawmemchr is available
-+AC_CHECK_FUNCS([rawmemchr])
-+dnl; check if strndupa is available
-+AC_LINK_IFELSE(
-+ [AC_LANG_SOURCE(
-+ [[
-+ #define _GNU_SOURCE
-+ #include <string.h>
-+ int main() { (void) strndupa("test", 10); return 0; }]])],
-+ [AC_DEFINE(HAVE_STRNDUPA, 1, [Let us know if we have it or not])],
-+ []
-+)
-
- ALLWARNS=""
- ALLDEBUG="-g"
-diff --git a/src/ausearch-lol.c b/src/ausearch-lol.c
-index 5d17a72..758c33e 100644
---- a/src/ausearch-lol.c
-+++ b/src/ausearch-lol.c
-@@ -1,6 +1,6 @@
- /*
- * ausearch-lol.c - linked list of linked lists library
--* Copyright (c) 2008,2010,2014,2016 Red Hat Inc., Durham, North Carolina.
-+* Copyright (c) 2008,2010,2014,2016,2019 Red Hat Inc., Durham, North Carolina.
- * All Rights Reserved.
- *
- * This software may be freely redistributed and/or modified under the
-@@ -152,6 +152,16 @@ static int compare_event_time(event *e1, event *e2)
- return 0;
- }
-
-+#ifndef HAVE_STRNDUPA
-+static inline char *strndupa(const char *old, size_t n)
-+{
-+ size_t len = strnlen(old, n);
-+ char *tmp = alloca(len + 1);
-+ tmp[len] = 0;
-+ return memcpy(tmp, old, len);
-+}
-+#endif
-+
- /*
- * This function will look at the line and pick out pieces of it.
- */
---
-2.7.4
-
diff --git a/meta-security/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch b/meta-security/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch
deleted file mode 100644
index 7c2699540..000000000
--- a/meta-security/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From a07271f1cce82122610b622bcea4a8a37528f321 Mon Sep 17 00:00:00 2001
-From: Li xin <lixin.fnst@cn.fujitsu.com>
-Date: Sun, 19 Jul 2015 02:42:58 +0900
-Subject: [PATCH] audit: Fixed swig host contamination issue
-
-The audit build uses swig to generate a python wrapper.
-Unfortunately, the swig info file references host include
-directories. Some of these were previously noticed and
-eliminated, but the one fixed here was not.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Anders Hedlund <anders.hedlund@windriver.com>
-Signed-off-by: Joe Slater <jslater@windriver.com>
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- bindings/swig/python3/Makefile.am | 3 ++-
- bindings/swig/src/auditswig.i | 2 +-
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/bindings/swig/python3/Makefile.am b/bindings/swig/python3/Makefile.am
-index 9938418..fa46aac 100644
---- a/bindings/swig/python3/Makefile.am
-+++ b/bindings/swig/python3/Makefile.am
-@@ -22,6 +22,7 @@
- CONFIG_CLEAN_FILES = *.loT *.rej *.orig
- AM_CFLAGS = -fPIC -DPIC -fno-strict-aliasing $(PYTHON3_CFLAGS)
- AM_CPPFLAGS = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES)
-+STDINC ?= /usr/include
- LIBS = $(top_builddir)/lib/libaudit.la
- SWIG_FLAGS = -python -py3 -modern
- SWIG_INCLUDES = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES)
-@@ -37,7 +38,7 @@ _audit_la_DEPENDENCIES =${top_srcdir}/lib/libaudit.h ${top_builddir}/lib/libaudi
- _audit_la_LIBADD = ${top_builddir}/lib/libaudit.la
- nodist__audit_la_SOURCES = audit_wrap.c
- audit.py audit_wrap.c: ${srcdir}/../src/auditswig.i
-- swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} ${srcdir}/../src/auditswig.i
-+ swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} -I$(STDINC) ${srcdir}/../src/auditswig.i
-
- CLEANFILES = audit.py* audit_wrap.c *~
-
-diff --git a/bindings/swig/src/auditswig.i b/bindings/swig/src/auditswig.i
-index 7ebb373..424fb68 100644
---- a/bindings/swig/src/auditswig.i
-+++ b/bindings/swig/src/auditswig.i
-@@ -39,7 +39,7 @@ signed
- #define __attribute(X) /*nothing*/
- typedef unsigned __u32;
- typedef unsigned uid_t;
--%include "/usr/include/linux/audit.h"
-+%include "linux/audit.h"
- #define __extension__ /*nothing*/
- #include <stdint.h>
- %include "../lib/libaudit.h"
---
-2.7.4
-
diff --git a/meta-security/recipes-security/audit/audit/audit-volatile.conf b/meta-security/recipes-security/audit/audit/audit-volatile.conf
deleted file mode 100644
index 9cbe1547a..000000000
--- a/meta-security/recipes-security/audit/audit/audit-volatile.conf
+++ /dev/null
@@ -1 +0,0 @@
-d /var/log/audit 0750 root root -
diff --git a/meta-security/recipes-security/audit/audit/auditd b/meta-security/recipes-security/audit/audit/auditd
deleted file mode 100755
index cda2e43d4..000000000
--- a/meta-security/recipes-security/audit/audit/auditd
+++ /dev/null
@@ -1,153 +0,0 @@
-#! /bin/sh
-### BEGIN INIT INFO
-# Provides: auditd
-# Required-Start: $local_fs
-# Required-Stop: $local_fs
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: Audit Daemon
-# Description: Collects audit information from Linux 2.6 Kernels.
-### END INIT INFO
-
-# Author: Philipp Matthias Hahn <pmhahn@debian.org>
-# Based on Debians /etc/init.d/skeleton and Auditds init.d/auditd.init
-
-# June, 2012: Adopted for yocto <amy.fong@windriver.com>
-
-# PATH should only include /usr/* if it runs after the mountnfs.sh script
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-DESC="audit daemon"
-NAME=auditd
-DAEMON=/sbin/auditd
-PIDFILE=/var/run/"$NAME".pid
-SCRIPTNAME=/etc/init.d/"$NAME"
-
-# Exit if the package is not installed
-[ -x "$DAEMON" ] || exit 0
-
-# Read configuration variable file if it is present
-[ -r /etc/default/"$NAME" ] && . /etc/default/"$NAME"
-
-. /etc/default/rcS
-
-. /etc/init.d/functions
-
-#
-# Function that starts the daemon/service
-#
-do_start()
-{
- # Return
- # 0 if daemon has been started
- # 1 if daemon was already running
- # 2 if daemon could not be started
- start-stop-daemon -S --quiet --pidfile "$PIDFILE" --exec "$DAEMON" --test > /dev/null \
- || return 1
- start-stop-daemon -S --quiet --pidfile "$PIDFILE" --exec "$DAEMON" -- \
- $EXTRAOPTIONS \
- || return 2
- if [ -f /etc/audit/audit.rules ]
- then
- /sbin/auditctl -R /etc/audit/audit.rules >/dev/null
- fi
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
- # Return
- # 0 if daemon has been stopped
- # 1 if daemon was already stopped
- # 2 if daemon could not be stopped
- # other if a failure occurred
- start-stop-daemon -K --quiet --pidfile "$PIDFILE" --name "$NAME"
- RETVAL="$?"
- [ "$RETVAL" = 2 ] && return 2
- # Many daemons don't delete their pidfiles when they exit.
- rm -f "$PIDFILE"
- rm -f /var/run/audit_events
- # Remove watches so shutdown works cleanly
- case "$AUDITD_CLEAN_STOP" in
- no|NO) ;;
- *) /sbin/auditctl -D >/dev/null ;;
- esac
- return "$RETVAL"
-}
-
-#
-# Function that sends a SIGHUP to the daemon/service
-#
-do_reload() {
- start-stop-daemon -K --signal HUP --quiet --pidfile $PIDFILE --name $NAME
- return 0
-}
-
-if [ ! -e /var/log/audit ]; then
- mkdir -p /var/log/audit
- [ -x /sbin/restorecon ] && /sbin/restorecon -F /var/log/audit
-fi
-
-case "$1" in
- start)
- [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME"
- do_start
- case "$?" in
- 0|1) [ "$VERBOSE" != no ] && echo 0 ;;
- 2) [ "$VERBOSE" != no ] && echo 1 ;;
- esac
- ;;
- stop)
- [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME"
- do_stop
- case "$?" in
- 0|1) [ "$VERBOSE" != no ] && echo 0 ;;
- 2) [ "$VERBOSE" != no ] && echo 1 ;;
- esac
- ;;
- reload|force-reload)
- echo "Reloading $DESC" "$NAME"
- do_reload
- echo $?
- ;;
- restart)
- echo "Restarting $DESC" "$NAME"
- do_stop
- case "$?" in
- 0|1)
- do_start
- case "$?" in
- 0) echo 0 ;;
- 1) echo 1 ;; # Old process is still running
- *) echo 1 ;; # Failed to start
- esac
- ;;
- *)
- # Failed to stop
- echo 1
- ;;
- esac
- ;;
- rotate)
- echo "Rotating $DESC logs" "$NAME"
- start-stop-daemon -K --signal USR1 --quiet --pidfile "$PIDFILE" --name "$NAME"
- echo $?
- ;;
- status)
- pidofproc "$DAEMON" >/dev/null
- status=$?
- if [ $status -eq 0 ]; then
- echo "$NAME is running."
- else
- echo "$NAME is not running."
- fi
- exit $status
- ;;
- *)
- echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|rotate|status}" >&2
- exit 3
- ;;
-esac
-
-:
diff --git a/meta-security/recipes-security/audit/audit/auditd.service b/meta-security/recipes-security/audit/audit/auditd.service
deleted file mode 100644
index ebc079897..000000000
--- a/meta-security/recipes-security/audit/audit/auditd.service
+++ /dev/null
@@ -1,20 +0,0 @@
-[Unit]
-Description=Security Auditing Service
-DefaultDependencies=no
-After=local-fs.target
-Conflicts=shutdown.target
-Before=sysinit.target shutdown.target
-After=systemd-tmpfiles-setup.service
-
-[Service]
-ExecStart=/sbin/auditd -n
-## To use augenrules, copy this file to /etc/systemd/system/auditd.service
-## and uncomment the next line and delete/comment out the auditctl line.
-## Then copy existing rules to /etc/audit/rules.d/
-## Not doing this last step can cause loss of existing rules
-#ExecStartPost=-/sbin/augenrules --load
-ExecStartPost=-/sbin/auditctl -R /etc/audit/audit.rules
-ExecReload=/bin/kill -HUP $MAINPID
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-security/recipes-security/audit/audit_2.8.5.bb b/meta-security/recipes-security/audit/audit_2.8.5.bb
deleted file mode 100644
index af36ed5e2..000000000
--- a/meta-security/recipes-security/audit/audit_2.8.5.bb
+++ /dev/null
@@ -1,106 +0,0 @@
-SUMMARY = "User space tools for kernel auditing"
-DESCRIPTION = "The audit package contains the user space utilities for \
-storing and searching the audit records generated by the audit subsystem \
-in the Linux kernel."
-HOMEPAGE = "http://people.redhat.com/sgrubb/audit/"
-SECTION = "base"
-LICENSE = "GPLv2+ & LGPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
-
-SRC_URI = "git://github.com/linux-audit/${BPN}-userspace.git;branch=2.8_maintenance \
- file://Add-substitue-functions-for-strndupa-rawmemchr.patch \
- file://Fixed-swig-host-contamination-issue.patch \
- file://0001-lib-i386_table.h-add-new-syscall.patch \
- file://auditd \
- file://auditd.service \
- file://audit-volatile.conf \
-"
-
-S = "${WORKDIR}/git"
-SRCREV = "5fae55c1ad15b3cefe6890eba7311af163e9133c"
-
-inherit autotools python3native update-rc.d systemd
-
-UPDATERCPN = "auditd"
-INITSCRIPT_NAME = "auditd"
-INITSCRIPT_PARAMS = "defaults"
-
-SYSTEMD_PACKAGES = "auditd"
-SYSTEMD_SERVICE_auditd = "auditd.service"
-
-DEPENDS += "python3 tcp-wrappers libcap-ng linux-libc-headers swig-native"
-
-EXTRA_OECONF += "--without-prelude \
- --with-libwrap \
- --enable-gssapi-krb5=no \
- --with-libcap-ng=yes \
- --with-python3=yes \
- --libdir=${base_libdir} \
- --sbindir=${base_sbindir} \
- --without-python \
- --without-golang \
- --disable-zos-remote \
- "
-EXTRA_OECONF_append_arm = " --with-arm=yes"
-EXTRA_OECONF_append_aarch64 = " --with-aarch64=yes"
-
-EXTRA_OEMAKE += "PYLIBVER='python${PYTHON_BASEVERSION}' \
- PYINC='${STAGING_INCDIR}/$(PYLIBVER)' \
- pyexecdir=${libdir}/python${PYTHON_BASEVERSION}/site-packages \
- STDINC='${STAGING_INCDIR}' \
- pkgconfigdir=${libdir}/pkgconfig \
- "
-
-SUMMARY_audispd-plugins = "Plugins for the audit event dispatcher"
-DESCRIPTION_audispd-plugins = "The audispd-plugins package provides plugins for the real-time \
-interface to the audit system, audispd. These plugins can do things \
-like relay events to remote machines or analyze events for suspicious \
-behavior."
-
-PACKAGES =+ "audispd-plugins"
-PACKAGES += "auditd ${PN}-python"
-
-FILES_${PN} = "${sysconfdir}/libaudit.conf ${base_libdir}/libaudit.so.1* ${base_libdir}/libauparse.so.*"
-FILES_auditd += "${bindir}/* ${base_sbindir}/* ${sysconfdir}/*"
-FILES_audispd-plugins += "${sysconfdir}/audisp/audisp-remote.conf \
- ${sysconfdir}/audisp/plugins.d/au-remote.conf \
- ${sbindir}/audisp-remote ${localstatedir}/spool/audit \
- "
-FILES_${PN}-dbg += "${libdir}/python${PYTHON_BASEVERSION}/*/.debug"
-FILES_${PN}-python = "${libdir}/python${PYTHON_BASEVERSION}"
-
-CONFFILES_auditd += "${sysconfdir}/audit/audit.rules"
-RDEPENDS_auditd += "bash"
-
-do_install_append() {
- rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.a
- rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.la
-
- # reuse auditd config
- [ ! -e ${D}/etc/default ] && mkdir ${D}/etc/default
- mv ${D}/etc/sysconfig/auditd ${D}/etc/default
- rmdir ${D}/etc/sysconfig/
-
- # replace init.d
- install -D -m 0755 ${WORKDIR}/auditd ${D}/etc/init.d/auditd
- rm -rf ${D}/etc/rc.d
-
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/tmpfiles.d/
- install -m 0644 ${WORKDIR}/audit-volatile.conf ${D}${sysconfdir}/tmpfiles.d/
- fi
-
- # install systemd unit files
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${WORKDIR}/auditd.service ${D}${systemd_unitdir}/system
-
- # audit-2.5 doesn't install any rules by default, so we do that here
- mkdir -p ${D}/etc/audit ${D}/etc/audit/rules.d
- cp ${S}/rules/10-base-config.rules ${D}/etc/audit/rules.d/audit.rules
-
- chmod 750 ${D}/etc/audit ${D}/etc/audit/rules.d
- chmod 640 ${D}/etc/audit/auditd.conf ${D}/etc/audit/rules.d/audit.rules
-
- # Based on the audit.spec "Copy default rules into place on new installation"
- cp ${D}/etc/audit/rules.d/audit.rules ${D}/etc/audit/audit.rules
-}
diff --git a/meta-security/recipes-security/cynagoauth/cynagoauth_0.1.bb b/meta-security/recipes-security/cynagoauth/cynagoauth_0.1.bb
deleted file mode 100644
index c77c99189..000000000
--- a/meta-security/recipes-security/cynagoauth/cynagoauth_0.1.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "OAuth server using cynagora backend"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagoauth.git;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "26a5dbddf3a9bfde481a6fcd2aae16c7ecba665f"
-PV = "0.1+git${SRCPV}"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "json-c libmicrohttpd openssl cynagora"
-
-inherit cmake
-
-EXTRA_OECMAKE += " \
- -DDEFAULTHOSTS=:7777 \
- -DDEFAULTURL=http://localhost:7777/tok \
- -DUNITDIR_SYSTEM=${systemd_system_unitdir} \
-"
-
-FILES_${PN} += "${systemd_system_unitdir}"
-
-
diff --git a/meta-security/recipes-security/cynagora/cynagora-cynara-compat_2.0.bb b/meta-security/recipes-security/cynagora/cynagora-cynara-compat_2.0.bb
deleted file mode 100644
index fa5cdbadc..000000000
--- a/meta-security/recipes-security/cynagora/cynagora-cynara-compat_2.0.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-DESCRIPTION = "Cynara service with client libraries"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagora;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "6c88efcb7b1361ba6389753e520e26fc556b7d79"
-PV = "2.0+git${SRCPV}"
-
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-PROVIDES = "cynara"
-RPROVIDES_${PN} = "cynara"
-DEPENDS = "libcap"
-RDEPENDS_${PN} = "cynagora"
-
-EXTRA_OECMAKE += " \
- -DWITH_SYSTEMD=OFF \
- -DWITH_CYNARA_COMPAT=ON \
- -DDIRECT_CYNARA_COMPAT=ON \
-"
-
-do_install_append() {
- # remove cynagora stuff
- rm $(find ${D} -name '*cynagora*')
- # remove stupid test
- rm -r ${D}${bindir}
-}
-
diff --git a/meta-security/recipes-security/cynagora/cynagora/run-ptest b/meta-security/recipes-security/cynagora/cynagora/run-ptest
deleted file mode 100755
index f95f0725b..000000000
--- a/meta-security/recipes-security/cynagora/cynagora/run-ptest
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-# test access to cynagora server
-cynagora-admin list > /dev/null
diff --git a/meta-security/recipes-security/cynagora/cynagora_2.0.bb b/meta-security/recipes-security/cynagora/cynagora_2.0.bb
deleted file mode 100644
index b34cb7d71..000000000
--- a/meta-security/recipes-security/cynagora/cynagora_2.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-DESCRIPTION = "Cynagora service and client libraries"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/cynagora;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "218dad2eddcbedaede44753e64ea7c30b73b00aa"
-PV = "2.0+git${SRCPV}"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "systemd libcap"
-
-inherit cmake
-
-EXTRA_OECMAKE += " \
- -DSYSTEMD_UNIT_DIR=${systemd_system_unitdir} \
- -DWITH_SYSTEMD=ON \
- -DWITH_CYNARA_COMPAT=OFF \
-"
-
-inherit useradd
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM_${PN} = "-r cynagora"
-USERADD_PARAM_${PN} = "\
---system --home ${localstatedir}/lib/empty \
---no-create-home --shell /bin/false \
---gid cynagora cynagora \
-"
-
-FILES_${PN} += "${systemd_system_unitdir}"
-
-PACKAGES =+ "${PN}-tools"
-FILES_${PN}-tools += "${bindir}/cynagora-admin ${bindir}/cynagora-agent"
-RDEPENDS_${PN}_append_agl-devel = " ${PN}-tools"
-
-inherit ptest
-SRC_URI_append = " file://run-ptest"
-RDEPENDS_${PN}-ptest_append = " ${PN}-tools"
diff --git a/meta-security/recipes-security/security-manager/security-manager.inc b/meta-security/recipes-security/security-manager/security-manager.inc
deleted file mode 100644
index e1d1f4011..000000000
--- a/meta-security/recipes-security/security-manager/security-manager.inc
+++ /dev/null
@@ -1,83 +0,0 @@
-DESCRIPTION = "Security manager and utilities"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327;beginline=3"
-
-inherit cmake
-
-B = "${S}"
-
-DEPENDS = " \
- attr \
- boost \
- cynara \
- icu \
- libcap \
- smack \
- sqlite3 \
- systemd \
-"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[debug] = "-DCMAKE_BUILD_TYPE=DEBUG,-DCMAKE_BUILD_TYPE=RELEASE"
-
-TZ_SYS_DB ?= "/var/db/security-manager"
-
-EXTRA_OECMAKE = " \
- -DCMAKE_VERBOSE_MAKEFILE=ON \
- -DVERSION=${PV} \
- -DSYSTEMD_INSTALL_DIR=${systemd_unitdir}/system \
- -DBIN_INSTALL_DIR=${bindir} \
- -DDB_INSTALL_DIR=${TZ_SYS_DB} \
- -DLIB_INSTALL_DIR=${libdir} \
- -DSHARE_INSTALL_PREFIX=${datadir} \
- -DINCLUDE_INSTALL_DIR=${includedir} \
-"
-
-inherit systemd
-SYSTEMD_SERVICE_${PN} = "security-manager.service"
-
-inherit features_check
-REQUIRED_DISTRO_FEATURES += "smack"
-
-# The upstream source code contains the Tizen-specific policy configuration files.
-# To replace them, create a security-manager.bbappend and set the following variable to a
-# space-separated list of policy file names (not URIs!), for example:
-# SECURITY_MANAGER_POLICY = "privilege-group.list usertype-system.profile"
-#
-# Leave it empty to use the upstream Tizen policy.
-SECURITY_MANAGER_POLICY ?= ""
-SRC_URI_append = " ${@' '.join(['file://' + x for x in d.getVar('SECURITY_MANAGER_POLICY', True).split()])}"
-python do_patch_append () {
- import os
- import shutil
- import glob
- files = d.getVar('SECURITY_MANAGER_POLICY', True).split()
- if files:
- s = d.getVar('S', True)
- workdir = d.getVar('WORKDIR', True)
- for pattern in ['*.profile', '*.list']:
- for old_file in glob.glob(s + '/policy/' + pattern):
- os.unlink(old_file)
- for file in files:
- shutil.copy(file, s + '/policy')
-}
-
-do_install_append () {
- install -d ${D}/${systemd_unitdir}/system/multi-user.target.wants
- ln -s ../security-manager.service ${D}/${systemd_unitdir}/system/multi-user.target.wants/security-manager.service
- install -d ${D}/${systemd_unitdir}/system/sockets.target.wants
- ln -s ../security-manager.socket ${D}/${systemd_unitdir}/system/sockets.target.wants/security-manager.socket
-}
-
-RDEPENDS_${PN} += "sqlite3 cynara"
-FILES_${PN} += " \
- ${systemd_unitdir} \
- ${TZ_SYS_DB} \
- ${bindir}/.security-manager-setup \
-"
-
-PACKAGES =+ "${PN}-policy"
-FILES_${PN}-policy = " \
- ${datadir}/${PN} \
- ${bindir}/security-manager-policy-reload \
-"
diff --git a/meta-security/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch b/meta-security/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch
deleted file mode 100644
index 91ce81963..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0001-systemd-stop-using-compat-libs.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 3d9d1d83fe298a364f51ad752c17aad461beded3 Mon Sep 17 00:00:00 2001
-From: Patrick Ohly <patrick.ohly@intel.com>
-Date: Tue, 24 Mar 2015 04:54:03 -0700
-Subject: [PATCH 01/14] systemd: stop using compat libs
-
-libsystemd-journal and libsystemd-daemon are considered obsolete
-in systemd since 2.09 and may not be available (not compiled
-by default).
-
-The code works fine with the current libsystemd, so just
-use that.
-
-Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
-Upstream-Status: Submitted (https://github.com/Samsung/security-manager/pull/1
----
- src/common/CMakeLists.txt | 2 +-
- src/server/CMakeLists.txt | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
-index 2da9c3e..968c7c1 100644
---- a/src/common/CMakeLists.txt
-+++ b/src/common/CMakeLists.txt
-@@ -3,7 +3,7 @@ SET(COMMON_VERSION ${COMMON_VERSION_MAJOR}.0.2)
-
- PKG_CHECK_MODULES(COMMON_DEP
- REQUIRED
-- libsystemd-journal
-+ libsystemd
- libsmack
- db-util
- cynara-admin
-diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
-index 753eb96..6849d76 100644
---- a/src/server/CMakeLists.txt
-+++ b/src/server/CMakeLists.txt
-@@ -1,6 +1,6 @@
- PKG_CHECK_MODULES(SERVER_DEP
- REQUIRED
-- libsystemd-daemon
-+ libsystemd
- )
-
- FIND_PACKAGE(Boost REQUIRED)
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch b/meta-security/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch
deleted file mode 100644
index b6346480b..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From a90515613f09140049b2bdf471fa83d5dd7bad1c Mon Sep 17 00:00:00 2001
-From: Patrick Ohly <patrick.ohly@intel.com>
-Date: Wed, 19 Aug 2015 15:02:32 +0200
-Subject: [PATCH 02/14] security-manager-policy-reload: do not depend on GNU
- sed
-
-\U (= make replacement uppercase) is a GNU sed extension which is not
-supported by other sed implementation's (like the one from
-busybox). When using busybox, the bucket for user profiles became
-USER_TYPE_Uadmin instead USER_TYPE_ADMIN.
-
-To make SecurityManager more portable, better use tr to turn the
-bucket name into uppercase.
-
-Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
-Upstream-Status: Submitted (https://github.com/Samsung/security-manager/pull/1
----
- policy/security-manager-policy-reload | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/policy/security-manager-policy-reload b/policy/security-manager-policy-reload
-index 274c49c..6f211c6 100755
---- a/policy/security-manager-policy-reload
-+++ b/policy/security-manager-policy-reload
-@@ -33,7 +33,7 @@ END
- find "$POLICY_PATH" -name "usertype-*.profile" |
- while read file
- do
-- bucket="`echo $file | sed -r 's|.*/usertype-(.*).profile$|USER_TYPE_\U\1|'`"
-+ bucket="`echo $file | sed -r 's|.*/usertype-(.*).profile$|USER_TYPE_\1|' | tr '[:lower:]' '[:upper:]'`"
-
- # Re-create the bucket with empty contents
- cyad --delete-bucket=$bucket || true
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch b/meta-security/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch
deleted file mode 100644
index d79345e01..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0003-Smack-rules-create-two-new-functions.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From a80e33bc0a10fa4bed5d0b7bf29f45dd2565d309 Mon Sep 17 00:00:00 2001
-From: Alejandro Joya <alejandro.joya.cruz@intel.com>
-Date: Wed, 4 Nov 2015 19:01:35 -0600
-Subject: [PATCH 03/14] Smack-rules: create two new functions
-
-It let to smack-rules to create multiple set of rules
-related with the privileges.
-
-It runs from the same bases than for a static set of rules on the
-template, but let you add 1 or many templates for different cases.
-
-Change-Id: I14f8d4e914ad5a7ba34c96f3cb5589f0b15292de
-Signed-off-by: Alejandro Joya <alejandro.joya.cruz@intel.com>
----
- src/common/include/smack-rules.h | 15 +++++++++++
- src/common/smack-rules.cpp | 44 ++++++++++++++++++++++++++++++++
- 2 files changed, 59 insertions(+)
-
-diff --git a/src/common/include/smack-rules.h b/src/common/include/smack-rules.h
-index 91446a7..3ad9dd4 100644
---- a/src/common/include/smack-rules.h
-+++ b/src/common/include/smack-rules.h
-@@ -47,6 +47,8 @@ public:
- void addFromTemplate(const std::vector<std::string> &templateRules,
- const std::string &appId, const std::string &pkgId);
- void addFromTemplateFile(const std::string &appId, const std::string &pkgId);
-+ void addFromTemplateFile(const std::string &appId, const std::string &pkgId,
-+ const std::string &path);
-
- void apply() const;
- void clear() const;
-@@ -74,6 +76,19 @@ public:
- */
- static void installApplicationRules(const std::string &appId, const std::string &pkgId,
- const std::vector<std::string> &pkgContents);
-+ /**
-+ * Install privileges-specific smack rules.
-+ *
-+ * Function creates smack rules using predefined template. Rules are applied
-+ * to the kernel and saved on persistent storage so they are loaded on system boot.
-+ *
-+ * @param[in] appId - application id that is beeing installed
-+ * @param[in] pkgId - package id that the application is in
-+ * @param[in] pkgContents - a list of all applications in the package
-+ * @param[in] privileges - a list of all prvileges
-+ */
-+ static void installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId,
-+ const std::vector<std::string> &pkgContents, const std::vector<std::string> &privileges);
- /**
- * Uninstall package-specific smack rules.
- *
-diff --git a/src/common/smack-rules.cpp b/src/common/smack-rules.cpp
-index 3629e0f..922a56f 100644
---- a/src/common/smack-rules.cpp
-+++ b/src/common/smack-rules.cpp
-@@ -135,6 +135,29 @@ void SmackRules::saveToFile(const std::string &path) const
- }
- }
-
-+void SmackRules::addFromTemplateFile(const std::string &appId,
-+ const std::string &pkgId, const std::string &path)
-+{
-+ std::vector<std::string> templateRules;
-+ std::string line;
-+ std::ifstream templateRulesFile(path);
-+
-+ if (!templateRulesFile.is_open()) {
-+ LogError("Cannot open rules template file: " << path);
-+ ThrowMsg(SmackException::FileError, "Cannot open rules template file: " << path);
-+ }
-+
-+ while (std::getline(templateRulesFile, line)) {
-+ templateRules.push_back(line);
-+ }
-+
-+ if (templateRulesFile.bad()) {
-+ LogError("Error reading template file: " << APP_RULES_TEMPLATE_FILE_PATH);
-+ ThrowMsg(SmackException::FileError, "Error reading template file: " << APP_RULES_TEMPLATE_FILE_PATH);
-+ }
-+
-+ addFromTemplate(templateRules, appId, pkgId);
-+}
-
- void SmackRules::addFromTemplateFile(const std::string &appId,
- const std::string &pkgId)
-@@ -223,7 +246,28 @@ std::string SmackRules::getApplicationRulesFilePath(const std::string &appId)
- std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("app_" + appId).c_str()));
- return path;
- }
-+void SmackRules::installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId,
-+ const std::vector<std::string> &pkgContents, const std::vector<std::string> &privileges)
-+{
-+ SmackRules smackRules;
-+ std::string appPath = getApplicationRulesFilePath(appId);
-+ smackRules.loadFromFile(appPath);
-+ struct stat buffer;
-+ for (auto privilege : privileges) {
-+ if (privilege.empty())
-+ continue;
-+ std::string fprivilege ( privilege + "-template.smack");
-+ std::string path(tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", fprivilege.c_str()));
-+ if( stat(path.c_str(), &buffer) == 0)
-+ smackRules.addFromTemplateFile(appId, pkgId, path);
-+ }
-+
-+ if (smack_smackfs_path() != NULL)
-+ smackRules.apply();
-
-+ smackRules.saveToFile(appPath);
-+ updatePackageRules(pkgId, pkgContents);
-+}
- void SmackRules::installApplicationRules(const std::string &appId, const std::string &pkgId,
- const std::vector<std::string> &pkgContents)
- {
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch b/meta-security/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch
deleted file mode 100644
index 59d4971ff..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0004-app-install-implement-multiple-set-of-smack-rules.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From a5979d9d674e400ecd7fcdf5d7589cfa0cfeb492 Mon Sep 17 00:00:00 2001
-From: Alejandro Joya <alejandro.joya.cruz@intel.com>
-Date: Wed, 4 Nov 2015 19:06:23 -0600
-Subject: [PATCH 04/14] app-install: implement multiple set of smack-rules
-
-If it's need it could create load multiple set of smack rules
-related with the privileges.
-It wouldn't affect the case that only the default set of rules is need it.
-
-Signed-off-by: Alejandro Joya <alejandro.joya.cruz@intel.com>
----
- src/common/service_impl.cpp | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/src/common/service_impl.cpp b/src/common/service_impl.cpp
-index 7fd621c..ae305d3 100644
---- a/src/common/service_impl.cpp
-+++ b/src/common/service_impl.cpp
-@@ -338,6 +338,12 @@ int appInstall(const app_inst_req &req, uid_t uid)
- LogDebug("Adding Smack rules for new appId: " << req.appId << " with pkgId: "
- << req.pkgId << ". Applications in package: " << pkgContents.size());
- SmackRules::installApplicationRules(req.appId, req.pkgId, pkgContents);
-+ /*Setup for privileges custom rules*/
-+ LogDebug("Adding Smack rules for new appId: " << req.appId << " with pkgId: "
-+ << req.pkgId << ". Applications in package: " << pkgContents.size()
-+ << " and Privileges");
-+ SmackRules::installApplicationPrivilegesRules(req.appId, req.pkgId,
-+ pkgContents,req.privileges);
- } catch (const SmackException::Base &e) {
- LogError("Error while applying Smack policy for application: " << e.DumpToString());
- return SECURITY_MANAGER_API_ERROR_SETTING_FILE_LABEL_FAILED;
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch b/meta-security/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch
deleted file mode 100644
index 0739f28c7..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0005-c-11-replace-deprecated-auto_ptr.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 198ba9b9782fda19803e94d2afeff91189ac27af Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jobol@nonadev.net>
-Date: Wed, 13 Jan 2016 17:30:06 +0100
-Subject: [PATCH 05/14] c++11: replace deprecated auto_ptr
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream-Status: Submitted [https://review.tizen.org/gerrit/#/c/56940/]
-
-Change-Id: Id793c784c9674eef48f346226c094bdd9f7bbda8
-Signed-off-by: José Bollo <jobol@nonadev.net>
----
- src/dpl/core/include/dpl/binary_queue.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/dpl/core/include/dpl/binary_queue.h b/src/dpl/core/include/dpl/binary_queue.h
-index dd03f5e..185b6c7 100644
---- a/src/dpl/core/include/dpl/binary_queue.h
-+++ b/src/dpl/core/include/dpl/binary_queue.h
-@@ -33,7 +33,7 @@ namespace SecurityManager {
- * Binary queue auto pointer
- */
- class BinaryQueue;
--typedef std::auto_ptr<BinaryQueue> BinaryQueueAutoPtr;
-+typedef std::unique_ptr<BinaryQueue> BinaryQueueAutoPtr;
-
- /**
- * Binary stream implemented as constant size bucket list
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch b/meta-security/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch
deleted file mode 100644
index 3b8aad98c..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0006-socket-manager-removes-tizen-specific-call.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From ec098bf03cea23350ca7d1ea2ad88b9c88228943 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Fri, 8 Jan 2016 16:53:46 +0100
-Subject: [PATCH 06/14] socket-manager: removes tizen specific call
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function 'smack_fgetlabel' is specific to Tizen
-and is no more maintained upstream.
-
-Upstream-Status: Accepted [https://review.tizen.org/gerrit/#/c/56507/]
-
-Change-Id: I3802742b1758efe37b33e6d968ff727d68f2fd1f
-Signed-off-by: José Bollo <jobol@nonadev.net>
----
- src/server/main/socket-manager.cpp | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/src/server/main/socket-manager.cpp b/src/server/main/socket-manager.cpp
-index 94c54c6..5e1a79b 100644
---- a/src/server/main/socket-manager.cpp
-+++ b/src/server/main/socket-manager.cpp
-@@ -30,6 +30,7 @@
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/smack.h>
-+#include <linux/xattr.h>
- #include <sys/un.h>
- #include <sys/stat.h>
- #include <unistd.h>
-@@ -493,9 +494,9 @@ int SocketManager::CreateDomainSocketHelp(
- if (smack_check()) {
- LogInfo("Set up smack label: " << desc.smackLabel);
-
-- if (0 != smack_fsetlabel(sockfd, desc.smackLabel.c_str(), SMACK_LABEL_IPIN)) {
-- LogError("Error in smack_fsetlabel");
-- ThrowMsg(Exception::InitFailed, "Error in smack_fsetlabel");
-+ if (0 != smack_set_label_for_file(sockfd, XATTR_NAME_SMACKIPIN, desc.smackLabel.c_str())) {
-+ LogError("Error in smack_set_label_for_file");
-+ ThrowMsg(Exception::InitFailed, "Error in smack_set_label_for_file");
- }
- } else {
- LogInfo("No smack on platform. Socket won't be securied with smack label!");
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch b/meta-security/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch
deleted file mode 100644
index bad99d25a..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0007-removes-dependency-to-libslp-db-utils.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 9d0791dab4b4df086374c5c0ba2a6558e10e81c1 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Mon, 16 Nov 2015 15:56:27 +0100
-Subject: [PATCH 07/14] removes dependency to libslp-db-utils
-
-Change-Id: I90471e77d20e04bae58cc42eb2639e4aef97fdec
----
- src/common/CMakeLists.txt | 3 ++-
- src/dpl/db/src/sql_connection.cpp | 17 +----------------
- 2 files changed, 3 insertions(+), 17 deletions(-)
-
-diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
-index 968c7c1..9ae376f 100644
---- a/src/common/CMakeLists.txt
-+++ b/src/common/CMakeLists.txt
-@@ -5,7 +5,8 @@ PKG_CHECK_MODULES(COMMON_DEP
- REQUIRED
- libsystemd
- libsmack
-- db-util
-+ sqlite3
-+ icu-i18n
- cynara-admin
- cynara-client
- )
-diff --git a/src/dpl/db/src/sql_connection.cpp b/src/dpl/db/src/sql_connection.cpp
-index fdb4fe4..f49a6dc 100644
---- a/src/dpl/db/src/sql_connection.cpp
-+++ b/src/dpl/db/src/sql_connection.cpp
-@@ -26,7 +26,6 @@
- #include <memory>
- #include <dpl/noncopyable.h>
- #include <dpl/assert.h>
--#include <db-util.h>
- #include <unistd.h>
- #include <cstdio>
- #include <cstdarg>
-@@ -606,16 +605,7 @@ void SqlConnection::Connect(const std::string &address,
-
- // Connect to database
- int result;
-- if (type & Flag::UseLucene) {
-- result = db_util_open_with_options(
-- address.c_str(),
-- &m_connection,
-- flag,
-- NULL);
--
-- m_usingLucene = true;
-- LogPedantic("Lucene index enabled");
-- } else {
-+ (void)type;
- result = sqlite3_open_v2(
- address.c_str(),
- &m_connection,
-@@ -624,7 +614,6 @@ void SqlConnection::Connect(const std::string &address,
-
- m_usingLucene = false;
- LogPedantic("Lucene index disabled");
-- }
-
- if (result == SQLITE_OK) {
- LogPedantic("Connected to DB");
-@@ -653,11 +642,7 @@ void SqlConnection::Disconnect()
-
- int result;
-
-- if (m_usingLucene) {
-- result = db_util_close(m_connection);
-- } else {
- result = sqlite3_close(m_connection);
-- }
-
- if (result != SQLITE_OK) {
- const char *error = sqlite3_errmsg(m_connection);
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch b/meta-security/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch
deleted file mode 100644
index 5ece7ef4f..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0008-Fix-gcc6-build.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From a1d9b40b4fa2e73d31a53e398c286bffeaae1732 Mon Sep 17 00:00:00 2001
-From: Ronan <ronan.lemartret@iot.bzh>
-Date: Wed, 12 Oct 2016 17:48:55 +0200
-Subject: [PATCH 08/14] Fix gcc6 build
-
-Signed-off-by: ronan <ronan@ot.bzh>
----
- src/client/client-security-manager.cpp | 1 +
- src/common/include/privilege_db.h | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/src/client/client-security-manager.cpp b/src/client/client-security-manager.cpp
-index 74a6b30..347cddd 100644
---- a/src/client/client-security-manager.cpp
-+++ b/src/client/client-security-manager.cpp
-@@ -46,6 +46,7 @@
- #include <service_impl.h>
- #include <security-manager.h>
- #include <client-offline.h>
-+#include <linux/xattr.h>
-
- static const char *EMPTY = "";
-
-diff --git a/src/common/include/privilege_db.h b/src/common/include/privilege_db.h
-index 4d73d90..08fb9d6 100644
---- a/src/common/include/privilege_db.h
-+++ b/src/common/include/privilege_db.h
-@@ -32,6 +32,7 @@
- #include <map>
- #include <stdbool.h>
- #include <string>
-+#include <vector>
-
- #include <dpl/db/sql_connection.h>
- #include <tzplatform_config.h>
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch b/meta-security/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch
deleted file mode 100644
index 706eb1a93..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0009-Fix-Cmake-conf-for-gcc6-build.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 382379d74221bcc60a0ab70d63430a1c0587b2ec Mon Sep 17 00:00:00 2001
-From: Ronan <ronan.lemartret@iot.bzh>
-Date: Thu, 13 Oct 2016 11:37:47 +0200
-Subject: [PATCH 09/14] Fix Cmake conf for gcc6 build
-
-Signed-off-by: Ronan <ronan.lemartret@iot.bzh>
----
- src/cmd/CMakeLists.txt | 4 +---
- src/server/CMakeLists.txt | 1 -
- 2 files changed, 1 insertion(+), 4 deletions(-)
-
-diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt
-index ee9a160..aa7a12c 100644
---- a/src/cmd/CMakeLists.txt
-+++ b/src/cmd/CMakeLists.txt
-@@ -1,8 +1,6 @@
- FIND_PACKAGE(Boost REQUIRED COMPONENTS program_options)
-
--INCLUDE_DIRECTORIES(SYSTEM
-- ${Boost_INCLUDE_DIRS}
-- )
-+
-
- INCLUDE_DIRECTORIES(
- ${INCLUDE_PATH}
-diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
-index 6849d76..9598037 100644
---- a/src/server/CMakeLists.txt
-+++ b/src/server/CMakeLists.txt
-@@ -8,7 +8,6 @@ FIND_PACKAGE(Threads REQUIRED)
-
- INCLUDE_DIRECTORIES(SYSTEM
- ${SERVER_DEP_INCLUDE_DIRS}
-- ${Boost_INCLUDE_DIRS}
- ${Threads_INCLUDE_DIRS}
- )
-
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch b/meta-security/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch
deleted file mode 100644
index 0f48c5f68..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0010-gcc-7-requires-include-functional-for-std-function.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 8e93699c0f225716f3cd5eff790270ae9e3880f9 Mon Sep 17 00:00:00 2001
-From: Changhyeok Bae <changhyeok.bae@gmail.com>
-Date: Sun, 17 Dec 2017 15:40:58 +0000
-Subject: [PATCH 10/14] gcc-7 requires include <functional> for std::function
-
-Signed-off-by: Changhyeok Bae <changhyeok.bae@gmail.com>
----
- src/client/client-common.cpp | 1 +
- src/common/smack-labels.cpp | 1 +
- src/dpl/core/src/binary_queue.cpp | 1 +
- 3 files changed, 3 insertions(+)
-
-diff --git a/src/client/client-common.cpp b/src/client/client-common.cpp
-index 883ab8d..1babdf7 100644
---- a/src/client/client-common.cpp
-+++ b/src/client/client-common.cpp
-@@ -31,6 +31,7 @@
- #include <sys/xattr.h>
- #include <linux/xattr.h>
- #include <unistd.h>
-+#include <functional>
-
- #include <dpl/log/log.h>
- #include <dpl/serialization.h>
-diff --git a/src/common/smack-labels.cpp b/src/common/smack-labels.cpp
-index 0294a42..1598099 100644
---- a/src/common/smack-labels.cpp
-+++ b/src/common/smack-labels.cpp
-@@ -29,6 +29,7 @@
- #include <sys/xattr.h>
- #include <linux/xattr.h>
- #include <memory>
-+#include <functional>
- #include <fts.h>
- #include <cstring>
- #include <string>
-diff --git a/src/dpl/core/src/binary_queue.cpp b/src/dpl/core/src/binary_queue.cpp
-index 72817a6..838409f 100644
---- a/src/dpl/core/src/binary_queue.cpp
-+++ b/src/dpl/core/src/binary_queue.cpp
-@@ -26,6 +26,7 @@
- #include <malloc.h>
- #include <cstring>
- #include <new>
-+#include <functional>
-
- namespace SecurityManager {
- BinaryQueue::BinaryQueue() :
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch b/meta-security/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch
deleted file mode 100644
index 5c679fc26..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0011-Fix-gcc8-warning-error-Werror-catch-value.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 243b7ffee16558d7cb9b411f49380138efeffca9 Mon Sep 17 00:00:00 2001
-From: Stephane Desneux <stephane.desneux@iot.bzh>
-Date: Fri, 1 Feb 2019 12:26:17 +0000
-Subject: [PATCH 11/14] Fix gcc8 warning/error [-Werror=catch-value=]
-
-Fixes the following warning/error during compile:
-
-src/dpl/core/src/assert.cpp:61:14: error: catching polymorphic type 'class SecurityManager::Exception' by value [-Werror=catch-value=]
-| } catch (Exception) {
-| ^~~~~~~~~
-
-Signed-off-by: Stephane Desneux <stephane.desneux@iot.bzh>
----
- src/dpl/core/src/assert.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/dpl/core/src/assert.cpp b/src/dpl/core/src/assert.cpp
-index 63538a2..fc60ce9 100644
---- a/src/dpl/core/src/assert.cpp
-+++ b/src/dpl/core/src/assert.cpp
-@@ -58,7 +58,7 @@ void AssertProc(const char *condition,
- INTERNAL_LOG("### Function: " << function);
- INTERNAL_LOG(
- "################################################################################");
-- } catch (Exception) {
-+ } catch (Exception const&) {
- // Just ignore possible double errors
- }
-
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch b/meta-security/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch
deleted file mode 100644
index 91ccf9ee2..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0012-Avoid-casting-from-const-T-to-void.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 5ee51d38575f289c2bf37ed817ef680ed47bb320 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Fri, 1 Feb 2019 15:37:44 +0100
-Subject: [PATCH 12/14] Avoid casting from "const T&" to "void*"
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Latest version of g++ refuse the cast
-
- reinterpret_cast<void (Service::*)(void*)>(serviceFunction)
-
-I made no investigation to know if the problem
-is coming from the const or not.
-
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- src/server/main/include/service-thread.h | 42 ++++++++++--------------
- 1 file changed, 18 insertions(+), 24 deletions(-)
-
-diff --git a/src/server/main/include/service-thread.h b/src/server/main/include/service-thread.h
-index 964d168..61fdda8 100644
---- a/src/server/main/include/service-thread.h
-+++ b/src/server/main/include/service-thread.h
-@@ -94,7 +94,7 @@ public:
- Join();
- while (!m_eventQueue.empty()){
- auto front = m_eventQueue.front();
-- delete front.eventPtr;
-+ delete front;
- m_eventQueue.pop();
- }
- }
-@@ -104,34 +104,28 @@ public:
- Service *servicePtr,
- void (Service::*serviceFunction)(const T &))
- {
-- EventDescription description;
-- description.serviceFunctionPtr =
-- reinterpret_cast<void (Service::*)(void*)>(serviceFunction);
-- description.servicePtr = servicePtr;
-- description.eventFunctionPtr = &ServiceThread::EventCall<T>;
-- description.eventPtr = new T(event);
-+ EventCallerBase *ec = new EventCaller<T>(event, servicePtr, serviceFunction);
- {
- std::lock_guard<std::mutex> lock(m_eventQueueMutex);
-- m_eventQueue.push(description);
-+ m_eventQueue.push(ec);
- }
- m_waitCondition.notify_one();
- }
-
- protected:
-
-- struct EventDescription {
-- void (Service::*serviceFunctionPtr)(void *);
-- Service *servicePtr;
-- void (ServiceThread::*eventFunctionPtr)(const EventDescription &event);
-- GenericEvent* eventPtr;
-+ struct EventCallerBase {
-+ virtual void fire() = 0;
-+ virtual ~EventCallerBase() {}
- };
-
- template <class T>
-- void EventCall(const EventDescription &desc) {
-- auto fun = reinterpret_cast<void (Service::*)(const T&)>(desc.serviceFunctionPtr);
-- const T& eventLocale = *(static_cast<T*>(desc.eventPtr));
-- (desc.servicePtr->*fun)(eventLocale);
-- }
-+ struct EventCaller : public EventCallerBase {
-+ T *event; Service *target; void (Service::*function)(const T&);
-+ EventCaller(const T &e, Service *c, void (Service::*f)(const T&)) : event(new T(e)), target(c), function(f) {}
-+ ~EventCaller() { delete event; }
-+ void fire() { (target->*function)(*event); }
-+ };
-
- static void ThreadLoopStatic(ServiceThread *ptr) {
- ptr->ThreadLoop();
-@@ -139,33 +133,33 @@ protected:
-
- void ThreadLoop(){
- for (;;) {
-- EventDescription description = {NULL, NULL, NULL, NULL};
-+ EventCallerBase *ec = NULL;
- {
- std::unique_lock<std::mutex> ulock(m_eventQueueMutex);
- if (m_quit)
- return;
- if (!m_eventQueue.empty()) {
-- description = m_eventQueue.front();
-+ ec = m_eventQueue.front();
- m_eventQueue.pop();
- } else {
- m_waitCondition.wait(ulock);
- }
- }
-
-- if (description.eventPtr != NULL) {
-+ if (ec != NULL) {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
-- (this->*description.eventFunctionPtr)(description);
-- delete description.eventPtr;
-+ ec->fire();
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-+ delete ec;
- }
- }
- }
-
- std::thread m_thread;
- std::mutex m_eventQueueMutex;
-- std::queue<EventDescription> m_eventQueue;
-+ std::queue<EventCallerBase*> m_eventQueue;
- std::condition_variable m_waitCondition;
-
- State m_state;
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch b/meta-security/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch
deleted file mode 100644
index fb6215923..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0013-Removing-tizen-platform-config.patch
+++ /dev/null
@@ -1,259 +0,0 @@
-From 6c96a39ba7a7763ccd47e379dbfd8d376164985f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Mon, 16 Nov 2015 14:26:25 +0100
-Subject: [PATCH 13/14] Removing tizen-platform-config
-
-Change-Id: Ic832a2b75229517b09faba969c27fb1a4b490121
----
- CMakeLists.txt | 16 +++++++-
- db/CMakeLists.txt | 2 +-
- policy/CMakeLists.txt | 1 +
- ...load => security-manager-policy-reload.in} | 4 +-
- src/common/file-lock.cpp | 4 +-
- src/common/include/file-lock.h | 1 -
- src/common/include/privilege_db.h | 3 +-
- src/common/service_impl.cpp | 39 ++++++-------------
- src/common/smack-rules.cpp | 12 ++----
- 9 files changed, 37 insertions(+), 45 deletions(-)
- rename policy/{security-manager-policy-reload => security-manager-policy-reload.in} (94%)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 28790d8..37a43cc 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -49,7 +49,7 @@ ADD_DEFINITIONS("-Wall") # Generate all warnings
- ADD_DEFINITIONS("-Wextra") # Generate even more extra warnings
-
- STRING(REGEX MATCH "([^.]*)" API_VERSION "${VERSION}")
--ADD_DEFINITIONS("-DAPI_VERSION=\"$(API_VERSION)\"")
-+ADD_DEFINITIONS("-DAPI_VERSION=\"${API_VERSION}\"")
-
- ADD_DEFINITIONS("-DSMACK_ENABLED")
-
-@@ -58,6 +58,20 @@ IF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
- ADD_DEFINITIONS("-DBUILD_TYPE_DEBUG")
- ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
-
-+SET(DATADIR "/usr/share/security-manager" CACHE STRING "path to data directory")
-+SET(SMACKRULESDIR "/etc/smack/accesses.d" CACHE STRING "path to Smack rules directory")
-+SET(LOCKDIR "/var/run/lock" CACHE STRING "path to lock directory")
-+SET(DB_INSTALL_DIR "/var/db/security-manager" CACHE STRING "path to database directory")
-+SET(DB_FILENAME ".security-manager.db" CACHE STRING "basename of database")
-+SET(GLOBALUSER "userapp" CACHE STRING "name of the global user")
-+
-+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
-+ADD_DEFINITIONS("-DSMACKRULESDIR=\"${SMACKRULESDIR}\"")
-+ADD_DEFINITIONS("-DLOCKDIR=\"${LOCKDIR}\"")
-+ADD_DEFINITIONS("-DDB_INSTALL_DIR=\"${DB_INSTALL_DIR}\"")
-+ADD_DEFINITIONS("-DDB_FILENAME=\"${DB_FILENAME}\"")
-+ADD_DEFINITIONS("-DGLOBALUSER=\"${GLOBALUSER}\"")
-+
- ADD_SUBDIRECTORY(src)
- ADD_SUBDIRECTORY(pc)
- ADD_SUBDIRECTORY(systemd)
-diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt
-index 9e8ffcc..d7af1a0 100644
---- a/db/CMakeLists.txt
-+++ b/db/CMakeLists.txt
-@@ -1,4 +1,4 @@
--SET(TARGET_DB ".security-manager.db")
-+SET(TARGET_DB "$(DB_FILENAME)")
-
- ADD_CUSTOM_COMMAND(
- OUTPUT ${TARGET_DB} ${TARGET_DB}-journal
-diff --git a/policy/CMakeLists.txt b/policy/CMakeLists.txt
-index bd08edc..626a2bd 100644
---- a/policy/CMakeLists.txt
-+++ b/policy/CMakeLists.txt
-@@ -1,4 +1,5 @@
- FILE(GLOB USERTYPE_POLICY_FILES usertype-*.profile)
-+CONFIGURE_FILE(security-manager-policy-reload.in security-manager-policy-reload @ONLY)
- INSTALL(FILES ${USERTYPE_POLICY_FILES} DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy)
- INSTALL(FILES "app-rules-template.smack" DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy)
- INSTALL(FILES "privilege-group.list" DESTINATION ${SHARE_INSTALL_PREFIX}/security-manager/policy)
-diff --git a/policy/security-manager-policy-reload b/policy/security-manager-policy-reload.in
-similarity index 94%
-rename from policy/security-manager-policy-reload
-rename to policy/security-manager-policy-reload.in
-index 6f211c6..c1bc4e2 100755
---- a/policy/security-manager-policy-reload
-+++ b/policy/security-manager-policy-reload.in
-@@ -1,8 +1,8 @@
- #!/bin/sh -e
-
--POLICY_PATH=/usr/share/security-manager/policy
-+POLICY_PATH=@DATADIR@/policy
- PRIVILEGE_GROUP_MAPPING=$POLICY_PATH/privilege-group.list
--DB_FILE=`tzplatform-get TZ_SYS_DB | cut -d= -f2`/.security-manager.db
-+DB_FILE=@DB_INSTALL_DIR@/@DB_FILENAME@
-
- # Create default buckets
- while read bucket default_policy
-diff --git a/src/common/file-lock.cpp b/src/common/file-lock.cpp
-index 6f3996c..88d2092 100644
---- a/src/common/file-lock.cpp
-+++ b/src/common/file-lock.cpp
-@@ -30,9 +30,7 @@
-
- namespace SecurityManager {
-
--char const * const SERVICE_LOCK_FILE = tzplatform_mkpath3(TZ_SYS_RUN,
-- "lock",
-- "security-manager.lock");
-+char const * const SERVICE_LOCK_FILE = LOCKDIR "/security-manager.lock";
-
- FileLocker::FileLocker(const std::string &lockFile, bool blocking)
- {
-diff --git a/src/common/include/file-lock.h b/src/common/include/file-lock.h
-index 604b019..21a86a0 100644
---- a/src/common/include/file-lock.h
-+++ b/src/common/include/file-lock.h
-@@ -29,7 +29,6 @@
-
- #include <dpl/exception.h>
- #include <dpl/noncopyable.h>
--#include <tzplatform_config.h>
-
- namespace SecurityManager {
-
-diff --git a/src/common/include/privilege_db.h b/src/common/include/privilege_db.h
-index 08fb9d6..3344987 100644
---- a/src/common/include/privilege_db.h
-+++ b/src/common/include/privilege_db.h
-@@ -35,14 +35,13 @@
- #include <vector>
-
- #include <dpl/db/sql_connection.h>
--#include <tzplatform_config.h>
-
- #ifndef PRIVILEGE_DB_H_
- #define PRIVILEGE_DB_H_
-
- namespace SecurityManager {
-
--const char *const PRIVILEGE_DB_PATH = tzplatform_mkpath(TZ_SYS_DB, ".security-manager.db");
-+const char *const PRIVILEGE_DB_PATH = DB_INSTALL_DIR "/" DB_FILENAME;
-
- enum class QueryType {
- EGetPkgPrivileges,
-diff --git a/src/common/service_impl.cpp b/src/common/service_impl.cpp
-index ae305d3..42150fe 100644
---- a/src/common/service_impl.cpp
-+++ b/src/common/service_impl.cpp
-@@ -32,7 +32,6 @@
- #include <algorithm>
-
- #include <dpl/log/log.h>
--#include <tzplatform_config.h>
-
- #include "protocols.h"
- #include "privilege_db.h"
-@@ -131,7 +130,13 @@ static inline int validatePolicy(policy_entry &policyEntry, std::string uidStr,
-
- static uid_t getGlobalUserId(void)
- {
-- static uid_t globaluid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
-+ static uid_t globaluid = 0;
-+ if (!globaluid) {
-+ struct passwd pw, *p;
-+ char buf[4096];
-+ int rc = getpwnam_r(GLOBALUSER, &pw, buf, sizeof buf, &p);
-+ globaluid = (rc || p == NULL) ? 555 : p->pw_uid;
-+ }
- return globaluid;
- }
-
-@@ -161,37 +166,17 @@ static inline bool isSubDir(const char *parent, const char *subdir)
-
- static bool getUserAppDir(const uid_t &uid, std::string &userAppDir)
- {
-- struct tzplatform_context *tz_ctx = nullptr;
--
-- if (tzplatform_context_create(&tz_ctx))
-- return false;
--
-- if (tzplatform_context_set_user(tz_ctx, uid)) {
-- tzplatform_context_destroy(tz_ctx);
-- tz_ctx = nullptr;
-+ struct passwd pw, *p;
-+ char buf[4096];
-+ int rc = getpwuid_r(uid, &pw, buf, sizeof buf, &p);
-+ if (rc || p == NULL)
- return false;
-- }
--
-- enum tzplatform_variable id =
-- (uid == getGlobalUserId()) ? TZ_SYS_RW_APP : TZ_USER_APP;
-- const char *appDir = tzplatform_context_getenv(tz_ctx, id);
-- if (!appDir) {
-- tzplatform_context_destroy(tz_ctx);
-- tz_ctx = nullptr;
-- return false;
-- }
--
-- userAppDir = appDir;
--
-- tzplatform_context_destroy(tz_ctx);
-- tz_ctx = nullptr;
--
-+ userAppDir = p->pw_dir;
- return true;
- }
-
- static inline bool installRequestAuthCheck(const app_inst_req &req, uid_t uid, bool &isCorrectPath, std::string &appPath)
- {
-- std::string userHome;
- std::string userAppDir;
- std::stringstream correctPath;
-
-diff --git a/src/common/smack-rules.cpp b/src/common/smack-rules.cpp
-index 922a56f..c2e0041 100644
---- a/src/common/smack-rules.cpp
-+++ b/src/common/smack-rules.cpp
-@@ -34,7 +34,6 @@
- #include <memory>
-
- #include <dpl/log/log.h>
--#include <tzplatform_config.h>
-
- #include "smack-labels.h"
- #include "smack-rules.h"
-@@ -43,7 +42,7 @@ namespace SecurityManager {
-
- const char *const SMACK_APP_LABEL_TEMPLATE = "~APP~";
- const char *const SMACK_PKG_LABEL_TEMPLATE = "~PKG~";
--const char *const APP_RULES_TEMPLATE_FILE_PATH = tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", "app-rules-template.smack");
-+const char *const APP_RULES_TEMPLATE_FILE_PATH = DATADIR "/policy/app-rules-template.smack";
- const char *const SMACK_APP_IN_PACKAGE_PERMS = "rwxat";
-
- SmackRules::SmackRules()
-@@ -237,14 +236,12 @@ void SmackRules::generatePackageCrossDeps(const std::vector<std::string> &pkgCon
-
- std::string SmackRules::getPackageRulesFilePath(const std::string &pkgId)
- {
-- std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("pkg_" + pkgId).c_str()));
-- return path;
-+ return SMACKRULESDIR "/pkg_" + pkgId;
- }
-
- std::string SmackRules::getApplicationRulesFilePath(const std::string &appId)
- {
-- std::string path(tzplatform_mkpath3(TZ_SYS_SMACK, "accesses.d", ("app_" + appId).c_str()));
-- return path;
-+ return SMACKRULESDIR "/app_" + appId;
- }
- void SmackRules::installApplicationPrivilegesRules(const std::string &appId, const std::string &pkgId,
- const std::vector<std::string> &pkgContents, const std::vector<std::string> &privileges)
-@@ -256,8 +253,7 @@ void SmackRules::installApplicationPrivilegesRules(const std::string &appId, con
- for (auto privilege : privileges) {
- if (privilege.empty())
- continue;
-- std::string fprivilege ( privilege + "-template.smack");
-- std::string path(tzplatform_mkpath4(TZ_SYS_SHARE, "security-manager", "policy", fprivilege.c_str()));
-+ std::string path = DATADIR "/policy/" + privilege + "-template.smack";
- if( stat(path.c_str(), &buffer) == 0)
- smackRules.addFromTemplateFile(appId, pkgId, path);
- }
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch b/meta-security/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch
deleted file mode 100644
index 542a387d2..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0014-Ensure-post-install-initialization-of-database.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From c7f9d14e38a1b6d40b2fffa01433a3025eff9abd Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Tue, 26 Nov 2019 12:34:39 +0100
-Subject: [PATCH 14/14] Ensure post install initialization of database
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Creation of the database was made during image creation,
-leading to issue with SOTA. This adds the creation on
-need before launching the service.
-
-Change-Id: Idfd0676bd87d39f7c10eaafd63f3a318f675c972
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- db/CMakeLists.txt | 14 ++++++--------
- db/security-manager-setup | 14 ++++++++++++++
- systemd/security-manager.service.in | 1 +
- 3 files changed, 21 insertions(+), 8 deletions(-)
- create mode 100644 db/security-manager-setup
-
-diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt
-index d7af1a0..dcf5bc8 100644
---- a/db/CMakeLists.txt
-+++ b/db/CMakeLists.txt
-@@ -1,12 +1,10 @@
--SET(TARGET_DB "$(DB_FILENAME)")
--
- ADD_CUSTOM_COMMAND(
-- OUTPUT ${TARGET_DB} ${TARGET_DB}-journal
-- COMMAND sqlite3 ${TARGET_DB} <db.sql
-- )
-+ OUTPUT .security-manager-setup
-+ COMMAND sed '/--DB\.SQL--/r db.sql' security-manager-setup > .security-manager-setup
-+ DEPENDS security-manager-setup db.sql
-+)
-
- # Add a dummy build target to trigger building of ${TARGET_DB}
--ADD_CUSTOM_TARGET(DB ALL DEPENDS ${TARGET_DB})
-+ADD_CUSTOM_TARGET(DB ALL DEPENDS .security-manager-setup)
-
--INSTALL(FILES ${TARGET_DB} DESTINATION ${DB_INSTALL_DIR})
--INSTALL(FILES ${TARGET_DB}-journal DESTINATION ${DB_INSTALL_DIR})
-+INSTALL(PROGRAMS .security-manager-setup DESTINATION ${BIN_INSTALL_DIR})
-diff --git a/db/security-manager-setup b/db/security-manager-setup
-new file mode 100644
-index 0000000..5675baf
---- /dev/null
-+++ b/db/security-manager-setup
-@@ -0,0 +1,14 @@
-+#!/bin/sh
-+
-+if test -f "$1"; then exit; fi
-+set -e
-+dbdir="$(dirname "$1")"
-+dbfile="$(basename "$1")"
-+test -n "$dbfile"
-+test -n "$dbdir"
-+mkdir -p "$dbdir"
-+cd "$dbdir"
-+sqlite3 "$dbfile" << END-OF-CAT
-+--DB.SQL--
-+END-OF-CAT
-+
-diff --git a/systemd/security-manager.service.in b/systemd/security-manager.service.in
-index 23fd1b2..2bf97d7 100644
---- a/systemd/security-manager.service.in
-+++ b/systemd/security-manager.service.in
-@@ -3,5 +3,6 @@ Description=Start the security manager
-
- [Service]
- Type=notify
-+ExecStartPre=@BIN_INSTALL_DIR@/.security-manager-setup @DB_INSTALL_DIR@/@DB_FILENAME@
- ExecStart=@BIN_INSTALL_DIR@/security-manager
- Sockets=security-manager.socket
---
-2.21.0
-
diff --git a/meta-security/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch b/meta-security/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch
deleted file mode 100644
index d9949193b..000000000
--- a/meta-security/recipes-security/security-manager/security-manager/0015-Restrict-socket-accesses.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 7cffcd61378a9d7c0e7db5691b2da3a37448c969 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
-Date: Thu, 30 Jan 2020 09:19:25 +0100
-Subject: [PATCH 15/15] Restrict socket accesses
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Ensure that only members of the group and the owner can access
-the security manager.
-
-Bug-AGL: SPEC-3146
-
-Change-Id: I68ce6523db4bfd4707c3680555c3cb0cf8858ef2
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- systemd/security-manager.socket | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/systemd/security-manager.socket b/systemd/security-manager.socket
-index af1c1da..b401f77 100644
---- a/systemd/security-manager.socket
-+++ b/systemd/security-manager.socket
-@@ -1,6 +1,6 @@
- [Socket]
- ListenStream=/run/security-manager.socket
--SocketMode=0777
-+SocketMode=0660
- SmackLabelIPIn=*
- SmackLabelIPOut=@
-
---
-2.21.1
-
diff --git a/meta-security/recipes-security/security-manager/security-manager_git.bb b/meta-security/recipes-security/security-manager/security-manager_git.bb
deleted file mode 100644
index b34973519..000000000
--- a/meta-security/recipes-security/security-manager/security-manager_git.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-require security-manager.inc
-
-PV = "1.0.2+git${SRCPV}"
-SRCREV = "860305a595d681d650024ad07b3b0977e1fcb0a6"
-SRC_URI += "git://github.com/Samsung/security-manager.git"
-S = "${WORKDIR}/git"
-
-SRC_URI += " \
- file://0001-systemd-stop-using-compat-libs.patch \
- file://0002-security-manager-policy-reload-do-not-depend-on-GNU-.patch \
- file://0003-Smack-rules-create-two-new-functions.patch \
- file://0004-app-install-implement-multiple-set-of-smack-rules.patch \
- file://0005-c-11-replace-deprecated-auto_ptr.patch \
- file://0006-socket-manager-removes-tizen-specific-call.patch \
- file://0007-removes-dependency-to-libslp-db-utils.patch \
- file://0008-Fix-gcc6-build.patch \
- file://0009-Fix-Cmake-conf-for-gcc6-build.patch \
- file://0010-gcc-7-requires-include-functional-for-std-function.patch \
- file://0011-Fix-gcc8-warning-error-Werror-catch-value.patch \
- file://0012-Avoid-casting-from-const-T-to-void.patch \
- file://0013-Removing-tizen-platform-config.patch \
- file://0014-Ensure-post-install-initialization-of-database.patch \
- file://0015-Restrict-socket-accesses.patch \
-"
-
-# Use make with cmake and not ninja
-OECMAKE_GENERATOR = "Unix Makefiles"
diff --git a/meta-security/recipes-security/smacknet/files/smacknet b/meta-security/recipes-security/smacknet/files/smacknet
deleted file mode 100644
index 3818d30ae..000000000
--- a/meta-security/recipes-security/smacknet/files/smacknet
+++ /dev/null
@@ -1,184 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, 2013, Intel Corporation
-# Copyright (c) 2009 David Wolinsky <davidiw@ufl.edu), University of Florida
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import socket,fcntl, struct, thread
-import os.path
-import sys
-
-SMACKFS_LOAD="/sys/fs/smackfs/load2"
-SMACKFS_NETLABEL="/sys/fs/smackfs/netlabel"
-SIOCGIFADDR = 0x8915
-SIOCGIFNETMASK = 0x891b
-
-def get_ip_address(ifname):
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- return fcntl.ioctl(s.fileno(), SIOCGIFADDR,
- struct.pack('256s', ifname.encode("utf-8")))[20:24]
-
-def get_netmask(ifname):
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- return fcntl.ioctl(s.fileno(), SIOCGIFNETMASK,
- struct.pack('256s', ifname.encode("utf-8")))[20:24]
-
-def applynetlabeltags(interface, addr):
- if not interface.startswith("lo"):
- bmask = get_netmask(interface.encode("utf-8"))
- prefix = bin(struct.unpack(">L", bmask)[0]).count("1")
- tags = [
- addr+"/"+str(prefix)+" Network::Local\n",
- "0.0.0.0/0 Network::Cloud\n",
- "127.0.0.1/8 -CIPSO\n"]
- smackfs_netlabel(tags)
-
-def loadnetlabelrules():
- rulesSystem = [
- "System Network::Cloud w\n",
- "System Network::Local w\n",
- "Network::Cloud System w\n",
- "Network::Local System w\n"]
- smackfs_load2(rulesSystem)
-
-def smackfs_load2 (rules):
- with open(SMACKFS_LOAD, "w") as load2:
- for rule in rules:
- load2.write(rule)
-
-def smackfs_netlabel (tags):
- for tag in tags:
- with open(SMACKFS_NETLABEL, "w") as netlabel:
- netlabel.write(tag)
-
-"""
- Source of: Class ip monitor, and other functions named bellow.
- Original author: David Wolinsky <davidiw@ufl.edu
- Copied from: https://github.com/davidiw/Grid-Appliance/blob/master/scripts/ip_monitor.py
-
-"""
-
-"""4 byte alignment"""
-
-def align(inc):
- diff = inc % 4
- return inc + ((4 - diff) % 4)
-
-class ifaddr:
- """Parse an ifaddr packet"""
- LOCAL = 2
- LABEL = 3
-
- def __init__(self, packet):
- self.family, self.prefixlen, self.flags, self.scope, self.index = \
- struct.unpack("BBBBI", packet[:8])
-
-class rtattr:
- """Parse a rtattr packet"""
- GRP_IPV4_IFADDR = 0x10
-
- NEWADDR = 20
- DELADDR = 21
- GETADDR = 22
-
- def __init__(self, packet):
- self.len, self.type = struct.unpack("HH", packet[:4])
- if self.type == ifaddr.LOCAL:
- addr = struct.unpack("BBBB", packet[4:self.len])
- self.payload = "%s.%s.%s.%s" % (addr[0], addr[1], addr[2], addr[3])
- elif self.type == ifaddr.LABEL:
- self.payload = packet[4:self.len].strip("\0")
- else:
- self.payload = packet[4:self.len]
-
-class netlink:
- """Parse a netlink packet"""
- REQUEST = 1
- ROOT = 0x100
- MATCH = 0x200
- DONE = 3
-
- def __init__(self, packet):
- self.msglen, self.msgtype, self.flags, self.seq, self.pid = \
- struct.unpack("IHHII", packet[:16])
- self.ifa = None
- try:
- self.ifa = ifaddr(packet[16:24])
- except:
- return
-
- self.rtas = {}
- pos = 24
- while pos < self.msglen:
- try:
- rta = rtattr(packet[pos:])
- except:
- break
- pos += align(rta.len)
- self.rtas[rta.type] = rta.payload
-
-class ip_monitor:
- def __init__(self, callback = None):
- if callback == None:
- callback = self.print_cb
- self._callback = callback
-
- def print_cb(self, label, addr):
- print (label + " => " + addr)
-
- def request_addrs(self, sock):
- sock.send(struct.pack("IHHIIBBBBI", 24, rtattr.GETADDR, \
- netlink.REQUEST | netlink.ROOT | netlink.MATCH, 0, sock.getsockname()[0], \
- socket.AF_INET, 0, 0, 0, 0))
-
- def start_thread(self):
- thread.start_new_thread(self.run, ())
-
- def run(self):
- sock = socket.socket(socket.AF_NETLINK, socket.SOCK_RAW, socket.NETLINK_ROUTE)
- sock.bind((0, rtattr.GRP_IPV4_IFADDR))
- self.request_addrs(sock)
-
- while True:
- data = sock.recv(4096)
- pos = 0
- while pos < len(data):
- nl = netlink(data[pos:])
- if nl.msgtype == netlink.DONE:
- break
- pos += align(nl.msglen)
- if nl.msgtype != rtattr.NEWADDR:
- continue
- self._callback(nl.rtas[ifaddr.LABEL], nl.rtas[ifaddr.LOCAL])
-
-def main():
- if not os.path.isfile(SMACKFS_LOAD):
- print ("Smack not found.")
- return -1
- loadnetlabelrules()
-
- ip_monitor(applynetlabeltags).run()
-
-if __name__ == "__main__":
- main()
diff --git a/meta-security/recipes-security/smacknet/files/smacknet.service b/meta-security/recipes-security/smacknet/files/smacknet.service
deleted file mode 100644
index 218d8b896..000000000
--- a/meta-security/recipes-security/smacknet/files/smacknet.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=netlabels configuration for SMACK
-Wants=network.target network-online.target
-After=network.target network-online.target
-
-[Service]
-TimeoutStartSec=0
-ExecStart=@BINDIR@/smacknet
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-security/recipes-security/smacknet/smacknet.bb b/meta-security/recipes-security/smacknet/smacknet.bb
deleted file mode 100644
index 250cdb132..000000000
--- a/meta-security/recipes-security/smacknet/smacknet.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-#SMACKNET Description
-SUMMARY = "Smack network labels configuration"
-DESCRIPTION = "Provide service that will be labeling the network rules"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
-RDEPENDS_${PN} = "python"
-
-SRC_URI += "file://smacknet \
- file://smacknet.service \
- "
-S = "${WORKDIR}"
-
-inherit systemd
-
-inherit features_check
-REQUIRED_DISTRO_FEATURES = "smack"
-
-#netlabel configuration service
-SYSTEMD_SERVICE_${PN} = "smacknet.service"
-SYSTEMD_AUTO_ENABLE = "enable"
-do_install(){
- install -d ${D}${bindir}
- install -m 0551 ${WORKDIR}/smacknet ${D}${bindir}
-
- install -d -m 755 ${D}${systemd_unitdir}/system
- install -m 644 ${WORKDIR}/smacknet.service ${D}${systemd_unitdir}/system
- sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_unitdir}/system/smacknet.service
-}
-
diff --git a/scripts/.aglsetup_genconfig.bash b/scripts/.aglsetup_genconfig.bash
index 323479c3c..c7ed92e47 100755
--- a/scripts/.aglsetup_genconfig.bash
+++ b/scripts/.aglsetup_genconfig.bash
@@ -223,15 +223,15 @@ function append_fragment() {
echo >>$basefile
echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #" >>$basefile
echo "# fragment { " >>$basefile
- [[ -f $f ]] && echo "# $f" >>$basefile || true
+ [[ -n $f ]] && echo "# $f" >>$basefile || true
echo "#" >>$basefile
[[ -n "$label" ]] && echo "$label" >>$basefile
- [[ -f $f ]] && cat $f >>$basefile || true
+ [[ -n $f ]] && cat $f >>$basefile || true
echo "" >>$basefile
echo "#" >>$basefile
echo "# }" >>$basefile
echo "# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #" >>$basefile
- [[ -f $f ]] && echo $f >>$BUILDDIR/conf/fragments.log || true
+ [[ -n $f ]] && echo $f >>$BUILDDIR/conf/fragments.log || true
}
function execute_setup() {
@@ -496,6 +496,7 @@ EOF
[[ $FORCE -eq 1 ]] && rm -f \
$BUILDDIR/conf/local.conf \
$BUILDDIR/conf/bblayers.conf \
+ $BUILDDIR/conf/templateconf.cfg \
$BUILDDIR/conf/setup.* \
$BUILDDIR/conf/*.log
@@ -558,12 +559,12 @@ infon "Generating setup file: $BUILDDIR/agl-init-build-env ... "
cat <<EOF >$BUILDDIR/agl-init-build-env
. $METADIR/external/poky/oe-init-build-env $BUILDDIR
if [ -n "\$DL_DIR" ]; then
- BB_ENV_EXTRAWHITE="\$BB_ENV_EXTRAWHITE DL_DIR"
+ BB_ENV_PASSTHROUGH_ADDITIONS="\$BB_ENV_PASSTHROUGH_ADDITIONS DL_DIR"
fi
if [ -n "\$SSTATE_DIR" ]; then
- BB_ENV_EXTRAWHITE="\$BB_ENV_EXTRAWHITE SSTATE_DIR"
+ BB_ENV_PASSTHROUGH_ADDITIONS="\$BB_ENV_PASSTHROUGH_ADDITIONS SSTATE_DIR"
fi
-export BB_ENV_EXTRAWHITE
+export BB_ENV_PASSTHROUGH_ADDITIONS
unset TEMPLATECONF
EOF
info "OK"
diff --git a/scripts/README-mkefi-agl.md b/scripts/README-mkefi-agl.md
deleted file mode 100644
index 2262fb129..000000000
--- a/scripts/README-mkefi-agl.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Introduction
-
-This script will install the AGL distribution on a removable device to boot on Intel UEFI-based computer.
-
-In particular it can create a USB or SD bootable support for [MinnowBoard](www.minnowboard.org).
-
-Usage: mkefi-agl.sh [-v] IDSK_IMAGE REMOVABLE_DEVICE
- -v: Verbose debug
- HDDIMG: The DISK_IMAGE file generated by Yocto the efi disk from
- Supported formats are .hddimg, .wic .wic.xz
- REMOVABLE_DEVICE: The block device to write the image to, e.g. /dev/sdh
-ex:
- mkefi-agl.sh agl-demo-platform-intel-corei7-64.hddimg /dev/sdd
- mkefi-agl.sh agl-demo-platform-intel-corei7-64.wic.xz /dev/sdd
-
-## Documentation
-
-[Additional documentation](https://wiki.automotivelinux.org/agl-distro/developer_resources_intel)
diff --git a/scripts/ci-yocto-check-layer.sh b/scripts/ci-yocto-check-layer.sh
new file mode 100755
index 000000000..c22114356
--- /dev/null
+++ b/scripts/ci-yocto-check-layer.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+set -e
+
+pushd .
+
+pushd meta-agl-core
+./scripts/run-yocto-check-layer.sh
+popd
+
+pushd meta-netboot
+./scripts/run-yocto-check-layer.sh
+popd
+
+pushd meta-pipewire
+./scripts/run-yocto-check-layer.sh
+popd
+
+pushd meta-app-framework
+./scripts/run-yocto-check-layer.sh
+popd
+
+popd \ No newline at end of file
diff --git a/scripts/envsetup.sh b/scripts/envsetup.sh
index 27b1de19a..f13256a8c 100644
--- a/scripts/envsetup.sh
+++ b/scripts/envsetup.sh
@@ -75,7 +75,7 @@ else
| To support the newest/upcoming features, please use the script aglsetup.sh. |
------------------------------------------------------------------------------
EOF
- . $SOURCEDIR/aglsetup.sh -m $1 -b $BUILD_DIR agl-devel agl-netboot agl-appfw-smack agl-demo
+ . $SOURCEDIR/aglsetup.sh -m $1 -b $BUILD_DIR agl-devel agl-netboot agl-demo
rc=$?
unset SOURCEDIR
unset BUILD_DIR
diff --git a/templates/base/00_local.conf.agl.inc b/templates/base/00_local.conf.agl.inc
index b49c44df6..d55cbef4b 100644
--- a/templates/base/00_local.conf.agl.inc
+++ b/templates/base/00_local.conf.agl.inc
@@ -6,6 +6,3 @@ DISTRO = "poky-agl"
#see meta-agl/meta-agl-profile-core/conf/include/base-agl.inc
require conf/include/base-agl.inc
-
-#see meta-agl/meta-app-framework/conf/include/agl-appfw-smack.inc
-require conf/include/agl-appfw-smack.inc
diff --git a/templates/base/01_setup_pkg_revision.sh b/templates/base/01_setup_pkg_revision.sh
index 034256c7d..a9e4ceb8c 100644
--- a/templates/base/01_setup_pkg_revision.sh
+++ b/templates/base/01_setup_pkg_revision.sh
@@ -36,7 +36,7 @@ EOF
cat <<'EOF' >> $LOCALCONF
PKGR = "${PR}${EXTENDPRAUTO}.${AGL_PR}"
PKGV = "${@ '${PV}'.replace('AUTOINC','${AGL_PR}')}"
-BB_HASHBASE_WHITELIST_append = " PKGR PKGV"
+BB_BASEHASH_IGNORE_VARS:append = " PKGR PKGV"
EOF
;;
value:*)
@@ -44,7 +44,7 @@ EOF
cat <<'EOF' >> $LOCALCONF
PKGR = "${PR}${EXTENDPRAUTO}.${AGL_PR}"
PKGV = "${@ '${PV}'.replace('AUTOINC','${AGL_PR}')}"
-BB_HASHBASE_WHITELIST_append = " PKGR PKGV"
+BB_BASEHASH_IGNORE_VARS:append = " PKGR PKGV"
EOF
;;
none)
diff --git a/templates/base/99_local.conf.inc b/templates/base/99_local.conf.inc
index c4f43998b..be5dd9321 100644
--- a/templates/base/99_local.conf.inc
+++ b/templates/base/99_local.conf.inc
@@ -4,7 +4,7 @@
# ARM 32bit 'medium' compiler (armv7thf instead of armv7ve)
# (only use for CPUs <= cortex-a9 / w/o virt extension - e.g. cortex-a8)
-# DISTRO_FEATURES_append = " agl-medium-arm-compiler"
+# AGL_FEATURES:append = " agl-medium-arm-compiler"
######################
diff --git a/templates/base/bblayers.conf.sample b/templates/base/bblayers.conf.sample
index 653f6dbe8..e3c5fcc65 100644
--- a/templates/base/bblayers.conf.sample
+++ b/templates/base/bblayers.conf.sample
@@ -15,6 +15,7 @@ METADIR := "${@os.path.abspath('##OEROOT##/../..')}"
YOCTO_LAYERS = " \
${METADIR}/external/poky/meta \
${METADIR}/external/poky/meta-poky \
+ ${METADIR}/external/meta-lts-mixins_rust \
"
# this is added for the boards where necessary, not globally
# ${METADIR}/external/poky/meta-yocto-bsp \
@@ -24,43 +25,49 @@ YOCTO_LAYERS = " \
# with some automotive tools/libraries
#-----------------------------------------------------
AGL_CORE_LAYERS = " \
- ${METADIR}/meta-agl/meta-agl-profile-core \
- ${METADIR}/meta-agl/meta-agl-distro \
+ ${METADIR}/meta-agl/meta-agl-core \
${METADIR}/meta-agl/meta-agl-bsp \
"
-AGL_APPFW_LAYERS = " \
- ${METADIR}/external/meta-security \
- ${METADIR}/external/meta-openembedded/meta-perl \
- ${METADIR}/meta-agl/meta-security \
- ${METADIR}/meta-agl/meta-app-framework \
- "
-
-
# These are the direct dependencies of the AGL CORE Layers
#---------------------------------------------------------
AGL_CORE_DEPENDENCY_LAYERS = " \
${METADIR}/external/meta-openembedded/meta-oe \
- ${METADIR}/external/meta-openembedded/meta-multimedia \
- ${METADIR}/external/meta-openembedded/meta-networking \
- ${METADIR}/external/meta-openembedded/meta-python \
- ${METADIR}/external/meta-openembedded/meta-filesystems \
"
+# Indirection to avoid duplicate inclusions of the same folder into BBLAYERS
+# the evaluation is in the bblayers.conf.sample in meta-agl/templates/base
+AGL_META_NETWORKING ?= ""
+AGL_META_PYTHON ?= ""
+AGL_META_FILESYSTEMS ?= ""
+AGL_META_MULTIMEDIA ?= ""
+AGL_META_VIRTUALIZATION ?= ""
+AGL_META_CLANG ?= ""
+AGL_META_QT5 ?= ""
+
+AGL_OTHER_DEPENDENCY_LAYERS = " \
+ ${AGL_META_NETWORKING} \
+ ${AGL_META_PYTHON} \
+ ${AGL_META_FILESYSTEMS} \
+ ${AGL_META_MULTIMEDIA} \
+ ${AGL_META_VIRTUALIZATION} \
+ ${AGL_META_CLANG} \
+ ${AGL_META_QT5} \
+ "
+
####################
# Combine the layers
BBLAYERS ?= " \
+ ${AGL_OTHER_DEPENDENCY_LAYERS} \
${AGL_CORE_DEPENDENCY_LAYERS} \
${AGL_CORE_LAYERS} \
- ${AGL_APPFW_LAYERS} \
${YOCTO_LAYERS} \
"
BBLAYERS_NON_REMOVABLE ?= " \
${METADIR}/external/poky/meta \
${METADIR}/external/poky/meta-poky \
- ${METADIR}/meta-agl/meta-agl-profile-core \
- ${METADIR}/meta-agl/meta-agl-distro \
+ ${METADIR}/meta-agl/meta-agl-core \
"
diff --git a/templates/base/conf-notes.txt b/templates/base/conf-notes.txt
index ed020184e..09ae72647 100644
--- a/templates/base/conf-notes.txt
+++ b/templates/base/conf-notes.txt
@@ -5,41 +5,31 @@ Common targets are:
* agl-image-minimal (minimal filesystem with APIs)
* agl-image-minimal-crosssdk (crosssdk for ^^)
- - with 'agl-profile-graphical'
* agl-image-weston (minimal filesystem with weston)
- - with 'agl-profile-graphical-qt5'
+- meta-agl-demo: (IVI demo with UI)
+ - with 'agl-demo'
+ * agl-image-ivi (base for IVI targets)
+ * agl-image-ivi-crosssdk (sdk for ^^)
+
* agl-image-graphical-qt5 (weston plus qt5 framework libs)
- * agl-image-graphical-qt5-crosssdk (crosssdk for ^^)
+ * agl-image-graphical-qt5-crosssdk (sdk for ^^)
- - with 'agl-profile-graphical-html5'
* agl-image-graphical-html5 (weston plus chromium for html5)
- - with 'agl-profile-cluster'
* agl-image-cluster (minimal image with APIs for cluster)
-
- - with 'agl-profile-cluster-qt5'
* agl-image-cluster-qt5 (image with QT5 and APIs for cluster)
- - with 'agl-profile-telematics'
* agl-image-telematics (image with APIs for telematics)
-- meta-agl-cluster-demo layer: (Instrument Cluster demo with UI)
- - with 'agl-cluster-demo'
+ * agl-demo-platform (* default IVI demo target *)
+ * agl-demo-platform-crosssdk (sdk for ^^)
+
* agl-cluster-demo-platform (cluster demo image)
* agl-cluster-demo-platform-crosssdk (sdk for ^^)
* agl-cluster-demo-qtcompositor (cluster demo using own compositor)
-- meta-agl-telematics-demo layer: (Telematics demo w/o UI)
- - with 'agl-telematics-demo'
* agl-telematics-demo-platform (telematics demo image)
* agl-telematics-demo-platform-crosssdk (sdk for ^^)
-- meta-agl-demo: (IVI demo with UI)
- - with 'agl-demo'
- * agl-image-ivi (base for IVI targets)
- * agl-image-ivi-crosssdk (sdk for ^^)
-
- * agl-demo-platform (* default IVI demo target *)
- * agl-demo-platform-crosssdk (sdk for ^^)
diff --git a/templates/base/local.conf.sample b/templates/base/local.conf.sample
index d506c8182..7f2c0b11a 100644
--- a/templates/base/local.conf.sample
+++ b/templates/base/local.conf.sample
@@ -149,11 +149,8 @@ EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
# enable extra features. Some available options which can be included in this variable
# are:
# - 'buildstats' collect build statistics
-# - 'image-mklibs' to reduce shared library files size for an image
# - 'image-prelink' in order to prelink the filesystem image
-# NOTE: if listing mklibs & prelink both, then make sure mklibs is before prelink
-# NOTE: mklibs also needs to be explicitly enabled for a given image, see local.conf.extended
-USER_CLASSES ?= "buildstats image-mklibs image-prelink"
+USER_CLASSES ?= "buildstats image-prelink"
#
# Runtime testing of images
@@ -163,7 +160,7 @@ USER_CLASSES ?= "buildstats image-mklibs image-prelink"
# run tests against any SDK that are built. To enable this uncomment these lines.
# See classes/test{image,sdk}.bbclass for further details.
#IMAGE_CLASSES += "testimage testsdk"
-#TESTIMAGE_AUTO_qemuall = "1"
+#TESTIMAGE_AUTO:qemuall = "1"
#
# Interactive shell configuration
@@ -189,7 +186,7 @@ PATCHRESOLVE = "noop"
#
# Monitor the disk space during the build. If there is less that 1GB of space or less
# than 100K inodes in any key build location (TMPDIR, DL_DIR, SSTATE_DIR), gracefully
-# shutdown the build. If there is less that 100MB or 1K inodes, perform a hard abort
+# shutdown the build. If there is less that 100MB or 1K inodes, perform a hard halt
# of the build. The reason for this is that running completely out of space can corrupt
# files and damages the build in ways which may not be easily recoverable.
# It's necesary to monitor /tmp, if there is no space left the build will fail
@@ -199,10 +196,10 @@ BB_DISKMON_DIRS ??= "\
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
STOPTASKS,/tmp,100M,100K \
- ABORT,${TMPDIR},100M,1K \
- ABORT,${DL_DIR},100M,1K \
- ABORT,${SSTATE_DIR},100M,1K \
- ABORT,/tmp,10M,1K"
+ HALT,${TMPDIR},100M,1K \
+ HALT,${DL_DIR},100M,1K \
+ HALT,${SSTATE_DIR},100M,1K \
+ HALT,/tmp,10M,1K"
#
# Shared-state files from other locations
@@ -241,14 +238,14 @@ BB_DISKMON_DIRS ??= "\
#
# By default native qemu will build with a builtin VNC server where graphical output can be
# seen. The line below enables the SDL UI frontend too.
-PACKAGECONFIG_append_pn-qemu-system-native = " sdl"
+PACKAGECONFIG:append:pn-qemu-system-native = " sdl"
# By default libsdl2-native will be built, if you want to use your host's libSDL instead of
# the minimal libsdl built by libsdl2-native then uncomment the ASSUME_PROVIDED line below.
#ASSUME_PROVIDED += "libsdl2-native"
# You can also enable the Gtk UI frontend, which takes somewhat longer to build, but adds
# a handy set of menus for controlling the emulator.
-#PACKAGECONFIG_append_pn-qemu-system-native = " gtk+"
+#PACKAGECONFIG:append:pn-qemu-system-native = " gtk+"
#
# Parallelism Options
@@ -340,4 +337,4 @@ PACKAGECONFIG_append_pn-qemu-system-native = " sdl"
# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to
# track the version of this file when it was generated. This can safely be ignored if
# this doesn't mean anything to you.
-CONF_VERSION = "1"
+CONF_VERSION = "2"
diff --git a/templates/feature/agl-app-framework/50_bblayers.conf.inc b/templates/feature/agl-app-framework/50_bblayers.conf.inc
new file mode 100644
index 000000000..e6eacd9d8
--- /dev/null
+++ b/templates/feature/agl-app-framework/50_bblayers.conf.inc
@@ -0,0 +1,4 @@
+
+BBLAYERS =+ " \
+ ${METADIR}/meta-agl/meta-app-framework \
+ "
diff --git a/templates/feature/agl-app-framework/50_local.conf.inc b/templates/feature/agl-app-framework/50_local.conf.inc
new file mode 100644
index 000000000..ce541a7b0
--- /dev/null
+++ b/templates/feature/agl-app-framework/50_local.conf.inc
@@ -0,0 +1,2 @@
+#see meta-agl/meta-app-framework/conf/include/agl-app-framework.inc
+require conf/include/agl-app-framework.inc
diff --git a/templates/feature/agl-appfw-smack/50_local.conf.inc b/templates/feature/agl-appfw-smack/50_local.conf.inc
deleted file mode 100644
index e69de29bb..000000000
--- a/templates/feature/agl-appfw-smack/50_local.conf.inc
+++ /dev/null
diff --git a/templates/feature/agl-appfw-smack/README_feature_agl-appfw-smack.md b/templates/feature/agl-appfw-smack/README_feature_agl-appfw-smack.md
deleted file mode 100644
index c96edac38..000000000
--- a/templates/feature/agl-appfw-smack/README_feature_agl-appfw-smack.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Feature agl-appfw-smack
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>, José Bollo <jose.bollo@iot.bzh>, Ronan Le Martret <ronan.lemartret@iot.bzh>, Stephane Desneux <stephane.desneux@iot.bzh>
----
-
-### Feature agl-appfw-smack
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-appfw-smack/README_feature_agl-appfw-smack.md*
-
diff --git a/templates/feature/agl-ci-change-features-nogfx/included.dep b/templates/feature/agl-ci-change-features-nogfx/included.dep
index 64e2103ca..27e9852f7 100644
--- a/templates/feature/agl-ci-change-features-nogfx/included.dep
+++ b/templates/feature/agl-ci-change-features-nogfx/included.dep
@@ -1 +1 @@
-agl-demo agl-devel agl-netboot agl-pipewire agl-cloudproxy agl-buildstats agl-ptest
+agl-demo agl-devel agl-netboot agl-pipewire agl-buildstats agl-ptest
diff --git a/templates/feature/agl-ci-change-features/included.dep b/templates/feature/agl-ci-change-features/included.dep
index 64e2103ca..27e9852f7 100644
--- a/templates/feature/agl-ci-change-features/included.dep
+++ b/templates/feature/agl-ci-change-features/included.dep
@@ -1 +1 @@
-agl-demo agl-devel agl-netboot agl-pipewire agl-cloudproxy agl-buildstats agl-ptest
+agl-demo agl-devel agl-netboot agl-pipewire agl-buildstats agl-ptest
diff --git a/templates/feature/agl-ci/99_local.conf.inc b/templates/feature/agl-ci/99_local.conf.inc
index 8f6f697cd..1ff8c571b 100644
--- a/templates/feature/agl-ci/99_local.conf.inc
+++ b/templates/feature/agl-ci/99_local.conf.inc
@@ -1,4 +1,32 @@
-DISTRO_FEATURES_append = " AGLCI"
+AGL_FEATURES:append = " AGLCI"
# opencv seems to have a parallel make bug
# ...contrib/modules/xfeatures2d/test/test_features2d.cpp:51:10: fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
-PARALLEL_MAKE_pn-opencv = "-j 1"
+PARALLEL_MAKE:pn-opencv = "-j 1"
+
+AGL_HOST_PREMIRROR ?= "http://download.automotivelinux.org"
+AGL_HOST_SSTATE_MIRROR ?= "http://download.automotivelinux.org"
+
+PREMIRRORS = " \
+git://.*/.* ${AGL_HOST_PREMIRROR}/AGL/mirror/ \n \
+ftp://.*/.* ${AGL_HOST_PREMIRROR}/AGL/mirror/ \n \
+http://.*/.* ${AGL_HOST_PREMIRROR}/AGL/mirror/ \n \
+https://.*/.* ${AGL_HOST_PREMIRROR}/AGL/mirror/ \n \
+"
+
+SSTATE_MIRRORS = " file://.* ${AGL_HOST_SSTATE_MIRROR}/sstate-mirror/master/${DEFAULTTUNE}/PATH;downloadfilename=PATH \n "
+
+#INHERIT += "packagefeed-stability"
+INHERIT += "buildhistory"
+INHERIT += "buildstats"
+INHERIT += "buildstats-summary"
+
+# setup for PRSERV and HASHSERV
+AGL_HOST_PRSERV ?= "10.30.72.18"
+AGL_HOST_HASHSERV ?= "10.30.72.18"
+
+BB_HASHSERVE = "${AGL_HOST_HASHSERV}:8383"
+BB_SIGNATURE_HANDLER = "OEEquivHash"
+
+PRSERV_HOST = "${AGL_HOST_PRSERV}:8181"
+
+IMAGE_INSTALL:append = " curl"
diff --git a/templates/feature/agl-ci/included.dep b/templates/feature/agl-ci/included.dep
new file mode 100644
index 000000000..21543697b
--- /dev/null
+++ b/templates/feature/agl-ci/included.dep
@@ -0,0 +1 @@
+agl-create-spdx
diff --git a/templates/feature/agl-create-spdx/50_local.conf.inc b/templates/feature/agl-create-spdx/50_local.conf.inc
new file mode 100644
index 000000000..2dd5314f3
--- /dev/null
+++ b/templates/feature/agl-create-spdx/50_local.conf.inc
@@ -0,0 +1,2 @@
+#see meta-agl/meta-agl/conf/include/agl-devel.inc
+require conf/include/agl-create-spdx.inc
diff --git a/templates/feature/agl-create-spdx/README_feature_agl-create-spdx.md b/templates/feature/agl-create-spdx/README_feature_agl-create-spdx.md
new file mode 100644
index 000000000..332a9dbd5
--- /dev/null
+++ b/templates/feature/agl-create-spdx/README_feature_agl-create-spdx.md
@@ -0,0 +1,7 @@
+---
+description: Feature agl-create-spdx
+authors: Jan-Simon Moeller <jsmoeller@linuxfoundation.rg>
+---
+
+### Feature agl-create-spdx
+Activation of the create-spdx class in oe-core.
diff --git a/templates/feature/agl-devel/README_feature_agl-devel.md b/templates/feature/agl-devel/README_feature_agl-devel.md
index 24483f95e..588bb3cdc 100644
--- a/templates/feature/agl-devel/README_feature_agl-devel.md
+++ b/templates/feature/agl-devel/README_feature_agl-devel.md
@@ -25,7 +25,7 @@ The following example shows how to activate C/C++ code
specific to agl-devel:
```yocto
-CPPFLAGS_append_agl-devel = " -DAGL_DEVEL"
+CPPFLAGS:append:agl-devel = " -DAGL_DEVEL"
```
Using this, any code enclosed in
diff --git a/templates/feature/agl-devel/included.dep b/templates/feature/agl-devel/included.dep
new file mode 100644
index 000000000..115ecf19a
--- /dev/null
+++ b/templates/feature/agl-devel/included.dep
@@ -0,0 +1 @@
+agl-package-management
diff --git a/templates/feature/agl-gplv2/50_bblayers.conf.inc b/templates/feature/agl-gplv2/50_bblayers.conf.inc
deleted file mode 100644
index a0f26980d..000000000
--- a/templates/feature/agl-gplv2/50_bblayers.conf.inc
+++ /dev/null
@@ -1 +0,0 @@
-BBLAYERS =+ "${METADIR}/external/meta-gplv2"
diff --git a/templates/feature/agl-gplv2/50_local.conf.inc b/templates/feature/agl-gplv2/50_local.conf.inc
deleted file mode 100644
index 8e0d5df74..000000000
--- a/templates/feature/agl-gplv2/50_local.conf.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-#see meta-agl/meta-agl/conf/include/agl-gplv2.inc
-require conf/include/agl-gplv2.inc
diff --git a/templates/feature/agl-gplv2/README_feature_agl-gplv2.md b/templates/feature/agl-gplv2/README_feature_agl-gplv2.md
deleted file mode 100644
index ffbe331b8..000000000
--- a/templates/feature/agl-gplv2/README_feature_agl-gplv2.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Feature agl-gplv2
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>, Martin Kelly <mkelly@xevo.com>
----
-
-### Feature agl-gplv2
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-gplv2/README_feature_agl-gplv2.md*
-
diff --git a/templates/feature/agl-hmi-framework/50_local.conf.inc b/templates/feature/agl-hmi-framework/50_local.conf.inc
deleted file mode 100644
index d251e183d..000000000
--- a/templates/feature/agl-hmi-framework/50_local.conf.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-# In order to enable the hmi-framework features ,
-# enables the following line:
-#
-DISTRO_FEATURES_append = " agl-hmi-framework"
diff --git a/templates/feature/agl-hmi-framework/README_feature_agl-hmi-framework.md b/templates/feature/agl-hmi-framework/README_feature_agl-hmi-framework.md
deleted file mode 100644
index e298023d9..000000000
--- a/templates/feature/agl-hmi-framework/README_feature_agl-hmi-framework.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Feature agl-hmi-framework
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>, Scott Murray <scott.murray@konsulko.com>
----
-
-### Feature agl-hmi-framework
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-hmi-framework/README_feature_agl-hmi-framework.md*
-
diff --git a/templates/feature/agl-localdev/80_bblayers.conf.inc b/templates/feature/agl-localdev/80_bblayers.conf.inc
new file mode 100644
index 000000000..d9bb9d070
--- /dev/null
+++ b/templates/feature/agl-localdev/80_bblayers.conf.inc
@@ -0,0 +1,3 @@
+# Local derivations during development, just add a layer in the folder meta-localdev
+BBLAYERS =+ "${@'${METADIR}/meta-localdev' if os.path.exists('${METADIR}/meta-localdev') else ''}"
+
diff --git a/templates/feature/agl-localdev/80_local.conf.inc b/templates/feature/agl-localdev/80_local.conf.inc
new file mode 100644
index 000000000..6c9213512
--- /dev/null
+++ b/templates/feature/agl-localdev/80_local.conf.inc
@@ -0,0 +1,2 @@
+# (weak) include userspecific local.dev.inc
+include local.dev.inc
diff --git a/templates/feature/agl-localdev/README_feature_agl-localdev.md b/templates/feature/agl-localdev/README_feature_agl-localdev.md
new file mode 100644
index 000000000..111ae4ec0
--- /dev/null
+++ b/templates/feature/agl-localdev/README_feature_agl-localdev.md
@@ -0,0 +1,9 @@
+---
+description: enable local layer for development purposes
+authors: Stéphane Desneux <stephane.desneux@iot.bzh>
+---
+
+### Feature agl-localdev
+
+Adds a local layer named "meta-localdev" in meta directory and a local.dev.inc conf file if present.
+
diff --git a/templates/feature/agl-netboot/50_bblayers.conf.inc b/templates/feature/agl-netboot/50_bblayers.conf.inc
index 3d2ed6460..7cbff1662 100644
--- a/templates/feature/agl-netboot/50_bblayers.conf.inc
+++ b/templates/feature/agl-netboot/50_bblayers.conf.inc
@@ -1 +1,7 @@
-BBLAYERS =+ "${METADIR}/meta-agl/meta-netboot"
+BBLAYERS =+ " ${METADIR}/meta-agl/meta-netboot \
+ "
+
+# Indirection to avoid duplicate inclusions of the same folder into BBLAYERS
+# the evaluation is in the bblayers.conf.sample in meta-agl/templates/base
+AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python"
+AGL_META_NETWORKING = "${METADIR}/external/meta-openembedded/meta-networking"
diff --git a/templates/feature/agl-package-management/50_local.conf.inc b/templates/feature/agl-package-management/50_local.conf.inc
new file mode 100644
index 000000000..641a327c9
--- /dev/null
+++ b/templates/feature/agl-package-management/50_local.conf.inc
@@ -0,0 +1,2 @@
+#see meta-agl/meta-agl/conf/include/agl-package-management.inc
+require conf/include/agl-package-management.inc
diff --git a/templates/feature/agl-package-management/README_feature_agl-package-management.md b/templates/feature/agl-package-management/README_feature_agl-package-management.md
new file mode 100644
index 000000000..37562dd00
--- /dev/null
+++ b/templates/feature/agl-package-management/README_feature_agl-package-management.md
@@ -0,0 +1,8 @@
+---
+description: Feature agl-package-management
+authors: Scott Murray <scott.murray@konsulko.com>, Jan-Simon Möller <jsmoeller@linuxfoundation.org>
+---
+
+### Feature agl-package-management
+
+Adds package management to images.
diff --git a/templates/feature/agl-profile-cluster-qt5/50_bblayers.conf.inc b/templates/feature/agl-profile-cluster-qt5/50_bblayers.conf.inc
deleted file mode 100644
index f1aef074d..000000000
--- a/templates/feature/agl-profile-cluster-qt5/50_bblayers.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-BBLAYERS =+ " \
- ${METADIR}/meta-agl/meta-agl-profile-cluster-qt5 \
-"
diff --git a/templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md b/templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md
deleted file mode 100644
index 095a8db18..000000000
--- a/templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-description: Feature agl-profile-cluster-qt5
-authors: Scott Murray <scott.murray@konsulko.com>
----
-
-### Feature agl-profile-cluster-qt5
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-profile-cluster-qt5/README_feature_agl-profile-cluster-qt5.md*
-
-#### Dependent features pulled by agl-profile-cluster-qt5
-
-The following features are pulled:
-
-* agl-profile-graphical-qt5
-
diff --git a/templates/feature/agl-profile-cluster-qt5/included.dep b/templates/feature/agl-profile-cluster-qt5/included.dep
deleted file mode 100644
index 21b1fa6bc..000000000
--- a/templates/feature/agl-profile-cluster-qt5/included.dep
+++ /dev/null
@@ -1 +0,0 @@
-agl-profile-graphical-qt5
diff --git a/templates/feature/agl-profile-cluster/50_bblayers.conf.inc b/templates/feature/agl-profile-cluster/50_bblayers.conf.inc
deleted file mode 100644
index b430dc7db..000000000
--- a/templates/feature/agl-profile-cluster/50_bblayers.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-BBLAYERS =+ " \
- ${METADIR}/meta-agl/meta-agl-profile-cluster \
-"
diff --git a/templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md b/templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md
deleted file mode 100644
index 544dc7c8e..000000000
--- a/templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-description: Feature agl-profile-cluster
-authors: Scott Murray <scott.murray@konsulko.com>
----
-
-### Feature agl-profile-cluster
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-profile-cluster/README_feature_agl-profile-cluster.md*
-
-#### Dependent features pulled by agl-profile-cluster
-
-The following features are pulled:
-
-* agl-profile-graphical
-
diff --git a/templates/feature/agl-profile-cluster/included.dep b/templates/feature/agl-profile-cluster/included.dep
deleted file mode 100644
index 032609b8a..000000000
--- a/templates/feature/agl-profile-cluster/included.dep
+++ /dev/null
@@ -1 +0,0 @@
-agl-profile-graphical
diff --git a/templates/feature/agl-profile-graphical-html5/50_bblayers.conf.inc b/templates/feature/agl-profile-graphical-html5/50_bblayers.conf.inc
deleted file mode 100644
index a35f93fb5..000000000
--- a/templates/feature/agl-profile-graphical-html5/50_bblayers.conf.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-
-BBLAYERS =+ " \
- ${METADIR}/meta-agl/meta-agl-profile-graphical-html5 \
- ${METADIR}/external/meta-python2 \
- "
-
diff --git a/templates/feature/agl-profile-graphical-html5/50_local.conf.inc b/templates/feature/agl-profile-graphical-html5/50_local.conf.inc
deleted file mode 100644
index 0b2d70028..000000000
--- a/templates/feature/agl-profile-graphical-html5/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-
-IMAGE_INSTALL_append = " packagegroup-agl-profile-graphical-html5"
-
diff --git a/templates/feature/agl-profile-graphical-html5/README_feature_agl-profile-graphical-html5.md b/templates/feature/agl-profile-graphical-html5/README_feature_agl-profile-graphical-html5.md
deleted file mode 100644
index dc00f94c2..000000000
--- a/templates/feature/agl-profile-graphical-html5/README_feature_agl-profile-graphical-html5.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-description: Feature agl-profile-graphical-html5
-authors: Jacobo Aragunde Pérez <jaragunde@igalia.com>
----
-
-### Feature agl-profile-graphical-html5
-
-Packages required to run web applications in AGL. The provided image agl-image-graphical-html5 includes the minimum set of packages required for this purpose.
diff --git a/templates/feature/agl-profile-graphical-html5/included.dep b/templates/feature/agl-profile-graphical-html5/included.dep
deleted file mode 100644
index 032609b8a..000000000
--- a/templates/feature/agl-profile-graphical-html5/included.dep
+++ /dev/null
@@ -1 +0,0 @@
-agl-profile-graphical
diff --git a/templates/feature/agl-profile-graphical-qt5/50_bblayers.conf.inc b/templates/feature/agl-profile-graphical-qt5/50_bblayers.conf.inc
deleted file mode 100644
index 960267908..000000000
--- a/templates/feature/agl-profile-graphical-qt5/50_bblayers.conf.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-BBLAYERS =+ " \
- ${METADIR}/meta-agl/meta-agl-profile-graphical-qt5 \
-"
-
-# These are the dependencies
-#---------------------------
-BBLAYERS =+ " \
- ${METADIR}/external/meta-qt5 \
-"
diff --git a/templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md b/templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md
deleted file mode 100644
index 387de2ca4..000000000
--- a/templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-description: Feature agl-profile-graphical-qt5
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
----
-
-### Feature agl-profile-graphical-qt5
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-profile-graphical-qt5/README_feature_agl-profile-graphical-qt5.md*
-
-#### Dependent features pulled by agl-profile-graphical-qt5
-
-The following features are pulled:
-
-* agl-profile-graphical
-
diff --git a/templates/feature/agl-profile-graphical-qt5/included.dep b/templates/feature/agl-profile-graphical-qt5/included.dep
deleted file mode 100644
index 5b54430da..000000000
--- a/templates/feature/agl-profile-graphical-qt5/included.dep
+++ /dev/null
@@ -1 +0,0 @@
-agl-profile-graphical \ No newline at end of file
diff --git a/templates/feature/agl-profile-graphical/50_bblayers.conf.inc b/templates/feature/agl-profile-graphical/50_bblayers.conf.inc
deleted file mode 100644
index 44b0885dc..000000000
--- a/templates/feature/agl-profile-graphical/50_bblayers.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-BBLAYERS =+ " \
- ${METADIR}/meta-agl/meta-agl-profile-graphical \
-"
diff --git a/templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md b/templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md
deleted file mode 100644
index 594d047e7..000000000
--- a/templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Feature agl-profile-graphical
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
----
-
-### Feature agl-profile-graphical
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-profile-graphical/README_feature_agl-profile-graphical.md*
-
diff --git a/templates/feature/agl-profile-hud/50_bblayers.conf.inc b/templates/feature/agl-profile-hud/50_bblayers.conf.inc
deleted file mode 100644
index 047383710..000000000
--- a/templates/feature/agl-profile-hud/50_bblayers.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-BBLAYERS =+ " \
- ${METADIR}/meta-agl/meta-agl-profile-hud \
-"
diff --git a/templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md b/templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md
deleted file mode 100644
index b4387c129..000000000
--- a/templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Feature agl-profile-hud
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
----
-
-### Feature agl-profile-hud
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-profile-hud/README_feature_agl-profile-hud.md*
-
diff --git a/templates/feature/agl-profile-telematics/50_bblayers.conf.inc b/templates/feature/agl-profile-telematics/50_bblayers.conf.inc
deleted file mode 100644
index 874b438f0..000000000
--- a/templates/feature/agl-profile-telematics/50_bblayers.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-BBLAYERS =+ " \
- ${METADIR}/meta-agl/meta-agl-profile-telematics \
-"
diff --git a/templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md b/templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md
deleted file mode 100644
index 6abcd5d24..000000000
--- a/templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Feature agl-profile-telematics
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
----
-
-### Feature agl-profile-telematics
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-profile-telematics/README_feature_agl-profile-telematics.md*
-
diff --git a/templates/feature/agl-ptest/90_local.conf.inc b/templates/feature/agl-ptest/90_local.conf.inc
index 4c546e70e..dcaf72ab3 100644
--- a/templates/feature/agl-ptest/90_local.conf.inc
+++ b/templates/feature/agl-ptest/90_local.conf.inc
@@ -1,9 +1,9 @@
# Enabling ptest in image ...
-OVERRIDES .= ":agl-ptest"
-DISTRO_FEATURES_append = " ptest"
-EXTRA_IMAGE_FEATURES_append = " ptest-pkgs"
-IMAGE_INSTALL_append = " lua-ptest xmlsec1-ptest libxml2-ptest"
+OVERRIDES:append = ":agl-ptest"
+DISTRO_FEATURES:append = " ptest"
+EXTRA_IMAGE_FEATURES:append = " ptest-pkgs"
+IMAGE_INSTALL:append = " lua-ptest xmlsec1-ptest libxml2-ptest"
# / ptest
diff --git a/templates/feature/agl-refhw-h3/50_bblayers.conf.inc b/templates/feature/agl-refhw-h3/50_bblayers.conf.inc
new file mode 100644
index 000000000..7aee6eac5
--- /dev/null
+++ b/templates/feature/agl-refhw-h3/50_bblayers.conf.inc
@@ -0,0 +1,3 @@
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-agl-refhw/meta-agl-refhw-gen3 \
+ "
diff --git a/templates/feature/agl-refhw-h3/50_local.conf.inc b/templates/feature/agl-refhw-h3/50_local.conf.inc
new file mode 100644
index 000000000..dc39dd52a
--- /dev/null
+++ b/templates/feature/agl-refhw-h3/50_local.conf.inc
@@ -0,0 +1,2 @@
+#see meta-agl/meta-agl-bsp/conf/include/agl_refhw-h3.inc
+require conf/include/agl_refhw-h3.inc
diff --git a/templates/feature/agl-refhw-h3/README_feature_agl-refhw-h3.md b/templates/feature/agl-refhw-h3/README_feature_agl-refhw-h3.md
new file mode 100644
index 000000000..57720bef1
--- /dev/null
+++ b/templates/feature/agl-refhw-h3/README_feature_agl-refhw-h3.md
@@ -0,0 +1,8 @@
+---
+description: AGL H3-based reference hardware support
+authors: Scott Murray <scott.murray@konsulko.com>
+---
+
+### Feature agl-refhw-h3
+
+Enable support for AGL H3-based reference hardware. Should only be used with "h3ulcb" or "h3ulcb-nogfx" machine types.
diff --git a/templates/feature/agl-selinux/50_bblayers.conf.inc b/templates/feature/agl-selinux/50_bblayers.conf.inc
new file mode 100644
index 000000000..b17e292e9
--- /dev/null
+++ b/templates/feature/agl-selinux/50_bblayers.conf.inc
@@ -0,0 +1,5 @@
+AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python"
+
+BBLAYERS =+ " \
+ ${METADIR}/external/meta-selinux \
+ "
diff --git a/templates/feature/agl-selinux/50_local.conf.inc b/templates/feature/agl-selinux/50_local.conf.inc
new file mode 100644
index 000000000..4aaac2d14
--- /dev/null
+++ b/templates/feature/agl-selinux/50_local.conf.inc
@@ -0,0 +1,2 @@
+#see meta-agl/meta-agl/conf/include/agl-selinux.inc
+require conf/include/agl-selinux.inc
diff --git a/templates/feature/agl-selinux/README_feature_agl-selinux.md b/templates/feature/agl-selinux/README_feature_agl-selinux.md
new file mode 100644
index 000000000..c48ce06b0
--- /dev/null
+++ b/templates/feature/agl-selinux/README_feature_agl-selinux.md
@@ -0,0 +1,9 @@
+---
+description: Feature agl-selinux
+authors: Scott Murray <scott.murray@konsulko.com>
+---
+
+### Feature agl-selinux
+
+Enables building with SELinux enabled, with the default mode
+being permissive.
diff --git a/templates/feature/agl-sign-wgts/50_local.conf.inc b/templates/feature/agl-sign-wgts/50_local.conf.inc
deleted file mode 100644
index fb1f6ab1a..000000000
--- a/templates/feature/agl-sign-wgts/50_local.conf.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-#see meta-agl/meta-agl/conf/include/agl-sign-wgts.inc
-require conf/include/agl-sign-wgts.inc
diff --git a/templates/feature/agl-sign-wgts/README_feature_agl-sign-wgts.md b/templates/feature/agl-sign-wgts/README_feature_agl-sign-wgts.md
deleted file mode 100644
index 5e3b4b12c..000000000
--- a/templates/feature/agl-sign-wgts/README_feature_agl-sign-wgts.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-description: Feature agl-sign-wgts
-authors: José Bollo <jose.bollo@iot.bzh>,
----
-
-### Feature agl-sign-wgts
-
-Activation of the signature of wgt files
diff --git a/templates/feature/agl-sota/50_bblayers.conf.inc b/templates/feature/agl-sota/50_bblayers.conf.inc
deleted file mode 100644
index f3623354c..000000000
--- a/templates/feature/agl-sota/50_bblayers.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-BBLAYERS =+ " \
- ${METADIR}/external/meta-updater \
- "
diff --git a/templates/feature/agl-sota/50_local.conf.inc b/templates/feature/agl-sota/50_local.conf.inc
deleted file mode 100644
index 3ceb04df7..000000000
--- a/templates/feature/agl-sota/50_local.conf.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-# See meta-updater/conf/distro/sota.conf.inc
-INHERIT += "sota"
-DISTRO_FEATURES_append = " sota usrmerge"
-DISTRO_FEATURES_NATIVE_append = " sota"
-AGL_DEFAULT_INITRAMFS_FSTYPES = "cpio.gz"
-# Netboot is not obeying usrmerge distro feature
-# therefore it is not compatible with agl-sota
-CONFLICT_DISTRO_FEATURES += "netboot"
diff --git a/templates/feature/agl-sota/50_setup.sh b/templates/feature/agl-sota/50_setup.sh
deleted file mode 100644
index f209b9442..000000000
--- a/templates/feature/agl-sota/50_setup.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-
-cat <<EOF >> ${BUILDDIR}/conf/bblayers.conf
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# fragment {
-# ${METADIR}/meta-agl/templates/feature/agl-sota/50_setup.sh
-#
-EOF
-
-case ${MACHINE} in
- "qemux86-64")
- echo "BBLAYERS =+ \"\${METADIR}/external/meta-updater-qemux86-64\"" >> ${BUILDDIR}/conf/bblayers.conf;;
- "raspberrypi3" | "raspberrypi4")
- echo "BBLAYERS =+ \"\${METADIR}/external/meta-updater-raspberrypi\"" >> ${BUILDDIR}/conf/bblayers.conf;;
- *)
- echo "#No extra SOTA feature layer for MACHINE ${MACHINE}" >> ${BUILDDIR}/conf/bblayers.conf;;
-esac
-
-
-cat <<EOF >> ${BUILDDIR}/conf/bblayers.conf
-
-#
-# }
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-EOF
diff --git a/templates/feature/agl-sota/README_feature_agl-sota.md b/templates/feature/agl-sota/README_feature_agl-sota.md
deleted file mode 100644
index beeffc234..000000000
--- a/templates/feature/agl-sota/README_feature_agl-sota.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Feature agl-sota
-authors: Anton Gerasimov <anton@advancedtelematic.com>, Changhyeok Bae <changhyeok.bae@gmail.com>, Jan-Simon Moeller <jsmoeller@linuxfoundation.org>, Jan-Simon Möller <jsmoeller@linuxfoundation.org>, Leon Anavi <leon.anavi@konsulko.com>, Phil Wise <phil@advancedtelematic.com>, Ronan Le Martret <ronan.lemartret@iot.bzh>
----
-
-### Feature agl-sota
-
-*Description is missing - please complete file meta-agl/templates/feature/agl-sota/README_feature_agl-sota.md*
-
diff --git a/templates/feature/agl-virt/50_bblayers.conf.inc b/templates/feature/agl-virt/50_bblayers.conf.inc
index 04d31a22d..65dc19580 100644
--- a/templates/feature/agl-virt/50_bblayers.conf.inc
+++ b/templates/feature/agl-virt/50_bblayers.conf.inc
@@ -1,3 +1,5 @@
-BBLAYERS =+ " \
- ${METADIR}/external/meta-virtualization \
- "
+AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python"
+AGL_META_NETWORKING = "${METADIR}/external/meta-openembedded/meta-networking"
+AGL_META_FILESYSTEMS = "${METADIR}/external/meta-openembedded/meta-filesystems"
+AGL_META_VIRTUALIZATION = "${METADIR}/external/meta-virtualization"
+
diff --git a/templates/feature/agl-virt/50_local.conf.inc b/templates/feature/agl-virt/50_local.conf.inc
index c15b8316b..8a7e44a71 100644
--- a/templates/feature/agl-virt/50_local.conf.inc
+++ b/templates/feature/agl-virt/50_local.conf.inc
@@ -1,3 +1,3 @@
# meta-virtualization needs the "virtualization in DISTRO_FEATURES
-DISTRO_FEATURES_append = " virtualization"
+DISTRO_FEATURES:append = " virtualization"
diff --git a/templates/feature/agl-weston-remoting/50_local.conf.inc b/templates/feature/agl-weston-remoting/50_local.conf.inc
index da1ddb3a0..63e0a984a 100644
--- a/templates/feature/agl-weston-remoting/50_local.conf.inc
+++ b/templates/feature/agl-weston-remoting/50_local.conf.inc
@@ -1 +1 @@
-DISTRO_FEATURES_append = " weston-remoting"
+DISTRO_FEATURES:append = " weston-remoting"
diff --git a/templates/feature/agl-weston-remoting/included.dep b/templates/feature/agl-weston-remoting/included.dep
index 032609b8a..82639da07 100644
--- a/templates/feature/agl-weston-remoting/included.dep
+++ b/templates/feature/agl-weston-remoting/included.dep
@@ -1 +1 @@
-agl-profile-graphical
+agl-demo
diff --git a/templates/machine/am62xx-evm/50_bblayers.conf.inc b/templates/machine/am62xx-evm/50_bblayers.conf.inc
new file mode 100644
index 000000000..6ef08c43e
--- /dev/null
+++ b/templates/machine/am62xx-evm/50_bblayers.conf.inc
@@ -0,0 +1,5 @@
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-arm/meta-arm \
+ ${METADIR}/bsp/meta-arm/meta-arm-toolchain \
+ ${METADIR}/bsp/meta-ti/meta-ti-bsp \
+ "
diff --git a/templates/machine/am62xx-evm/50_local.conf.inc b/templates/machine/am62xx-evm/50_local.conf.inc
new file mode 100644
index 000000000..782d11a76
--- /dev/null
+++ b/templates/machine/am62xx-evm/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "am62xx-evm"
+#see meta-agl/meta-agl-bsp/conf/include/agl_am62xx-evm.inc
+require conf/include/agl_am62xx-evm.inc
diff --git a/templates/machine/aws-ec2-arm64/50_bblayers.conf.inc b/templates/machine/aws-ec2-arm64/50_bblayers.conf.inc
new file mode 100644
index 000000000..4e619cde0
--- /dev/null
+++ b/templates/machine/aws-ec2-arm64/50_bblayers.conf.inc
@@ -0,0 +1,8 @@
+AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python"
+AGL_META_MULTIMEDIA = "${METADIR}/external/meta-openembedded/meta-multimedia"
+AGL_META_NETWORKING = "${METADIR}/external/meta-openembedded/meta-networking"
+AGL_META_VIRTUALIZATION = "${METADIR}/external/meta-virtualization"
+
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-aws \
+ "
diff --git a/templates/machine/aws-ec2-arm64/50_local.conf.inc b/templates/machine/aws-ec2-arm64/50_local.conf.inc
new file mode 100644
index 000000000..ca20e0bf2
--- /dev/null
+++ b/templates/machine/aws-ec2-arm64/50_local.conf.inc
@@ -0,0 +1,21 @@
+MACHINE = "aws-ec2-arm64"
+
+VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
+IMAGE_INSTALL:append = " cloud-init"
+DISTRO_FEATURES:append = " virtualization"
+
+
+# can we shuffle this out so CI still works
+INHERIT += "extrausers"
+# Hardening: Locking the root password. Creating the user without password for ssh key-based login only
+EXTRA_USERS_PARAMS = "usermod -L root; useradd -p '*' user"
+
+EXTRA_IMAGE_FEATURES:append = " ssh-server-openssh"
+
+# Forcing removal of debug-tweakes as that leads to reversing some sshd_config hardening done in our bbappend when do_rootfs runs
+EXTRA_IMAGE_FEATURES:remove = "debug-tweaks"
+
+AGL_DEFAULT_IMAGE_FSTYPES := "wic.vhd"
+
+# workaround bug in cloud-init leading to empty cloud-init-systemd package
+PACKAGES:pn-cloud-init:forcevariable = "cloud-init-src cloud-init-dbg cloud-init-staticdev cloud-init-dev cloud-init-doc cloud-init-locale cloud-init-systemd cloud-init"
diff --git a/templates/machine/aws-ec2-x86-64/50_bblayers.conf.inc b/templates/machine/aws-ec2-x86-64/50_bblayers.conf.inc
new file mode 100644
index 000000000..4e619cde0
--- /dev/null
+++ b/templates/machine/aws-ec2-x86-64/50_bblayers.conf.inc
@@ -0,0 +1,8 @@
+AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python"
+AGL_META_MULTIMEDIA = "${METADIR}/external/meta-openembedded/meta-multimedia"
+AGL_META_NETWORKING = "${METADIR}/external/meta-openembedded/meta-networking"
+AGL_META_VIRTUALIZATION = "${METADIR}/external/meta-virtualization"
+
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-aws \
+ "
diff --git a/templates/machine/aws-ec2-x86-64/50_local.conf.inc b/templates/machine/aws-ec2-x86-64/50_local.conf.inc
new file mode 100644
index 000000000..58b4b087d
--- /dev/null
+++ b/templates/machine/aws-ec2-x86-64/50_local.conf.inc
@@ -0,0 +1,21 @@
+MACHINE = "aws-ec2-x86-64"
+
+VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
+IMAGE_INSTALL:append = " cloud-init"
+DISTRO_FEATURES:append = " virtualization"
+
+
+# can we shuffle this out so CI still works
+INHERIT += "extrausers"
+# Hardening: Locking the root password. Creating the user without password for ssh key-based login only
+EXTRA_USERS_PARAMS = "usermod -L root; useradd -p '*' user"
+
+EXTRA_IMAGE_FEATURES:append = " ssh-server-openssh"
+
+# Forcing removal of debug-tweakes as that leads to reversing some sshd_config hardening done in our bbappend when do_rootfs runs
+EXTRA_IMAGE_FEATURES:remove = "debug-tweaks"
+
+AGL_DEFAULT_IMAGE_FSTYPES := "wic.vhd"
+
+# workaround bug in cloud-init leading to empty cloud-init-systemd package
+PACKAGES:pn-cloud-init:forcevariable = "cloud-init-src cloud-init-dbg cloud-init-staticdev cloud-init-dev cloud-init-doc cloud-init-locale cloud-init-systemd cloud-init"
diff --git a/templates/machine/bbe/50_bblayers.conf.inc b/templates/machine/bbe/50_bblayers.conf.inc
index b2fffb9dd..c94c1db8f 100644
--- a/templates/machine/bbe/50_bblayers.conf.inc
+++ b/templates/machine/bbe/50_bblayers.conf.inc
@@ -1,6 +1,7 @@
BBLAYERS =+ " \
${METADIR}/bsp/meta-arm/meta-arm \
- ${METADIR}/bsp/meta-ti \
+ ${METADIR}/bsp/meta-arm/meta-arm-toolchain \
+ ${METADIR}/bsp/meta-ti/meta-ti-bsp \
${METADIR}/bsp/meta-sancloud \
${METADIR}/bsp/meta-rtlwifi \
"
diff --git a/templates/machine/beaglebone-ai64/50_bblayers.conf.inc b/templates/machine/beaglebone-ai64/50_bblayers.conf.inc
new file mode 100644
index 000000000..6ef08c43e
--- /dev/null
+++ b/templates/machine/beaglebone-ai64/50_bblayers.conf.inc
@@ -0,0 +1,5 @@
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-arm/meta-arm \
+ ${METADIR}/bsp/meta-arm/meta-arm-toolchain \
+ ${METADIR}/bsp/meta-ti/meta-ti-bsp \
+ "
diff --git a/templates/machine/beaglebone-ai64/50_local.conf.inc b/templates/machine/beaglebone-ai64/50_local.conf.inc
new file mode 100644
index 000000000..80d4aac97
--- /dev/null
+++ b/templates/machine/beaglebone-ai64/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "beaglebone-ai64"
+#see meta-agl/meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc
+require conf/include/agl_beaglebone-ai64.inc
diff --git a/templates/machine/beaglebone-ai64/README_machine_beaglebone-ai64.md b/templates/machine/beaglebone-ai64/README_machine_beaglebone-ai64.md
new file mode 100644
index 000000000..7edf758a5
--- /dev/null
+++ b/templates/machine/beaglebone-ai64/README_machine_beaglebone-ai64.md
@@ -0,0 +1,9 @@
+---
+description: Machine beaglebone-ai64
+authors: Denys Dmytriyenko <denys@konsulko.com>
+---
+
+### Machine beaglebone-ai64
+
+BeagleBoard.org BeagleBone AI-64 (uses Texas Instruments J721e/TDA4VM SoC).
+
diff --git a/templates/machine/beaglebone/50_bblayers.conf.inc b/templates/machine/beaglebone/50_bblayers.conf.inc
index 6b9323262..6ef08c43e 100644
--- a/templates/machine/beaglebone/50_bblayers.conf.inc
+++ b/templates/machine/beaglebone/50_bblayers.conf.inc
@@ -1,4 +1,5 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-arm/meta-arm \
- ${METADIR}/bsp/meta-ti \
+ ${METADIR}/bsp/meta-arm/meta-arm-toolchain \
+ ${METADIR}/bsp/meta-ti/meta-ti-bsp \
"
diff --git a/templates/machine/beagleplay/50_bblayers.conf.inc b/templates/machine/beagleplay/50_bblayers.conf.inc
new file mode 100644
index 000000000..6ef08c43e
--- /dev/null
+++ b/templates/machine/beagleplay/50_bblayers.conf.inc
@@ -0,0 +1,5 @@
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-arm/meta-arm \
+ ${METADIR}/bsp/meta-arm/meta-arm-toolchain \
+ ${METADIR}/bsp/meta-ti/meta-ti-bsp \
+ "
diff --git a/templates/machine/beagleplay/50_local.conf.inc b/templates/machine/beagleplay/50_local.conf.inc
new file mode 100644
index 000000000..334f81819
--- /dev/null
+++ b/templates/machine/beagleplay/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "beagleplay"
+#see meta-agl/meta-agl-bsp/conf/include/agl_beagleplay.inc
+require conf/include/agl_beagleplay.inc
diff --git a/templates/machine/beagleplay/README_machine_beagleplay.md b/templates/machine/beagleplay/README_machine_beagleplay.md
new file mode 100644
index 000000000..d4528fba2
--- /dev/null
+++ b/templates/machine/beagleplay/README_machine_beagleplay.md
@@ -0,0 +1,9 @@
+---
+description: Machine beagleplay
+authors: Denys Dmytriyenko <denys@konsulko.com>
+---
+
+### Machine beagleplay
+
+BeagleBoard.org BeaglePlay (uses Texas Instruments AM625x SoC).
+
diff --git a/templates/machine/cubox-i/50_setup.sh b/templates/machine/cubox-i/50_setup.sh
index bb22790dc..eefd1eb7f 100644
--- a/templates/machine/cubox-i/50_setup.sh
+++ b/templates/machine/cubox-i/50_setup.sh
@@ -1,2 +1,2 @@
-find_and_ack_eula $METADIR/meta-freescale EULA
+find_and_ack_eula $METADIR/bsp/meta-freescale EULA
export EULA_FLAG_NAME="ACCEPT_FSL_EULA"
diff --git a/templates/machine/cyclone5/50_bblayers.conf.inc b/templates/machine/cyclone5/50_bblayers.conf.inc
deleted file mode 100644
index 857d9f1d4..000000000
--- a/templates/machine/cyclone5/50_bblayers.conf.inc
+++ /dev/null
@@ -1 +0,0 @@
-BBLAYERS =+ "${METADIR}/bsp/meta-altera"
diff --git a/templates/machine/cyclone5/50_local.conf.inc b/templates/machine/cyclone5/50_local.conf.inc
deleted file mode 100644
index a4761ef4c..000000000
--- a/templates/machine/cyclone5/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "cyclone5"
-#see meta-agl/meta-agl-bsp/conf/include/agl_cyclone5.inc
-require conf/include/agl_cyclone5.inc
diff --git a/templates/machine/cyclone5/README_machine_cyclone5.md b/templates/machine/cyclone5/README_machine_cyclone5.md
deleted file mode 100644
index da195afa9..000000000
--- a/templates/machine/cyclone5/README_machine_cyclone5.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Machine cyclone5
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
----
-
-### Machine cyclone5
-
-*Description is missing - please complete file meta-agl/templates/machine/cyclone5/README_machine_cyclone5.md*
-
diff --git a/templates/machine/dra7xx-evm/50_local.conf.inc b/templates/machine/dra7xx-evm/50_local.conf.inc
deleted file mode 100644
index e43a4f294..000000000
--- a/templates/machine/dra7xx-evm/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "dra7xx-evm"
-#see meta-agl/meta-agl-bsp/conf/include/agl_dra7xx-evm.inc
-require conf/include/agl_dra7xx-evm.inc
diff --git a/templates/machine/dra7xx-evm/README_machine_dra7xx-evm.md b/templates/machine/dra7xx-evm/README_machine_dra7xx-evm.md
deleted file mode 100644
index 8a9a72fb0..000000000
--- a/templates/machine/dra7xx-evm/README_machine_dra7xx-evm.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Machine dra7xx-evm
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>, Karthik Ramanan <a0393906@ti.com>, Kevin Hilman <khilman@baylibre.com>, Ronan Le Martret <ronan.lemartret@iot.bzh>, Stephane Desneux <stephane.desneux@iot.bzh>
----
-
-### Machine dra7xx-evm
-
-*Description is missing - please complete file meta-agl/templates/machine/dra7xx-evm/README_machine_dra7xx-evm.md*
-
diff --git a/templates/machine/dragonboard-410c/50_bblayers.conf.inc b/templates/machine/dragonboard-410c/50_bblayers.conf.inc
deleted file mode 100644
index 41fe36719..000000000
--- a/templates/machine/dragonboard-410c/50_bblayers.conf.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-BBLAYERS =+ "${METADIR}/bsp/meta-qcom"
-BBMASK += "bsp/meta-qcom/openembedded-layer/recipes-navigation/gpsd"
diff --git a/templates/machine/dragonboard-410c/50_local.conf.inc b/templates/machine/dragonboard-410c/50_local.conf.inc
deleted file mode 100644
index f717fd8ee..000000000
--- a/templates/machine/dragonboard-410c/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "dragonboard-410c"
-#see meta-agl/meta-agl-bsp/conf/include/agl_dragonboard-410c.inc
-require conf/include/agl_dragonboard-410c.inc
diff --git a/templates/machine/dragonboard-410c/README_machine_dragonboard-410c.md b/templates/machine/dragonboard-410c/README_machine_dragonboard-410c.md
deleted file mode 100644
index 047e08c28..000000000
--- a/templates/machine/dragonboard-410c/README_machine_dragonboard-410c.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Machine dragonboard-410c
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>, Kotaro Hashimoto <Hashimoto.Kotaro@ds.MitsubishiElectric.co.jp>, Stephane Desneux <stephane.desneux@iot.bzh>
----
-
-### Machine dragonboard-410c
-
-*Description is missing - please complete file meta-agl/templates/machine/dragonboard-410c/README_machine_dragonboard-410c.md*
-
diff --git a/templates/machine/dragonboard-820c/50_bblayers.conf.inc b/templates/machine/dragonboard-820c/50_bblayers.conf.inc
deleted file mode 100644
index f3b96cbb6..000000000
--- a/templates/machine/dragonboard-820c/50_bblayers.conf.inc
+++ /dev/null
@@ -1 +0,0 @@
-BBLAYERS =+ "${METADIR}/bsp/meta-qcom"
diff --git a/templates/machine/dragonboard-820c/50_local.conf.inc b/templates/machine/dragonboard-820c/50_local.conf.inc
deleted file mode 100644
index 1cd53d60c..000000000
--- a/templates/machine/dragonboard-820c/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "dragonboard-820c"
-#see meta-agl/meta-agl-bsp/conf/include/agl_dragonboard-410c.inc
-require conf/include/agl_dragonboard-820c.inc
diff --git a/templates/machine/dragonboard-820c/README_machine_dragonboard-820c.md b/templates/machine/dragonboard-820c/README_machine_dragonboard-820c.md
deleted file mode 100644
index 73d9532c3..000000000
--- a/templates/machine/dragonboard-820c/README_machine_dragonboard-820c.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Machine dragonboard-820c
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
----
-
-### Machine dragonboard-820c
-
-*Description is missing - please complete file meta-agl/templates/machine/dragonboard-820c/README_machine_dragonboard-820c.md*
-
diff --git a/templates/machine/ebisu/50_bblayers.conf.inc b/templates/machine/ebisu/50_bblayers.conf.inc
index 16397c2eb..e06bd413d 100644
--- a/templates/machine/ebisu/50_bblayers.conf.inc
+++ b/templates/machine/ebisu/50_bblayers.conf.inc
@@ -1,3 +1,4 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/dra7xx-evm/50_bblayers.conf.inc b/templates/machine/generic-arm64/50_bblayers.conf.inc
index 6b9323262..05e60f69b 100644
--- a/templates/machine/dra7xx-evm/50_bblayers.conf.inc
+++ b/templates/machine/generic-arm64/50_bblayers.conf.inc
@@ -1,4 +1,4 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-arm/meta-arm \
- ${METADIR}/bsp/meta-ti \
+ ${METADIR}/bsp/meta-arm/meta-arm-toolchain \
"
diff --git a/templates/machine/generic-arm64/50_local.conf.inc b/templates/machine/generic-arm64/50_local.conf.inc
new file mode 100644
index 000000000..3918af8dd
--- /dev/null
+++ b/templates/machine/generic-arm64/50_local.conf.inc
@@ -0,0 +1,2 @@
+MACHINE = "generic-arm64"
+
diff --git a/templates/machine/generic-arm64/README_machine_generic-arm64.md b/templates/machine/generic-arm64/README_machine_generic-arm64.md
new file mode 100644
index 000000000..22dcb1fec
--- /dev/null
+++ b/templates/machine/generic-arm64/README_machine_generic-arm64.md
@@ -0,0 +1,10 @@
+---
+description: Machine generic-arm64
+authors: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+---
+
+### Machine generic-arm64
+
+This is a standard aarch64 (ARM 64bit) machine for use with 'SystemReady'
+(aka UEFI) systems.
+
diff --git a/templates/machine/h3-salvator-x/50_bblayers.conf.inc b/templates/machine/h3-salvator-x/50_bblayers.conf.inc
index 16397c2eb..e06bd413d 100644
--- a/templates/machine/h3-salvator-x/50_bblayers.conf.inc
+++ b/templates/machine/h3-salvator-x/50_bblayers.conf.inc
@@ -1,3 +1,4 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/h3ulcb-kf/50_bblayers.conf.inc b/templates/machine/h3ulcb-kf/50_bblayers.conf.inc
index 61d472ab1..25e36b019 100644
--- a/templates/machine/h3ulcb-kf/50_bblayers.conf.inc
+++ b/templates/machine/h3ulcb-kf/50_bblayers.conf.inc
@@ -1,4 +1,5 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
${METADIR}/meta-agl/meta-agl-bsp/meta-rcar-gen3-adas \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/h3ulcb-nogfx/50_bblayers.conf.inc b/templates/machine/h3ulcb-nogfx/50_bblayers.conf.inc
index 16397c2eb..e06bd413d 100644
--- a/templates/machine/h3ulcb-nogfx/50_bblayers.conf.inc
+++ b/templates/machine/h3ulcb-nogfx/50_bblayers.conf.inc
@@ -1,3 +1,4 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/h3ulcb/50_bblayers.conf.inc b/templates/machine/h3ulcb/50_bblayers.conf.inc
index 16397c2eb..e06bd413d 100644
--- a/templates/machine/h3ulcb/50_bblayers.conf.inc
+++ b/templates/machine/h3ulcb/50_bblayers.conf.inc
@@ -1,3 +1,4 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/hsdk/40_bblayers.conf.inc b/templates/machine/hsdk/40_bblayers.conf.inc
deleted file mode 100644
index e3954fef3..000000000
--- a/templates/machine/hsdk/40_bblayers.conf.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-# Use meta-synopsys layer for ARC HSDK board
-BBLAYERS =+ "${METADIR}/bsp/meta-synopsys"
diff --git a/templates/machine/hsdk/50_local.conf.inc b/templates/machine/hsdk/50_local.conf.inc
deleted file mode 100644
index 61f77435e..000000000
--- a/templates/machine/hsdk/50_local.conf.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-MACHINE = "hsdk"
-require conf/include/agl_hsdk.inc
diff --git a/templates/machine/hsdk/README_machine_hsdk.md b/templates/machine/hsdk/README_machine_hsdk.md
deleted file mode 100644
index 30e56d13b..000000000
--- a/templates/machine/hsdk/README_machine_hsdk.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Machine hsdk
-authors: Evgeniy Didin <didin@synopsys.com>, Jan-Simon Möller <jsmoeller@linuxfoundation.org>
----
-
-### Machine hsdk
-
-*Description is missing - please complete file meta-agl/templates/machine/hsdk/README_machine_hsdk.md*
-
diff --git a/templates/machine/imx6qdlsabreauto/50_setup.sh b/templates/machine/imx6qdlsabreauto/50_setup.sh
index bb22790dc..eefd1eb7f 100644
--- a/templates/machine/imx6qdlsabreauto/50_setup.sh
+++ b/templates/machine/imx6qdlsabreauto/50_setup.sh
@@ -1,2 +1,2 @@
-find_and_ack_eula $METADIR/meta-freescale EULA
+find_and_ack_eula $METADIR/bsp/meta-freescale EULA
export EULA_FLAG_NAME="ACCEPT_FSL_EULA"
diff --git a/templates/machine/imx8mqevk-viv/40_bblayers.conf.inc b/templates/machine/imx8mq-evk-viv/40_bblayers.conf.inc
index edcb6a3a2..edcb6a3a2 100644
--- a/templates/machine/imx8mqevk-viv/40_bblayers.conf.inc
+++ b/templates/machine/imx8mq-evk-viv/40_bblayers.conf.inc
diff --git a/templates/machine/imx8mq-evk-viv/50_local.conf.inc b/templates/machine/imx8mq-evk-viv/50_local.conf.inc
new file mode 100644
index 000000000..7504c1120
--- /dev/null
+++ b/templates/machine/imx8mq-evk-viv/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "imx8mq-evk"
+#see meta-agl/meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc
+require conf/include/agl_imx8mq-evk-viv.inc
diff --git a/templates/machine/imx8mqevk-viv/50_setup.sh b/templates/machine/imx8mq-evk-viv/50_setup.sh
index eefd1eb7f..eefd1eb7f 100644
--- a/templates/machine/imx8mqevk-viv/50_setup.sh
+++ b/templates/machine/imx8mq-evk-viv/50_setup.sh
diff --git a/templates/machine/imx8mqevk-viv/README_machine_imx8mqevk-viv.md b/templates/machine/imx8mq-evk-viv/README_machine_imx8mq-evk-viv.md
index be30e00fe..be30e00fe 100644
--- a/templates/machine/imx8mqevk-viv/README_machine_imx8mqevk-viv.md
+++ b/templates/machine/imx8mq-evk-viv/README_machine_imx8mq-evk-viv.md
diff --git a/templates/machine/imx8mqevk/40_bblayers.conf.inc b/templates/machine/imx8mq-evk/40_bblayers.conf.inc
index edcb6a3a2..edcb6a3a2 100644
--- a/templates/machine/imx8mqevk/40_bblayers.conf.inc
+++ b/templates/machine/imx8mq-evk/40_bblayers.conf.inc
diff --git a/templates/machine/imx8mq-evk/50_local.conf.inc b/templates/machine/imx8mq-evk/50_local.conf.inc
new file mode 100644
index 000000000..8a178e28b
--- /dev/null
+++ b/templates/machine/imx8mq-evk/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "imx8mq-evk"
+#see meta-agl/meta-agl-bsp/conf/include/agl_imx8mq-evk.inc
+require conf/include/agl_imx8mq-evk.inc
diff --git a/templates/machine/imx8mqevk/50_setup.sh b/templates/machine/imx8mq-evk/50_setup.sh
index eefd1eb7f..eefd1eb7f 100644
--- a/templates/machine/imx8mqevk/50_setup.sh
+++ b/templates/machine/imx8mq-evk/50_setup.sh
diff --git a/templates/machine/imx8mqevk/README_machine_imx8mqevk.md b/templates/machine/imx8mq-evk/README_machine_imx8mq-evk.md
index 5d2bcbd37..ea9ddacce 100644
--- a/templates/machine/imx8mqevk/README_machine_imx8mqevk.md
+++ b/templates/machine/imx8mq-evk/README_machine_imx8mq-evk.md
@@ -3,11 +3,11 @@ description: i.MX8MQ EVK with etnaviv GPU driver
authors: Scott Murray <scott.murray@konsulko.com>
---
-### Machine imx8mqevk
+### Machine imx8mq-evk
i.MX8MQ EVK and EVKB boards with etnaviv GPU driver support.
Note that etnaviv on the GC7000L GPU in the i.MX8MQ is currently still
-a work in progress, the imx8mqevk-viv template using the NXP Vivante
+a work in progress, the imx8mq-evk-viv template using the NXP Vivante
driver may be a better choice for those not interested in etnaviv
debugging and development.
diff --git a/templates/machine/imx8mqevk-viv/50_local.conf.inc b/templates/machine/imx8mqevk-viv/50_local.conf.inc
deleted file mode 100644
index e9668c307..000000000
--- a/templates/machine/imx8mqevk-viv/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "imx8mqevk"
-#see meta-agl/meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc
-require conf/include/agl_imx8mqevk-viv.inc
diff --git a/templates/machine/imx8mqevk/50_local.conf.inc b/templates/machine/imx8mqevk/50_local.conf.inc
deleted file mode 100644
index 5f9b95943..000000000
--- a/templates/machine/imx8mqevk/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "imx8mqevk"
-#see meta-agl/meta-agl-bsp/conf/include/agl_imx8mqevk.inc
-require conf/include/agl_imx8mqevk.inc
diff --git a/templates/machine/j721e-evm/50_bblayers.conf.inc b/templates/machine/j721e-evm/50_bblayers.conf.inc
new file mode 100644
index 000000000..6ef08c43e
--- /dev/null
+++ b/templates/machine/j721e-evm/50_bblayers.conf.inc
@@ -0,0 +1,5 @@
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-arm/meta-arm \
+ ${METADIR}/bsp/meta-arm/meta-arm-toolchain \
+ ${METADIR}/bsp/meta-ti/meta-ti-bsp \
+ "
diff --git a/templates/machine/j721e-evm/50_local.conf.inc b/templates/machine/j721e-evm/50_local.conf.inc
new file mode 100644
index 000000000..917ca73a7
--- /dev/null
+++ b/templates/machine/j721e-evm/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "j721e-evm"
+#see meta-agl/meta-agl-bsp/conf/include/agl_j721e-evm.inc
+require conf/include/agl_j721e-evm.inc
diff --git a/templates/machine/j721e-evm/README_machine_j721e-evm.md b/templates/machine/j721e-evm/README_machine_j721e-evm.md
new file mode 100644
index 000000000..c6f7320d6
--- /dev/null
+++ b/templates/machine/j721e-evm/README_machine_j721e-evm.md
@@ -0,0 +1,9 @@
+---
+description: Machine j721e-evm
+authors: Scott Murray <scott.murray@konsulko.com>
+---
+
+### Machine j721e-evm
+
+Texas Instruments J721e EVM (formerly J7 EVM).
+
diff --git a/templates/machine/m3-salvator-x/50_bblayers.conf.inc b/templates/machine/m3-salvator-x/50_bblayers.conf.inc
index 16397c2eb..e06bd413d 100644
--- a/templates/machine/m3-salvator-x/50_bblayers.conf.inc
+++ b/templates/machine/m3-salvator-x/50_bblayers.conf.inc
@@ -1,3 +1,4 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/m3ulcb-kf/50_bblayers.conf.inc b/templates/machine/m3ulcb-kf/50_bblayers.conf.inc
index 61d472ab1..25e36b019 100644
--- a/templates/machine/m3ulcb-kf/50_bblayers.conf.inc
+++ b/templates/machine/m3ulcb-kf/50_bblayers.conf.inc
@@ -1,4 +1,5 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
${METADIR}/meta-agl/meta-agl-bsp/meta-rcar-gen3-adas \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/m3ulcb-nogfx/50_bblayers.conf.inc b/templates/machine/m3ulcb-nogfx/50_bblayers.conf.inc
index 16397c2eb..e06bd413d 100644
--- a/templates/machine/m3ulcb-nogfx/50_bblayers.conf.inc
+++ b/templates/machine/m3ulcb-nogfx/50_bblayers.conf.inc
@@ -1,3 +1,4 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/m3ulcb/50_bblayers.conf.inc b/templates/machine/m3ulcb/50_bblayers.conf.inc
index 16397c2eb..e06bd413d 100644
--- a/templates/machine/m3ulcb/50_bblayers.conf.inc
+++ b/templates/machine/m3ulcb/50_bblayers.conf.inc
@@ -1,3 +1,4 @@
BBLAYERS =+ "\
${METADIR}/bsp/meta-renesas/meta-rcar-gen3 \
+ ${METADIR}/external/poky/meta-yocto-bsp \
"
diff --git a/templates/machine/nitrogen6x/40_bblayers.conf.inc b/templates/machine/nitrogen6x/40_bblayers.conf.inc
deleted file mode 100644
index a4323be1a..000000000
--- a/templates/machine/nitrogen6x/40_bblayers.conf.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-# This must be parsed after qt5, etc. layers so that they are correctly
-# recognized by meta-freescale/dynamic-layers
-BBLAYERS =+ "\
- ${METADIR}/bsp/meta-freescale \
- ${METADIR}/bsp/meta-freescale-3rdparty \
- "
diff --git a/templates/machine/nitrogen6x/50_local.conf.inc b/templates/machine/nitrogen6x/50_local.conf.inc
deleted file mode 100644
index f8178bbd1..000000000
--- a/templates/machine/nitrogen6x/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "nitrogen6x"
-#see meta-agl/meta-agl-bsp/conf/include/agl_nitrogen6x.inc
-require conf/include/agl_nitrogen6x.inc
diff --git a/templates/machine/nitrogen6x/50_setup.sh b/templates/machine/nitrogen6x/50_setup.sh
deleted file mode 100644
index bb22790dc..000000000
--- a/templates/machine/nitrogen6x/50_setup.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-find_and_ack_eula $METADIR/meta-freescale EULA
-export EULA_FLAG_NAME="ACCEPT_FSL_EULA"
diff --git a/templates/machine/nitrogen6x/README_machine_nitrogen6x.md b/templates/machine/nitrogen6x/README_machine_nitrogen6x.md
deleted file mode 100644
index 9994de052..000000000
--- a/templates/machine/nitrogen6x/README_machine_nitrogen6x.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Machine nitrogen6x
-authors: Jan-Simon Möller <jsmoeller@linuxfoundation.org>, Mihail Grigorov <michael.grigorov@konsulko.com>, Nathan Illerbrun <nathani@validmanufacturing.com>, Scott Murray <scott.murray@konsulko.com>
----
-
-### Machine nitrogen6x
-
-*Description is missing - please complete file meta-agl/templates/machine/nitrogen6x/README_machine_nitrogen6x.md*
-
diff --git a/templates/machine/qemuriscv64/50_local.conf.inc b/templates/machine/qemuriscv64/50_local.conf.inc
new file mode 100644
index 000000000..5eba64f0d
--- /dev/null
+++ b/templates/machine/qemuriscv64/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "qemuriscv64"
+#see meta-agl/meta-agl-bsp/conf/include/agl_qemux86-64.inc
+require conf/include/agl_qemuriscv64.inc
diff --git a/templates/machine/qemuriscv64/README_machine_qemuriscv64.md b/templates/machine/qemuriscv64/README_machine_qemuriscv64.md
new file mode 100644
index 000000000..00eb1d300
--- /dev/null
+++ b/templates/machine/qemuriscv64/README_machine_qemuriscv64.md
@@ -0,0 +1,9 @@
+---
+description: Machine qemuriscv64
+authors: Alistair Francis <alistair.francis@wdc.com>
+---
+
+### Machine qemuarm64
+
+The 64-bit RISC-V QEMU virt machine.
+
diff --git a/templates/machine/raspberrypi3/50_local.conf.inc b/templates/machine/raspberrypi3/50_local.conf.inc
deleted file mode 100644
index e47637178..000000000
--- a/templates/machine/raspberrypi3/50_local.conf.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "raspberrypi3"
-#see meta-agl/meta-agl-bsp/conf/include/agl_raspberrypi3.inc
-require conf/include/agl_raspberrypi3.inc
diff --git a/templates/machine/raspberrypi3/README_machine_raspberrypi3.md b/templates/machine/raspberrypi3/README_machine_raspberrypi3.md
deleted file mode 100644
index be5c9bb59..000000000
--- a/templates/machine/raspberrypi3/README_machine_raspberrypi3.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: Machine raspberrypi3
-authors: Anton Gerasimov <anton@advancedtelematic.com>, Jan-Simon Möller <jsmoeller@linuxfoundation.org>, Kevin Hilman <khilman@baylibre.com>, Leon Anavi <leon.anavi@konsulko.com>, Matt Ranostay <matt.ranostay@konsulko.com>, Ronan Le Martret <ronan.lemartret@iot.bzh>, Stephane Desneux <stephane.desneux@iot.bzh>, Tom Rini <trini@konsulko.com>
----
-
-### Machine raspberrypi3
-
-*Description is missing - please complete file meta-agl/templates/machine/raspberrypi3/README_machine_raspberrypi3.md*
-
diff --git a/templates/machine/raspberrypi4/50_local.conf.inc b/templates/machine/raspberrypi4/50_local.conf.inc
index e5556f278..e12f4a4a3 100644
--- a/templates/machine/raspberrypi4/50_local.conf.inc
+++ b/templates/machine/raspberrypi4/50_local.conf.inc
@@ -1,4 +1,4 @@
MACHINE = "raspberrypi4-64"
-#see meta-agl/meta-agl-bsp/conf/include/agl_raspberrypi3.inc
+#see meta-agl/meta-agl-bsp/conf/include/agl_raspberrypi4.inc
require conf/include/agl_raspberrypi4.inc
diff --git a/templates/machine/raspberrypi3/50_bblayers.conf.inc b/templates/machine/raspberrypi5/50_bblayers.conf.inc
index 2e677dd8a..2e677dd8a 100644
--- a/templates/machine/raspberrypi3/50_bblayers.conf.inc
+++ b/templates/machine/raspberrypi5/50_bblayers.conf.inc
diff --git a/templates/machine/raspberrypi5/50_local.conf.inc b/templates/machine/raspberrypi5/50_local.conf.inc
new file mode 100644
index 000000000..9ee2644ab
--- /dev/null
+++ b/templates/machine/raspberrypi5/50_local.conf.inc
@@ -0,0 +1,4 @@
+MACHINE = "raspberrypi5"
+
+#see meta-agl/meta-agl-bsp/conf/include/agl_raspberrypi5.inc
+require conf/include/agl_raspberrypi5.inc
diff --git a/templates/machine/s4sk/50_bblayers.conf.inc b/templates/machine/s4sk/50_bblayers.conf.inc
new file mode 100644
index 000000000..0cc25a9ab
--- /dev/null
+++ b/templates/machine/s4sk/50_bblayers.conf.inc
@@ -0,0 +1,7 @@
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-renesas/meta-rcar-gateway \
+ ${METADIR}/external/poky/meta-yocto-bsp \
+ "
+
+AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python"
+
diff --git a/templates/machine/s4sk/50_local.conf.inc b/templates/machine/s4sk/50_local.conf.inc
new file mode 100644
index 000000000..b804b3845
--- /dev/null
+++ b/templates/machine/s4sk/50_local.conf.inc
@@ -0,0 +1,4 @@
+MACHINE = "s4sk"
+#see meta-agl/meta-agl-bsp/conf/include/agl_s4sk.inc
+require conf/include/agl_s4sk.inc
+
diff --git a/templates/machine/s4sk/README_machine_s4sk.md b/templates/machine/s4sk/README_machine_s4sk.md
new file mode 100644
index 000000000..275be67a6
--- /dev/null
+++ b/templates/machine/s4sk/README_machine_s4sk.md
@@ -0,0 +1,11 @@
+---
+description: Machine s4sk
+authors: Loc Nguyen <loc.nguyen.wt@renesas.com>
+---
+
+### Machine s4sk
+
+Renesas RCar Gen4 "s4sk" board.
+
+* [R-Car S4 Starter Kit website](https://www.renesas.com/us/en/products/automotive-products/automotive-system-chips-socs/y-ask-rcar-s4-1000base-t-r-car-s4-starter-kit)
+* [elinux S4 Starter Kit](https://elinux.org/R-Car/Boards/S4SK)
diff --git a/templates/machine/unmatched/50_bblayers.conf.inc b/templates/machine/unmatched/50_bblayers.conf.inc
new file mode 100644
index 000000000..03565bafd
--- /dev/null
+++ b/templates/machine/unmatched/50_bblayers.conf.inc
@@ -0,0 +1,6 @@
+# This is the original place, but we need to tweak layer.conf
+BBLAYERS =+ "${METADIR}/bsp/meta-sifive"
+
+# For now, tweak the layer's compatibility to allow using with kirkstone,
+# since we know it works without major issues.
+LAYERSERIES_COMPAT_meta-sifive:append = " kirkstone"
diff --git a/templates/machine/unmatched/50_local.conf.inc b/templates/machine/unmatched/50_local.conf.inc
new file mode 100644
index 000000000..c4d2b3ae5
--- /dev/null
+++ b/templates/machine/unmatched/50_local.conf.inc
@@ -0,0 +1,4 @@
+MACHINE = "unmatched"
+
+#see meta-agl/meta-agl-bsp/conf/include/agl_raspberrypi4.inc
+require conf/include/agl_unmatched.inc
diff --git a/templates/machine/virtio-aarch64/50_bblayers.conf.inc b/templates/machine/virtio-aarch64/50_bblayers.conf.inc
new file mode 100644
index 000000000..16c7ec5f8
--- /dev/null
+++ b/templates/machine/virtio-aarch64/50_bblayers.conf.inc
@@ -0,0 +1,6 @@
+BBFILES += " \
+ ${METADIR}/meta-agl/meta-agl-bsp/virtualization-layer/recipes*/*/*.bb \
+ ${METADIR}/meta-agl/meta-agl-bsp/virtualization-layer/recipes*/*/*.bbappend \
+ "
+
+BBMASK += "meta-agl/meta-agl-bsp/virtualization-layer/recipes-extended/xen"
diff --git a/templates/machine/virtio-aarch64/50_local.conf.inc b/templates/machine/virtio-aarch64/50_local.conf.inc
new file mode 100644
index 000000000..3328d6ab8
--- /dev/null
+++ b/templates/machine/virtio-aarch64/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "virtio-aarch64"
+# see meta-agl/meta-agl-bsp/conf/include/agl_virtio-aarch64.inc
+require conf/include/agl_virtio-aarch64.inc
diff --git a/templates/machine/virtio-aarch64/README_machine_virtio-aarch64.md b/templates/machine/virtio-aarch64/README_machine_virtio-aarch64.md
new file mode 100644
index 000000000..8149c4324
--- /dev/null
+++ b/templates/machine/virtio-aarch64/README_machine_virtio-aarch64.md
@@ -0,0 +1,10 @@
+---
+description: Machine virtio-aarch64
+authors: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
+---
+
+### Machine virtio-aarch64
+
+This machine is intended to run in an ARMv8 virtualized environment that
+provides VirtIO devices. For now, virtio-aarch64 machine was verified under QEMU
+and OpenSynergy COQOS Hypervisor.