##### Citation preview

PRACTICAL GEOMETRY ALGORITHMS with C++ Code

Daniel Sunday PhD

Copyright © 2021, Daniel Sunday All rights reserved. ISBN 9798749449730 Self-published with Amazon KDP First Printing: May 2021.

TABLE OF CONTENTS PREFACE ................................................................................................................... V INTRODUCTION ....................................................................................................... VI LINEAR ALGEBRA .................................................................................................... 1 NOTATION................................................................................................................. 1 COORDINATE SYSTEMS ............................................................................................. 1 POINTS AND VECTORS............................................................................................... 3 Basic Definitions ................................................................................................. 3 Vector Addition ................................................................................................... 3 Scalar Multiplication ............................................................................................ 4 Affine Addition ..................................................................................................... 5 Vector Length ..................................................................................................... 6 VECTOR OPERATIONS ............................................................................................... 8 Determinants....................................................................................................... 8 Dot Product ......................................................................................................... 8 2D Perp Operator ..............................................................................................11 2D Perp Product ................................................................................................12 3D Cross Product ..............................................................................................13 3D Triple Product ...............................................................................................15 AREA ..........................................................................................................................17 TRIANGLES ...............................................................................................................17 Ancient Triangles ................................................................................................17 Modern Triangles ................................................................................................18 QUADRILATERALS .....................................................................................................19 POLYGONS ...............................................................................................................22 2D Polygons........................................................................................................22 3D Planar Polygons ............................................................................................23

Standard Formula ........................................................................................................23 Quadrilateral Decomposition ........................................................................................25 Projection to 2D ...........................................................................................................25

IMPLEMENTATIONS ....................................................................................................26 REFERENCES ............................................................................................................30 LINES .........................................................................................................................31

LINE EQUATIONS .......................................................................................................32 DISTANCE FROM A POINT TO A LINE ...........................................................................34 The 2-Point Line .................................................................................................34 The 2D Implicit Line ............................................................................................35 The Parametric Line ...........................................................................................36 DISTANCE FROM A POINT TO A RAY OR SEGMENT .......................................................37 IMPLEMENTATIONS ....................................................................................................38 REFERENCES ............................................................................................................40

i

POINT IN POLYGON .................................................................................................41 THE CROSSING NUMBER ...........................................................................................42 Edge Crossing Rules ..........................................................................................43 THE WINDING NUMBER..............................................................................................44 ENHANCEMENTS .......................................................................................................46 Bounding Box or Ball ..........................................................................................46 3D Planar Polygons ............................................................................................47 Convex or Monotone Polygons...........................................................................47 IMPLEMENTATIONS ....................................................................................................48 REFERENCES ............................................................................................................49 PLANES .....................................................................................................................51 PLANE EQUATIONS ....................................................................................................52 Implicit Equation .................................................................................................52

Normal Implicit Equation ..............................................................................................52

Parametric Equation ...........................................................................................53 Barycentric Coordinates .....................................................................................54 Representation Conversions ..............................................................................54

Barycentric Coordinate Computation ...........................................................................54

DISTANCE OF A POINT TO A PLANE .............................................................................56 IMPLEMENTATIONS ....................................................................................................57 REFERENCES ............................................................................................................58 LINE, SEGMENT, AND PLANE INTERSECTIONS .................................................59

LINE AND SEGMENT INTERSECTIONS ..........................................................................59 Parallel Lines ......................................................................................................59 Non-Parallel Lines ..............................................................................................60 PLANE INTERSECTIONS..............................................................................................61 Intersection of a Line and a Plane ......................................................................61 Intersection of 2 Planes ......................................................................................62

Direct Linear Equation .................................................................................................62 Line Intersect Point ......................................................................................................63 3 Plane Intersect Point .................................................................................................63

Intersection of 3 Planes ......................................................................................64 IMPLEMENTATIONS ....................................................................................................65 REFERENCES ............................................................................................................69 RAY AND TRIANGLE INTERSECTIONS.................................................................71 INTERSECTION OF A RAY/SEGMENT WITH A PLANE ......................................................71 Intersection of a Ray/Segment with a Triangle ...................................................71 INTERSECTION OF A TRIANGLE WITH A PLANE .............................................................73 Intersection of a Triangle with a Triangle............................................................74 IMPLEMENTATIONS ....................................................................................................75 REFERENCES ............................................................................................................77

ii

DISTANCE BETWEEN LINES........................................................................................79 DISTANCE BETWEEN LINES .............................................................................................79 Distance between Segments and Rays...................................................................81 CLOSEST POINT OF APPROACH (CPA) ............................................................................83 IMPLEMENTATIONS .........................................................................................................84 REFERENCES .................................................................................................................87 INTERSECTIONS FOR A SET OF SEGMENTS ...........................................................89 A SHORT SURVEY ..........................................................................................................89 THE BENTLEY-OTTMANN ALGORITHM ..............................................................................90 THE SHAMOS-HOEY ALGORITHM ....................................................................................93 APPLICATIONS ...............................................................................................................94 Simple Polygons ......................................................................................................94

Test if Simple ....................................................................................................................94 Decompose into Simple Pieces.........................................................................................94

Polygon Set Operations ...........................................................................................96 Planar Subdivisions .................................................................................................96 IMPLEMENTATIONS .........................................................................................................96 REFERENCES ................................................................................................................101 BOUNDING CONTAINERS ..........................................................................................103 LINEAR CONTAINERS ....................................................................................................104 The Bounding Box .................................................................................................104 The Bounding Diamond .........................................................................................105 The Convex Hull ....................................................................................................107 The Minimal Rectangle ..........................................................................................108 QUADRATIC CONTAINERS .............................................................................................110 The Bounding Ball .................................................................................................110

A Fast Approximate Ball ..................................................................................................112

The Bounding Ellipsoid ..........................................................................................113 IMPLEMENTATIONS .......................................................................................................113 REFERENCES ...............................................................................................................115 CONVEX HULL OF A PLANAR POINT SET ..............................................................117

CONVEX HULLS............................................................................................................117 2D HULL ALGORITHMS .................................................................................................118 The "Graham Scan" Algorithm ..............................................................................118 Andrew's Monotone Chain Algorithm ....................................................................121 IMPLEMENTATIONS .......................................................................................................123 REFERENCES ...............................................................................................................125 CONVEX HULL APPROXIMATION .............................................................................127 THE BFP APPROXIMATE HULL ALGORITHM ...................................................................127 Error Analysis ........................................................................................................129 IMPLEMENTATIONS .......................................................................................................130 REFERENCES ...............................................................................................................133

iii

CONVEX HULL OF A SIMPLE POLYLINE .................................................................135 BACKGROUND ..............................................................................................................135 SIMPLE POLYLINE HULL ALGORITHMS ...........................................................................136 The Basic Incremental Strategy ............................................................................136 The Melkman Algorithm .........................................................................................137 IMPLEMENTATIONS .......................................................................................................140 REFERENCES ...............................................................................................................141 LINE AND CONVEX POLYTOPE INTERSECTION .....................................................143 INTERSECT A SEGMENT AND A 2D CONVEX POLYGON ....................................................143 INTERSECT A SEGMENT AND A 3DCONVEX POLYHEDRON...............................................146 IMPLEMENTATIONS .......................................................................................................149 REFERENCES ...............................................................................................................151 EXTREME POINTS OF CONVEX POLYGONS ..........................................................153 POLYGON EXTREME POINT ALGORITHMS ......................................................................153 Brute Force Search................................................................................................154 Binary Search ........................................................................................................154 DISTANCE OF A POLYGON TO A LINE .............................................................................157 IMPLEMENTATIONS .......................................................................................................158 REFERENCES ...............................................................................................................160 POLYGON TANGENTS ................................................................................................161 TANGENTS: POINT TO POLYGON ...................................................................................161 Brute Force ............................................................................................................163 Binary Search ........................................................................................................163 TANGENTS: POLYGON TO POLYGON ..............................................................................164 Brute Force ............................................................................................................165 Linear Search ........................................................................................................165 Binary Search ........................................................................................................167 IMPLEMENTATIONS .......................................................................................................167 REFERENCES ...............................................................................................................171 POLYLINE DECIMATION .............................................................................................173 OVERVIEW ...................................................................................................................173 VERTEX CLUSTER REDUCTION .....................................................................................174 THE DOUGLAS-PEUCKER ALGORITHM ...........................................................................175 Convex Hull Speed-Up ..........................................................................................178 IMPLEMENTATIONS .......................................................................................................178 REFERENCES ...............................................................................................................181 C++ CODE INDEX.........................................................................................................183 PRIMITIVE FUNCTIONS ..................................................................................................183 APPLICATION FUNCTIONS .............................................................................................185

iv

PREFACE This book presents practical geometry algorithms with computationally fast C++ code implementations. It covers algorithms for fundamental geometric objects, such as points, lines, rays, segments, triangles, polygons, and planes. These determine their basic 2D and 3D properties, such as area, distance, inclusion, and intersections. There are also algorithms t o compute bounding containers for these objects, including a fast bounding ball, various convex hull algorithms, as well as polygon extreme points and tangents. And there is a fast algorithm for polyline simplification using decimation that works in any dimension. These algorithms have been used in practice for several decades, and are robust, easy to understand, code, and maintain. And they execute very rapidly in practice, not just in theory. For example, the winding number point in polygon inclusion test, first developed by the author in 2000, is the fastest inclusion algorithm known, and works correctly even for nonsimple polygons. There is also a fast implementation of the Melkman algorithm for the convex hull of a simple polyline. And much more. If your programming involves geometry, this will be an invaluable reference. Also, all code given in this book can be downloaded in a zip file available at GeometryAlgorithms.com/code.html.

v

INTRODUCTION In 2000, I started the website GeometryAlgorithms.com, which has now been active for 2 decades. Originally, I used it to support master-level courses in Computer Graphics and Computational Geometry that I was teaching in the Johns Hopkins University Engineering for Professionals (JHEP) program. Eventually, that website took on a life of its own and became an international resource with a constant stream of visitors. All the algorithms presented were completed by 2001, although for the next two decades, there was some feedback from users that resulted in improvements. So, basically, these algorithms and the C++ code implementations have withstood the test of time. As a result, I have now (in 2021), decided to convert that website to a book that would be a permanent record of these fundamental algorithms. The website still exists but has reduced content. And all C++ code from that site is in this book can be downloaded from GeometryAlgorithms.com/code.html. Many of the algorithms given here were inspired by the excellent book “Computational Geometry in C” by Joseph O’Rourke (1998), which I used in my classes. This book can be viewed as a supplement for and an extension of O’Rourke’s book, with new improved material. For example, O’Rourke presents a “point in polygon” algorithm that uses the polygon crossing number of a ray from the point. We present a similar algorithm but use the winding number instead by counting signed crossings. This gives the correct result for nonsimple polygons and is implemented with code that executes faster than the crossing number code. Other algorithms we present either extend or improve some of those given by O’Rourke. However, O’Rourke’s book has material that we do not cover, such as the triangulation of polygons. But we present a lot of new material, such as bounding containers, the convex hull of a simple polyline, and polyline decimation. These all have practical fast C++ code implementations. This book starts with a chapter on basic linear algebra that provides the math needed to implement the algorithms. It was not relegated to an appendix since the ideas and notation are integral to the algorithm descriptions. Then, the next eight chapters cover basic geometric objects in 2D and 3D, such as lines, rays, segments, triangles, polygons, and planes. Then, the final eight chapters give algorithms for geometric bounding containers, convex hulls, extreme points and tangents of polygons, and polyline reduction using decimation. There are six chapters are about convex hulls and applications that use hulls to find extreme points and tangents. New algorithms and code are given for constructing hulls, namely, Andrew’s monotone chain, the fast BFP hull approximation, and the Melkman O(n) algorithm for the hull of a simple polyline. Finally, we give a polyline decimation approximation algorithm, with an improved implementation for the Douglas-Peucker algorithm. vi

