Download presentation

Presentation is loading. Please wait.

Published byMarley Hose Modified over 2 years ago

1
Special purpose systems (I) Lecture 10

2
ACE Algebraic Combinatorics Environment Is a Maple library which includes various combinatorial tools (about 400 functions) useful in algebraic computations. These functions are mostly related to the symmetric group and handle such objects as partitions, compositions, permutations, words, Young tableaux, divided differences, symmetric functions, non-commutative symmetric functions and Schubert polynomials. ACE furnish a toolbox to handle mutivariate polynomials: linear bases, symmetrizing operators, action of symmetric polynomials on multivariate polynomials, multivariate interpolation as well as discrete analog of differential calculus. The development of ACE has been motivated by problems in algebraic combinatorics and algebraic geometry. Symmetric functions and the symmetric group appear in different fields of mathematics, statistical mechanics and theoretical computer science: characters of classical groups, cohomology of flag varieties, Lie idempotents, or sorting procedures. Several libraries in ACE include functions already existing in the system Symmetrica that is devoted mainly to representation theory and is written in C. A similar library, μ-EC16 was developed for MuPAD. It uses the same combinatorial objects as ACE, but allows the user to include C procedures to accelerate certain algorithms.

3
Albert Albert is an interactive program to assist in the study of nonassociative algebras. The problem addressed by Albert is the recognition of nonassociative polynomial identities does an algebra satisfy a certain identity, assuming that is satisfies another given set of identities?. A method that was proposed makes use of group representation theory. Another approach is to build the free algebra determined by the given set of defining identities; if the polynomial in question is zero in the free algebra then it must be an identity. This is the approach taken by Albert, using a dynamic programming algorithm.

4
Algeb Algeb is a programming language (as opposed to a symbolic algebra system) designed specifically for working in algebra and number theory. It was designed and first implemented in 1977 for the purpose of testing an algorithm for computing integral bases. Compared to symbolic systems, Algeb is generally faster and easier to program. On the other-hand, it lacks the large library of pre-programmed functions available in a good symbolic system. Among the major projects in which Algeb has been used are: computing tables of quartic and sextic number fields; computing Galois groups; computing the rational normal Frobenius form of a matrix.

5
Amore Automate, Monoids, and Regular Expressions program is written in C for synthesizing, analysis, and transforming various representations of regular formal languages, in particular representations by finite automata, finite monoids, and regular expressions. Among the available function are the following: transformation of regular expressions into minimal deterministic finite automata; transformation of regular expressions into small nondeterministic automata (found by a heuristic search procedure, not necessarily yielding an automaton of minimal number of states), computation of the syntactic monoid of a regular language (as presented by a regular expression or an automaton), as well as the decomposition of this monoid by Green’s relations, the test on the language properties such as star-free, locally testable, pice-wise testable, standard operations on regular languages (Boolean operations, concatenation, shuffle product, left and right quotient), the graphical display of small transitions graphs automata on the screen.

6
Bergman Special-purpose system for computations in commutative and purely non-commutative graded algebra. It is public domain software available by anonymous ftp. It is written in Standard Lisp, the Lisp dialect underlying Reduce implementation. Bergmann works under Reduce, PSL or Common Lisp (at least one of them should be pre- installed) and the most part of commands should be written in respect to Reduce or Lisp syntax. Bergman is not a full CAS; It is open – one can add his own procedure written in Lips or R-Lisp; It is also possible to use it as a Reduce package. Instrument for calculating Groebner basis in several situations: commutative and non- commutative algebras, modules over them. It provides also facilities to calculate appropriate invariants of the algebras and modules, such as the Hilbert series, and the Poincare series, Anick’s resolution and Betti numbers. The essential tool for combining flexibility and time efficiency is to employ the inbuilt function pointer feature in Lisp, and to change a set of crucial procedures when the context set-up is changed. Among the context set-up alternatives are: commutativity or not, various strategies of Groebner basis computation, some different monomial orders, various coefficient fields. In the Reduce version is possible to include indeterminates as coefficients for the commutative operations; otherwise the coefficient field should be a prime field (the field rationals, or a field of prime order).

