Skip to content

Commit 52b9cdd

Browse files
authored
Merge branch 'openframeworks:master' into glfw0
2 parents 504df17 + dd0799c commit 52b9cdd

18 files changed

+187
-23
lines changed

.github/workflows/manual-nightly.yml renamed to .github/disabled/manual-nightly.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ jobs:
8080
path: out/manual-mega_artefact.tar.bz2
8181
retention-days: 1
8282
- name: Update Release arm64
83-
uses: softprops/action-gh-release@v2.1.0
84-
with:
83+
uses: softprops/action-gh-release@v2.1.0
84+
with:
8585
token: ${{ secrets.GITHUB_TOKEN }}
8686
tag_name: ${{ env.RELEASE }}
8787
files: ${{ steps.createpackage.outputs.FILES_OUT }}

.github/workflows/nightly-linux64.yml renamed to .github/disabled/nightly-linux64.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ jobs:
9191
path: out/nightly-mega_artefact.tar.bz2
9292
retention-days: 7
9393
- name: Update Release arm64
94-
uses: softprops/action-gh-release@v2.1.0
95-
with:
96-
token: ${{ secrets.GITHUB_TOKEN }}
97-
tag_name: ${{ env.RELEASE }}
98-
files: ${{ steps.createpackage.outputs.FILES_OUT }}
94+
uses: softprops/action-gh-release@v2.1.0
95+
with:
96+
token: ${{ secrets.GITHUB_TOKEN }}
97+
tag_name: ${{ env.RELEASE }}
98+
files: ${{ steps.createpackage.outputs.FILES_OUT }}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# This one was created to make it work whil
2+
3+
name: manual-nightly-ok
4+
5+
on:
6+
workflow_dispatch:
7+
inputs:
8+
release:
9+
description: 'release'
10+
required: true
11+
default: 'latest'
12+
13+
concurrency:
14+
group: ${{ github.workflow }}-${{ github.ref }}
15+
cancel-in-progress: true
16+
17+
env:
18+
ccache: ccache
19+
RELEASE: ${{ github.event.inputs.release }}
20+
21+
jobs:
22+
manual-nightly:
23+
runs-on: ubuntu-24.04
24+
if: github.repository == 'openframeworks/openFrameworks' && github.ref == 'refs/heads/master'
25+
strategy:
26+
matrix:
27+
cfg:
28+
- {target: linux64, libs: 64gcc6}
29+
steps:
30+
- name: Install libunwind
31+
run: sudo apt-get install libunwind-dev
32+
- name: Cache Packages
33+
uses: awalsh128/cache-apt-pkgs-action@latest
34+
with:
35+
packages: aptitude aptitude-common libboost-iostreams1.83.0 libcwidget4 libsigc++-2.0-0v5 libxapian30 fonts-wine{a} libasound2-plugins{a} libcapi20-3t64{a} libosmesa6{a} libpcsclite1{a} libspeexdsp1{a} libwine{a} libxkbregistry0{a} libz-mingw-w64{a} wine{a} wine64 make curl libjack-jackd2-0 libjack-jackd2-dev freeglut3-dev libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile1-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libgtk2.0-dev libopencv-dev libassimp-dev librtaudio-dev gdb libglfw3-dev liburiparser-dev libcurl4-openssl-dev libpugixml-dev libgconf-2-4 libgtk2.0-0 libpoco-dev libxcursor-dev libxi-dev libxinerama-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good
36+
# libunwind-dev wget2
37+
version: 1.0
38+
39+
- uses: actions/checkout@v4
40+
- name: ccache
41+
uses: hendrikmuhs/ccache-action@v1.2.14
42+
with:
43+
key: ${{ matrix.cfg.target }}
44+
- name: update submodules
45+
run: ./scripts/dev/init_submodules.sh
46+
- name: Install dependencies
47+
run: ./scripts/ci/${{matrix.cfg.target}}/install.sh;
48+
- name: Download libs
49+
run: ./scripts/linux/download_libs.sh -a ${{matrix.cfg.libs}};
50+
- name: Create Package
51+
run: scripts/ci/package_builds.sh ${{ github.event.inputs.release }};
52+
id: createpackage
53+
- name: List output directory
54+
run: ls -lah out/
55+
# - name: Test Artefact zip
56+
# run: |
57+
# tar -cjf out/manual-mega_artefact.tar.bz2 -C out $(echo ${{ steps.createpackage.outputs.FILES_OUT }} | tr ' ' '\n' | sed 's|^out/||')
58+
# - name: Upload binaries as Artefact
59+
# uses: actions/upload-artifact@v4
60+
# with:
61+
# name: openFrameworks-all-artefact-${{ env.TARGET }}-${{ matrix.bundle }}
62+
# path: out/manual-mega_artefact.tar.bz2
63+
# retention-days: 1
64+
- name: Update Release
65+
uses: IsaacShelton/update-existing-release@v1.3.4
66+
if: github.repository == 'openframeworks/openFrameworks' && github.ref == 'refs/heads/master'
67+
with:
68+
token: ${{ secrets.GITHUB_TOKEN }}
69+
tag: ${{ github.event.inputs.release }}
70+
release: ${{ github.event.inputs.release }}
71+
prerelease: false
72+
replace: true
73+
files: ${{ steps.createpackage.outputs.FILES_OUT }}