LINEAR ALGEBRA The algorithms we will present only use basic linear algebra. This will only include points and vectors, but not matrices. However, we occasionally use 2x2 and 3x3 determinants to simplify some formulas.

Notation This book uses the following conventions for notation. Scalars

lower case italic

a, b, x, y

Points

UPPER CASE ITALIC

𝑃, 𝑄, 𝑅 𝑃 𝑝 ,𝑝 ,…,𝑝

Vectors

𝐥𝐨𝐰𝐞𝐫 𝐜𝐚𝐬𝐞 𝐛𝐨𝐥𝐝

𝐚, 𝐛, 𝐮, 𝐯, 𝐰 𝐯 𝑣 ,𝑣 ,…,𝑣

Geometric Objects

𝐔𝐏𝐏𝐄𝐑 𝐂𝐀𝐒𝐄 𝐁𝐎𝐋𝐃

𝐋, 𝐑, 𝐒, 𝐓, 𝚫, 𝛀, 𝚿

Functions

Regular font

Area Ω , f x

Font of the result

𝑃 𝑡 𝑥 𝑡 ,𝑦 𝑡 𝐯 𝑥, 𝑦

Coordinate Systems Points are positions in space. When first introduced in Greek geometry, there was no formal method for measuring where a point was located. Points were primitive entities. Much later in history, in the early seventeenth century, Fermat and Descartes introduced the idea of using a linear coordinate system to specify point locations, using algebraic equations to describe geometric objects (such as lines), and using algebra to solve geometric problems (such as computing the intersection point of two lines). We will only use rectangular linear coordinates, and no other methods for referencing points, such as polar or spherical coordinates.

1

A (rectangular linear) coordinate system has an origin as an absolute reference point whose location is fixed, and non-zero axes as a set of direction vectors that determine the directions in which to make measurements. A coordinate system can specify points in n-dimensional space as an ordered n-tuple of numbers 𝑥 , 𝑥 , …, 𝑥 and the numeric rule: start at the origin, go distance 𝑥 in the direction of the first axis, stop, now go distance 𝑥 in the direction of the second axis, stop, and so on until done with 𝑥 . The final location that one reaches is the point specified. This is much like finding the treasure on a pirate's map; for example, start at the old oak tree as the origin, first go east 10 paces, second go north 20 paces, and third dig down 3 feet to locate the treasure. The ordered set of numbers 𝑥 , 𝑥 , …, 𝑥 is called the coordinate of the point it specifies. And a coordinate system is said to span the set of points that it can specify. The set of all these points is called the coordinate space. A specific set of axes spanning a coordinate space is called a coordinate frame of reference or a basis for the space. Different coordinate systems can span the same coordinate space, just as the pirate may have used any of several origin trees or direction axes for his treasure map. The axes are said to be independent if they do not depend on each other, meaning that none of them can written as a combination of the others. When independent, they are a minimal set of axes for the coordinate space, and the number of axes in the set is the dimension of the space.

2

Points and Vectors Basic Definitions A scalar represents magnitude and is given by a real number a, b, x, y. A point in n-dimensional space is given by an n-tuple 𝑃 𝑝 , 𝑝 ,…,𝑝 where each coordinate 𝑝 is a scalar number. We will write 𝑃 𝑝 as a shorthand for this n-tuple. This position of a point is relative to a coordinate system with an origin 0 = (0,0,…,0) and unit axes u1 = (1,0,…,0), u2 = (0,1,…,0), ..., and un = (0,0,…,0,1). So, a 3-dimensional (3D) point is given by a triple 𝑃 𝑝 , 𝑝 , 𝑝 whose coordinates are relative to the axes (1,0,0), (0,1,0), and (0,0,1) which are commonly referred to as the x, y, and z-axes. Because of this established convention, we sometimes write 𝑃 𝑥, 𝑦 for 2D points and 𝑃 𝑥, 𝑦, 𝑧 for 3D points. A vector represents magnitude and direction in space and is given by an n-tuple 𝐯 𝑣 , 𝑣 , … , 𝑣 where each coordinate 𝑣 is a scalar. We also write 𝐯 𝑣 as a shorthand for the vector's n-tuple. The vector 𝐯 can be viewed as the magnitude and direction of the line segment going from the origin 0 = (0,0,…,0) to the point 𝑉 𝑣 , 𝑣 , … , 𝑣 . However, the vector 𝐯 is not this point, which only gives a standard way of visualizing the vector. But we can also visualize the vector as a directed line segment from any initial point 𝑃 𝑝 to a second point 𝑄 𝑞 . Then, the vector from P to Q is given by: Point Difference Definition

𝐯

𝑄

𝑃

𝑞

𝑝

showing that the difference of any two points is considered to be a vector. So, vectors do not have a fixed position in space, but can be located at any initial base point P. For example, a traveling vehicle can be said to be going east (direction) at 50 mph (magnitude) no matter where it is located. We could even visualize a field of vectors, one at each point of a geometric object, such as vectors for the wind direction and speed at each point on the surface of the earth.

Vector Addition The sum of two vectors is given by adding their corresponding coordinates. That is, for two vectors 𝐯 𝑣 and 𝐰 𝑤 , we have: Vector Addition Definition

𝐯

3

𝐰

𝑣

𝑤

Also, one can add a vector 𝐯 given by:

𝑣 to a point 𝑃

𝑝 to get another point,

𝑄

𝑃

𝐯

𝑝

𝑣

The resulting point Q is considered to be the displacement, or “translation”, of the point P in the direction of and by the magnitude of the vector 𝐯 𝑄 𝑃. Vector addition satisfies the following properties: 𝐮

𝐯

𝐰

𝐯

𝐰

𝐰

𝑃

𝐯

𝐰

𝐮

𝐯

𝐰

[Association]

𝐯

[Commutation] 𝑃

𝐯

𝐰

[Point+Vector Association]

The property of “Point+Vector Association” means that result of translating a point by two sequentially applied vector displacements is the same as a single translation by the sum of those two vectors.

Scalar Multiplication Multiplication of a vector 𝐯

𝑣 by a scalar number 𝑎 is given by

Scalar Multiply Definition

𝑎𝐯

𝑎𝑣

This represents scaling the size of a vector by a magnification factor of a. So, for example, 2𝐯 is twice the size of 𝐯, and 𝐯⁄2 is half of 𝐯. Scalar multiplication has the properties: 𝑎 𝑏𝐯

𝑎𝑏 𝐯

[Scalar Association]

𝑎

𝑏 𝐯

𝑎𝐯

𝑏𝐯

[Scalar Distribution]

𝑎 𝐯

𝐰

𝑎𝐯

𝑎𝐰

[Vector Distribution]

4

Scalar multiplication can be used to interpolate positions between two points P and Q. To get an intermediate point R between P and Q, given by a ratio r, one first scales the vector 𝐯 𝑄 𝑃 to r 𝐯, and then adds it to P to get 𝑅 𝑃 𝑟𝐯 𝑃 𝑟 𝑄 𝑃 1 𝑟 𝑃 𝑟 𝑄. For example, to get the midpoint M 𝑃 𝑄 ⁄2. between P and Q, use 𝑟 1⁄2 to compute 𝑀 This interpolation equation is also used to represent the line through P and Q as a function of a scalar parameter, with the parametric line equation 𝑃 𝑡

1

𝑡 𝑃

𝑡𝑄

which is valid because one can use “affine addition” to combine the points in a coordinate-free manner. Affine Addition We have already seen that the difference between two points can be considered as a vector. However, in general, it makes no sense to add two points together. Points denote an absolute position in space independent of any coordinate system describing them. Blindly adding individual coordinates together would give different answers for different coordinate reference frames. Nevertheless, there is one special case, known as affine addition, where one can add points together as a weighted sum. In fact, in the previous section on scalar multiplication, we did just that to represent the points on a line going through two fixed points P and Q. More generally, given m points P0 , …, Pm-1, one can define: Affine Sum Definition

𝑃

𝑎 𝑃 where

𝑎

1

where the coefficients, which can be any real number (positive or negative), must add up to 1. One can interpret this sum as the center of mass for weights ai located at the points Pi. A negative coefficient can be thought of as a negative mass, like a helium balloon. This center of mass is uniquely determined in absolute space regardless of what coordinate system and frame of reference are being used. The affine sum has the property: 𝑃

𝐯

∑ 𝑎 𝑃

𝐯

∑ 𝑎 𝑃 v

5

[Translation Invariance]

Since the line equation is an affine sum, given equal weights 𝑎 𝑎 1⁄2, we get that 𝑃 1⁄2 𝑃 𝑃 𝑃 𝑃 /2 is the midpoint of the line segment from P0 to P1. Further, every point on the line through P0 and P1 is uniquely represented by a pair of numbers 𝑎 , 𝑎 with 𝑎 𝑎 1. Putting 𝑎 𝑡 results in the parametric line equation: 𝑃 𝑡

1

𝑡 𝑃

𝑡𝑃

where each point on the line is represented by a unique real number t. Similarly, in 3D space, the affine sum of three non-collinear points 𝑃 , 𝑃 , 𝑃 defines a point in the plane going through these points. So, every point P in the plane of the triangle Δ𝑃 𝑃 𝑃 is uniquely represented by a triple 𝑎 , 𝑎 , 𝑎 with 𝑎 𝑎 𝑎 1. This triple is called the barycentric coordinate relative to 𝑎 𝑃 𝑎 𝑃 on the plane. Δ𝑃 𝑃 𝑃 . of its associated point 𝑃 𝑎 𝑃 Setting 𝑎 𝑠 and 𝑎 𝑡, then 𝑎 parametric plane equation. 𝑃 𝑠, 𝑡

1

𝑠

𝑡 𝑃

1

𝑠 𝑠𝑃

𝑡, and we get the following 𝑡𝑃

𝑃

𝑠𝐮

𝑡𝐯