7
Cannes / Parcan Cannes and its parallel counterpart Parcan (Parallel computer algebra nucleus) are computer algebra core systems that mainly serve two purposes: they supply a fast an reliable basis for a number of implementations of sequential and parallel algorithms for algebraic and symbolic computations, And they provide a platform for investigation of core issues of sequential and in particular parallel CAS. Both are written in an object oriented way in C++. The following modules comprise Cannes: the low level functions of GMP for the arithmetic of big natural numbers; the integer arithmetic module that handles short integers; the basic list cell management; the memory management module for the arrays storing integers and list cells. Parcan relies on the modules of Cannes. In addition it contains a thread system and a multithread safe version of the memory management module of Cannes, including a parallelized version of the garbage collection. The development of Cannes and Parcan started with a complete redesign of the system components Saclib and Parsac. This involves the complete memory management mechanisms, the basic list cell administration, and the integer arithmetic. Speed and memory management are an issue in almost all CAS as the problem size often needs to be increased only very little to create unfeasible computations.

8
Carat A crystallograhic space group is a discrete cocompact subgroup of the group of all motions of Euclidians n-space and describes the symmetries on n-fold periodic structures. For n<=3 such groups are used to describe conventional crystal symmetries, for bigger n they use for quasicristals and modulated crystal structures. Torsion free space groups are the fundamental groups of flat Euclidean space forms the torus and the Klein bottle being the best known examples. Carat handles enumeration and construction problems, as well as recognition and comparison problems for crystallographic groups up to dimension 6. Enumeration problems include: splitting arithmetic crystal classes into affine classes of space groups, splitting geometric crystal classes into arithmetic crystal classes, splitting crystal families into geometric classes etc. Recognition problems include deciding equivalence with respect to any of the equivalence relations. Carat contains tables and implementations of various algorithms. The tables include representatives of the arithmetic classes together with their normalizers and inclusions. Carat is a compilation of about 60 programs all of which are written in C. Together with the system comes a library of C-functions which makes it possible to develop programs for special purposes.

9
Casa Casa is a special-purpose system for computational algebra and constructive algebraic geometry. The system has been developed since 1990, at RISC, Linz, Austria. The system is built on the kernel of Maple. The system can be obtained by anonymous ftp. Constructive methods in algebra and algebraic geometry have been gaining more and more importance with the availability of computers and CA software. Casa has been designed to perform computations and utilize reasoning about algebraic and geometrical objects in classical affine and projective spaces over algebraically closed fields of characteristics zero. The field has to be a a computable field in the sense of the underlying Maple, i.e. all the arithmetic operations have to be available in the system. Usually, the field of computation is the rational number field or a finite algebraic extension thereof. An algebraic set can be represented in the system in four different ways: implicit representation as a set of common zeros of a system of polynomial equations; projected representation by a polynomial and a tuple of rational functions specifying the birational mapping; parametric representation by a tuple of rational functions; representation by places if for each branch passing through a certain point on the algebraic set a tuple of power series that parametrizes the algebraic set around the point is specifies.

10
Casa The system provides a variety of operations on algebraic sets. The basic operations include: ideal theoretic operations (sum, product, intersection, union); creating algebraic sets in different representations; generating curves of fixed multiplicities at given points; intersection, union, and difference of algebraic sets; computing tangent cones and tangent spaces; computation of the dimension of an algebraic set; decomposition into irreducible components; transformations of algebraic sets to hypersurfaces; computation of the singularities, genus, neighborhood graphs and adjoint curves of an algebraic curve; rational parametrization or rational curves over an optimal extension field of coefficients; implicitization of parametrically given algebraic sets; Puiseux series expansions; multivariate resultants and Dixon’s resultants; Groebner bases of ideals and modules; Groebner walk; hybrid methods for finding solutions of an arbitrary system of equations; computation of rational points on conics; offset curves; plotting both explicitly and implicitly given curves and surfaces; computation of syzygy-bases. A powerful feature is the capability to visualize algebraic sets. Casa makes a thorough effort to obtain correct information about the local topology in the neighborhood of singularities and other critical points while still keeping the algorithm efficient by using hybrid symbolic-numerical methods.

