Nothing Special   »   [go: up one dir, main page]

Learning Modern C++ For Finance: Foundations For Quantitative Programming (Fourth Early Release) 4th Edition Daniel Hanson

Download as pdf or txt
Download as pdf or txt
You are on page 1of 49

Full download ebooks at https://ebookmeta.

com

Learning Modern C++ for Finance: Foundations


for Quantitative Programming (Fourth Early
Release) 4th Edition Daniel Hanson

For dowload this book click link below


https://ebookmeta.com/product/learning-modern-c-for-finance-
foundations-for-quantitative-programming-fourth-early-
release-4th-edition-daniel-hanson/

OR CLICK BUTTON

DOWLOAD NOW
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Probabilistic Machine Learning for Finance and


Investing - EARLY RELEASE 1st Edition Deepak Kanungo

https://ebookmeta.com/product/probabilistic-machine-learning-for-
finance-and-investing-early-release-1st-edition-deepak-kanungo/

Learning Functional Programming (Fifth Early Release)


Jack Widman

https://ebookmeta.com/product/learning-functional-programming-
fifth-early-release-jack-widman/

C# Cookbook: Modern Recipes for Professional Developers


(Early Release) 1 / Fifth Release: 2021-06-30 Edition
Joe Mayo

https://ebookmeta.com/product/c-cookbook-modern-recipes-for-
professional-developers-early-release-1-fifth-
release-2021-06-30-edition-joe-mayo/

Learning Go 2nd Edition 4th Early Release Jon Bodner

https://ebookmeta.com/product/learning-go-2nd-edition-4th-early-
release-jon-bodner/
Learning Google Analytics (Early Release) 4th Edition
Mark Edmondson

https://ebookmeta.com/product/learning-google-analytics-early-
release-4th-edition-mark-edmondson/

Mnemonics for Radiologists and FRCR 2B Viva Preparation


A Systematic Approach Aug 15 2013 _ 1908911956 _ CRC
Press 1st Edition Yoong

https://ebookmeta.com/product/mnemonics-for-radiologists-and-
frcr-2b-viva-preparation-a-systematic-approach-
aug-15-2013-_-1908911956-_-crc-press-1st-edition-yoong/

Modern Parallel Programming with C++ and Assembly


Language Daniel Kusswurm

https://ebookmeta.com/product/modern-parallel-programming-with-c-
and-assembly-language-daniel-kusswurm/

Programming C 12 0 Build Cloud Web and Desktop


Applications Early Release First Early Release:
2023-10-05 Edition Ian Griffiths

https://ebookmeta.com/product/programming-c-12-0-build-cloud-web-
and-desktop-applications-early-release-first-early-
release-2023-10-05-edition-ian-griffiths/

C 10 Pocket Reference Instant Help for C 10 Programmers


First Early Release 1 / 2021-12-07: First Early Release
Edition Joseph Albahari Ben Albahari

https://ebookmeta.com/product/c-10-pocket-reference-instant-help-
for-c-10-programmers-first-early-release-1-2021-12-07-first-
early-release-edition-joseph-albahari-ben-albahari/
Learning Modern C++ for
Finance
Foundations for Quantitative Programming

With Early Release ebooks, you get books in their earliest form—the
author’s raw and unedited content as they write—so you can take
advantage of these technologies long before the official release of these
titles.