.github/workflows/nightly-ok.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: nightly-linux64
2+
3+
on:
4+
schedule:
5+
- cron: "0 6 * * *"
6+
workflow_dispatch:
7+
inputs:
8+
release:
9+
description: 'release'
10+
required: true
11+
default: 'latest'
12+
env:
13+
ccache: ccache
14+
15+
jobs:
16+
build-nightly-ok:
17+
runs-on: ubuntu-24.04
18+
if: github.repository == 'openframeworks/openFrameworks' && github.ref == 'refs/heads/master'
19+
strategy:
20+
matrix:
21+
cfg:
22+
- {target: linux64, libs: 64gcc6}
23+
env:
24+
TARGET: ${{matrix.cfg.target}}
25+
steps:
26+
- name: Install libunwind
27+
run: sudo apt-get install libunwind-dev
28+
- name: Cache Packages
29+
uses: awalsh128/cache-apt-pkgs-action@latest
30+
with:
31+
packages: aptitude aptitude-common libboost-iostreams1.83.0 libcwidget4 libsigc++-2.0-0v5 libxapian30 fonts-wine{a} libasound2-plugins{a} libcapi20-3t64{a} libosmesa6{a} libpcsclite1{a} libspeexdsp1{a} libwine{a} libxkbregistry0{a} libz-mingw-w64{a} wine{a} wine64 make curl libjack-jackd2-0 libjack-jackd2-dev freeglut3-dev libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile1-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libgtk2.0-dev libopencv-dev libassimp-dev librtaudio-dev gdb libglfw3-dev liburiparser-dev libcurl4-openssl-dev libpugixml-dev libgconf-2-4 libgtk2.0-0 libpoco-dev libxcursor-dev libxi-dev libxinerama-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good
32+
# libunwind-dev wget2
33+
version: 1.0
34+
35+
- uses: actions/checkout@v4
36+
- name: ccache
37+
uses: hendrikmuhs/ccache-action@v1.2.14
38+
with:
39+
key: ${{ matrix.cfg.target }}
40+
- name: Install dependencies
41+
run: ./scripts/ci/$TARGET/install.sh;
42+
- name: update submodules
43+
run: ./scripts/dev/init_submodules.sh
44+
- name: Download libs
45+
run: ./scripts/linux/download_libs.sh -a ${{matrix.cfg.libs}};
46+
- name: Create Package
47+
run: scripts/ci/package_builds.sh ${{ github.event.inputs.release }};
48+
id: createpackage
49+
- name: List output directory
50+
run: ls -lah out/
51+
- name: Update Release
52+
uses: IsaacShelton/update-existing-release@v1.3.4
53+
with:
54+
token: ${{ secrets.GITHUB_TOKEN }}
55+
tag: nightly
56+
release: nightly
57+
prerelease: false
58+
replace: true
59+
files: ${{ steps.createpackage.outputs.FILES_OUT }}