where 𝐮 𝑃 𝑃 and 𝐯 𝑃 𝑃 are independent vectors spanning the plane. The pair 𝑠, 𝑡 is called the parametric coordinate of a point P relative to 𝚫𝑃 𝑃 𝑃 , and there is a unique parametric coordinate for each point of the plane. It is good to know that the parametric line and plane equations are valid in any n-dimensional space, and they can represent any linear or planar subspace. Similarly, any m-dimensional subspace 0 𝑚 𝑛 can be represented by a parametric equation with one base point 𝑃 and m independent vectors 𝐯𝒊 that span the subspace. Vector Length The length of a vector 𝐯 is denoted by |𝐯|, and is defined as Vector Length Definition

|𝐯|

𝑣

This gives the standard Euclidean geometry (Pythagorean) length for a line segment representing the vector. For a 2D vector 𝐯 𝑣 , 𝑣 , one has |𝐯|𝟐 𝑣 𝑣 , which is the Pythagorean theorem for the diagonal of a rectangle.

6

Vector length has the following properties: |𝑎𝐯|

|𝑎||𝐯|

[Scalar magnification]

|𝐯

𝐰|

|𝐯|

|𝐰|

[Triangle Inequality]

|𝐯

𝐰|

|𝐯|

|𝐰|

[Reverse Triangle Inequality]

|𝐯

𝐰|𝟐

|𝐯|𝟐 2|𝐯||𝐰| cos 𝜃 where 𝜃 ∠ 𝐯, 𝐰

|𝐰|𝟐

[The Cosine Law]

A unit vector is one whose length = 1. One can scale any vector 𝐯 to get a unit vector 𝐮 that points in the same direction as 𝐯 by computing 𝐮 𝐯⁄|𝐯|. The process of scaling 𝐯 to a unit vector 𝐮 is called normalization, and one says that 𝐯 has been normalized. One can think of 𝐮 as the direction of 𝐯 since 𝐯 |𝐯|𝐮 simply scales 𝐯 to the magnitude |𝐯|.

7

Vector Operations Determinants In most linear algebra texts, determinants are introduced in the context of matrices. But historically determinants appeared long before matrices. Initially, they were used to solve simultaneous linear equations. Eventually, in the 18th and 19th centuries, they evolved into matrix theory. We do not use matrices explicitly in our algorithms, so only describe the notation for determinants and how to compute their value. A determinant is represented as a 2-dimensional square array of variables or numbers with n rows and n columns surrounded by vertical bars, from which a scalar quantity gets computed. In effect, the determinant is a function mapping the array to a single scalar value. Originally, the array elements were the coefficients for a collection of n linear equations in n variables, and the determinant was used in solving those equations. When matrices are introduced, an 𝑛 𝑛 matrix array M defines a linear transformation M(𝐯) of n-dimensional vectors. Then, the determinant of M gives the amount by which M expands or contracts the volume of a transformed region. We will only use the determinants for n = 2 or 3. They are defined as follows. 2x2 Determinant

𝑎 𝑐

𝑏 𝑑

3x3 Determinant

𝑎 𝑑 𝑔

𝑏 𝑒 ℎ

𝑐 𝑓 𝑖

bc

𝑎

𝑓 𝑖

𝑒 ℎ

𝑎𝑒𝑖

𝑏

𝑏𝑓𝑔

𝑑 𝑔 𝑐𝑑ℎ

𝑓 𝑖

𝑐 𝑐𝑒𝑔

𝑑 𝑔

𝑒 ℎ 𝑏𝑑𝑖

𝑎𝑓ℎ

The Dot Product The dot product (aka inner product or scalar product) of two vectors 𝑤 , is defined as the (scalar) number given by the sum of 𝐯 𝑣 and 𝐰 the products of their corresponding coordinates. This operation is denoted by a dot • and defined by Dot Product Definition

𝐯•𝐰

8

𝑣 𝑤

For example, if 𝐯 𝑣 ,𝑣 𝐯•𝐰 𝑣 𝑤 𝑣 𝑤 .

and 𝐰

𝑤 ,𝑤

are 2D vectors, then

The dot product has the following properties. 𝐯•𝐯

|𝐯|𝟐

[Vector Length]

𝑎𝐯 • 𝑏𝐰

𝑎𝑏 𝐯 • 𝐰

𝐯•𝐰

𝐰•𝐯

𝐮• 𝐯

𝐰

|𝐯 • 𝐰|

[Scalar Association] [Commutation]

𝐮•𝐯

𝐮•𝐰

|𝐯||𝐰|

[Cauchy-Schwarz Inequality]

An amazing mathematical formula for the dot product is: |𝐯||𝐰| cos 𝜃

𝐯•𝐰

where 𝜃 ∠ 𝐯, 𝐰 is the angle between the vectors v and w. This formula is used extensively in computer graphics since it speeds up computation in many situations by avoiding direct usage of an inefficient trigonometric function. Further, to compute cos 𝜃 of the angle between two vectors, the following product of two normalized unit vectors is convenient: 𝐯 𝐰 • |𝐯| |𝐰|

cos 𝜃 It is useful to note that when |𝐯|

|𝐰|

1, then cos 𝜃

𝐯 • 𝐰.

Interestingly, the dot product cosine formula is equivalent to the well-known trigonometric identity known as “The Cosine Law”. Say we have a triangle with vertices A, B, C, and the side opposite each vertex has length 𝑎, 𝑏, 𝑐 respectively. If we know 𝑎, 𝑏, and the angle θ between them, as shown in the diagram, then we can calculate 𝑐. Define the vectors 𝐯 𝐵 𝐶 and 𝐰 𝐴 𝐶, corresponding to a and b. Then, the side c corresponds to the vector 𝐯 𝐰 𝐵 𝐴, and we can calculate: 𝑐

|𝐯 𝐰| 𝐯•𝐯 2 𝐯•𝐰 |𝐯| |𝐰| 2|𝐯||𝐰| cos 𝜃 𝑎 𝑏 2𝑎𝑏 cos 𝜃 9

𝐰•𝐰

Similarly, given the Cosine Law, one can derive the vector dot product cosine formula. Amazingly, the early Greeks knew the Cosine Law [Euclid’s Elements, Book 2, Props 12 and 13], even though they did not have algebra and trigonometry at the time. For the acute angle case, it was stated in purely geometric terms by Proposition 13. In acute-angled triangles, the square on the side opposite the acute angle is less than the sum of the squares on the sides containing the acute angle by twice the rectangle contained by one of the sides about the acute angle, namely that on which the perpendicular falls, and the straight line cut off within by the perpendicular towards the acute angle. Another useful fact about the dot product cosine formula (implicitly used in Euclid’s Prop 2-13) is that it can be interpreted geometrically as the projection of one vector onto the other. So, if 𝐮 is a unit vector, then 𝐮 • 𝐰 is the length of the perpendicular projection of 𝐰 onto 𝐮, as shown in this diagram.

|𝑃

𝑃|

|𝐰| cos 𝜃

𝐮•𝐰

Additionally, when two vectors v and w are perpendicular, they are said to be normal to each other, and this is equivalent to their dot product being zero, that is, 𝐯 • 𝐰 0. This is a remarkably simple and efficient perpendicularity test. Because of this, for any vector 𝐯 𝑣 , 𝑣 , … , 𝑣 one can easily construct perpendicular vectors by zeroing all components except 2, flipping those two, and reversing the sign of one of them, for example, 𝑣 , 𝑣 , 0, … 0 , 0, 𝑣 , 𝑣 , 0, … ,0 , etc. The dot product of any of these with the original vector 𝐯 is always 0, and when these vectors are nonzero, they are all perpendicular to 𝐯. For example, in 3D space with 𝐯 𝑣 , 𝑣 , 𝑣 , the two vectors 𝐰𝟏 𝑣 , 𝑣 , 0 , and 𝐰𝟐 0, 𝑣 , 𝑣 , when nonzero, are a basis for the unique plane through the origin and perpendicular to 𝐯. Another important and useful consequence of the dot product formula is that, for |𝜃| 180°, we know the following.

10

90°

They are perpendicular

𝐯•𝐰

0 ⟺ |𝜃| 0 ⟺ |𝜃|

90°

𝜃 is an acute angle

𝐯•𝐰

0 ⟺ |𝜃|

90°

𝜃 is an obtuse angle

𝐯•𝐰

The 2D Perp Operator We can define an operator on the 2D plane that gives a counterclockwise (ccw) normal (i.e., perpendicular) vector of v to be 2D Perp Operator Definition

𝐯

𝑣 ,𝑣

𝑣 ,𝑣

This operator is called the perp operator. The perp vector 𝐯 is the normal vector pointing to the left (ccw) side of the vector 𝐯 as shown in the diagram.

The perp operator has the following properties. 𝐯 •𝐯 |𝐯 |

0

[Perpendicular]

|𝐯|

[Preserves length] 11

𝑎𝐯

𝑎 𝐯

𝑎𝐯

𝑏𝐰

𝐯

𝑎𝐯 𝑎𝐯

𝐯

[Scalar Association] 𝑏𝐰

[Linear]

𝐯

[Anti-potent]

The 2D Perp Product Also, in 2D space, there is another useful scalar product of two vectors 𝐯 and 𝐰, the perp product (aka the 2D exterior product or outer product), which is denoted with a ⊥ , and defined by 2D Perp Product Definition

𝐯⊥𝐰

𝐯 •𝐰

𝑣 𝑤

𝑣 𝑤

𝑣 𝑤

𝑣 𝑤

The perp product has the following properties. 𝐯⊥𝐯

0

𝑎𝐯 ⊥ 𝑏𝐰 𝐯⊥𝐰 𝐮⊥ 𝐯 𝐯⊥𝐰

[Nilpotent] 𝑎𝑏 𝐯 ⊥ 𝐰

[Scalar Association]

𝐰⊥𝐯 𝐰

[Antisymmetric]

𝐮⊥𝐯 𝐯•𝐰

𝐮⊥𝐰 |𝐯||𝐰|

[Additive Distribution] [Lagrange Identity]

Also, for the 2D perp product, we have another useful formula: 𝐯⊥𝐰

|𝐯||𝐰| sin 𝜃

which can be used to compute sin 𝜃 from 𝐯 and 𝐰. And if |𝐯| sin 𝜃 𝐯 ⊥ 𝐰.

|𝐰|

𝟏, then

Moreover, geometrically the perp product gives the (signed) area of the 2D parallelogram spanned by 𝐯 and 𝐰, as shown in the diagram: Area ▱

𝑏ℎ |𝐯||𝐰||sin 𝜃 | 𝐯⊥𝐰

12

So, to compute the area of a 2D triangle with vertices 𝑃 𝑃 𝑃 , define the edge vectors at 𝑃 as 𝐯 𝑃 𝑃 and 𝐰 𝑃 𝑃 . Then, since a triangle is half of a parallelogram, we get the (signed) area of 𝚫𝑃 𝑃 𝑃 as Area 𝚫𝑃 𝑃 𝑃

𝐯 ⊥ 𝐰 /2

