mirror of
https://git.code.sf.net/p/quake/quake2forge
synced 2024-12-12 13:42:21 +00:00
478 lines
12 KiB
Makefile
478 lines
12 KiB
Makefile
#
|
|
# Quake2 Makefile for Solaris
|
|
#
|
|
# Jan '98 by Zoid <zoid@idsoftware.com>
|
|
#
|
|
|
|
ifneq (,$(findstring i86pc,$(shell uname -m)))
|
|
ARCH=i386
|
|
else
|
|
ARCH=sparc
|
|
endif
|
|
|
|
MOUNT_DIR=/chest/Quake2/code
|
|
|
|
BUILD_DEBUG_DIR=debug$(ARCH)
|
|
BUILD_RELEASE_DIR=release$(ARCH)
|
|
CLIENT_DIR=$(MOUNT_DIR)/client
|
|
SERVER_DIR=$(MOUNT_DIR)/server
|
|
COMMON_DIR=$(MOUNT_DIR)/qcommon
|
|
SOLARIS_DIR=$(MOUNT_DIR)/solaris
|
|
GAME_DIR=$(MOUNT_DIR)/game
|
|
XATRIX_DIR=$(MOUNT_DIR)/xatrix
|
|
CTF_DIR=$(MOUNT_DIR)/game
|
|
NULL_DIR=$(MOUNT_DIR)/null
|
|
|
|
ARCH=i386
|
|
|
|
CC=gcc
|
|
BASE_CFLAGS=-Dstricmp=strcasecmp
|
|
RELEASE_CFLAGS=$(BASE_CFLAGS) -O6 -fomit-frame-pointer -fno-strength-reduce -funroll-loops -fexpensive-optimizations
|
|
DEBUG_CFLAGS=$(BASE_CFLAGS) -g
|
|
LDFLAGS=-ldl -lm -lnsl -lsocket
|
|
|
|
SHLIBEXT=so
|
|
|
|
SHLIBCFLAGS=-fPIC
|
|
SHLIBLDFLAGS=-G
|
|
|
|
DO_CC=$(CC) $(CFLAGS) -o $@ -c $<
|
|
DO_SHLIB_CC=$(CC) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
|
|
|
|
#############################################################################
|
|
# SETUP AND BUILD
|
|
#############################################################################
|
|
|
|
TARGETS=$(BUILDDIR)/quake2 $(BUILDDIR)/game$(ARCH).$(SHLIBEXT)
|
|
|
|
build_debug:
|
|
@-mkdir $(BUILD_DEBUG_DIR) \
|
|
$(BUILD_DEBUG_DIR)/client \
|
|
$(BUILD_DEBUG_DIR)/game
|
|
$(MAKE) targets BUILDDIR=$(BUILD_DEBUG_DIR) CFLAGS="$(DEBUG_CFLAGS)"
|
|
|
|
build_release:
|
|
@-mkdir $(BUILD_RELEASE_DIR) \
|
|
$(BUILD_RELEASE_DIR)/client \
|
|
$(BUILD_RELEASE_DIR)/game
|
|
$(MAKE) targets BUILDDIR=$(BUILD_RELEASE_DIR) CFLAGS="$(RELEASE_CFLAGS)"
|
|
|
|
all: build_debug build_release
|
|
|
|
targets: $(TARGETS)
|
|
|
|
#############################################################################
|
|
# CLIENT/SERVER
|
|
#############################################################################
|
|
|
|
QUAKE2_OBJS = \
|
|
$(BUILDDIR)/client/cl_cin.o \
|
|
$(BUILDDIR)/client/cl_ents.o \
|
|
$(BUILDDIR)/client/cl_fx.o \
|
|
$(BUILDDIR)/client/cl_input.o \
|
|
$(BUILDDIR)/client/cl_inv.o \
|
|
$(BUILDDIR)/client/cl_main.o \
|
|
$(BUILDDIR)/client/cl_parse.o \
|
|
$(BUILDDIR)/client/cl_pred.o \
|
|
$(BUILDDIR)/client/cl_tent.o \
|
|
$(BUILDDIR)/client/cl_scrn.o \
|
|
$(BUILDDIR)/client/cl_view.o \
|
|
$(BUILDDIR)/client/console.o \
|
|
$(BUILDDIR)/client/keys.o \
|
|
$(BUILDDIR)/client/menu.o \
|
|
$(BUILDDIR)/client/qmenu.o \
|
|
$(BUILDDIR)/client/m_flash.o \
|
|
\
|
|
$(BUILDDIR)/client/cmd.o \
|
|
$(BUILDDIR)/client/cmodel.o \
|
|
$(BUILDDIR)/client/common.o \
|
|
$(BUILDDIR)/client/cvar.o \
|
|
$(BUILDDIR)/client/files.o \
|
|
$(BUILDDIR)/client/md4.o \
|
|
$(BUILDDIR)/client/net_chan.o \
|
|
\
|
|
$(BUILDDIR)/client/sv_ccmds.o \
|
|
$(BUILDDIR)/client/sv_ents.o \
|
|
$(BUILDDIR)/client/sv_game.o \
|
|
$(BUILDDIR)/client/sv_init.o \
|
|
$(BUILDDIR)/client/sv_main.o \
|
|
$(BUILDDIR)/client/sv_send.o \
|
|
$(BUILDDIR)/client/sv_user.o \
|
|
$(BUILDDIR)/client/sv_world.o \
|
|
\
|
|
$(BUILDDIR)/client/snd_dma.o \
|
|
$(BUILDDIR)/client/snd_mem.o \
|
|
$(BUILDDIR)/client/snd_mix.o \
|
|
\
|
|
$(BUILDDIR)/client/cd_null.o \
|
|
$(BUILDDIR)/client/q_shsolaris.o \
|
|
$(BUILDDIR)/client/vid_null.o \
|
|
$(BUILDDIR)/client/ref_null.o \
|
|
$(BUILDDIR)/client/in_null.o \
|
|
$(BUILDDIR)/client/snddma_null.o \
|
|
$(BUILDDIR)/client/sys_solaris.o \
|
|
$(BUILDDIR)/client/glob.o \
|
|
$(BUILDDIR)/client/net_udp.o \
|
|
\
|
|
$(BUILDDIR)/client/q_shared.o \
|
|
$(BUILDDIR)/client/pmove.o
|
|
|
|
$(BUILDDIR)/quake2 : $(QUAKE2_OBJS)
|
|
$(CC) $(CFLAGS) -o $@ $(QUAKE2_OBJS) $(LDFLAGS)
|
|
|
|
$(BUILDDIR)/client/cl_cin.o : $(CLIENT_DIR)/cl_cin.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_ents.o : $(CLIENT_DIR)/cl_ents.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_fx.o : $(CLIENT_DIR)/cl_fx.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_input.o : $(CLIENT_DIR)/cl_input.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_inv.o : $(CLIENT_DIR)/cl_inv.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_main.o : $(CLIENT_DIR)/cl_main.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_parse.o : $(CLIENT_DIR)/cl_parse.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_pred.o : $(CLIENT_DIR)/cl_pred.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_tent.o : $(CLIENT_DIR)/cl_tent.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_scrn.o : $(CLIENT_DIR)/cl_scrn.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cl_view.o : $(CLIENT_DIR)/cl_view.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/console.o : $(CLIENT_DIR)/console.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/keys.o : $(CLIENT_DIR)/keys.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/menu.o : $(CLIENT_DIR)/menu.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/qmenu.o : $(CLIENT_DIR)/qmenu.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/m_flash.o : $(GAME_DIR)/m_flash.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cmd.o : $(COMMON_DIR)/cmd.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cmodel.o : $(COMMON_DIR)/cmodel.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/common.o : $(COMMON_DIR)/common.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cvar.o : $(COMMON_DIR)/cvar.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/files.o : $(COMMON_DIR)/files.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/md4.o : $(COMMON_DIR)/md4.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/net_chan.o : $(COMMON_DIR)/net_chan.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/q_shared.o : $(GAME_DIR)/q_shared.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/pmove.o : $(COMMON_DIR)/pmove.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sv_ccmds.o : $(SERVER_DIR)/sv_ccmds.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sv_ents.o : $(SERVER_DIR)/sv_ents.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sv_game.o : $(SERVER_DIR)/sv_game.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sv_init.o : $(SERVER_DIR)/sv_init.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sv_main.o : $(SERVER_DIR)/sv_main.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sv_send.o : $(SERVER_DIR)/sv_send.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sv_user.o : $(SERVER_DIR)/sv_user.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sv_world.o : $(SERVER_DIR)/sv_world.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/cd_null.o : $(NULL_DIR)/cd_null.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/q_shsolaris.o : $(SOLARIS_DIR)/q_shsolaris.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/vid_null.o : $(NULL_DIR)/vid_null.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/ref_null.o : $(NULL_DIR)/ref_null.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/snddma_null.o : $(NULL_DIR)/snddma_null.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/snd_dma.o : $(CLIENT_DIR)/snd_dma.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/snd_mem.o : $(CLIENT_DIR)/snd_mem.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/snd_mix.o : $(CLIENT_DIR)/snd_mix.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/in_null.o : $(NULL_DIR)/in_null.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/sys_solaris.o : $(SOLARIS_DIR)/sys_solaris.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/glob.o : $(SOLARIS_DIR)/glob.c
|
|
$(DO_CC)
|
|
|
|
$(BUILDDIR)/client/net_udp.o : $(SOLARIS_DIR)/net_udp.c
|
|
$(DO_CC)
|
|
|
|
#############################################################################
|
|
# GAME
|
|
#############################################################################
|
|
|
|
GAME_OBJS = \
|
|
$(BUILDDIR)/game/g_ai.o \
|
|
$(BUILDDIR)/game/p_client.o \
|
|
$(BUILDDIR)/game/g_cmds.o \
|
|
$(BUILDDIR)/game/g_svcmds.o \
|
|
$(BUILDDIR)/game/g_combat.o \
|
|
$(BUILDDIR)/game/g_func.o \
|
|
$(BUILDDIR)/game/g_items.o \
|
|
$(BUILDDIR)/game/g_main.o \
|
|
$(BUILDDIR)/game/g_misc.o \
|
|
$(BUILDDIR)/game/g_monster.o \
|
|
$(BUILDDIR)/game/g_phys.o \
|
|
$(BUILDDIR)/game/g_save.o \
|
|
$(BUILDDIR)/game/g_spawn.o \
|
|
$(BUILDDIR)/game/g_target.o \
|
|
$(BUILDDIR)/game/g_trigger.o \
|
|
$(BUILDDIR)/game/g_turret.o \
|
|
$(BUILDDIR)/game/g_utils.o \
|
|
$(BUILDDIR)/game/g_weapon.o \
|
|
$(BUILDDIR)/game/m_actor.o \
|
|
$(BUILDDIR)/game/m_berserk.o \
|
|
$(BUILDDIR)/game/m_boss2.o \
|
|
$(BUILDDIR)/game/m_boss3.o \
|
|
$(BUILDDIR)/game/m_boss31.o \
|
|
$(BUILDDIR)/game/m_boss32.o \
|
|
$(BUILDDIR)/game/m_brain.o \
|
|
$(BUILDDIR)/game/m_chick.o \
|
|
$(BUILDDIR)/game/m_flipper.o \
|
|
$(BUILDDIR)/game/m_float.o \
|
|
$(BUILDDIR)/game/m_flyer.o \
|
|
$(BUILDDIR)/game/m_gladiator.o \
|
|
$(BUILDDIR)/game/m_gunner.o \
|
|
$(BUILDDIR)/game/m_hover.o \
|
|
$(BUILDDIR)/game/m_infantry.o \
|
|
$(BUILDDIR)/game/m_insane.o \
|
|
$(BUILDDIR)/game/m_medic.o \
|
|
$(BUILDDIR)/game/m_move.o \
|
|
$(BUILDDIR)/game/m_mutant.o \
|
|
$(BUILDDIR)/game/m_parasite.o \
|
|
$(BUILDDIR)/game/m_soldier.o \
|
|
$(BUILDDIR)/game/m_supertank.o \
|
|
$(BUILDDIR)/game/m_tank.o \
|
|
$(BUILDDIR)/game/p_hud.o \
|
|
$(BUILDDIR)/game/p_trail.o \
|
|
$(BUILDDIR)/game/p_view.o \
|
|
$(BUILDDIR)/game/p_weapon.o \
|
|
$(BUILDDIR)/game/q_shared.o \
|
|
$(BUILDDIR)/game/m_flash.o \
|
|
$(BUILDDIR)/game/g_so.o
|
|
|
|
$(BUILDDIR)/game$(ARCH).$(SHLIBEXT) : $(GAME_OBJS)
|
|
$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(GAME_OBJS)
|
|
|
|
$(BUILDDIR)/game/g_ai.o : $(GAME_DIR)/g_ai.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/p_client.o : $(GAME_DIR)/p_client.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_cmds.o : $(GAME_DIR)/g_cmds.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_svcmds.o : $(GAME_DIR)/g_svcmds.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_combat.o : $(GAME_DIR)/g_combat.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_func.o : $(GAME_DIR)/g_func.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_items.o : $(GAME_DIR)/g_items.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_main.o : $(GAME_DIR)/g_main.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_misc.o : $(GAME_DIR)/g_misc.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_monster.o : $(GAME_DIR)/g_monster.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_phys.o : $(GAME_DIR)/g_phys.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_save.o : $(GAME_DIR)/g_save.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_spawn.o : $(GAME_DIR)/g_spawn.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_target.o : $(GAME_DIR)/g_target.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_trigger.o : $(GAME_DIR)/g_trigger.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_turret.o : $(GAME_DIR)/g_turret.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_utils.o : $(GAME_DIR)/g_utils.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_weapon.o : $(GAME_DIR)/g_weapon.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_actor.o : $(GAME_DIR)/m_actor.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_berserk.o : $(GAME_DIR)/m_berserk.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_boss2.o : $(GAME_DIR)/m_boss2.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_boss3.o : $(GAME_DIR)/m_boss3.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_boss31.o : $(GAME_DIR)/m_boss31.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_boss32.o : $(GAME_DIR)/m_boss32.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_brain.o : $(GAME_DIR)/m_brain.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_chick.o : $(GAME_DIR)/m_chick.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_flipper.o : $(GAME_DIR)/m_flipper.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_float.o : $(GAME_DIR)/m_float.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_flyer.o : $(GAME_DIR)/m_flyer.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_gladiator.o : $(GAME_DIR)/m_gladiator.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_gunner.o : $(GAME_DIR)/m_gunner.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_hover.o : $(GAME_DIR)/m_hover.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_infantry.o : $(GAME_DIR)/m_infantry.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_insane.o : $(GAME_DIR)/m_insane.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_medic.o : $(GAME_DIR)/m_medic.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_move.o : $(GAME_DIR)/m_move.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_mutant.o : $(GAME_DIR)/m_mutant.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_parasite.o : $(GAME_DIR)/m_parasite.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_soldier.o : $(GAME_DIR)/m_soldier.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_supertank.o : $(GAME_DIR)/m_supertank.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_tank.o : $(GAME_DIR)/m_tank.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/p_hud.o : $(GAME_DIR)/p_hud.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/p_trail.o : $(GAME_DIR)/p_trail.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/p_view.o : $(GAME_DIR)/p_view.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/p_weapon.o : $(GAME_DIR)/p_weapon.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/q_shared.o : $(GAME_DIR)/q_shared.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/m_flash.o : $(GAME_DIR)/m_flash.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
$(BUILDDIR)/game/g_so.o : $(SOLARIS_DIR)/g_so.c
|
|
$(DO_SHLIB_CC)
|
|
|
|
#############################################################################
|
|
# MISC
|
|
#############################################################################
|
|
|
|
clean: clean-debug clean-release
|
|
|
|
clean-debug:
|
|
$(MAKE) clean2 BUILDDIR=$(BUILD_DEBUG_DIR) CFLAGS="$(DEBUG_CFLAGS)"
|
|
|
|
clean-release:
|
|
$(MAKE) clean2 BUILDDIR=$(BUILD_RELEASE_DIR) CFLAGS="$(DEBUG_CFLAGS)"
|
|
|
|
clean2:
|
|
-rm -f $(QUAKE2_OBJS) \
|
|
$(GAME_OBJS) \
|
|
$(REF_SOFT_OBJS) \
|
|
$(REF_SOFT_SVGA_OBJS) \
|
|
$(REF_SOFT_X11_OBJS) \
|
|
$(REF_GL_OBJS)
|
|
|