.github/workflows/of.yml

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@ concurrency:
1818

1919
env:
2020
ccache: ccache
21+
RELEASE: latest
2122

2223
jobs:
2324
build-emscripten:
2425
runs-on: ubuntu-24.04
2526
strategy:
26-
matrix:
27-
cfg:
28-
- {target: emscripten}
27+
matrix:
28+
cfg:
29+
- {target: emscripten}
2930
env:
30-
TARGET: ${{matrix.cfg.target}}
31+
TARGET: ${{matrix.cfg.target}}
3132
steps:
3233
- uses: actions/checkout@v4
3334
- name: Docker Step
@@ -166,9 +167,9 @@ jobs:
166167
- { libs: armv7l, multistrap_arch: armhf, suffix: arm-linux-gnueabihf, alladdons: 1 }
167168
- { libs: aarch64, multistrap_arch: arm64, suffix: aarch64-linux-gnu, alladdons: 1 }
168169
env:
169-
ARCH: ${{matrix.cfg.libs}}
170-
MULTISTRAP_ARCH: ${{matrix.cfg.multistrap_arch}}
171-
ALLADDONSEXAMPLE: ${{matrix.cfg.alladdons}}
170+
ARCH: ${{matrix.cfg.libs}}
171+
MULTISTRAP_ARCH: ${{matrix.cfg.multistrap_arch}}
172+
ALLADDONSEXAMPLE: ${{matrix.cfg.alladdons}}
172173
steps:
173174
- name: Cache Packages
174175
uses: awalsh128/cache-apt-pkgs-action@latest
@@ -211,7 +212,7 @@ jobs:
211212
- {target: ios, libs: macos}
212213
- {target: tvos, libs: macos}
213214
env:
214-
TARGET: ${{matrix.cfg.target}}
215+
TARGET: ${{matrix.cfg.target}}
215216
steps:
216217
- uses: actions/checkout@v4
217218
- name: ccache
@@ -251,7 +252,7 @@ jobs:
251252
cfg:
252253
- {target: linux64, libs: 64gcc6}
253254
env:
254-
TARGET: ${{matrix.cfg.target}}
255+
TARGET: ${{matrix.cfg.target}}
255256
steps:
256257
- name: Remove Old lib-unwind
257258
run: if [ "$TARGET" = "linux64" ]; then
@@ -303,7 +304,7 @@ jobs:
303304
# cfg:
304305
# - {target: linux64, libs: 64gcc6}
305306
# env:
306-
# TARGET: ${{matrix.cfg.target}}
307+
# TARGET: ${{matrix.cfg.target}}
307308
# steps:
308309
# - name: Remove Old lib-unwind
309310
# run: if [ "$TARGET" = "linux64" ]; then

libs/openFrameworks/utils/ofRandomDistributions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "ofRandomEngine.h"
55
#include "ofColor.h"
66
#include <iostream>
7+
#include <optional>
78

89
#ifdef TARGET_WIN32
910
#include <iso646.h>

libs/openFrameworksCompiled/project/vs/openframeworksLib.vcxproj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@
9595
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">true</BuildStlModules>
9696
<EnableModules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</EnableModules>
9797
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BuildStlModules>
98+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">OldStyle</DebugInformationFormat>
99+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">OldStyle</DebugInformationFormat>
100+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">OldStyle</DebugInformationFormat>
98101
</ClCompile>
99102
<Lib>
100103
<AdditionalLibraryDirectories>
@@ -131,6 +134,9 @@
131134
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">true</BuildStlModules>
132135
<EnableModules Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</EnableModules>
133136
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</BuildStlModules>
137+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Release|x64'">OldStyle</DebugInformationFormat>
138+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">OldStyle</DebugInformationFormat>
139+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">OldStyle</DebugInformationFormat>
134140
</ClCompile>
135141
<Lib>
136142
<AdditionalLibraryDirectories>
@@ -329,4 +335,4 @@
329335
<None Include="..\..\..\openFrameworks\graphics\ofPolyline.inl" />
330336
</ItemGroup>
331337
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
332-
</Project>
338+
</Project>