which is a very efficient formula for area. This signed area is positive when the vertices 𝑃 𝑃 𝑃 are oriented counterclockwise and it is negative when they are oriented clockwise, so it can be used to test for the orientation of a triangle. This can also be used to test for which side of the directed line through 𝑃 𝑃 the point 𝑃 lies on. It is left side of 𝑃 𝑃 when the area is positive; it is on the line when the area = 0, and it is on the right side when the area is negative. If one only wants to test the sign of the area, dividing by 2 is not necessary. Similarly, the 2D perp product can be used to determine which side (left or right) of one vector another vector is pointing, since for |𝜃| 180°, we know the following. 𝐯⊥𝐰

0⟺𝜃

0 or 180°

They are collinear

𝐯⊥𝐰

0⟺0

𝜃

𝐰 is left of 𝐯

𝐯⊥𝐰

0⟺0

𝜃

180° 180°

𝐰 is right of 𝐯

The 3D Cross Product The 3D cross product (aka 3D outer product or vector product) is defined for two 3D vectors, say 𝐯 𝑣 , 𝑣 , 𝑣 and 𝐰 𝑤 , 𝑤 , 𝑤 , and it is another 3D vector. 3D Cross Product Definition

𝐯

𝑣 𝑤

𝐰

13

𝑣 𝑣 𝑤 , 𝑤

𝑣 𝑣 𝑤 , 𝑤

𝑣 𝑤

The cross product has the following properties. 𝐯

𝐯

𝟎

𝑎𝐯

𝑏𝐰

𝐯

𝐰

𝐮

𝐯

𝐯 |𝐯

0,0,0 𝑎𝑏 𝐯 𝐰

𝐰

𝐰

[Scalar Association]

𝐯

[Antisymmetric]

𝐮

𝐰 •𝐯 𝐰|

[Nilpotent]

𝐯

𝐮

𝐯 𝐰 •𝐰

𝐰

0

[Normality]

|𝐯||𝐰|

𝐯•𝐰

[Lagrange Identity]

However, the cross product is not associative with itself, and it is not distributive with the dot product. Instead, one has the following formulas. These are not often used in computer graphics but sometimes can streamline computations since dot products are easier to compute than cross products. Note that the formulas for left and right association are different. 𝐮 𝐮

𝐯

𝐰

𝐮•𝐰 𝐯

𝐯•𝐰 𝐮

[Left Association]

𝐮•𝐯 𝐰

[Right Association]

𝐯

𝐰

𝐮•𝐰 𝐯

𝐮• 𝐯

𝐰

𝐮

𝐚 𝐮

𝐯 •𝐰

𝐛 • 𝐯 𝐰 𝐚•𝐯 𝐛•𝐰 𝐯

𝐰

𝐯

𝐰

[• Association] [Binet-Cauchy Identity] 𝐚•𝐰 𝐛•𝐯

𝐮

𝐰

𝐮

𝐯

𝟎

[Jacobi Identity]

Using the Lagrange Identity, we can compute that: |𝐯

𝐰|𝟐

𝟐

|𝐯||𝐰|

𝐯•𝐰

|𝐯|𝟐 |𝐰|𝟐 1

𝟐

cos 𝜃

|𝐯|𝟐 |𝐰|𝟐 sin 𝜃 which demonstrates the cross product formulas: |𝐯

𝐰|

|𝐯||𝐰||sin 𝜃 |

𝐯

𝐰

|𝐯||𝐰| sin 𝜃 𝐮, with |𝐮|

1 and 𝐮 • 𝐯

𝐮•𝐰

0

where 𝜃 ∠ 𝐯, 𝐰 . The vector 𝐮 is perpendicular to both 𝐯 and 𝐰, and geometrically points outward from the 𝐯𝐰-plane using a right-hand rule. 14

Further, the magnitude |𝐯 𝐰| is the area of the parallelogram spanned by 𝐯 and 𝐰 as shown in the diagram.

Area ▱

𝑏ℎ |𝐯||𝐰||sin 𝜃 | |𝐯 𝐰|

This fact makes the cross product useful for doing 3D area computations. For example, for a 3D triangle 𝚫𝑃 𝑃 𝑃 , with edge vectors 𝐯 𝑃 𝑃 and 𝐰 𝑃 𝑃 , one can compute its area as Area 𝚫𝑃 𝑃 𝑃

|𝐯 | 𝑃

𝐰| 𝑃

𝑃

𝑃 |

Another important consequence of the cross product formula is that if 𝐯 and 𝐰 are perpendicular unit vectors, then |𝐯 𝐰| is also a unit vector. And the three vectors 𝐯, 𝐰, and 𝐯 𝐰 form an orthogonal coordinate frame of reference (or basis) for 3D space. This is used in 3D graphics to simplify perspective calculations from different observer viewpoints. Further, in 2D space, there is a relationship between the embedded cross product and the 2D perp product. One can embed a 2D vector 𝐯 𝑣 , 𝑣 in 3D space by appending a third coordinate equal to 0, namely 𝐯, 0 𝑣 , 𝑣 , 0 . Then, for two 2D vectors 𝐯 and 𝐰, the embedded 3D cross product is 𝐯, 0

𝐰, 0

0,0, 𝑣 𝑤

𝑣 𝑤

0,0, 𝐯 ⊥ 𝐰

whose only non-zero component is equal to the perp product 𝐯 ⊥ 𝐰. The 3D Triple Product Another useful geometric computation is the 3D (scalar) triple product, which is defined as

15

3D Triple Product Definition

𝐮𝐯𝐰

𝐮• 𝐯

𝐰

𝑢 𝑣 𝑤

𝑢 𝑣 𝑤

𝑢 𝑣 𝑤

This product has the properties: 𝐮𝐯𝐰

𝐯𝐰𝐮

𝐰𝐮𝐯

𝐮𝐯𝐰

𝐮𝐰𝐯

𝐮𝐯𝐰 𝐮

𝐮

𝐯

[Even-Parity Invariant] [Anti-Symmetric]

𝐮

𝐰

Geometrically, the triple product is equal to the volume of the parallelepiped (the 3D analog of a parallelogram) defined by the three vectors 𝐮, 𝐯 and 𝐰 starting from the same corner point as shown.

Volume ▱

𝐮𝐯𝐰

To understand this, recall that |𝐯 𝐰| is the area of the base (parallelogram), and the projection of 𝐮 onto the normal vector 𝐯 𝐰 gives a perpendicular altitude with height |𝐮| cos 𝜃 . The volume is then the product of the base area with this height, which yields the formula. Further, this is a signed volume, whose sign depends on the orientation of the “coordinate frame” basis vectors 𝐮, 𝐯 and 𝐰. Using this formula, we can also get the volume of a 3D tetrahedron 𝚫 𝑃 𝑃 𝑃 𝑃 with 4 vertices 𝑃 𝑥 ,𝑦 ,𝑧 for i=0,3. The volume of this tetrahedron is 1/6 that of the parallelepiped spanned by the vectors 𝐮 𝑃 𝑃, 𝐯 𝑃 𝑃 , and 𝐰 𝑃 𝑃 . And then Vol 𝚫 𝑃 𝑃 𝑃 𝑃

𝐮𝐯𝐰

16

456789 ÿ9ÿÿ5ÿÿ7 ÿ75 5 ÿ ÿÿ ÿ 569ÿ89 5 ÿ ÿ ÿ 58 ÿ ÿ6 ÿ 95895ÿ99ÿ5ÿ9ÿÿÿ  9ÿ695ÿ5 56789 ÿ7 ÿÿ7  ÿ5 ÿ9ÿ 569 5 ÿ 

13!"#2\$

0!%2!&ÿ13!"#2\$

(5ÿ)9 5ÿ9ÿÿ5ÿ9ÿ75 6ÿ* 8 ÿ9ÿ9 ÿ ÿ9ÿ+8, ÿ ÿ- 5 ÿ95ÿ+8ÿ9ÿ7589ÿ5ÿ 9ÿÿ9 6ÿ 9ÿ 9ÿ.89ÿ95ÿ57 ÿ5 9ÿ6ÿ9  ÿ79ÿ95 9ÿ95ÿ56ÿÿ75 6ÿ ÿ98ÿ9ÿÿ5ÿÿ9  

ÿÿ5ÿ 9ÿÿ/ÿ9 6ÿ 9ÿ 9ÿ0ÿ15ÿ5ÿ9ÿ 67ÿ89ÿ5665 ÿ58 ÿÿ2 3313##2#4"1356ÿ 13!"#26ÿ 5ÿ79ÿ ÿ7 ÿ 989 5 ÿ  ÿ9ÿ 9ÿ5ÿÿ9  ÿ9ÿ ÿ 9 5  99 5 ÿ88ÿ+8 ÿ5ÿ56789 ÿ9ÿ77  8ÿ 9 ÿ5ÿ9ÿ957ÿ9 56ÿ9ÿ .5ÿ67ÿ ÿ5 ÿ- 5ÿ9ÿ 9ÿ5ÿ95ÿ ÿ7ÿ ÿ/ÿ5ÿÿ9  ÿ ÿ5ÿ9  ÿÿ9 ÿ96ÿ9 ÿ9 ÿ ÿ 58 ÿ95ÿ96 ÿ9ÿ9  ÿ ÿ 9ÿÿ8 ÿ ÿ98 9 5 569ÿ9ÿ 9ÿ5ÿ9ÿ9  ÿ5ÿ9ÿÿ/ÿ ÿ  ÿÿ 9ÿÿ 2

