Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 827878 - x11-drivers/xf86-video-nouveau-1.0.17 fails to compile: nv_driver.c:562:43: error: ‘struct _PixmapDirtyUpdate’ has no member named ‘slave_dst’
Summary: x11-drivers/xf86-video-nouveau-1.0.17 fails to compile: nv_driver.c:562:43: e...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal
Assignee: Gentoo X packagers
URL:
Whiteboard:
Keywords: PATCH
Depends on:
Blocks:
 
Reported: 2021-11-30 07:43 UTC by Agostino Sarubbo
Modified: 2021-12-01 11:49 UTC (History)
10 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
build.log (build.log,80.63 KB, text/plain)
2021-11-30 07:43 UTC, Agostino Sarubbo
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Agostino Sarubbo gentoo-dev 2021-11-30 07:43:14 UTC
https://blogs.gentoo.org/ago/2020/07/04/gentoo-tinderbox/

Issue: x11-drivers/xf86-video-nouveau-1.0.17 fails to compile.
Discovered on: amd64 (internal ref: ci)

NOTE:
If you think this is a GCC-11 related issue, please block bug 732706.
Comment 1 Agostino Sarubbo gentoo-dev 2021-11-30 07:43:16 UTC
Created attachment 757039 [details]
build.log

build log and emerge --info
Comment 2 Agostino Sarubbo gentoo-dev 2021-11-30 07:43:17 UTC
Error(s) that match a know pattern in addition to what has been reported in the summary:


fatal: not a git repository (or any parent up to mount point /var/tmp)
nv_driver.c:562:43: error: ‘struct _PixmapDirtyUpdate’ has no member named ‘slave_dst’
Comment 3 Marius Stoica 2021-11-30 08:06:42 UTC
setting gcc to either version 9.4.0 or 10.3.1_p20211126 produces the same result...


letto@localhost ~/devel/progs/cpp $  sudo eselect gcc set x86_64-pc-linux-gnu-9.4.0
 * Switching native-compiler to x86_64-pc-linux-gnu-9.4.0 ...
>>> Regenerating /etc/ld.so.cache...                                [ ok ]

 * If you intend to use the gcc from the new profile in an already
 * running shell, please remember to do:

 *   . /etc/profile

letto@localhost ~/devel/progs/cpp $  . /etc/profile
letto@localhost ~/devel/progs/cpp $   sudo emerge -av1 x11-drivers/xf86-video-nouveau
...

nv_driver.c: In function ‘redisplay_dirty’:
nv_driver.c:562:36: error: ‘struct _PixmapDirtyUpdate’ has no member named ‘slave_dst’
  562 |  PixmapRegionInit(&pixregion, dirty->slave_dst);
      |                                    ^~
nv_driver.c:564:27: error: ‘struct _PixmapDirtyUpdate’ has no member named ‘slave_dst’
  564 |  DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion);
      |                           ^~
nv_driver.c:571:35: error: ‘struct _PixmapDirtyUpdate’ has no member named ‘slave_dst’
  571 |  DamageRegionProcessPending(&dirty->slave_dst->drawable);
      |                                   ^~
