Major makefile rework for tests directory:

* differentiated between driver and test environment
  + added utils/Makefile.fpc, under the driver environment
  * units/Makefile.fpc is under the test environment
  * Makefile controls everything
  * plus lot of smaller changes
This commit is contained in:
olle 2004-04-27 23:13:49 +00:00
parent 34a324b6be
commit bdaab01714
6 changed files with 1202 additions and 462 deletions

View File

@ -401,32 +401,6 @@ endif
else
CROSSBINDIR=
endif
ifeq ($(OS_SOURCE),linux)
ifndef GCCLIBDIR
ifeq ($(CPU_TARGET),i386)
ifneq ($(findstring x86_64,$(shell uname -a)),)
ifeq ($(BINUTILSPREFIX),)
GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
else
GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`)
endif
else
GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`)
endif
else
GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`)
endif
endif
ifndef OTHERLIBDIR
OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
endif
endif
ifdef inUnix
ifeq ($(OS_SOURCE),netbsd)
OTHERLIBDIR+=/usr/pkg/lib
endif
export GCCLIBDIR OTHERLIB
endif
BATCHEXT=.bat
LOADEREXT=.as
EXEEXT=.exe
@ -940,37 +914,31 @@ override REQUIRE_PACKAGES=rtl
ifeq ($(OS_TARGET),linux)
ifeq ($(CPU_TARGET),i386)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_MYSQL=1
endif
endif
ifeq ($(OS_TARGET),linux)
ifeq ($(CPU_TARGET),m68k)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_MYSQL=1
endif
endif
ifeq ($(OS_TARGET),linux)
ifeq ($(CPU_TARGET),powerpc)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_MYSQL=1
endif
endif
ifeq ($(OS_TARGET),linux)
ifeq ($(CPU_TARGET),sparc)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_MYSQL=1
endif
endif
ifeq ($(OS_TARGET),linux)
ifeq ($(CPU_TARGET),x86_64)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_MYSQL=1
endif
endif
ifeq ($(OS_TARGET),linux)
ifeq ($(CPU_TARGET),arm)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_MYSQL=1
endif
endif
ifeq ($(OS_TARGET),go32v2)
@ -981,7 +949,6 @@ endif
ifeq ($(OS_TARGET),win32)
ifeq ($(CPU_TARGET),i386)
REQUIRE_PACKAGES_RTL=1
REQUIRE_PACKAGES_MYSQL=1
endif
endif
ifeq ($(OS_TARGET),os2)
@ -1120,32 +1087,6 @@ ifdef UNITDIR_RTL
override COMPILER_UNITDIR+=$(UNITDIR_RTL)
endif
endif
ifdef REQUIRE_PACKAGES_MYSQL
PACKAGEDIR_MYSQL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /mysql/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_MYSQL),)
ifneq ($(wildcard $(PACKAGEDIR_MYSQL)/$(OS_TARGET)),)
UNITDIR_MYSQL=$(PACKAGEDIR_MYSQL)/$(OS_TARGET)
else
UNITDIR_MYSQL=$(PACKAGEDIR_MYSQL)
endif
ifdef CHECKDEPEND
$(PACKAGEDIR_MYSQL)/$(FPCMADE):
$(MAKE) -C $(PACKAGEDIR_MYSQL) $(FPCMADE)
override ALLDEPENDENCIES+=$(PACKAGEDIR_MYSQL)/$(FPCMADE)
endif
else
PACKAGEDIR_MYSQL=
UNITDIR_MYSQL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /mysql/Package.fpc,$(UNITSDIR)))))
ifneq ($(UNITDIR_MYSQL),)
UNITDIR_MYSQL:=$(firstword $(UNITDIR_MYSQL))
else
UNITDIR_MYSQL=
endif
endif
ifdef UNITDIR_MYSQL
override COMPILER_UNITDIR+=$(UNITDIR_MYSQL)
endif
endif
ifndef NOCPUDEF
override FPCOPTDEF=$(CPU_TARGET)
endif
@ -1253,12 +1194,6 @@ ifeq ($(FPC_VERSION),1.0.6)
override FPCOPTDEF+=HASUNIX
endif
endif
ifdef GCCLIBDIR
override FPCOPT+=-Fl$(GCCLIBDIR)
endif
ifdef OTHERLIBDIR
override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
endif
ifdef OPT
override FPCOPT+=$(OPT)
endif
@ -1454,25 +1389,39 @@ zipinstall:
zipsourceinstall:
zipexampleinstall:
zipdistinstall:
cleanall:
makefiles: fpc_makefiles
.PHONY: debug smart release examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall cleanall makefiles
.PHONY: debug smart release examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall makefiles
ifneq ($(wildcard fpcmake.loc),)
include fpcmake.loc
endif
TESTSUBDIRS=cg cg/cdecl units/system units/dos units/crt units/objects units/strings units/sysutils units/math
TESTDIRS:=test $(addprefix test/,$(TESTSUBDIRS))
ifeq ($(OS_TARGET),linux)
INUNIX=1
ifndef TEST_FPC
TEST_FPC=$(wildcard $(dir $(CURDIR))compiler/$(notdir $(FPC)))
ifeq ($(TEST_FPC), )
$(error "*** ERROR: TEST_FPC is missing ***")
endif
ifeq ($(OS_TARGET),freebsd)
INUNIX=1
endif
ifeq ($(OS_TARGET),darwin)
INUNIX=1
ifndef TEST_OPT
TEST_OPT=
endif
ifdef INUNIX
NOGRAPH=1
ifndef TEST_CPU_TARGET
TEST_CPU_TARGET=$(CPU_TARGET)
endif
ifndef TEST_OS_TARGET
TEST_OS_TARGET=$(OS_TARGET)
endif
ifndef TEST_CCOMPILER
ifeq ($(CPU_TARGET),$(TEST_CPU_TARGET))
ifeq ($(OS_TARGET),$(TEST_OS_TARGET))
TEST_CCOMPILER:=$(strip $(wildcard $(addsuffix /gcc$(SRCEXEEXT),$(SEARCHPATH))))
ifneq ($(TEST_CCOMPILER),)
TEST_CCOMPILER:=$(firstword $(TEST_CCOMPILER))
endif
endif
endif
endif
ifndef TEST_FPC_VERSION
TEST_FPC_COMPILERINFO:=$(shell $(TEST_FPC) -iVSPTPSOTO)
TEST_FPC_VERSION:=$(word 1,$(TEST_FPC_COMPILERINFO))
endif
ifndef FAILLIST
export FAILLIST:=faillist
@ -1483,54 +1432,55 @@ endif
ifndef LOG
export LOG:=log
endif
ifndef CCOMPILER
CCOMPILER:=$(strip $(wildcard $(addsuffix /gcc$(SRCEXEEXT),$(SEARCHPATH))))
ifneq ($(CCOMPILER),)
CCOMPILER:=$(firstword $(CCOMPILER))
TESTSUBDIRS=cg cg/cdecl units/system units/dos units/crt units/objects units/strings units/sysutils units/math
TESTDIRS:=test $(addprefix test/,$(TESTSUBDIRS))
ifneq ($(findstring $(TEST_OS_TARGET),$(UNIXs)),)
INUNIX=1
endif
ifdef INUNIX
NOGRAPH=1
endif
.PHONY: utils units copyfiles testprep
utils:
$(MAKE) -C utils
ifeq ($(USESQL),YES)
ifndef DBDIGEST
DBDIGEST=utils/dbdigest
endif
endif
units : units/$(FPCMADE)
units/$(FPCMADE):
$(MAKE) -C units
ifeq ($(OS_TARGET),win32)
$(FPC) -n -Fuunits -FEunits utils/win32err.pp
ifndef DIGEST
DIGEST=utils/digest
endif
ifndef DOTEST
DOTEST=./dotest$(EXEEXT)
DOTESTDEP+=$(DOTEST)
$(DOTEST) : units utils/dotest.pp utils/redir.pp utils/teststr.pp
$(FPC) -n -Fuunits -FE. utils/dotest.pp
$(FPC) -n -Fuunits -FE. utils/fail.pp
$(FPC) -n -Fuunits -FE. utils/testfail.pp
DOTEST=utils/dotest
endif
ifneq ($(wildcard ./testfail$(SRCEXEEXT)),)
TESTCOMSPECRES:=$(shell ./testfail$(SRCEXEEXT))
ifneq ($(wildcard utils/testfail$(SRCEXEEXT)),)
TESTCOMSPECRES:=$(shell utils/testfail$(SRCEXEEXT))
else
$(warning "*** WARNING testfail did not run ***")
endif
ifneq ($(TESTCOMSPECRES),)
NOCOMSPEC=1
endif
ifeq ($(USESQL),YES)
ifndef DBDIGEST
DBDIGEST=./dbdigest$(EXEEXT)
DIGESTDEP+=$(DBDIGEST)
$(DBDIGEST) : units utils/dbdigest.pp utils/teststr.pp utils/testu.pp utils/dbtests.pp
$(FPC) -n $(OPT) -Fuunits -Fu../packages/base/mysql -FE. utils/dbdigest.pp
units:
$(MAKE) -C units FPC=$(TEST_FPC) CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) \
OPT="$(TEST_OPT)" CCOMPILER=$(TEST_CCOMPILER)
copyfiles:
$(COPY) test/cg/obj/$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)/ctest.o test/cg
$(COPY) test/units/system/test*.txt .
testprep: testprep-stamp.$(TEST_OS_TARGET)
testprep-stamp.$(TEST_OS_TARGET): utils units copyfiles FORCE
$(ECHO) $(DATE) > testprep-stamp.$(TEST_OS_TARGET)
ifneq ($(TEST_FPC),ppc386$(EXEEXT))
ifeq ($(findstring -c$(TEST_FPC),$(DOTESTOPT)),)
override DOTESTOPT+=-c$(TEST_FPC)
endif
endif
ifndef DIGEST
DIGEST=./digest$(EXEEXT)
DIGESTDEP+=$(DIGEST)
$(DIGEST) : units utils/digest.pp utils/teststr.pp utils/testu.pp
$(FPC) -n -Fuunits -FE. utils/digest.pp
endif
ifndef DIGESTVER
DIGESTVER=$(FPC_VERSION)
endif
testcheck: units allpreps $(DOTESTDEP)
ifneq ($(FPC),ppc386$(EXEEXT))
ifeq ($(findstring -c$(FPC),$(DOTESTOPT)),)
override DOTESTOPT+=-c$(FPC)
ifneq ($(OS_TARGET),$(TEST_OS_TARGET))
override DOTESTOPT+=-Y-T$(TEST_OS_TARGET)
endif
ifdef TEST_OPT
override DOTESTOPT+=$(addprefix -Y, $(TEST_OPT))
endif
ifdef GRAPH
override DOTESTOPT+=-g
@ -1545,64 +1495,58 @@ ifdef NOCOMSPEC
override DOTESTOPT+=-x
endif
DIRS=webtbs webtbf tbs tbf $(TESTDIRS)
%.log : %.pp $(DOTESTDEP)
%.log : %.pp
$(DOTEST) $(DOTESTOPT) $<
%.elg : %.pp $(DOTESTDEP)
%.elg : %.pp
$(DOTEST) $(DOTESTOPT) -e $<
.PHONY: allpreps
ifdef CCOMPILER
test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o : test/cg/obj/ctest.c
-$(CCOMPILER) -c -o test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o test/cg/obj/ctest.c
endif
allpreps: allpreps-stamp.$(OS_TARGET)
allpreps-stamp.$(OS_TARGET):
$(FPC) -FE. -Fuunits test/cg/ptest.pp
$(COPY) test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o test/cg
$(COPY) test/units/system/test*.txt .
$(ECHO) $(DATE) > allpreps-stamp.$(OS_TARGET)
.PHONY: alltbs alltbf allwebtbs allwebtbf alltest alltests
alltbs : testcheck $(patsubst %.pp,%.log,$(wildcard tbs/t*.pp))
alltbf : testcheck $(patsubst %.pp,%.log,$(wildcard tbf/t*.pp))
allwebtbs : testcheck $(patsubst %.pp,%.log,$(wildcard webtbs/t*.pp))
allwebtbf : testcheck $(patsubst %.pp,%.log,$(wildcard webtbf/t*.pp))
alltest : testcheck $(patsubst %.pp,%.log,$(wildcard $(addsuffix /t*.pp,$(TESTDIRS))))
alltbs : testprep $(patsubst %.pp,%.log,$(wildcard tbs/t*.pp))
alltbf : testprep $(patsubst %.pp,%.log,$(wildcard tbf/t*.pp))
allwebtbs : testprep $(patsubst %.pp,%.log,$(wildcard webtbs/t*.pp))
allwebtbf : testprep $(patsubst %.pp,%.log,$(wildcard webtbf/t*.pp))
alltest : testprep $(patsubst %.pp,%.log,$(wildcard $(addsuffix /t*.pp,$(TESTDIRS))))
alltests: alltest alltbs alltbf allwebtbs allwebtbf
.PHONY: allexectbs allexectbf allexecwebtbs allexecwebtbf allexectest allexectests
allexectbs : testcheck $(patsubst %.pp,%.elg,$(wildcard tbs/t*.pp))
allexectbf : testcheck $(patsubst %.pp,%.elg,$(wildcard tbf/t*.pp))
allexecwebtbs : testcheck $(patsubst %.pp,%.elg,$(wildcard webtbs/t*.pp))
allexecwebtbf : testcheck $(patsubst %.pp,%.elg,$(wildcard webtbf/t*.pp))
allexectest : testcheck $(patsubst %.pp,%.elg,$(wildcard $(addsuffix /t*.pp,$(TESTDIRS))))
allexectbs : testprep $(patsubst %.pp,%.elg,$(wildcard tbs/t*.pp))
allexectbf : testprep $(patsubst %.pp,%.elg,$(wildcard tbf/t*.pp))
allexecwebtbs : testprep $(patsubst %.pp,%.elg,$(wildcard webtbs/t*.pp))
allexecwebtbf : testprep $(patsubst %.pp,%.elg,$(wildcard webtbf/t*.pp))
allexectest : testprep $(patsubst %.pp,%.elg,$(wildcard $(addsuffix /t*.pp,$(TESTDIRS))))
allexectests: allexectest allexectbs allexectbf allexecwebtbs allexecwebtbf
.PHONY: clean distclean
clean:
-rm -f $(addsuffix /*$(PPUEXT),$(DIRS))
-rm -f $(addsuffix /*$(OEXT),$(DIRS))
-rm -f $(addsuffix /*.rst,$(DIRS))
-rm -f $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
-rm -f $(addsuffix /*.log,$(DIRS))
-rm -f $(addsuffix /*.elg,$(DIRS))
-rm -f $(addsuffix /*$(ASMEXT),$(DIRS))
.PHONY: clean distclean clean_test
clean_test:
-$(DEL) $(addsuffix /*$(PPUEXT),$(DIRS))
-$(DEL) $(addsuffix /*$(OEXT),$(DIRS))
-$(DEL) $(addsuffix /*.rst,$(DIRS))
-$(DEL) $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
-$(DEL) $(addsuffix /*.log,$(DIRS))
-$(DEL) $(addsuffix /*.elg,$(DIRS))
-$(DEL) $(addsuffix /*$(ASMEXT),$(DIRS))
-$(DEL) $(addsuffix /*_ppas$(BATCHEXT),$(DIRS))
ifeq ($(EXEEXT),)
-rm -f $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
-$(DEL) $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
else
-rm -f $(addsuffix /*$(EXEEXT),$(DIRS))
-$(DEL) $(addsuffix /*$(EXEEXT),$(DIRS))
endif
ifdef DEBUGSYMEXT
-rm -f $(addsuffix /*$(DEBUGSYMEXT),$(DIRS))
-$(DEL) $(addsuffix /*$(DEBUGSYMEXT),$(DIRS))
endif
-rm -f test*.txt *.tmp *$(SHAREDLIBEXT) *$(OEXT) *$(PPUEXT) core
-rm -f $(LOG) $(LONGLOG) $(FAILLIST)
-rm -f ptest.* ppas.sh ppas.bat gmon.out allpreps-stamp.$(OS_TARGET)
-rm -f $(addsuffix /*_ppas,$(DIRS))
$(MAKE) -C units clean
-$(DEL) test*.txt *.tmp *$(SHAREDLIBEXT) *$(OEXT) *$(PPUEXT) core
-$(DEL) $(LOG) $(LONGLOG) $(FAILLIST)
-$(DEL) ppas$(SRCBATCHEXT) gmon.out testprep-stamp.*
-$(DEL) *_ppas$(BATCHEXT)
clean:
$(MAKE) clean_test CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET)
$(MAKE) -C units clean CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET)
distclean: clean
-rm -f dotest$(EXEEXT) digest$(EXEEXT) dbdigest$(EXEEXT)
$(MAKE) -C utils clean
cleanall: clean
$(MAKE) -C utils cleanall
.PHONY: all full rundigest dailytest onlyknown onlygraph onlyinteractive
rundigest : $(DIGESTDEP)
rundigest : utils
-$(DIGEST)
ifeq ($(USESQL),YES)
-$(DBDIGEST) -v $(DIGESTVER) -o $(OS_TARGET) -c $(CPU_TARGET) $(DBDIGESTOPT)
-$(DBDIGEST) -v $(TEST_FPC_VERSION) -o $(TEST_OS_TARGET) -c $(TEST_CPU_TARGET) $(DBDIGESTOPT)
endif
all : allexectests
full : clean allexectests rundigest
@ -1613,20 +1557,28 @@ onlygraph :
onlyinteractive :
$(MAKE) "DOTESTOPT= $(DOTESTOPT) -i-"
info :
@echo This Makefile allows to test the compiler
@echo
@echo Targets:
@echo " all - continue all tests"
@echo " full - clean and run all tests"
@echo " dailytest - run full and save results"
@echo " in files having the date as extension"
@echo " onlyknown - run only known bugs"
@echo " onlygraph - run only graph tests"
@echo " onlyinteractive - run only interactive tests"
@echo Done using FPC=$(FPC)
@$(ECHO) This Makefile allows to test the compiler
@$(ECHO)
@$(ECHO) Targets:
@$(ECHO) " all - continue all tests"
@$(ECHO) " full - clean and run all tests"
@$(ECHO) " dailytest - run full and save results"
@$(ECHO) " in files having the date as extension"
@$(ECHO) " onlyknown - run only known bugs"
@$(ECHO) " onlygraph - run only graph tests"
@$(ECHO) " onlyinteractive - run only interactive tests"
@$(ECHO) " rundigest - compute and print test statistics"
@$(ECHO)
@$(ECHO) Driver environment:
@$(ECHO) " $(OS_TARGET)-$(CPU_TARGET)"
@$(ECHO) " compiler: $(FPC) ver: $(FPC_VERSION)"
ifdef COMSPEC
@echo And using COMSPEC=$(COMSPEC)
@$(ECHO) " and using COMSPEC=$(COMSPEC)"
endif
@$(ECHO)
@$(ECHO) Test environment:
@$(ECHO) " $(TEST_OS_TARGET)-$(TEST_CPU_TARGET)"
@$(ECHO) " compiler: $(TEST_FPC) ver: $(TEST_FPC_VERSION)"
override DATESUFFIX:=$(shell $(DATE) +%Y.%m.%d)
ifneq ($(wildcard log.$(DATESUFFIX)),)
override DATESUFFIX=$(shell $(DATE) +%Y.%m.%d.%H.%M)
@ -1644,4 +1596,4 @@ ifdef LASTDATESUFFIX
-diff -u digest.$(LASTDATESUFFIX) digest.$(DATESUFFIX) > diffdigest.$(DATESUFFIX)
-diff -u faillist.$(LASTDATESUFFIX) faillist.$(DATESUFFIX) > difflist.$(DATESUFFIX)
endif
@echo $(DATESUFFIX) > lastdate.txt
@$(ECHO) $(DATESUFFIX) > lastdate.txt

View File

@ -1,8 +1,6 @@
#
# Makefile.fpc for Free Pascal Tests directory
#
# $Id$
#
[install]
fpcpackage=y
@ -11,36 +9,56 @@ fpcpackage=y
fpcdir=..
rule=allexectests
[require]
packages_win32=mysql
packages_linux=mysql
[rules]
# Subdirs available in the test subdir
TESTSUBDIRS=cg cg/cdecl units/system units/dos units/crt units/objects units/strings units/sysutils units/math
# All full dirnames in the test/ dir including the subdir self
TESTDIRS:=test $(addprefix test/,$(TESTSUBDIRS))
# Unix like OS ?
ifeq ($(OS_TARGET),linux)
INUNIX=1
endif
ifeq ($(OS_TARGET),freebsd)
INUNIX=1
endif
ifeq ($(OS_TARGET),darwin)
INUNIX=1
endif
# For linux by default no graph tests
ifdef INUNIX
NOGRAPH=1
endif
################################
# Test environment setup
#
# Tools
ifndef TEST_FPC
#Use development version of the compiler
TEST_FPC=$(wildcard $(dir $(CURDIR))compiler/$(notdir $(FPC)))
ifeq ($(TEST_FPC), )
$(error "*** ERROR: TEST_FPC is missing ***")
endif
endif
#Defaults *not* to OPT
ifndef TEST_OPT
TEST_OPT=
endif
ifndef TEST_CPU_TARGET
TEST_CPU_TARGET=$(CPU_TARGET)
endif
ifndef TEST_OS_TARGET
TEST_OS_TARGET=$(OS_TARGET)
endif
ifndef TEST_CCOMPILER
ifeq ($(CPU_TARGET),$(TEST_CPU_TARGET))
ifeq ($(OS_TARGET),$(TEST_OS_TARGET))
TEST_CCOMPILER:=$(strip $(wildcard $(addsuffix /gcc$(SRCEXEEXT),$(SEARCHPATH))))
ifneq ($(TEST_CCOMPILER),)
TEST_CCOMPILER:=$(firstword $(TEST_CCOMPILER))
endif
endif
endif
endif
# FPC version (code copied from fpcmake.ini)
ifndef TEST_FPC_VERSION
# For 1.1 and up we can use a single compiler call to retrieve
# all needed information
TEST_FPC_COMPILERINFO:=$(shell $(TEST_FPC) -iVSPTPSOTO)
TEST_FPC_VERSION:=$(word 1,$(TEST_FPC_COMPILERINFO))
endif
################################
# Misc
#
ifndef FAILLIST
@ -55,74 +73,102 @@ ifndef LOG
export LOG:=log
endif
ifndef CCOMPILER
CCOMPILER:=$(strip $(wildcard $(addsuffix /gcc$(SRCEXEEXT),$(SEARCHPATH))))
ifneq ($(CCOMPILER),)
CCOMPILER:=$(firstword $(CCOMPILER))
# Subdirs available in the test subdir
TESTSUBDIRS=cg cg/cdecl units/system units/dos units/crt units/objects units/strings units/sysutils units/math
# All full dirnames in the test/ dir including the subdir self
TESTDIRS:=test $(addprefix test/,$(TESTSUBDIRS))
# Unix like OS ?
ifneq ($(findstring $(TEST_OS_TARGET),$(UNIXs)),)
INUNIX=1
endif
# For unixes by default no graph tests
ifdef INUNIX
NOGRAPH=1
endif
.PHONY: utils units copyfiles testprep
################################
# Utilities
#
utils:
$(MAKE) -C utils
ifeq ($(USESQL),YES)
ifndef DBDIGEST
DBDIGEST=utils/dbdigest
endif
endif
units : units/$(FPCMADE)
units/$(FPCMADE):
$(MAKE) -C units
ifeq ($(OS_TARGET),win32)
$(FPC) -n -Fuunits -FEunits utils/win32err.pp
ifndef DIGEST
DIGEST=utils/digest
endif
ifndef DOTEST
DOTEST=./dotest$(EXEEXT)
DOTESTDEP+=$(DOTEST)
$(DOTEST) : units utils/dotest.pp utils/redir.pp utils/teststr.pp
$(FPC) -n -Fuunits -FE. utils/dotest.pp
$(FPC) -n -Fuunits -FE. utils/fail.pp
$(FPC) -n -Fuunits -FE. utils/testfail.pp
DOTEST=utils/dotest
endif
ifneq ($(wildcard ./testfail$(SRCEXEEXT)),)
TESTCOMSPECRES:=$(shell ./testfail$(SRCEXEEXT))
ifneq ($(wildcard utils/testfail$(SRCEXEEXT)),)
#BUG: This will not run first time for a fresh tests dir:
TESTCOMSPECRES:=$(shell utils/testfail$(SRCEXEEXT))
else
$(warning "*** WARNING testfail did not run ***")
endif
ifneq ($(TESTCOMSPECRES),)
NOCOMSPEC=1
endif
################################
# Units
#
# Digest program
units:
$(MAKE) -C units FPC=$(TEST_FPC) CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET) \
OPT="$(TEST_OPT)" CCOMPILER=$(TEST_CCOMPILER)
################################
# Copy test environment dependent files ctest.o to test/cg etc
#
ifeq ($(USESQL),YES)
ifndef DBDIGEST
DBDIGEST=./dbdigest$(EXEEXT)
DIGESTDEP+=$(DBDIGEST)
$(DBDIGEST) : units utils/dbdigest.pp utils/teststr.pp utils/testu.pp utils/dbtests.pp
$(FPC) -n $(OPT) -Fuunits -Fu../packages/base/mysql -FE. utils/dbdigest.pp
endif
endif
ifndef DIGEST
DIGEST=./digest$(EXEEXT)
DIGESTDEP+=$(DIGEST)
$(DIGEST) : units utils/digest.pp utils/teststr.pp utils/testu.pp
$(FPC) -n -Fuunits -FE. utils/digest.pp
endif
ifndef DIGESTVER
DIGESTVER=$(FPC_VERSION)
endif
testcheck: units allpreps $(DOTESTDEP)
copyfiles:
$(COPY) test/cg/obj/$(TEST_OS_TARGET)/$(TEST_CPU_TARGET)/ctest.o test/cg
$(COPY) test/units/system/test*.txt .
################################
# Preparation for tests
#
testprep: testprep-stamp.$(TEST_OS_TARGET)
testprep-stamp.$(TEST_OS_TARGET): utils units copyfiles FORCE
$(ECHO) $(DATE) > testprep-stamp.$(TEST_OS_TARGET)
################################
# Dotest options
#
ifneq ($(FPC),ppc386$(EXEEXT))
ifeq ($(findstring -c$(FPC),$(DOTESTOPT)),)
override DOTESTOPT+=-c$(FPC)
ifneq ($(TEST_FPC),ppc386$(EXEEXT))
ifeq ($(findstring -c$(TEST_FPC),$(DOTESTOPT)),)
override DOTESTOPT+=-c$(TEST_FPC)
endif
endif
ifneq ($(OS_TARGET),$(TEST_OS_TARGET))
override DOTESTOPT+=-Y-T$(TEST_OS_TARGET)
endif
ifdef TEST_OPT
# handles several options as well
override DOTESTOPT+=$(addprefix -Y, $(TEST_OPT))
endif
ifdef GRAPH
override DOTESTOPT+=-g
endif
@ -140,112 +186,101 @@ override DOTESTOPT+=-x
endif
#
# Test run targets
################################
# Run tests
#
DIRS=webtbs webtbf tbs tbf $(TESTDIRS)
%.log : %.pp $(DOTESTDEP)
%.log : %.pp
$(DOTEST) $(DOTESTOPT) $<
%.elg : %.pp $(DOTESTDEP)
%.elg : %.pp
$(DOTEST) $(DOTESTOPT) -e $<
#
# Preparations for tests:
#
# 1. Copy target dependent ctest.o to test/cg
#
.PHONY: allpreps
ifdef CCOMPILER
test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o : test/cg/obj/ctest.c
-$(CCOMPILER) -c -o test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o test/cg/obj/ctest.c
endif
allpreps: allpreps-stamp.$(OS_TARGET)
allpreps-stamp.$(OS_TARGET):
$(FPC) -FE. -Fuunits test/cg/ptest.pp
$(COPY) test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o test/cg
$(COPY) test/units/system/test*.txt .
$(ECHO) $(DATE) > allpreps-stamp.$(OS_TARGET)
#
################################
# Compile tests
#
.PHONY: alltbs alltbf allwebtbs allwebtbf alltest alltests
alltbs : testcheck $(patsubst %.pp,%.log,$(wildcard tbs/t*.pp))
alltbf : testcheck $(patsubst %.pp,%.log,$(wildcard tbf/t*.pp))
alltbs : testprep $(patsubst %.pp,%.log,$(wildcard tbs/t*.pp))
alltbf : testprep $(patsubst %.pp,%.log,$(wildcard tbf/t*.pp))
allwebtbs : testcheck $(patsubst %.pp,%.log,$(wildcard webtbs/t*.pp))
allwebtbf : testcheck $(patsubst %.pp,%.log,$(wildcard webtbf/t*.pp))
allwebtbs : testprep $(patsubst %.pp,%.log,$(wildcard webtbs/t*.pp))
allwebtbf : testprep $(patsubst %.pp,%.log,$(wildcard webtbf/t*.pp))
alltest : testcheck $(patsubst %.pp,%.log,$(wildcard $(addsuffix /t*.pp,$(TESTDIRS))))
alltest : testprep $(patsubst %.pp,%.log,$(wildcard $(addsuffix /t*.pp,$(TESTDIRS))))
alltests: alltest alltbs alltbf allwebtbs allwebtbf
#
################################
# Compile and Run tests
#
.PHONY: allexectbs allexectbf allexecwebtbs allexecwebtbf allexectest allexectests
allexectbs : testcheck $(patsubst %.pp,%.elg,$(wildcard tbs/t*.pp))
allexectbf : testcheck $(patsubst %.pp,%.elg,$(wildcard tbf/t*.pp))
allexectbs : testprep $(patsubst %.pp,%.elg,$(wildcard tbs/t*.pp))
allexectbf : testprep $(patsubst %.pp,%.elg,$(wildcard tbf/t*.pp))
allexecwebtbs : testcheck $(patsubst %.pp,%.elg,$(wildcard webtbs/t*.pp))
allexecwebtbf : testcheck $(patsubst %.pp,%.elg,$(wildcard webtbf/t*.pp))
allexecwebtbs : testprep $(patsubst %.pp,%.elg,$(wildcard webtbs/t*.pp))
allexecwebtbf : testprep $(patsubst %.pp,%.elg,$(wildcard webtbf/t*.pp))
allexectest : testcheck $(patsubst %.pp,%.elg,$(wildcard $(addsuffix /t*.pp,$(TESTDIRS))))
allexectest : testprep $(patsubst %.pp,%.elg,$(wildcard $(addsuffix /t*.pp,$(TESTDIRS))))
allexectests: allexectest allexectbs allexectbf allexecwebtbs allexecwebtbf
#
################################
# Clean
#
.PHONY: clean distclean
.PHONY: clean distclean clean_test
clean:
-rm -f $(addsuffix /*$(PPUEXT),$(DIRS))
-rm -f $(addsuffix /*$(OEXT),$(DIRS))
-rm -f $(addsuffix /*.rst,$(DIRS))
-rm -f $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
-rm -f $(addsuffix /*.log,$(DIRS))
-rm -f $(addsuffix /*.elg,$(DIRS))
-rm -f $(addsuffix /*$(ASMEXT),$(DIRS))
clean_test:
-$(DEL) $(addsuffix /*$(PPUEXT),$(DIRS))
-$(DEL) $(addsuffix /*$(OEXT),$(DIRS))
-$(DEL) $(addsuffix /*.rst,$(DIRS))
-$(DEL) $(addsuffix /*$(SHAREDLIBEXT),$(DIRS))
-$(DEL) $(addsuffix /*.log,$(DIRS))
-$(DEL) $(addsuffix /*.elg,$(DIRS))
-$(DEL) $(addsuffix /*$(ASMEXT),$(DIRS))
-$(DEL) $(addsuffix /*_ppas$(BATCHEXT),$(DIRS))
ifeq ($(EXEEXT),)
-rm -f $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
-$(DEL) $(wildcard $(patsubst %.pp,%$(EXEEXT),$(wildcard $(addsuffix /t*.pp,$(DIRS)))))
else
-rm -f $(addsuffix /*$(EXEEXT),$(DIRS))
-$(DEL) $(addsuffix /*$(EXEEXT),$(DIRS))
endif
ifdef DEBUGSYMEXT
-rm -f $(addsuffix /*$(DEBUGSYMEXT),$(DIRS))
-$(DEL) $(addsuffix /*$(DEBUGSYMEXT),$(DIRS))
endif
-rm -f test*.txt *.tmp *$(SHAREDLIBEXT) *$(OEXT) *$(PPUEXT) core
-rm -f $(LOG) $(LONGLOG) $(FAILLIST)
-rm -f ptest.* ppas.sh ppas.bat gmon.out allpreps-stamp.$(OS_TARGET)
-rm -f $(addsuffix /*_ppas,$(DIRS))
$(MAKE) -C units clean
-$(DEL) test*.txt *.tmp *$(SHAREDLIBEXT) *$(OEXT) *$(PPUEXT) core
-$(DEL) $(LOG) $(LONGLOG) $(FAILLIST)
-$(DEL) ppas$(SRCBATCHEXT) gmon.out testprep-stamp.*
# Needed when link on target:
-$(DEL) *_ppas$(BATCHEXT)
clean:
$(MAKE) clean_test CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET)
$(MAKE) -C units clean CPU_TARGET=$(TEST_CPU_TARGET) OS_TARGET=$(TEST_OS_TARGET)
distclean: clean
-rm -f dotest$(EXEEXT) digest$(EXEEXT) dbdigest$(EXEEXT)
$(MAKE) -C utils clean
#
cleanall: clean
$(MAKE) -C utils cleanall
################################
# Main rules
#
.PHONY: all full rundigest dailytest onlyknown onlygraph onlyinteractive
rundigest : $(DIGESTDEP)
rundigest : utils
-$(DIGEST)
ifeq ($(USESQL),YES)
-$(DBDIGEST) -v $(DIGESTVER) -o $(OS_TARGET) -c $(CPU_TARGET) $(DBDIGESTOPT)
-$(DBDIGEST) -v $(TEST_FPC_VERSION) -o $(TEST_OS_TARGET) -c $(TEST_CPU_TARGET) $(DBDIGESTOPT)
endif
all : allexectests
@ -262,20 +297,28 @@ onlyinteractive :
$(MAKE) "DOTESTOPT= $(DOTESTOPT) -i-"
info :
@echo This Makefile allows to test the compiler
@echo
@echo Targets:
@echo " all - continue all tests"
@echo " full - clean and run all tests"
@echo " dailytest - run full and save results"
@echo " in files having the date as extension"
@echo " onlyknown - run only known bugs"
@echo " onlygraph - run only graph tests"
@echo " onlyinteractive - run only interactive tests"
@echo Done using FPC=$(FPC)
@$(ECHO) This Makefile allows to test the compiler
@$(ECHO)
@$(ECHO) Targets:
@$(ECHO) " all - continue all tests"
@$(ECHO) " full - clean and run all tests"
@$(ECHO) " dailytest - run full and save results"
@$(ECHO) " in files having the date as extension"
@$(ECHO) " onlyknown - run only known bugs"
@$(ECHO) " onlygraph - run only graph tests"
@$(ECHO) " onlyinteractive - run only interactive tests"
@$(ECHO) " rundigest - compute and print test statistics"
@$(ECHO)
@$(ECHO) Driver environment:
@$(ECHO) " $(OS_TARGET)-$(CPU_TARGET)"
@$(ECHO) " compiler: $(FPC) ver: $(FPC_VERSION)"
ifdef COMSPEC
@echo And using COMSPEC=$(COMSPEC)
@$(ECHO) " and using COMSPEC=$(COMSPEC)"
endif
@$(ECHO)
@$(ECHO) Test environment:
@$(ECHO) " $(TEST_OS_TARGET)-$(TEST_CPU_TARGET)"
@$(ECHO) " compiler: $(TEST_FPC) ver: $(TEST_FPC_VERSION)"
override DATESUFFIX:=$(shell $(DATE) +%Y.%m.%d)
@ -287,6 +330,7 @@ ifneq ($(wildcard lastdate.txt),)
LASTDATESUFFIX:=$(shell cat lastdate.txt)
endif
dailytest : full
$(COPY) faillist faillist.$(DATESUFFIX)
$(COPY) log log.$(DATESUFFIX)
@ -297,11 +341,4 @@ ifdef LASTDATESUFFIX
-diff -u digest.$(LASTDATESUFFIX) digest.$(DATESUFFIX) > diffdigest.$(DATESUFFIX)
-diff -u faillist.$(LASTDATESUFFIX) faillist.$(DATESUFFIX) > difflist.$(DATESUFFIX)
endif
@echo $(DATESUFFIX) > lastdate.txt
#
# $Log$
# Revision 1.55 2004-04-25 07:18:49 florian
# * mmap for x86-64 fixed
#
#
@$(ECHO) $(DATESUFFIX) > lastdate.txt

View File

@ -213,7 +213,7 @@ else
UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
endif
PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
override TARGET_UNITS+=erroru
override CLEAN_UNITS+=erroru win32err ptest
override INSTALL_FPCPACKAGE=y
ifdef REQUIRE_UNITSDIR
override UNITSDIR+=$(REQUIRE_UNITSDIR)
@ -1217,117 +1217,10 @@ ifeq ($(FULL_SOURCE),$(FULL_TARGET))
EXECPPAS:=@$(PPAS)
endif
endif
.PHONY: fpc_units
ifdef TARGET_UNITS
override ALLTARGET+=fpc_units
override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
endif
fpc_units: $(UNITPPUFILES)
ifdef TARGET_RSTS
override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
override CLEANRSTFILES+=$(RSTFILES)
endif
.PHONY: fpc_all fpc_smart fpc_debug fpc_release
$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
@$(ECHOREDIR) Compiled > $(FPCMADE)
fpc_all: $(FPCMADE)
fpc_smart:
$(MAKE) all LINKSMART=1 CREATESMART=1
fpc_debug:
$(MAKE) all DEBUG=1
fpc_release:
$(MAKE) all RELEASE=1
.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .dpr .pp .rc .res
%$(PPUEXT): %.pp
$(COMPILER) $<
$(EXECPPAS)
%$(PPUEXT): %.pas
$(COMPILER) $<
$(EXECPPAS)
%$(EXEEXT): %.pp
$(COMPILER) $<
$(EXECPPAS)
%$(EXEEXT): %.pas
$(COMPILER) $<
$(EXECPPAS)
%$(EXEEXT): %.dpr
$(COMPILER) $<
$(EXECPPAS)
%.res: %.rc
windres -i $< -o $@
vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
ifdef INSTALL_UNITS
override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
endif
ifdef INSTALL_BUILDUNIT
override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
endif
ifdef INSTALLPPUFILES
override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES)))
override INSTALL_CREATEPACKAGEFPC=1
endif
ifdef INSTALLEXEFILES
override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
endif
fpc_install: all $(INSTALLTARGET)
ifdef INSTALLEXEFILES
$(MKDIR) $(INSTALL_BINDIR)
ifdef UPXPROG
-$(UPXPROG) $(INSTALLEXEFILES)
endif
$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
endif
ifdef INSTALL_CREATEPACKAGEFPC
ifdef FPCMAKE
ifdef PACKAGE_VERSION
ifneq ($(wildcard Makefile.fpc),)
$(FPCMAKE) -p -T$(OS_TARGET) Makefile.fpc
$(MKDIR) $(INSTALL_UNITDIR)
$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
endif
endif
endif
endif
ifdef INSTALLPPUFILES
$(MKDIR) $(INSTALL_UNITDIR)
$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
ifneq ($(INSTALLPPULINKFILES),)
$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
endif
ifneq ($(wildcard $(LIB_FULLNAME)),)
$(MKDIR) $(INSTALL_LIBDIR)
$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
ifdef inUnix
ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
endif
endif
endif
ifdef INSTALL_FILES
$(MKDIR) $(INSTALL_DATADIR)
$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
endif
fpc_sourceinstall: distclean
$(MKDIR) $(INSTALL_SOURCEDIR)
$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
ifdef HASEXAMPLES
$(MKDIR) $(INSTALL_EXAMPLEDIR)
endif
ifdef EXAMPLESOURCEFILES
$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
endif
ifdef TARGET_EXAMPLEDIRS
$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
endif
.PHONY: fpc_clean fpc_cleanall fpc_distclean
ifdef EXEFILES
override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
@ -1484,15 +1377,14 @@ endif
fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
fpc_makefiles: fpc_makefile fpc_makefile_dirs
all: fpc_all
debug: fpc_debug
smart: fpc_smart
release: fpc_release
debug:
smart:
release:
examples:
shared:
install: fpc_install
sourceinstall: fpc_sourceinstall
exampleinstall: fpc_exampleinstall
install:
sourceinstall:
exampleinstall:
distinstall:
zipinstall:
zipsourceinstall:
@ -1502,39 +1394,70 @@ distclean: fpc_distclean
cleanall: fpc_cleanall
info: fpc_info
makefiles: fpc_makefiles
.PHONY: all debug smart release examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
.PHONY: debug smart release examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
ifneq ($(wildcard fpcmake.loc),)
include fpcmake.loc
endif
ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
FCL=fcl
endif
.PHONY: rtl $(FCL) extra all clean cleanrtlfcl clean_ctest
DUMMYINSTALLDIR=$(BASEDIR)/tmp
INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)
.PHONY: rtl clean $(FCL)
ifndef USEUNITDIR
rtl:
rtl-stamp:
$(MAKE) -C ../../rtl all "OPT=$(OPT) -n"
$(MAKE) -C ../../rtl install $(INSTALLOPT)
$(ECHO) Compiled > rtl-stamp
ifdef FCL
fcl:
fcl-stamp:
$(MAKE) -C ../../packages/base all "OPT=$(OPT) -n"
$(MAKE) -C ../../fcl all "OPT=$(OPT) -n"
$(MAKE) -C ../../fcl install $(INSTALLOPT)
$(ECHO) Compiled > fcl-stamp
endif
clean : cleanall
cleanrtlfcl : cleanall
$(DELTREE) $(DUMMYINSTALLDIR)
-$(DEL) rtl-stamp fcl-stamp
else
rtl:
rtl-stamp:
-$(COPY) $(USEUNITDIR)/*$(PPUEXT) .
-$(COPY) $(USEUNITDIR)/*$(OEXT) .
-$(COPY) $(USEUNITDIR)/*$(ASMEXT) .
-$(COPY) $(USEUNITDIR)/*_ppas .
$(ECHO) Copied > $(FPCMADE)
-$(COPY) $(USEUNITDIR)/*_ppas$(BATCHEXT) .
$(ECHO) Copied > rtl-stamp
ifdef FCL
fcl: rtl
fcl-stamp: rtl-stamp
$(ECHO) Copied > fcl-stamp
endif
clean : cleanall
$(DELTREE) $(DUMMYINSTALLDIR)
cleanrtlfcl :
-$(DEL) *$(PPUEXT)
-$(DEL) *$(OEXT)
-$(DEL) *$(ASMEXT)
-$(DEL) *_ppas$(BATCHEXT)
-$(DEL) rtl-stamp fcl-stamp
endif
erroru$(PPUEXT): erroru.pp rtl $(FCL)
rtl : rtl-stamp
ifdef FCL
fcl : fcl-stamp
endif
erroru$(PPUEXT) : erroru.pp
$(FPC) -n -Fu. -T$(OS_TARGET) $(OPT) erroru.pp
ptest$(PPUEXT) : ../test/cg/ptest.pp
$(FPC) -n -Fu. -T$(OS_TARGET) $(OPT) -FE. ../test/cg/ptest.pp
ifeq ($(OS_TARGET),win32)
win32err$(PPUEXT) : win32err.pp
$(FPC) -n -Fu. -T$(OS_TARGET) $(OPT) win32err.pp
endif
ifdef CCOMPILER
../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o : ../test/cg/obj/ctest.c
$(CCOMPILER) -c -o ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o ../test/cg/obj/ctest.c
endif
extra : erroru$(PPUEXT) ptest$(PPUEXT) ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o
ifeq ($(OS_TARGET),win32)
extra : win32err$(PPUEXT)
endif
all : rtl $(FCL) extra
clean : cleanrtlfcl fpc_clean
clean_ctest :
-$(DEL) ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o

View File

@ -1,18 +1,18 @@
#
# Makefile.fpc to create and group units needed for
# tests for all targets
# Makefile.fpc for Free Pascal units, which participates in the tests
#
[target]
units=erroru
[install]
fpcpackage=y
[clean]
units = erroru win32err ptest
[default]
fpcdir=../..
[rules]
# Only 1.1 has Classes in the RTL
@ -20,46 +20,102 @@ ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
FCL=fcl
endif
.PHONY: rtl $(FCL) extra all clean cleanrtlfcl clean_ctest
#############################
# RTL and FCL
#
DUMMYINSTALLDIR=$(BASEDIR)/tmp
INSTALLOPT=INSTALL_PREFIX=$(DUMMYINSTALLDIR) INSTALL_UNITDIR=$(BASEDIR)
.PHONY: rtl clean $(FCL)
ifndef USEUNITDIR
rtl:
rtl-stamp:
$(MAKE) -C ../../rtl all "OPT=$(OPT) -n"
$(MAKE) -C ../../rtl install $(INSTALLOPT)
$(ECHO) Compiled > rtl-stamp
ifdef FCL
fcl:
fcl-stamp:
$(MAKE) -C ../../packages/base all "OPT=$(OPT) -n"
$(MAKE) -C ../../fcl all "OPT=$(OPT) -n"
$(MAKE) -C ../../fcl install $(INSTALLOPT)
$(ECHO) Compiled > fcl-stamp
endif
clean : cleanall
cleanrtlfcl : cleanall
# $(MAKE) -C ../../rtl clean
# $(MAKE) -C ../../fcl clean
$(DELTREE) $(DUMMYINSTALLDIR)
-$(DEL) rtl-stamp fcl-stamp
else
rtl:
rtl-stamp:
# Just copying everything doesn't work, because then the Makefile will be overwritten
-$(COPY) $(USEUNITDIR)/*$(PPUEXT) .
-$(COPY) $(USEUNITDIR)/*$(OEXT) .
-$(COPY) $(USEUNITDIR)/*$(ASMEXT) .
-$(COPY) $(USEUNITDIR)/*_ppas .
$(ECHO) Copied > $(FPCMADE)
-$(COPY) $(USEUNITDIR)/*_ppas$(BATCHEXT) .
$(ECHO) Copied > rtl-stamp
ifdef FCL
fcl: rtl
fcl-stamp: rtl-stamp
$(ECHO) Copied > fcl-stamp
endif
clean : cleanall
$(DELTREE) $(DUMMYINSTALLDIR)
cleanrtlfcl :
-$(DEL) *$(PPUEXT)
-$(DEL) *$(OEXT)
-$(DEL) *$(ASMEXT)
-$(DEL) *_ppas$(BATCHEXT)
-$(DEL) rtl-stamp fcl-stamp
endif
erroru$(PPUEXT): erroru.pp rtl $(FCL)
rtl : rtl-stamp
ifdef FCL
fcl : fcl-stamp
endif
#############################
# Extra units
#
erroru$(PPUEXT) : erroru.pp
$(FPC) -n -Fu. -T$(OS_TARGET) $(OPT) erroru.pp
ptest$(PPUEXT) : ../test/cg/ptest.pp
$(FPC) -n -Fu. -T$(OS_TARGET) $(OPT) -FE. ../test/cg/ptest.pp
ifeq ($(OS_TARGET),win32)
win32err$(PPUEXT) : win32err.pp
$(FPC) -n -Fu. -T$(OS_TARGET) $(OPT) win32err.pp
endif
ifdef CCOMPILER
../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o : ../test/cg/obj/ctest.c
$(CCOMPILER) -c -o ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o ../test/cg/obj/ctest.c
endif
extra : erroru$(PPUEXT) ptest$(PPUEXT) ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o
ifeq ($(OS_TARGET),win32)
extra : win32err$(PPUEXT)
endif
#############################
# Main rules
#
all : rtl $(FCL) extra
clean : cleanrtlfcl fpc_clean
clean_ctest :
-$(DEL) ../test/cg/obj/$(OS_TARGET)/$(CPU_TARGET)/ctest.o

743
tests/utils/Makefile Normal file
View File

@ -0,0 +1,743 @@
(This file must be converted with BinHex 4.0)
:!*!1Ll-!!!%H&k!M#L-J4'pZ*h3JC@4TG#`JG'KTFb"QD@aP)'Pc)'GPEQ9bBA4
PC#"LH5"'8%00B@YP)&CPFR0TEfiJ-5ia)&Xb-$!d,c!d,c)aA3SM#Q4PCQ&eE(3
k)'&XE!T038Y&4NP-494"8NG&9&-pE'PZGAJJCfmc-RBb)(GTEM-b)'pc-L"QFQ9
PBR0N)'*PEh-JEQ9dBR0N)'&YD@GK)'&dBA*T)(0eEQpc)(&ZH#"ZCA4hBA*P)'p
`C@jLFf3JGf4[FhJJF'&XE@pc)'eKBfpc)'4KFRGTEL"PEAJJGf&dBfpY#N*64(-
J25"QFQ9PBR0N)'jPG'*cC#"[F'9ZBR0N)'4KFRGTEJT96NPBFb!p)'aTER9i)#3
S3P0%FbNJFh9ZEh-JF@ji#NC28N0&1JSZ8%K26PNk)%C28N0&#QpfCA*bD@4P)&"
"9%Jk253SFh9LFh3JA#`[,#3S8%&85#NT#QPQEQ9a)#JN+'CTEQ4cG(*TEQFJC'&
bGfPZ,#3S6e08@9"&+5NX+3TTEP9ZDAJp-5!MC'&bGfPZ#P0&39*$5&""9%Jk253
SCQPXG'9b,@peG#!Z,#3SFh9LFh3J1L`J,#3S8%&85#NT+3TPE(0P#QPQCA%J+#3
SCQPZC(0dFQPZCb!l,#3S8%&85#NT,#N+D@j9EQPi26%+8d9"8N0)8%&85$Sp*#K
QD@adCA)YEh9d)#iX*#KcG@*cG#!k,#!X*#K3394)+5NT#Q9XFf8+8d9"8N0)8%&
85$Sp*#KcG@*cG#!l,#!X*#K3394)+5N+C@jND@B+C@jND@B+8d9"8N0)8%&85#X
p*#K`BA4cG@*cG#!P,b`P,#3SFh9LFh3JA#`[,#3SC'Pb)#3S68&,45Q3"!T39d3
k253SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0eCQCTH#![F(GN,Q9iC5`N+&0&39*
$5&""9%JTN!3+D@CPF5!S*#K39d3T,#N+8&G%1MdN+(0dFQP`)#3SGfPXC'0KFQ3
J*#KKC'4cG@CQDAJJ,h"hC#`N+&0&39*$5&""9%JTN!3+D@CPF5!S*#K39d3T,#N
+*#KPFR*[FL"CEh8JEQ9PC#"dD'8J4dj9)(9dD@ac)("KBfYKCf8JG'mJGA0P)(4
SDA-J6@&VC@CTE'8T#Q9XFf8+8&G%1MdN+'CTFR0dGfpbC#!N+&"A4#NT#P053d9
B489B9$d+C@jND@B+C@acC3T39d3k253SCQPbFh4hEh*N)#3S8&G%+5N+8e*$49K
&49K825jPH'8+C@jND@B+D@CZC'9Q)'PZ9@jTH!TTCQ9a)#JN+%p6+5aAD@jNEhG
cAdj8+3TTEPGTENj826%+C@acC3TTCQ4PCL"28c*I8dK&6%`+D@j28c)p-3TPEQ4
TCJTPEQ4TCJTPE(0P#QPQEQ9a)#JN+'CTEQ4cG(*TEQFJBhPRC(*TGQ8X*#K3394
)+5NX+3TTEN0jCeGTEMda#Q9ZC'PQ#Q9ZC'PQ#QPQC'9Q)'PZ9@jTH!T68N0#394
$5%9B9$dZFfJ+C@acC3TTCQ4PCL"TENp6-JT68N0#394$5%9B9$dZBfeN#Q9XFf8
+8e*$3N&83dK&@&3p,Q*KG!TPEQ4TCJTPEQ4TCJTTCQ4PCL"TEP9ZDAJ+8%&85&0
&8$d[#Q9XFf8+8%&85&0&8$Sp*#KcG@*cG#![,&`X,bN+D@CNC@BJD@j$H@GAD@i
+8%&85&0&8$d[#Q9ZC'PQ#Q9ZC'PQ#QPQC'9Q)&"A4!T#390&4%P51MdN+(0eBR0
d)&`X,b`N+(0SC@aX)#3S8&G%+5NT#QPQC'9Q)'PZ3hPR9fPZ#QPQEQ9a)#JN+'C
TEQ4cG(*TEQFJ,f0jCf4bDACP,b`N+%*"8d9%59)T+5`T#N*"8d916d4*8MSp*#K
`BA4cG@*cG#![BhPRC(*TGQ8P,#8X*#K#390&4%P5+5N+3N&6484559C&1MdN+'C
TFR0dGfpbC#!N+(0eBR0d)#mX)#`N+%*"8d916d4*8LNT+3T#390&4%P51MdN+(0
eBR0d)#pMH@GNFQPfC5mN+%*"8d9%8NP@45N[,#3S3N&6484559C&+6S[,#3S3N&
6484*8LNT#Q9ZC'PQ#Q9ZC'PQ#Q9XFf8+3N&6484*8MdZ#Q9ZC'PQ#QPQC'9Q)'P
Z6e-b#QPQEQ4PCL"&3dK2#N9$5%mk253SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0
eCQCTH#![Cf9MD'mN+&053d9B489B9#NX*#K648&53dK3394)+C!%#QPQCA%J+#3
S480)6bNX+3T&3dK21MdN+(0dFQP`)#3SGfPXC'0KFQ3J*#KKC'4cG@CQDAJJ,f9
MD'mN+&053d9B489B9#NX*#K648&53dK3394)+C!%#QPQCA%J+#3S480)6bNX+3T
&3dK22@9MD'm+C@acC3T&3dK21MdN+'CTFR0dGfpbC#!N+%9$5%mT+3TPEQ4TCJT
PE(0P#N9$5%mk253SCQPbFh4hEh*N)#3S480)6bNT#Q9ZC'PQ#Q9ZC'PQ#Q9iF'p
bG#"&3dK2#Q9ZC'PQ#QpfCA*bD@4P)%4&4N&96&4I4P"$4%P525iZ,biZ#QPQEQ4
PCL"'8%-+D@CNC@BJ8&!+4P"$253S8&!T#Q9ZC'PQ#Q9ZC'PQ#QPQEQ4PCL"'8%-
+4P"$8&*24cSp*#KcG(*TF#!N+(GTE'4MBA*N)#3SB@4NFh9QCQPi)#pQF'-N+&0
53d9B489B9#NX*#K648&53dK3394)+C!%#QPQEQ9a)#JN+%C33e"56dFT,#N+4P"
$8&*24cSp*#KQDA*cG(G[FQ3J*#K'8%038Np(+5N+4P"$1MdN+(0SC@aX)#3S4P"
$8&*24bNJ,9"#+3TTCQjPF5!S*#KQD@jNFh4bD@jR)%9bFQpb,#3S4P"$+5NX+3T
[GQ9bFQPNC5"'8%-pF("M-cJf#Q9ZC'PQ#Q9XFf8+EhCPFR*TC'8J4P"$2A"`Bc-
i0JTPEQ4TCJTPEQ4TCJT[GQ9bFQPNC5"'8%-k253SFh9LFh3J*#K68N0&@%9&@&3
T,#`N+%C33bNT#QpfCA*bD@4P)%C33cSp*#KcG@*cG#"F,#mX*#K'8%-T+53S8e*
$49K&49K8+3TTCQjNC@BJ4P"$AeC&8P0*6di+4P"$Ad0269"*6%9558j'6cSp*#K
cD'9XE#!N+%C33bNJ,@P@8e"88&029%mT#NC33ep@49*658p11MdN+(G[FQ3J-5`
N+%C33ep$6de358a&8NP14NmT+3TPEQ4TCJTPH("[FR3J4P"$)%C33ep@49*658p
1)%C33ep$6de358a&8NP14Nm+G@jPH("[FR3J3dK&3dY%49"&6N3J38a-4%9348j
%48j$5896#QPQEQ4PCL"$8&9I9%&54d98#QPQC'9Q)%0399p839*(494I4%9'399
-9!T$8&9I9%&54d98253S3e"9Ae4"8NG&9&p%48C"98a8+3TPEQ4TCJTPEQ4TCJT
TCQjNC@BJ6e0I9%&54d98#QPQC'9Q)%p6Ae4"8NG&9&p%48C"98a8#Np6Ae4"8NG
&9$dN+%p6Ae4"8NG&9&p%48C"98a8+3TPEQ4TCJTPEQ4TCJTTCQjPF5!S*#KhEh*
NFb!N+%C33ep$6de358a&8NP14NmT+5`e+3T'8%0I3dp08%P-49**6NC2+cdN+(0
SC@aX)#3S4P"$+5!YD903+3T'8%0I3dp08%P-49**6NC2+cdN+(0SC@aX)#3S4P"
$+5!YD943+3T'8%0I3dp08%P-49**6NC2+cdN+(0SC@aX)#3S4P"$+5!YD902+3T
'8%0I3dp08%P-49**6NC2+cdN+(0SC@aX)#3S4P"$+5!YD942+3TPEQ4TCJTTCQj
NC@BJ3e"9Ae0299*$43T$8&9I8dp98N0&1MdN+(G[FQ3J-L`N+%C33ep$6de358a
&8NP14NmT+3TPEQ4TCJTTCQjNC@BJ3e"9Ae4"8NG&9!T$8&9I9%&54d981MdN+(G
[FQ3J-b`N+%C33ep$6de358a&8NP14NmT+3TPEQ4TCJTTCQjNC@BJ6e0I8dp98N0
&#Np6Ae0299*$46Sp*#KhEh*N)$3X*#K'8%0I3dp08%P-49**6NC2+5N+C@jND@B
+D@CZC'9Q)%p6Ae4"8NG&9!T28ep839*(493k253SGfpbC#!e,#3S4P"$Ad0269"
*6%9558j'6bNT#Q9ZC'PQ#NC96%aI9%&54d98253S3e"9Ae4"8NG&9#NY*#K28ep
839*(493T#NC96%aI8dp98N0&253S3e"9Ae0299*$45NY*#K28ep66e953d8T#QP
QEQ9a)#JN+%C96%aI9%&54d98+5`N+%C96%aI8dp98N0&+5N+3e*28e0$6de358a
&26%+C@jND@B+D@CPF5!S*#KQD@jNFh4bD@jR)'eKDf9QD@aP,#3S68&,48004%G
238a6+5NX+3TTCQ9a)#JN+'CTEQ4cG(*TEQFJ*#K28ep839*(493T,#3S68&,48C
*6%9839*(4946+5NX+3SN+'9bFQpb)&4SC5"0B@YPCQPXC5"NEf9cELGd)(0eF("
[FR3JG'&bCf9d)#3S6e0I9%&54d98+5`JF'aPBA0P)(*eEL"QF'0YB@YP)'CTFR0
d+3TPEQ4TCJTPEQ4TCJTTCQjPF5!S*#KQD@jNFh4bD@jR)#3S6e0I9%&54d98+5`
N+%*64(-T+5`T#N*64'KTCA)p-3TPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXE'P
ZGAJT#QaTER9i5'PPFMda#Q9ZC'PQ#Q9iF'pbG#"28ep839*(493J6e0I8dp98N0
&)%0399p839*(493J3e"9Ae0299*$45"'98a-Ae4"8NG&9#"'98a-Ae0299*$45"
$8Np68d0269"*6%8+D@CNC@BJ4P"$4%P5#QpfCA*bD@4P)%C33d4*8MSp*#KcG@*
cG#"F,#mX*#K'8%0%59)T+3TTCQ9a)#JN+(GTE'4MBA*N)#3SB@4NF(*PCQPi)#3
S4P"$4%P5+5mXFR4X)(9ZDA4c+5NX+3T[GQ9bFQPNC5"'8%0%59)pGh*[EQF+C@j
ND@B+C@acC3T[GQ9bFQPNC5"'8%0%59)pGh*[EQF+C@jND@B+D@CNC@BJ4%9'399
-9&p'8%0%59)+D@CPF5!S*#K'8%0%59)T,(GbEfjR+3T[GQ9bFQPNC5"'8%0%59)
k253SFh9LFh3JA#`[,#3S4%9'399-9&p'8%0%59)T+3TTCQ9a)#JN+(GTE'4MBA*
N)#3SB@4NF(*PCQPi)#3S4P"$4%P5+5mXFR4X)(9ZDA4c+5NX+3T[GQ9bFQPNC5"
'8%0%59)pGh*[EQF+C@jND@B+C@jND@B+C@jND@B+D@CPF5!S*#K'8%0%59)T,(G
bEfjR+3TTCQ4PCL"TEP9ZDAJ+EhCPFR*TC'8J4P"$4%P525peFh)[E'pMB@`[E'P
L,fC`BbmN+%C33ep@49*658p1+3TTCQ9a)#JN+(GTE'4MBA*N)#3S4P"$4%P5+5p
eEQPdFbNX+3T[GQ9bFQPNC5"'8%0%59)p,h9cFLpXD@)[CR"M,b3S4P"$AeC&8P0
*6diT#Q9ZC'PQ#Q9XFf8+EhCPFR*TC'8J4P"$4%P51MdN+(0eBR0d)#mN+%C33bN
X,#3SCQPbFh4hEh*N)#3SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0eCQCTH#![*#K
'8%-T,#3S8d9"8N0)8%&85#Q3"JT[GQ9bFQPNC5"'8%0%59)k253S4P"$4%P5+5m
Z,JTTCQ9a)#JN+(GTE'4MBA*N)#3SB@4NF(*PCQPi)#3S4P"$4%P5+5mXFR4X)(9
ZDA4c+5NX+3T[GQ9bFQPNC5"'8%0%59)k253S4P"$4%P5+5mZ,JTTCQ9a)#JN+(G
TE'4MBA*N)#3SB@4NF(*PCQPi)#3S4P"$4%P5+5mXFR4X)(9ZDA4c+5NX+3T[GQ9
bFQPNC5"'8%0%59)k253S3N&6484*8LN+D@CPF5!S*#KhD@aNBf&bC#!N+'&NC("
bC@CTH#!N+%C33d4*8LN[,(*dE#"eEQPdFbNT,#N+EhCPFR*TC'8J4P"$4%P52@-
k,h"`#Q9ZC'PQ#Q9ZC'PQ#Q9ZC'PQ#Q9ZC'PQ#Q9ZC'PQ#QPQEQ4PCL"$8Np68d4
*8JT$8Np68d4*8MSp*#K'8%0%59)T,f0bEh0c,b3S4P9-6&p839*(493T#Q9ZC'P
Q#QPQEQ4PCL"$8Np68e4"8NG&9%4*8JT$8Np68e4"8NG&9%4*8MdN+%056e064%P
5+5mN+%C96%aI9%&54d98+3TPEQ4TCJTTCQ4PCL"$8Np68d0269"*6%8+98j*9&0
%59)k253SGfPXC'0KFQ3J*#K$8Np68e4"8NG&9%4*8LN[G@jTG(-T#QPQCA%J+#3
S98j*9&0%59)T,#N+98j*9&0%59)k253SGfPXC'0KFQ3J*#K'8%0%59)T,h9ZDA4
c,b3S6e0I9%&54d98+5N+C@jND@B+C@acC3T96NP88d4*8MSp*#KhD@aNBf&bC#!
N+%C33d4*8LN[G@jTG(-[*#K28ep839*(493T+3TPEQ4TCJT3380,38G&8d4*8MS
p*#KhD@aNBf&bC#!N+%C33d4*8LNJ*#K'8%0%59)T,h"KBfYKCf9c,f*KFf8J*#K
'8%0%59)T,h"KBfYKCf9c,f9iG(*K+3TTCQ9a)#JN+&9649046#NX@896+3T%3N4
*4d969$eNBQ4TCf9cG!TPEQ4TCJT[GQ9bFQPNC5"839*(494I8&*24e*"69-V2@4
[G'9cG#"QB@PX)(4PFh4QB@PX)'4TCf9cG#!N+%4#4%P(4908+3T[GQ9bFQPNC5"
*6P0838a-AdC33e""3dY"4d8pH3TTCQ4PCL"549&959*&Ae9159464%P5#QpfCA*
bD@4P)&9159464%P5+cdN+&*&899*8N9I98j*9&0%59)T#Q9ZC'PQ#QPQC'9Q)&*
&899*8N9I8%&$5d&(490%59)+EhCPFR*TC'8J8%&$5d&(490%59)V253S8N9498P
549p3380,38G&8d4*8LN+C@jND@B+D@CNC@BJ@NP358j69%&-6!TTCQjPF5!S*#K
QD@jNFh4bD@jR)#3S6e0I9%&54d98+5`N+&9159Kc+5NX+3T96NPB5'PPFMda#Q9
ZC'PQ#Q9XFf8+D@CZCA%J+#3SCQPZC(0dFQPZCb!N+%p6Ae0299*$45NX*#K96NP
BFbNT,#N+98j*@%KTCA)p-3TPEQ4TCJTPEQ4TCJTTCQjNC@BJ58j69%&-6&p38N9
'59J+D@CNC@BJ8&*&4NPB#NP18e4"6%aI8&*&4NPB253S8&*&4NPB+3TPEQ4TCJT
PEQ4TCJTTCQjNC@BJ58j69%&-6&p38N9'59J+D@CNC@BJ98j*@%KTCA)+58j69%&
-6&p38N9'59Jp,h9cFLpXEf0KE!TPE(0P#QPQC'9Q)%P18e4"6%aI4P"$8%&$5d&
(43T*6P0838a-Ad*"8d9%59)k25p`F!TPE(0P#NP18e4"6%aI3N&6484*8MSp,b3
S8%&$5d&(49p138e&+3TPEQ4TCJTPEQ4TCJTPEQ4TCJTPH("[FR3J58j69%&-6&p
38N9'59J+D@CNC@BJ58j69%&-6&p'8%0698*%59)+CAK`Eh*d)%P18e4"6%aI4P"
$8e9#4%P5#Q9ZC'PQ#QPQEQ4PCL"%5908Ad4&8e4%59)+4%P69&p%49084%P51Md
N+%*"8d9%59)T#Q9ZC'PQ#Q9iF'pbG#"%5908Ad4&8e4%59)+D@CZC'9Q)%P18e4
"6%aI3N&6484*8JTTCQ4PCL"96NPB5'PPFJTTCQ4PCL"*6P0838a-AdC33e""3dY
"4d8+58j69%&-6&p#390&4%P51MdN+%P18e4"6%aI8&*&4NPB+5pXD@)[CR"M,b3
S4P"$AeC&8P0*6diT#Q9XFf8+58j69%&-6&p#390&4%P51MdN+%P18e4"6%aI8&*
&4NPB+5pXD@)[*#K3380,38G&Adj"688T#Q9ZC'PQ#Q9XFf8+58j69%&-6&p#390
&4%P51MdN+%P18e4"6%aI8&*&4NPB+3TPEQ4TCJTPEQ4TCJTTCQjNC@BJ58j69%&
-6&p#58j%59)+D@CNC@BJ98j*@%KTCA)+D@CNC@BJ3e*28e0$6de358a&#NP18e4
"6%aI3NP14%P51MdN+%P18e4"6%aI3N&6484*8LN[Bh*[Fh-[*#K'98a-Ae4"8NG
&9#N[BQPZ#Q9XFf8+58j69%&-6&p#58j%59)k253S58j69%&-6&p38N9'59JT,f*
TEJTPEQ4TCJTPE(0P#QPQC'9Q)%056e063dp08%P-43T*6P0838a-Ad**6N4*8MS
p*#K*6P0838a-Ad*"8d9%59)T,f0bEh0c,b3S4P9-6&p839*(493T,f*TEJTPE(0
P#NP18e4"6%aI3NP14%P51MdN+%P18e4"6%aI3N&6484*8LN[BQPZ#Q9ZC'PQ#QP
QC'9Q)%P18e4"6%aI4P"$8%&$5d&(43T*6P0838a-Ad**6N4*8MSp*#K*6P0838a
-Ad**6N4*8LN[*#K28ep839*(493T#Q9ZC'PQ#Q9ZC'PQ#Q9ZC'PQ#QPQEQ4PCL"
*6P0838a-Ae91594%59)+D@CNC@BJ3e*28e0$6de358a&#NP18e4"6%aI98j*9%4
*8MSp*#K*6P0838a-Ad*"8d9%59)T,f0bEh0c,b3S4P9-6&p839*(493T,h9ZDA4
c#Q9XFf8+58j69%&-6&p96NP84%P51MdN+%P18e4"6%aI3N&6484*8LN[G@jTG(-
[*#K28ep839*(493T#Q9ZC'PQ#QPQC'9Q)%P18e4"6%aI4P"$8%&$5d&(43TTCQ4
PCL"3380,38G&Adj"688+58j69%&-6&p96NP84%P51MdN+%P18e4"6%aI98j*9%4
*8LN[*#K3380,38G&Adj"688T#Q9ZC'PQ#Q9ZC'PQ#Q9ZC'PQ#QPQEQ4PCL"*6P0
838a-Ada*3N4*8JTTCQ4PCL"96NPB5'PPFJT*6P0838a-Ada*3N4*8MSp*#K*6P0
838a-Ae"548C*@#N[E'PL#Q9XFf8+58j69%&-6&p-58*%59)k253S58j69%&-6&p
96NP84%P5+3TPEQ4TCJTPEQ4TCJTTCQjNC@BJ58j69%&-6&p66e953d9%59)+D@C
NC@BJ98j*@%KTCA)+D@CNC@BJ3P0%D'PPFJT68N038N9'59K%59)pFfKKFQ8[Fh*
M#Q9XFf8+D@CNC@BJE'PZGAK)D@9b#P053e"548C*@%4*8MecD'&bC5pcFQ-+C@a
cC3T68N038N9'59K%59)pFh*M#Q9ZC'PQ#Q9ZC'PQ#QPQC'9Q)%P18e4"6%aI4P"
$8%&$5d&(43TTCQ4PCL"*6P0838a-AdC33e093N4*8JT*6P0838a-Ae0299*$484
*8MSp*#K*6P0838a-Ae"548C*@#N[*#K68N038N9'59K%59)T,fC`BbdN+%C33ep
@49*658p1+5mN+%P18e4"6%aI4P"$8e9#4%P5+5mN+&""3dY"4d9I6N&045N+C@a
cC3T*6P0838a-Ae0299*$484*8MSp*#K*6P0838a-Ae"548C*@#N[*#K68N038N9
'59K%59)T,fC`BbdN+%C33ep@49*658p1+5mN+&""3dY"4d9I6N&045N+C@jND@B
+C@acC3T*6P0838a-Ae0299*$484*8MSp*#K*6P0838a-Ae"548C*@#N[*#K68N0
38N9'59K%59)T,b3S8%&$5d&(49p138e&+5dN+&""3dY"4d9I9N958dP26LN+C@j
ND@B+C@acC3TTCQ4PCL"*6P0838a-AdC33e""3dY"4d8+D@CNC@BJ58j69%&-6&p
'8%0698*%59)+58j69%&-6&p66e953d9%59)k253S58j69%&-6&p#390&4%P5+5p
cEh9bBf8[*#K*6P0838a-AdC33e093N4*8LN[*#K3380,38G&Adj"688T#Q9XFf8
+58j69%&-6&p66e953d9%59)k253S58j69%&-6&p#390&4%P5+5pcEh9bBf8[*#K
3380,38G&Adj"688T#Q9ZC'PQ#Q9XFf8+58j69%&-6&p66e953d9%59)k253S58j
69%&-6&p#390&4%P5+5pcEh9bBf8+C@jND@B+C@jND@B+C@jND@B+D@CZC'9Q)%P
18e4"6%aI4%p$4%P5#QPQC'9Q)&9159K)D@9b#QPQC'9Q)%*64'KTCA)+4%p$8&*
&4NPB4%P52A0SBA*P,f4[B`TPE(0P#QPQC'9Q)'aTER9i5'PPFJT%6d038N9'59K
%59)pFfKKFQ8[C'pM#Q9XFf8+4%p$8&*&4NPB4%P52@4[B`TPEQ4TCJTPEQ4TCJT
TCQ4PCL"*6P0838a-AdC33e""3dY"4d8+58j69%&-6&p%6d0%59)k253S58j69%&
-6&p38N9'59JT,b3S4%p$8&*&4NPB4%P5+5pQF'-Y*#K'8%0I9N958dP26LN[*#K
3380,38G&Adj"688T#Q9XFf8+58j69%&-6&p%6d0%59)k253S58j69%&-6&p38N9
'59JT,b3S4%p$8&*&4NPB4%P5+5mN+&""3dY"4d9I6N&045NY*#K3380,38G&AeC
&8P0*6diT#Q9ZC'PQ#Q9XFf8+D@CNC@BJ58j69%&-6&p'8%03380,38G&#NP18e4
"6%aI4%p$4%P51MdN+%P18e4"6%aI3N&6484*8LN[C'pM,b3S8%&$5d&(49p138e
&+3TPE(0P#NP18e4"6%aI4%p$4%P51MdN+%P18e4"6%aI3N&6484*8LN[C'pM#Q9
ZC'PQ#Q9ZC'PQ#Q9ZC'PQ#QPQEQ4PCL"*6P0838a-Ad9B38e36%9%59)+D@CNC@B
J98j*@%KTCA)+D@CNC@BJ58j69%&-6&p'8%03380,38G&#QPQC'9Q)%*64'KTCA)
+58j69%&-6&p&@%&08%a&4%P51MdN+%P18e4"6%aI8&*&4NPB+5pcD'&bC5pPH'&
YF'aPFbpQF'-Y*#K'8%0I9N958dP26LN[*#K3380,38G&Adj"688T#Q9XFf8+D@C
NC@BJE'PZGAK)D@9b#NP18e4"6%aI49K"69"-484*8MSp*#K*6P0838a-Ad423d4
*8LN[CAKKEA"XCA-[CR"M,53S4P"$AeC&8P0*6diT,b3S8%&$5d&(49p138e&+3T
PE(0P#NP18e4"6%aI49K"69"-484*8MSp*#K*6P0838a-Ae"548C*@#N[C'pM,fC
`BbdN+%C33ep@49*658p1+5pPH'&YF'aPFbmN+&""3dY"4d9I6N&045N+C@jND@B
+C@jND@B+C@acC3TTCQ4PCL"#8d4SD@9b#NP18e4"6%aI49K"69"-484*8MSp*#K
*6P0838a-Ae"548C*@#N[FfKKFQ8[CAKKEA"XCA-[*#K3380,38G&Adj"688T,53
S8%&$5d&(49p@49*658p1+3TPE(0P#QPQC'9Q)'aTER9i5'PPFJT*6P0838a-Ad9
B38e36%9%59)k253S58j69%&-6&p%6d0%59)T,f9iB@e`E'9c,b3S8%&$5d&(49p
138e&+5dN+&""3dY"4d9I9N958dP26LN+C@acC3T*6P0838a-Ad9B38e36%9%59)
k253S58j69%&-6&p38N9'59JT,f4[BbmN+&""3dY"4d9I6N&045NY*#K3380,38G
&AeC&8P0*6diT#Q9ZC'PQ#Q9ZC'PQ#Q9ZC'PQ#Q9XFf8+D@CNC@BJ58j69%&-6&p
'8%03380,38G&#NP18e4"6%aI49K"69"-484*8MSp*#K*6P0838a-Ad*"8d9%59)
T,f9iB@e`E'9c,b3S8%&$5d&(49p138e&+3TPE(0P#NP18e4"6%aI49K"69"-484
*8MSp*#K*6P0838a-Ad*"8d9%59)T,f9iB@e`E'9c#Q9ZC'PQ#Q9ZC'PQ#Q9ZC'P
Q#QPQEQ4PCL"*6P0838a-Ad4"9%&%59)+58j69%&-6&p%394"4%P5253S58j69%&
-6&p#390&4%P5+3TPEQ4TCJTTCQ4PCL"$8Np68d0269"*6%8+D@CZC'9Q)%056e0
63NP14%P5#N056e063NP14%P51MdN+(GTE'4MBA*N)#3S3e*28e0839*(494%59)
T,f*TELmN+%C96%aI8dp98N0&+5N+D@CPF5!S*#K$8Np68d**6N4*8LNX+3T$8Np
68d**6N4*8MSp*#KhD@aNBf&bC#!N+%P18e4"6%aI3N&6484*8LN[Bh*[Fh-[*#K
'98a-Ae4"8NG&9#N[BQPZ,b3S4P9-6&p66e953d8T+3TPEQ4TCJTPEQ4TCJTPE(0
P#N056e063NP14%P523TPEQ4TCJTTCQ9a)#JN+%p6Ae0299*$45NXE'PZGAJT#QP
QEQ4PCL"(3d0-58*%59)+D@CPF5!S*#K$8&9I9%&54d98+5aT-cJf+3TTCQjPF5!
S*#KQD@jNFh4bD@jR)(Ji0Pmf0#`N+(0SC@aX)(9ZB@eP)#eK+5NX+3TTCQ9a)#J
N+%**6P9858a68&*&4NPB+5`T#NG$3da*3N4*8MSp*#KcD'9XE#"NDA*ZB@eP)'"
RBf-J,@dc-L!YF(*TER3YE'PLCf0M,@CTE'8YEQ&YC@!T#Q9XFf8+4d0$6%P#4%P
51MdN+(0SC@aX)'4TFQjKE@8JB#3S3NP1994*6&038N9'59JTCf0M)#e`FQPZG#e
XD@*RBf-YCQPXC5eZB@ePB#N+C@jND@B+C@acC3T(3d0-58*%59)k253SFfKPE'`
JC'PbEQ&YC5"J*#K#58j99%P-8e"548C*@#PRBf-J,A"bD@jd,@aTBQGMBbeQD@a
P,@jKE@9J+3TPEQ4TCJTPE(0P#NG$3da*3N4*8MSp*#KcD'9XE#"NDA*ZB@eP)'!
N+%**6P9858a68&*&4NPB+@GMBb!YF(*TER3YE'PLCf0M,@CTE'8YEQ&YC@!T#Q9
ZC'PQ#Q9ZC'PQ#QPQEQ4PCL"29%K&8Na*3N4*8JT29%K&8Na*3N4*8MSp*#KcD'9
XE#"RFQ9`)#ef)#*HA#-L)#pPG'-[E'3ZFfmZBfpZCL"m)'&hDb!RHb"28P-p)L!
L1b"`FQPZG#!N-5"p*bN+C@jND@B+C@jND@B+D@CNC@BJD@j9EQPi#QPQCA%J+#3
S6e0I8dp98N0&+5aZCA4LFf3T#Np85%956%P#4%P5+cd[GA0b,h"VCbpXD@)+C@j
ND@B+CAK`Eh*d)%G$3da*3N4*8L"29%K&8Na*3JTPEQ4TCJT#394$5%9B9$dZBQ&
d#Na2384&8N9B9$dZBA-+49K&49K825jPH'8+8&"-49K825j`F'`+8&"949K825j
`F(8+6d9B9$dZE`T"8de&@&3p,R-+8de"8P4&@&3p,R0X#P08394*3da*3N9B9$d
ZB3T65%&5484-58*&@&3p,R0[#P08394*3da*3P"548C*@$eXD@*`#P*69%9B9$d
ZFR0d#NC33de"4%8pCR"ME@&NC3TTCQ9a)#JN+'CTEQ4cG(*TEQFJ-5i`,L`N+%C
33ep@49*658p1+5NX+3TTCQ9a)#JN+%p6Ae4"8NG&9#NXCfmc-RBa+3T69%&8580
-58*38N9'59Jp#NC33de"4%8pCR"ME@&NC5jf-3T3380,38G&8e9'4NPB2ABa#Q9
ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5aREc-bGM)T#P08394*3da*3P"548C*@$d
+4P"$68&%46eQF'0YB@4P,Q4[F`TD59"698C'59JpCfmc-JTPEQ4TCJTTCQ9a)#J
N+%p6Ae4"8NG&9#NXGf&dBfpY+3T69%&8580-58*38N9'59Jp#NC33de"4%8pCR"
ME@&NC5jhBA3+@NP38e9'4NPB2AGKG'-+6d9B9$dZEf*U#N&6689B9$dZBA0Y#P0
)39*&4%a*3N9B9$dZC'aX#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5aXD@jeH#N
+3N&83dK&@&3p,R0S#N9B489B9$d+5%&68dK"8N9%6%P#26%+4P"$68&%46eQF'0
YB@4P,QaZH!TD59"698C'59JpE'PZGAJ+C@jND@B+D@CPF5!S*#K28ep839*(493
T,'CbC@9LFf3T#N*"9%0)49K825jcD!T&@%9&@&3p#NK"8e0)39*&4%a*3Mda#NC
33de"4%8pCR"ME@&NC5jQFQ9PBR0N#PT*8&094NC*@$eQFQ9PBR0N#Q9ZC'PQ#QP
QCA%J+#3S6e0I9%&54d98+5aZCA4LFf3T#N*"9%0)49K825jcD!T&@%9&@&3p#NK
"8e0)39*&4%a*3Mda#NC33de"4%8pCR"ME@&NC5jZCA4LFf3+@NP38e9'4NPB2@j
PG'*cC!TPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXEh"PEQ*cC#N+3N&83dK&@&3
p,R0S#N9B489B9$d+5%&68dK"8N9%6%P#26%+4P"$68&%46eQF'0YB@4P,Qp`C@j
LFf3+@NP38e9'4NPB2@p`C@jLFf3+C@jND@B+D@CPF5!S*#K28ep839*(493T,(G
TEM-b+3T65%&5484-58*&@&3p,Q4XE!T'8%00384&2@C`BfeKC'8ZGc-b#PT*8&0
94NC*@$eh-c)+C@jND@B+D@CPF5!S*#K28ep839*(493T,'pc-LN+3N&83dK&@&3
p,Q0YC!T"6e9849K825j[GA3+8e4"9%P$6%P#8&*&4NPB23T65%&5484-58*&@&3
p,Q4XE!T'8%00384&2@C`BfeKC'8ZEh-b#PT*8&094NC*@$e[Fc)+480)6cePBfK
[#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5aPEAJT#N*"9%0)49K825jME@3+38p
99%9B9$dZEh9d#P08394*3da*3P"548C*@$d+8dK"8N9%6%P#49K825jNE'`+4P"
$68&%46eQF'0YB@4P,Q9YH!TD59"698C'59JpC@ei#N9$5%mpC@0SE`TPEQ4TCJT
TCQ9a)#JN+%p6Ae4"8NG&9#NXB@eTCf%T#N9B489B9$d+8dK"8N9%6%P#49K825j
XD@*bBA*j#NC33de"4%8pCR"ME@&NC5jKE@F+C@jND@B+D@CPF5!S*#K28ep839*
(493T,'&dBA*T+3T&@%9&@&3p,R4dF!T'8%00384&2@C`BfeKC'8ZBA4K#Q9ZC'P
Q#QPQCA%J+#3S6e0I9%&54d98+5aLC@pc+3T#394$5%9B9$dZFfJ+49K&49K823T
'8%00384&2@C`BfeKC'8ZBQ8+@NP38e9'4NPB2@*P#Q9ZC'PQ#QPQCA%J+#3S6e0
I9%&54d98+5acG@j[FbN+3N&83dK&@&3p,R0S#N9B489B9$d+4P"$68&%46eQF'0
YB@4P,R0eEJTD59"698C'59JpFh9Z#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5a
aERJT#N*"9%0)49K825jcD!T&@%9&@&3p#NC33de"4%8pCR"ME@&NC5jaERJ+@NP
38e9'4NPB2A&ZH!TPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXEQ9dGf&bC5N+49K
&49K825jZE'd+8e4"9%P$6%P#8&*&4NPB23T'8%00384&2@C`BfeKC'8ZERF+@NP
38e9'4NPB2@jh#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5aYB@0[FbN+3N&83dK
&@&3p#N9B489B9$d+4P"$68&%46eQF'0YB@4P,QeKBfpc#PT*8&094NC*@$eYB@0
[F`T%48*94e0C689B9$dZH'0[CQB+C@jND@B+D@CPF5!S*#K28ep839*(493T,'4
KFRGTELN+3N&83dK&@&3p,R0S#N9B489B9$d+5%&68dK"8N9%6%P#26%+4P"$68&
%46eQF'0YB@4P,Q4KFRGTEJTD59"698C'59JpC'&bGfPZ#Q9ZC'PQ#Q9XFf8+D@C
PF5!S*#K28ep839*(493T,'G[-c*f-5N+8&"949K825j`F$%+6d9B9$dZEc%+390
049K825jc-3T668&59%9B9$dZFf`a#P08394*3da*3N9B9$dZB6%+8dK"8N9%6%P
#49K825jcEc%+8e4"9%P$6%P#8&*&4NPB23T'8%00384&2@C`BfeKC'8ZGM%+8%&
$5d&(49094NC*@$ef-3TPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXCfmc-RBb+3T
69%&8580-58*38N9'59Jp#NC33de"4%8pCR"ME@&NC5jNEh-+@NP38e9'4NPB2@G
[-c)+C@jND@B+D@CPF5!S*#K28ep839*(493T,(GKG'0[E5N+8e4"9%P$6%P#8&*
&4NPB23T'8%00384&2@C`BfeKC'8ZC'pc#PT*8&094NC*@$ehBA4MEfd+C@jND@B
+D@CPF5!S*#K28ep839*(493T,'aTER9i+3T#394$5%9B9$dZFfJ+49K&49K823T
)39065%&5484-58)p-3T'8%00384&2@C`BfeKC'8ZE'ji#PT*8&094NC*@$eXD@j
eH!TPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXCR*PC@*cC#N+3N&83dK&@&3p,R0
S#N9B489B9$d+5%&68dK"8N9%6%P#26%+4P"$68&%46eQF'0YB@4P,QCbC@9LFf3
+@NP38e9'4NPB2@CbC@9LFf3+C@jND@B+D@CPF5!S*#K28ep839*(493T,'jPG'*
cC#N+3N&83dK&@&3p,R0S#N9B489B9$d+5%&68dK"8N9%6%P#26%+4P"$68&%46e
QF'0YB@4P,QjPG'*cC!TD59"698C'59JpEQ9dBR0N#Q9ZC'PQ#QPQCA%J+#3S6e0
I9%&54d98+5a[F'9ZBR0N+3T#394$5%9B9$dZFfJ+49K&49K823T)39065%&5484
-58)p-3T'8%00384&2@C`BfeKC'8ZEh"PEQ*cC!TD59"698C'59JpEh"PEQ*cC!T
PEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXGfPZ-c)T#P"3989B9$dZF("h#Np&@&3
p,Qph#N&6689B9$dZFhF+8de"8P4&@&3p,R0XG`T69%&8580-58*&@&3p,Q&h#P0
)39*&4%a*3N9B9$dZC'aX#NC33de"4%8pCR"ME@&NC5jh-c)+@NP38e9'4NPB2AF
c-JTPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXEh-b+3T#394$5%9B9$dZBfeN#P"
3989B9$dZF("[#N&6689B9$dZFfmb#Np&@&3p,Qp[-JT"6e9849K825j[GA3+8de
"8P4&@&3p,R0X-JT69%&8580-58*38N9'59Jp#P08394*3da*3N9B9$dZB@mb#P0
)39*&4%a*3N9B9$dZC'aX#NC33de"4%8pCR"ME@&NC5j[Fc)+@NP38e9'4NPB2@9
YH!T&3dK22@9MD'm+C@jND@B+D@CPF5!S*#K28ep839*(493T,'&YD@GK+3T&@%9
&@&3p#P"3989B9$dZF("e#N&6689B9$dZBA0Y#Np&@&3p,Qm+8de"8P4&@&3p,R0
X#P08394*3da*3N9B9$dZB3T65%&5484-58*&@&3p,QaTBR*KFRN+4P"$68&%46e
QF'0YB@4P,Q&YC`TPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXBA4KFQNT#P"3989
B9$dZF("e#N&6689B9$dZF`T249K825j[#P0039*849K825jcE!T69%&8580-58*
&@&3p,Q%+49K&49K825jdG(!+4P"$68&%46eQF'0YB@4P,Q&dB3TPEQ4TCJTTCQ9
a)#JN+%p6Ae4"8NG&9#NXBQ9[FbN+3N&83dK&@&3p,R0S#P"3989B9$dZF("e#N&
6689B9$dZF`T249K825j[#P0039*849K825jcE!T69%&8580-58*&@&3p,Q%+49K
&49K823T'8%00384&2@C`BfeKC'8ZBQ8+@NP38e9'4NPB2@*P#Q9ZC'PQ#QPQCA%
J+#3S6e0I9%&54d98+5acG@j[FbN+3N&83dK&@&3p,R0S#P"3989B9$dZF("e#N&
6689B9$dZF`T249K825j[#P0039*849K825jcE!T69%&8580-58*&@&3p,Q%+49K
&49K823T'8%00384&2@C`BfeKC'8ZFh9Z#PT*8&094NC*@$ecG@i+C@jND@B+D@C
PF5!S*#K28ep839*(493T,(&ZH#N+3N&83dK&@&3p,R0S#P"3989B9$dZF("e#N&
6689B9$dZF`T249K825j[#P0039*849K825jcE!T69%&8580-58*&@&3p,Q%+49K
&49K823T'8%00384&2@C`BfeKC'8ZF@ji#PT*8&094NC*@$eaERJ+C@jND@B+D@C
PF5!S*#K28ep839*(493T,'jPG(GKFQ8T#P08394*3da*3P"548C*@$d+8&"949K
825j`F(8+6d9B9$dZE`T"8de&@&3p,R-+8de"8P4&@&3p,R0X#P08394*3da*3N9
B9$dZB3T65%&5484-58*&@&3p,QjXE3T'8%00384&2@C`BfeKC'8ZERF+@NP38e9
'4NPB2@jh#N9B489B9$dZEQaY#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5aYB@0
[FbN+3N&83dK&@&3p#P"3989B9$dZF("e#N&6689B9$dZF`T249K825j[#P0039*
849K825jcE!T69%&8580-58*&@&3p,Q%+49K&49K823T%48*94e0C689B9$dZH'0
[CQB+4P"$68&%46eQF'0YB@4P,QeKBfpc#Q9ZC'PQ#Q9ZC'PQ#QPQEQ4PCL"&3dK
2#N9$5%mk253SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0eCQCTH#![Cf9MD'mN+&0
53d9B489B9#NX*#K648&53dK3394)+C!%#QPQCA%J+#3S480)6bNX+3T&3dK21Md
N+(0dFQP`)#3SGfPXC'0KFQ3J*#KKC'4cG@CQDAJJ,f9MD'mN+&053d9B489B9#N
X*#K648&53dK3394)+C!%#QPQCA%J+#3S480)6bNX+3T&3dK225"IAfeTFh0TEQG
IBfpYE@&ZC&pI#Q9XFf8+480)6cSp*#KQDA*cG(G[FQ3J*#K&3dK2+5N+C@jND@B
+C@acC3T&3dK21MdN+'CTFR0dGfpbC#!N+%9$5%mT+3TPEQ4TCJTPEQ4TCJTPH("
[FR3J480)6`TTCQjNC@BJ4%&843T%394&1MdN+(0dFQP`)#3SGfPXC'0KFQ3J*#K
KC'4cG@CQDAJJ,fGNBA4P*#K68N0&@%9&@&3T,#3S8d9"8N0)8%&85#Q3"!TTCQ9
a)#JN+%4"9%8T,#N+4%&846Sp*#KcG(*TF#!N+(GTE'4MBA*N)#3SB@4NFh9QCQP
i)#pNBA4P*#K68N0&@%9&@&3T,#3S8d9"8N0)8%&85#Q3"!TTCQ9a)#JN+%4"9%8
T,#N+4%&846dJAepYDA0cD@jRAf0[E@eKEQ4IA`TPE(0P#N4"9%8k253SCQPbFh4
hEh*N)#3S4%&845NT#Q9ZC'PQ#Q9XFf8+4%&846Sp*#KQDA*cG(G[FQ3J*#K%394
&+5N+C@jND@B+C@jND@B+CAK`Eh*d)%4"9%8+D@CZC'9Q)%G*6P0838a-#NG*6P0
838a-1MdN+(0dFQP`)#3SGfPXC'0KFQ3J*#KKC'4cG@CQDAJJ,fGTER0dB@aX*#K
68N0&@%9&@&3T,#3S8d9"8N0)8%&85#Q3"!TTCQ9a)#JN+%G*6P0838a-+5`T#NG
*6P0838a-1MdN+(0dFQP`)#3SGfPXC'0KFQ3J*#KKC'4cG@CQDAJJ,fPZFh4KE'`
N+&053d9B489B9#NX*#K648&53dK3394)+C!%#QPQCA%J+#3S4dP18e4"6%`T,#N
+4dP18e4"6%`p)&pIE@PcFfPZCepMEfeYB@jNAem+C@acC3T(58j69%&-6$Sp*#K
QDA*cG(G[FQ3J*#K(58j69%&-6#NT#Q9ZC'PQ#Q9XFf8+4dP18e4"6%`k253SCQP
bFh4hEh*N)#3S4dP18e4"6%`T+3TPEQ4TCJTPEQ4TCJTPH("[FR3J4dP18e4"6%`
+D@CZC'9Q)%038&*24`T$8&"56dFk253SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0
eCQCTH#![Bh!N+&053d9B489B9#NX*#K648&53dK3394)+C!%#QPQCA%J+#3S3e"
38Np(+5`T#N038&*24cdJAepYDA0cD@jRAf0[E@eKEQ4IA`TPE(0P#N038&*24cS
p*#KQDA*cG(G[FQ3J*#K$8&"56dFT+3TPEQ4TCJTPEQ4TCJTPH("[FR3J3e"38Np
(#QPQEQ4PCL"569"56dF+8Ne38Np(1MdN+(0dFQP`)#3SGfPXC'0KFQ3J*#KKC'4
cG@CQDAJJ,h*Y*#K68N0&@%9&@&3T,#3S8d9"8N0)8%&85#Q3"!TTCQ9a)#JN+&*
08&*24bNX+3T569"56dFp)&pIE@PcFfPZCepMEfeYB@jNAem+C@acC3T569"56dF
k253SCQPbFh4hEh*N)#3S8Ne38Np(+5N+C@jND@B+C@jND@B+CAK`Eh*d)&*08&*
24`TTCQjNC@BJ69C38Np(#Ne@8&*24cSp*#KcG(*TF#!N+(GTE'4MBA*N)#3SB@4
NFh9QCQPi)#pYGL3S8e*$49K&49K8+5`N+&0&39*$5&""9%JTN!3+D@CPF5!S*#K
09P"56dFT,#N+69C38Np(25"IAfeTFh0TEQGIBfpYE@&ZC&pI#Q9XFf8+69C38Np
(1MdN+'CTFR0dGfpbC#!N+%e@8&*24bNT#Q9ZC'PQ#Q9ZC'PQ#Q9iF'pbG#"09P"
56dF+D@CZC'9Q)%9$5%p5484*8JTTCQjNC@BJD@j9EQPi#N9$5%p5484*8MePBfK
[#Q9XFf8+480)6e*&4%P5253S480)6bN+C@jND@B+C@jND@B+D@CZC'9Q)%028&N
+3dp3@6Sp*#K$8&"56dFT)#eQF!TPEQ4TCJTTCQjNC@BJ3dp3@945488+3dp3@94
5488k253S3e"38Np(+5!YFQC`#Q9ZC'PQ#QPQEQ4PCL"06eC&#Ne29N8k253S69C
38Np(+5!YCJTPEQ4TCJTTCQjNC@BJ4%9-#N4&6$Sp*#K569"56dFT)#eQ#Q9ZC'P
Q#QPQEQ4PCL"%48a88N9&#N4&6&45488k253S8Ne38Np(+5!YFQB+C@jND@B+D@C
ZC'9Q)%P18e4"6%`+D@CNC@BJD@j9EQPi#NP18e4"6%`k253S4dP18e4"6%`T)#e
M)#eY)$Bd0!TPE(0P#NP18e4"6%`k253S3dp3@5N+C@jND@B+C@jND@B+D@CZC'9
Q)%P18e4"6%a&@%8+D@CNC@BJD@j9EQPi#NP18e4"6%a&@%8k253S4dP18e4"6%`
T)#eM)#eY)$Fe03TPE(0P#NP18e4"6%a&@%8k253S3dp3@5N+C@jND@B+C@jND@B
+D@CZC'9Q)%e,4%P5#Ne,4%P51MdN+%G*6P0838a-+5!YE5!h068J,@3+C@jND@B
+CAK`Eh*d)%9$5%p5484*8L"$6e"C)%028&P88N9&)%e29N8J4%9-)%4&6&45488
J58j69%&-6#"*6P0838a-49K&)%e,4%P5#QPQEQ4PCL"38&906eC&#P"398e29N8
k253SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0eCQCTH#![F("eE@pfC53S8e*$49K
&49K8+5`N+&0&39*$5&""9%JTN!3+D@CPF5!S*#K38&906eC&+5`T#P"398e29N8
p)&pIE@PcFfPZCepMEfeYB@jNAem+C@acC3T38&906eC&1MdN+'CTFR0dGfpbC#!
N+&"398e29N8T+3TPEQ4TCJTPEQ4TCJTPH("[FR3J8&"968p@43TTCQjNC@BJ4P"
$68&,43T'8%0038Y&1MdN+(0dFQP`)#3SGfPXC'0KFQ3J*#KKC'4cG@CQDAJJ,fC
`BfeKDf8N+&053d9B489B9#NX*#K648&53dK3394)+C!%#QPQCA%J+#3S4P"$68&
,45NX+3T'8%0038Y&25"IAfeTFh0TEQGIBfpYE@&ZC&pI#Q9XFf8+4P"$68&,46S
p*#KQDA*cG(G[FQ3J*#K'8%0038Y&+5N+C@jND@B+C@jND@B+CAK`Eh*d)%C33de
"5d8+D@CZC'9Q)&T*8&"56dF+@NP38&*24cSp*#KcG(*TF#!N+(GTE'4MBA*N)#3
SB@4NFh9QCQPi)#pkDA!N+&053d9B489B9#NX*#K648&53dK3394)+C!%#QPQCA%
J+#3S@NP38&*24bNX+3TD59"38Np(25"IAfeTFh0TEQGIBfpYE@&ZC&pI#Q9XFf8
+@NP38&*24cSp*#KQDA*cG(G[FQ3J*#KD59"38Np(+5N+C@jND@B+C@jND@B+CAK
`Eh*d)&T*8&"56dF+D@CZC'9Q)&4"8P"56dF+9%&58&*24cSp*#KcG(*TF#!N+(G
TE'4MBA*N)#3SB@4NFh9QCQPi)#pdBA)N+&053d9B489B9#NX*#K648&53dK3394
)+C!%#QPQCA%J+#3S9%&58&*24bNX+3T839*38Np(25"IAfeTFh0TEQGIBfpYE@&
ZC&pI#Q9XFf8+9%&58&*24cSp*#KQDA*cG(G[FQ3J*#K839*38Np(+5N+C@jND@B
+C@jND@B+CAK`Eh*d)&4"8P"56dF+390138e&253S3NP1994*6&038N9'59JTBA-
+6%4138e&253S3NP1994*6&038N9'59JTE'3+39*138e&253S3NP1994*6&038N9
'59JTBA)+8N0138e&253S3NP1994*6&038N9'59JTFQ-+D@CZCA%J+#3SCQPZC(0
dFQPZCb!a,M!Z,#3S4P"$AeC&8P0*6diT+5`T#QPQCA%J+#3S6e0I9%&54d98+5a
hD@ic-LN+D@CPF5!S*#K$8Np68d**6N4*8LNX+3T"8dj"688pBA0h#Na%6N&046e
XC(F+39*138e&2@&bG`TPEQ4TCJTPEQ4TCJTPEQ4TCJTTCQjNC@BJ39038Np(#QP
QC'9Q)%056e063NP14%P5#N&68&*24cdN+%056e063NP14%P5+5mN+%&66N&045N
N+&053d9B489B9#N+C@acC3T"8e"56dFp*#K"8dj"688T#Q9ZC'PQ#Q9ZC'PQ#QP
QEQ4PCL"-4&"56dF+D@CNC@BJ3e*28e0#58j%59)+6%438Np(253S3e*28e0#58j
%59)T,b3S6%4138e&+53S8e*$49K&49K8+3TPE(0P#Na%8&*24cdN+%a%6N&045N
+C@jND@B+C@jND@B+D@CZC'9Q)&*$8&*24`TTCQ4PCL"$8Np68d**6N4*8JT53e"
56dFp*#K$8Np68d**6N4*8LN[*#K53dj"688T*#K68N0&@%9&@&3T#Q9XFf8+8N0
38Np(253S8N0138e&+3TPEQ4TCJTPEQ4TCJTTCQjNC@BJ39*38Np(#QPQC'9Q)%0
56e063NP14%P5#N&58&*24cdN+%056e063NP14%P5+5mN+%&56N&045NN+&053d9
B489B9#N+C@acC3T"8P"56dFp*#K"8Nj"688T#Q9ZC'PQ#Q9ZC'PQ#N&6253S390
38Np(+3T-4$dN+%a%8&*24bN+8N-p*#K53e"56dFT#N&5253S39*38Np(+3T38%&
62A"`BA-N+&053d*"9%0)49K8+3TTCQ4PCL"TEP9ZDAJ+6%4$6dj'58FpE'4MEfj
QD@F+C@acC3T-4%026NC*4cd+C@jND@B+D@CNC@BJ4%&843T%394&8e451MdN+(0
SC@aX)#3S4%&845NJ+b9C*@dPC#N+C@acC3T%394&8e4523TPEQ4TCJTTCQjNC@B
J99"B8&*24`TTCQ9a)#JN+%p6Ae4"8NG&9#NXCfmc-RBb+3T98&K38Np(1Mda#Q9
ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5ahD@ic-LN+99"B8&*24cSp-3TPEQ4TCJT
TCQ4PCL"98&K38Np(#P93@&"56dFk253SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0
eCQCTH#![GA"i*#K68N0&@%9&@&3T,#3S8d9"8N0)8%&85#Q3"!TTCQ9a)#JN+&9
3@&"56dFT,#N+99"B8&*24cd+C@acC3T98&K38Np(1MdN+'CTFR0dGfpbC#!N+&9
3@&"56dFT+3TPEQ4TCJTPE(0P#P93@&"56dFp#Q9ZC'PQ#Q9ZC'PQ#Q9iF'pbG#"
98&K38Np(#PT*8%p39$dY13TD59"&@&3p,RTTF!TTCQ9a)#JN+&96494"8LNXBRS
b+3T839*28&3pGNN+9%&549K825jdBA)ZBRSb#Q9XFf8+9%&56e"82ACk#P4"8N9
B9$dZG'&b,QGk#Q9ZC'PQ#QpfCA*bD@4P)&*&899*8N9I8%&$5d&(49-pFR4X)'e
jFh&X#QPQCA%J+#3S6e0I9%&54d98+5aXD@jeH#N+D@CPF5!S*#K$8&9I9%&54d9
8+5aT-cJf+3T549&959*&Ae""3dY"4d96Ae*86$da#P*&899*8N9I8%&$5d&(490
I69P688`p-3TPEQ4TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXE'PZGAJT#QP
QCA%J+#3S3e"9Ae4"8NG&9#NXE6BiDbN+8N9498P549p3380,38G&8ep59%`p-3T
549&959*&Ae""3dY"4d96AdeC8e&-26%+C@jND@B+C@jND@B+D@CPF5!S*#K28ep
839*(493T,'aTER9i+3TTCQ9a)#JN+%0399p839*(493T,("[Gf9bF'-T#P*&899
*8N9I8%&$5d&(490I8P4-26%+8N9498P549p3380,38G&8ep0@9046$da#Q9ZC'P
Q#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5aXD@jeH#N+D@CPF5!S*#K$8&9I9%&
54d98+5acF'&bBbN+8N9498P549p3380,38G&8ep59%`p-3T549&959*&Ae""3dY
"4d96AdeC8e&-26%+C@jND@B+C@jND@B+D@CPF5!S*#K28ep839*(493T,'aTER9
i+3TTCQ9a)#JN+%0399p839*(493T,(Ji0Pmf0#N+8N9498P549p3380,38G&8ep
59%`p-3T549&959*&Ae""3dY"4d96AdeC8e&-26%+C@jND@B+C@jND@B+D@CPF5!
S*#K28ep839*(493T,'aTER9i+3TTCQ9a)#JN+%0399p839*(493T,'&bE5N+8N9
498P549p3380,38G&8ep59%`p-3T549&959*&Ae""3dY"4d96AdeC8e&-26%+C@j
ND@B+C@jND@B+D@CPF5!S*#K28ep839*(493T,'G[-c*f-LN+D@CPF5!S*#K$8&9
I9%&54d98+5aT-cJf+3T549&959*&Ae""3dY"4d96Ae*86$da#P*&899*8N9I8%&
$5d&(490I69P688`p-3TPEQ4TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXGfP
Z-c)T#QPQCA%J+#3S3e"9Ae4"8NG&9#NXD6-i0LN+8N9498P549p3380,38G&8ep
59%`p-3T549&959*&Ae""3dY"4d96AdeC8e&-26%+C@jND@B+C@jND@B+D@CPF5!
S*#K28ep839*(493T,'pc-LN+D@CPF5!S*#K$8&9I9%&54d98+5aT-cJf+3T549&
959*&Ae""3dY"4d96Ae*86$da#P*&899*8N9I8%&$5d&(490I69P688`p-3TPEQ4
TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXCR*PC@*cC#N+D@CPF5!S*#K$8&9
I9%&54d98+5aT-cJf+3T549&959*&Ae""3dY"4d96Ae*86$da#P*&899*8N9I8%&
$5d&(490I69P688`p-3TPEQ4TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXCR*
PC@*cC#N+D@CPF5!S*#K$8&9I9%&54d98+5aY0MKV+3T549&959*&Ae""3dY"4d9
6Ae*86$da#P*&899*8N9I8%&$5d&(490I69P688`p-3TPEQ4TCJTPEQ4TCJTTCQ9
a)#JN+%p6Ae4"8NG&9#NXBQ9[FbN+D@CPF5!S*#K$8&9I9%&54d98+5aT-cJf+3T
549&959*&Ae""3dY"4d96Ae*86$da#P*&899*8N9I8%&$5d&(490I69P688`p-3T
PEQ4TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXEQ9dBR0N+3TTCQ9a)#JN+%0
399p839*(493T,'Nc1$BT#P*&899*8N9I8%&$5d&(490I8P4-26%+8N9498P549p
3380,38G&8ep0@9046$da#Q9ZC'PQ#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5a
ZCA4LFf3T#QPQCA%J+#3S3e"9Ae4"8NG&9#NXE6BiDbN+8N9498P549p3380,38G
&8ep59%`p-3T549&959*&Ae""3dY"4d96AdeC8e&-26%+C@jND@B+C@jND@B+D@C
PF5!S*#K28ep839*(493T,'jPG'*cC#N+D@CPF5!S*#K$8&9I9%&54d98+5a`EhG
PFR"M+3T549&959*&Ae""3dY"4d96Ae*86$da#P*&899*8N9I8%&$5d&(490I69P
688`p-3TPEQ4TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXEQ9dBR0N+3TTCQ9
a)#JN+%0399p839*(493T,(0`BA*M+3T549&959*&Ae""3dY"4d96Ae*86$da#P*
&899*8N9I8%&$5d&(490I69P688`p-3TPEQ4TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4
"8NG&9#NXB@eTCf%T#QPQCA%J+#3S3e"9Ae4"8NG&9#NXE6BiDbN+8N9498P549p
3380,38G&8ep59%`p-3T549&959*&Ae""3dY"4d96AdeC8e&-26%+C@jND@B+C@j
ND@B+D@CPF5!S*#K28ep839*(493T,'&dBA*T+3TTCQ9a)#JN+%0399p839*(493
T,'df1'XT#P*&899*8N9I8%&$5d&(490I8P4-26%+8N9498P549p3380,38G&8ep
0@9046$da#Q9ZC'PQ#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5acG@j[FbN+D@C
PF5!S*#K$8&9I9%&54d98+5aT-cJf+3T549&959*&Ae""3dY"4d96Ae*86$da#P*
&899*8N9I8%&$5d&(490I69P688`p-3TPEQ4TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4
"8NG&9#NXFh9ZEh-T#QPQCA%J+#3S3e"9Ae4"8NG&9#NXFh"KFQ-T#P*&899*8N9
I8%&$5d&(490I8P4-26%+8N9498P549p3380,38G&8ep0@9046$da#Q9ZC'PQ#Q9
ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5aaERJT#QPQCA%J+#3S3e"9Ae4"8NG&9#N
XD6-i0LN+8N9498P549p3380,38G&8ep59%`p-3T549&959*&Ae""3dY"4d96Ade
C8e&-26%+C@jND@B+C@jND@B+D@CPF5!S*#K28ep839*(493T,'jPG(GKFQ8T#QP
QCA%J+#3S3e"9Ae4"8NG&9#NXD6-i0LN+8N9498P549p3380,38G&8ep59%`p-3T
549&959*&Ae""3dY"4d96AdeC8e&-26%+C@jND@B+C@jND@B+D@CPF5!S*#K28ep
839*(493T,'p`C@jLFf3T#QPQCA%J+#3S3e"9Ae4"8NG&9#NXD6-i0LN+8N9498P
549p3380,38G&8ep59%`p-3T549&959*&Ae""3dY"4d96AdeC8e&-26%+C@jND@B
+C@jND@B+D@CPF5!S*#K28ep839*(493T,'p`C@jLFf3T#QPQCA%J+#3S3e"9Ae4
"8NG&9#NXE6BiDbN+8N9498P549p3380,38G&8ep59%`p-3T549&959*&Ae""3dY
"4d96AdeC8e&-26%+C@jND@B+C@jND@B+D@CPF5!S*#K28ep839*(493T,(GNEh0
i+3TTCQ9a)#JN+%0399p839*(493T,'Nc1$BT#P*&899*8N9I8%&$5d&(490I8P4
-26%+8N9498P549p3380,38G&8ep0@9046$da#Q9ZC'PQ#Q9ZC'PQ#QPQCA%J+#3
S6e0I9%&54d98+5a`B@aYEh-T#QPQCA%J+#3S3e"9Ae4"8NG&9#NXE6BiDbN+8N9
498P549p3380,38G&8ep59%`p-3T549&959*&Ae""3dY"4d96AdeC8e&-26%+C@j
ND@B+C@jND@B+D@CPF5!S*#K28ep839*(493T,'eKBfpc+3TTCQ9a)#JN+%0399p
839*(493T,("[Gf9bF'-T#P*&899*8N9I8%&$5d&(490I8P4-26%+8N9498P549p
3380,38G&8ep0@9046$da#Q9ZC'PQ#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d98+5a
NBA*hD@iT#QPQCA%J+#3S3e"9Ae4"8NG&9#NXF'phCA*`BbN+8N9498P549p3380
,38G&8ep59%`p-3T549&959*&Ae""3dY"4d96AdeC8e&-26%+C@jND@B+C@jND@B
+D@CPF5!S*#K28ep839*(493T,'9YH#N+D@CPF5!S*#K$8&9I9%&54d98+5aT-cJ
f+3T549&959*&Ae""3dY"4d96Ae*86$da#P*&899*8N9I8%&$5d&(490I69P688`
p-3TPEQ4TCJTPEQ4TCJTTCQ9a)#JN+%p6Ae4"8NG&9#NXGf&dBfpY+3TTCQ9a)#J
N+%0399p839*(493T,'Nc1$BT#P*&899*8N9I8%&$5d&(490I8P4-26%+8N9498P
549p3380,38G&8ep0@9046$da#Q9ZC'PQ#Q9ZC'PQ#QPQC'9Q)&*&899*8N9I8%&
$5d&(490I8P4-#P""3dY"4d9%59*I8P4-1MdN+'CTFR0dGfpbC#!N+(0eBR0d)#p
0B@YPCQPXC5jQF'-X,#3SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0eCQCTH#![FR4
X,b3S6e0I9%&54d98+5p0B@YPCQPXC5jQF'-X*#K3380,38G&8d4*8LQ3"JTTCQj
PF5!S*#K3380,38G&4%P5Ae*86#NX+3TTCQjPF5!S*#KhD@aNBf&bC#!N+&""3dY
"4d9%59*I8P4-+5mN+%p6Ae4"8NG&9#NT,#N+98j*9%4*8Pp59%`p*#K3380,38G
&4%P5Ae*86#N[*#K28ep839*(493T#Q9XFf8+98j*9%4*8Pp59%`p*#K3380,38G
&4%P5Ae*86#N+C@jND@B+D@CNC@BJ3dK&3dY%49"&6N3+*#K3380,38G&4%P5Ae*
86#N[*#K'8%00384&+6S+#53S68&,45NJ,8-J*#K3380,38G&4%P5Ae*86#NJ*#K
'8%00384&+3T[GQ9bFQPNC5""6%a%49"&6N4&6N0*49-V253S8%&$5d&(484*8Pp
59%`T,b3S4P"$68&%45N+C@jND@B+C@acC3T3380,38G&4%P5Ae*86$d+98j*9%4
*8Pp59%`k253SFh9LFh3J,e"KBfYKCf8ZCR"M,#`N+(0dFQP`)#3SGfPXC'0KFQ3
J*#KKC'4cG@CQDAJJ,h*dE#p3B@0VB@GP,QC`Bb`N+&9159464%P5+C!&#QPQEQ9
a)#JN+&91594%59*I8P4-+5`T#P91594%59*I8P4-1MdN+'CTFR0dGfpbC#!N+&9
1594%59*I8P4-+5N+C@acC3T96NP84%P5Ae*86$d+C@jND@B+C@jND@B+D@CNC@B
J98j*9%4*8Pp59%`+EhCPFR*TC'8J3dp08%P-49*I98j*9%4*8LXp*#K96NP84%P
5Ae*86#N+C@jND@B+C@jND@B+D@CNC@BJ8N9498P549p3380,38G&8ep0@9046!T
3380,38G&4%P5AdeC8e&-1MdN+'CTFR0dGfpbC#!N+(0eBR0d)#p0B@YPCQPXC5j
QF'-X,#3SFh4bDA!J*#KhD@aNBf&bC#!N+'&NC(0eCQCTH#![EAPcF@`[6@&VC@C
TE'8ZCR"M,#3S8%&$5d&(490%59)TN!B+D@CZCA%J+#3S8%&$5d&(484*8Pp0@90
46#NX+3TTCQjPF5!S*#KhD@aNBf&bC#!N+&""3dY"4d9%59*I69P688`T,b3S6e0
I9%&54d98+5NX+3T96NP84%P5AdeC8e&-253S8%&$5d&(484*8Pp0@9046#N[*#K
28ep839*(493T#Q9XFf8+98j*9%4*8Pp0@9046$dN+&""3dY"4d9%59*I69P688`
T#Q9ZC'PQ#QPQC'9Q)%0)480,4%9348j%#L3S8%&$5d&(484*8Pp0@9046#N[*#K
'8%00384&+6S+#53S68&,45NJ,8-J*#K3380,38G&4%P5AdeC8e&-+5!N+%C33de
"4%8T#QpfCA*bD@4P)%&-6%4&8%914%913dP&8bXp*#K3380,38G&4%P5AdeC8e&
-+5mN+%C33de"4%8T#Q9ZC'PQ#Q9XFf8+8%&$5d&(484*8Pp0@9046$d+98j*9%4
*8Pp0@9046$Sp*#KcG@*cG#![8'&MDf&RC5jQF'-X,#3SFh4bDA!J*#KhD@aNBf&
bC#!N+'&NC(0eCQCTH#![EAPcF@`[8'&MDf&RC5jQF'-X*#K96NP88d4*8LQ3"3T
TCQjPF5!S*#K96NP84%P5AdeC8e&-+5`T#P91594%59*I69P688`k253SCQPbFh4
hEh*N)#3S98j*9%4*8Pp0@9046#NT#Q9XFf8+98j*9%4*8Pp0@9046$d+C@jND@B
+C@jND@B+D@CNC@BJ98j*9%4*8Pp0@9046!T[GQ9bFQPNC5"$6de358a&8Pp96NP
84%P5+cdN+&91594%59*I69P688`T#Q9ZC'PQ#Q9ZC'PQ#QPQEQ4PCL"16d03984
&4JT[GQ9bFQPNC5"'8%028&4%48Bp*#K$8&9I9%&54d98+3TPEQ4TCJTTCQjPF5!
S*#K28ep839*(493T,#3S6e0I8dp98N0&+5N+EhCPFR*TC'8J4P"$6e"8+cdY9#3
S6e0I9%&54d98+3TPEQ4TCJTTCQ9a)#JN+%p6Ae0299*$45NXEh"PEQ*cC#N+EhC
PFR*TC'8J4P"$6e"8+cdY4N3N+%j&9ep#58j99%P-8ep3394)+3TPEQ4TCJTTCQj
NC@BJ3e*28e0#6dp88e4539!+D@CZCA%J+#3S3NP1994*6&038N9'59JT,#N+EhC
PFR*TC'8J4P"$6e"8+cdY@&!N+%**6P9858a68&*&4NPB+5!Y@'-+C@jND@B+D@C
ZCA%J+#3S3NP1994*6&038N9'59JT,#N+EhCPFR*TC'8J4P"$6e"8+cdY@()N+&*
-58j,8%&85#N+C@jND@B+C@jND@B+D@CNC@BJ98j*9%4*8JT[GQ9bFQPNC5"'8%0
28&3V253SB@4NF(*PCQPi)#e'G5`N+&91594%59)T+3TPEQ4TCJTTCQ4PCL"-58*
%59)+EhCPFR*TC'8J4P"$6e"8+cdN+'&NC("bC@CTH#!Y4Q`X*#K-58*%59)T+3T
PEQ4TCJTTCQ4PCL"23NT%59)+EhCPFR*TC'8J4P"$6e"8+cdN+'&NC("bC@CTH#!
Y4QmX*#K23NT%59)T+3TPEQ4TCJTTCQ4PCL"*6N0%59)+EhCPFR*TC'8J4P"$6e"
8+cdN+'&NC("bC@CTH#!Y4QNX*#K*6N0%59)T+3TPEQ4TCJTTCQ4PCL"-58j,8de
"8P3+EhCPFR*TC'8J4P"$6e"8+cdY@&J+C@jND@B+D@CNC@BJ3e*&394&8de"8P3
+EhCPFR*TC'8J4P"$6e"8+cdY3eJ+C@jND@B+D@CNC@BJ4%9#98F+EhCPFR*TC'8
J4P"$6e"8+cdYCf`+EhCPFR*TC'8J4P"$6e"84%9'+ce%48*94`TPEQ4TCJTTCQ4
PCL"548a&390&#QPQCA%J+#3S3e"9Ae4"8NG&9#NXD6-i0LN+4P"$3e"96e"81Md
Y6dFbF$-+C@acC3TTCQ9a)#JN+%0399p839*(493T,("[Gf9bF'-T#NC33d0398p
39$Sp,8ma#Q9XFf8+4P"$3e"96e"81Md+C@jND@B+C@jND@B+EhCPFR*TC'8J4P"
$6e"8+cdY@(-J*#K'8%0$8&928&3T)#eZ#QpfCA*bD@4P)%C33dp39%4&4LXp8N9
-48&643TPEQ4TCJTTCQ4PCL"69&**8!T[GQ9bFQPNC5"'8%028&3V25eBF`TPEQ4
TCJTTCQ4PCL"28&4*68PD43TTCQ9a)#JN+%0399p839*(493T,'Nc1$BT#QpfCA*
bD@4P)%C33dp39#Xp,8p(-R!c#Q9ZC'PQ#Q9ZC'PQ#QPQC'9Q)&C&8N*28d8+EhC
PFR*TC'8J4P"$6e"8+cdYGRGZD3TPEQ4TCJTTCQ4PCL"$6de358a&8Pp28&4*6dj
6#QpfCA*bD@4P)%C33dp39#Xp*#K$6de358a&8Pp28&4*6dj6+3TPEQ4TCJTTCQ4
PCL"$6de358a&8Pp96NP84%P5#QpfCA*bD@4P)%C33dp39#Xp*#KKC'4`FQ9QDAJ
J,8Ce,#3S3dp08%P-49*I98j*9%4*8LNT#Q9ZC'PQ#QPQC'9Q)%0269"*6%95Ada
*3P*"8PP%59)+EhCPFR*TC'8J4P"$6e"8+cdN+'&NC("bC@CTH#!Y4Q`X*#K$6de
358a&8Pp-58*539*C4%P5+5N+C@jND@B+D@CNC@BJ3dp08%P-49*I6d*+48084%P
5#QpfCA*bD@4P)%C33dp39#Xp*#KKC'4`FQ9QDAJJ,8C[,#3S3dp08%P-49*I6d*
+48084%P5+5N+C@jND@B+D@CNC@BJ3dp08%P-49*I58j$6&9%484*8JT[GQ9bFQP
NC5"'8%028&3V253SB@4NF(*PCQPi)#e'D5`N+%0269"*6%95AdP13da94%9%59)
T+3TPEQ4TCJTTCQ4PCL"$8Np68d**6N4*8JT[GQ9bFQPNC5"'8%028&3V25e'4#3
S3e*28e0#58j%59)T#Q9ZC'PQ#QPQC'9Q)%0269"*6%95Ae4"8NG&9%4*8JT[GQ9
bFQPNC5"'8%028&3V25e'453S3dp08%P-49*I9%&54d984%P5+3TTCQ9a)#JN+%0
269"*6%95Ae4"8NG&9%4*8LNX,LN+EhCPFR*TC'8J9%&54d984%P58&*&4NPB23T
PE(0P#QpfCA*bD@4P)&4"8NG&9%4*8P"548C*@$dN+%0269"*6%95Ae4"8NG&9%4
*8LN[#Q9ZC'PQ#Q9ZC'PQ#QPQC'9Q)%0269"*6%95Ae91594839*(494%59)+EhC
PFR*TC'8J4P"$6e"8+cdY4P8N+%0269"*6%95Ae91594839*(494%59)T#QPQCA%
J+#3S3dp08%P-49*I98j*9&4"8NG&9%4*8LNX,LN+EhCPFR*TC'8J98j*9&4"8NG
&9%4*8P"548C*@$d+C@acC3T[GQ9bFQPNC5"96NP89%&54d984%P58&*&4NPB253
S3dp08%P-49*I98j*9&4"8NG&9%4*8LN[#Q9ZC'PQ#Q9XFf8+D@CNC@BJ3dp08%P
-49*I9%&54d984%P5#QpfCA*bD@4P)%0269"*6%95Ae91594839*(494%59)p*#K
$6de358a&8Pp839*(494%59)T#QpfCA*bD@4P)&91594839*(494%59*38N9'59J
p*#K839*(494%59*38N9'59JT#Q9ZC'PQ#Q9ZC'PQ#QPQCA%J+#3S6e0I9%&54d9
8+5aXD@jeH#N+D@CPF5!S*#K'8%0I9N958dP26LNX-5i`,MBT#QpfCA*bD@4P)%C
33dp39%4&4LXp5%&698j*@!TPEQ4TCJTPEQ4TCJTTCQ4PCL"(3d0-58*%59)+EhC
PFR*TC'8J4P"$6e"8+cdY4Q`N+%G$3da*3N4*8LN+C@jND@B+D@CNC@BJ6e4)49*
-58*%59)+EhCPFR*TC'8J4P"$6e"8+cdN+'&NC("bC@CTH#!Y4Q`X*#K29%K&8Na
*3N4*8LNT#Q9ZC'PQ#QPQC'9Q)%p39!T[GQ9bFQPNC5"'8%028&3V253S6e"8+3T
PEQ4TCJTTCQ4PCL"'8%028&4%48B+EhCPFR*TC'8J4P"$6e"8+cdN+'&NC("bC@C
TH#!YC#`N+%C33dp39%4&4LNT#Q9ZC'PQ#QPQC'9Q)%0'4dC*6%8+EhCPFR*TC'8
J4P"$6e"8+ce!*#K$4NG'58a&+3TPEQ4TCJTTCQ4PCL"98d9&6PB+EhCPFR*TC'8
J4P"$49K83de%1MdN+%C33dp39#N+EhCPFR*TC'8J4P"$6e"81MdK4P"$49K83de
%#Q9iF'pbG#"'8%0&@&4$683+C@jND@B+EhCPFR*TC'8J3dp08%P-49)k253S4P"
$+5!N+%C33dp39#N+D@CPF5!S,#3SCQPZC(0dFQPZCb!YFb!X*#K$6de358a&8LN
T+3T&@%9$8&""8cd+C@acC3TTCQ9a)#JN+%C96%aI8dp98N0&+5`N+%C96%aI9%&
54d98+5N+49K&3e"339-k28!N+&"339-T#Q9ZC'PQ#Q9ZC'PQ#Lj35%p1@6SJCR"
MAf9iCA-+D@CNC@BJ9%&54d98Ae"56dG538e6#QpfCA*bD@4P)%9B48C*6%96253
SB@4NFh9QCQPi)#3S49K&49K8+5`N+&4"8NG&9&p38Np(8N&08bNT#QpfCA*bD@4
P)%9B48p'58a&8cSp*#KKC'4cG@CQDAJJ*#K249K8+5`N+&4"8NG&9&p38Np(8N&
08bNT)#3SB@4NF(*PCQPi)#3S8e4"9%P$6%P#8&*&4NPB+5`N+'&NC(0eCQCTH#!
N+&08394*3da*3N9B9#NX*#K839*(494I8&*24e*"69-T+5N+EhCPFR*TC'8J38a
-9%&54d98+ceQF'0ICAKPF`T[GQ9bFQPNC5"*6P0838a-49K&4NP-49-V253S49K
&4NP-49-T#QpfCA*bD@4P)%0-48&149K&4NP-49-V253S49K&4NP-49-T)#3S49K
&6dC*6%96+3TTCQ9a)#JN+%p6Ae4"8NG&9#NXEh-b+3T[GQ9bFQPNC5"$6%9"6N9
B48C*6%96+cdN+'&NC(0eCQCTH#!N+%&2994&@&3T,#3S9%&54d98Ae"56dG538e
6+5N+C@jND@B+D@CPF5!S*#K28ep839*(493T,'9YH#N+EhCPFR*TC'8J3da&38j
&@%9'58a&8bXp*#KKC'4cG@CQDAJJ*#K"6e9849K8+5`N+&4"8NG&9&p38Np(8N&
08bNT#Q9ZC'PQ#Q9ZC'PQ#QC`BepPH'9c1L!N+%9B48C*6%96+3TTCQ4PCL"839*
(494I8P088`T[GQ9bFQPNC5"58e4'58a&8cdN+'&NC(0eCQCTH#!N+&*69%9B9#N
X*#K839*(494I8P088bNT#QpfCA*bD@4P)%0-48&18P084NP-49-V253S8P084NP
-49-T#Q9ZC'PQ#Lj35%p1@6SJCR"MAf&XE#"QF'0IFfeKFR3JCR"MAf4PBR9R)'C
`BepbC@aPBA0P#L3S4P"$68&%45Nk)#3S38a-4%9348j%48j$5896+5!N+%&-6&4
"8NG&9#N+#8!N+%9$5%p5484*8LNJ3fpYF'PXC@3J2L!N+%C33de"4%8T#QC`Bep
KE'`k)#3S4P"$68&%45N+CR"MAh0YBA*d1JS**#K038Y&+5"KE'`J6%P15e0039*
826%J3e*&394&8de"8P3p-3TQF'0IC'9LG@Fk#JNN+%e"5d8T)'&XE#"%48*94cd
a#QC`BepbC@aPBA0P1JS**#K038Y&+5"KE'`J8N9-48&646da#Lj698C'59K&8cS
J*#K&@%9&@&3T)#3S8&"949K8+5!N+%p&@&3T)#j`BA-J,Q4`FL!ZF(!J,R*M)#j
bCA-+*53S8&"949K8+6SJ*5j`F!S**#K$6de358a&8LNJ*$`+#53S49K&3e"339-
T#L8N+&"3989B9#Nk)#8ZF'&c#JNN+%0269"*6%95+5!N2!S**#K&@%9$8&""8bN
+*53S49K&49K8+6SJ*5j`F!S**#K$6de358a&8LNJ*$`+#53S49K&3e"339-T#L8
N+%9B489B9#Nk)#8ZF'&c#JNN+%0269"*6%95+5!N2!S**#K&@%9$8&""8bN+*53
S49K&49K8+6SJ*5jNF()+#53S3dp08%P-49)T)#3m#JNN+%9B48038%&6+3SP,R*
PFcSJ*5jbB`S*GfPZC(*PFb!YD5!N2#!YEb!N3!TfF'&dD#!P,R"`)#3S3dp08%P
-49*I8dp98N0&4%P5+5!N+%0269"*6%95AdP13da94%9%59)T#RC`BA4S)#8ZF'&
c)#3S3dp08%P-49*I8dp98N0&4%P5+5!N+%0269"*6%95AdP13da94%9%59)T#RC
`BA4S)#8ZC("b)#3S3dp08%P-49*I8dp98N0&4%P5+5!N+%0269"*6%95AdP13da
94%9%59)T#RC`BA4S)#8N+&"3989B9#NJ*#K$6de358a&8Pp96NP89%&54d984%P
5+3SZ8%K26PNk)'C`BepTER0dB@aX)'C`BepcEh9bBf9TER0dB@aX)'C`BepPH'&
YF'aPD@jcG'&XE!TTCQ4PCL"*6P0838a-Ae915946#QpfCA*bD@4P)%P18e4"6%a
38&9'58a&8bXp*#KKC'4cG@CQDAJJ*#K38&9&@&3T,#3S58j69%&-6&p96NP88bN
T#Q9ZC'PQ#QPQC'9Q)%P18e4"6%aI3P9*6%496NP8#QpfCA*bD@4P)%P18e4"6%a
38&9'58a&8cSp*#KQD@adCA)YEh9d)#3S58j69%&-6&p#98P-4&91593T*#K38&9
&@&3T,#3S58j69%&-6&"398C*6%96+5N+C@jND@B+D@CNC@BJ58j69%&-6&"398C
*6%96#QpfCA*bD@4P)%P18e4"6%a38&9-58j,4NP-49-k253SFh9LFh3J*#K38&9
&@&3T,#3S6d9B9#NX*#K*6P0838a-8&"94NP-49-T+5!N+'&NC("bC@CTH#!N+&0
8394*3da*3P"548C*@#NX*#KcG@*cG#!N+&"3989B9#NX*#K69%&8580-58*&@&3
T,#3S58j69%&-6&"398C*6%96+5NT#QpfCA*bD@4P)%P18e4"6%a38&9'58a&8cS
p*#KKC'4`FQ9QDAJJ*#K96NP89%&54d984%P58&*&4NPB+5`N+%P18e4"6%a38&9
'58a&8bNT#QpfCA*bD@4P)%P18e4"6%a38&9-58j,4NP-49-k253SGfPXC'0KFQ3
J*#KKC'4`FQ9QDAJJ*#K96NP89%&54d984%P58&*&4NPB+5`N+%P18e4"6%a38&9
-58j,4NP-49-T+5N+EhCPFR*TC'8J58j69%&-6&p$8N9"9%93380,38G&4P"$26%
+C@jND@B+D@CNC@BJ58j69%&-6%9B48C*6%96#QpfCA*bD@4P)%P18e4"6%a&@%9
'58a&8cSp*#KKC'4`FQ9QDAJJ*#K839*(494%59*38N9'59JT,#3S58j69%&-6%9
B48C*6%96+5N+C@jND@B+CR"MAfPZFh4KE'`k)'&XE#!N+%P18e4"6%a839*(493
T#QPQC'9Q)%P18e4"6%a&@%9'58a&8`S**#K05d4*8LNJ*#K*6P0838a-Ad**6N4
*8LN+D@CNC@BJ99"B8&*24`S*,53S99"B8&*24bNJ*#K*6P0838a-49K&4NP-49-
T#Q9ZC'PQ#JNN+%P18e4"6%a&@%8T)#3S58j69%&-6%9B48C*6%96+5!N+%P18e4
"6%aI3NP14%P5+3TPEQ4TCJTTCQ4PCL"*6P0838a-Ad0548&849""3dY"4d9'8%-
+D@CNC@BJ4P"$68&,43TTCQ4PCL"3380,38G&AeC&8P0*6di+D@CZCA%J+#3SGfP
XC'0KFQ3J6@&VC@CTE'8ZCR"M+5`T#JNN+%C33de"5d8T)#e`)#e8*#K28ep839*
(493T)%eKDf9QD@aP,QC`B`S**#K05d4*8LNJ*#K*6P0838a-Ae91594%59)T#JN
N+%P18e4"6%`T)&"KBfYKCf8ZCR"M)#3S58j69%&-6&p96NP84%P5+3TPEQ4TCJT
PEQ4TCJTPEQ4TCJTPEQ4TCJTTCQ4PCL"*6P0838a-8&"94NP-49-+#53S68Y%59)
T)#3S58j69%&-6&p96NP84%P5+3S**#K*6P0838a-+5!N+%P18e4"6%a38&9'58a
&8bNJ*#K*6P0838a-Ae91594%59)T#QPQEQ9a)#JN+%P18e4"6%a38&9-58j,4NP
-49-T,#N+#53S58j69%&-6#NJ*#K*6P0838a-8&"96%P15dC*6%96+5!N+%P18e4
"6%aI98j*9%4*8LN+C@jND@B+D@CZCA%J+#3SGfPXC'0KFQ3J*#K-58*I4P9-6%j
"688T+5`T#JNN+%e,4%P5+5!N+%P18e4"6%aI6%P#4%P5+3S**#K*6P0838a-+5!
N+%a*3Pp'98a-6N&045NJ*#K*6P0838a-Ada*3N4*8LN+D@CNC@BJD@j9EQPi#JP
XEL!YFfBJ*#K-58*I4P9-6%j"688T)#3S58j69%&-6&p-58*%59)T,b3S6%P#Adj
"688T#Q9ZC'PQ#Q9ZC'PQ#Q9ZC'PQ#QPQC'9Q)%P18e4"6%aI4NP-49-+#53S68Y
%59)T)#3S58j69%&-6&p%394"4%P5+3S**#K*6P0838a-+5!N+%P18e4"6%aI4NP
-49-T)#3S58j69%&-6&p%394"4%P5+3TPEQ4TCJTQF'0IFfpeFQ0PD@jcG'&XE$S
JC'PcG'0XC@&Z#JNN+%e,4%P5+5!N+%P18e4"6%aI8dp98N0&4%P5+3S**#K$6e"
C9&*&45NJ*#K#390&4%P5+5mU)#3S58j69%&-6&p66e953d9%59)T#QC`BepPH'&
YF'aPD@jcG'&XE$SJ*#KKC'4cG@CQDAJJAf4TFh4ME'9KEL`N+&4"8NG&9&p&@%&
08%a&4%P58bNT#QPQC'9Q)%K"8d9B38e36%96#JNN+%e,4%P5+5!N+%P18e4"6%a
I49K"69"-484*8LN+C@jND@B+D@CNC@BJ49K"69"-490299*$48C*6%96#JNN+%0
28&NT)#3S49K"69"-490299*$48C*6%96+5!N+%P18e4"6%aI49K"69"-484*8LN
+C@jND@B+D@CNC@BJ9%&54d98Ad9B38e36%9%59*6#JNN+%028&P88N9&+5!N+'&
NC(0eCQCTH#![+L`N+&4"8NG&9&p&@%&08%a&4%P58bNT)#3S58j69%&-6&p&@%&
08%a&4%P5+3TPEQ4TCJSZ8%K26PNk)'C`BepME'9KEL"QF'0IBfaPB@jKE'`JCR"
MAf4TFh4ME'9KEJTTCQ4PCL"&@%9'58a&8`T[GQ9bFQPNC5"$6%9"6N9B48C*6%9
61MdN+'&NC("bC@CTH#!N+&4"8NG&9%4*8P"548C*@#NX*#K$6%9"6N9B48C*6%9
6+5N+C@jND@B+D@CNC@BJ3da&38jI98j*9&-+EhCPFR*TC'8J3da&38j38&9'58a
&8bXp*#KKC'4cG@CQDAJJ*#K38&9&@&3T,#3S3da&38jI98j*9&-T+3TPEQ4TCJT
TCQ4PCL"$6%9"6P"398C*6%96#QpfCA*bD@4P)%0-48&18&"96%P15dC*6%961Md
N+(0eBR0d)#3S8&"949K8+5`N+%p&@&3T,#3S3da&38j38&9'58a&8bNT)#3SB@4
NF(*PCQPi)#3S8e4"9%P$6%P#8&*&4NPB+5`N+(0eBR0d)#3S8&"949K8+5`N+&0
8394*3da*3N9B9#NX*#K$6%9"6P"398C*6%96+5NT#QPQC'9Q)%4&3P9(8eP049K
8#QpfCA*bD@4P)%0-48&18&"96%P15dC*6%96+cdN+(0eBR0d)#3S8&"949K8+5`
N+%4&3P9(8eP049K8+5`N+%0-48&18&"94NP-49-T+5!+C@jND@B+EhCPFR*TC'8
J3da&38j38&9'58a&8cSp*#KKC'4`FQ9QDAJJ*#K96NP89%&54d984%P58&*&4NP
B+5`N+%0-48&18&"94NP-49-T+3T[GQ9bFQPNC5"$6%9"6P"398a*6NY'58a&8cS
p*#KhD@aNBf&bC#!N+'&NC("bC@CTH#!N+&91594839*(494%59*38N9'59JT,#3
S3da&38j38&9-58j,4NP-49-T+5N+C@jND@B+CR"MAf0XC@&Z1L!N+%0-48&19%&
54d98+3TTCQ4PCL"$6%9"6N9B48C*6%96#JNY*#K%48`T)#3S3da&38j&@%9'58a
&8bN+C@jND@B+D@CNC@BJ3da&38j38&9'58a&8`S*,53S4%9-+5!N+%0-48&18&"
94NP-49-T#Q9ZC'PQ#QPQEQ9a)#JN+%0-48&18&"96%P15dC*6%96+5`T#JNY*#K
%48`T)#3S3da&38j38&9-58j,4NP-49-T#Q9ZC'PQ#QPQC'9Q)%0-48&18P084NP
-49-+#5dN+%4&6#NJ*#KKC'4`FQ9QDAJJ*#K96NP89%&54d984%P58&*&4NPB+5`
N+%0-48&18P084NP-49-T+3TPEQ4TCJTTCQ4PCL"$6%9"6Pp'58a&8`S*,53S4%9
-+5!N+%0-48&1AdC*6%96+3TPEQ4TCJTTCQ4PCL"-58*I6N&043S*,53S4%9-+5!
N+%a*3Pp138e&+5!N+%a*3Pp'98a-6N&045N+C@jND@B+#5dN+%4&6#NJ*#K'8%0
0384&+5"3B@0VB@GP,QC`Bb!N+&"339-T)(0MFQP`G#jbCA-JE'PZDbjbCA-J*#K
'8%0&@&4'58a&+5!N+&*&4%P54NP-45N+#5dN+%4&6#NJ+L3S390049K8+5!UAh"
`BA-N+%*"9%0)49K8+3TQF'0IC'PcG'0XC@&Z1L"ME'9KEJTTCQ4PCL"$6de358a
&8Pp96NP89%&54d984%P5#P4"8NG&9%4*8N0-48&12@C`BepME'9KEJTPEQ4TCJT
QF'0IBfaPB@jKE'`k)#3S3da&38j839*(493T)#3S9%&54d984%P53da&38iT#QP
QC'9Q)%0-48&149K&4NP-49-+#5dN+%4&6#NJ*#K$6%9"6N9B48C*6%96+3TPEQ4
TCJS*,53S4%9-+5!U*#K249K8+5!U*#K38&9&@&3T)#SN+&*69%9B9#NJ+L3S390
049K8+5!U*#K69%&8580-58*&@&3T)#SN+&0)39*&4%a*3N9B9#NJ+L3S8&"-49K
8+3S*,53S4%9-9&*&45NJ+L3S8de"8P4&@&3T#JNY*#K%48`T)#3S4P"$68&%45N
J8'&MDf&RC5jQF'-J*#K38%&6+5"cBh*TF(3ZFQ9c)'aTEQXZFQ9c)#3S4P"$49K
84NP-45NJ*#K5484*8NC*6%8T#JNY*#K%48`T)#TIF("KFb3S3N&83dK&@&3T#QP
QC'9Q)%&2994&@&3+#5dN+%4&6#NJ+L3S38p99%9B9#N+C@jND@B+D@CNC@BJ4%9
#98G6@8e&@&3+#5dN+%4&6#NJ+L3S4%9#98G6@8e&@&3T#Q9ZC'PQ#Lj35%p1@6S
JCR"MAf*KFf9TEQC[#QpfCA*bD@4P)%P14Np598a&8bXpCR"MAf*KFf9TEQC[#QC
`BepLBA0PD@jQEcS+#8!N+%9$5%mT#JP!*#K&3dK2+5!J26dJ8'&MDf&RC5"TEQC
[)$dp#JP!*#K&3dK2+5!J8'&MDf&RC5"1B@eP,T!&)#3S8%&$5d&(49p138e&+3S
*3#3S480)6bNJ)&"KBfYKCf8J9Q9bFfP[ELiZ)#3S8%&$5d&(49p@49*658p1+3S
*3#3S480)6bN+#8!N+%9$5%mT)#!p25"$EfjQD@GeFQ&dD@pZ)'PZCQmJ26d+#8!
N+%9$5%mT#JP!*#K&3dK2+5!J4P"$,T!+)#3S4P"$+3S*3#3S480)6bNJ)%C33b"
@CA*cD@pZ,LiJ*#K'8%0I9N958dP26LN+#8!N+%9$5%mT)#"6Eh9bBf8J3e"9,Li
Z)#3S3e"9Ae0299*$45N+#8!N+%9$5%mT)#"8BA*RCA3J3e"9,LiZ)#3S3e"9Ae4
"8NG&9#N+#8!N+%9$5%mT)#"6Eh9bBf8J6e-ZN!3J*#K28ep66e953d8T#JP!*#K
&3dK2+5!J9'&bCf9d)%p6,T!%)#3S6e0I9%&54d98+3S*3#3S480)6bNJ)%CeE'`
J8fpeFQ0P,LiJ*#K'98a-Ae0299*$45N+#8!N+%9$5%mT)#"'G@aX)&4KFQGPG#i
Z)#3S4P9-6&p839*(493T#JP!*#K&3dK2+3S*3#3S480)6bNJ)$dp)%4TFQ9MG'p
bH5"TEQC[)$dp#JP!*#K&3dK2+3S*3#3S480)6bNJ)&*PFA9TFQ9N)("VCh-Z,Li
J*#K549&959*&Ae""3dY"4d96+3S*3#3S480)6bN+#8!N+%9$5%mT)#"#BA0PC'P
b,T!*)#3S3N&6484*8LN+#8!N+%9$5%mT)#"'8%0%DA)ZN!SJ*#K'8%0%59)T#JP
!*#K&3dK2+5!J3h*[Fh0#D@j%DA)ZN!8J*#K$8Np68d**6N4*8LN+#8!N+%9$5%m
T)#"9EQPdFd4TFLk3##!N+&9159464%P5+3S*3#3S480)6bNJ)&"KBfYKCf9c4'P
b,T!&)#3S8%&$5d&(490%59)T#JP!*#K&3dK2+3S*3#3S480)6bNJ)%G$3b"XD@*
bBA*j,T!&)#3S4d0$6%P#4%P5+3S*3#3S480)6bNJ)%pdD'9b)'aTBR*KFRNZ,Li
J*#K29%K&8Na*3N4*8LN+#8!N+%9$5%mT#JP!*#K&3dK2+5!J26dJ9'p[E(-JD@j
QEb!p23S*3#3S480)6bN+#8!N+%9$5%mT)#""Fbk3##!N+%&6+3S*3#3S480)6bN
J)%aN,T!))#3S6%3T#JP!*#K&3dK2+5!J3A)ZN!JJ*#K"8LN+#8!N+%9$5%mT)#"
5Bbk3##!N+&*$+3S*3#3S480)6bN+#8!N+%9$5%mT)#"0GLk3##!N+%e@8&*24bN
+#8!N+%9$5%mT)#"$F#k3##!N+%038&*24bN+#8!N+%9$5%mT)#"5E5k3##!N+&*
08&*24bN+#8!N+%9$5%mT)#"(5@jcG'&XE#iZ)#3S4dP18e4"6%`T#JP!*#K&3dK
2+5!J4@0SEbk3"L!N+%9$5%mT#JP!*#K&3dK2+5!J8fKPE'`ZN!8J*#K65%9-6#N
+#8!N+%9$5%mT)#"%BA4P,T!')#3S4%&845N+#8!N+%9$5%mT)#"'8%00B@YP,Li
Z)#3S4P"$68&,45N+#8!N+%9$5%mT)#"38&90EhCP,LiZ)#3S8&"968p@45N+#8!
N+%9$5%mT)#"9F(JZN!FJ*#K98&K38Np(+3S*3#3S480)6bNJ)&TTF#k3"b!N+&T
*8&"56dFT#JP!*#K&3dK2+3S*3#3S480)6bNJ)$dp)%pLDQ9MG#"TEQC[)$dp#JP
!*#K&3dK2+3S*3#3S480)6bNJ)&4KFQGPG#"-Ef&NCA*c,T!))#3S9%&54d98Ada
2384&8P-T#JP!*#K&3dK2+5!J9'&bCf9d)&9ZDA4c,T!+)#3S9%&54d98Ae91594
6+3S*3#3S480)6bNJ)&4KFQGPG#"*EA"XD@0TG#"9EQPdFbiJ*#K839*(494I58e
36%P$59496NP88bN+#8!N+%9$5%mT)#"8BA*RCA3J8(*[Ch*KEA-ZN!FJ*#K839*
(494I8&*24e*"69-T#JP!*#K&3dK2+5!J9'&bCf9d)%4TFR-ZN!XJ*#K839*(494
I4%P58bN+#8!N+%9$5%mT)#"8BA*RCA3J4AKKEA"XCA-ZN!FJ*#K839*(494I49K
"69"-49-T#JP!*#K&3dK2+5!J9'&bCf9d)%9iB@e`E'9%DA*c,T!%)#3S9%&54d9
8Ad9B38e36%9%59*6+3S*3#3S480)6bN+#8!N+%9$5%mT)#"$E'9KEL"9EQPdFbk
3#5!N+%0-48&1Ae915946+3S*3#3S480)6bNJ)%0XC@&Z)%CTE'9c,T!*)#3S3da
&38jI4NP-49-T#JP!*#K&3dK2+3S*3#3S480)6bNJ)%PZFh4KE'`J9@jTG(-ZN!F
J*#K*6P0838a-Ae915946+3S*3#3S480)6bNJ)%PZFh4KE'`J4QPXCA-ZN!FJ*#K
*6P0838a-AdC*6%96+3S*3#3S480)6bN+#8!N+%9$5%mT)#!p25"*ER0dB@aX)'P
ZCQmJ26d+#8!N+%9$5%mT#JP!*#K&3dK2+5!J4'&dC90dFLk3$L!N+%4"9%969&)
T#JP!*#K&3dK2+5!J@QP`8(*PCQPi,T!-)#3S@NP38&*&4NPB+3S*3#3S480)6bN
J)&TTF&0eCQCTH#k3$#!N+&T*8&094NC*@#N+#8!N+%9$5%mT)#"*ER0dB@aX)%C
33b"3B@0VB@GP,LiJ*#K*6P0838a-AdC33e""3dY"4d8T#JP!*#K&3dK2+3S*3#3
S480)6bNJ)%PZFh4KE'`JBQ&cC5"NDA)ZN!8J*#K*6P0838a-Ad*"8d9%59)T#JP
!*#K&3dK2+5!J5@jcG'&XE#"LD@jKFRNJC'Pb,LiZ)#3S58j69%&-6&p#58j%59)
T#JP!*#K&3dK2+5!J5@jcG'&XE#"XD@*bBA*j)'4TFLiZ)#3S58j69%&-6&p-58*
%59)T#JP!*#K&3dK2+5!J5@jcG'&XE#"eEQPdFb"NDA)ZN!3J*#K*6P0838a-Ae9
1594%59)T#JP!*#K&3dK2+5!J5@jcG'&XE#"cEh9bBf8JC'Pb,LiZ)#3S58j69%&
-6&p66e953d9%59)T#JP!*#K&3dK2+5!J5@jcG'&XE#"NEf-JC'Pb,T!')#3S58j
69%&-6&p%6d0%59)T#JP!*#K&3dK2+5!J5@jcG'&XE#"PH'&YF'aP)'4TFLiZ)#3
S58j69%&-6&p&@%&08%a&4%P5+3S*3#3S480)6bNJ)%PZFh4KE'`JC'&dB5"NDA)
ZN!8J*#K*6P0838a-Ad4"9%&%59)T#JP!*#K&3dK2+3S*3#3S480)6bNJ)%4TFh3
JC'9cG'PZBA4TEfiJC'Pb,L!N+%4*8e4I4%969%4*8LN+#8!N+%9$5%mT)#"%DA0
d)(TTF#"ZB@eP,T!))#3S4%P69&pD59"138e&+3S*3#3S480)6bN+,P")6djC1L"
QF'0ID@jQE`TQF'0ID@jQEcSJ*#K*6NC28P9-49-T#Lj35%p1@6SJCR"MAfeKDf9
QD@aP)'C`BepYB@YPCQPXCA-JCR"MAfeKDf9QD@aPAh0eBM%JCR"MAfeKDf9QD@a
PAh0eBM)JA!S*CR"MAfeKDf9QD@aPAf4TFR-+CR"MAfeKDf9QD@aP1JS**#K'8%0
038Y&+5!YGb!Y9#3S6e0I9%&54d98+5"0B@YPCQPXC5jQF'-+CR"MAfeKDf9QD@a
PAh0eBM%k#QPQC'9Q)&4"8NG&9&p%59*6#JNN+%C33de"5d8T)#eh)#e8*#K28ep
839*(493T)#3SB@4NFh9QCQPi)#p0B@YPCQPXC5jQF'-X*#K839*(494I4%P58bN
T#Q9ZC'PQ#QPQC'9Q)&4"8NG&9&p&@%&08%a&4%P58`S**#K'8%0038Y&+5!YGb!
Y9#3S6e0I9%&54d98+5!N+'&NC(0eCQCTH#![6@&VC@CTE'8ZCR"M,#3S9%&54d9
8Ad9B38e36%9%59*6+5N+C@jND@B+CR"MAfeKDf9QD@aPAh0eBM)k)#3SB@4NFh9
QCQPi)&pYB@YPCQPXC9pNDA*c,#3S9%&54d98Ad4*8P-T)#3S9%&54d98Ad9B38e
36%9%59*6+5N+CR"MAfeKDf9QD@aPAf4TFR-k)'C`BepYB@YPCQPXC9pcG@)a)'C
`BepYB@YPCQPXC9pcG@)b#QC`BepYB@YPCQPXCA-k)'C`BepYB@YPCQPXC5"QF'0
IE@&VC@CTE'9IC'PbF`TKE'`k)'C`BepKE'`+C'9LG@Fk)'C`BepNC@*eC`TcE@&
bG$SJCR"MAh0YBA*d#R*PE'9KFf8k)'C`BepbC@aPBA0P#Q9iB@e`E'9c1JTcD'&
bC@3k#QPZFh4KE'`k)'C`BepTER0dB@aX#R0[GA*MC@PZFh4KE'`k)'C`BepcEh9
bBf9TER0dB@aX#Q9iB@e`E'9TER0dB@aX1L"QF'0ICAKKEA"XC@PZFh4KE'`+C'P
cG'PZFh4KE'`k#RTTF'PZFh4KE'`k#RTTF(0[GA*MC@PZFh4KE'`k#RTTF'9iB@e
`E'9TER0dB@aX1JTkDA"NDA0dD@jcG'&XE$S+C'PcG'0XC@&Z1L"QF'0IC'PcG'0
XC@&Z#QPZCQmk)'C`BepTEQC[#QeKDf9QD@aPFcSJCR"MAfeKDf9QD@aPF`SZ8%K
26PNk)'&XE#"NC@*eCb"cE@&bG#"bC@aPBA0P)'9iB@e`E'9c)(0SBA*PC#"TER0
dB@aX)(0[GA*MC@PZFh4KE'`JCAKKEA"XC@PZFh4KE'`JC'PcG'PZFh4KE'`JHQP
`D@jcG'&XE#"kDA"cEh9bBf9TER0dB@aX)(TTF'9iB@e`E'9TER0dB@aX)(TTF'4
TFh4TER0dB@aX)'4TFh4ME'9KEL"TEQC[)'eKDf9QD@aPF`TTCQjPF5!S*#KhD@a
NBf&bC#"QF'0YB@YP,Qa[BbNX+3TTEQ0XG@4P)'C`BfeKDf8ZE'pM#Q9ZC'PQ#Q0
XC@&Z1L"QF'0IBfaPB@i+#5dN+%4&6#NJC'*ND@GPFh3N+%9B489B9#N+BfaPB@j
KE'`k)'C`BepME'9KEQ&XE!S*,53S4%9-+5"NBQ4TCf9cG#3S49K&49K8+3S'23!
!!3!!!!%!N!JH!*$b!3!!!!%!N!JH!*!*(!!HrrrVM!:

29
tests/utils/Makefile.fpc Normal file
View File

@ -0,0 +1,29 @@
#
# Makefile.fpc for Free Pascal testing utilities
#
[prerules]
ifeq ($(USESQL),YES)
DBDIGEST=dbdigest
endif
[install]
fpcpackage=y
[default]
fpcdir=../..
[require]
packages = mysql
[target]
programs = dotest fail testfail digest $(DBDIGEST)
[rules]
# To always clean dbdigest regardless of USESQL
clean: fpc_clean
-$(DEL) dbdigest$(EXEEXT)
cleanall: fpc_cleanall
-$(DEL) dbdigest$(EXEEXT)