9 59ÿ+8 9ÿ8ÿ567899 5 ÿ ÿ ÿ56ÿ9ÿ9ÿ99ÿ9  ÿ 9ÿ+8  ÿÿ5 8 9ÿ ÿ98ÿÿ9ÿ6ÿÿ: ÿ59 5 ÿ56ÿ;8 ÿ*> (4,ÿ86 9ÿ ÿ5 ?ÿ568ÿ*ÿ9A,ÿ5ÿÿÿÿ8 9 5 ÿ5ÿ9ÿ 9ÿ5ÿ 9 9ÿ ÿBC592ÿ56ÿ 95  ÿ99 89ÿ9 ÿ89ÿ95ÿ9 6ÿ*ÿ(4,EF 62 17

01232ÿ56768ÿ932ÿ 12ÿ 2 1ÿÿ 12ÿ26ÿ9 ÿÿÿ 12ÿ2232 23ÿ1232ÿ932ÿ 232  9 239ÿ939  ÿÿ 1ÿ3 9ÿ1ÿ9 011ÿ22 ÿ9ÿ9  9  ÿ 12ÿÿ932ÿ3 ÿ ÿ2!  ÿ 2 ÿ 12 2 1ÿ56768ÿ3ÿ 12ÿ 39 2#ÿ23 2!ÿ3 9 2 12ÿ329  ÿ 99 ÿ 39 2ÿ 32 2ÿÿ012 ÿ 0ÿ9 2ÿ9 ÿ 2ÿ2ÿ932ÿ\$ 0  % 0 ÿ 0ÿ9 2ÿ 2ÿ9 ÿ 13226ÿÿ02ÿ9 ÿ92ÿ 12ÿ9 2ÿÿ9 ÿÿ932ÿ 1 9&92 ÿ ÿ 12ÿ\$ 0 ÿ92ÿ7ÿ12 ÿ 12ÿ3 9ÿ3ÿ9329ÿ ÿ

'()*+,ÿ.+/0,12*3

432ÿ322 6ÿ 93  ÿ ÿ 12ÿ567 1ÿ2 3ÿ0 1ÿ8293 2ÿ9 ÿ9239 6ÿ  293ÿ9 239 32ÿ 20ÿ 2ÿ3 9ÿ3ÿ9329ÿ: ÿÿ2  9 ÿ92ÿ;8ÿ1ÿ3ÿ9ÿ8ÿ 39 2ÿ0 1ÿ23 2ÿ ÿ

 ÿ 6ÿ 2ÿ 2 

?ÿ@8ÿ2 3ÿ;A6ÿB646"B?Cÿ*64 1ÿD=ÿ 6 6ÿ4ÿ 1   9ÿ ÿEFEGHEÿJKLMNHGLOPNLGQ566ÿ7 ÿ ÿ 6469ÿ 6ÿ 1ÿ456ÿ976ÿ 6ÿR ÿ7ÿ   72 7467 ÿ ÿ 64ÿ456ÿ 61459ÿ ÿ456ÿ ÿ9269ÿ86ÿSÿUÿVÿWÿ712ÿ456ÿ966646 86ÿXÿYÿ#SZUZVZW\$[ÿ561ÿ456ÿ767ÿ ÿ ÿ9ÿ 61ÿ8\ 55ÿ9ÿ71ÿ7761ÿ964ÿ  7ÿ:ÿ 16ÿ926ÿ9ÿ66 ÿ 6145ÿ97ÿWÿYÿ'ÿ4561ÿ6 57 6ÿ7ÿ471 6ÿ#55ÿ9ÿ7 79ÿ \$ÿ712ÿ459ÿ  7ÿ62 69ÿ4 ÿ6 1)9ÿ 16 :1ÿ 261ÿ 167ÿ7 687ÿ79ÿ7 672ÿ1 462ÿ456ÿ767ÿ ÿ7ÿ 717ÿ77 6 7ÿ9ÿ456 714 26ÿ ÿ456ÿ 99ÿ 2 4ÿ ÿ4 ÿ727614ÿ626ÿ 64 9ÿ* ÿ ÿ71ÿ[email protected]ÿ 717 77 6 7ÿ ÿ6ÿ57 6\ 19

01ÿ345ÿ6789ÿ 87 ÿ

ÿ ÿ

5ÿ897ÿ  

697 9ÿ7ÿ71ÿÿÿ 5ÿ8ÿÿ6 ÿ9ÿ ÿ8 71 ÿ08ÿÿ717 8 ÿ 7 18871 ! "85ÿ ÿ1ÿ#\$%&'\$#\$(ÿ*+#,\$&-#'.\$#-5ÿ1 ÿ 1ÿ /8 ÿ78ÿ ÿ71ÿÿ/    7  ÿ0ÿ17 ÿ2 711ÿ37 8ÿ/79 ÿ71ÿ45647ÿ08ÿ7ÿ871ÿ898ÿ89 ÿ9 : 7 ÿ2 711;ÿ7/ ÿ 8ÿ697 9ÿ6ÿ7  ÿ3?ÿ@7AB6CÿD>EF75=9>

G1ÿ235ÿ17ÿ53ÿ6617ÿH>ÿ6215ÿ14ÿ1ÿ7ÿ055167ÿ6ÿ53ÿE>ÿ6215ÿ70ÿ3 53ÿ3ÿ303ÿ42617ÿ23ÿÿ#3623ÿ56ÿ703ÿ341ÿ43 IJKLMLNÿPIQRSIÿTUVIÿWXÿJYZÿ[\UVIY ÿ ]V^[V[\_J`ÿ[\UVIÿ[Xÿ[\UVIÿabcXÿUVIÿVÿd T ÿÿÿÿUVIÿÿÿÿ]VÿeÿfYÿÿÿÿggÿIhLÿÿ]UVMUViÿVRjkLQÿS\RVILQ 45

ÿ ÿÿÿÿ11ÿ2334ÿ5673896ÿ 22ÿ 9 ÿ3ÿ56 ÿ43293 ÿÿÿÿ37ÿ 6ÿ 9 ÿÿ3ÿ56 ÿ43293ÿ ÿÿÿÿÿÿÿÿÿÿ73

ÿ84 7 ÿ 2 ÿ82 ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿ 5752ÿ2 5ÿ3ÿÿÿÿÿ11ÿ82 ÿ! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿÿÿ11ÿ ÿ# 2 ÿ84ÿ5 7 5ÿ7965ÿ3ÿ \$% ÿÿÿÿÿÿÿÿ& ÿÿÿÿÿÿÿÿ 2 ÿÿÿÿÿÿÿÿÿÿ73

ÿ 3 7 ÿ 2 ÿ82 ÿÿ'ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿ 5752ÿ7965ÿ3ÿÿÿÿ11ÿ82 ÿ! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(("ÿÿÿ11ÿ ÿ# 2 ÿ 3ÿ5 7 5ÿ7965ÿ3ÿ \$% ÿÿÿÿÿÿÿÿ& ÿÿÿÿ& ÿÿÿÿ7 587ÿ"ÿÿÿÿ11ÿ)*ÿ+),ÿ ÿ ÿ385  ÿ56 ÿ43293 ÿ &

-./01.23ÿ5678ÿ97:;7:?/1ÿ0.ÿ608ÿ56/ÿ80>/ÿ/AA7B7/:B2ÿ08ÿ56/ÿ0:[email protected]?/1ÿ0.CÿD6=83ÿ87:B/ÿ75ÿ78ÿ>@1/ÿ0BB=105/ÿ7:ÿ/[email protected];ÿ[email protected]ÿ;/5/1>7:/ÿ7:[email protected]:ÿ@Aÿ0ÿ[email protected]:5ÿ7:ÿ0:ÿ01?751012ÿ[email protected]@I/;ÿA=156/1ÿ?2ÿ1/0110:/:[email protected]:ÿ@Aÿ9:JK:[email protected]ÿ[email protected]*ÿ0224ÿ'6ÿ; ;ÿ ÿA4ÿ 516ÿ #112765ÿ ÿ1ÿ ÿ52ÿ51ÿÿ72#16ÿ#16ÿ1ÿÿ56(ÿ5ÿ )#12ÿ ÿ85Bÿ'ÿÿ!"5C*ÿ+77165\$4ÿ8ÿÿ6ÿÿ267#52ÿ756# 218ÿÿ12(6ÿ,1ÿÿ564ÿ5ÿ'ÿ'ÿ1'ÿ6ÿÿ6Cÿ#16*

DEFEGHIFJKÿLMNEIJO

+1ÿ6ÿ56\$ÿ786164ÿ852ÿ1ÿÿ52582#ÿ6ÿ5164ÿ16ÿ#56ÿ25#ÿ2ÿ12 :1ÿ1ÿÿ'1ÿ#7ÿ16ÿAÿ567ÿPÿ:\$ÿ72#16ÿ)#12ÿ ÿ567ÿ *ÿ964ÿ()6ÿ16ÿ16ÿÿ16ÿ%ÿÿ567ÿ'1ÿ616525ÿ6ÿ72#16 )#12ÿNÿ567ÿQ4ÿ2ÿÿ5ÿ6525ÿR6465>140Sÿ>T.6103/ÿ12ÿ16ÿ16ÿÿ56ÿ%ÿU 658\$ '2ÿVÿ567ÿWÿ52ÿ25ÿ68:2ÿ'#ÿ52ÿ#112765ÿ'6ÿÿ56ÿ25)ÿ1 ÿ340X0/ÿÿ567ÿÿY6Z0Zÿ[>S134ZÿNÿ567ÿQ*ÿ+674ÿ'6ÿ 4ÿ 4ÿ567ÿ 4ÿ6ÿ ÿÿ67ÿÿ256(ÿ\ÿ ÿ *

9ÿ52ÿ1ÿ52582ÿ V]Wÿÿ2227ÿ1ÿ5ÿÿR6465>140SÿS334?0/61>ÿ1ÿ ÿ25)ÿ1ÿ\*ÿ9ÿ16ÿ^ÿÿ16ÿ56ÿ7(ÿ1ÿ\ÿ'6)2ÿ16ÿ1ÿÿ#16716ÿVÿ ÿ4ÿWÿ

4ÿ12ÿVÿ_ÿWÿ ÿAÿÿ2ÿ 5#ÿ#16716ÿ#122167ÿ1ÿ16ÿ7(*ÿ+674ÿÿ)2# 1ÿ\ÿ52ÿ()6ÿ:\$ÿ 4ÿ 4ÿ567ÿ * 53

01234567284ÿ 2 86175

ÿÿÿÿÿÿÿ!"#\$%&'"(\$ÿ\$**"+(&!'%,ÿ-./0ÿ12324ÿ5ÿ ÿ6ÿÿÿÿÿ7ÿ8ÿ 9ÿ:ÿ;ÿ?0>10>@A Bÿÿ?0ÿ>10ÿ;ÿ>@ÿ10>@Aÿÿ!#3?\$"(>!#""=\$ 5@A"@)="9 ( 5B#!=" #"3C  ( ("5 (@%B2 @[email protected])5B@%B2."#3(BD "%@A(@%B22E"%@A(@)23'!(BFA@%B2!"@A"(" BG)@%B2!"@)"3

H5#==\$9 " =5!#"=(\$(3

75 588380123

(

####5"#\$5"##(#\$55  " ##\$#"IDJK#!=J3' " (## #!J(  3?67(5 " ##L3>!#"## (MNOMMOPQRST&4##()**U," 5 (MNOMPMNOVTPO("!#I3"\$5 W!#"####5\$="!#" 3X!(5"#""##3 59

01234256346ÿ28ÿ6982 ÿ4 64 65ÿ ÿ6823ÿ2ÿ9ÿ123ÿ13ÿ136ÿ 236ÿ89 ÿÿ9 81ÿ 268ÿ13ÿ 6ÿ1 6

236ÿÿ 9ÿ28ÿ 66ÿ6288ÿ9ÿ36ÿÿ84 ÿ 9ÿÿ!ÿÿ!ÿÿ"ÿ#ÿ\$ÿ%ÿ!ÿ'(ÿ!ÿÿ) ÿÿ 63ÿ 28ÿ28ÿ6*2+9 63ÿ1ÿ 6ÿ41352213ÿ 9ÿ%ÿ!ÿ#ÿ1ÿ816ÿÿ, 24 ÿ28ÿ 6ÿ896ÿ98ÿ ÿ1ÿ9

ÿ(ÿ\$3ÿ-.ÿ 28ÿ28ÿ931 6ÿ6ÿ154ÿ41352213ÿ ÿ\$  28ÿ41352213ÿ 1 58ÿ136ÿ 98ÿ ÿ935ÿ 6ÿ232326ÿ 2368ÿ96ÿ412342563ÿ/35ÿ2ÿ136ÿ 236 ÿ31ÿ 6ÿ1 6ÿ28ÿ9ÿ2326ÿ8663ÿ 63ÿ2ÿ28ÿ 6ÿ412342563ÿ236864213ÿ01,6+6ÿ2ÿ1

2368ÿ96ÿ2326ÿ86638ÿ 63ÿ 6 ÿ9 ÿ1ÿ9 ÿ31ÿ1+6 9ÿ\$3ÿ 28ÿ4986ÿ81 +6 1ÿÿ935ÿ184 ÿ 9ÿÿ!ÿÿ935ÿ1ÿ!ÿ1ÿ\$ÿ 6ÿ8663ÿ236+9 8ÿ213ÿ935ÿ213ÿ96 5284123ÿ 66ÿ28ÿ31ÿ236864213ÿ5 6,286ÿ236864ÿ 6ÿ236+9 8ÿ823ÿ9ÿ935ÿ23 1692138ÿ1ÿ6ÿ ÿ 63ÿ 6ÿ236864213ÿ8663ÿ28ÿ ÿ 28ÿ,1 8ÿ23ÿ93 ÿ52638213

6789:;=ÿ[email protected]>A

B 63ÿ 6ÿ,1ÿ 2368ÿ1ÿ86638ÿ96ÿ31ÿ99

6 ÿ 6 ÿ2 ÿ236864ÿ23ÿ9ÿ32*6ÿ123ÿ\$3ÿ-. C4 25693ÿ8946ÿ232326ÿ 2368ÿ9 ,9 8ÿ236864ÿ\$3ÿ 2 6ÿ526382138ÿ 6 ÿ89

ÿ288ÿ694 1 6ÿ935ÿ51ÿ31ÿ236864ÿDÿ2ÿ 6 ÿ236864ÿ 63ÿ 62ÿ 2369ÿ14642138ÿ131ÿ9ÿ-.ÿ 936ÿ,2

9 81ÿ236864ÿE1ÿ136ÿ493ÿ82 ÿ6824ÿ1ÿ,1ÿ411523968ÿ1ÿ, 24 ÿFÿ935ÿ#ÿ96ÿ31ÿ99

6  416ÿ 6ÿ-.ÿ236864213ÿ123ÿGÿ9ÿH\$ÿ935ÿ\$ÿ1ÿ 186ÿ,1ÿ411523968ÿ935ÿ 63ÿ68 2ÿH\$ÿ!ÿ\$ÿ1ÿ9

ÿ411523968ÿ1ÿ416ÿ 6ÿ-.ÿ236864213ÿ123ÿ4138256ÿ 6ÿ,1ÿ 2368 935ÿ 6ÿ988142965ÿ+6418ÿ23ÿ 6ÿ5299

ÿ, 66ÿ 1ÿ566236ÿH\$ÿ,6ÿ 9+6ÿ 6ÿ+641ÿ6*9 2 ÿ ÿ/ÿ 6 236864213ÿ 6ÿ+641ÿ ÿ28ÿ663524 9ÿ1ÿ ÿ935ÿ 28ÿ28ÿ6*2+9 63ÿ1ÿ 6ÿ6 154ÿ41352213ÿ 9ÿ ÿE1 +23ÿ 28ÿ6*9213ÿ,6ÿ6

I16ÿ 9ÿ 6ÿ56312391ÿ ÿ13 ÿ, 63ÿ 6ÿ 2368ÿ96ÿ99

6 ÿ98ÿ6+218 ÿ52848865 E22 9 ÿ81 +23ÿ1ÿ\$ÿ,6ÿ6

60

012ÿ42567859 6 ÿ9 2ÿ 12ÿ 972ÿ ÿ 6ÿ 85ÿ 852ÿ ÿ954ÿ 16 4ÿ65ÿ2ÿ67 24 652ÿ8ÿ2ÿ95 ÿ 6ÿ56ÿ6 1ÿÿ954ÿÿ622 ÿ5685ÿ28 12 ÿ8 ÿ256 1ÿ 6ÿ2 ÿ 12 85 2 2 865ÿ685 ÿÿÿ!"ÿÿ#!" \$ 12 ÿ8ÿ652ÿ6ÿ 12ÿ 6ÿ852 ÿ8 ÿ9ÿ858 2ÿ 2725 ÿ!6 ÿ9ÿ 9"ÿ 9ÿ% &ÿ 125ÿ 12ÿ85 2 2 ÿ685 ÿ8 85ÿ 12ÿ 2725 ÿ65ÿ125ÿ ÿ!6 ÿ ÿ6 ÿ9ÿ 9"ÿÿ6 1ÿ852 ÿ9 2ÿ 2725 ÿ 125ÿ6 1 6 865ÿ9 972 2 ÿ954ÿÿ7 ÿ2ÿ85ÿ 12ÿ'%&(ÿ85 2 9ÿ6 ÿ 12ÿ 2725 ÿ 6ÿ85 2 2 ÿ) 16 1

18 ÿ 6 54 ÿ 872ÿ256 1ÿ 12ÿ642ÿ6 ÿ 12ÿ85 2 2 865ÿ6ÿ 6ÿ 2725 ÿ8 ÿ9ÿ8 ÿ4289 2ÿ 852 795ÿ 289ÿ9 2 ÿ5224ÿ 6ÿ2ÿ1224ÿ! 22ÿ6 ÿ872725 9 865ÿ85 2 2 *+,*-2725 !""

./012ÿ4152672859:17 ;912ÿÿ6 ÿ85 2 2 ÿ8 ÿ85ÿ9ÿ 852ÿ685 ÿ?2 ÿ;ÿ2ÿ825ÿ ÿ954ÿ 12ÿ952ÿ>ÿÿ2ÿ825ÿÿ9

12ÿ9 972 8ÿ[email protected] 9 865Aÿ 685 ÿB%ÿ65ÿ8 ÿ954ÿ9ÿ56 79ÿ2 6 ÿ ÿC2ÿ8 ÿ12ÿ8ÿ;ÿ8 ÿ9 92ÿ 6ÿ>ÿÿÿ 2 85ÿ8ÿ ÿ181ÿ7295 ÿ 19 ÿ 12ÿ852ÿ48 2 865ÿ2 6 ÿDÿ8 ÿ2 2548 9 ÿ 6ÿ 12ÿ952ÿ56 79ÿ1ÿ

18 ÿ8 ÿ 2ÿ 125ÿ;ÿ954ÿ>ÿ9 2ÿ9 92ÿ954ÿ28 12 ÿ522 ÿ85 2 2 ÿ6 ÿ2 2ÿ;ÿ82 ÿ 6 9ÿ85ÿ 12 952ÿ>ÿÿ+8 E685 52 ÿ6 ÿ68584252ÿ95ÿ2ÿ42 2 78524ÿÿ 2 85ÿ12 12 ÿ95ÿ652ÿ 288 685 ÿ6ÿ;ÿ 9ÿ%ÿ8 ÿ65 98524ÿ85ÿ>ÿFÿ 19 ÿ8 ÿ12 12 ÿ8 ÿ 9 8 82 ÿ 12ÿ8788 ÿ852ÿ[email protected] 9 865Aÿ  ÿ 12ÿ852ÿ954ÿ952ÿ9 2ÿ56 ÿ9 92ÿ 125ÿ;ÿ954ÿ>ÿÿ85 2 2 ÿ85ÿ9ÿ [email protected] 2ÿ685 ÿ!"ÿ181ÿ8 67 24ÿ 85ÿ9ÿ72 164ÿ 8789 ÿ 6ÿ 12ÿ652ÿ6 ÿ 12ÿ85 2 2 865ÿ6ÿ 6ÿ852 ÿ85ÿ*+ÿG65 842 ÿ 12 489 97A

) ÿ 12ÿ85 2 2 ÿ685 ÿ 12ÿ2 6 ÿ ÿ8 ÿ2 2548 9 ÿ 6ÿ1Fÿ12 2ÿ 018 ÿ8 ÿ[email protected] 8925 ÿ 6ÿ 12ÿ46 ÿ 64  ÿ6548 865Aÿ ÿ-685ÿ2ÿ2 A

61



01ÿ345ÿ6785ÿ9ÿ7 ÿ ÿ178735ÿ 5 583ÿ1 ÿÿ3ÿÿ3458ÿ85ÿ 3ÿ4 ÿ3ÿ45ÿ34 3ÿ ÿ3ÿ571 34 3ÿ3455ÿ7 ÿ 8ÿ7835 5378ÿ53558ÿ345ÿ 5 583ÿ 8ÿ345ÿ6 85ÿÿ ÿ 7375ÿ ÿ3455ÿ7 ÿ 8 7835 5378ÿ734ÿ345ÿ6 85ÿ458ÿ

!"#\$%#&"'(!ÿ(*ÿ+ÿ,-.!#%

08ÿ/0ÿ3ÿ6 85 ÿ1ÿ 8ÿ12ÿ 5ÿ57345ÿ  6656ÿÿ345ÿ7835 53ÿ78ÿ ÿ 78 65ÿ 3 7 43ÿ6785ÿ9 353ÿ1ÿ5ÿ65ÿ8ÿ29ÿ5ÿ 758ÿÿ ÿ783ÿ:5ÿ 8ÿ ÿ8 6ÿ53ÿ!5ÿ 8ÿ4 5ÿ 8ÿ7 6773 5; 378ÿ5ÿ8ÿÿ455ÿÿ8ÿ6?ÿ@ÿA9ÿB45ÿ6 85 ÿ1ÿ 8ÿ12ÿ 5ÿ  6656ÿ45855ÿ3457 8 6ÿ53 ÿ!ÿ 8ÿ!2ÿ 5ÿ  6656ÿ 8ÿ347 ÿ7 ÿ5;7 6583ÿ3ÿ345ÿ87378ÿ34 3ÿHÿ 637675 9ÿ3ÿ166ÿ535 785ÿ345ÿ7835 5378ÿ6785ÿ5ÿ 3766 ÿ34 3ÿ675 ÿ78 855ÿ3ÿ178ÿ ÿ 5717ÿ783ÿ8ÿ73ÿB4 3ÿ7 ÿ5ÿ855ÿ3ÿ178ÿ ÿ783ÿ 34ÿ6 85 ÿD5ÿ 8ÿÿ347 ÿÿ17878 ÿ ÿ

8ÿ 6378ÿ1ÿ345ÿ7 6773ÿ5; 378

1ÿ1ÿ 8ÿ12ÿJ3ÿ3455ÿ 5ÿ86ÿ3ÿ5; 378 ÿ78ÿ345ÿ/ÿ888 ÿ 785ÿ345ÿ783ÿÿ 8ÿ675 8455ÿ8ÿ345ÿK7 58 78 6ÿ6785ÿ9ÿLÿ5ÿ855ÿ 8345ÿ8 3 783ÿ3ÿ 65ÿ1ÿ ÿ 5717ÿ B455ÿ 5ÿ ÿ8 5ÿ1ÿ  ÿ347 ÿ6ÿ5ÿ85< MNOÿP'\$#&"ÿ9'!#.\$ÿQRE."'(!SÿT85ÿ6ÿ 53ÿ85ÿ78 35ÿ3ÿU5ÿ ÿAÿ8ÿÿ 8ÿ3458ÿ 65 1ÿ345ÿ345ÿ3ÿJ3ÿ347 ÿ766ÿ86ÿÿ458ÿ9ÿ7835 53 ÿ345ÿ6 85ÿAÿ8ÿÿB47 ÿ7 ÿ766ÿ5ÿ35 ÿ7 ÿ88U5ÿLÿ85ÿ  3ÿ17 3ÿ 5653ÿ ÿ88U5 458ÿ345ÿAK78 35ÿVA1ÿ 78 35ÿ1ÿEÿ 8ÿ3458ÿ 53ÿ345ÿ5 878 ÿ78 35ÿ1ÿÿ3ÿÿ345ÿ85ÿ 46 4 5ÿ345ÿ78 35ÿ734ÿ345ÿ6  5 3ÿ  635ÿ 65ÿ ÿ347 ÿ766ÿ 75ÿ345ÿ  3ÿ 3  3 378 ÿL 5ÿ34 3ÿ ÿ3458ÿ ÿ675 ÿ8ÿ9ÿL678 ÿ345ÿ3ÿ5; 378 +++++++,ÿÿ)"ÿ/>HIB=ÿS;>ÿBA?NÿO;LPFÿHILÿBAPÿHKBA;>ÿ;Sÿ?BÿOHII;B 88ÿRPÿAPTLÿT?HRTPÿS;>ÿHI=ÿ>PHTÿ;>ÿ[email protected]?IPLÿ[email protected]ÿS>;Qÿ?BNÿKNPW 88ÿXNP>Nÿ;SÿBA?NÿO;LPÿQKNBÿUP>?S=ÿO;>>POBIPNNÿS;>ÿBAP?>ÿHPHL=ÿ@?UPIÿS;>ÿBAPÿ;RZPOBN[ 88ÿÿÿÿ\]^_`ÿHILÿabc`]dÿV?BA 88ÿÿÿÿÿÿÿÿO;;>L?IHBPNÿeST;HBÿfFÿ=Fÿghi 88ÿÿÿÿÿÿÿÿ;

HB;>NÿS;>[ 88ÿÿÿÿÿÿÿÿÿÿÿÿj;?IBÿÿÿkÿj;?IBÿlÿmPOB;> 88ÿÿÿÿÿÿÿÿÿÿÿÿmPOB;>ÿkÿÿj;?IBÿnÿj;?IB 88ÿÿÿÿÿÿÿÿÿÿÿÿmPOB;>ÿkÿÿmPOB;>ÿlÿmPOB;> 88ÿÿÿÿÿÿÿÿÿÿÿÿmPOB;>ÿkÿÿJOHTH>ÿoÿmPOB;> 88ÿÿÿÿp^_bÿHILÿqbrsb_`ÿV?BAÿ[email protected]ÿÿUhi 88kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

ÿ

wLPS?IPÿJxYyyz{XxÿÿÿDWDDDDDDDEÿ88ÿB;ÿHU;?LÿL?U?N?;Iÿ;UP>ST;V 88ÿL;Bÿ;LKOBÿ|}G~ÿVA?OAÿHTT;VNÿUPOB;>ÿ;

HB?;INÿ?IÿH>@KQPIBN wLPS?IPÿL;B|KFU~ÿÿÿ||K~Wfÿoÿ|U~Wfÿÿ|K~W=ÿoÿ|U~W=ÿÿ|K~Wgÿoÿ|U~Wg~ wLPS?IPÿI;>Q|U~ÿÿÿÿN>B|L;B|UFU~~ÿÿ88ÿI;>Qÿkÿ[email protected]ÿ;SÿÿUPOB;> wLPS?IPÿL|KFU~ÿÿÿÿÿI;>Q|KnU~ÿÿÿÿÿÿÿ88ÿL?NBHIOPÿkÿI;>Qÿ;SÿL?SSP>PIOP wLPS?IPÿHRN|f~ÿÿÿÿÿ||f~ÿkÿDÿÿ|f~ÿ[ÿn|f~~ÿÿÿ88ÿÿHRN;TKBPÿUHTKP

ÿ

88ÿ^`p^_b`]p^_b[ÿ@PBÿBAPÿQ?I?QKQÿL?NBHIOPÿRPBVPPIÿCÿT?IPN 88ÿÿÿÿII[ÿBAPÿNA;>BPNBÿL?NBHIOPÿRPBVPPIÿyEÿHILÿyC ST;HB L?NB}Gzy?IPzB;zy?IP|ÿy?IPÿyEFÿy?IPÿyC~ 84

0 ÿÿÿÿ234567ÿÿÿ8ÿ9ÿ ÿÿ  ÿÿÿÿ234567ÿÿÿÿ9ÿ  ÿÿ   ÿÿÿÿ234567ÿÿÿÿ9ÿ ÿÿ   ÿÿÿÿ65ÿÿÿÿÿ9ÿ6588ÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿÿ9ÿ658 ÿÿÿÿ65ÿÿÿÿ4ÿ9ÿ65ÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿÿ9ÿ658 ÿÿÿÿ65ÿÿÿÿ3ÿ9ÿ65 ÿÿÿÿ65ÿÿÿÿ ÿ9ÿ!4ÿÿ!ÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿ4ÿ54 ÿÿÿÿÿ46"#853ÿ5\$3ÿ%&3ÿ#7"3537ÿ6ÿ5\$3ÿ56ÿ4635ÿ#6%&5 ÿÿÿÿ%ÿ ÿ'ÿ()*

+,-)ÿ0ÿÿÿÿÿÿÿÿÿÿÿ5\$3ÿ%&3ÿ73ÿ"65ÿ#73 ÿÿÿÿÿÿÿÿ4ÿ9ÿ  ÿÿÿÿÿÿÿÿ54ÿ9ÿ4ÿ.ÿÿ/ÿ34ÿÿÿÿ83ÿ5\$3ÿ7035ÿ3&6"%&567 ÿÿÿÿ1 ÿÿÿÿ33ÿ0 ÿÿÿÿÿÿÿÿ4ÿ9ÿ!3ÿÿ4!ÿÿ  ÿÿÿÿÿÿÿÿ54ÿ9ÿ!3ÿÿ!ÿÿ  ÿÿÿÿ1 ÿÿÿÿÿ035ÿ5\$3ÿ%373&43ÿ6ÿ5\$3ÿ56ÿ4635ÿ#6%&5 ÿÿÿÿ234567ÿÿÿ ÿ9ÿÿ2ÿ4ÿ!ÿ8ÿÿ54ÿ!ÿÿÿÿ9ÿÿ 4ÿÿ 54 ÿÿÿÿ73587&ÿ&67" ÿÿÿÿ73587&ÿ5\$3ÿ4635ÿ%5&43 1 9999999999999999999999999999999999999999999999999999999999999999999 ÿ3456789:;696?9:;[email protected]ÿ035ÿ5\$3ÿ%5&43ÿ3533&ÿÿ30"3&5 ÿÿÿÿDU/ÿÿ56ÿE ÿ%&3ÿ30"3&5ÿ( ÿ&ÿ( ÿÿÿÿF3587&/ÿ5\$3ÿ\$67535ÿ%5&43ÿ3533&ÿ( ÿ&ÿ( 65 %5E +(30"3&5+56+(30"3&5ÿ(30"3&5ÿ( ÿ(30"3&5ÿ( 0 ÿÿÿÿ234567ÿÿÿ8ÿ9ÿ( ÿÿ(  ÿÿÿÿ234567ÿÿÿÿ9ÿ( ÿÿ(  ÿÿÿÿ234567ÿÿÿÿ9ÿ( ÿÿ(  ÿÿÿÿ65ÿÿÿÿÿ9ÿ6588ÿÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿÿ9ÿ658 ÿÿÿÿ65ÿÿÿÿ4ÿ9ÿ65ÿÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿÿ9ÿ658 ÿÿÿÿ65ÿÿÿÿ3ÿ9ÿ65 ÿÿÿÿ65ÿÿÿÿ ÿ9ÿ!4ÿÿ!ÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿ4ÿ,ÿ ÿ9ÿ ÿÿÿÿÿÿÿÿ4ÿ9ÿ, ÿ385ÿ 9 ÿ9ÿ ÿÿÿÿ65ÿÿÿÿ54ÿ5,ÿ5 ÿ9ÿ ÿÿÿÿÿÿÿÿ54ÿ9ÿ5,5 ÿ385ÿ5 9 ÿ9ÿ ÿÿÿÿÿ46"#853ÿ5\$3ÿ%&3ÿ#7"3537ÿ6ÿ5\$3ÿ56ÿ4635ÿ#6%&5 ÿÿÿÿ%ÿ ÿ'ÿ()*

+,-)ÿ0ÿÿ5\$3ÿ%&3ÿ73ÿ"65ÿ#73 ÿÿÿÿÿÿÿÿ,ÿ9ÿ ÿÿÿÿÿÿÿÿÿÿ6743ÿ8%&0ÿ#6%&5ÿ ÿ6&ÿ30"3&5ÿ( ÿÿÿÿÿÿÿÿ ÿ9ÿ ÿÿÿÿÿÿÿÿÿÿ56ÿ#733&5ÿ#6%3ÿ%%%6&ÿÿÿ537 ÿÿÿÿÿÿÿÿ5,ÿ9ÿ3 85

ÿÿÿÿÿÿÿÿ12ÿ3ÿ45 ÿÿÿÿ6 ÿÿÿÿ7897ÿ ÿÿÿÿÿÿÿÿÿÿ ÿ 71ÿ1 7ÿ489791ÿ19ÿÿ1 7ÿ17ÿ879 ÿÿÿÿÿÿÿÿ9ÿ3ÿ7ÿÿ45 ÿÿÿÿÿÿÿÿ1ÿ3ÿ7ÿÿ5 ÿÿÿÿÿÿÿÿÿ9ÿÿÿ ÿÿÿÿÿÿÿ ÿ94ÿÿÿ3ÿ1 7ÿ93ÿ7 7ÿ9ÿ987 ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ5 ÿÿÿÿÿÿÿÿÿÿÿÿ1ÿ3ÿ75 ÿÿÿÿÿÿÿÿÿÿÿÿ12ÿ3ÿ45 ÿÿÿÿÿÿÿÿ6 ÿÿÿÿÿÿÿÿ7897ÿÿ9ÿÿ92ÿ ÿÿÿ ÿ94ÿÿ ÿÿ3ÿ1 7ÿ93 ÿ7 7ÿ9ÿ987 ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ925 ÿÿÿÿÿÿÿÿÿÿÿÿ1ÿ3ÿ7ÿ!ÿ5 ÿÿÿÿÿÿÿÿÿÿÿÿ12ÿ3ÿ45 ÿÿÿÿÿÿÿÿ6 ÿÿÿÿ6 ÿÿÿÿÿ1ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿ14ÿÿÿ3ÿ1 7ÿ13ÿ7 7ÿ9ÿ987 ÿÿÿÿÿÿÿÿ1ÿ3ÿ5 ÿÿÿÿÿÿÿÿ ÿ"74#\$17ÿ94ÿ"ÿ1 9ÿ7 7 ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ5 ÿÿÿÿÿÿÿÿ7897ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ925 ÿÿÿÿÿÿÿÿ7897ÿ

ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ5 ÿÿÿÿÿÿÿÿÿÿÿÿ92ÿ3ÿ5 ÿÿÿÿÿÿÿÿ6 ÿÿÿÿ6 ÿÿÿÿ7897ÿÿ1ÿÿ12ÿ ÿÿÿÿÿÿ ÿ14ÿÿ ÿÿ3ÿ1 7ÿ13 ÿ7 7ÿ9ÿ987 ÿÿÿÿÿÿÿÿ1ÿ3ÿ125 ÿÿÿÿÿÿÿÿ ÿ"74#\$17ÿ94ÿ"ÿ1 9ÿ7 7 ÿÿÿÿÿÿÿÿÿÿ!ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ5 ÿÿÿÿÿÿÿÿ7897ÿÿÿ!ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ925 ÿÿÿÿÿÿÿÿ7897ÿ

ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿÿ!ÿÿ5 ÿÿÿÿÿÿÿÿÿÿÿÿ92ÿ3ÿ5 ÿÿÿÿÿÿÿÿ6 ÿÿÿÿ6 ÿÿÿÿ ÿ88%ÿÿ1 7ÿ9ÿ1ÿ 71ÿ94ÿÿ14 ÿÿÿÿ94ÿ3ÿ99ÿÿ&'())*+'ÿ,ÿÿ-ÿ9ÿ ÿ925 ÿÿÿÿ14ÿ3ÿ91ÿÿ&'())*+'ÿ,ÿÿ-ÿ1ÿ ÿ125 ÿÿÿÿ ÿ 71ÿ1 7ÿ7"747ÿÿ1 7ÿ1.ÿ489791ÿ19 ÿÿÿÿ/741"ÿÿÿ0ÿ3ÿ.ÿ!ÿ94ÿÿ\$ÿÿ14ÿÿ5ÿÿ ÿ3ÿÿ& 94ÿÿ&114 ÿÿÿÿ"71\$"ÿ"#05ÿÿÿ ÿ"71\$"ÿ1 7ÿ489791ÿ9147 6 3333333333333333333333333333333333333333333333333333333333333333333 86

00ÿ23456789 ÿÿÿÿÿÿÿÿ 00ÿÿÿÿ !"ÿÿÿÿ#\$ÿ!%ÿ#& 00ÿÿÿÿ'!"ÿÿÿÿÿÿÿÿÿ( ( )*ÿ#ÿ#\$+ÿ#ÿ#&ÿ, ÿÿÿÿ.ÿÿÿ%/ÿ0ÿ#\$1/ÿ2ÿ#&1/3 ÿÿÿÿ(ÿÿÿÿ%/&ÿ0ÿ%*%/+%/,3 ÿÿÿÿÿ*%/&ÿ4ÿ5677)896,ÿÿÿÿÿÿ00ÿÿÿÿÿ(ÿ((( ÿÿÿÿÿÿÿÿ!ÿ:1:3ÿÿÿÿÿÿÿÿÿÿÿ00ÿ!;ÿÿÿ1ÿÿ9ÿÿ:1 ÿÿÿÿ.ÿÿÿ:ÿ0ÿ#\$1:ÿ2ÿ#&1:3 ÿÿÿÿ(ÿÿÿÿÿ0ÿ2%*:+%/,ÿ0ÿ%/&3 ÿÿÿÿ!ÿ3ÿÿÿÿÿÿÿÿÿÿÿ00ÿÿÿ < 000000000000000000000000000000000000000000000000000000000000000000000 00ÿ2345=7>64?29 ÿÿÿ%!ÿÿÿÿÿ 00ÿÿÿÿ !"ÿÿÿÿ#\$ÿ!%ÿ#& 00ÿÿÿÿ'!"ÿÿ%!ÿÿÿÿÿÿÿ( ( )%!*ÿ#ÿ#\$+ÿ#ÿ#&ÿ, ÿÿÿÿ(ÿÿÿÿÿ0ÿ)*ÿ#\$+ÿ#&,3 ÿÿÿÿ!ÿÿÿÿ\$ÿ0ÿ#\$1:ÿ@ÿ*ÿAÿ#\$1/,3 ÿÿÿÿ!ÿÿÿÿ&ÿ0ÿ#&1:ÿ@ÿ*ÿAÿ#&1/,3 ÿÿÿÿ!ÿ%*\$+&,3ÿÿÿÿÿÿÿÿÿÿÿÿ00ÿ%!ÿÿ < 000000000000000000000000000000000000000000000000000000000000000000000

BCDCECFGCH

IJKLMÿOPQRSTUÿVILWXJYZQÿ[QX\]MWVÿLYÿ^Iÿ_J`QÿOYaLYQÿIQWLaYÿbcddef gQX\ÿhQSSQRUÿSLYQiSLYQiZS]WQWXij]LYXW^MbfÿbcdddfÿZLXQMÿLYÿX\Qÿ_RJj\LZWÿÿkSa]RLX\`Wÿlkm bcddnf

87

88

! "#\$%%!"&'( "#)""(* +#,(-(./&!" "#0.(.(&% (-(./#  1#0&!""#\$ )'2"&#3!%(. .2%#  4#0!!"#0.!&5(" !#0!!"!&6 !!"#3".!(#  7#8!"#0.6& )&".((9 #  3"%")(!(( ".,38.("..(%.#

: ;842 8 012345362781:?8472;5

@".A".)( . %!"%!".&()  #@&.(&(5( "#0B)( B"&(! ". .#0("#C&%.& !&.!()-/. "# @.))%)!B((9%B"&! )(((D#C( A".((  E(.&EFA1&.)(((!( #3!"GHC!.+IJKL&& M  )!B&"B%" #NM".GO!H\$.+IJIL"%"( E  #3!.&9 6&BPQRSTQUVWSSXYRRZT[\]^S_XB( -GO(6.`Ha.+IIJL.GO".1bbbL.GC))!.+IIIL.G\$2c(6. +IIdL.GeH.+IdfL/%!!)( 89

0123414567ÿ9 4 4 ÿ640 ÿ3

061ÿ0ÿ5 6ÿ04 4ÿ64ÿ64

4603ÿ3 4 ÿ 5ÿ5ÿ6ÿ 

53ÿ64ÿ0 6ÿ ÿ15ÿ 62645060 4ÿ3

061ÿ

ÿ 3 05ÿ64ÿ41456ÿ0564 460 5ÿ2 3417 ÿ44ÿ364 ÿ4334ÿÿ43 554 ÿ!"##ÿ5ÿ!""\$%ÿ0 4 4ÿ5ÿ 26013ÿ ÿ6014ÿ3

0617ÿ&6ÿ640 ÿ3

061ÿ6033ÿ544ÿ ÿ6

4ÿ24ÿ5ÿ06ÿ0ÿ0036ÿ6

0123414567ÿ'4(456ÿ

)ÿ14ÿ 64 ÿ012 41456ÿ5ÿ&35ÿ!""*%ÿ 5ÿ5ÿ ÿ6014ÿ5ÿ ÿ24ÿ464 105060ÿ3

0617ÿ+4 4ÿ 4ÿ3 ÿ445ÿÿ514 ÿ  ÿ 5505ÿ60147ÿ+4ÿ4 3046ÿ ÿ644ÿ , 5 104,ÿ3

061ÿ 06ÿ-./-01-2ÿ 34 ÿ!"#*%ÿ4ÿ ÿ247ÿ9 4 4 ÿ64ÿ364 ÿ 54ÿÿ3 ) 5ÿÿ'

ÿ!"#"%ÿ4

53ÿ ÿ247 060 533ÿ012 4ÿ3

061ÿ 4ÿ445ÿ 5ÿ

ÿ64ÿ1

4ÿ 46 060 4ÿ, 434 0564 460 5,ÿ2 3417ÿ94 4ÿ64 4ÿ 4ÿ6 ÿ42 64ÿ46ÿ ÿ41456ÿ64ÿ, 4,ÿ46ÿ ÿ5ÿ64 ,34,ÿ46ÿ 7ÿ454ÿ 56ÿ6 ÿ05ÿ0564 460 5ÿ46 445ÿ64ÿ46ÿ6ÿ5 6ÿ 0605ÿ64ÿ14ÿ46ÿ66 0ÿ 434ÿ0564 460 5ÿ6ÿ5 6ÿ 4 4ÿ

ÿ3434ÿ 547ÿÿ01234ÿ464 105060ÿ ÿ6014ÿ5ÿ ÿ24ÿ,6 24 0ÿ 442,ÿ3

061ÿ ÿ4 43 24ÿÿ5 !""5%ÿ4ÿ 5ÿ4 304 ÿ

)ÿ ÿ30  5ÿÿ'6 30ÿ!"##%7ÿ+44ÿ3