11
Chevie CA package for symbolic calculations with generic character tables of groups of Lie type, finite Coxeter groups and Iwahori-Hecke algebras. It consists of program and library files in the formats of Gap and Maple. The name of this project is a combination of the names of two famous mathematicians: Claude Chevalley and Sophus Lie. A character table of a finite group is a matrix where the columns are labeled by the conjugacy classes and the rows are labeled by the irreducible characters. Many structural properties of a group are encoded in its character table in a very compact way. The Maple part deals with generic character tables of series of groups of Lie type. Working with printed generic character turned out to be quite cumbersome. Sometimes there are inaccuracies in the tables which are very difficult to spot. And the computation with generic character values by hand is already complicated for small tables. Chevie has both, a library of known generic character tables (an electronic atlas), and also programmes which allow to compute with these tables. Successful application of this part of Chevie were reported in constructive Galois theory, modular representation theory of finite groups of Lie type, and the subgroup structure and generation properties of these groups. The Gap part of Chevie deals with finite Coxeter groups and their characters, and the associated Iwahori-Hecke algebras and braid groups. There are both libraries containing the basic information for all ireductible types of finite Coxeter groups and programs for working with general finite Coxeter groups. This part of Chevie is distributed as a share package with Gap.

12
C-Meataxe The following problems in the representation theory of finite groups and finite dimensional algebras have an efficient algorithmic solution over finite fields. Given a matrix representation of an algebra A in terms of matrices for a generating set we can determine: the composition factors and their multiplicity; the socle and the radical series; the complete lattice of A-submodules; the endomorphism ring and a decomposition of the representation into a direct sum of indecomposable representations. Meataxe contains implementations of the corresponding algorithms. It is a collection of standalone programs written in C. A typical program reads the (binary) input data from files, solves a specific problem and produces an answer in form of (binary) output files. These tasks can range from basic problems in linear algebra such as the determination of the rank, the nullspace an the order of a given matrix, to more sophisticated problems such as ones mentioned above. One of the main features is a fast vector arithmetic and a compact data type for vectors over finite fields up to order 256. The C-Meataxe also supplies the programmer with a library of C-functions that implement the basic algorithms for matrices. This library can be used to develop new algorithms. A former version is available also as a share package in the Gap-system.

13
CoCoA CoCoA is a special purpose system for doing Computations in Commutative Algebra is freely available software for research and educational purposes. The principal area of expertise is that of operations over commutative rings of polynomials. It can compute: Groebner bases, syzyges and minimal free resolutions, intersections, divisions, radical of an ideal, the ideal of 0-dimensional schemes, Poincare series and Hilbert functions, factorization of polynomials, toric ideals. The capabilities of CoCoA and the flexibility of its use are further enhanced by the dedicated high-level programming language CoCoAL. CoCoA is used most by commutative algebraists and algebraic geometers, but also people working in different areas such as analysis and statistics have already benefitted from the system. It is also used for teaching advanced courses especially in Italy.

14
Crep Crep stands for Combinatorial REPresentation theory of finite-dimensional algebras. The name reflects the fact that the study of finite-dimensional algebras has led to a rich variety of combinatorial methods and algorithms. Crep started as a collection of several mutually rather independently programs written in Pascal. Maple was later used to call the various programs collected inside Crep and to handle communication between these as well as the dialog with the user. This way, Crep turned into a system, which in many respects behaves like a Maple library. Crep can be obtained via ftp. The basic Crep package contains functions for completely separating algebras, unit forms and partially ordered sets. These include: computation of preprojective components and tubes; computation of quadratic forms associated to an algebra; testing a quadratic form for weak positivity/non-negativity; determining the representation type of a finite partially ordered set; testing a completely separatingcalgebra for finite type; test of tubular algebra; a database of tame concealed algebras and of minimalcwild concealed algebras. There also several packages: for hereditary algebras (written in Maple), tubular canonic algebras (in Maple), telescopic functors, directed algebras, tame poser algebras (in Pascal or C).

15
Desir The Desir project has started in the 80’s. At the beginning it was centered around the local analysis in the complex plane of scalar nth order linear differential equations with the coefficients being univariate polynomials with complex coefficients. The Desir solver written in Reduce was an effective implementation of the symbolic resolution of linear differential equations. The software Desir-II from 1997 is an improved version of the first one and has been developed in Maple. For the graphical representation of the solutions, a special package Compas was developed and implemented in Aldor. It is able to communicate data with Maple: it passes the differential operator to Desir-II and recovers the basis of formal solutions. Another package, Isolve, written in Maple, handles systems of first- order linear differential equations.