Daniel Hanson
Learning Modern C++ for Finance
by Daniel Hanson
Copyright © 2023 Daniel Hanson. All rights reserved.
Printed in the United States of America.
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North,
Sebastopol, CA 95472.
O’Reilly books may be purchased for educational, business, or sales
promotional use. Online editions are also available for most titles (
http://oreilly.com ). For more information, contact our corporate/institutional
sales department: 800-998-9938 or corporate@oreilly.com .

Editors: Jeff Bleiel and Amanda Quinn

Production Editor: Ashley Stussy

Interior Designer: David Futato

Cover Designer: Karen Montgomery

Illustrator: Kate Dullea

July 2023: First Edition

Revision History for the First Edition


2022-04-27: First Release
2022-06-15: Second Release
2022-11-29: Third Release
2023-02-08: Fourth Release
See http://oreilly.com/catalog/errata.csp?isbn=9781098100803 for release
details.
The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Learning
Modern C++ for Finance, the cover image, and related trade dress are
trademarks of O’Reilly Media, Inc.
The views expressed in this work are those of the author, and do not represent
the publisher’s views. While the publisher and the author have used good
faith efforts to ensure that the information and instructions contained in this
work are accurate, the publisher and the author disclaim all responsibility for
errors or omissions, including without limitation responsibility for damages
resulting from the use of or reliance on this work. Use of the information and
instructions contained in this work is at your own risk. If any code samples or
other technology this work contains or describes is subject to open source
licenses or the intellectual property rights of others, it is your responsibility to
ensure that your use thereof complies with such licenses and/or rights.
978-1-098-10080-3
Chapter 1. An Overview of C++

A NOTE FOR EARLY RELEASE READERS


With Early Release ebooks, you get books in their earliest form—the
author’s raw and unedited content as they write—so you can take
advantage of these technologies long before the official release of these
titles.
This will be the 1st chapter of the final book. Please note that the GitHub
repo will be made active later on.
If you have comments about how we might improve the content and/or
examples in this book, or if you notice missing material within this
chapter, please reach out to the author at
learnmodcppfinance@gmail.com.

Before launching into programming in C++, it will be useful to present a


brief overview of the language the C++ Standard Library, and the ways in
which C++ continues to have a major presence in quantitative finance.
You may have already felt intimidated by opinions and rumors claiming that
C++ is extraordinarily difficult to learn and fraught with minefields. So, in
this chapter, we will try to allay these fears by first debunking some of the
common myths about C++, and then presenting straightforward examples to
help you get up and running.
Most of the content here is likely familiar for most readers, but the discussion
here attempts to extend some of the basics with points about quantitative
programming and best practices that often are not included in introductory
books. We will also have our first look at C++20, namely mathematical
constants that have been added to the C++ Standard Library.
By the end of the chapter, you should be able to write, compile, and run
simple C++ programs, understand basic numerical types, and employ
mathematical functions in the Standard Library that are fundamental in just
about any quantitative discipline, including finance.

C++ and Quantitative Finance


C++ started its rapid growth in the financial sector around the mid-1990’s.
Many of us who were in the industry around this time had been raised on
FORTRAN, particularly for writing numerical routines and scientific
applications. While FORTRAN and its supporting libraries were very well-
developed in terms of mathematical and linear algebra support, it lacked
support for object-oriented programming.
Financial modeling in the abstract is naturally comprised of different
components that interact with each other. For example, to price even a simple
derivative contract based on foreign exchange and interest rates, one would
typically require the following:
The term structure of interest rates for each currency
A market rate feed of live foreign exchange rate quotes
Volatility curves or surfaces for movements in FX rates and interest
rates
A set of pricing methods, eg closed form, simulation, or other numerical
approximations
Each of these components can be represented by an object, and C++ provided
the means for creating these objects and managing their relationships to each
other.
Banks and other financial institutions also needed a way to calculate risk
measures at both a regional and global scale. This was a particular challenge
for companies with trading operations spread across the major financial
centers of New York, London, and Tokyo, as well as other capital markets.
At the start of each trading day, risk reporting was required for a firm’s
headquarters in, say, New York that took into account the portfolios
maintained both locally and around the world. This could be a
computationally intensive task, but the performance of C++ made it possible
and was yet another significant factor in its early adoption in the financial
industry.
Around the turn of the century, newer object-oriented languages, such as Java
and C#, made software development a relatively simpler and faster process,
while more efficient processors became less expensive. However, the same
features in these languages that enabled quicker deployment, such as built-in
managed memory and intermediate compilation, could also introduce
overhead in terms of run-time performance. Management decisions on which
language to adopt often came down to a trade-off between more rapid
development and run-time efficiency. Even if one of these language
alternatives was employed, computationally intensive pricing models and risk
calculations were -- and still are -- often delegated to existing C++ libraries
and called via an interface. It should also be noted that C++ also offers
certain compile-time optimizations that are not available in these other
programming languages.

C++ 11: The Modern Era is Born


In 2011, the Standard C++ Foundation released a substantial revision that
addressed long-needed modernization and in particular provided some very
welcome abstractions that are immediately useful to quantitative developers.
These include:
Random number generation from a variety of probability distributions
Lambda expressions that encapsulate mathematical functions that can
also be passed as arguments
Task-based concurrency that can parallelize computations without the
need for manual thread management
Smart pointers that prevent memory-related program crashes, without
affecting performance
These topics and more will be discussed in the chapters ahead. An excellent
reference that covers the history and evolution of C++ into the modern era is
also available from O’Reilly: C++ Today: The Beast is Back, by Jon Kalb
and Gasper Azman [1]. It should also be noted that with more attention to,
and promotion of best practices[1] and guidelines[2] by the ISO C++
committee, cross-platform development is now a much easier task than in
years past.
And following C++11, new releases with more and more modern features
addressing the demands of financial and data science industries are being
rolled out on a threeyear cadence, with the most recent release being C++20.
This book will primarily cover developments through C++20, particularly
those that should be of interest to financial quant developers. Proposals
currently in the works for future standards are also mentioned where relevant.
Proprietary and high-frequency trading firms have been at the forefront of
adopting the C++11 Standard and later, where the speed of acting on market
and trading book signals in statistical strategies can mean a profound
difference in profit and loss. Modern C++ is also in keen demand for
derivatives pricing models utilized by traders and risk managers at
investment banks and hedge funds. The recent random number generation
and concurrency features in the Standard Library, for example, provide built-
in support for efficient Monte Carlo simulation that is a key component in
both evaluating trading strategies and pricing complex exotic options. These
tasks used to require many more hours of distributional random number
generation code development and time-consuming integration of platform-
dependent threading libraries.

Open Source Mathematical Libraries


Another very welcome development over the past decade has been the
proliferation of robust open-source mathematical libraries written in standard
C++ that therefore do not require the time-consuming C-language interface
gymnastics of the past. Primary among these are the Boost libraries, the
Eigen and Armadillo matrix algebra libraries, and machine learning libraries
such as TensorFlow and PyTorch. We will cover Boost and Eigen in more
detail later in the book.

Debunking Myths About C++


There are a multitude of myths about C++. Here are several of the more
infamous beliefs, and explanations which debunk them.
Knowledge of C is necessary for learning C++: While the C++ Standard
retains most of the C language, it is entirely possible to learn C++
without knowledge of C, as we shall see. Clinging to C style can in fact
hinder learning the powerful abstractions and potential benefits of C++.
C++ is too difficult: There is no doubt that C++ is a rich language that
provides plenty of the proverbial rope with which one can hang oneself,
but by leveraging _modern_ features of the language while holding
legacy issues in abeyance at the outset, it is entirely possible to become
very productive as a quantitative developer in C++ very quickly.
Memory leaks are always a problem in C++: With smart pointers
available since C++11, this no longer needs to be an issue in most
financial model implementations, as we shall see.

Compiled vs Interpreted Code


As alluded to above, C++ is a compiled language, where commands typed
into a file by us mere mortals are translated into binary instructions, or
machine code, that a computer processor will understand. This is in contrast
to non-typed and interpreted quantitative languages such as Python, R, and
Matlab, where each line of code must be individually translated to machine
code at run-time, thus slowing down execution time for larger applications.
This is by no means a knock on these languages, as their power is evident in
their popularity for rapid implementations of models arising in quantitative
fields such as finance, data science, and biosciences, with their built-in
mathematical and statistical functions are often compiled in C, C++, or
FORTRAN. However, the financial world at least is replete with stories
where a model would require days to run in an interpreted language, where
run times could be reduced to a matter of minutes when reimplemented in
C++.
An effective approach is to use interpreted mathematical languages with C++
in a complementary fashion. For example, when computationally intensive
models code is written in a C++ library, and then called either interactively or
from an application in R, for example, C++ efficiently takes care of the
number crunching. The results can then be used inside powerful plotting and
other visualization tools in R that are not available in C++.
Another advantage is that the models code is written once and maintained in
a C++ library that can be deployed across many different departments,
divisions, and even international boundaries, and called via interfaces from
applications in written in different front-end languages, while ensuring
consistent numerical results throughout the organization. This can be
particularly advantageous for regulatory compliance purposes.
Popular open-source C++ packages are available for both R and Python,
namely Rcpp and pybind11, respectively. Matlab also provides options for
C++ interfaces.

The Components of C++


Standard C++ releases, at a high level, consist of two components: language
features, and the C++ Standard Library. A software library is essentially a set
of functions and classes that are not executable on their own but that are
called by an application or system. Library development -- both open source
and commercial -- now dominates modern C++ development compared to
standalone applications that were popular in previous decades, and we will
discuss some of those later that are useful for computational work. The most
important C++ library is the Standard Library that is shipped with modern
compilers.
C++ Language Features
C++ language features mostly overlap with the essential operators and
constructs one would find in other programming languages, such as:
Fundamental integer and floating-point numerical types
Conditional branching: if/else if/else statements and
switch/case statements
Iterative constructs: for loops and while loops
Standard mathematical variable types: integer, double precision floating
point, etc
Standard mathematical and logical operators for numerical types:
addition, subtraction, multiplication, division, modulus, and inequalities
In addition, C++ is not limited to object-oriented programming; rather, the
language also supports the other three major programming paradigms,
namely procedural programming, generic programming, and functional
programming. Each of these will be discussed in subsequent chapters.
C++ is a strongly-typed language, meaning that before we use a variable, we
must declare it by its type. The language provides a variety of numerical
types; however, those that we will primarily use are as follows:

Minimum Maximum
Type Description Value Value

double Double +/- 2.2e-308 +/- 1.8e308


Precision

int Integer -2,147,483,648 2,147,483,647

Others, such as unsigned and extended integer types, will be introduced later
when we need them.
The C++ Standard Library
As Nicolai Josuttis describes it in his indispensable text, The C++ Standard
Library - A Tutorial and Reference, 2nd Edition[3], the C++ Standard Library
“enable(s) programmers to use general components and a higher level of
abstraction without losing portability rather than having to develop all code
from scratch.” Up through the latest C++20 release, highly useful library
features for quantitative model implementations include:
Array-style containers, particularly the venerable `vector` class
A wide set of standard algorithms that operate on these array containers,
such as sorting, searching, and efficiently applying functions to a range
of elements in a container
Standard real-valued mathematical functions such as square root,
exponential, and trigonometric functions
Complex numbers and arithmetic
Random number generation from a set of standard probability
distributions
Task-based concurrency that manages threads internally and safely
Smart pointers that abstract away the dangers associated with memory
management
A class to store and manage character data
Streaming functions to take input from and display results to the console
Use of Standard Library components, however, requires the programmer to
explicitly import them into the code, as they reside in a separate library rather
than within the core language. The idea is similar to importing a NumPy
array into a Python program or loading an external package of functions into
an R script. In C++, this is a two-step process, starting with loading the file
containing the Standard Library declarations of functions and classes we wish
to use, and then scoping these functions with the Standard Library namespace
name, `std` (often pronounced as “stood” by C++ developers).

Compilers and IDE’s


In order to get started with learning C++, you will need to obtain a compiler
and a development environment. The three major modern and freely available
compilers, which ship with their implementations of the C++ Standard
Library, are:
The Microsoft Visual Studio 2019 compiler
Clang (LLVM Project)
GNU gcc compiler
There are also several integrated development environments (IDE’s)
available, namely Visual Studio, Apple’s Xcode (which ships with the Clang
compiler), and CLion, a product that typically requires purchase from
JetBrains. For this book, Microsoft’s Visual Studio compiler and IDE are
highly recommended. They are user-friendly options to get up and running
quickly on C++, with very powerful debugging tools.
Furthermore, the Visual Studio option also includes a Clang option that
allows a programmer to switch between it and the Microsoft compiler,
helping to ensure cross-platform compatibility.
Unfortunately, the Visual Studio option for C++ only exists for Windows, as
the Mac version does not ship with a C++ option. In this case, one might opt
for downloading Apple’s Xcode, which ships with the Clang compiler. Linux
users will typically want to opt for the gcc or Clang compiler.

Basic Review of C++


The following will be a quick review of C++ using some simple code
examples. We will also have our first look at a new feature in C++20, namely
mathematical constants.
Good Old “Hello World!”
First, here is a “Hello World!” example to get started. The following code
will return the message to the screen, and then allow the user to input the
name of someone to whom to say hello:

#include <iostream>
#include <string>
int main()
{
std::cout << "Hello World!" << '\n';
std::string person;
std::cout << "To whom do you wish to say hello? ";
std::cin >> person;
std::cout << "Hello "<< person << "!" << '\n';
return 0;
}

If you want to say hello to your mother, then after compiling and running the
code, the screen would resemble the following:
Hello World!
To whom do you wish to say hello? Mom
Hello Mom!

The main review points here are


cout and cin, along with the string class, depend upon including the
C++ Standard Library declaration files iostream and string.
Members of the Standard Library need to be scoped by their namespace
std. An alternative is to put using statements with the namespace
scopes at the top of the file, indicating that anytime these elements
appear in the code, they are understood to be coming from the std
namespace. Also, you may find it easier to type endl (end of line)
rather than '\n’:

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
int main()
{
cout << "Hello World!" << endl;
string person;
cout << "To whom do you wish to say hello? ";
cin >> person;
cout << "Hello " << person << "!" << endl;
return 0;
}

Importing the std namespace into the global namespace with

using namespace std;

is sometimes used to replace the individual using statements; however,


this is not considered good practice, as it can result in naming clashes at
compile time. The motivation behind namespaces will be presented in
Chapter 3.
Output to and input from the console is almost never used in production-
level financial programming. User input data will typically come from
graphical user interfaces (GUIs) or web applications, while market data
usually comes from live feeds. Results are typically displayed in the user
interface and then stored in a database, such as when a trade in executed.
We will use cout and cin to sometimes mimic these inputs, but they
should be avoided in production code.

Simple Procedural Programming in C++


Another random document with
no related content on Scribd:
The Project Gutenberg eBook of Battleground
This ebook is for the use of anyone anywhere in the United States
and most other parts of the world at no cost and with almost no
restrictions whatsoever. You may copy it, give it away or re-use it
under the terms of the Project Gutenberg License included with this
ebook or online at www.gutenberg.org. If you are not located in the
United States, you will have to check the laws of the country where
you are located before using this eBook.

Title: Battleground

Author: Lester Del Rey

Release date: April 1, 2024 [eBook #73313]

Language: English

Original publication: New York, NY: King-Size Publications, Inc, 1954

Credits: Greg Weeks, Mary Meehan and the Online Distributed


Proofreading Team at http://www.pgdp.net

*** START OF THE PROJECT GUTENBERG EBOOK BATTLEGROUND


***
Battleground

By Lester del Rey

We know that the human race must


struggle to survive—and that
on the outcome may hang disaster.
But just how wide is Armageddon?

Lester del Rey would certainly


be acclaimed by any unbiased
critic as one of America's ten
most gifted science fiction
writers. His work has
appeared in many magazines,
and Hollywood, radio, and TV
have all enhanced his ever-
growing popularity. In
BATTLEGROUND he has found
a theme worthy of his rare
talents—the doom potential in
an alien culture.
[Transcriber's Note: This etext was produced from
Fantastic Universe July 1954.
Extensive research did not uncover any evidence that
the U.S. copyright on this publication was renewed.]
Beyond the observation port of the hypercruiser Clarion lay the utter
blackness of nothing. The ship was effectively cutting across space
without going through it, spanning parsecs for every subjective day
of travel.
There were neither stars, space nor time around them, and only the
great detectors built into the ship could keep them from being
hopelessly lost. These followed a trail of energy laid down on the
way out from Earth years before, leading them homeward, solar
system by solar system.
Acting Captain Lenk stood with his back to the other three, studying
their sullen reflections in the port. It was better than facing them
directly, somehow, even though it showed his own bald scalp, tautly
hollow face and slump-shouldered body.
"All right," he said at last. "So we vote again. I'll have to remind you
we're under orders to investigate all habitable planets on a line back
to Earth. I vote we follow orders. Jeremy?"
The xenologist shrugged faintly. His ash-blond coloring, general
slimness and refinement of features gave him a look of weakness,
but his voice was a heavy, determined bass. "I stand pat. We didn't
explore the last planet enough. I vote we go back and make a
thorough job of it."
"Home—at once!" The roar came from the squat, black-bearded
minerologist, Graves. "God never meant man to leave the world on
which He put him! Take us back, I say, where...."
"Aimes?" Lenk cut in quickly.
They'd heard Graves' violently fundamentalist arguments endlessly,
until the sound of his voice was enough to revive every antagonism
and hatred they had ever felt. Graves had been converted to the
newest and most rapidly expanding of the extreme evangelical faiths
just before they had left. And unfortunately for the others, he had
maintained that his covenant to go on the exploration could not be
broken, even though venturing into space was a cardinal sin.
Aimes glowered at the others from under grizzled eyebrows. Of
them all, the linguodynamicist took part in the fewest arguments
and apparently detested the others most. He turned his heavy body
now as he studied them, seemingly trying to make up his mind
which he detested most at the moment. Then he grunted.
"With you, Captain," Aimes said curtly.
He swung on his heel and stalked out of the control cabin, to go
back to studying the undeciphered writing of the planets they had
visited.
Graves let out a single hiss and followed, probably heading for the
galley, since it was his period to cook.
Jeremy waited deliberately until the minerologist's footsteps could no
longer be heard, and then turned to leave.
Lenk hesitated for a second, then decided that monotony was worse
than anything else. "How about some chess, Jeremy?" he asked.
The other stopped, and some of the sullenness left his face.
Apparently the protracted arguments had wearied him until he was
also feeling the relief of decisive action. "Why not?" Jeremy said. "I'll
set up the board while you fiddle with your dials."
No fiddling was necessary, since Lenk had never cut them off their
automatic detecting circuit, but he went through the motions for the
other's benefit. Gravitic strain came faintly through hyperspace, and
the ship could locate suns by it. If approach revealed planets of
habitable size, it was set to snap out of hyperspace automatically
near the most likely world.
Lenk had been afraid such a solar system might be found before
they could resolve the argument, and his own relief from the full
measure of cabin fever came from the end of that possibility.
They settled down to the game with a minimum of conversation.
Since the other four members of the crew had been killed by some
unknown virus, conversation had proven less than cheerful. It was
better when they were on a planet and busy, but four people were
too few for the monotony of hypertravel.
Then Jeremy snapped out of it. He cleared his throat tentatively
while castling, grimaced, and then nodded positively. "I was right,
Lenk. We never did explore those other planets properly."
"Maybe not," Lenk agreed. "But with the possibility of alien raiders
headed toward Earth...."
"Bunk! No sign of raiders. Every indication was that the races on
those worlds killed themselves off—no technology alien to their own
culture. And there would have been with aliens invading."
"Time that way? Coincidence can account for just so much."
"It has to account for the lowering cultural levels in the colonizing
direction," Jeremy said curtly. "Better leave that sort of argument to
Aimes. He's conditioned to it."
Lenk shrugged and turned back to the chess. It was over his head,
anyhow.
Men had built only three other cruisers capable of exceeding the
speed of light, so far. The first had gone out in a direction opposite
to that of the Clarion and had returned to report a regular decline in
culture as the distance of habitable worlds from Earth increased. The
nearest was in a medieval state, the next an early bronze culture,
then a stone-age one, and so on, down to the furthest explored,
where the native race had barely discovered fire.
It had been either impossible coincidence or the evidence of some
law nobody has been quite ready to accept, save for the newly
spreading fundamentalists, who maintained it proved that Earth was
the center of the universe.
The other two cruisers had not reported back when the Clarion took
off.
And their own trip had only added to the mystery, and they had
touched on four habitable systems. And on each, there had been
evidence of a highly developed race and some vast struggle that had
killed off that race completely.
The furthest had lain fallow for an unguessable period of time, and
in each succeeding one, evidence indicated the time interval since
the destruction of the culture had been less. On the world they had
left, the end must have come not more than a few thousand years
before.
"Suppose one race had gone along in a straight line, seeding the
systems with life," Lenk guessed. "Remember, every race we found
had similarities. And suppose another race of conquerors stumbled
on that line and is mopping up? Maybe with some weapon that
leaves no trace."
Jeremy looked at him. "Suppose Graves is right, and his God wipes
out all wicked races. He keeps planting races, hoping they'll turn out
right, and wiping out the old ones?" he snorted. "Only, of course he
thinks Earth is the only world that counts. We're dealing with facts,
Lenk, not wild theories. And why should an alien race simply wipe
out another race, wait a thousand years or so, and move on—
without using the plant afterwards, even for a base for the next
operation? Also, why should we find plenty of weapons, but no
skeletons?"
"Skeletons are pretty fragile. And if somebody had the mythical heat
ray...."
"Bunk! If it would vaporize calcium in the bones, it would vaporize
some of the parts of the weapons we found." Jeremy moved a rook,
considered it, and pointed. "Check. And there are always some parts
of skeletons that will last more than a thousand years. I've got a
theory, but it's...."
Pale light cut through the viewing port, and a gong sounded in the
room. Lenk jerked to his feet and moved to his screens.
"Maybe we'll know now," he said. "We'll be landing on a planet in
about an hour. And it looks pretty much like Earth, from here."
He cranked up the gain on the magnifiers, and studied it again,
scanning the surface of the planet below them. There were clouds in
the sky, but through a clear patch he made out enough evidence.
"Want me to set us down near a city?" he asked, pointing.
Jeremy nodded. Like all the other planets on this trip, the one below
was either inhabited or had been inhabited until recently.
They knew before the ship landed that the habitation was strictly
past tense, at least as far as any high level of culture was
concerned. The cities were in ruins.
At one time, they must have reared upwards to heights as imposing
as those of the free state of New York City or the commonwealth of
Chicago. But now the buildings had lost their top-most towers, and
the bases showed yawning holes in many places.
They landed in the center of the largest city, after a quick skim over
the surface to be sure that no smaller city had escaped. A quick
sampling of the air indicated it was breathable, with no poisons and
only a touch of radioactivity, too low to be dangerous.
Aimes and Jeremy went out, each in a little tractor. While making
explorations, they were capable of forgetting their antagonisms in
their common curiosity.
Graves remained on the ship. He had decided somewhere along the
line that setting foot on an alien planet was more sinful than travel
through space, and refused to be shaken.
Lenk finished what observations were necessary. He fiddled around,
bothered by the quiet city outside. It had been better on the other
worlds, where the ruins had been softened by time and weather.
Here, it was too easy to imagine things. Finally, he climbed into
rough clothes, and went out on foot.
Everything was silent. Grass almost identical with that of Earth was
growing through much of the torn pavement, and there were trees
and bushes here and there. Vines had climbed some of the ruined
walls. But there were no flowers. Much of the planet had apparently
been overgrown with forest and weeds, but this city was in a
temperate zone, and clear enough for easy travel.
Lenk listened to the wind, and the faint sighing of a few trees
nearby. He kicked over stones and rubble where they lay on patches
of damp earth. And he kept looking at the sky.
But it was no different from other worlds as far as the desolation
went. There were no insects, and no animals stared warily up from
the basements, and the grass showed no signs of having been
grazed. It was as if the animal kingdom had never existed here.
He made his way back from the section of largest buildings, toward
what might have been a park at one time. Here there was less
danger of being trapped in any collapsing ruin, and he moved more
confidently. The low buildings might have been public sites, but they
somehow seemed more like homes.
He stumbled on something, and leaned down to pick it up. At first,
the oddness of its design confused his vision. Then he made out a
barrel with rifling inside, and a chamber that still contained pellets,
now covered with corrosion. It would have fitted his hand oddly, but
he could have used the pistol.
Beyond it lay a line of rust that might have been a sword at one
time. Coiled over it was a heavy loop of thick plastic that ended in a
group of wires, apparently of stainless steel. Each wire ended in a
row of cutting points. It might have been a cross between a knout
and a bolas. He had a vision of something alien and sinister coming
at him with one of those, and shuddered.
There was a ruin of rust and corroded parts further on that might
have been a variation of a machine gun. Lenk started for it, to be
stopped by a shout.
"Hold it!" It was Jeremy's voice, and now the tank came around a
corner, and headed toward him. "Stay put, Lenk. That thing may be
booby-trapped. And we can't be sure here that there has been time
enough to make it safe."
Lenk shuddered again, and climbed in hastily as Jeremy held open
the door. It was tight inside, but reasonably safe, since the tank had
been designed for almost anything. Jeremy must have seen him
leaving the ship and followed.
But by noon they had abandoned the fear of booby-traps. Either
there had never been any or time had drawn their stings.
Lenk wandered through the section already roughly surveyed, and
declared safe. He felt convinced the inhabitants of this world once
had been more like men than most other races. They had been two-
legged, with arms and heads in a human position on their upright
bodies.
Judging from the size of the furniture, they had been slightly larger
than men but not enough to matter. The pictures on the walls were
odd mostly for the greenish tints of the skin and the absence of
outward noses or ears. With a little fixing and recoloring, they might
have been people.
He came to a room that had been sealed off, pried open the door,
and went in. It smelled stale enough to indicate that it had been
reasonably air-tight. Benches and chairs ran along one wall, and a
heavy wooden table occupied the middle. On that were piled bits
and pieces in a curious scramble. He studied them carefully—belts,
obviously, buttons, the inevitable weapons, scraps of plastic
material.
A minute later, he was shouting for Jeremy over the little walkie-
talkie. The xenologist appeared in less than five minutes. He stared
about for a second, then grinned wryly.
"Your first, eh? I've found a lot of them. Sure, those were corpses
there once." He saw Lenk's expression, and shrugged. "Oh, you
were right to call me. It proves we weren't crazy. Wood and some
cloth still preserved, but no bones. I've got a collection of pictures
like that."
"A corrosive gas—" Lenk suggested.
Jeremy shook his head vigorously. "No dice, Captain. See that belt?
It's plant fiber—something like linen. No gas strong enough to eat
up a body would leave that unharmed. And they had skeletons, too
—we've found models in what must have been a museum. But we
can't even find the fossil skeletons that should be there. Odd,
though."
He prodded about among the weapons, shaking his head. "All the
weapons in places like this show evidence of one homogeneous
design. And all the ornaments are in a T shape, like this one."
He lifted a stainless metal object from the floor and dropped it. "But
outside in the square, there are at least two designs. For once, it
almost looks as if your idea of an alien invader might be worth
considering."
The radio at his side let out a squawk, and he cut it on listening to
the thin whisper that came from it. Abruptly, he swung about and
headed toward his tractor outside, with Lenk following.
"Aimes has found something," Jeremy said.
They found the linguodynamicist in the gutted ruins of a building
into which great concrete troughs led. A rusty ruin in one of the
troughs indicated something like a locomotive had once run in it,
apparently on great ball bearings. The fat man was pointing
excitedly toward something on one of the walls.
At first glance, it seemed to be a picture of more of the green
people, apparently undergoing some violent torture. Then their eyes
swept on—and they gasped.
Over the green people, three vaguely reptilian monstrosities were
hovering, at least twice the size of the others, all equipped with the
fanged whips Lenk had seen. One of the green men was apparently
trying to defend himself with a huge T-shaped weapon, but the
others were helpless. The reptilian monsters sprouted great ugly
wings of glaring red from their shoulders.
"The invaders," Lenk said. They were horrible things to see. "But
their weapons weren't that big...."
"A war poster!" Aimes said bitterly. "It doesn't tell a thing except that
there were two groups."
Jeremy studied it, more closely. "Not necessarily even that. It's
designed for some emotional effect. But at least, it's a hint that
there may have been enemies unlike the ones who lived here. Lenk,
can I take the scout ship out?"
"Go ahead," Lenk told him. He frowned at the poster. "Jeremy, if that
means the human race is going to have to face an alien invasion
from monsters like that...."
"It means nothing!"
Jeremy went off, with Aimes apparently in agreement for a change.
Lenk stood studying the poster. Finally he ripped it down, surprised
to find how strong it still was, and rolled it up to carry back to the
ship.
Each world had been razed more recently, and each with the same
curious curse. The race had risen to a high culture, and then had
seemingly been wiped out in a few brief years. The destruction had
accounted for all life on the planet, other than vegetable—and had
wiped out even the bones. All that had been left was a collection of
weapons and relics of more doubtful use.
The pattern was the same. The direction was steadily toward Earth,
leaping from planet to planet at jumps of thousands of years apart,
or perhaps mere hundreds. This planet must have been attacked
less than five hundred years before, though it was hard to tell
without controlled study of decay here.
Even now Earth might be suffering the invasion! They had been
gone nearly three years. And during that time, the monsters might
have swooped down hideously out of space.
They might return to find the Earth a wasteland!
His thoughts were a turmoil that grew worse as he stared at the
poster. The unknown artist had done his job well. A feeling of horror
poured out of it, filling him with an insensate desire to find such
monstrosities and rend and maim them, as they had tormented the
unfortunate green people.
Graves came stomping up to the control room, carrying lunch, and
took one look at the picture. "Serves the heathens right," he
grumbled. "Look at them. In hell, suffering from the lashes of the
devils of the pit. And still holding up that heathen charm."
Lenk blinked. But Graves' idea wasn't too fantastic, at that. The
creatures did look like devils, and the T-shaped object might be a
religious symbol. Hadn't some faith or other used the tau cross in its
worship? And those objects on the third world back had resembled
swastikas, which were another religious symbol on Earth.
That part fitted. During periods of extreme stress or danger, man
sought some home in his faith. Was it so unnatural that alien races
might do the same?
"Isn't there anything hopeful in your religion, Graves?" he asked
bitterly, wondering what the man had been like before his
conversion to the rigidity he now possessed. He'd probably been as
violent an atheist. Usually, a fanatic who switched sides became
doubly fanatical.
The revival of religious devotion had begun some fifteen years
before, and from what Lenk had seen, the world had been a better
and more kindly place for it. But there would always be those who
thought the only true devotion lay in the burning of witches. Or
maybe Graves needed psychiatric treatment for his morose moods
were becoming suspiciously psychotic, and his fanaticism might be
only a sign of deeper trouble.
The man went off muttering something about the prophecy and the
time being at hand for all to be tried in fire. Lenk went back to
staring at the poster until he heard the scout come back. He found
Aimes and Jeremy busy unloading what seemed to be loot enough
to fill two of the scouts.
"A whole library, almost intact," Aimes spoke with elation. "And
plenty of it is on film, where we can correlate words and images! In
two weeks, I'll speak the language like a native."
"Good!" Lenk told him. "Because in about that time, we'll be home
on Earth. As long as there's any chance that our people should be
warned about invaders, I'm not delaying any longer!"
"You can forget the alien invaders," Jeremy objected.
Then he exploded his thunderbolt. The horrible aliens had proved to
be no more than a group of purple-skinned people on the other side
of the planet with a quite divergent culture, but of the same basic
stock as the green-skinned men. They also exaggerated in their
drawings, and to about the same degree.
Fortunately the treasure-trove from the library would give the two
men enough for years of work, and required the attention of a full
group. They were eager now to take off for Earth and to begin
recruiting a new expedition, taking only enough with them for the
first basic steps.
Lenk headed directly for the control room. He began setting up the
proper directions on the board while Jeremy finished the account.
"But something's hitting the planets," he objected. His hand found
the main button and the Clarion began heading up through the
atmosphere on normal gravity warp, until she could reach open
space, and go into hyperdrive. "Your monsters prove to be only
people—but it still doesn't explain the way disaster follows a line
straight toward Earth! And until we know...."
"Maybe we'd be better off not knowing," Jeremy said. But he refused
to clarify his statement.
Then the hyperdrive went on.
The homeward trip was somewhat different from the others. There
were none of the petty fights this time.
Aimes and Jeremy were busy in their own way, decoding the
language and collating the material they had.
Graves was with them, grumbling at being around the heathen
things, but apparently morbidly fascinated by them.

Lenk could offer no help, and his duty lay with the ship. He
pondered over the waves of destruction that seemed to wash toward
Earth, and the diminishing cultural levels on the planets beyond. It
couldn't be pure coincidence. Nor could he accept the idea that
Earth was the center of the universe, and that everything else was
necessarily imperfect.
Surprisingly, it was Graves who gave him his first hopeful suggestion.
A week had passed, and they were well into the second when the
men really caught his attention. Graves was bringing his lunch,
actually smiling. He frowned.
"What gives?" he asked.
"It's all true!" Graves answered, and there was an inner glow to him.
"Just as it's prophesied in Revelations. There were times when I had
doubts, but now I know. God has set the heathens before me as
proof that Armageddon will come, and I have been singled out to
bring the glad tidings to His faithful!"
"I thought you didn't believe God would have anything to do with
heathens!" Lenk objected. He was trying to recall whether a sudden
phase of manic joy was a warning symptom or not.
"I misunderstood. I thought God had forbade space flight. But now it
is proved how He loves us. He singled us out to teach us to fly
through space that we could learn." Graves gathered up the dishes
without noticing that Lenk hadn't touched them and went off in a
cloud of ecstasy.
But his point had been made, and Lenk turned it over. Then, with a
shout, he headed toward the headquarters of the two remaining
scientists. He found them sitting quietly, watching a reel of some
kind being projected through an alien device.
"I hear it's Armageddon we're facing," he said.
He expected grins of amusement from them—or at least from
Jeremy. But none came. Aimes nodded.
"First progress in all directions. Then a period when religion seems
to be in the decline. Then a revival, and a return to faith in the
prophecies. All religions agree on those prophecies, Lenk.
Revelations refer to the end of Armageddon, when the whole world
will wipe itself out before the creation of a better world, in one
planet-wide war. The old Norse legends spoke of a Fimbulvetr, when
the giants and their gods would destroy the earth in war. And these
green-skinned peoples had the same religious prophecies. They
came true, too. Armageddon. Contagious Armageddon."
Lenk stared from one to the other, suspecting a joke. "But that still
leaves coincidence—the way things move from planet to planet...."
"Not at all," Jeremy said. "These people didn't have space travel, but
they had some pretty highly developed science. They found what we
thought we'd disproved—an ether drift. It would carry spores from
planet to planet—and in the exact direction needed to account for
what we've seen. Races were more advanced back that way, less so
the way we first went, simply because of the time it took the spores
to drift."
"And what about the destruction?" Lenk asked woodenly. Their faces
were getting him—they looked as if they believed it. "Is there
another disease spore to drive races mad?"
"Nothing like that. Just the natural course of cultures when they
pass a certain level," Jeremy answered. "I should have seen that
myself. Every race follows the same basic pattern. The only question
is how much time we've got left—a week or a thousand years?"
They turned back to their projection device, but Lenk caught the
xenologist by the shoulder and swung him back. "But they didn't
have space travel! That doesn't fit their pattern. Even if you're
right...."
Jeremy nodded. "We don't have the secret of immortality, either. And
this race did. But, damn it, I'd still like to know what happened to all
those skeletons?"
Lenk went back to his control room. And perversely, his thoughts
insisted on accepting their explanation. It would be like man to think
that important things could only happen on his own home planet,
and prophecy an end for his own race, never dreaming it could
happen to others.
It would be normal for him to sense somehow out of his own nature
what his inevitable end must be—and then to be completely amazed
when he found the same end for other races.
But....
Space travel—travel at faster than light speeds—had to make a
difference. There were the other worlds on the other side of the sun,
where men were already planning to colonize. Even if a world might
normally blow up in a final wild holocaust, it would have its whole
racial pattern changed when it began to spread out among the stars.
It would have to have a revival of the old pioneering spirit. There
had been the beginnings of that when they left. And with that, such
a war could be prevented forever.
He heard Graves moving about in the galley, singing something
about graves opening, and grimaced.
Besides, Jeremy had admitted that they didn't have all the answers.
The mystery of the vanished skeletons remained—and until that was
accounted for, nothing could be considered explained.
He forgot about the skeletons as he began planning how he'd
wangle his way into one of the colonies. Then, even if catastrophe
did strike Earth in another thousand years or so, the race could go
on. Ten more years, and man would be safe....
He was feeling almost cheerful as they finally came out of
hyperspace near Earth ... and landed....
The skeletons—lay scattered everywhere.
*** END OF THE PROJECT GUTENBERG EBOOK BATTLEGROUND
***

Updated editions will replace the previous one—the old editions will
be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the free


distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only be


used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.

1.E. Unless you have removed all references to Project Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is derived


from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is posted


with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning
of this work.

1.E.4. Do not unlink or detach or remove the full Project


Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute this


electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the Project
Gutenberg™ License.

1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or providing


access to or distributing Project Gutenberg™ electronic works
provided that:

• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”

• You provide a full refund of any money paid by a user who


notifies you in writing (or by e-mail) within 30 days of receipt
that s/he does not agree to the terms of the full Project
Gutenberg™ License. You must require such a user to return or
destroy all copies of the works possessed in a physical medium
and discontinue all use of and all access to other copies of
Project Gutenberg™ works.

• You provide, in accordance with paragraph 1.F.3, a full refund of


any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.

• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.

1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™


electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
the Project Gutenberg Literary Archive Foundation, the manager of
the Project Gutenberg™ trademark. Contact the Foundation as set
forth in Section 3 below.

1.F.

1.F.1. Project Gutenberg volunteers and employees expend


considerable effort to identify, do copyright research on, transcribe
and proofread works not protected by U.S. copyright law in creating
the Project Gutenberg™ collection. Despite these efforts, Project
Gutenberg™ electronic works, and the medium on which they may
be stored, may contain “Defects,” such as, but not limited to,
incomplete, inaccurate or corrupt data, transcription errors, a
copyright or other intellectual property infringement, a defective or
damaged disk or other medium, a computer virus, or computer
codes that damage or cannot be read by your equipment.

1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for


the “Right of Replacement or Refund” described in paragraph 1.F.3,
the Project Gutenberg Literary Archive Foundation, the owner of the
Project Gutenberg™ trademark, and any other party distributing a
Project Gutenberg™ electronic work under this agreement, disclaim
all liability to you for damages, costs and expenses, including legal
fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR
NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR
BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH
1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL
NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.

1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you


discover a defect in this electronic work within 90 days of receiving
it, you can receive a refund of the money (if any) you paid for it by
sending a written explanation to the person you received the work
from. If you received the work on a physical medium, you must
return the medium with your written explanation. The person or
entity that provided you with the defective work may elect to provide
a replacement copy in lieu of a refund. If you received the work
electronically, the person or entity providing it to you may choose to
give you a second opportunity to receive the work electronically in
lieu of a refund. If the second copy is also defective, you may
demand a refund in writing without further opportunities to fix the
problem.

1.F.4. Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,

You might also like