scripts/dev/create_package.sh

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,17 @@ function createPackage {
425425
echo "Creating projectGenerator"
426426
mkdir -p $HOME/.tmp
427427
export TMPDIR=$HOME/.tmp
428+
429+
# FIXME: Temporary fix for latest projectGenerator
430+
# there is no "latest" release so we use nightly. feel free to remove this when PG/Apothecary releases are in sync
431+
if [ "$RELEASE" = "latest" ]; then
432+
RELEASE="nightly"
433+
fi
434+
435+
428436
if [ "$pkg_platform" = "vs" ] || [ "$pkg_platform" = "msys2" ]; then
437+
# -t $RELEASE
429438

430-
-t $RELEASE
431439
# use prepackaged gui
432440
downloader https://github.com/openframeworks/projectGenerator/releases/download/$RELEASE/projectGenerator-vs-gui.zip 2> /dev/null
433441
mkdir -p projectGenerator

scripts/dev/download_libs.sh

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ OVERWRITE=1
77
SILENT_ARGS=""
88
NO_SSL=""
99
BLEEDING_EDGE=0
10-
DL_VERSION=2.6.1
10+
DL_VERSION=2.6.2
1111
TAG=""
1212

1313
printHelp(){
@@ -43,11 +43,14 @@ download(){
4343
# downloader ci.openframeworks.cc/libs/$1 $SILENT_ARGS
4444

4545
COMMAND=" "
46-
REPO="nightly"
46+
4747
if [[ $BLEEDING_EDGE = 1 ]] ; then
4848
REPO="latest"
49+
else
50+
REPO="nightly"
4951
fi
5052

53+
5154
if [[ $TAG != "" ]] ; then
5255
REPO="$TAG"
5356
fi
@@ -220,7 +223,8 @@ if [ "$PLATFORM" == "linux" ] && [ "$ARCH" == "64" ]; then
220223
fi
221224
fi
222225

223-
echo " openFrameworks download_libs.sh v$DL_VERSION"
226+
# echo " openFrameworks download_libs.sh v$DL_VERSION"
227+
echo " openFrameworks download_libs.sh v$DL_VERSION args=$@"
224228

225229
if [ "$PLATFORM" == "msys2" ]; then
226230
if [[ $BLEEDING_EDGE = 1 ]] ; then

scripts/linux/ubuntu/install_dependencies.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ else
192192
fi
193193

194194

195-
PACKAGES="make nlohmann-json3-dev libssl3 libcurl4 brotli libcurl4-openssl-dev libjack-jackd2-0 libjack-jackd2-dev freeglut3-dev libasound2-dev libxmu-dev libxxf86vm-dev g++${CXX_VER} libgl1-mesa-dev${XTAG} libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile1-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev ${LIB_GTK_DEV} libopencv-dev libassimp-dev librtaudio-dev libgstreamer${GSTREAMER_VERSION}-dev libgstreamer-plugins-base${GSTREAMER_VERSION}-dev ${GSTREAMER_FFMPEG} gstreamer${GSTREAMER_VERSION}-pulseaudio gstreamer${GSTREAMER_VERSION}-x gstreamer${GSTREAMER_VERSION}-plugins-bad gstreamer${GSTREAMER_VERSION}-alsa gstreamer${GSTREAMER_VERSION}-plugins-base gstreamer${GSTREAMER_VERSION}-plugins-good gdb ${GLFW_PKG} liburiparser-dev libpugixml-dev libgtk2.0-0 libpoco-dev libxcursor-dev libxi-dev libxinerama-dev libxml2-dev libgconf-2-4"
195+
PACKAGES="make nlohmann-json3-dev libssl3 libcurl4 brotli libcurl4-openssl-dev libjack-jackd2-0 libjack-jackd2-dev freeglut3-dev libasound2-dev libxmu-dev libxxf86vm-dev g++${CXX_VER} libgl1-mesa-dev${XTAG} libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile1-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev ${LIB_GTK_DEV} libopencv-dev libassimp-dev librtaudio-dev libgstreamer${GSTREAMER_VERSION}-dev libgstreamer-plugins-base${GSTREAMER_VERSION}-dev ${GSTREAMER_FFMPEG} gstreamer${GSTREAMER_VERSION}-pulseaudio gstreamer${GSTREAMER_VERSION}-x gstreamer${GSTREAMER_VERSION}-plugins-bad gstreamer${GSTREAMER_VERSION}-alsa gstreamer${GSTREAMER_VERSION}-plugins-base gstreamer${GSTREAMER_VERSION}-plugins-good gdb ${GLFW_PKG} liburiparser-dev libpugixml-dev libgtk2.0-0 libpoco-dev libxcursor-dev libxi-dev libxinerama-dev libxml2-dev"
196196
# libgconf-2-4 libboost-filesystem${BOOST_VER}-dev
197197

198198
echo "installing OF dependencies"
@@ -223,6 +223,12 @@ fi
223223
apt-get -y -qq install ${PACKAGES}
224224
installPackages ${PACKAGES}
225225

226+
# Install libgconf-2-4 only if its availble
227+
if apt-cache show libgconf-2-4 &>/dev/null; then
228+
echo "Package libgconf-2-4 is available. Installing..."
229+
installPackages libgconf-2-4
230+
fi
231+
226232
if [[ $MAJOR_VERSION -lt 18 ]]; then
227233
cp $ROOT/../extra/poco_config.mk $ROOT/../../../addons/ofxPoco/addon_config.mk
228234
fi

scripts/templates/vs/emptyExample.vcxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,12 @@
185185
<ClCompile>
186186
<LanguageStandard_C Condition="'$(Configuration)|$(Platform)'=='Release|x64'">stdc17</LanguageStandard_C>
187187
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</BuildStlModules>
188+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Release|x64'">OldStyle</DebugInformationFormat>
188189
</ClCompile>
189190
<ClCompile>
190191
<LanguageStandard_C Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">stdc17</LanguageStandard_C>
191192
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BuildStlModules>
193+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">OldStyle</DebugInformationFormat>
192194
</ClCompile>
193195
</ItemDefinitionGroup>
194196
<ItemDefinitionGroup Condition="'$(Platform)'=='ARM64'">
@@ -200,10 +202,12 @@
200202
<ClCompile>
201203
<LanguageStandard_C Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">stdc17</LanguageStandard_C>
202204
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</BuildStlModules>
205+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">OldStyle</DebugInformationFormat>
203206
</ClCompile>
204207
<ClCompile>
205208
<LanguageStandard_C Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">stdc17</LanguageStandard_C>
206209
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</BuildStlModules>
210+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">OldStyle</DebugInformationFormat>
207211
</ClCompile>
208212
</ItemDefinitionGroup>
209213
<ItemDefinitionGroup Condition="'$(Platform)'=='ARM64EC'">
@@ -215,10 +219,12 @@
215219
<ClCompile>
216220
<LanguageStandard_C Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">stdc17</LanguageStandard_C>
217221
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">true</BuildStlModules>
222+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">OldStyle</DebugInformationFormat>
218223
</ClCompile>
219224
<ClCompile>
220225
<LanguageStandard_C Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">stdc17</LanguageStandard_C>
221226
<BuildStlModules Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">true</BuildStlModules>
227+
<DebugInformationFormat Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">OldStyle</DebugInformationFormat>
222228
</ClCompile>
223229
</ItemDefinitionGroup>
224230
<ItemGroup>

0 commit comments

Comments
 (0)