16
Discreta The computer algebra package arouse a project for the construction of discrete combinational structures. Its primary aim is the construction of t-designs with prescribed automorphism group. A t − (v, k, ) design D = (V, B) is an incidence system on a set V = {1, 2,..., v} of points and a distinguished set B of k-subsets of V which are called blocks. The system is called t-design if for each t-subset T V there are exactly blocks in the design containing T. The construction of t-designs with large t is a big challenge for combinatorics. The condition to form a t-design is equivalent to solutions of a linear system of equations with non-negative integral coefficients. Discreta is designed to apply this method to sets of moderate parameters and in particular to a variety of different permutation groups. It is written in C++ and provides a graphical user interface. In addition there is also a interface to the computer algebra system Gap and the whole functionality of Discreta is available via Gap commands from the Gap command prompt.

17
Felix Is designed to implement algorithms from the theory of commutative and non- commutative ideals. The core part is a library of tools for developing and testing programs in symbolic computing. It is a Lisp-like system that features a library of modules written in the Felix- language and compiled object files for particular areas. Felix consists of three levels: The kernel of the system provides the basic data structures (nodes as basic objects of lists, short and long integers, names, integer and bit vectors, and one- dimensional arrays) as well as functions operating on these basic objects, simple control structures, system interfaces, memory management routines (especially garbage-collection). The second level refers to the actual programming language as well as various development tools written in Felix itself. The third layer consists of a set of algorithms for symbolic computing; for the time being, it is limited to the area of commutative and non-commutative ideals. The nodes constitute the basic building blocks of lists. The set of atomic data types was enlarged by integer vectors, bit strings, and arrays. These data types, including basic functions operating on them, allow a representation of polynomials which matches the requirements of Groebner basis computations. The syntax of the programming language is Pascal-like.

18
Felix Felix has a built-in compiler which allows translation of a set of operators into machine code, and to combine them in a library of modules. Compilation and binding of modules is an integral art of the interactive mode. The system provides also tools for debugging. Felix is specially designed for computations in rings and modules. Besides operations over the basic algebraic structures, it can also perform operations in sub-structures, especially in ideals and modules, as well as operations related to morphism between the structures. The following algebraic structures are part of the system: rings of polynomials, algebras of solvable type, free non-commutative algebras, finitely generated modules over rings. For coefficients one can choose from integers, rationals, complex numbers, residue classes of integers, and rational functions. Beside basic arithmetic in the above structures, additional operations are available for some algebraic objects, e.g. GCD and factorization. Operations on ideals play a central role in the system, e.g. compute elimination ideals, modules and chains of syzygies, intersection and quotients of ideals; they are based to a large extend on Groebner basis computations.

19
Fermat Is a special-purpose system oriented toward polynomial and matrix algebra over the integers, the rationals and finite fields. It is specialized in doing computations on polynomials and matrices. There are two versions: rational version QFermat, and floats version FFermat. In the last version the basic data type is real (or complex) number with 18 significant digits of accuracy, and the version does not permit the sophisticated polynomial and matrix algorithms of the main version, QFermat; however, it allows the user to create arbitrarily complex geometric objects consisting of lines, points, and polygons that can viewed from arbitrary angles, rotated, translated, cut up, or strung together to form animation sequences, or movies. Fermat began as a project in a compiler design course in 1986. It was therefore a programming language from the very beginning. It grew into a computer algebra system gradually. It was used to search for nilpotent topological spaces, to study certain infinite almost-free groups, to study elliptic curves, and in image analysis.

20
Fermat Fermat performs operations on multivariate polynomial rings, rational functions, and matrices containing polynomials and rational functions. Advanced operations are square-free factoring, complete factoring of univariate polynomials over finite fields; various degree, term, and coefficient functions; characteristic polynomial and minimal polynomial of matrices; various normalizations and diagonalizations of matrices. Arbitrarily large integers are available. One may create sparse matrices. A compiler is available for execution speed. One of the main features of Fermat is a Pascal-like programming language. Fermat is written in Pascal, about 65000 lines in the rational version and about 35000 more in the float version.