061ÿ5ÿ4ÿ4ÿ6

24 

1ÿ

345ÿ46ÿ 24 60 5ÿ30)4ÿ0564 460 5ÿ

ÿ50 5ÿ46 445ÿ6 ÿ04 456ÿ01234 2 3 5ÿ

ÿ235 ÿ0 00 5ÿ 27 64 4 6434ÿ64ÿ'1 9 4ÿ5ÿ&45634466155ÿ3

061ÿ 4105ÿ64ÿ351 )ÿ ÿ64 0437ÿ6 64ÿ 4 4 ÿ66ÿ 45ÿ7ÿ0ÿ3 4ÿ ÿ

4 ÿ ÿ64ÿ&45634466155ÿ3

061ÿ6)4ÿ ÿ6014ÿ 0ÿ0ÿ

4ÿ65ÿ64ÿ ÿ 64

4ÿ3

0618ÿ3 ÿ64ÿ1

4  123064ÿ 26013ÿ3

061ÿ 4ÿ 0ÿ0ÿ64ÿ14ÿÿ64ÿ01234ÿ 64

4ÿ 547ÿ'  45ÿ7ÿ0ÿ492464ÿ6 ÿ4ÿ1ÿ3 4 ÿ65ÿ ÿ 54ÿ106ÿÿ 433ÿ4ÿ64ÿ46 012341456  64

4ÿ3

0617ÿ&6ÿ 45ÿ7ÿ0ÿ492464ÿ6 ÿ4ÿ34ÿ65ÿ

ÿ4(3ÿ6 ÿ ÿ&45634 ÿ6014ÿ5ÿ ÿ24ÿ3

0617 466155ÿ0ÿ64ÿ012346ÿ492464ÿ

:;