nv_driver.c: In function ‘NVScreenInit’:
nv_driver.c:1451:9: warning: implicit declaration of function ‘wfbScreenInit’; did you mean ‘fbScreenInit’? [-Wimplicit-function-declaration]
 1451 |   ret = wfbScreenInit(pScreen, FBStart, pScrn->virtualX,
      |         ^~~~~~~~~~~~~
      |         fbScreenInit
make[2]: *** [Makefile:673: nv_driver.lo] Error 1
Comment 4 Marius Stoica 2021-11-30 08:14:56 UTC
struct _PixmapDirtyUpdate is found in /usr/include/xorg/pixmapstr.h
This could probably be just a problem of dependency on the right version of x11-base/xorg-server
Comment 5 Marek Bartosiewicz 2021-11-30 08:17:19 UTC
x11-drivers/xf86-video-ati-19.1.0 fails in the same way.

This is what was emerged on my computer today:

1638259515: Started emerge on: lis 30, 2021 09:05:15
1638259515:  *** emerge --ask-enter-invalid --newuse --update --deep --with-bdeps=y --regex-search-auto=y @world
1638259556:  >>> emerge (1 of 23) sys-libs/glibc-2.34-r3 to /
1638259556:  === (1 of 23) Cleaning (sys-libs/glibc-2.34-r3::/var/db/repos/gentoo/sys-libs/glibc/glibc-2.34-r3.ebuild)
1638259557:  === (1 of 23) Compiling/Merging (sys-libs/glibc-2.34-r3::/var/db/repos/gentoo/sys-libs/glibc/glibc-2.34-r3.ebuild)
1638259667:  === (1 of 23) Merging (sys-libs/glibc-2.34-r3::/var/db/repos/gentoo/sys-libs/glibc/glibc-2.34-r3.ebuild)
1638259670:  >>> AUTOCLEAN: sys-libs/glibc:2.2
1638259670:  === Unmerging... (sys-libs/glibc-2.34-r2)
1638259670:  >>> unmerge success: sys-libs/glibc-2.34-r2
1638259673:  === (1 of 23) Post-Build Cleaning (sys-libs/glibc-2.34-r3::/var/db/repos/gentoo/sys-libs/glibc/glibc-2.34-r3.ebuild)
1638259673:  ::: completed emerge (1 of 23) sys-libs/glibc-2.34-r3 to /
1638259673:  >>> emerge (2 of 23) dev-lang/go-1.17.3 to /
1638259673:  === (2 of 23) Cleaning (dev-lang/go-1.17.3::/var/db/repos/gentoo/dev-lang/go/go-1.17.3.ebuild)
1638259673:  === (2 of 23) Compiling/Merging (dev-lang/go-1.17.3::/var/db/repos/gentoo/dev-lang/go/go-1.17.3.ebuild)
1638259711:  === (2 of 23) Merging (dev-lang/go-1.17.3::/var/db/repos/gentoo/dev-lang/go/go-1.17.3.ebuild)
1638259715:  >>> AUTOCLEAN: dev-lang/go:0
1638259715:  === Unmerging... (dev-lang/go-1.17.2)
1638259716:  >>> unmerge success: dev-lang/go-1.17.2
1638259717:  === (2 of 23) Post-Build Cleaning (dev-lang/go-1.17.3::/var/db/repos/gentoo/dev-lang/go/go-1.17.3.ebuild)
1638259717:  ::: completed emerge (2 of 23) dev-lang/go-1.17.3 to /
1638259717:  >>> emerge (3 of 23) x11-base/xorg-drivers-21.1 to /
1638259717:  === (3 of 23) Cleaning (x11-base/xorg-drivers-21.1::/var/db/repos/gentoo/x11-base/xorg-drivers/xorg-drivers-21.1.ebuild)
1638259717:  === (3 of 23) Compiling/Merging (x11-base/xorg-drivers-21.1::/var/db/repos/gentoo/x11-base/xorg-drivers/xorg-drivers-21.1.ebuild)
1638259719:  === (3 of 23) Merging (x11-base/xorg-drivers-21.1::/var/db/repos/gentoo/x11-base/xorg-drivers/xorg-drivers-21.1.ebuild)
1638259720:  >>> AUTOCLEAN: x11-base/xorg-drivers:0
1638259720:  === Unmerging... (x11-base/xorg-drivers-1.20-r2)
1638259720:  >>> unmerge success: x11-base/xorg-drivers-1.20-r2
1638259721:  === (3 of 23) Post-Build Cleaning (x11-base/xorg-drivers-21.1::/var/db/repos/gentoo/x11-base/xorg-drivers/xorg-drivers-21.1.ebuild)
1638259721:  ::: completed emerge (3 of 23) x11-base/xorg-drivers-21.1 to /
1638259721:  >>> emerge (4 of 23) x11-libs/libdrm-2.4.109 to /
1638259721:  === (4 of 23) Cleaning (x11-libs/libdrm-2.4.109::/var/db/repos/gentoo/x11-libs/libdrm/libdrm-2.4.109.ebuild)
1638259721:  === (4 of 23) Compiling/Merging (x11-libs/libdrm-2.4.109::/var/db/repos/gentoo/x11-libs/libdrm/libdrm-2.4.109.ebuild)
1638259726:  === (4 of 23) Merging (x11-libs/libdrm-2.4.109::/var/db/repos/gentoo/x11-libs/libdrm/libdrm-2.4.109.ebuild)
1638259727:  >>> AUTOCLEAN: x11-libs/libdrm:0
1638259727:  === Unmerging... (x11-libs/libdrm-2.4.108)
1638259728:  >>> unmerge success: x11-libs/libdrm-2.4.108
1638259729:  === (4 of 23) Post-Build Cleaning (x11-libs/libdrm-2.4.109::/var/db/repos/gentoo/x11-libs/libdrm/libdrm-2.4.109.ebuild)
1638259729:  ::: completed emerge (4 of 23) x11-libs/libdrm-2.4.109 to /
1638259729:  >>> emerge (5 of 23) app-crypt/gnupg-2.3.3-r1 to /
1638259729:  === (5 of 23) Cleaning (app-crypt/gnupg-2.3.3-r1::/var/db/repos/gentoo/app-crypt/gnupg/gnupg-2.3.3-r1.ebuild)
1638259729:  === (5 of 23) Compiling/Merging (app-crypt/gnupg-2.3.3-r1::/var/db/repos/gentoo/app-crypt/gnupg/gnupg-2.3.3-r1.ebuild)
1638259747:  === (5 of 23) Merging (app-crypt/gnupg-2.3.3-r1::/var/db/repos/gentoo/app-crypt/gnupg/gnupg-2.3.3-r1.ebuild)
1638259747:  >>> AUTOCLEAN: app-crypt/gnupg:0
1638259747:  === Unmerging... (app-crypt/gnupg-2.3.3)
1638259748:  >>> unmerge success: app-crypt/gnupg-2.3.3
1638259749:  === (5 of 23) Post-Build Cleaning (app-crypt/gnupg-2.3.3-r1::/var/db/repos/gentoo/app-crypt/gnupg/gnupg-2.3.3-r1.ebuild)
1638259749:  ::: completed emerge (5 of 23) app-crypt/gnupg-2.3.3-r1 to /
1638259749:  >>> emerge (6 of 23) dev-util/vulkan-headers-1.2.198 to /
1638259749:  === (6 of 23) Cleaning (dev-util/vulkan-headers-1.2.198::/var/db/repos/gentoo/dev-util/vulkan-headers/vulkan-headers-1.2.198.ebuild)
1638259749:  === (6 of 23) Compiling/Merging (dev-util/vulkan-headers-1.2.198::/var/db/repos/gentoo/dev-util/vulkan-headers/vulkan-headers-1.2.198.ebuild)
1638259751:  === (6 of 23) Merging (dev-util/vulkan-headers-1.2.198::/var/db/repos/gentoo/dev-util/vulkan-headers/vulkan-headers-1.2.198.ebuild)
1638259752:  >>> AUTOCLEAN: dev-util/vulkan-headers:0
1638259752:  === Unmerging... (dev-util/vulkan-headers-1.2.189)
1638259752:  >>> unmerge success: dev-util/vulkan-headers-1.2.189
1638259753:  === (6 of 23) Post-Build Cleaning (dev-util/vulkan-headers-1.2.198::/var/db/repos/gentoo/dev-util/vulkan-headers/vulkan-headers-1.2.198.ebuild)
1638259753:  ::: completed emerge (6 of 23) dev-util/vulkan-headers-1.2.198 to /
1638259753:  >>> emerge (7 of 23) x11-apps/xauth-1.1.1 to /
1638259753:  === (7 of 23) Cleaning (x11-apps/xauth-1.1.1::/var/db/repos/gentoo/x11-apps/xauth/xauth-1.1.1.ebuild)
1638259753:  === (7 of 23) Compiling/Merging (x11-apps/xauth-1.1.1::/var/db/repos/gentoo/x11-apps/xauth/xauth-1.1.1.ebuild)
1638259757:  === (7 of 23) Merging (x11-apps/xauth-1.1.1::/var/db/repos/gentoo/x11-apps/xauth/xauth-1.1.1.ebuild)
1638259758:  >>> AUTOCLEAN: x11-apps/xauth:0
1638259758:  === Unmerging... (x11-apps/xauth-1.1)
1638259759:  >>> unmerge success: x11-apps/xauth-1.1
1638259760:  === (7 of 23) Post-Build Cleaning (x11-apps/xauth-1.1.1::/var/db/repos/gentoo/x11-apps/xauth/xauth-1.1.1.ebuild)
1638259760:  ::: completed emerge (7 of 23) x11-apps/xauth-1.1.1 to /
1638259760:  >>> emerge (8 of 23) x11-libs/libxcvt-0.1.1 to /
1638259760:  === (8 of 23) Cleaning (x11-libs/libxcvt-0.1.1::/var/db/repos/gentoo/x11-libs/libxcvt/libxcvt-0.1.1.ebuild)
1638259760:  === (8 of 23) Compiling/Merging (x11-libs/libxcvt-0.1.1::/var/db/repos/gentoo/x11-libs/libxcvt/libxcvt-0.1.1.ebuild)
1638259763:  === (8 of 23) Merging (x11-libs/libxcvt-0.1.1::/var/db/repos/gentoo/x11-libs/libxcvt/libxcvt-0.1.1.ebuild)
1638259764:  >>> AUTOCLEAN: x11-libs/libxcvt:0
1638259765:  === (8 of 23) Post-Build Cleaning (x11-libs/libxcvt-0.1.1::/var/db/repos/gentoo/x11-libs/libxcvt/libxcvt-0.1.1.ebuild)
1638259765:  ::: completed emerge (8 of 23) x11-libs/libxcvt-0.1.1 to /
1638259765:  >>> emerge (9 of 23) x11-base/xorg-server-21.1.1 to /
1638259765:  === (9 of 23) Cleaning (x11-base/xorg-server-21.1.1::/var/db/repos/gentoo/x11-base/xorg-server/xorg-server-21.1.1.ebuild)
1638259765:  === (9 of 23) Compiling/Merging (x11-base/xorg-server-21.1.1::/var/db/repos/gentoo/x11-base/xorg-server/xorg-server-21.1.1.ebuild)
1638259777:  === (9 of 23) Merging (x11-base/xorg-server-21.1.1::/var/db/repos/gentoo/x11-base/xorg-server/xorg-server-21.1.1.ebuild)
1638259778:  >>> AUTOCLEAN: x11-base/xorg-server:0
1638259778:  === Unmerging... (x11-base/xorg-server-1.20.13-r1)
1638259779:  >>> unmerge success: x11-base/xorg-server-1.20.13-r1
1638259780:  === (9 of 23) Post-Build Cleaning (x11-base/xorg-server-21.1.1::/var/db/repos/gentoo/x11-base/xorg-server/xorg-server-21.1.1.ebuild)
1638259780:  ::: completed emerge (9 of 23) x11-base/xorg-server-21.1.1 to /
1638259780:  >>> emerge (10 of 23) media-libs/vulkan-loader-1.2.198 to /
1638259780:  === (10 of 23) Cleaning (media-libs/vulkan-loader-1.2.198::/var/db/repos/gentoo/media-libs/vulkan-loader/vulkan-loader-1.2.198.ebuild)
1638259780:  === (10 of 23) Compiling/Merging (media-libs/vulkan-loader-1.2.198::/var/db/repos/gentoo/media-libs/vulkan-loader/vulkan-loader-1.2.198.ebuild)
1638259784:  === (10 of 23) Merging (media-libs/vulkan-loader-1.2.198::/var/db/repos/gentoo/media-libs/vulkan-loader/vulkan-loader-1.2.198.ebuild)
1638259785:  >>> AUTOCLEAN: media-libs/vulkan-loader:0
1638259785:  === Unmerging... (media-libs/vulkan-loader-1.2.189-r1)
1638259786:  >>> unmerge success: media-libs/vulkan-loader-1.2.189-r1
1638259787:  === (10 of 23) Post-Build Cleaning (media-libs/vulkan-loader-1.2.198::/var/db/repos/gentoo/media-libs/vulkan-loader/vulkan-loader-1.2.198.ebuild)
1638259787:  ::: completed emerge (10 of 23) media-libs/vulkan-loader-1.2.198 to /
1638259787:  >>> emerge (11 of 23) dev-util/spirv-headers-1.2.198 to /
1638259787:  === (11 of 23) Cleaning (dev-util/spirv-headers-1.2.198::/var/db/repos/gentoo/dev-util/spirv-headers/spirv-headers-1.2.198.ebuild)
1638259787:  === (11 of 23) Compiling/Merging (dev-util/spirv-headers-1.2.198::/var/db/repos/gentoo/dev-util/spirv-headers/spirv-headers-1.2.198.ebuild)
1638259789:  === (11 of 23) Merging (dev-util/spirv-headers-1.2.198::/var/db/repos/gentoo/dev-util/spirv-headers/spirv-headers-1.2.198.ebuild)
1638259790:  >>> AUTOCLEAN: dev-util/spirv-headers:0
1638259790:  === Unmerging... (dev-util/spirv-headers-20210817)
1638259790:  >>> unmerge success: dev-util/spirv-headers-20210817
1638259791:  === (11 of 23) Post-Build Cleaning (dev-util/spirv-headers-1.2.198::/var/db/repos/gentoo/dev-util/spirv-headers/spirv-headers-1.2.198.ebuild)
1638259791:  ::: completed emerge (11 of 23) dev-util/spirv-headers-1.2.198 to /
1638259791:  >>> emerge (12 of 23) x11-drivers/xf86-input-libinput-1.2.0 to /
1638259791:  === (12 of 23) Cleaning (x11-drivers/xf86-input-libinput-1.2.0::/var/db/repos/gentoo/x11-drivers/xf86-input-libinput/xf86-input-libinput-1.2.0.ebuild)
1638259791:  === (12 of 23) Compiling/Merging (x11-drivers/xf86-input-libinput-1.2.0::/var/db/repos/gentoo/x11-drivers/xf86-input-libinput/xf86-input-libinput-1.2.0.ebuild)
1638259797:  === (12 of 23) Merging (x11-drivers/xf86-input-libinput-1.2.0::/var/db/repos/gentoo/x11-drivers/xf86-input-libinput/xf86-input-libinput-1.2.0.ebuild)
1638259798:  >>> AUTOCLEAN: x11-drivers/xf86-input-libinput:0
1638259798:  === Unmerging... (x11-drivers/xf86-input-libinput-1.2.0)
1638259799:  >>> unmerge success: x11-drivers/xf86-input-libinput-1.2.0
1638259800:  === (12 of 23) Post-Build Cleaning (x11-drivers/xf86-input-libinput-1.2.0::/var/db/repos/gentoo/x11-drivers/xf86-input-libinput/xf86-input-libinput-1.2.0.ebuild)
1638259800:  ::: completed emerge (12 of 23) x11-drivers/xf86-input-libinput-1.2.0 to /
1638259800:  >>> emerge (13 of 23) x11-drivers/xf86-input-wacom-0.40.0 to /
1638259800:  === (13 of 23) Cleaning (x11-drivers/xf86-input-wacom-0.40.0::/var/db/repos/gentoo/x11-drivers/xf86-input-wacom/xf86-input-wacom-0.40.0.ebuild)
1638259800:  === (13 of 23) Compiling/Merging (x11-drivers/xf86-input-wacom-0.40.0::/var/db/repos/gentoo/x11-drivers/xf86-input-wacom/xf86-input-wacom-0.40.0.ebuild)
1638259806:  === (13 of 23) Merging (x11-drivers/xf86-input-wacom-0.40.0::/var/db/repos/gentoo/x11-drivers/xf86-input-wacom/xf86-input-wacom-0.40.0.ebuild)
1638259807:  >>> AUTOCLEAN: x11-drivers/xf86-input-wacom:0
1638259807:  === Unmerging... (x11-drivers/xf86-input-wacom-0.40.0)
1638259808:  >>> unmerge success: x11-drivers/xf86-input-wacom-0.40.0
1638259809:  === (13 of 23) Post-Build Cleaning (x11-drivers/xf86-input-wacom-0.40.0::/var/db/repos/gentoo/x11-drivers/xf86-input-wacom/xf86-input-wacom-0.40.0.ebuild)
1638259809:  ::: completed emerge (13 of 23) x11-drivers/xf86-input-wacom-0.40.0 to /
1638259809:  >>> emerge (14 of 23) x11-drivers/xf86-video-amdgpu-21.0.0 to /
1638259809:  === (14 of 23) Cleaning (x11-drivers/xf86-video-amdgpu-21.0.0::/var/db/repos/gentoo/x11-drivers/xf86-video-amdgpu/xf86-video-amdgpu-21.0.0.ebuild)
1638259809:  === (14 of 23) Compiling/Merging (x11-drivers/xf86-video-amdgpu-21.0.0::/var/db/repos/gentoo/x11-drivers/xf86-video-amdgpu/xf86-video-amdgpu-21.0.0.ebuild)
1638259814:  === (14 of 23) Merging (x11-drivers/xf86-video-amdgpu-21.0.0::/var/db/repos/gentoo/x11-drivers/xf86-video-amdgpu/xf86-video-amdgpu-21.0.0.ebuild)
1638259815:  >>> AUTOCLEAN: x11-drivers/xf86-video-amdgpu:0
1638259815:  === Unmerging... (x11-drivers/xf86-video-amdgpu-21.0.0)
1638259816:  >>> unmerge success: x11-drivers/xf86-video-amdgpu-21.0.0
1638259817:  === (14 of 23) Post-Build Cleaning (x11-drivers/xf86-video-amdgpu-21.0.0::/var/db/repos/gentoo/x11-drivers/xf86-video-amdgpu/xf86-video-amdgpu-21.0.0.ebuild)
1638259817:  ::: completed emerge (14 of 23) x11-drivers/xf86-video-amdgpu-21.0.0 to /
1638259817:  >>> emerge (15 of 23) x11-drivers/xf86-video-ati-19.1.0 to /
1638259817:  === (15 of 23) Cleaning (x11-drivers/xf86-video-ati-19.1.0::/var/db/repos/gentoo/x11-drivers/xf86-video-ati/xf86-video-ati-19.1.0.ebuild)
1638259817:  === (15 of 23) Compiling/Merging (x11-drivers/xf86-video-ati-19.1.0::/var/db/repos/gentoo/x11-drivers/xf86-video-ati/xf86-video-ati-19.1.0.ebuild)
1638259822:  *** Finished. Cleaning up...
1638259822:  *** exiting unsuccessfully with status '1'.
Comment 6 Christian Bricart 2021-11-30 13:33:34 UTC
https://gitlab.freedesktop.org/xorg/xserver/-/commit/ea47af87f692b291a988834c6f14d73a08cb1d75
renamed politically incorrect variable/API names..
Comment 7 Christian Bricart 2021-11-30 13:36:50 UTC
for x11-drivers/xf86-video-nouveau this patch [1] should fix:
https://cgit.freedesktop.org/nouveau/xf86-video-nouveau/commit/?id=e80e73ced69b15662103d0fd6837db4ce6c6eb5b
Comment 8 Christian Bricart 2021-11-30 13:44:44 UTC
as for x11-drivers/xf86-video-ati see bug #737170
Comment 9 Andreas 2021-11-30 14:08:49 UTC
I can confirm.
Is it related with the
xorg-server-21.1.1
update?
Comment 10 Harris Landgarten 2021-11-30 14:38:42 UTC
I can confirm the patch in comment seven allows the build to complete
Comment 12 Larry the Git Cow gentoo-dev 2021-12-01 11:49:44 UTC
The bug has been closed via the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=73c3566d9a4e3fc9775a6158162b89f4a8a96223

commit 73c3566d9a4e3fc9775a6158162b89f4a8a96223
Author:     Sam James <sam@gentoo.org>
AuthorDate: 2021-12-01 11:48:43 +0000
Commit:     Sam James <sam@gentoo.org>
CommitDate: 2021-12-01 11:48:43 +0000

    x11-drivers/xf86-video-nouveau: fix build with newer xorg-server
    
    Closes: https://bugs.gentoo.org/827878
    Signed-off-by: Sam James <sam@gentoo.org>

 ...deo-nouveau-1.0.17-xorg-server-API-rename.patch | 52 ++++++++++++++++++++++
 .../xf86-video-nouveau-1.0.17.ebuild               |  4 ++
 2 files changed, 56 insertions(+)