21
FoxBox and Other Blackbox Systems In the second half of the 1980s, Erich Kaltofen invented algorithms for computing with symbolic mathematical objects in straight-line program and black box representation. Thus is the genesis of black box CA. The main ingredient is the idea that a program, which can be a straight- line single assignment program or a procedure expressed in a programming language, that computes the value of a multivariate polynomial when substituting elements from a given field for the variables, implicitly defines the polynomial. Interpolation or sparse interpolation can be employed to reconstruct the polynomial in conventional representations. However, such conversion can cause exponential space growth. The black box algorithms adopt the implicit representation for the results of the operations: for instance, an irreducible factor of a black box polynomial is again a procedure for valuating that factor. Hence black box CA can efficiently compute a sparse irreducible factor of polynomial that it itself dense in standard representation and whose other factors are also dense.

22
FoxBox and Other Blackbox Systems The black box model has been put to practice by several computer implementations: Dagwood (1988), FoxBox (1998), WiLiSys (1999), ProtoBox (2000), LinBox (2004). Dagwood is a system written in Lisp that implements algorithms for manipulating polynomials and rational functions in straight-line representation. FoxBox is written in C++ and implements algorithms for manipulating polynomials and rational functions in black box representation. WiLiSys is a system written in C that implements the block Wiedemann algorithm for solving sparse linear systems over a finite field. LinBox is a library for black box linear algebra. FoxBox and WiLiSys can be executed on parallel systems. Generic programming methodology is employed both in FoxBox and LinBox. Several libraries such as NTL, Saclib, GNU MP, Givaro are plugged for performing basic arithmetic operations. ProtoBox is a system written in Maple that implements algorithms for manipulating polynomials in black box algorithms for later implementation in C++.

23
GAP Groups, Algorithms and Programming, A system for computational discrete algebra with particular emphasis on, but not restricted to computational group theory. Gap was developed from 1986 to 1997 in Aachen. After that the development and maintenance of Gap is coordinated by University of St. Andrews, Scotland. Several users have contributed to the system via shared packages which can be loaded into the system and then act as extensions to the main library. Some share packages also provide interfaces to separate standalones, such as the ANU quotient algorithms. Gap and its sources, including share packages, data library and the manual, are distributed freely. Gap consists of a kernel (a C program), the library of functions (Gap programs), the data library and the documentation. The kernel implements a programming language with Pascal-like control structures, automatic memory management, built-in data types for key algebraic objects, flexible list and record data types. The language is interpreted and can be compiled. The kernel also implements the environment that allows one to interact with Gap in the so-called read-eval-print loop, supports debugging of Gap programs and provides online access to the reference manual.

24
GAP The library of functions contains implementations of various algebraic algorithms written in the Gap language (several thousand functions). There is a growing collection of user contributed share packages. Some of these are written in the Gap language, others include external C programs. The Gap data library includes a number of databases with Gap language interfaces allowing them to be searched and studies efficiently. It currently includes: primitive permutation groups, transitive groups, all groups of order up to 2000, perfect groups up to order 106, solvable irreducible matrix groups, space groups, ordinary character tables, modular character tables etc. The basic functionality deals with long integer and rational arithmetic, cyclotomic fields, finite fields, residue class rings, p-adic numbers, permutations, polynomials (multivariate polynomials and rational functions), vectors and matrices, various combinatorial functions, elementary number theory, a wide variety of list operations, I/O streams for interfacing to other software. Gap has been used to classify all groups of order up to 2000, to determine the transitive permutation groups of degree up to 31, and to find the authomorphism groups of compact Riemann surfaces up to genus 48.

25
GAP Gap knows how to construct a number of well-known groups such as symmetric and classical groups. There is a wide variety of functions for the investigations of groups that will compute e.g. order, conjugacy classes of elements, derived series, composition series (including identification of the composition factors), certain characteristic subgroups, maximal subgroups, normal subgroups, subgroups lattice, automorphism group, cohomology groups, character table, table of marks etc. Vector spaces over all available fields and modules over all available rings can be defined. Algebras ca be given by structure constants, by generating matrices or by finite presentation. There are routines for computing the structure of finite dimensional Lie algebras. The shared package Specht permits computations concerning special modules arising in representation theory. The package Guava can derive invariants such as minimal distance and weight distribution and find their automorphism groups. A Gap compiler produces human-readable C code. This C code can be compiled and loaded dynamically or compiled into a new kernel. Compiled code is automatically loaded when it exists. There is a graphical user interface XGap that permits for example the display of subgroup lattices.

26
GiNaC Standing for GiNaC is Not a CAS Is a library that was designed to overcome certain design problems encountered and accumulated during the development of xloops, a package for automatic calculation of Feynman diagrams in quantum field theories. It is written in C++ and provides classes for efficient handling of symbolic expressions. The user interacts with it in compiled C++-programs. It provides methods for the efficient handling of multivariate polynomials, quotients thereof, truncated power series, some symbolic linear algebra and special functions as well as algebras needed in high energy physics. The philosophy behind GiNaC is driven by the observation that sometimes large-scale scientific applications call for a combined approach: computer algebraic methods drive some numerical simulation the result of which get displayed graphically. GiNaC is free software. A package for long integers and arbitrary precision arithmetic uses CLN library.

27
Kan/sm1 special-purpose system for doing computations in algebraic analysis especially D- modules based on Groebner basis. The ring of differential operators is denoted by D and modules over D are called D- modules. Kan is the name of the project; sm1 is a Groebner engine for D in the project Kan. The system sm1 is designed to be sued as a backend engine, but it has a small interpreter and is possible to use it in a standalone system. The system can be obtained by anonymous ftp. The first version was released in 1991. The system is capable of performing basic operations such as sums, products, powers of differential operators, Groebner basis in Weyl algebra (ring of differential operators with polynomial coefficients). Advanced operations include: holomonic rank, restrictions, integrals, tensor products, localizations, cohomology groups etc. The main objects in sm1 are integers, numbers, strings, arrays, executable strings (encoded program), stacks, errors, polynomials, differential operators, and rings. A related project with Kan is OpenXM (a protocol between mathematical programs) – the program open sm1 (ox sm1) is a version of sm1 that works as a server with the OpenXM protocol.

28
Kant Kant V4 is a program for computations in algebraic number fields. The emphasis is on the interaction of elements of several such fields. It was developed at the University of Dusseldorf from 1987 until 1993 and at the Technical University Berlin afterwards. It consists of a C-library of more than 1000 functions for doing arithmetic in number fields. The necessary auxiliaries from linear algebra over rings, especially lattices, are also included. The set of these functions is based on Magma from which it was adopted the storage management, arithmetic for long integers and arbitrary precision floating point numbers, arithmetic for finite fields, polynomial arithmetic and a variety of other tools. Essentially, all of the public domain part of Magma is contained in Kant V4. In return, almost all Kant V4 routines are included in Magma. The only other computer algebra system allowing similar extensive calculations with algebraic numbers and number fields is Pari. To make Kant V4 easier to use a shell called Kash (KAnt SHell) was developed. This shell is based on that of the group theory package Gap and the handling is similar to that of Maple. The programming language is Pascal-like. There are more than 350 internal functions installed and 200 additional predefined user functions and comprehensive references are available.

29
Kant The design is based on the mathematical structures of global fields. Nearly all mathematical objects can have several representations at the same time. The following objects are the most important ones: orders, algebraic numbers, ideals in order, lattices. The are several libraries dealing with integral bases, unit groups, class groups, Galois groups, subfields and automorphisms, relative norm equations, Kummer extensions, Hilbert class fields and Ray class fields, Thue equations, unit equations, index form equations, integral points of Mordell’s equation, Global function fields. Additionally, Kash possesses an interface to the public domain PVM-software, which allows distributed computations. The virtual parallel computer is hierarchical, consisting of one master, the Kash session running in the foreground, and an arbitrary number of slaves, running on different machines in the background. Additional slaves can be added at run time if the current task is able to use them. Accessible from Kash is an SQL-database for number fields. The database is designed to give fast access to several hundreds of thousands of number fields Currently the following invariants are stored and can be used as keys in a selection: a generating polynomial together with its signature; an integral basis, the field discriminant; the unit group and regulator; the class group with structural information; the Galois group. Isomorphism can be tested: one can check some invariants and if all tests are successful there is the possibility to choose between several algorithms for proving the isomorphy. The SQL-database is public domain and available for every system supported by Kash. Kash is freely available via ftp.

Similar presentations

OK

Introduction to Gröbner Bases for Geometric Modeling Geometric & Solid Modeling 1989 Christoph M. Hoffmann.

Introduction to Gröbner Bases for Geometric Modeling Geometric & Solid Modeling 1989 Christoph M. Hoffmann.

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google