diff options
author | Ben Gamari <bgamari.foss@gmail.com> | 2018-06-02 11:56:58 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2018-06-02 16:21:12 -0400 |
commit | faee23bb69ca813296da484bc177f4480bcaee9f (patch) | |
tree | 28e1c99f0de9d505c1df81ae7459839f5db4121c /testsuite/tests/dph | |
parent | 13a86606e51400bc2a81a0e04cfbb94ada5d2620 (diff) | |
download | haskell-faee23bb69ca813296da484bc177f4480bcaee9f.tar.gz |
vectorise: Put it out of its misery
Poor DPH and its vectoriser have long been languishing; sadly it seems there is
little chance that the effort will be rekindled. Every few years we discuss
what to do with this mass of code and at least once we have agreed that it
should be archived on a branch and removed from `master`. Here we do just that,
eliminating heaps of dead code in the process.
Here we drop the ParallelArrays extension, the vectoriser, and the `vector` and
`primitive` submodules.
Test Plan: Validate
Reviewers: simonpj, simonmar, hvr, goldfire, alanz
Reviewed By: simonmar
Subscribers: goldfire, rwbarton, thomie, mpickering, carter
Differential Revision: https://phabricator.haskell.org/D4761
Diffstat (limited to 'testsuite/tests/dph')
89 files changed, 0 insertions, 6632 deletions
diff --git a/testsuite/tests/dph/Makefile b/testsuite/tests/dph/Makefile deleted file mode 100644 index 9a36a1c5fe..0000000000 --- a/testsuite/tests/dph/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/classes/DefsVect.hs b/testsuite/tests/dph/classes/DefsVect.hs deleted file mode 100644 index f6ed5544e2..0000000000 --- a/testsuite/tests/dph/classes/DefsVect.hs +++ /dev/null @@ -1,53 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS_GHC -fvectorise #-} - -module DefsVect where - -import Data.Array.Parallel - - --- {-# VECTORISE SCALAR instance Eq Char #-} --- {-# VECTORISE SCALAR instance Eq Float #-} --- {-# VECTORISE SCALAR instance Ord Char #-} --- {-# VECTORISE SCALAR instance Ord Float #-} - - -data MyBool = MyTrue | MyFalse - -class Eq a => Cmp a where - cmp :: a -> a -> Bool - --- FIXME: --- instance Cmp Int where --- cmp = (==) - --- isFive :: (Eq a, Num a) => a -> Bool -isFive :: Int -> Bool -isFive x = x == 5 - -isEq :: Eq a => a -> Bool -isEq x = x == x - -fiveEq :: Int -> Bool -fiveEq x = isFive x && isEq x - -cmpArrs :: PArray Int -> PArray Int -> Bool -{-# NOINLINE cmpArrs #-} -cmpArrs v w = cmpArrs' (fromPArrayP v) (fromPArrayP w) - -cmpArrs' :: [:Int:] -> [:Int:] -> Bool -cmpArrs' xs ys = andP [:x == y | x <- xs | y <- ys:] - -isFives :: PArray Int -> Bool -{-# NOINLINE isFives #-} -isFives xs = isFives' (fromPArrayP xs) - -isFives' :: [:Int:] -> Bool -isFives' xs = andP (mapP isFive xs) - -isEqs :: PArray Int -> Bool -{-# NOINLINE isEqs #-} -isEqs xs = isEqs' (fromPArrayP xs) - -isEqs' :: [:Int:] -> Bool -isEqs' xs = andP (mapP isEq xs) diff --git a/testsuite/tests/dph/classes/Main.hs b/testsuite/tests/dph/classes/Main.hs deleted file mode 100644 index 471c0cc8e0..0000000000 --- a/testsuite/tests/dph/classes/Main.hs +++ /dev/null @@ -1,15 +0,0 @@ -module Main where - -import Data.Array.Parallel.PArray (PArray, fromList) - -import DefsVect - -main - = let v = fromList [1..10] - w = fromList [11..20] - in - print $ [ fiveEq 5 - , cmpArrs v w - , isFives (fromList $ replicate 10 5) - , isEqs v - ] diff --git a/testsuite/tests/dph/classes/Makefile b/testsuite/tests/dph/classes/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/classes/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/classes/dph-classes-copy-fast.stdout b/testsuite/tests/dph/classes/dph-classes-copy-fast.stdout deleted file mode 100644 index bf8e7b9e4b..0000000000 --- a/testsuite/tests/dph/classes/dph-classes-copy-fast.stdout +++ /dev/null @@ -1 +0,0 @@ -[True,False,True,True] diff --git a/testsuite/tests/dph/classes/dph-classes-vseg-fast.stdout b/testsuite/tests/dph/classes/dph-classes-vseg-fast.stdout deleted file mode 100644 index bf8e7b9e4b..0000000000 --- a/testsuite/tests/dph/classes/dph-classes-vseg-fast.stdout +++ /dev/null @@ -1 +0,0 @@ -[True,False,True,True] diff --git a/testsuite/tests/dph/classes/dph-classes.T b/testsuite/tests/dph/classes/dph-classes.T deleted file mode 100644 index acd19ba4b1..0000000000 --- a/testsuite/tests/dph/classes/dph-classes.T +++ /dev/null @@ -1,6 +0,0 @@ - -test('dph-classes-vseg-fast', - [normal, reqlib('dph-lifted-vseg'), reqlib('dph-prim-par'), - only_ways(['normal', 'threaded1', 'threaded2'])], - multimod_compile_and_run, - ['Main', '-O0 -fno-enable-rewrite-rules -package dph-lifted-vseg']) diff --git a/testsuite/tests/dph/diophantine/DiophantineVect.hs b/testsuite/tests/dph/diophantine/DiophantineVect.hs deleted file mode 100644 index 981b9ad62d..0000000000 --- a/testsuite/tests/dph/diophantine/DiophantineVect.hs +++ /dev/null @@ -1,39 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise -XParallelListComp #-} -module DiophantineVect (solution3) where - -import Data.Array.Parallel -import Data.Array.Parallel.Prelude.Int as I - -import qualified Prelude as P - -solution3' - = let - pow x i = productP (replicateP i x) - primes = [: 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73 :] - a `cutTo` b = sliceP 0 (lengthP b) a - sumpri xx = productP [: pow p x | p <- primes `cutTo` xx | x <- xx :] - distinct xx = productP [: x I.+ 1 | x <- xx :] - - series :: [:Int:] -> Int -> [:[:Int:]:] - series xs n - | n == 1 = [: [: 0 :] :] - | otherwise = [: [: x :] +:+ ps - | x <- xs - , ps <- series (I.enumFromToP 0 x) (n I.- 1) :] - - prob x y - = let xx = [: (sumpri m ,m) - | m <- series (I.enumFromToP 1 3) x - , distinct [: x I.* 2 | x <- m :] > y :] - i = minIndexP [: a | (a, b) <- xx :] - in xx !: i - in - prob 5 200 - -solution3 :: (Int, PArray Int) -{-# NOINLINE solution3 #-} -solution3 - = let (i, is) = solution3' - in - (i, toPArrayP is) diff --git a/testsuite/tests/dph/diophantine/Main.hs b/testsuite/tests/dph/diophantine/Main.hs deleted file mode 100644 index 571566ebcb..0000000000 --- a/testsuite/tests/dph/diophantine/Main.hs +++ /dev/null @@ -1,42 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} - -import Data.List -import DiophantineVect - -import qualified Data.Array.Parallel.PArray as P -import Data.Array.Parallel.Prelude - - --- Solution for the 108th Euler problem. --- From the Haskell Wiki -solution1 - = let primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73] - series _ 1 = [[0]] - series xs n = [x:ps | x <- xs, ps <- series [0..x] (n-1) ] - distinct = product . map (+1) - sumpri x = product $ zipWith (^) primes x - - prob x y = minimum [ (sumpri m ,m) - | m <- series [1..3] x - , (>y) $ distinct $ map (*2) m] - in prob 5 200 - -solution2 - = let primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73] - series _ 1 = [[0]] - series xs n = [x:ps | x <- xs, ps <- series [0..x] (n-1) ] - distinct xx = product [ x + 1 | x <- xx ] - sumpri xx = product $ zipWith (^) primes xx - - prob x y = minimum [ (sumpri m ,m) - | m <- series [1..3] x - , (distinct $ map (*2) m) > y ] - in prob 5 200 - - -main - = do print solution1 - print solution2 - print solution3 - - diff --git a/testsuite/tests/dph/diophantine/Makefile b/testsuite/tests/dph/diophantine/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/diophantine/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/diophantine/dph-diophantine-copy-fast.stdout b/testsuite/tests/dph/diophantine/dph-diophantine-copy-fast.stdout deleted file mode 100644 index 3fe0f66bd1..0000000000 --- a/testsuite/tests/dph/diophantine/dph-diophantine-copy-fast.stdout +++ /dev/null @@ -1,3 +0,0 @@ -(1260,[2,2,1,1,0]) -(1260,[2,2,1,1,0]) -(1260,fromList<PArray> [2,2,1,1,0]) diff --git a/testsuite/tests/dph/diophantine/dph-diophantine-copy-opt.stdout b/testsuite/tests/dph/diophantine/dph-diophantine-copy-opt.stdout deleted file mode 100644 index 3fe0f66bd1..0000000000 --- a/testsuite/tests/dph/diophantine/dph-diophantine-copy-opt.stdout +++ /dev/null @@ -1,3 +0,0 @@ -(1260,[2,2,1,1,0]) -(1260,[2,2,1,1,0]) -(1260,fromList<PArray> [2,2,1,1,0]) diff --git a/testsuite/tests/dph/diophantine/dph-diophantine.T b/testsuite/tests/dph/diophantine/dph-diophantine.T deleted file mode 100644 index fbcf565145..0000000000 --- a/testsuite/tests/dph/diophantine/dph-diophantine.T +++ /dev/null @@ -1,11 +0,0 @@ - - -test ('dph-diophantine-copy-fast' - , [ outputdir('fast') - , reqlib('dph-lifted-copy') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-copy']) - diff --git a/testsuite/tests/dph/dotp/DotPVect.hs b/testsuite/tests/dph/dotp/DotPVect.hs deleted file mode 100644 index 3fc9084245..0000000000 --- a/testsuite/tests/dph/dotp/DotPVect.hs +++ /dev/null @@ -1,15 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise #-} -module DotPVect ( dotp ) where - -import Data.Array.Parallel -import Data.Array.Parallel.Prelude.Double as D - -import qualified Prelude - -dotp :: PArray Double -> PArray Double -> Double -{-# NOINLINE dotp #-} -dotp v w = dotp' (fromPArrayP v) (fromPArrayP w) - -dotp' :: [:Double:] -> [:Double:] -> Double -dotp' v w = D.sumP (zipWithP (D.*) v w) diff --git a/testsuite/tests/dph/dotp/Main.hs b/testsuite/tests/dph/dotp/Main.hs deleted file mode 100644 index 04eb407fc7..0000000000 --- a/testsuite/tests/dph/dotp/Main.hs +++ /dev/null @@ -1,54 +0,0 @@ -import DotPVect ( dotp ) - -import Control.Exception (evaluate) -import System.Console.GetOpt -import qualified System.Random as R - -import qualified Data.Array.Parallel.Unlifted as U -import qualified Data.Array.Parallel.PArray as P -import Data.Array.Parallel.PArray (PArray) - - - -generateVectorU :: Int -> IO (U.Array Double) -generateVectorU n = - do - let seed = 42742 - let rg = R.mkStdGen seed - let -- The std random function is too slow to generate really big vectors - -- with. Instead, we generate a short random vector and repeat that. - randvec = U.randomRs k (-100, 100) rg - vec = U.map (\i -> U.index "generateVectorU" randvec (i `mod` k)) (U.enumFromTo 0 (n-1)) - evaluate vec - return vec - where - k = 1000 - -generateVector :: Int -> IO (PArray Double) -generateVector n - = do - vec <- generateVectorU n - return $ P.fromUArray vec - -generateVectors :: Int -> IO (PArray Double, PArray Double) -generateVectors n = - do - v <- generateVector n - w <- generateVector n - return (v,w) - -main - = do -- compute dot product with NDP - vectors <- generateVectors 100000 - let resultViaNDP = (uncurry dotp) vectors - - -- compute with lists - let (aVecX, aVecY) = vectors - let vecX = P.toList aVecX - let vecY = P.toList aVecY - let resultViaList = sum $ zipWith (*) vecX vecY - - -- ignore wibbles in low order bits - putStr $ (take 12 $ show resultViaNDP) ++ "\n" - putStr $ (take 12 $ show resultViaList) ++ "\n" - diff --git a/testsuite/tests/dph/dotp/Makefile b/testsuite/tests/dph/dotp/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/dotp/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/dotp/dph-dotp-copy-fast.stdout b/testsuite/tests/dph/dotp/dph-dotp-copy-fast.stdout deleted file mode 100644 index e8f012cbc6..0000000000 --- a/testsuite/tests/dph/dotp/dph-dotp-copy-fast.stdout +++ /dev/null @@ -1,2 +0,0 @@ -3.3659625259 -3.3659625259 diff --git a/testsuite/tests/dph/dotp/dph-dotp-copy-opt.stdout b/testsuite/tests/dph/dotp/dph-dotp-copy-opt.stdout deleted file mode 100644 index e8f012cbc6..0000000000 --- a/testsuite/tests/dph/dotp/dph-dotp-copy-opt.stdout +++ /dev/null @@ -1,2 +0,0 @@ -3.3659625259 -3.3659625259 diff --git a/testsuite/tests/dph/dotp/dph-dotp-vseg-fast.stdout b/testsuite/tests/dph/dotp/dph-dotp-vseg-fast.stdout deleted file mode 100644 index e8f012cbc6..0000000000 --- a/testsuite/tests/dph/dotp/dph-dotp-vseg-fast.stdout +++ /dev/null @@ -1,2 +0,0 @@ -3.3659625259 -3.3659625259 diff --git a/testsuite/tests/dph/dotp/dph-dotp-vseg-opt.stdout b/testsuite/tests/dph/dotp/dph-dotp-vseg-opt.stdout deleted file mode 100644 index e8f012cbc6..0000000000 --- a/testsuite/tests/dph/dotp/dph-dotp-vseg-opt.stdout +++ /dev/null @@ -1,2 +0,0 @@ -3.3659625259 -3.3659625259 diff --git a/testsuite/tests/dph/dotp/dph-dotp.T b/testsuite/tests/dph/dotp/dph-dotp.T deleted file mode 100644 index e49644290a..0000000000 --- a/testsuite/tests/dph/dotp/dph-dotp.T +++ /dev/null @@ -1,20 +0,0 @@ - - -test ('dph-dotp-copy-fast' - , [ outputdir('copy-fast') - , reqlib('dph-lifted-copy') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-copy -package dph-prim-par']) - -test ('dph-dotp-vseg-fast' - , [ outputdir('vseg-fast') - , reqlib('dph-lifted-vseg') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-vseg -package dph-prim-par']) - diff --git a/testsuite/tests/dph/enumfromto/EnumFromToP.hs b/testsuite/tests/dph/enumfromto/EnumFromToP.hs deleted file mode 100644 index f210f21dab..0000000000 --- a/testsuite/tests/dph/enumfromto/EnumFromToP.hs +++ /dev/null @@ -1,24 +0,0 @@ --- List enumeration doesn't work for parallel list comprehensions. --- --- > ghc-stage2: panic! (the 'impossible' happened) --- > (GHC version 7.7.20130109 for x86_64-unknown-linux): --- > DsMonad: uninitialised ds_parr_bi --- --- (I.enumFromToP is a workaround) - -{-# LANGUAGE ParallelArrays, ParallelListComp #-} -{-# OPTIONS -fvectorise #-} -module EnumFromToP where - -import Data.Array.Parallel hiding ((+), (-), (*), (/)) -import Data.Array.Parallel.PArray -import Data.Array.Parallel.Prelude.Bool as B -import Data.Array.Parallel.Prelude.Double as D -import qualified Data.Array.Parallel.Prelude.Int as I -import qualified Data.Vector as V -import qualified Prelude as P - - -nums = [: 0 .. 100 :] - - diff --git a/testsuite/tests/dph/enumfromto/Makefile b/testsuite/tests/dph/enumfromto/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/enumfromto/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/enumfromto/dph-enumfromto.T b/testsuite/tests/dph/enumfromto/dph-enumfromto.T deleted file mode 100644 index ac4d0f0176..0000000000 --- a/testsuite/tests/dph/enumfromto/dph-enumfromto.T +++ /dev/null @@ -1,4 +0,0 @@ -test('EnumFromToP', - [reqlib('dph-lifted-vseg'), reqlib('dph-prim-par'), expect_broken(7736), - only_ways(['normal', 'threaded1', 'threaded2'])], - compile, ['-O0 -package dph-lifted-vseg']) diff --git a/testsuite/tests/dph/modules/ExportList.hs b/testsuite/tests/dph/modules/ExportList.hs deleted file mode 100644 index 99011e1a97..0000000000 --- a/testsuite/tests/dph/modules/ExportList.hs +++ /dev/null @@ -1,33 +0,0 @@ --- Explicit export list --- Produces error --- > ghc-stage2: panic! (the 'impossible' happened) --- > (GHC version 7.7.20130109 for x86_64-unknown-linux): --- > nameModule solveV{v r3Ep} --- It is something about internal vs external names. - -{-# LANGUAGE ParallelArrays, ParallelListComp #-} -{-# OPTIONS -fvectorise #-} -module ExportList (solvePA) where - -import Data.Array.Parallel hiding ((+), (-), (*), (/)) -import Data.Array.Parallel.PArray -import Data.Array.Parallel.Prelude.Bool as B -import Data.Array.Parallel.Prelude.Double as D -import qualified Data.Array.Parallel.Prelude.Int as I -import qualified Data.Vector as V -import qualified Prelude as P - -data NodeV = NodeV Double Double Double [:NodeV:] - -{-# NOINLINE solvePA #-} -solvePA - :: NodeV -- ^ nodes - -> Double -- ^ time - -> PArray Double -solvePA nodes t = toPArrayP (solveV t) - - -solveV :: Double -> [:Double:] -solveV t - = concatP (mapP solveV [: :]) - diff --git a/testsuite/tests/dph/modules/Makefile b/testsuite/tests/dph/modules/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/modules/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/modules/dph-ExportList-vseg-fast.stderr b/testsuite/tests/dph/modules/dph-ExportList-vseg-fast.stderr deleted file mode 100644 index bf6f453f71..0000000000 --- a/testsuite/tests/dph/modules/dph-ExportList-vseg-fast.stderr +++ /dev/null @@ -1,9 +0,0 @@ -[1 of 1] Compiling ExportList ( ExportList.hs, ExportList.o ) -Warning: vectorisation failure: identityConvTyCon: type constructor contains parallel arrays [::] - Could NOT call vectorised from original version - ExportList.solveV :: GHC.Types.Double -> [:GHC.Types.Double:] -Warning: vectorisation failure: identityConvTyCon: type constructor contains parallel arrays NodeV - Could NOT call vectorised from original version - ExportList.solvePA :: ExportList.NodeV - -> GHC.Types.Double - -> Data.Array.Parallel.PArray.PData.Base.PArray GHC.Types.Double diff --git a/testsuite/tests/dph/modules/dph-modules.T b/testsuite/tests/dph/modules/dph-modules.T deleted file mode 100644 index 6ccac11f30..0000000000 --- a/testsuite/tests/dph/modules/dph-modules.T +++ /dev/null @@ -1,4 +0,0 @@ -test('dph-ExportList-vseg-fast', - [reqlib('dph-lifted-vseg'), reqlib('dph-prim-par'), - only_ways(['normal', 'threaded1', 'threaded2'])], - multimod_compile, ['ExportList', '-O0 -package dph-lifted-vseg']) diff --git a/testsuite/tests/dph/nbody/Body.hs b/testsuite/tests/dph/nbody/Body.hs deleted file mode 100644 index 8a116993a8..0000000000 --- a/testsuite/tests/dph/nbody/Body.hs +++ /dev/null @@ -1,85 +0,0 @@ -{-# LANGUAGE BangPatterns #-} - --- | Massful bodies in the simulation. -module Body - ( Velocity - , Accel - , MassPoint - , Body - - , unitBody - , massPointOfBody - , setMassOfBody - , setAccelOfBody - , setStartVelOfBody - , advanceBody) -where -import Util - - --- Types ---------------------------------------------------------------------- --- We're using tuples instead of ADTs so we can put them in unboxed vectors. - --- | The velocity of a point. -type Velocity = (Double, Double) - --- | The acceleration of a point. -type Accel = (Double, Double) - --- | A point in 2D space with its mass. -type MassPoint = (Double, Double, Double) - --- | Bodies consist of a MassPoint, but also carry their velocity --- and acceleration between steps of the simulation. -type Body = (MassPoint, Velocity, Accel) - - --- Body ----------------------------------------------------------------------- --- | Make a body with unit mass and zero vel and acc. -unitBody :: Double -> Double -> Body -unitBody x y - = ((x, y, 1), (0, 0), (0, 0)) - - --- | Take the MassPoint of a body. -massPointOfBody :: Body -> MassPoint -massPointOfBody (mp, vel, acc) - = mp - - --- | Set the mass of a body. -setMassOfBody :: Double -> Body -> Body -setMassOfBody mass ((x, y, _), vel, acc) - = ((x, y, mass), vel, acc) - - --- | Set the acceleration of a body. -setAccelOfBody :: Accel -> Body -> Body -setAccelOfBody acc' (mp, vel, _) - = (mp, vel, acc') - - --- | Set the starting velocity of a body. --- It is set to rotate around the origin, with the speed proportional --- to the sqrt of the distance from it. This seems to make nice simulations. -setStartVelOfBody :: Double -> Body -> Body -setStartVelOfBody startVel (mp@(x, y, mass), vel, acc) - = let pos = (x, y) - (x', y') = normaliseV (x, y) - vel' = (y', -x') - vel'' = mulSV (sqrt (magV pos) * startVel) vel' - - in (mp, vel'', acc) - - --- | Advance a body forwards in time. -advanceBody :: Double -> Body -> Body -advanceBody time - ( (px, py, mass) - , (vx, vy) - , acc@(ax, ay)) - - = ( (px + time * vx, py + time * vy, mass) - , (vx + time * ax, vy + time * ay) - , acc) - diff --git a/testsuite/tests/dph/nbody/Config.hs b/testsuite/tests/dph/nbody/Config.hs deleted file mode 100644 index 1fc93a8164..0000000000 --- a/testsuite/tests/dph/nbody/Config.hs +++ /dev/null @@ -1,50 +0,0 @@ - -module Config - ( Config(..) - , defaultConfig) -where - --- | Program config -data Config - = Config { - -- What solver to use - configSolverName :: String - - -- System setup - , configBodyCount :: Int - , configBodyMass :: Double - , configTimeStep :: Double - , configEpsilon :: Double - - -- Initial conditions. - , configStartDiscSize :: Double - , configStartSpeed :: Double - - -- Terminating conditions. - , configMaxSteps :: Int - - -- Dump points to file - , configDumpFinal :: Maybe FilePath - - -- Print points to stdout - , configPrintFinal :: Bool - - -- Print timings to stdout - , configPrintTimings :: Bool } - - -defaultConfig :: Config -defaultConfig - = Config - { configSolverName = "nested-bh" - , configBodyCount = 100 - , configBodyMass = 10 - , configTimeStep = 1 - , configEpsilon = 100 - , configStartDiscSize = 50 - , configStartSpeed = 0.5 - , configMaxSteps = 10 - , configDumpFinal = Nothing - , configPrintFinal = True - , configPrintTimings = False } - diff --git a/testsuite/tests/dph/nbody/Dump.hs b/testsuite/tests/dph/nbody/Dump.hs deleted file mode 100644 index b436e3c07a..0000000000 --- a/testsuite/tests/dph/nbody/Dump.hs +++ /dev/null @@ -1,46 +0,0 @@ -{-# LANGUAGE ScopedTypeVariables #-} -module Dump - ( dumpWorld - , printWorld) -where -import Body -import World -import System.IO -import Data.List -import Text.Printf -import qualified Data.Vector.Unboxed as V - - --- | Dump the bodies in a world to a file. -dumpWorld :: World -> FilePath -> IO () -dumpWorld world filePath - = do h <- openFile filePath WriteMode - mapM_ (hWriteBody h) - $ V.toList - $ worldBodies world - hClose h - - --- | Print the bodies in a world to stdout -printWorld :: World -> IO () -printWorld world - = do mapM_ (hWriteBody stdout) - $ V.toList - $ worldBodies world - - --- | Write a single body to a file. -hWriteBody :: Handle -> Body -> IO () -hWriteBody h ((px, py, mass), (vx, vy), (ax, ay)) - = hPutStrLn h - $ concat - $ ( (padRc 8 ' ' $ show mass) - : " " - : (intersperse " " - $ map (\f -> printf "%15.8f" f) [ px, py, vx, vy, ax, ay ])) - - --- | Right justify a doc, padding with a given character. -padRc :: Int -> Char -> String -> String -padRc n c str - = replicate (n - length str) c ++ str diff --git a/testsuite/tests/dph/nbody/Generate.hs b/testsuite/tests/dph/nbody/Generate.hs deleted file mode 100644 index 5b700ddec5..0000000000 --- a/testsuite/tests/dph/nbody/Generate.hs +++ /dev/null @@ -1,98 +0,0 @@ -{-# LANGUAGE TypeOperators #-} -module Generate - ( genPointsUniform - , genPointsUniformWithSeed - , genPointsDisc - , genPointsCombo - , pointsPArrayOfUArray ) -where -import Types -import Randomish -import qualified Data.Array.Parallel.Unlifted as U -import qualified Data.Array.Parallel as P -import qualified Data.Array.Parallel.PArray as P -import Data.Array.Parallel.PArray (PArray) -import Control.Exception - --- Random points generation --- IMPORTANT: We use the same seed with the same random generator in all --- quickhull codes. The asymptotic work complexity of quickhull --- is between O (N) and O (N^2) depending on the input. --- To compare benchmark results, they always need to use the same --- input. -seed :: Int -seed = 42742 - --- | Some uniformly distributed points -genPointsUniform - :: Int -- ^ number of points - -> Double -- ^ minimum coordinate - -> Double -- ^ maximum coordinate - -> U.Array (Double, Double) - -genPointsUniform n pointMin pointMax - = let pts = randomishDoubles (n*2) pointMin pointMax seed - xs = U.extract pts 0 n - ys = U.extract pts n n - in U.zip xs ys - - --- | Some uniformly distributed points -genPointsUniformWithSeed - :: Int -- ^ seed - -> Int -- ^ number of points - -> Double -- ^ minimum coordinate - -> Double -- ^ maximum coordinate - -> U.Array (Double, Double) - -genPointsUniformWithSeed seed' n pointMin pointMax - = let pts = randomishDoubles (n*2) pointMin pointMax seed' - xs = U.extract pts 0 n - ys = U.extract pts n n - in U.zip xs ys - - --- | Some points distributed as a disc -genPointsDisc - :: Int -- ^ number of points - -> (Double, Double) -- ^ center of disc - -> Double -- ^ radius of disc - -> U.Array (Double, Double) - -genPointsDisc n (originX, originY) radiusMax - = let radius = randomishDoubles n 0 radiusMax seed - angle = randomishDoubles n (-pi) pi (seed + 1234) - - makeXY r a - = ( originX + r * cos a - , originY + r * sin a) - - in originX `seq` originY `seq` U.zipWith makeXY radius angle - - --- | A point cloud with areas of high and low density -genPointsCombo - :: Int -- ^ number of points - -> U.Array (Double, Double) - -genPointsCombo n - = genPointsDisc (n `div` 5) (250, 250) 200 - U.+:+ genPointsDisc (n `div` 5) (100, 100) 80 - U.+:+ genPointsDisc (n `div` 5) (150, 300) 30 - U.+:+ genPointsDisc (n `div` 5) (500, 120) 30 - U.+:+ genPointsDisc (n `div` 5) (300, 200) 150 - - --- | Convert a list of points to a PArray -pointsPArrayOfUArray - :: U.Array (Double, Double) - -> IO (PArray Point) - -pointsPArrayOfUArray ps - = do - let pts = makePointsPA - (P.fromUArray (U.fsts ps)) - (P.fromUArray (U.snds ps)) - evaluate $ P.nf pts - return pts - diff --git a/testsuite/tests/dph/nbody/Main.hs b/testsuite/tests/dph/nbody/Main.hs deleted file mode 100644 index ad2c809a1c..0000000000 --- a/testsuite/tests/dph/nbody/Main.hs +++ /dev/null @@ -1,103 +0,0 @@ -{-# LANGUAGE ParallelListComp, BangPatterns #-} - -import Config -import Dump -import World -import Body -import Util -import Solver -import Generate -import Control.Monad -import Data.Maybe -import qualified Data.Vector.Unboxed as V -import qualified Data.Array.Parallel as P -import qualified Data.Array.Parallel.PArray as P - - -main :: IO () -main - = let config = defaultConfig - calcAccels = calcAccels_nb - - -- Setup initial world - vPoints = genPointsDisc - (configBodyCount config) - (0, 0) - (configStartDiscSize config) - - vBodies = V.map (setStartVelOfBody $ configStartSpeed config) - $ V.map (setMassOfBody $ configBodyMass config) - $ V.map (uncurry unitBody) - $ vPoints - - worldStart = World - { worldBodies = vBodies - , worldSteps = 0 } - - in mainBatch config calcAccels worldStart - - --- | Run the simulation in batch mode. -mainBatch :: Config -> Solver -> World -> IO () -mainBatch config calcAccels worldStart - = do let world' = mainBatchRun config calcAccels worldStart - mainEnd (configDumpFinal config) - (configPrintFinal config) - world' - - -mainBatchRun config calcAccels worldStart - = go worldStart - where go !world - = let world' = advanceWorld - (calcAccels $ configEpsilon config) - (configTimeStep config) - world - - in if worldSteps world' < configMaxSteps config - then go world' - else world' - - --- | Called at end of run to dump final world state. -mainEnd :: Maybe FilePath -- ^ Write final bodies to this file. - -> Bool -- ^ Print final bodies to stdout - -> World -- ^ Final world state. - -> IO () - -mainEnd mDumpFinal printFinal world - = do -- Dump the final world state to file if requested. - maybe (return ()) (dumpWorld world) mDumpFinal - when printFinal (printWorld world) - - --- Solver --------------------------------------------------------------------- -type Solver = Double -> V.Vector MassPoint -> V.Vector Accel - --- | Nested Data Parallelism + Barnes-Hut algorithm. -calcAccels_nb :: Solver -calcAccels_nb epsilon mpts - = let - -- bounds finding isn't vectorised yet. - (llx, lly, rux, ruy) = findBounds mpts - - mpts' = P.fromList $ V.toList mpts - accels' = calcAccelsWithBoxPA epsilon llx lly rux ruy mpts' - - in V.fromList $ P.toList accels' - - --- | Find the coordinates of the bounding box that contains these points. -findBounds :: V.Vector MassPoint -> (Double, Double, Double, Double) -{-# INLINE findBounds #-} -findBounds bounds - = V.foldl' acc (x1, y1, x1, y1) bounds - where - (x1, y1, _) = bounds V.! 0 - - acc (!llx, !lly, !rux, !ruy) (x, y, _) - = let !llx' = min llx x - !lly' = min lly y - !rux' = max rux x - !ruy' = max ruy y - in (llx', lly', rux', ruy') diff --git a/testsuite/tests/dph/nbody/Makefile b/testsuite/tests/dph/nbody/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/nbody/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/nbody/Randomish.hs b/testsuite/tests/dph/nbody/Randomish.hs deleted file mode 100644 index 7aeefa33d8..0000000000 --- a/testsuite/tests/dph/nbody/Randomish.hs +++ /dev/null @@ -1,82 +0,0 @@ -{-# LANGUAGE BangPatterns #-} - -module Randomish - ( randomishInts - , randomishDoubles) -where -import Data.Word -import Data.Vector.Unboxed (Vector) -import qualified Data.Vector.Unboxed.Mutable as MV -import qualified Data.Vector.Unboxed as V -import qualified Data.Vector.Generic as G - - --- | Use the "minimal standard" Lehmer generator to quickly generate some random --- numbers with reasonable statistical properties. By "reasonable" we mean good --- enough for games and test data, but not cryptography or anything where the --- quality of the randomness really matters. --- --- From "Random Number Generators: Good ones are hard to find" --- Stephen K. Park and Keith W. Miller. --- Communications of the ACM, Oct 1988, Volume 31, Number 10. --- -randomishInts - :: Int -- Length of vector. - -> Int -- Minumum value in output. - -> Int -- Maximum value in output. - -> Int -- Random seed. - -> Vector Int -- Vector of random numbers. - -randomishInts !len !valMin' !valMax' !seed' - - = let -- a magic number (don't change it) - multiplier :: Word64 - multiplier = 16807 - - -- a merzenne prime (don't change it) - modulus :: Word64 - modulus = 2^(31 :: Integer) - 1 - - -- if the seed is 0 all the numbers in the sequence are also 0. - seed - | seed' == 0 = 1 - | otherwise = seed' - - !valMin = fromIntegral valMin' - !valMax = fromIntegral valMax' + 1 - !range = valMax - valMin - - {-# INLINE f #-} - f x = multiplier * x `mod` modulus - in G.create - $ do - vec <- MV.new len - - let go !ix !x - | ix == len = return () - | otherwise - = do let x' = f x - MV.write vec ix $ fromIntegral $ (x `mod` range) + valMin - go (ix + 1) x' - - go 0 (f $ f $ f $ fromIntegral seed) - return vec - - --- | Generate some randomish doubles with terrible statistical properties. --- This is good enough for test data, but not much else. -randomishDoubles - :: Int -- Length of vector - -> Double -- Minimum value in output - -> Double -- Maximum value in output - -> Int -- Random seed. - -> Vector Double -- Vector of randomish doubles. - -randomishDoubles !len !valMin !valMax !seed - = let range = valMax - valMin - - mx = 2^(30 :: Integer) - 1 - mxf = fromIntegral mx - ints = randomishInts len 0 mx seed - - in V.map (\n -> valMin + (fromIntegral n / mxf) * range) ints diff --git a/testsuite/tests/dph/nbody/Solver.hs b/testsuite/tests/dph/nbody/Solver.hs deleted file mode 100644 index a5545b3f2f..0000000000 --- a/testsuite/tests/dph/nbody/Solver.hs +++ /dev/null @@ -1,156 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise #-} -module Solver - (calcAccelsWithBoxPA) -where -import Data.Array.Parallel -import Data.Array.Parallel.Prelude.Bool -import Data.Array.Parallel.Prelude.Double as D -import qualified Data.Array.Parallel.Prelude.Int as I -import qualified Prelude - -data BoundingBox - = Box Double -- lower left X - Double -- lower left Y - Double -- upper right X - Double -- upper right Y - -data MassPoint - = MP Double -- pos X - Double -- pos Y - Double -- mass - -type Accel - = (Double, Double) - -data BHTree - = BHT Double -- size of cell - Double -- centroid X - Double -- centroid Y - Double -- centroid mass - [:BHTree:] -- children - - -calcAccelsWithBoxPA - :: Double - -> Double -> Double -> Double -> Double - -> PArray (Double, Double, Double) - -> PArray (Double, Double) - -calcAccelsWithBoxPA epsilon llx lly rux ruy mpts - = let mpts' = [: MP x y m | (x, y, m) <- fromPArrayP mpts :] - accs' = calcAccelsWithBox epsilon llx lly rux ruy mpts' - in toPArrayP accs' -{-# NOINLINE calcAccelsWithBoxPA #-} - --- | Given the extend of a bounding box containing all the points, --- calculate the accelerations on all of them. -calcAccelsWithBox - :: Double - -> Double -> Double -> Double -> Double - -> [: MassPoint :] - -> [: Accel :] - -calcAccelsWithBox epsilon llx lly rux ruy mspts - = accs - where accs = [: calcAccel epsilon m tree | m <- mspts :] - tree = buildTree (Box llx lly rux ruy) mspts - - --- | Build the Barnes-Hut quadtree tree. -buildTree :: BoundingBox -> [: MassPoint :] -> BHTree -buildTree bb particles - | lengthP particles I.<= 1 = BHT s x y m emptyP - | otherwise = BHT s x y m subTrees - where (MP x y m) = calcCentroid particles - (boxes, splitPnts) = splitPoints bb particles - subTrees = [:buildTree bb' ps | (bb', ps) <- zipP boxes splitPnts:] - - (Box llx lly rux ruy) = bb - sx = rux D.- llx - sy = ruy D.- lly - s = if sx D.< sy then sx else sy - - --- | Split massPoints according to their locations in the quadrants. -splitPoints - :: BoundingBox - -> [: MassPoint :] - -> ([:BoundingBox:], [:[: MassPoint :]:]) - -splitPoints b@(Box llx lly rux ruy) particles - | noOfPoints I.<= 1 = (singletonP b, singletonP particles) - | otherwise - = unzipP [: (b,p) | (b,p) <- zipP boxes splitPars, lengthP p I.> 0:] - where noOfPoints = lengthP particles - lls = [: p | p <- particles, inBox b1 p :] - lus = [: p | p <- particles, inBox b2 p :] - rus = [: p | p <- particles, inBox b3 p :] - rls = [: p | p <- particles, inBox b4 p :] - b1 = Box llx lly midx midy - b2 = Box llx midy midx ruy - b3 = Box midx midy rux ruy - b4 = Box midx lly rux midy - boxes = singletonP b1 +:+ singletonP b2 +:+ singletonP b3 +:+ singletonP b4 - splitPars = singletonP lls +:+ singletonP lus +:+ singletonP rus +:+ singletonP rls - (midx, midy) = ((llx D.+ rux) D./ 2.0 , (lly D.+ ruy) D./ 2.0) - - --- | Checks if particle is in box (excluding left and lower border) -inBox :: BoundingBox -> MassPoint -> Bool -inBox (Box llx lly rux ruy) (MP px py _) - = (px D.> llx) && (px D.<= rux) && (py D.> lly) && (py D.<= ruy) - - --- | Calculate the centroid of some points. -calcCentroid:: [:MassPoint:] -> MassPoint -calcCentroid mpts - = MP (sumP xs / mass) (sumP ys / mass) mass - where mass = sumP [: m | MP _ _ m <- mpts :] - (xs, ys) = unzipP [: (m D.* x, m D.* y) | MP x y m <- mpts :] - - --- | Calculate the accelleration of a point due to the points in the given tree. -calcAccel :: Double -> MassPoint -> BHTree -> (Double, Double) -calcAccel epsilon mpt (BHT s x y m subtrees) - | lengthP subtrees I.== 0 - = accel epsilon mpt (MP x y m) - - | isFar mpt s x y - = accel epsilon mpt (MP x y m) - - | otherwise - = let (xs, ys) = unzipP [: calcAccel epsilon mpt st | st <- subtrees :] - in (sumP xs, sumP ys) - - --- | Calculate the acceleration on a point due to some other point. -accel :: Double -- ^ If the distance between the points is smaller than this - -- then ignore the forces between them. - -> MassPoint -- ^ The point being acclerated. - -> MassPoint -- ^ Neibouring point. - -> Accel - -accel epsilon (MP x1 y1 _) (MP x2 y2 m) - = (aabs D.* dx D./ r , aabs D.* dy D./ r) - where rsqr = (dx D.* dx) D.+ (dy D.* dy) D.+ epsilon D.* epsilon - r = sqrt rsqr - dx = x1 D.- x2 - dy = y1 D.- y2 - aabs = m D./ rsqr - - --- | If the point is far from a cell in the tree then we can use --- it's centroid as an approximation of all the points in the region. -isFar :: MassPoint -- point being accelerated - -> Double -- size of region - -> Double -- position of center of mass of cell - -> Double -- position of center of mass of cell - -> Bool - -isFar (MP x1 y1 m) s x2 y2 - = let dx = x2 D.- x1 - dy = y2 D.- y1 - dist = sqrt (dx D.* dx D.+ dy D.* dy) - in (s D./ dist) D.< 1 - diff --git a/testsuite/tests/dph/nbody/Types.hs b/testsuite/tests/dph/nbody/Types.hs deleted file mode 100644 index 5ebd849a62..0000000000 --- a/testsuite/tests/dph/nbody/Types.hs +++ /dev/null @@ -1,52 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise #-} - -module Types - ( Point - , Line - , makePoints, makePointsPA - , xsOf, xsOfPA - , ysOf, ysOfPA) -where -import Data.Array.Parallel -import Data.Array.Parallel.Prelude.Double -import qualified Data.Array.Parallel.Prelude.Double as D -import qualified Prelude as P - -type Point = (Double, Double) -type Line = (Point, Point) - --- | Make some points from their components. -makePoints :: [:Double:] -> [:Double:] -> [:Point:] -makePoints = zipP - - --- | Make some points from their components, as a `PArray`. -makePointsPA :: PArray Double -> PArray Double -> PArray Point -{-# NOINLINE makePointsPA #-} -makePointsPA xs ys - = toPArrayP (makePoints (fromPArrayP xs) (fromPArrayP ys)) - - --- | Take the x values of some points. -xsOf :: [:Point:] -> [:Double:] -xsOf ps = [: x | (x, _) <- ps :] - - --- | Take the x values of some points as a `PArray`. -xsOfPA :: PArray Point -> PArray Double -{-# NOINLINE xsOfPA #-} -xsOfPA ps = toPArrayP (xsOf (fromPArrayP ps)) - - --- | Take the y values of some points. -ysOf :: [:Point:] -> [:Double:] -ysOf ps = [: y | (_, y) <- ps :] - - --- | Take the y values of some points as a `PArray`. -ysOfPA :: PArray Point -> PArray Double -{-# NOINLINE ysOfPA #-} -ysOfPA ps = toPArrayP (ysOf (fromPArrayP ps)) - - diff --git a/testsuite/tests/dph/nbody/Util.hs b/testsuite/tests/dph/nbody/Util.hs deleted file mode 100644 index 5f78802c83..0000000000 --- a/testsuite/tests/dph/nbody/Util.hs +++ /dev/null @@ -1,18 +0,0 @@ - -module Util - ( magV - , mulSV - , normaliseV) -where - --- | The magnitude of a vector. -magV :: (Double, Double) -> Double -magV (x, y) = sqrt (x * x + y * y) - --- | Multiply a vector by a scalar. -mulSV :: Double -> (Double, Double) -> (Double, Double) -mulSV s (x, y) = (s * x, s * y) - --- | Normalise a vector, so it has a magnitude of 1. -normaliseV :: (Double, Double) -> (Double, Double) -normaliseV v = mulSV (1 / magV v) v diff --git a/testsuite/tests/dph/nbody/World.hs b/testsuite/tests/dph/nbody/World.hs deleted file mode 100644 index d858ffb928..0000000000 --- a/testsuite/tests/dph/nbody/World.hs +++ /dev/null @@ -1,47 +0,0 @@ -{-# LANGUAGE BangPatterns #-} - -module World - ( World(..) - , advanceWorld) -where -import Body -import qualified Data.Vector.Unboxed as V - -data World - = World - { -- | Bodies in the simulation. - worldBodies :: !(V.Vector Body) - - -- | Number of steps taken in the simulation so far. - , worldSteps :: !Int } - - --- | Advance the world forward in time. -advanceWorld - :: (V.Vector MassPoint -> V.Vector Accel) - -- ^ Fn to compute accelerations of each point. - -> Double -- ^ Time step. - -> World - -> World - -advanceWorld calcAccels timeStep world - = let -- Calculate the accelerations on each body. - accels = calcAccels - $ V.map massPointOfBody - $ worldBodies world - - -- Apply the accelerations to the bodies and advance them. - bodies' = V.zipWith - (\body (ax, ay) - -> advanceBody timeStep - (setAccelOfBody (-ax, -ay) body)) - (worldBodies world) - accels - - -- Update the world. - steps' = worldSteps world + 1 - - in world { worldBodies = bodies' - , worldSteps = steps' } - -
\ No newline at end of file diff --git a/testsuite/tests/dph/nbody/dph-nbody-copy-fast.stdout b/testsuite/tests/dph/nbody/dph-nbody-copy-fast.stdout deleted file mode 100644 index 69fdd8b303..0000000000 --- a/testsuite/tests/dph/nbody/dph-nbody-copy-fast.stdout +++ /dev/null @@ -1,100 +0,0 @@ - 10.0 -7.88876745 14.40403609 0.07781862 1.41725313 0.00728077 -0.00615418 - 10.0 -20.39602554 -5.40256368 -1.56824530 0.67893475 0.01493099 0.00782011 - 10.0 -0.05794753 10.34183386 0.35651327 0.89460951 0.00188899 -0.00356931 - 10.0 -4.75609397 34.74782948 1.61195437 1.87077953 0.00587195 -0.01975082 - 10.0 36.25896362 10.82337782 2.14170846 -1.41319743 -0.02163268 -0.00507727 - 10.0 4.02674361 -9.00872919 0.03617254 -0.88316283 -0.00122400 0.00926493 - 10.0 42.00406508 -40.85785845 -0.76014767 -3.29738763 -0.02191949 0.02332737 - 10.0 -22.63186030 5.80994447 -1.07420146 1.51160117 0.01670201 0.00006355 - 10.0 16.53870540 16.94639077 1.84926442 0.20378411 -0.00879785 -0.00880553 - 10.0 39.92854878 29.06425991 2.88523318 -1.01552251 -0.02189971 -0.01632925 - 10.0 -17.45501954 11.39301477 -0.56641470 1.60906365 0.01371008 -0.00396360 - 10.0 26.25934753 8.00486951 1.85024443 -0.89918952 -0.01562756 -0.00309898 - 10.0 -9.33900099 9.24549389 -0.36060159 1.12461927 0.00801307 -0.00255620 - 10.0 -46.47873679 -28.36980232 -2.92763912 1.44708065 0.02528654 0.01949016 - 10.0 -12.54370842 34.21722863 1.24120256 2.21072951 0.01080973 -0.01869097 - 10.0 -7.14048930 7.10420057 -0.36081624 0.86670872 0.00647863 -0.00118788 - 10.0 -49.88492485 -23.33817148 -2.76602163 1.78294227 0.02720067 0.01682362 - 10.0 -19.81399282 53.52954568 2.07232227 2.65936299 0.01424146 -0.02727658 - 10.0 23.77418551 14.68227128 2.04725863 -0.41772276 -0.01379116 -0.00752371 - 10.0 -5.73673778 8.93192786 -0.16259409 0.97138466 0.00562305 -0.00245174 - 10.0 10.54277542 -1.02674862 0.84834041 -0.44100517 -0.00531874 0.00383461 - 10.0 23.01197723 21.12299112 2.25990543 -0.12607295 -0.01291140 -0.01176114 - 10.0 -44.78532667 12.05197921 -1.02696812 2.77848076 0.02808850 -0.00298275 - 10.0 31.46388060 -49.75461307 -1.52046945 -3.03579919 -0.01637469 0.02786471 - 10.0 24.84943257 -25.92687211 -0.24060772 -2.45045466 -0.01484349 0.01860299 - 10.0 25.91948874 -30.60444211 -0.52684367 -2.60005186 -0.01516185 0.02084074 - 10.0 -10.85946929 20.87407647 0.39902427 1.82589346 0.00972306 -0.01062660 - 10.0 -38.51435867 1.59076858 -1.56374573 2.10935343 0.02533138 0.00325720 - 10.0 48.51766969 -21.77175738 0.49039776 -3.14884736 -0.02642908 0.01352300 - 10.0 5.74566172 46.44110258 2.61301762 1.41963745 -0.00049448 -0.02602402 - 10.0 -22.88917903 -27.97906439 -2.49898486 -0.03157484 0.01438842 0.02110301 - 10.0 31.73261776 -6.28614087 1.21728705 -1.94829313 -0.01955786 0.00624200 - 10.0 4.24232124 19.44671943 1.21964188 1.10199242 -0.00052277 -0.01009959 - 10.0 0.91334970 48.66777413 2.53737735 1.69247032 0.00244742 -0.02680742 - 10.0 10.67139892 31.69558668 2.17625638 0.97201541 -0.00424894 -0.01856619 - 10.0 12.94163719 58.29627746 3.27732262 1.10311871 -0.00411829 -0.03016643 - 10.0 39.19514702 34.09017661 3.04651632 -0.83806079 -0.02092181 -0.01899392 - 10.0 -24.13067759 -32.16302812 -2.68262548 -0.04506858 0.01454248 0.02301772 - 10.0 51.78333979 -13.45956325 1.00920828 -3.03719366 -0.02816357 0.00875884 - 10.0 -18.73188233 -17.30379387 -1.95701398 -0.00677590 0.01307052 0.01538889 - 10.0 24.70514705 -49.06503148 -1.67808526 -2.78661149 -0.01337746 0.02867654 - 10.0 -51.06940692 -15.61458174 -2.46357376 2.08982818 0.02835174 0.01252356 - 10.0 -4.29154911 -29.69366786 -1.77081329 -1.27717018 0.00330457 0.02241695 - 10.0 2.11752441 33.61609431 1.87012243 1.50451828 0.00141129 -0.01940596 - 10.0 37.73902003 -20.32722331 0.42253535 -2.74138534 -0.02210996 0.01412198 - 10.0 18.24940441 16.13909492 1.89723284 0.04723628 -0.00993771 -0.00831431 - 10.0 -0.86685880 -26.00179392 -1.38458807 -1.39913472 0.00136531 0.02041813 - 10.0 -14.99514725 -9.73327401 -1.49412678 0.04580994 0.01096177 0.01022804 - 10.0 7.00887790 1.98168034 0.68812772 0.00896544 -0.00293511 0.00198547 - 10.0 14.82165676 -26.61468332 -0.63832974 -2.10322539 -0.00891726 0.01991691 - 10.0 36.97393038 41.34508248 3.24972457 -0.53759403 -0.01886630 -0.02264741 - 10.0 13.20164819 -5.94173158 0.74976608 -0.99205532 -0.00725503 0.00697320 - 10.0 -27.55525109 11.38230453 -0.82867230 2.04896832 0.02021279 -0.00334846 - 10.0 44.22611452 7.91205992 2.08170876 -1.97441862 -0.02553919 -0.00334242 - 10.0 -30.78228408 -9.00330845 -1.98277752 1.19492292 0.02083894 0.00999898 - 10.0 21.23162596 1.68817791 1.43493089 -0.91572699 -0.01244008 0.00145281 - 10.0 43.83049777 17.41111171 2.48943804 -1.60943360 -0.02478736 -0.00913389 - 10.0 18.27076095 14.11054567 1.82221570 -0.03605102 -0.01008131 -0.00688670 - 10.0 -23.16386718 14.98115804 -0.48627528 2.03701218 0.01725857 -0.00604352 - 10.0 17.66869644 37.69009924 2.68456831 0.61313519 -0.00829888 -0.02182563 - 10.0 -13.13453980 43.06229834 1.74152194 2.32880687 0.01088136 -0.02345547 - 10.0 17.04551969 -8.51968300 0.74199110 -1.36393081 -0.00992090 0.00843742 - 10.0 -12.74957582 2.86610039 -0.88706993 0.76014301 0.01004519 0.00183585 - 10.0 -11.57352997 -3.93218467 -1.08155095 0.15539312 0.00900597 0.00634724 - 10.0 -0.43691930 11.99128730 0.42464351 1.00896428 0.00223775 -0.00474195 - 10.0 -18.84718297 2.59155114 -1.14765946 1.09328119 0.01395275 0.00224813 - 10.0 26.50822037 34.91831202 2.84251996 -0.01459342 -0.01374681 -0.02010543 - 10.0 -1.83862732 -27.40591387 -1.51844281 -1.37417813 0.00190638 0.02119551 - 10.0 -29.61534814 -11.34773579 -2.05992588 1.01365241 0.02001716 0.01147311 - 10.0 -1.58282077 2.69811157 -0.11418406 0.29617314 0.00265977 0.00167764 - 10.0 2.81028701 8.79669118 0.52804717 0.69094215 -0.00005422 -0.00258329 - 10.0 -46.98701557 11.56383052 -1.07690408 2.84555950 0.02883999 -0.00259972 - 10.0 -3.40737443 -56.06838909 -2.91291405 -1.56839602 0.00150420 0.03217266 - 10.0 -19.98158539 39.46428514 1.28835283 2.57214878 0.01493065 -0.02105105 - 10.0 -44.66881930 12.46139603 -1.00158524 2.78765137 0.02804667 -0.00323063 - 10.0 -16.39650937 23.16371517 0.32747014 2.11248239 0.01323682 -0.01177621 - 10.0 21.95611509 7.76064067 1.72075828 -0.61228724 -0.01269236 -0.00269100 - 10.0 -10.50904475 12.60669705 -0.19243723 1.40501570 0.00897813 -0.00484325 - 10.0 -14.30586541 -0.91198946 -1.12740574 0.55739977 0.01090470 0.00440092 - 10.0 -46.00705467 -6.85206507 -2.04591400 2.14319881 0.02767905 0.00814089 - 10.0 30.41289215 -6.97966533 1.15654150 -1.91885498 -0.01852614 0.00680537 - 10.0 -48.27660341 27.60241976 -0.13762372 3.31622222 0.02879885 -0.01161224 - 10.0 -17.74747450 10.50189167 -0.63686673 1.56720699 0.01384037 -0.00328594 - 10.0 54.39641806 -0.37738366 1.72976962 -2.73607215 -0.02940059 0.00129876 - 10.0 6.47050061 -29.43922970 -1.20659479 -1.82090480 -0.00359394 0.02244751 - 10.0 0.58954963 -13.25292294 -0.49482500 -1.03808365 0.00082873 0.01218738 - 10.0 -12.31468078 -40.73604077 -2.60912850 -0.94516629 0.00720515 0.02765879 - 10.0 38.13312568 24.34484548 2.69648135 -1.04260079 -0.02152543 -0.01341969 - 10.0 -13.70564154 27.92937950 0.77625108 2.14221048 0.01158560 -0.01492998 - 10.0 40.53583366 -0.14911602 1.65704468 -2.10583120 -0.02408788 0.00179315 - 10.0 8.39984292 -15.41302717 -0.12676090 -1.44483730 -0.00437128 0.01330585 - 10.0 22.44930397 -38.06973908 -1.11496697 -2.59958621 -0.01287940 0.02515562 - 10.0 47.41809427 3.44198464 1.88610439 -2.29818650 -0.02696432 -0.00068958 - 10.0 27.36675414 46.97814868 3.25532655 0.14568231 -0.01291442 -0.02560627 - 10.0 -10.16897115 -22.40458265 -1.73420047 -0.76737649 0.00741932 0.01846132 - 10.0 40.36029012 -18.88517950 0.55513182 -2.79063722 -0.02344201 0.01302615 - 10.0 -14.39025584 20.54575351 0.21589623 1.94610689 0.01196694 -0.01021320 - 10.0 19.64156343 34.26658662 2.62377284 0.42861126 -0.00976569 -0.01997954 - 10.0 -33.50298072 43.14541702 1.10503992 3.09224158 0.02172220 -0.02121984 - 10.0 -20.79202850 -24.09713162 -2.28882549 -0.07479119 0.01364036 0.01919977 diff --git a/testsuite/tests/dph/nbody/dph-nbody-copy-opt.stdout b/testsuite/tests/dph/nbody/dph-nbody-copy-opt.stdout deleted file mode 100644 index 69fdd8b303..0000000000 --- a/testsuite/tests/dph/nbody/dph-nbody-copy-opt.stdout +++ /dev/null @@ -1,100 +0,0 @@ - 10.0 -7.88876745 14.40403609 0.07781862 1.41725313 0.00728077 -0.00615418 - 10.0 -20.39602554 -5.40256368 -1.56824530 0.67893475 0.01493099 0.00782011 - 10.0 -0.05794753 10.34183386 0.35651327 0.89460951 0.00188899 -0.00356931 - 10.0 -4.75609397 34.74782948 1.61195437 1.87077953 0.00587195 -0.01975082 - 10.0 36.25896362 10.82337782 2.14170846 -1.41319743 -0.02163268 -0.00507727 - 10.0 4.02674361 -9.00872919 0.03617254 -0.88316283 -0.00122400 0.00926493 - 10.0 42.00406508 -40.85785845 -0.76014767 -3.29738763 -0.02191949 0.02332737 - 10.0 -22.63186030 5.80994447 -1.07420146 1.51160117 0.01670201 0.00006355 - 10.0 16.53870540 16.94639077 1.84926442 0.20378411 -0.00879785 -0.00880553 - 10.0 39.92854878 29.06425991 2.88523318 -1.01552251 -0.02189971 -0.01632925 - 10.0 -17.45501954 11.39301477 -0.56641470 1.60906365 0.01371008 -0.00396360 - 10.0 26.25934753 8.00486951 1.85024443 -0.89918952 -0.01562756 -0.00309898 - 10.0 -9.33900099 9.24549389 -0.36060159 1.12461927 0.00801307 -0.00255620 - 10.0 -46.47873679 -28.36980232 -2.92763912 1.44708065 0.02528654 0.01949016 - 10.0 -12.54370842 34.21722863 1.24120256 2.21072951 0.01080973 -0.01869097 - 10.0 -7.14048930 7.10420057 -0.36081624 0.86670872 0.00647863 -0.00118788 - 10.0 -49.88492485 -23.33817148 -2.76602163 1.78294227 0.02720067 0.01682362 - 10.0 -19.81399282 53.52954568 2.07232227 2.65936299 0.01424146 -0.02727658 - 10.0 23.77418551 14.68227128 2.04725863 -0.41772276 -0.01379116 -0.00752371 - 10.0 -5.73673778 8.93192786 -0.16259409 0.97138466 0.00562305 -0.00245174 - 10.0 10.54277542 -1.02674862 0.84834041 -0.44100517 -0.00531874 0.00383461 - 10.0 23.01197723 21.12299112 2.25990543 -0.12607295 -0.01291140 -0.01176114 - 10.0 -44.78532667 12.05197921 -1.02696812 2.77848076 0.02808850 -0.00298275 - 10.0 31.46388060 -49.75461307 -1.52046945 -3.03579919 -0.01637469 0.02786471 - 10.0 24.84943257 -25.92687211 -0.24060772 -2.45045466 -0.01484349 0.01860299 - 10.0 25.91948874 -30.60444211 -0.52684367 -2.60005186 -0.01516185 0.02084074 - 10.0 -10.85946929 20.87407647 0.39902427 1.82589346 0.00972306 -0.01062660 - 10.0 -38.51435867 1.59076858 -1.56374573 2.10935343 0.02533138 0.00325720 - 10.0 48.51766969 -21.77175738 0.49039776 -3.14884736 -0.02642908 0.01352300 - 10.0 5.74566172 46.44110258 2.61301762 1.41963745 -0.00049448 -0.02602402 - 10.0 -22.88917903 -27.97906439 -2.49898486 -0.03157484 0.01438842 0.02110301 - 10.0 31.73261776 -6.28614087 1.21728705 -1.94829313 -0.01955786 0.00624200 - 10.0 4.24232124 19.44671943 1.21964188 1.10199242 -0.00052277 -0.01009959 - 10.0 0.91334970 48.66777413 2.53737735 1.69247032 0.00244742 -0.02680742 - 10.0 10.67139892 31.69558668 2.17625638 0.97201541 -0.00424894 -0.01856619 - 10.0 12.94163719 58.29627746 3.27732262 1.10311871 -0.00411829 -0.03016643 - 10.0 39.19514702 34.09017661 3.04651632 -0.83806079 -0.02092181 -0.01899392 - 10.0 -24.13067759 -32.16302812 -2.68262548 -0.04506858 0.01454248 0.02301772 - 10.0 51.78333979 -13.45956325 1.00920828 -3.03719366 -0.02816357 0.00875884 - 10.0 -18.73188233 -17.30379387 -1.95701398 -0.00677590 0.01307052 0.01538889 - 10.0 24.70514705 -49.06503148 -1.67808526 -2.78661149 -0.01337746 0.02867654 - 10.0 -51.06940692 -15.61458174 -2.46357376 2.08982818 0.02835174 0.01252356 - 10.0 -4.29154911 -29.69366786 -1.77081329 -1.27717018 0.00330457 0.02241695 - 10.0 2.11752441 33.61609431 1.87012243 1.50451828 0.00141129 -0.01940596 - 10.0 37.73902003 -20.32722331 0.42253535 -2.74138534 -0.02210996 0.01412198 - 10.0 18.24940441 16.13909492 1.89723284 0.04723628 -0.00993771 -0.00831431 - 10.0 -0.86685880 -26.00179392 -1.38458807 -1.39913472 0.00136531 0.02041813 - 10.0 -14.99514725 -9.73327401 -1.49412678 0.04580994 0.01096177 0.01022804 - 10.0 7.00887790 1.98168034 0.68812772 0.00896544 -0.00293511 0.00198547 - 10.0 14.82165676 -26.61468332 -0.63832974 -2.10322539 -0.00891726 0.01991691 - 10.0 36.97393038 41.34508248 3.24972457 -0.53759403 -0.01886630 -0.02264741 - 10.0 13.20164819 -5.94173158 0.74976608 -0.99205532 -0.00725503 0.00697320 - 10.0 -27.55525109 11.38230453 -0.82867230 2.04896832 0.02021279 -0.00334846 - 10.0 44.22611452 7.91205992 2.08170876 -1.97441862 -0.02553919 -0.00334242 - 10.0 -30.78228408 -9.00330845 -1.98277752 1.19492292 0.02083894 0.00999898 - 10.0 21.23162596 1.68817791 1.43493089 -0.91572699 -0.01244008 0.00145281 - 10.0 43.83049777 17.41111171 2.48943804 -1.60943360 -0.02478736 -0.00913389 - 10.0 18.27076095 14.11054567 1.82221570 -0.03605102 -0.01008131 -0.00688670 - 10.0 -23.16386718 14.98115804 -0.48627528 2.03701218 0.01725857 -0.00604352 - 10.0 17.66869644 37.69009924 2.68456831 0.61313519 -0.00829888 -0.02182563 - 10.0 -13.13453980 43.06229834 1.74152194 2.32880687 0.01088136 -0.02345547 - 10.0 17.04551969 -8.51968300 0.74199110 -1.36393081 -0.00992090 0.00843742 - 10.0 -12.74957582 2.86610039 -0.88706993 0.76014301 0.01004519 0.00183585 - 10.0 -11.57352997 -3.93218467 -1.08155095 0.15539312 0.00900597 0.00634724 - 10.0 -0.43691930 11.99128730 0.42464351 1.00896428 0.00223775 -0.00474195 - 10.0 -18.84718297 2.59155114 -1.14765946 1.09328119 0.01395275 0.00224813 - 10.0 26.50822037 34.91831202 2.84251996 -0.01459342 -0.01374681 -0.02010543 - 10.0 -1.83862732 -27.40591387 -1.51844281 -1.37417813 0.00190638 0.02119551 - 10.0 -29.61534814 -11.34773579 -2.05992588 1.01365241 0.02001716 0.01147311 - 10.0 -1.58282077 2.69811157 -0.11418406 0.29617314 0.00265977 0.00167764 - 10.0 2.81028701 8.79669118 0.52804717 0.69094215 -0.00005422 -0.00258329 - 10.0 -46.98701557 11.56383052 -1.07690408 2.84555950 0.02883999 -0.00259972 - 10.0 -3.40737443 -56.06838909 -2.91291405 -1.56839602 0.00150420 0.03217266 - 10.0 -19.98158539 39.46428514 1.28835283 2.57214878 0.01493065 -0.02105105 - 10.0 -44.66881930 12.46139603 -1.00158524 2.78765137 0.02804667 -0.00323063 - 10.0 -16.39650937 23.16371517 0.32747014 2.11248239 0.01323682 -0.01177621 - 10.0 21.95611509 7.76064067 1.72075828 -0.61228724 -0.01269236 -0.00269100 - 10.0 -10.50904475 12.60669705 -0.19243723 1.40501570 0.00897813 -0.00484325 - 10.0 -14.30586541 -0.91198946 -1.12740574 0.55739977 0.01090470 0.00440092 - 10.0 -46.00705467 -6.85206507 -2.04591400 2.14319881 0.02767905 0.00814089 - 10.0 30.41289215 -6.97966533 1.15654150 -1.91885498 -0.01852614 0.00680537 - 10.0 -48.27660341 27.60241976 -0.13762372 3.31622222 0.02879885 -0.01161224 - 10.0 -17.74747450 10.50189167 -0.63686673 1.56720699 0.01384037 -0.00328594 - 10.0 54.39641806 -0.37738366 1.72976962 -2.73607215 -0.02940059 0.00129876 - 10.0 6.47050061 -29.43922970 -1.20659479 -1.82090480 -0.00359394 0.02244751 - 10.0 0.58954963 -13.25292294 -0.49482500 -1.03808365 0.00082873 0.01218738 - 10.0 -12.31468078 -40.73604077 -2.60912850 -0.94516629 0.00720515 0.02765879 - 10.0 38.13312568 24.34484548 2.69648135 -1.04260079 -0.02152543 -0.01341969 - 10.0 -13.70564154 27.92937950 0.77625108 2.14221048 0.01158560 -0.01492998 - 10.0 40.53583366 -0.14911602 1.65704468 -2.10583120 -0.02408788 0.00179315 - 10.0 8.39984292 -15.41302717 -0.12676090 -1.44483730 -0.00437128 0.01330585 - 10.0 22.44930397 -38.06973908 -1.11496697 -2.59958621 -0.01287940 0.02515562 - 10.0 47.41809427 3.44198464 1.88610439 -2.29818650 -0.02696432 -0.00068958 - 10.0 27.36675414 46.97814868 3.25532655 0.14568231 -0.01291442 -0.02560627 - 10.0 -10.16897115 -22.40458265 -1.73420047 -0.76737649 0.00741932 0.01846132 - 10.0 40.36029012 -18.88517950 0.55513182 -2.79063722 -0.02344201 0.01302615 - 10.0 -14.39025584 20.54575351 0.21589623 1.94610689 0.01196694 -0.01021320 - 10.0 19.64156343 34.26658662 2.62377284 0.42861126 -0.00976569 -0.01997954 - 10.0 -33.50298072 43.14541702 1.10503992 3.09224158 0.02172220 -0.02121984 - 10.0 -20.79202850 -24.09713162 -2.28882549 -0.07479119 0.01364036 0.01919977 diff --git a/testsuite/tests/dph/nbody/dph-nbody-vseg-fast.stdout b/testsuite/tests/dph/nbody/dph-nbody-vseg-fast.stdout deleted file mode 100644 index 69fdd8b303..0000000000 --- a/testsuite/tests/dph/nbody/dph-nbody-vseg-fast.stdout +++ /dev/null @@ -1,100 +0,0 @@ - 10.0 -7.88876745 14.40403609 0.07781862 1.41725313 0.00728077 -0.00615418 - 10.0 -20.39602554 -5.40256368 -1.56824530 0.67893475 0.01493099 0.00782011 - 10.0 -0.05794753 10.34183386 0.35651327 0.89460951 0.00188899 -0.00356931 - 10.0 -4.75609397 34.74782948 1.61195437 1.87077953 0.00587195 -0.01975082 - 10.0 36.25896362 10.82337782 2.14170846 -1.41319743 -0.02163268 -0.00507727 - 10.0 4.02674361 -9.00872919 0.03617254 -0.88316283 -0.00122400 0.00926493 - 10.0 42.00406508 -40.85785845 -0.76014767 -3.29738763 -0.02191949 0.02332737 - 10.0 -22.63186030 5.80994447 -1.07420146 1.51160117 0.01670201 0.00006355 - 10.0 16.53870540 16.94639077 1.84926442 0.20378411 -0.00879785 -0.00880553 - 10.0 39.92854878 29.06425991 2.88523318 -1.01552251 -0.02189971 -0.01632925 - 10.0 -17.45501954 11.39301477 -0.56641470 1.60906365 0.01371008 -0.00396360 - 10.0 26.25934753 8.00486951 1.85024443 -0.89918952 -0.01562756 -0.00309898 - 10.0 -9.33900099 9.24549389 -0.36060159 1.12461927 0.00801307 -0.00255620 - 10.0 -46.47873679 -28.36980232 -2.92763912 1.44708065 0.02528654 0.01949016 - 10.0 -12.54370842 34.21722863 1.24120256 2.21072951 0.01080973 -0.01869097 - 10.0 -7.14048930 7.10420057 -0.36081624 0.86670872 0.00647863 -0.00118788 - 10.0 -49.88492485 -23.33817148 -2.76602163 1.78294227 0.02720067 0.01682362 - 10.0 -19.81399282 53.52954568 2.07232227 2.65936299 0.01424146 -0.02727658 - 10.0 23.77418551 14.68227128 2.04725863 -0.41772276 -0.01379116 -0.00752371 - 10.0 -5.73673778 8.93192786 -0.16259409 0.97138466 0.00562305 -0.00245174 - 10.0 10.54277542 -1.02674862 0.84834041 -0.44100517 -0.00531874 0.00383461 - 10.0 23.01197723 21.12299112 2.25990543 -0.12607295 -0.01291140 -0.01176114 - 10.0 -44.78532667 12.05197921 -1.02696812 2.77848076 0.02808850 -0.00298275 - 10.0 31.46388060 -49.75461307 -1.52046945 -3.03579919 -0.01637469 0.02786471 - 10.0 24.84943257 -25.92687211 -0.24060772 -2.45045466 -0.01484349 0.01860299 - 10.0 25.91948874 -30.60444211 -0.52684367 -2.60005186 -0.01516185 0.02084074 - 10.0 -10.85946929 20.87407647 0.39902427 1.82589346 0.00972306 -0.01062660 - 10.0 -38.51435867 1.59076858 -1.56374573 2.10935343 0.02533138 0.00325720 - 10.0 48.51766969 -21.77175738 0.49039776 -3.14884736 -0.02642908 0.01352300 - 10.0 5.74566172 46.44110258 2.61301762 1.41963745 -0.00049448 -0.02602402 - 10.0 -22.88917903 -27.97906439 -2.49898486 -0.03157484 0.01438842 0.02110301 - 10.0 31.73261776 -6.28614087 1.21728705 -1.94829313 -0.01955786 0.00624200 - 10.0 4.24232124 19.44671943 1.21964188 1.10199242 -0.00052277 -0.01009959 - 10.0 0.91334970 48.66777413 2.53737735 1.69247032 0.00244742 -0.02680742 - 10.0 10.67139892 31.69558668 2.17625638 0.97201541 -0.00424894 -0.01856619 - 10.0 12.94163719 58.29627746 3.27732262 1.10311871 -0.00411829 -0.03016643 - 10.0 39.19514702 34.09017661 3.04651632 -0.83806079 -0.02092181 -0.01899392 - 10.0 -24.13067759 -32.16302812 -2.68262548 -0.04506858 0.01454248 0.02301772 - 10.0 51.78333979 -13.45956325 1.00920828 -3.03719366 -0.02816357 0.00875884 - 10.0 -18.73188233 -17.30379387 -1.95701398 -0.00677590 0.01307052 0.01538889 - 10.0 24.70514705 -49.06503148 -1.67808526 -2.78661149 -0.01337746 0.02867654 - 10.0 -51.06940692 -15.61458174 -2.46357376 2.08982818 0.02835174 0.01252356 - 10.0 -4.29154911 -29.69366786 -1.77081329 -1.27717018 0.00330457 0.02241695 - 10.0 2.11752441 33.61609431 1.87012243 1.50451828 0.00141129 -0.01940596 - 10.0 37.73902003 -20.32722331 0.42253535 -2.74138534 -0.02210996 0.01412198 - 10.0 18.24940441 16.13909492 1.89723284 0.04723628 -0.00993771 -0.00831431 - 10.0 -0.86685880 -26.00179392 -1.38458807 -1.39913472 0.00136531 0.02041813 - 10.0 -14.99514725 -9.73327401 -1.49412678 0.04580994 0.01096177 0.01022804 - 10.0 7.00887790 1.98168034 0.68812772 0.00896544 -0.00293511 0.00198547 - 10.0 14.82165676 -26.61468332 -0.63832974 -2.10322539 -0.00891726 0.01991691 - 10.0 36.97393038 41.34508248 3.24972457 -0.53759403 -0.01886630 -0.02264741 - 10.0 13.20164819 -5.94173158 0.74976608 -0.99205532 -0.00725503 0.00697320 - 10.0 -27.55525109 11.38230453 -0.82867230 2.04896832 0.02021279 -0.00334846 - 10.0 44.22611452 7.91205992 2.08170876 -1.97441862 -0.02553919 -0.00334242 - 10.0 -30.78228408 -9.00330845 -1.98277752 1.19492292 0.02083894 0.00999898 - 10.0 21.23162596 1.68817791 1.43493089 -0.91572699 -0.01244008 0.00145281 - 10.0 43.83049777 17.41111171 2.48943804 -1.60943360 -0.02478736 -0.00913389 - 10.0 18.27076095 14.11054567 1.82221570 -0.03605102 -0.01008131 -0.00688670 - 10.0 -23.16386718 14.98115804 -0.48627528 2.03701218 0.01725857 -0.00604352 - 10.0 17.66869644 37.69009924 2.68456831 0.61313519 -0.00829888 -0.02182563 - 10.0 -13.13453980 43.06229834 1.74152194 2.32880687 0.01088136 -0.02345547 - 10.0 17.04551969 -8.51968300 0.74199110 -1.36393081 -0.00992090 0.00843742 - 10.0 -12.74957582 2.86610039 -0.88706993 0.76014301 0.01004519 0.00183585 - 10.0 -11.57352997 -3.93218467 -1.08155095 0.15539312 0.00900597 0.00634724 - 10.0 -0.43691930 11.99128730 0.42464351 1.00896428 0.00223775 -0.00474195 - 10.0 -18.84718297 2.59155114 -1.14765946 1.09328119 0.01395275 0.00224813 - 10.0 26.50822037 34.91831202 2.84251996 -0.01459342 -0.01374681 -0.02010543 - 10.0 -1.83862732 -27.40591387 -1.51844281 -1.37417813 0.00190638 0.02119551 - 10.0 -29.61534814 -11.34773579 -2.05992588 1.01365241 0.02001716 0.01147311 - 10.0 -1.58282077 2.69811157 -0.11418406 0.29617314 0.00265977 0.00167764 - 10.0 2.81028701 8.79669118 0.52804717 0.69094215 -0.00005422 -0.00258329 - 10.0 -46.98701557 11.56383052 -1.07690408 2.84555950 0.02883999 -0.00259972 - 10.0 -3.40737443 -56.06838909 -2.91291405 -1.56839602 0.00150420 0.03217266 - 10.0 -19.98158539 39.46428514 1.28835283 2.57214878 0.01493065 -0.02105105 - 10.0 -44.66881930 12.46139603 -1.00158524 2.78765137 0.02804667 -0.00323063 - 10.0 -16.39650937 23.16371517 0.32747014 2.11248239 0.01323682 -0.01177621 - 10.0 21.95611509 7.76064067 1.72075828 -0.61228724 -0.01269236 -0.00269100 - 10.0 -10.50904475 12.60669705 -0.19243723 1.40501570 0.00897813 -0.00484325 - 10.0 -14.30586541 -0.91198946 -1.12740574 0.55739977 0.01090470 0.00440092 - 10.0 -46.00705467 -6.85206507 -2.04591400 2.14319881 0.02767905 0.00814089 - 10.0 30.41289215 -6.97966533 1.15654150 -1.91885498 -0.01852614 0.00680537 - 10.0 -48.27660341 27.60241976 -0.13762372 3.31622222 0.02879885 -0.01161224 - 10.0 -17.74747450 10.50189167 -0.63686673 1.56720699 0.01384037 -0.00328594 - 10.0 54.39641806 -0.37738366 1.72976962 -2.73607215 -0.02940059 0.00129876 - 10.0 6.47050061 -29.43922970 -1.20659479 -1.82090480 -0.00359394 0.02244751 - 10.0 0.58954963 -13.25292294 -0.49482500 -1.03808365 0.00082873 0.01218738 - 10.0 -12.31468078 -40.73604077 -2.60912850 -0.94516629 0.00720515 0.02765879 - 10.0 38.13312568 24.34484548 2.69648135 -1.04260079 -0.02152543 -0.01341969 - 10.0 -13.70564154 27.92937950 0.77625108 2.14221048 0.01158560 -0.01492998 - 10.0 40.53583366 -0.14911602 1.65704468 -2.10583120 -0.02408788 0.00179315 - 10.0 8.39984292 -15.41302717 -0.12676090 -1.44483730 -0.00437128 0.01330585 - 10.0 22.44930397 -38.06973908 -1.11496697 -2.59958621 -0.01287940 0.02515562 - 10.0 47.41809427 3.44198464 1.88610439 -2.29818650 -0.02696432 -0.00068958 - 10.0 27.36675414 46.97814868 3.25532655 0.14568231 -0.01291442 -0.02560627 - 10.0 -10.16897115 -22.40458265 -1.73420047 -0.76737649 0.00741932 0.01846132 - 10.0 40.36029012 -18.88517950 0.55513182 -2.79063722 -0.02344201 0.01302615 - 10.0 -14.39025584 20.54575351 0.21589623 1.94610689 0.01196694 -0.01021320 - 10.0 19.64156343 34.26658662 2.62377284 0.42861126 -0.00976569 -0.01997954 - 10.0 -33.50298072 43.14541702 1.10503992 3.09224158 0.02172220 -0.02121984 - 10.0 -20.79202850 -24.09713162 -2.28882549 -0.07479119 0.01364036 0.01919977 diff --git a/testsuite/tests/dph/nbody/dph-nbody-vseg-opt.stdout b/testsuite/tests/dph/nbody/dph-nbody-vseg-opt.stdout deleted file mode 100644 index 69fdd8b303..0000000000 --- a/testsuite/tests/dph/nbody/dph-nbody-vseg-opt.stdout +++ /dev/null @@ -1,100 +0,0 @@ - 10.0 -7.88876745 14.40403609 0.07781862 1.41725313 0.00728077 -0.00615418 - 10.0 -20.39602554 -5.40256368 -1.56824530 0.67893475 0.01493099 0.00782011 - 10.0 -0.05794753 10.34183386 0.35651327 0.89460951 0.00188899 -0.00356931 - 10.0 -4.75609397 34.74782948 1.61195437 1.87077953 0.00587195 -0.01975082 - 10.0 36.25896362 10.82337782 2.14170846 -1.41319743 -0.02163268 -0.00507727 - 10.0 4.02674361 -9.00872919 0.03617254 -0.88316283 -0.00122400 0.00926493 - 10.0 42.00406508 -40.85785845 -0.76014767 -3.29738763 -0.02191949 0.02332737 - 10.0 -22.63186030 5.80994447 -1.07420146 1.51160117 0.01670201 0.00006355 - 10.0 16.53870540 16.94639077 1.84926442 0.20378411 -0.00879785 -0.00880553 - 10.0 39.92854878 29.06425991 2.88523318 -1.01552251 -0.02189971 -0.01632925 - 10.0 -17.45501954 11.39301477 -0.56641470 1.60906365 0.01371008 -0.00396360 - 10.0 26.25934753 8.00486951 1.85024443 -0.89918952 -0.01562756 -0.00309898 - 10.0 -9.33900099 9.24549389 -0.36060159 1.12461927 0.00801307 -0.00255620 - 10.0 -46.47873679 -28.36980232 -2.92763912 1.44708065 0.02528654 0.01949016 - 10.0 -12.54370842 34.21722863 1.24120256 2.21072951 0.01080973 -0.01869097 - 10.0 -7.14048930 7.10420057 -0.36081624 0.86670872 0.00647863 -0.00118788 - 10.0 -49.88492485 -23.33817148 -2.76602163 1.78294227 0.02720067 0.01682362 - 10.0 -19.81399282 53.52954568 2.07232227 2.65936299 0.01424146 -0.02727658 - 10.0 23.77418551 14.68227128 2.04725863 -0.41772276 -0.01379116 -0.00752371 - 10.0 -5.73673778 8.93192786 -0.16259409 0.97138466 0.00562305 -0.00245174 - 10.0 10.54277542 -1.02674862 0.84834041 -0.44100517 -0.00531874 0.00383461 - 10.0 23.01197723 21.12299112 2.25990543 -0.12607295 -0.01291140 -0.01176114 - 10.0 -44.78532667 12.05197921 -1.02696812 2.77848076 0.02808850 -0.00298275 - 10.0 31.46388060 -49.75461307 -1.52046945 -3.03579919 -0.01637469 0.02786471 - 10.0 24.84943257 -25.92687211 -0.24060772 -2.45045466 -0.01484349 0.01860299 - 10.0 25.91948874 -30.60444211 -0.52684367 -2.60005186 -0.01516185 0.02084074 - 10.0 -10.85946929 20.87407647 0.39902427 1.82589346 0.00972306 -0.01062660 - 10.0 -38.51435867 1.59076858 -1.56374573 2.10935343 0.02533138 0.00325720 - 10.0 48.51766969 -21.77175738 0.49039776 -3.14884736 -0.02642908 0.01352300 - 10.0 5.74566172 46.44110258 2.61301762 1.41963745 -0.00049448 -0.02602402 - 10.0 -22.88917903 -27.97906439 -2.49898486 -0.03157484 0.01438842 0.02110301 - 10.0 31.73261776 -6.28614087 1.21728705 -1.94829313 -0.01955786 0.00624200 - 10.0 4.24232124 19.44671943 1.21964188 1.10199242 -0.00052277 -0.01009959 - 10.0 0.91334970 48.66777413 2.53737735 1.69247032 0.00244742 -0.02680742 - 10.0 10.67139892 31.69558668 2.17625638 0.97201541 -0.00424894 -0.01856619 - 10.0 12.94163719 58.29627746 3.27732262 1.10311871 -0.00411829 -0.03016643 - 10.0 39.19514702 34.09017661 3.04651632 -0.83806079 -0.02092181 -0.01899392 - 10.0 -24.13067759 -32.16302812 -2.68262548 -0.04506858 0.01454248 0.02301772 - 10.0 51.78333979 -13.45956325 1.00920828 -3.03719366 -0.02816357 0.00875884 - 10.0 -18.73188233 -17.30379387 -1.95701398 -0.00677590 0.01307052 0.01538889 - 10.0 24.70514705 -49.06503148 -1.67808526 -2.78661149 -0.01337746 0.02867654 - 10.0 -51.06940692 -15.61458174 -2.46357376 2.08982818 0.02835174 0.01252356 - 10.0 -4.29154911 -29.69366786 -1.77081329 -1.27717018 0.00330457 0.02241695 - 10.0 2.11752441 33.61609431 1.87012243 1.50451828 0.00141129 -0.01940596 - 10.0 37.73902003 -20.32722331 0.42253535 -2.74138534 -0.02210996 0.01412198 - 10.0 18.24940441 16.13909492 1.89723284 0.04723628 -0.00993771 -0.00831431 - 10.0 -0.86685880 -26.00179392 -1.38458807 -1.39913472 0.00136531 0.02041813 - 10.0 -14.99514725 -9.73327401 -1.49412678 0.04580994 0.01096177 0.01022804 - 10.0 7.00887790 1.98168034 0.68812772 0.00896544 -0.00293511 0.00198547 - 10.0 14.82165676 -26.61468332 -0.63832974 -2.10322539 -0.00891726 0.01991691 - 10.0 36.97393038 41.34508248 3.24972457 -0.53759403 -0.01886630 -0.02264741 - 10.0 13.20164819 -5.94173158 0.74976608 -0.99205532 -0.00725503 0.00697320 - 10.0 -27.55525109 11.38230453 -0.82867230 2.04896832 0.02021279 -0.00334846 - 10.0 44.22611452 7.91205992 2.08170876 -1.97441862 -0.02553919 -0.00334242 - 10.0 -30.78228408 -9.00330845 -1.98277752 1.19492292 0.02083894 0.00999898 - 10.0 21.23162596 1.68817791 1.43493089 -0.91572699 -0.01244008 0.00145281 - 10.0 43.83049777 17.41111171 2.48943804 -1.60943360 -0.02478736 -0.00913389 - 10.0 18.27076095 14.11054567 1.82221570 -0.03605102 -0.01008131 -0.00688670 - 10.0 -23.16386718 14.98115804 -0.48627528 2.03701218 0.01725857 -0.00604352 - 10.0 17.66869644 37.69009924 2.68456831 0.61313519 -0.00829888 -0.02182563 - 10.0 -13.13453980 43.06229834 1.74152194 2.32880687 0.01088136 -0.02345547 - 10.0 17.04551969 -8.51968300 0.74199110 -1.36393081 -0.00992090 0.00843742 - 10.0 -12.74957582 2.86610039 -0.88706993 0.76014301 0.01004519 0.00183585 - 10.0 -11.57352997 -3.93218467 -1.08155095 0.15539312 0.00900597 0.00634724 - 10.0 -0.43691930 11.99128730 0.42464351 1.00896428 0.00223775 -0.00474195 - 10.0 -18.84718297 2.59155114 -1.14765946 1.09328119 0.01395275 0.00224813 - 10.0 26.50822037 34.91831202 2.84251996 -0.01459342 -0.01374681 -0.02010543 - 10.0 -1.83862732 -27.40591387 -1.51844281 -1.37417813 0.00190638 0.02119551 - 10.0 -29.61534814 -11.34773579 -2.05992588 1.01365241 0.02001716 0.01147311 - 10.0 -1.58282077 2.69811157 -0.11418406 0.29617314 0.00265977 0.00167764 - 10.0 2.81028701 8.79669118 0.52804717 0.69094215 -0.00005422 -0.00258329 - 10.0 -46.98701557 11.56383052 -1.07690408 2.84555950 0.02883999 -0.00259972 - 10.0 -3.40737443 -56.06838909 -2.91291405 -1.56839602 0.00150420 0.03217266 - 10.0 -19.98158539 39.46428514 1.28835283 2.57214878 0.01493065 -0.02105105 - 10.0 -44.66881930 12.46139603 -1.00158524 2.78765137 0.02804667 -0.00323063 - 10.0 -16.39650937 23.16371517 0.32747014 2.11248239 0.01323682 -0.01177621 - 10.0 21.95611509 7.76064067 1.72075828 -0.61228724 -0.01269236 -0.00269100 - 10.0 -10.50904475 12.60669705 -0.19243723 1.40501570 0.00897813 -0.00484325 - 10.0 -14.30586541 -0.91198946 -1.12740574 0.55739977 0.01090470 0.00440092 - 10.0 -46.00705467 -6.85206507 -2.04591400 2.14319881 0.02767905 0.00814089 - 10.0 30.41289215 -6.97966533 1.15654150 -1.91885498 -0.01852614 0.00680537 - 10.0 -48.27660341 27.60241976 -0.13762372 3.31622222 0.02879885 -0.01161224 - 10.0 -17.74747450 10.50189167 -0.63686673 1.56720699 0.01384037 -0.00328594 - 10.0 54.39641806 -0.37738366 1.72976962 -2.73607215 -0.02940059 0.00129876 - 10.0 6.47050061 -29.43922970 -1.20659479 -1.82090480 -0.00359394 0.02244751 - 10.0 0.58954963 -13.25292294 -0.49482500 -1.03808365 0.00082873 0.01218738 - 10.0 -12.31468078 -40.73604077 -2.60912850 -0.94516629 0.00720515 0.02765879 - 10.0 38.13312568 24.34484548 2.69648135 -1.04260079 -0.02152543 -0.01341969 - 10.0 -13.70564154 27.92937950 0.77625108 2.14221048 0.01158560 -0.01492998 - 10.0 40.53583366 -0.14911602 1.65704468 -2.10583120 -0.02408788 0.00179315 - 10.0 8.39984292 -15.41302717 -0.12676090 -1.44483730 -0.00437128 0.01330585 - 10.0 22.44930397 -38.06973908 -1.11496697 -2.59958621 -0.01287940 0.02515562 - 10.0 47.41809427 3.44198464 1.88610439 -2.29818650 -0.02696432 -0.00068958 - 10.0 27.36675414 46.97814868 3.25532655 0.14568231 -0.01291442 -0.02560627 - 10.0 -10.16897115 -22.40458265 -1.73420047 -0.76737649 0.00741932 0.01846132 - 10.0 40.36029012 -18.88517950 0.55513182 -2.79063722 -0.02344201 0.01302615 - 10.0 -14.39025584 20.54575351 0.21589623 1.94610689 0.01196694 -0.01021320 - 10.0 19.64156343 34.26658662 2.62377284 0.42861126 -0.00976569 -0.01997954 - 10.0 -33.50298072 43.14541702 1.10503992 3.09224158 0.02172220 -0.02121984 - 10.0 -20.79202850 -24.09713162 -2.28882549 -0.07479119 0.01364036 0.01919977 diff --git a/testsuite/tests/dph/nbody/dph-nbody.T b/testsuite/tests/dph/nbody/dph-nbody.T deleted file mode 100644 index 11ee313882..0000000000 --- a/testsuite/tests/dph/nbody/dph-nbody.T +++ /dev/null @@ -1,19 +0,0 @@ - -test ('dph-nbody-vseg-fast' - , [ outputdir('vseg-fast') - , reqlib('dph-lifted-vseg') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-vseg -package dph-prim-par']) - - -test ('dph-nbody-copy-fast' - , [ outputdir('copy-fast') - , reqlib('dph-lifted-copy') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -fno-vectorisation-avoidance -package dph-lifted-copy -package dph-prim-par']) diff --git a/testsuite/tests/dph/primespj/Main.hs b/testsuite/tests/dph/primespj/Main.hs deleted file mode 100644 index f7a3ed1fe5..0000000000 --- a/testsuite/tests/dph/primespj/Main.hs +++ /dev/null @@ -1,30 +0,0 @@ -import Control.Exception (evaluate) -import System.Console.GetOpt - -import Data.Array.Parallel.PArray (PArray) -import qualified Data.Array.Parallel.PArray as P - -import PrimesVect (primesVect) -import Debug.Trace - - -primesList :: Int -> [Int] -primesList 1 = [] -primesList n = sps ++ [ i | i <- [sq+1..n], multiple sps i ] - where - sps = primesList sq - sq = floor $ sqrt $ fromIntegral n - - multiple :: [Int] -> Int -> Bool - multiple ps i = and [i `mod` p /= 0 | p <- ps] - - -main - = do let n = 1000 - let resultViaNDP = P.toList $ primesVect n - let resultViaLists = primesList n - - print resultViaNDP - print resultViaLists - print $ resultViaNDP == resultViaLists - diff --git a/testsuite/tests/dph/primespj/Makefile b/testsuite/tests/dph/primespj/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/primespj/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/primespj/PrimesVect.hs b/testsuite/tests/dph/primespj/PrimesVect.hs deleted file mode 100644 index 34b3a568b7..0000000000 --- a/testsuite/tests/dph/primespj/PrimesVect.hs +++ /dev/null @@ -1,25 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise #-} -module PrimesVect (primesVect) - -where -import Data.Array.Parallel -import Data.Array.Parallel.Prelude.Int -import qualified Prelude - -primesVect:: Int -> PArray Int -primesVect n = toPArrayP (primesVect' n) - -primesVect':: Int -> [:Int:] -primesVect' n - | n == 1 = emptyP - | n == 2 = singletonP 2 - | otherwise = sps +:+ [: i | i <- enumFromToP (sq+1) n, notMultiple sps i:] - where - - sps = primesVect' sq - sq = sqrt n - - notMultiple :: [:Int:] -> Int -> Bool - notMultiple ps i = andP [: mod i p /= 0 | p <- ps:] - diff --git a/testsuite/tests/dph/primespj/dph-primespj-copy-fast.stdout b/testsuite/tests/dph/primespj/dph-primespj-copy-fast.stdout deleted file mode 100644 index d935f68b11..0000000000 --- a/testsuite/tests/dph/primespj/dph-primespj-copy-fast.stdout +++ /dev/null @@ -1,3 +0,0 @@ -[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997] -[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997] -True diff --git a/testsuite/tests/dph/primespj/dph-primespj-copy-opt.stdout b/testsuite/tests/dph/primespj/dph-primespj-copy-opt.stdout deleted file mode 100644 index d935f68b11..0000000000 --- a/testsuite/tests/dph/primespj/dph-primespj-copy-opt.stdout +++ /dev/null @@ -1,3 +0,0 @@ -[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997] -[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997] -True diff --git a/testsuite/tests/dph/primespj/dph-primespj-vseg-fast.stdout b/testsuite/tests/dph/primespj/dph-primespj-vseg-fast.stdout deleted file mode 100644 index d935f68b11..0000000000 --- a/testsuite/tests/dph/primespj/dph-primespj-vseg-fast.stdout +++ /dev/null @@ -1,3 +0,0 @@ -[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997] -[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997] -True diff --git a/testsuite/tests/dph/primespj/dph-primespj-vseg-opt.stdout b/testsuite/tests/dph/primespj/dph-primespj-vseg-opt.stdout deleted file mode 100644 index d935f68b11..0000000000 --- a/testsuite/tests/dph/primespj/dph-primespj-vseg-opt.stdout +++ /dev/null @@ -1,3 +0,0 @@ -[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997] -[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997] -True diff --git a/testsuite/tests/dph/primespj/dph-primespj.T b/testsuite/tests/dph/primespj/dph-primespj.T deleted file mode 100644 index 8b45cc80e7..0000000000 --- a/testsuite/tests/dph/primespj/dph-primespj.T +++ /dev/null @@ -1,11 +0,0 @@ - -test ('dph-primespj-copy-fast' - , [ outputdir('fast') - , reqlib('dph-lifted-copy') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-copy']) - - diff --git a/testsuite/tests/dph/quickhull/Main.hs b/testsuite/tests/dph/quickhull/Main.hs deleted file mode 100644 index e1dc04ba24..0000000000 --- a/testsuite/tests/dph/quickhull/Main.hs +++ /dev/null @@ -1,43 +0,0 @@ - -import qualified Types as QH -import QuickHullVect (quickhull) - -import qualified Data.Array.Parallel.Unlifted as U -import qualified Data.Array.Parallel.Prelude as P - -import qualified Data.Array.Parallel.PArray as P -import Data.Array.Parallel.PArray (PArray) - -import System.Environment -import Data.List - -import SVG -import TestData - - ------ -runQuickhull :: PArray QH.Point -> [(Double, Double)] -runQuickhull pts - = let result = quickhull pts - resxs = P.toUArray (QH.xsOf result) - resys = P.toUArray (QH.ysOf result) - in U.index "runQuickhull" resxs 0 `seq` (zip (U.toList resxs) (U.toList resys)) - - --- Main Program --------------------------------------------------------------- -main - = do args <- getArgs - let n = case args of - [s] -> read s - _ -> 1000 - - paInput <- toPArrayPoints - $ genPointsCombo n - - let psHull = runQuickhull paInput - psInput = P.toList paInput - - putStr - $ makeSVG - (roundPoints psInput) - (roundPoints psHull) diff --git a/testsuite/tests/dph/quickhull/Makefile b/testsuite/tests/dph/quickhull/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/quickhull/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/quickhull/QuickHullVect.hs b/testsuite/tests/dph/quickhull/QuickHullVect.hs deleted file mode 100644 index e0ad75858d..0000000000 --- a/testsuite/tests/dph/quickhull/QuickHullVect.hs +++ /dev/null @@ -1,41 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise #-} - -module QuickHullVect (quickhull) where - -import Types - -import Data.Array.Parallel -import Data.Array.Parallel.Prelude.Double as D -import qualified Data.Array.Parallel.Prelude.Int as Int - -import qualified Prelude as P - -distance :: Point -> Line -> Double -distance (xo, yo) ((x1, y1), (x2, y2)) - = (x1 D.- xo) D.* (y2 D.- yo) D.- (y1 D.- yo) D.* (x2 D.- xo) - -hsplit :: [:Point:] -> Line -> [:Point:] -hsplit points line@(p1, p2) - | lengthP packed Int.< 2 = singletonP p1 +:+ packed - | otherwise - = concatP [: hsplit packed ends | ends <- [:(p1, pm), (pm, p2):] :] - where - cross = [: distance p line | p <- points :] - packed = [: p | (p,c) <- zipP points cross, c D.> 0.0 :] - pm = points !: maxIndexP cross - -quickHull' :: [:Point:] -> [:Point:] -quickHull' points - | lengthP points Int.== 0 = points - | otherwise - = concatP [: hsplit points ends | ends <- [: (minx, maxx), (maxx, minx) :] :] - where - xs = [: x | (x, y) <- points :] - minx = points !: minIndexP xs - maxx = points !: maxIndexP xs - -quickhull :: PArray Point -> PArray Point -{-# NOINLINE quickhull #-} -quickhull ps = toPArrayP (quickHull' (fromPArrayP ps)) - diff --git a/testsuite/tests/dph/quickhull/SVG.hs b/testsuite/tests/dph/quickhull/SVG.hs deleted file mode 100644 index c750fb06f5..0000000000 --- a/testsuite/tests/dph/quickhull/SVG.hs +++ /dev/null @@ -1,34 +0,0 @@ - -module SVG where - --- Making a SVG diagram of the points and hull -makeSVG :: [(Int, Int)] -> [(Int, Int)] -> String -makeSVG points hull - = unlines - $ [ "<svg width=\"100%\" height=\"100%\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">" ] - ++ [svgPolygon hull] - ++ map svgPoint points - ++ map svgPointHull hull - ++ ["</svg>"] - -svgPolygon :: [(Int, Int)] -> String -svgPolygon points - = "<polygon" - ++ " points=\"" ++ (concat [show x ++ "," ++ show y ++ " " | (x, y) <- points]) ++ "\"" - ++ " style=\"fill:#d0d0ff;stroke:#000000;stroke-width:1\"" - ++ "/>" - -svgPoint :: (Int, Int) -> String -svgPoint (x, y) - = "<circle cx=\"" ++ show x ++ "\" cy=\"" ++ show y ++ "\" r=\"0.5\"" - ++ " style=\"stroke:#000000\"" - ++ "/>" - -svgPointHull :: (Int, Int) -> String -svgPointHull (x, y) - = "<circle cx=\"" ++ show x ++ "\" cy=\"" ++ show y ++ "\" r=\"1\"" - ++ " style=\"stroke:#ff0000\"" - ++ "/>" - -roundPoints :: [(Double, Double)] -> [(Int, Int)] -roundPoints ps = [(round x, round y) | (x, y) <- ps] diff --git a/testsuite/tests/dph/quickhull/TestData.hs b/testsuite/tests/dph/quickhull/TestData.hs deleted file mode 100644 index 938c9fea91..0000000000 --- a/testsuite/tests/dph/quickhull/TestData.hs +++ /dev/null @@ -1,92 +0,0 @@ - -module TestData - ( genPointsUniform - , genPointsDisc - , genPointsCombo - , toPArrayPoints ) -where - -import qualified Types as QH -import qualified Data.Array.Parallel.Unlifted as U -import qualified Data.Array.Parallel.Prelude as P -import qualified Data.Array.Parallel.Prelude.Double as D -import qualified Data.Array.Parallel.PArray as P -import Data.Array.Parallel.PArray (PArray) - -import System.Random -import Control.Exception - --- Random points generation --- IMPORTANT: We use the same seed with the same random generator in all --- quickhull codes. The asymptotic work complexity of quickhull --- is between O (N) and O (N^2) depending on the input. --- To compare benchmark results, they always need to use the same --- input. -seed = 42742 - --- | Some uniformly distributed points -genPointsUniform - :: Int -- ^ number of points - -> Double -- ^ minimum coordinate - -> Double -- ^ maximum coordinate - -> [(Double, Double)] - -genPointsUniform n minXY maxXY - = let - pointMin = 10 - pointMax = 510 - gen = mkStdGen seed - in toPairs $ take (2*n) $ randomRs (pointMin, pointMax) gen - -toPairs [] = [] -toPairs (x:y:pts) = (x, y) : toPairs pts - - --- | Some points distributed as a disc -genPointsDisc - :: Int -- ^ number of points - -> (Double, Double) -- ^ center of disc - -> Double -- ^ radius of disc - -> [(Double, Double)] - -genPointsDisc n (originX, originY) radiusMax - = let (genRadius, genAngle) - = split $ mkStdGen seed - - radius = take n $ randomRs (0, radiusMax) genRadius - angle = take n $ randomRs (- pi, pi) genAngle - - makeXY (r, a) - = ( originX + r * cos a - , originY + r * sin a) - - in map makeXY $ zip radius angle - - --- | A point cloud with areas of high and low density -genPointsCombo - :: Int -- ^ number of points - -> [(Double, Double)] - -genPointsCombo n - = genPointsDisc (n `div` 5) (250, 250) 200 - ++ genPointsDisc (n `div` 5) (100, 100) 80 - ++ genPointsDisc (n `div` 5) (150, 300) 30 - ++ genPointsDisc (n `div` 5) (500, 120) 30 - ++ genPointsDisc (n `div` 5) (300, 200) 150 - - --- | Convert a list of points to a PArray -toPArrayPoints :: [(Double, Double)] -> IO (PArray QH.Point) -toPArrayPoints ps - = do let pts = QH.points (P.fromList (map fst ps)) - (P.fromList (map snd ps)) - evaluate $ force pts - return pts - --- | Force points to be evaluated -force pts - = U.index "TestData" (P.toUArray (QH.xsOf pts)) 0 D.+ - U.index "TestData" (P.toUArray (QH.ysOf pts)) 0 - - diff --git a/testsuite/tests/dph/quickhull/Types.hs b/testsuite/tests/dph/quickhull/Types.hs deleted file mode 100644 index 6b19ef1ab3..0000000000 --- a/testsuite/tests/dph/quickhull/Types.hs +++ /dev/null @@ -1,33 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise #-} - -module Types ( Point, Line, points, xsOf, ysOf) where - -import Data.Array.Parallel -import Data.Array.Parallel.Prelude.Double - -type Point = (Double, Double) -type Line = (Point, Point) - -points' :: [:Double:] -> [:Double:] -> [:Point:] -points' = zipP - -points :: PArray Double -> PArray Double -> PArray Point -{-# NOINLINE points #-} -points xs ys = toPArrayP (points' (fromPArrayP xs) (fromPArrayP ys)) - -xsOf' :: [:Point:] -> [:Double:] -xsOf' ps = [: x | (x, _) <- ps :] - -xsOf :: PArray Point -> PArray Double -{-# NOINLINE xsOf #-} -xsOf ps = toPArrayP (xsOf' (fromPArrayP ps)) - -ysOf' :: [:Point:] -> [:Double:] -ysOf' ps = [: y | (_, y) <- ps :] - -ysOf :: PArray Point -> PArray Double -{-# NOINLINE ysOf #-} -ysOf ps = toPArrayP (ysOf' (fromPArrayP ps)) - - diff --git a/testsuite/tests/dph/quickhull/dph-quickhull-copy-fast.stdout b/testsuite/tests/dph/quickhull/dph-quickhull-copy-fast.stdout deleted file mode 100644 index f6b2d92e9a..0000000000 --- a/testsuite/tests/dph/quickhull/dph-quickhull-copy-fast.stdout +++ /dev/null @@ -1,1019 +0,0 @@ -<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"> -<polygon points="20,98 50,246 83,354 164,416 236,434 343,427 366,412 379,402 519,143 528,126 529,115 510,96 506,95 117,33 85,28 40,64 " style="fill:#d0d0ff;stroke:#000000;stroke-width:1"/> -<circle cx="217" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="266" r="0.5" style="stroke:#000000"/> -<circle cx="191" cy="353" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="416" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="257" r="0.5" style="stroke:#000000"/> -<circle cx="266" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="350" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="334" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="189" cy="151" r="0.5" style="stroke:#000000"/> -<circle cx="308" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="347" cy="160" r="0.5" style="stroke:#000000"/> -<circle cx="251" cy="251" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="397" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="220" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="252" r="0.5" style="stroke:#000000"/> -<circle cx="191" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="84" r="0.5" style="stroke:#000000"/> -<circle cx="90" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="391" cy="360" r="0.5" style="stroke:#000000"/> -<circle cx="277" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="421" r="0.5" style="stroke:#000000"/> -<circle cx="274" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="187" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="343" cy="427" r="0.5" style="stroke:#000000"/> -<circle cx="255" cy="170" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="329" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="261" r="0.5" style="stroke:#000000"/> -<circle cx="214" cy="361" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="219" r="0.5" style="stroke:#000000"/> -<circle cx="227" cy="351" r="0.5" style="stroke:#000000"/> -<circle cx="228" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="314" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="209" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="367" cy="217" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="194" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="251" r="0.5" style="stroke:#000000"/> -<circle cx="355" cy="406" r="0.5" style="stroke:#000000"/> -<circle cx="252" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="219" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="217" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="220" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="207" r="0.5" style="stroke:#000000"/> -<circle cx="266" cy="255" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="200" cy="248" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="360" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="255" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="50" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="231" cy="340" r="0.5" style="stroke:#000000"/> -<circle cx="189" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="188" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="366" cy="412" r="0.5" style="stroke:#000000"/> -<circle cx="183" cy="139" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="399" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="289" cy="404" r="0.5" style="stroke:#000000"/> -<circle cx="346" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="181" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="274" r="0.5" style="stroke:#000000"/> -<circle cx="246" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="201" cy="395" r="0.5" style="stroke:#000000"/> -<circle cx="192" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="399" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="202" cy="221" r="0.5" style="stroke:#000000"/> -<circle cx="361" cy="406" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="180" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="258" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="408" r="0.5" style="stroke:#000000"/> -<circle cx="247" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="174" cy="346" r="0.5" style="stroke:#000000"/> -<circle cx="373" cy="334" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="82" r="0.5" style="stroke:#000000"/> -<circle cx="240" cy="388" r="0.5" style="stroke:#000000"/> -<circle cx="263" cy="225" r="0.5" style="stroke:#000000"/> -<circle cx="252" cy="207" r="0.5" style="stroke:#000000"/> -<circle cx="233" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="234" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="285" cy="264" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="259" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="233" cy="258" r="0.5" style="stroke:#000000"/> -<circle cx="108" cy="336" r="0.5" style="stroke:#000000"/> -<circle cx="379" cy="402" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="432" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="347" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="213" r="0.5" style="stroke:#000000"/> -<circle cx="330" cy="370" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="320" r="0.5" style="stroke:#000000"/> -<circle cx="280" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="304" cy="209" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="304" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="188" cy="215" r="0.5" style="stroke:#000000"/> -<circle cx="263" cy="218" r="0.5" style="stroke:#000000"/> -<circle cx="196" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="371" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="285" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="217" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="335" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="182" r="0.5" style="stroke:#000000"/> -<circle cx="221" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="333" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="199" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="153" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="419" r="0.5" style="stroke:#000000"/> -<circle cx="227" cy="173" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="242" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="377" cy="388" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="215" r="0.5" style="stroke:#000000"/> -<circle cx="438" cy="229" r="0.5" style="stroke:#000000"/> -<circle cx="446" cy="216" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="238" r="0.5" style="stroke:#000000"/> -<circle cx="224" cy="229" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="181" r="0.5" style="stroke:#000000"/> -<circle cx="270" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="416" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="366" cy="244" r="0.5" style="stroke:#000000"/> -<circle cx="279" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="353" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="70" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="92" r="0.5" style="stroke:#000000"/> -<circle cx="196" cy="362" r="0.5" style="stroke:#000000"/> -<circle cx="234" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="321" cy="367" r="0.5" style="stroke:#000000"/> -<circle cx="251" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="154" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="216" r="0.5" style="stroke:#000000"/> -<circle cx="421" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="215" cy="269" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="224" r="0.5" style="stroke:#000000"/> -<circle cx="79" cy="327" r="0.5" style="stroke:#000000"/> -<circle cx="424" cy="266" r="0.5" style="stroke:#000000"/> -<circle cx="237" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="355" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="239" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="396" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="83" cy="354" r="0.5" style="stroke:#000000"/> -<circle cx="236" cy="434" r="0.5" style="stroke:#000000"/> -<circle cx="439" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="181" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="404" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="362" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="87" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="65" cy="166" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="107" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="60" r="0.5" style="stroke:#000000"/> -<circle cx="123" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="67" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="37" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="62" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="34" r="0.5" style="stroke:#000000"/> -<circle cx="36" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="60" cy="70" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="111" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="55" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="171" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="68" r="0.5" style="stroke:#000000"/> -<circle cx="63" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="86" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="123" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="140" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="85" r="0.5" style="stroke:#000000"/> -<circle cx="47" cy="77" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="88" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="87" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="113" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="83" r="0.5" style="stroke:#000000"/> -<circle cx="106" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="80" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="59" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="50" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="20" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="165" r="0.5" style="stroke:#000000"/> -<circle cx="73" cy="56" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="45" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="59" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="116" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="57" r="0.5" style="stroke:#000000"/> -<circle cx="89" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="72" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="53" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="81" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="77" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="104" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="98" cy="160" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="81" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="72" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="89" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="98" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="33" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="105" cy="90" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="83" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="43" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="104" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="85" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="47" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="112" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="84" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="77" r="0.5" style="stroke:#000000"/> -<circle cx="121" cy="44" r="0.5" style="stroke:#000000"/> -<circle cx="48" cy="72" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="105" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="79" cy="91" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="58" r="0.5" style="stroke:#000000"/> -<circle cx="97" cy="73" r="0.5" style="stroke:#000000"/> -<circle cx="88" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="80" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="61" r="0.5" style="stroke:#000000"/> -<circle cx="109" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="69" r="0.5" style="stroke:#000000"/> -<circle cx="68" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="121" cy="62" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="50" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="109" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="91" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="97" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="90" cy="92" r="0.5" style="stroke:#000000"/> -<circle cx="53" cy="72" r="0.5" style="stroke:#000000"/> -<circle cx="108" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="64" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="166" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="112" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="54" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="40" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="76" r="0.5" style="stroke:#000000"/> -<circle cx="85" cy="28" r="0.5" style="stroke:#000000"/> -<circle cx="49" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="37" r="0.5" style="stroke:#000000"/> -<circle cx="78" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="128" cy="147" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="56" cy="62" r="0.5" style="stroke:#000000"/> -<circle cx="61" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="44" cy="71" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="86" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="106" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="32" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="170" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="57" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="62" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="61" r="0.5" style="stroke:#000000"/> -<circle cx="33" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="69" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="73" cy="57" r="0.5" style="stroke:#000000"/> -<circle cx="162" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="69" cy="71" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="325" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="275" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="171" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="326" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="326" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="288" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="312" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="166" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="171" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="120" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="172" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="143" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="143" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="313" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="275" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="321" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="129" cy="313" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="162" cy="318" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="291" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="325" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="157" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="281" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="321" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="179" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="157" cy="291" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="273" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="276" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="161" cy="318" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="129" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="125" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="328" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="487" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="476" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="476" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="521" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="108" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="516" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="521" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="481" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="470" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="522" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="483" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="493" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="493" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="479" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="519" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="527" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="512" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="507" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="519" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="528" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="529" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="525" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="483" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="477" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="507" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="481" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="511" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="484" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="479" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="526" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="474" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="526" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="484" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="475" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="528" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="523" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="277" r="0.5" style="stroke:#000000"/> -<circle cx="235" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="312" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="375" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="363" cy="164" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="343" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="372" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="376" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="299" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="182" cy="162" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="328" cy="75" r="0.5" style="stroke:#000000"/> -<circle cx="180" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="225" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="406" cy="282" r="0.5" style="stroke:#000000"/> -<circle cx="320" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="328" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="221" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="332" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="140" r="0.5" style="stroke:#000000"/> -<circle cx="231" cy="259" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="348" cy="208" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="276" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="348" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="269" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="388" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="172" r="0.5" style="stroke:#000000"/> -<circle cx="200" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="379" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="277" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="187" r="0.5" style="stroke:#000000"/> -<circle cx="324" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="312" cy="204" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="255" r="0.5" style="stroke:#000000"/> -<circle cx="262" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="403" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="207" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="268" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="327" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="412" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="329" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="372" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="328" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="279" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="218" r="0.5" style="stroke:#000000"/> -<circle cx="297" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="308" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="296" cy="312" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="240" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="383" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="247" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="319" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="280" cy="211" r="0.5" style="stroke:#000000"/> -<circle cx="296" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="243" cy="272" r="0.5" style="stroke:#000000"/> -<circle cx="392" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="331" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="181" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="288" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="326" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="325" cy="205" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="194" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="397" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="307" cy="204" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="436" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="373" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="172" r="0.5" style="stroke:#000000"/> -<circle cx="360" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="299" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="201" cy="252" r="0.5" style="stroke:#000000"/> -<circle cx="323" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="350" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="170" r="0.5" style="stroke:#000000"/> -<circle cx="349" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="340" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="202" cy="147" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="309" cy="176" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="183" r="0.5" style="stroke:#000000"/> -<circle cx="391" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="326" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="210" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="364" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="271" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="149" r="0.5" style="stroke:#000000"/> -<circle cx="278" cy="205" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="363" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="262" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="327" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="194" r="0.5" style="stroke:#000000"/> -<circle cx="333" cy="231" r="0.5" style="stroke:#000000"/> -<circle cx="340" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="271" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="395" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="210" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="441" cy="184" r="0.5" style="stroke:#000000"/> -<circle cx="447" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="191" r="0.5" style="stroke:#000000"/> -<circle cx="281" cy="184" r="0.5" style="stroke:#000000"/> -<circle cx="212" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="164" r="0.5" style="stroke:#000000"/> -<circle cx="425" cy="239" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="322" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="187" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="336" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="272" cy="65" r="0.5" style="stroke:#000000"/> -<circle cx="204" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="82" r="0.5" style="stroke:#000000"/> -<circle cx="259" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="288" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="353" cy="288" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="218" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="226" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="195" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="428" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="274" cy="214" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="180" r="0.5" style="stroke:#000000"/> -<circle cx="172" cy="257" r="0.5" style="stroke:#000000"/> -<circle cx="431" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="290" cy="187" r="0.5" style="stroke:#000000"/> -<circle cx="219" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="230" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="192" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="289" cy="338" r="0.5" style="stroke:#000000"/> -<circle cx="442" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="415" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="384" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="20" cy="98" r="1" style="stroke:#ff0000"/> -<circle cx="50" cy="246" r="1" style="stroke:#ff0000"/> -<circle cx="83" cy="354" r="1" style="stroke:#ff0000"/> -<circle cx="164" cy="416" r="1" style="stroke:#ff0000"/> -<circle cx="236" cy="434" r="1" style="stroke:#ff0000"/> -<circle cx="343" cy="427" r="1" style="stroke:#ff0000"/> -<circle cx="366" cy="412" r="1" style="stroke:#ff0000"/> -<circle cx="379" cy="402" r="1" style="stroke:#ff0000"/> -<circle cx="519" cy="143" r="1" style="stroke:#ff0000"/> -<circle cx="528" cy="126" r="1" style="stroke:#ff0000"/> -<circle cx="529" cy="115" r="1" style="stroke:#ff0000"/> -<circle cx="510" cy="96" r="1" style="stroke:#ff0000"/> -<circle cx="506" cy="95" r="1" style="stroke:#ff0000"/> -<circle cx="117" cy="33" r="1" style="stroke:#ff0000"/> -<circle cx="85" cy="28" r="1" style="stroke:#ff0000"/> -<circle cx="40" cy="64" r="1" style="stroke:#ff0000"/> -</svg> diff --git a/testsuite/tests/dph/quickhull/dph-quickhull-copy-opt.stdout b/testsuite/tests/dph/quickhull/dph-quickhull-copy-opt.stdout deleted file mode 100644 index f6b2d92e9a..0000000000 --- a/testsuite/tests/dph/quickhull/dph-quickhull-copy-opt.stdout +++ /dev/null @@ -1,1019 +0,0 @@ -<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"> -<polygon points="20,98 50,246 83,354 164,416 236,434 343,427 366,412 379,402 519,143 528,126 529,115 510,96 506,95 117,33 85,28 40,64 " style="fill:#d0d0ff;stroke:#000000;stroke-width:1"/> -<circle cx="217" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="266" r="0.5" style="stroke:#000000"/> -<circle cx="191" cy="353" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="416" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="257" r="0.5" style="stroke:#000000"/> -<circle cx="266" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="350" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="334" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="189" cy="151" r="0.5" style="stroke:#000000"/> -<circle cx="308" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="347" cy="160" r="0.5" style="stroke:#000000"/> -<circle cx="251" cy="251" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="397" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="220" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="252" r="0.5" style="stroke:#000000"/> -<circle cx="191" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="84" r="0.5" style="stroke:#000000"/> -<circle cx="90" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="391" cy="360" r="0.5" style="stroke:#000000"/> -<circle cx="277" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="421" r="0.5" style="stroke:#000000"/> -<circle cx="274" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="187" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="343" cy="427" r="0.5" style="stroke:#000000"/> -<circle cx="255" cy="170" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="329" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="261" r="0.5" style="stroke:#000000"/> -<circle cx="214" cy="361" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="219" r="0.5" style="stroke:#000000"/> -<circle cx="227" cy="351" r="0.5" style="stroke:#000000"/> -<circle cx="228" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="314" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="209" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="367" cy="217" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="194" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="251" r="0.5" style="stroke:#000000"/> -<circle cx="355" cy="406" r="0.5" style="stroke:#000000"/> -<circle cx="252" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="219" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="217" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="220" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="207" r="0.5" style="stroke:#000000"/> -<circle cx="266" cy="255" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="200" cy="248" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="360" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="255" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="50" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="231" cy="340" r="0.5" style="stroke:#000000"/> -<circle cx="189" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="188" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="366" cy="412" r="0.5" style="stroke:#000000"/> -<circle cx="183" cy="139" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="399" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="289" cy="404" r="0.5" style="stroke:#000000"/> -<circle cx="346" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="181" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="274" r="0.5" style="stroke:#000000"/> -<circle cx="246" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="201" cy="395" r="0.5" style="stroke:#000000"/> -<circle cx="192" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="399" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="202" cy="221" r="0.5" style="stroke:#000000"/> -<circle cx="361" cy="406" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="180" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="258" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="408" r="0.5" style="stroke:#000000"/> -<circle cx="247" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="174" cy="346" r="0.5" style="stroke:#000000"/> -<circle cx="373" cy="334" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="82" r="0.5" style="stroke:#000000"/> -<circle cx="240" cy="388" r="0.5" style="stroke:#000000"/> -<circle cx="263" cy="225" r="0.5" style="stroke:#000000"/> -<circle cx="252" cy="207" r="0.5" style="stroke:#000000"/> -<circle cx="233" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="234" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="285" cy="264" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="259" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="233" cy="258" r="0.5" style="stroke:#000000"/> -<circle cx="108" cy="336" r="0.5" style="stroke:#000000"/> -<circle cx="379" cy="402" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="432" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="347" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="213" r="0.5" style="stroke:#000000"/> -<circle cx="330" cy="370" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="320" r="0.5" style="stroke:#000000"/> -<circle cx="280" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="304" cy="209" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="304" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="188" cy="215" r="0.5" style="stroke:#000000"/> -<circle cx="263" cy="218" r="0.5" style="stroke:#000000"/> -<circle cx="196" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="371" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="285" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="217" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="335" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="182" r="0.5" style="stroke:#000000"/> -<circle cx="221" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="333" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="199" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="153" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="419" r="0.5" style="stroke:#000000"/> -<circle cx="227" cy="173" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="242" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="377" cy="388" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="215" r="0.5" style="stroke:#000000"/> -<circle cx="438" cy="229" r="0.5" style="stroke:#000000"/> -<circle cx="446" cy="216" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="238" r="0.5" style="stroke:#000000"/> -<circle cx="224" cy="229" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="181" r="0.5" style="stroke:#000000"/> -<circle cx="270" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="416" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="366" cy="244" r="0.5" style="stroke:#000000"/> -<circle cx="279" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="353" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="70" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="92" r="0.5" style="stroke:#000000"/> -<circle cx="196" cy="362" r="0.5" style="stroke:#000000"/> -<circle cx="234" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="321" cy="367" r="0.5" style="stroke:#000000"/> -<circle cx="251" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="154" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="216" r="0.5" style="stroke:#000000"/> -<circle cx="421" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="215" cy="269" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="224" r="0.5" style="stroke:#000000"/> -<circle cx="79" cy="327" r="0.5" style="stroke:#000000"/> -<circle cx="424" cy="266" r="0.5" style="stroke:#000000"/> -<circle cx="237" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="355" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="239" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="396" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="83" cy="354" r="0.5" style="stroke:#000000"/> -<circle cx="236" cy="434" r="0.5" style="stroke:#000000"/> -<circle cx="439" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="181" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="404" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="362" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="87" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="65" cy="166" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="107" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="60" r="0.5" style="stroke:#000000"/> -<circle cx="123" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="67" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="37" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="62" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="34" r="0.5" style="stroke:#000000"/> -<circle cx="36" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="60" cy="70" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="111" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="55" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="171" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="68" r="0.5" style="stroke:#000000"/> -<circle cx="63" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="86" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="123" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="140" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="85" r="0.5" style="stroke:#000000"/> -<circle cx="47" cy="77" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="88" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="87" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="113" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="83" r="0.5" style="stroke:#000000"/> -<circle cx="106" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="80" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="59" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="50" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="20" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="165" r="0.5" style="stroke:#000000"/> -<circle cx="73" cy="56" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="45" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="59" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="116" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="57" r="0.5" style="stroke:#000000"/> -<circle cx="89" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="72" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="53" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="81" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="77" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="104" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="98" cy="160" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="81" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="72" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="89" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="98" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="33" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="105" cy="90" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="83" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="43" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="104" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="85" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="47" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="112" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="84" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="77" r="0.5" style="stroke:#000000"/> -<circle cx="121" cy="44" r="0.5" style="stroke:#000000"/> -<circle cx="48" cy="72" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="105" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="79" cy="91" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="58" r="0.5" style="stroke:#000000"/> -<circle cx="97" cy="73" r="0.5" style="stroke:#000000"/> -<circle cx="88" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="80" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="61" r="0.5" style="stroke:#000000"/> -<circle cx="109" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="69" r="0.5" style="stroke:#000000"/> -<circle cx="68" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="121" cy="62" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="50" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="109" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="91" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="97" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="90" cy="92" r="0.5" style="stroke:#000000"/> -<circle cx="53" cy="72" r="0.5" style="stroke:#000000"/> -<circle cx="108" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="64" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="166" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="112" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="54" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="40" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="76" r="0.5" style="stroke:#000000"/> -<circle cx="85" cy="28" r="0.5" style="stroke:#000000"/> -<circle cx="49" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="37" r="0.5" style="stroke:#000000"/> -<circle cx="78" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="128" cy="147" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="56" cy="62" r="0.5" style="stroke:#000000"/> -<circle cx="61" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="44" cy="71" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="86" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="106" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="32" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="170" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="57" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="62" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="61" r="0.5" style="stroke:#000000"/> -<circle cx="33" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="69" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="73" cy="57" r="0.5" style="stroke:#000000"/> -<circle cx="162" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="69" cy="71" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="325" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="275" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="171" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="326" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="326" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="288" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="312" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="166" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="171" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="120" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="172" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="143" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="143" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="313" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="275" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="321" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="129" cy="313" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="162" cy="318" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="291" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="325" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="157" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="281" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="321" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="179" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="157" cy="291" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="273" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="276" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="161" cy="318" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="129" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="125" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="328" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="487" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="476" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="476" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="521" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="108" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="516" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="521" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="481" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="470" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="522" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="483" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="493" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="493" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="479" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="519" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="527" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="512" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="507" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="519" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="528" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="529" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="525" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="483" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="477" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="507" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="481" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="511" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="484" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="479" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="526" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="474" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="526" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="484" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="475" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="528" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="523" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="277" r="0.5" style="stroke:#000000"/> -<circle cx="235" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="312" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="375" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="363" cy="164" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="343" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="372" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="376" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="299" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="182" cy="162" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="328" cy="75" r="0.5" style="stroke:#000000"/> -<circle cx="180" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="225" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="406" cy="282" r="0.5" style="stroke:#000000"/> -<circle cx="320" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="328" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="221" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="332" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="140" r="0.5" style="stroke:#000000"/> -<circle cx="231" cy="259" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="348" cy="208" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="276" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="348" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="269" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="388" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="172" r="0.5" style="stroke:#000000"/> -<circle cx="200" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="379" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="277" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="187" r="0.5" style="stroke:#000000"/> -<circle cx="324" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="312" cy="204" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="255" r="0.5" style="stroke:#000000"/> -<circle cx="262" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="403" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="207" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="268" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="327" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="412" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="329" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="372" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="328" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="279" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="218" r="0.5" style="stroke:#000000"/> -<circle cx="297" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="308" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="296" cy="312" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="240" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="383" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="247" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="319" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="280" cy="211" r="0.5" style="stroke:#000000"/> -<circle cx="296" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="243" cy="272" r="0.5" style="stroke:#000000"/> -<circle cx="392" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="331" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="181" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="288" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="326" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="325" cy="205" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="194" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="397" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="307" cy="204" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="436" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="373" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="172" r="0.5" style="stroke:#000000"/> -<circle cx="360" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="299" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="201" cy="252" r="0.5" style="stroke:#000000"/> -<circle cx="323" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="350" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="170" r="0.5" style="stroke:#000000"/> -<circle cx="349" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="340" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="202" cy="147" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="309" cy="176" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="183" r="0.5" style="stroke:#000000"/> -<circle cx="391" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="326" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="210" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="364" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="271" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="149" r="0.5" style="stroke:#000000"/> -<circle cx="278" cy="205" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="363" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="262" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="327" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="194" r="0.5" style="stroke:#000000"/> -<circle cx="333" cy="231" r="0.5" style="stroke:#000000"/> -<circle cx="340" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="271" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="395" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="210" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="441" cy="184" r="0.5" style="stroke:#000000"/> -<circle cx="447" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="191" r="0.5" style="stroke:#000000"/> -<circle cx="281" cy="184" r="0.5" style="stroke:#000000"/> -<circle cx="212" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="164" r="0.5" style="stroke:#000000"/> -<circle cx="425" cy="239" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="322" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="187" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="336" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="272" cy="65" r="0.5" style="stroke:#000000"/> -<circle cx="204" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="82" r="0.5" style="stroke:#000000"/> -<circle cx="259" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="288" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="353" cy="288" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="218" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="226" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="195" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="428" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="274" cy="214" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="180" r="0.5" style="stroke:#000000"/> -<circle cx="172" cy="257" r="0.5" style="stroke:#000000"/> -<circle cx="431" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="290" cy="187" r="0.5" style="stroke:#000000"/> -<circle cx="219" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="230" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="192" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="289" cy="338" r="0.5" style="stroke:#000000"/> -<circle cx="442" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="415" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="384" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="20" cy="98" r="1" style="stroke:#ff0000"/> -<circle cx="50" cy="246" r="1" style="stroke:#ff0000"/> -<circle cx="83" cy="354" r="1" style="stroke:#ff0000"/> -<circle cx="164" cy="416" r="1" style="stroke:#ff0000"/> -<circle cx="236" cy="434" r="1" style="stroke:#ff0000"/> -<circle cx="343" cy="427" r="1" style="stroke:#ff0000"/> -<circle cx="366" cy="412" r="1" style="stroke:#ff0000"/> -<circle cx="379" cy="402" r="1" style="stroke:#ff0000"/> -<circle cx="519" cy="143" r="1" style="stroke:#ff0000"/> -<circle cx="528" cy="126" r="1" style="stroke:#ff0000"/> -<circle cx="529" cy="115" r="1" style="stroke:#ff0000"/> -<circle cx="510" cy="96" r="1" style="stroke:#ff0000"/> -<circle cx="506" cy="95" r="1" style="stroke:#ff0000"/> -<circle cx="117" cy="33" r="1" style="stroke:#ff0000"/> -<circle cx="85" cy="28" r="1" style="stroke:#ff0000"/> -<circle cx="40" cy="64" r="1" style="stroke:#ff0000"/> -</svg> diff --git a/testsuite/tests/dph/quickhull/dph-quickhull-vseg-fast.stdout b/testsuite/tests/dph/quickhull/dph-quickhull-vseg-fast.stdout deleted file mode 100644 index f6b2d92e9a..0000000000 --- a/testsuite/tests/dph/quickhull/dph-quickhull-vseg-fast.stdout +++ /dev/null @@ -1,1019 +0,0 @@ -<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"> -<polygon points="20,98 50,246 83,354 164,416 236,434 343,427 366,412 379,402 519,143 528,126 529,115 510,96 506,95 117,33 85,28 40,64 " style="fill:#d0d0ff;stroke:#000000;stroke-width:1"/> -<circle cx="217" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="266" r="0.5" style="stroke:#000000"/> -<circle cx="191" cy="353" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="416" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="257" r="0.5" style="stroke:#000000"/> -<circle cx="266" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="350" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="334" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="189" cy="151" r="0.5" style="stroke:#000000"/> -<circle cx="308" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="347" cy="160" r="0.5" style="stroke:#000000"/> -<circle cx="251" cy="251" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="397" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="220" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="252" r="0.5" style="stroke:#000000"/> -<circle cx="191" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="84" r="0.5" style="stroke:#000000"/> -<circle cx="90" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="391" cy="360" r="0.5" style="stroke:#000000"/> -<circle cx="277" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="421" r="0.5" style="stroke:#000000"/> -<circle cx="274" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="187" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="343" cy="427" r="0.5" style="stroke:#000000"/> -<circle cx="255" cy="170" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="329" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="261" r="0.5" style="stroke:#000000"/> -<circle cx="214" cy="361" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="219" r="0.5" style="stroke:#000000"/> -<circle cx="227" cy="351" r="0.5" style="stroke:#000000"/> -<circle cx="228" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="314" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="209" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="367" cy="217" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="194" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="251" r="0.5" style="stroke:#000000"/> -<circle cx="355" cy="406" r="0.5" style="stroke:#000000"/> -<circle cx="252" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="219" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="217" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="220" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="207" r="0.5" style="stroke:#000000"/> -<circle cx="266" cy="255" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="200" cy="248" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="360" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="255" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="50" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="231" cy="340" r="0.5" style="stroke:#000000"/> -<circle cx="189" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="188" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="366" cy="412" r="0.5" style="stroke:#000000"/> -<circle cx="183" cy="139" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="399" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="289" cy="404" r="0.5" style="stroke:#000000"/> -<circle cx="346" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="181" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="274" r="0.5" style="stroke:#000000"/> -<circle cx="246" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="201" cy="395" r="0.5" style="stroke:#000000"/> -<circle cx="192" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="399" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="202" cy="221" r="0.5" style="stroke:#000000"/> -<circle cx="361" cy="406" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="180" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="258" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="408" r="0.5" style="stroke:#000000"/> -<circle cx="247" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="174" cy="346" r="0.5" style="stroke:#000000"/> -<circle cx="373" cy="334" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="82" r="0.5" style="stroke:#000000"/> -<circle cx="240" cy="388" r="0.5" style="stroke:#000000"/> -<circle cx="263" cy="225" r="0.5" style="stroke:#000000"/> -<circle cx="252" cy="207" r="0.5" style="stroke:#000000"/> -<circle cx="233" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="234" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="285" cy="264" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="259" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="233" cy="258" r="0.5" style="stroke:#000000"/> -<circle cx="108" cy="336" r="0.5" style="stroke:#000000"/> -<circle cx="379" cy="402" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="432" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="347" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="213" r="0.5" style="stroke:#000000"/> -<circle cx="330" cy="370" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="320" r="0.5" style="stroke:#000000"/> -<circle cx="280" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="304" cy="209" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="304" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="188" cy="215" r="0.5" style="stroke:#000000"/> -<circle cx="263" cy="218" r="0.5" style="stroke:#000000"/> -<circle cx="196" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="371" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="285" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="217" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="335" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="182" r="0.5" style="stroke:#000000"/> -<circle cx="221" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="333" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="199" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="153" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="419" r="0.5" style="stroke:#000000"/> -<circle cx="227" cy="173" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="242" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="377" cy="388" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="215" r="0.5" style="stroke:#000000"/> -<circle cx="438" cy="229" r="0.5" style="stroke:#000000"/> -<circle cx="446" cy="216" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="238" r="0.5" style="stroke:#000000"/> -<circle cx="224" cy="229" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="181" r="0.5" style="stroke:#000000"/> -<circle cx="270" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="416" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="366" cy="244" r="0.5" style="stroke:#000000"/> -<circle cx="279" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="353" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="70" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="92" r="0.5" style="stroke:#000000"/> -<circle cx="196" cy="362" r="0.5" style="stroke:#000000"/> -<circle cx="234" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="321" cy="367" r="0.5" style="stroke:#000000"/> -<circle cx="251" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="154" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="216" r="0.5" style="stroke:#000000"/> -<circle cx="421" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="215" cy="269" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="224" r="0.5" style="stroke:#000000"/> -<circle cx="79" cy="327" r="0.5" style="stroke:#000000"/> -<circle cx="424" cy="266" r="0.5" style="stroke:#000000"/> -<circle cx="237" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="355" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="239" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="396" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="83" cy="354" r="0.5" style="stroke:#000000"/> -<circle cx="236" cy="434" r="0.5" style="stroke:#000000"/> -<circle cx="439" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="181" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="404" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="362" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="87" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="65" cy="166" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="107" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="60" r="0.5" style="stroke:#000000"/> -<circle cx="123" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="67" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="37" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="62" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="34" r="0.5" style="stroke:#000000"/> -<circle cx="36" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="60" cy="70" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="111" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="55" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="171" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="68" r="0.5" style="stroke:#000000"/> -<circle cx="63" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="86" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="123" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="140" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="85" r="0.5" style="stroke:#000000"/> -<circle cx="47" cy="77" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="88" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="87" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="113" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="83" r="0.5" style="stroke:#000000"/> -<circle cx="106" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="80" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="59" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="50" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="20" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="165" r="0.5" style="stroke:#000000"/> -<circle cx="73" cy="56" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="45" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="59" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="116" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="57" r="0.5" style="stroke:#000000"/> -<circle cx="89" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="72" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="53" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="81" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="77" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="104" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="98" cy="160" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="81" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="72" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="89" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="98" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="33" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="105" cy="90" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="83" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="43" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="104" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="85" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="47" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="112" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="84" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="77" r="0.5" style="stroke:#000000"/> -<circle cx="121" cy="44" r="0.5" style="stroke:#000000"/> -<circle cx="48" cy="72" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="105" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="79" cy="91" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="58" r="0.5" style="stroke:#000000"/> -<circle cx="97" cy="73" r="0.5" style="stroke:#000000"/> -<circle cx="88" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="80" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="61" r="0.5" style="stroke:#000000"/> -<circle cx="109" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="69" r="0.5" style="stroke:#000000"/> -<circle cx="68" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="121" cy="62" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="50" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="109" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="91" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="97" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="90" cy="92" r="0.5" style="stroke:#000000"/> -<circle cx="53" cy="72" r="0.5" style="stroke:#000000"/> -<circle cx="108" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="64" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="166" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="112" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="54" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="40" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="76" r="0.5" style="stroke:#000000"/> -<circle cx="85" cy="28" r="0.5" style="stroke:#000000"/> -<circle cx="49" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="37" r="0.5" style="stroke:#000000"/> -<circle cx="78" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="128" cy="147" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="56" cy="62" r="0.5" style="stroke:#000000"/> -<circle cx="61" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="44" cy="71" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="86" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="106" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="32" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="170" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="57" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="62" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="61" r="0.5" style="stroke:#000000"/> -<circle cx="33" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="69" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="73" cy="57" r="0.5" style="stroke:#000000"/> -<circle cx="162" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="69" cy="71" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="325" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="275" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="171" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="326" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="326" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="288" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="312" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="166" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="171" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="120" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="172" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="143" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="143" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="313" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="275" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="321" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="129" cy="313" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="162" cy="318" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="291" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="325" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="157" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="281" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="321" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="179" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="157" cy="291" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="273" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="276" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="161" cy="318" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="129" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="125" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="328" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="487" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="476" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="476" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="521" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="108" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="516" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="521" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="481" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="470" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="522" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="483" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="493" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="493" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="479" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="519" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="527" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="512" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="507" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="519" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="528" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="529" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="525" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="483" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="477" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="507" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="481" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="511" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="484" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="479" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="526" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="474" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="526" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="484" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="475" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="528" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="523" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="277" r="0.5" style="stroke:#000000"/> -<circle cx="235" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="312" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="375" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="363" cy="164" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="343" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="372" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="376" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="299" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="182" cy="162" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="328" cy="75" r="0.5" style="stroke:#000000"/> -<circle cx="180" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="225" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="406" cy="282" r="0.5" style="stroke:#000000"/> -<circle cx="320" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="328" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="221" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="332" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="140" r="0.5" style="stroke:#000000"/> -<circle cx="231" cy="259" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="348" cy="208" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="276" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="348" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="269" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="388" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="172" r="0.5" style="stroke:#000000"/> -<circle cx="200" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="379" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="277" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="187" r="0.5" style="stroke:#000000"/> -<circle cx="324" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="312" cy="204" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="255" r="0.5" style="stroke:#000000"/> -<circle cx="262" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="403" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="207" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="268" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="327" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="412" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="329" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="372" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="328" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="279" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="218" r="0.5" style="stroke:#000000"/> -<circle cx="297" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="308" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="296" cy="312" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="240" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="383" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="247" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="319" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="280" cy="211" r="0.5" style="stroke:#000000"/> -<circle cx="296" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="243" cy="272" r="0.5" style="stroke:#000000"/> -<circle cx="392" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="331" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="181" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="288" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="326" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="325" cy="205" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="194" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="397" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="307" cy="204" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="436" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="373" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="172" r="0.5" style="stroke:#000000"/> -<circle cx="360" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="299" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="201" cy="252" r="0.5" style="stroke:#000000"/> -<circle cx="323" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="350" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="170" r="0.5" style="stroke:#000000"/> -<circle cx="349" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="340" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="202" cy="147" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="309" cy="176" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="183" r="0.5" style="stroke:#000000"/> -<circle cx="391" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="326" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="210" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="364" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="271" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="149" r="0.5" style="stroke:#000000"/> -<circle cx="278" cy="205" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="363" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="262" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="327" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="194" r="0.5" style="stroke:#000000"/> -<circle cx="333" cy="231" r="0.5" style="stroke:#000000"/> -<circle cx="340" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="271" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="395" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="210" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="441" cy="184" r="0.5" style="stroke:#000000"/> -<circle cx="447" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="191" r="0.5" style="stroke:#000000"/> -<circle cx="281" cy="184" r="0.5" style="stroke:#000000"/> -<circle cx="212" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="164" r="0.5" style="stroke:#000000"/> -<circle cx="425" cy="239" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="322" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="187" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="336" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="272" cy="65" r="0.5" style="stroke:#000000"/> -<circle cx="204" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="82" r="0.5" style="stroke:#000000"/> -<circle cx="259" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="288" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="353" cy="288" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="218" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="226" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="195" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="428" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="274" cy="214" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="180" r="0.5" style="stroke:#000000"/> -<circle cx="172" cy="257" r="0.5" style="stroke:#000000"/> -<circle cx="431" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="290" cy="187" r="0.5" style="stroke:#000000"/> -<circle cx="219" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="230" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="192" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="289" cy="338" r="0.5" style="stroke:#000000"/> -<circle cx="442" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="415" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="384" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="20" cy="98" r="1" style="stroke:#ff0000"/> -<circle cx="50" cy="246" r="1" style="stroke:#ff0000"/> -<circle cx="83" cy="354" r="1" style="stroke:#ff0000"/> -<circle cx="164" cy="416" r="1" style="stroke:#ff0000"/> -<circle cx="236" cy="434" r="1" style="stroke:#ff0000"/> -<circle cx="343" cy="427" r="1" style="stroke:#ff0000"/> -<circle cx="366" cy="412" r="1" style="stroke:#ff0000"/> -<circle cx="379" cy="402" r="1" style="stroke:#ff0000"/> -<circle cx="519" cy="143" r="1" style="stroke:#ff0000"/> -<circle cx="528" cy="126" r="1" style="stroke:#ff0000"/> -<circle cx="529" cy="115" r="1" style="stroke:#ff0000"/> -<circle cx="510" cy="96" r="1" style="stroke:#ff0000"/> -<circle cx="506" cy="95" r="1" style="stroke:#ff0000"/> -<circle cx="117" cy="33" r="1" style="stroke:#ff0000"/> -<circle cx="85" cy="28" r="1" style="stroke:#ff0000"/> -<circle cx="40" cy="64" r="1" style="stroke:#ff0000"/> -</svg> diff --git a/testsuite/tests/dph/quickhull/dph-quickhull-vseg-opt.stdout b/testsuite/tests/dph/quickhull/dph-quickhull-vseg-opt.stdout deleted file mode 100644 index f6b2d92e9a..0000000000 --- a/testsuite/tests/dph/quickhull/dph-quickhull-vseg-opt.stdout +++ /dev/null @@ -1,1019 +0,0 @@ -<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"> -<polygon points="20,98 50,246 83,354 164,416 236,434 343,427 366,412 379,402 519,143 528,126 529,115 510,96 506,95 117,33 85,28 40,64 " style="fill:#d0d0ff;stroke:#000000;stroke-width:1"/> -<circle cx="217" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="266" r="0.5" style="stroke:#000000"/> -<circle cx="191" cy="353" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="416" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="257" r="0.5" style="stroke:#000000"/> -<circle cx="266" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="350" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="334" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="189" cy="151" r="0.5" style="stroke:#000000"/> -<circle cx="308" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="347" cy="160" r="0.5" style="stroke:#000000"/> -<circle cx="251" cy="251" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="397" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="220" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="252" r="0.5" style="stroke:#000000"/> -<circle cx="191" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="84" r="0.5" style="stroke:#000000"/> -<circle cx="90" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="391" cy="360" r="0.5" style="stroke:#000000"/> -<circle cx="277" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="421" r="0.5" style="stroke:#000000"/> -<circle cx="274" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="187" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="343" cy="427" r="0.5" style="stroke:#000000"/> -<circle cx="255" cy="170" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="329" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="261" r="0.5" style="stroke:#000000"/> -<circle cx="214" cy="361" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="219" r="0.5" style="stroke:#000000"/> -<circle cx="227" cy="351" r="0.5" style="stroke:#000000"/> -<circle cx="228" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="314" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="209" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="367" cy="217" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="194" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="251" r="0.5" style="stroke:#000000"/> -<circle cx="355" cy="406" r="0.5" style="stroke:#000000"/> -<circle cx="252" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="219" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="217" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="220" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="207" r="0.5" style="stroke:#000000"/> -<circle cx="266" cy="255" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="200" cy="248" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="360" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="255" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="50" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="231" cy="340" r="0.5" style="stroke:#000000"/> -<circle cx="189" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="188" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="366" cy="412" r="0.5" style="stroke:#000000"/> -<circle cx="183" cy="139" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="399" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="289" cy="404" r="0.5" style="stroke:#000000"/> -<circle cx="346" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="181" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="274" r="0.5" style="stroke:#000000"/> -<circle cx="246" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="201" cy="395" r="0.5" style="stroke:#000000"/> -<circle cx="192" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="399" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="202" cy="221" r="0.5" style="stroke:#000000"/> -<circle cx="361" cy="406" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="180" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="258" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="408" r="0.5" style="stroke:#000000"/> -<circle cx="247" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="174" cy="346" r="0.5" style="stroke:#000000"/> -<circle cx="373" cy="334" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="82" r="0.5" style="stroke:#000000"/> -<circle cx="240" cy="388" r="0.5" style="stroke:#000000"/> -<circle cx="263" cy="225" r="0.5" style="stroke:#000000"/> -<circle cx="252" cy="207" r="0.5" style="stroke:#000000"/> -<circle cx="233" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="234" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="285" cy="264" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="259" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="233" cy="258" r="0.5" style="stroke:#000000"/> -<circle cx="108" cy="336" r="0.5" style="stroke:#000000"/> -<circle cx="379" cy="402" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="432" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="347" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="213" r="0.5" style="stroke:#000000"/> -<circle cx="330" cy="370" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="320" r="0.5" style="stroke:#000000"/> -<circle cx="280" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="304" cy="209" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="304" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="188" cy="215" r="0.5" style="stroke:#000000"/> -<circle cx="263" cy="218" r="0.5" style="stroke:#000000"/> -<circle cx="196" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="371" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="285" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="217" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="335" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="182" r="0.5" style="stroke:#000000"/> -<circle cx="221" cy="256" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="398" r="0.5" style="stroke:#000000"/> -<circle cx="333" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="199" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="153" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="419" r="0.5" style="stroke:#000000"/> -<circle cx="227" cy="173" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="242" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="246" r="0.5" style="stroke:#000000"/> -<circle cx="377" cy="388" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="215" r="0.5" style="stroke:#000000"/> -<circle cx="438" cy="229" r="0.5" style="stroke:#000000"/> -<circle cx="446" cy="216" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="238" r="0.5" style="stroke:#000000"/> -<circle cx="224" cy="229" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="181" r="0.5" style="stroke:#000000"/> -<circle cx="270" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="416" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="366" cy="244" r="0.5" style="stroke:#000000"/> -<circle cx="279" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="353" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="70" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="92" r="0.5" style="stroke:#000000"/> -<circle cx="196" cy="362" r="0.5" style="stroke:#000000"/> -<circle cx="234" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="321" cy="367" r="0.5" style="stroke:#000000"/> -<circle cx="251" cy="249" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="154" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="216" r="0.5" style="stroke:#000000"/> -<circle cx="421" cy="250" r="0.5" style="stroke:#000000"/> -<circle cx="215" cy="269" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="224" r="0.5" style="stroke:#000000"/> -<circle cx="79" cy="327" r="0.5" style="stroke:#000000"/> -<circle cx="424" cy="266" r="0.5" style="stroke:#000000"/> -<circle cx="237" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="253" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="355" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="239" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="396" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="83" cy="354" r="0.5" style="stroke:#000000"/> -<circle cx="236" cy="434" r="0.5" style="stroke:#000000"/> -<circle cx="439" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="181" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="404" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="362" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="87" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="65" cy="166" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="107" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="60" r="0.5" style="stroke:#000000"/> -<circle cx="123" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="67" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="76" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="37" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="62" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="34" r="0.5" style="stroke:#000000"/> -<circle cx="36" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="60" cy="70" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="111" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="55" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="171" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="68" r="0.5" style="stroke:#000000"/> -<circle cx="63" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="86" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="123" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="140" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="78" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="85" r="0.5" style="stroke:#000000"/> -<circle cx="47" cy="77" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="88" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="87" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="113" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="83" r="0.5" style="stroke:#000000"/> -<circle cx="106" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="80" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="59" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="50" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="20" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="165" r="0.5" style="stroke:#000000"/> -<circle cx="73" cy="56" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="45" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="59" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="116" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="115" cy="57" r="0.5" style="stroke:#000000"/> -<circle cx="89" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="72" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="53" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="81" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="77" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="104" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="98" cy="160" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="81" cy="88" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="72" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="103" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="89" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="98" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="33" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="105" cy="90" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="83" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="43" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="104" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="93" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="70" cy="85" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="99" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="47" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="112" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="122" cy="84" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="77" r="0.5" style="stroke:#000000"/> -<circle cx="121" cy="44" r="0.5" style="stroke:#000000"/> -<circle cx="48" cy="72" r="0.5" style="stroke:#000000"/> -<circle cx="75" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="105" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="79" cy="91" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="114" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="80" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="58" r="0.5" style="stroke:#000000"/> -<circle cx="97" cy="73" r="0.5" style="stroke:#000000"/> -<circle cx="88" cy="102" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="80" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="61" r="0.5" style="stroke:#000000"/> -<circle cx="109" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="91" cy="69" r="0.5" style="stroke:#000000"/> -<circle cx="68" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="117" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="121" cy="62" r="0.5" style="stroke:#000000"/> -<circle cx="84" cy="50" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="46" r="0.5" style="stroke:#000000"/> -<circle cx="102" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="109" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="91" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="87" r="0.5" style="stroke:#000000"/> -<circle cx="97" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="90" cy="92" r="0.5" style="stroke:#000000"/> -<circle cx="53" cy="72" r="0.5" style="stroke:#000000"/> -<circle cx="108" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="110" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="64" cy="81" r="0.5" style="stroke:#000000"/> -<circle cx="166" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="112" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="54" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="40" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="79" r="0.5" style="stroke:#000000"/> -<circle cx="96" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="119" cy="76" r="0.5" style="stroke:#000000"/> -<circle cx="85" cy="28" r="0.5" style="stroke:#000000"/> -<circle cx="49" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="37" r="0.5" style="stroke:#000000"/> -<circle cx="78" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="100" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="128" cy="147" r="0.5" style="stroke:#000000"/> -<circle cx="101" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="56" cy="62" r="0.5" style="stroke:#000000"/> -<circle cx="61" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="44" cy="71" r="0.5" style="stroke:#000000"/> -<circle cx="92" cy="86" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="86" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="52" cy="63" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="98" r="0.5" style="stroke:#000000"/> -<circle cx="106" cy="89" r="0.5" style="stroke:#000000"/> -<circle cx="32" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="170" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="57" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="62" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="95" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="71" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="61" r="0.5" style="stroke:#000000"/> -<circle cx="33" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="94" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="69" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="73" cy="57" r="0.5" style="stroke:#000000"/> -<circle cx="162" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="69" cy="71" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="64" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="137" cy="325" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="275" r="0.5" style="stroke:#000000"/> -<circle cx="126" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="171" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="326" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="326" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="288" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="312" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="166" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="171" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="120" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="172" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="304" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="143" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="143" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="313" r="0.5" style="stroke:#000000"/> -<circle cx="156" cy="275" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="321" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="129" cy="313" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="323" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="177" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="165" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="162" cy="318" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="294" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="291" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="130" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="141" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="168" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="155" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="163" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="307" r="0.5" style="stroke:#000000"/> -<circle cx="164" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="325" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="157" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="158" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="281" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="280" r="0.5" style="stroke:#000000"/> -<circle cx="151" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="169" cy="321" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="305" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="179" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="149" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="146" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="153" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="293" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="308" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="154" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="133" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="127" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="292" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="157" cy="291" r="0.5" style="stroke:#000000"/> -<circle cx="144" cy="273" r="0.5" style="stroke:#000000"/> -<circle cx="131" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="160" cy="276" r="0.5" style="stroke:#000000"/> -<circle cx="142" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="161" cy="318" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="135" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="129" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="147" cy="295" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="300" r="0.5" style="stroke:#000000"/> -<circle cx="145" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="132" cy="286" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="299" r="0.5" style="stroke:#000000"/> -<circle cx="152" cy="296" r="0.5" style="stroke:#000000"/> -<circle cx="124" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="176" cy="302" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="134" cy="301" r="0.5" style="stroke:#000000"/> -<circle cx="136" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="298" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="139" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="159" cy="285" r="0.5" style="stroke:#000000"/> -<circle cx="125" cy="316" r="0.5" style="stroke:#000000"/> -<circle cx="148" cy="328" r="0.5" style="stroke:#000000"/> -<circle cx="178" cy="306" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="140" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="173" cy="297" r="0.5" style="stroke:#000000"/> -<circle cx="138" cy="289" r="0.5" style="stroke:#000000"/> -<circle cx="167" cy="287" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="487" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="476" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="476" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="521" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="108" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="135" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="516" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="521" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="481" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="470" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="103" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="522" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="483" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="124" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="493" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="493" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="134" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="506" cy="95" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="479" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="519" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="527" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="515" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="512" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="114" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="480" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="491" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="518" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="505" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="513" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="127" r="0.5" style="stroke:#000000"/> -<circle cx="514" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="507" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="508" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="101" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="501" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="519" cy="141" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="125" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="528" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="529" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="499" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="496" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="503" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="113" r="0.5" style="stroke:#000000"/> -<circle cx="525" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="504" cy="110" r="0.5" style="stroke:#000000"/> -<circle cx="483" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="477" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="112" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="507" cy="111" r="0.5" style="stroke:#000000"/> -<circle cx="494" cy="93" r="0.5" style="stroke:#000000"/> -<circle cx="481" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="510" cy="96" r="0.5" style="stroke:#000000"/> -<circle cx="492" cy="137" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="511" cy="138" r="0.5" style="stroke:#000000"/> -<circle cx="500" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="484" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="485" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="479" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="497" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="526" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="495" cy="123" r="0.5" style="stroke:#000000"/> -<circle cx="482" cy="106" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="119" r="0.5" style="stroke:#000000"/> -<circle cx="502" cy="116" r="0.5" style="stroke:#000000"/> -<circle cx="474" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="526" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="484" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="486" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="118" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="489" cy="142" r="0.5" style="stroke:#000000"/> -<circle cx="509" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="475" cy="136" r="0.5" style="stroke:#000000"/> -<circle cx="498" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="528" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="490" cy="104" r="0.5" style="stroke:#000000"/> -<circle cx="523" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="488" cy="109" r="0.5" style="stroke:#000000"/> -<circle cx="517" cy="107" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="277" r="0.5" style="stroke:#000000"/> -<circle cx="235" cy="324" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="312" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="375" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="363" cy="164" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="343" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="372" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="238" cy="232" r="0.5" style="stroke:#000000"/> -<circle cx="376" cy="310" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="299" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="256" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="182" cy="162" r="0.5" style="stroke:#000000"/> -<circle cx="229" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="328" cy="75" r="0.5" style="stroke:#000000"/> -<circle cx="180" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="225" cy="144" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="406" cy="282" r="0.5" style="stroke:#000000"/> -<circle cx="320" cy="245" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="328" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="115" r="0.5" style="stroke:#000000"/> -<circle cx="253" cy="221" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="332" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="140" r="0.5" style="stroke:#000000"/> -<circle cx="231" cy="259" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="348" cy="208" r="0.5" style="stroke:#000000"/> -<circle cx="273" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="342" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="177" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="276" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="348" cy="222" r="0.5" style="stroke:#000000"/> -<circle cx="269" cy="159" r="0.5" style="stroke:#000000"/> -<circle cx="388" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="172" r="0.5" style="stroke:#000000"/> -<circle cx="200" cy="158" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="99" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="201" r="0.5" style="stroke:#000000"/> -<circle cx="379" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="277" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="275" cy="187" r="0.5" style="stroke:#000000"/> -<circle cx="324" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="312" cy="204" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="255" r="0.5" style="stroke:#000000"/> -<circle cx="262" cy="198" r="0.5" style="stroke:#000000"/> -<circle cx="403" cy="283" r="0.5" style="stroke:#000000"/> -<circle cx="223" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="207" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="237" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="150" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="268" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="322" r="0.5" style="stroke:#000000"/> -<circle cx="250" cy="117" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="97" r="0.5" style="stroke:#000000"/> -<circle cx="327" cy="122" r="0.5" style="stroke:#000000"/> -<circle cx="412" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="329" cy="315" r="0.5" style="stroke:#000000"/> -<circle cx="372" cy="130" r="0.5" style="stroke:#000000"/> -<circle cx="328" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="279" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="248" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="218" r="0.5" style="stroke:#000000"/> -<circle cx="297" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="257" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="308" cy="235" r="0.5" style="stroke:#000000"/> -<circle cx="296" cy="312" r="0.5" style="stroke:#000000"/> -<circle cx="305" cy="240" r="0.5" style="stroke:#000000"/> -<circle cx="264" cy="178" r="0.5" style="stroke:#000000"/> -<circle cx="383" cy="317" r="0.5" style="stroke:#000000"/> -<circle cx="319" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="247" cy="241" r="0.5" style="stroke:#000000"/> -<circle cx="306" cy="193" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="319" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="280" cy="211" r="0.5" style="stroke:#000000"/> -<circle cx="296" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="243" cy="272" r="0.5" style="stroke:#000000"/> -<circle cx="392" cy="263" r="0.5" style="stroke:#000000"/> -<circle cx="331" cy="74" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="181" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="168" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="288" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="326" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="325" cy="205" r="0.5" style="stroke:#000000"/> -<circle cx="287" cy="206" r="0.5" style="stroke:#000000"/> -<circle cx="194" cy="265" r="0.5" style="stroke:#000000"/> -<circle cx="397" cy="314" r="0.5" style="stroke:#000000"/> -<circle cx="307" cy="204" r="0.5" style="stroke:#000000"/> -<circle cx="286" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="436" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="373" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="298" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="244" cy="172" r="0.5" style="stroke:#000000"/> -<circle cx="360" cy="290" r="0.5" style="stroke:#000000"/> -<circle cx="299" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="201" cy="252" r="0.5" style="stroke:#000000"/> -<circle cx="323" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="350" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="341" cy="170" r="0.5" style="stroke:#000000"/> -<circle cx="349" cy="157" r="0.5" style="stroke:#000000"/> -<circle cx="340" cy="94" r="0.5" style="stroke:#000000"/> -<circle cx="202" cy="147" r="0.5" style="stroke:#000000"/> -<circle cx="254" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="309" cy="176" r="0.5" style="stroke:#000000"/> -<circle cx="260" cy="183" r="0.5" style="stroke:#000000"/> -<circle cx="391" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="326" cy="210" r="0.5" style="stroke:#000000"/> -<circle cx="210" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="364" cy="163" r="0.5" style="stroke:#000000"/> -<circle cx="271" cy="121" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="149" r="0.5" style="stroke:#000000"/> -<circle cx="278" cy="205" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="311" r="0.5" style="stroke:#000000"/> -<circle cx="363" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="262" cy="236" r="0.5" style="stroke:#000000"/> -<circle cx="369" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="327" r="0.5" style="stroke:#000000"/> -<circle cx="283" cy="143" r="0.5" style="stroke:#000000"/> -<circle cx="239" cy="194" r="0.5" style="stroke:#000000"/> -<circle cx="333" cy="231" r="0.5" style="stroke:#000000"/> -<circle cx="340" cy="129" r="0.5" style="stroke:#000000"/> -<circle cx="271" cy="105" r="0.5" style="stroke:#000000"/> -<circle cx="302" cy="100" r="0.5" style="stroke:#000000"/> -<circle cx="303" cy="197" r="0.5" style="stroke:#000000"/> -<circle cx="395" cy="303" r="0.5" style="stroke:#000000"/> -<circle cx="210" cy="227" r="0.5" style="stroke:#000000"/> -<circle cx="317" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="441" cy="184" r="0.5" style="stroke:#000000"/> -<circle cx="447" cy="175" r="0.5" style="stroke:#000000"/> -<circle cx="294" cy="191" r="0.5" style="stroke:#000000"/> -<circle cx="281" cy="184" r="0.5" style="stroke:#000000"/> -<circle cx="212" cy="148" r="0.5" style="stroke:#000000"/> -<circle cx="315" cy="179" r="0.5" style="stroke:#000000"/> -<circle cx="318" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="232" cy="164" r="0.5" style="stroke:#000000"/> -<circle cx="425" cy="239" r="0.5" style="stroke:#000000"/> -<circle cx="387" cy="195" r="0.5" style="stroke:#000000"/> -<circle cx="322" cy="152" r="0.5" style="stroke:#000000"/> -<circle cx="213" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="187" cy="132" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="161" r="0.5" style="stroke:#000000"/> -<circle cx="292" cy="202" r="0.5" style="stroke:#000000"/> -<circle cx="336" cy="155" r="0.5" style="stroke:#000000"/> -<circle cx="272" cy="65" r="0.5" style="stroke:#000000"/> -<circle cx="204" cy="190" r="0.5" style="stroke:#000000"/> -<circle cx="351" cy="82" r="0.5" style="stroke:#000000"/> -<circle cx="259" cy="284" r="0.5" style="stroke:#000000"/> -<circle cx="288" cy="189" r="0.5" style="stroke:#000000"/> -<circle cx="300" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="353" cy="288" r="0.5" style="stroke:#000000"/> -<circle cx="301" cy="199" r="0.5" style="stroke:#000000"/> -<circle cx="218" cy="128" r="0.5" style="stroke:#000000"/> -<circle cx="226" cy="243" r="0.5" style="stroke:#000000"/> -<circle cx="195" cy="146" r="0.5" style="stroke:#000000"/> -<circle cx="284" cy="174" r="0.5" style="stroke:#000000"/> -<circle cx="428" cy="200" r="0.5" style="stroke:#000000"/> -<circle cx="274" cy="214" r="0.5" style="stroke:#000000"/> -<circle cx="211" cy="131" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="196" r="0.5" style="stroke:#000000"/> -<circle cx="310" cy="180" r="0.5" style="stroke:#000000"/> -<circle cx="172" cy="257" r="0.5" style="stroke:#000000"/> -<circle cx="431" cy="212" r="0.5" style="stroke:#000000"/> -<circle cx="290" cy="187" r="0.5" style="stroke:#000000"/> -<circle cx="219" cy="203" r="0.5" style="stroke:#000000"/> -<circle cx="230" cy="279" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="192" r="0.5" style="stroke:#000000"/> -<circle cx="291" cy="254" r="0.5" style="stroke:#000000"/> -<circle cx="245" cy="309" r="0.5" style="stroke:#000000"/> -<circle cx="345" cy="126" r="0.5" style="stroke:#000000"/> -<circle cx="175" cy="278" r="0.5" style="stroke:#000000"/> -<circle cx="289" cy="338" r="0.5" style="stroke:#000000"/> -<circle cx="442" cy="228" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="249" cy="120" r="0.5" style="stroke:#000000"/> -<circle cx="415" cy="186" r="0.5" style="stroke:#000000"/> -<circle cx="242" cy="145" r="0.5" style="stroke:#000000"/> -<circle cx="384" cy="133" r="0.5" style="stroke:#000000"/> -<circle cx="20" cy="98" r="1" style="stroke:#ff0000"/> -<circle cx="50" cy="246" r="1" style="stroke:#ff0000"/> -<circle cx="83" cy="354" r="1" style="stroke:#ff0000"/> -<circle cx="164" cy="416" r="1" style="stroke:#ff0000"/> -<circle cx="236" cy="434" r="1" style="stroke:#ff0000"/> -<circle cx="343" cy="427" r="1" style="stroke:#ff0000"/> -<circle cx="366" cy="412" r="1" style="stroke:#ff0000"/> -<circle cx="379" cy="402" r="1" style="stroke:#ff0000"/> -<circle cx="519" cy="143" r="1" style="stroke:#ff0000"/> -<circle cx="528" cy="126" r="1" style="stroke:#ff0000"/> -<circle cx="529" cy="115" r="1" style="stroke:#ff0000"/> -<circle cx="510" cy="96" r="1" style="stroke:#ff0000"/> -<circle cx="506" cy="95" r="1" style="stroke:#ff0000"/> -<circle cx="117" cy="33" r="1" style="stroke:#ff0000"/> -<circle cx="85" cy="28" r="1" style="stroke:#ff0000"/> -<circle cx="40" cy="64" r="1" style="stroke:#ff0000"/> -</svg> diff --git a/testsuite/tests/dph/quickhull/dph-quickhull.T b/testsuite/tests/dph/quickhull/dph-quickhull.T deleted file mode 100644 index 7d8cf322ab..0000000000 --- a/testsuite/tests/dph/quickhull/dph-quickhull.T +++ /dev/null @@ -1,20 +0,0 @@ - -test ('dph-quickhull-copy-fast' - , [ outputdir('copy-fast') - , reqlib('dph-lifted-copy') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -fno-vectorisation-avoidance -package dph-lifted-copy -package dph-prim-par']) - - -test ('dph-quickhull-vseg-fast' - , [ outputdir('vseg-fast') - , reqlib('dph-lifted-vseg') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-vseg -package dph-prim-par']) - diff --git a/testsuite/tests/dph/smvm/Main.hs b/testsuite/tests/dph/smvm/Main.hs deleted file mode 100644 index d6b9a0f55c..0000000000 --- a/testsuite/tests/dph/smvm/Main.hs +++ /dev/null @@ -1,60 +0,0 @@ -{-# LANGUAGE TypeOperators #-} - -import SMVMVect (smvm) - -import Control.Exception (evaluate) -import System.IO -import System.Environment - -import qualified Data.Array.Parallel.Unlifted as U -import Data.Array.Parallel.Prelude -import Data.Array.Parallel.PArray as P - - --- Load sparse matrix from a file -loadSM :: String - -> IO (PArray (PArray (Int, Double)), PArray Double) - -loadSM s - = do - (segd, m, v) <- loadSM' s - return $ (nestUSegd segd (fromUArray2 m), fromUArray v) - - -loadSM' :: String - -> IO ( U.Segd - , U.Array (Int, Double) - , U.Array Double) -loadSM' fname = - do - h <- openBinaryFile fname ReadMode - lengths <- U.hGet h - indices <- U.hGet h - values <- U.hGet h - dv <- U.hGet h - let segd = U.lengthsToSegd lengths - m = U.zip indices values - evaluate lengths - evaluate indices - evaluate values - evaluate dv - return (segd, m, dv) - -main - = do [inFile, outFile] <- getArgs - (m, v) <- loadSM inFile - let result = smvm m v - - -- ignore wibbles in low-order bits - let output - = (unlines - $ map (take 12) - $ map show - $ P.toList result) - ++ ("SUM = " - ++ (take 12 $ show $ sum $ P.toList result) - ++ "\n") - - -- check our result against the provided outFile - outputCheck <- readFile outFile - print $ output == outputCheck diff --git a/testsuite/tests/dph/smvm/Makefile b/testsuite/tests/dph/smvm/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/smvm/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/smvm/SMVMVect.hs b/testsuite/tests/dph/smvm/SMVMVect.hs deleted file mode 100644 index 93f3775741..0000000000 --- a/testsuite/tests/dph/smvm/SMVMVect.hs +++ /dev/null @@ -1,17 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise #-} -module SMVMVect (smvm) where - -import Data.Array.Parallel -import Data.Array.Parallel.Prelude.Double as D -import Data.Array.Parallel.Prelude.Int as I - -import qualified Prelude as P - -smvm :: PArray (PArray (Int, Double)) -> PArray Double -> PArray Double -{-# NOINLINE smvm #-} -smvm m v = toPArrayP (smvm' (fromNestedPArrayP m) (fromPArrayP v)) - -smvm' :: [:[: (Int, Double) :]:] -> [:Double:] -> [:Double:] -smvm' m v = [: D.sumP [: x D.* (v !: i) | (i,x) <- row :] | row <- m :] - diff --git a/testsuite/tests/dph/smvm/dph-smvm-copy.stdout b/testsuite/tests/dph/smvm/dph-smvm-copy.stdout deleted file mode 100644 index 0ca95142bb..0000000000 --- a/testsuite/tests/dph/smvm/dph-smvm-copy.stdout +++ /dev/null @@ -1 +0,0 @@ -True diff --git a/testsuite/tests/dph/smvm/dph-smvm-vseg.stdout b/testsuite/tests/dph/smvm/dph-smvm-vseg.stdout deleted file mode 100644 index 0ca95142bb..0000000000 --- a/testsuite/tests/dph/smvm/dph-smvm-vseg.stdout +++ /dev/null @@ -1 +0,0 @@ -True diff --git a/testsuite/tests/dph/smvm/dph-smvm.T b/testsuite/tests/dph/smvm/dph-smvm.T deleted file mode 100644 index f2bf31ab82..0000000000 --- a/testsuite/tests/dph/smvm/dph-smvm.T +++ /dev/null @@ -1,41 +0,0 @@ - - -testFile = 'nothing' -if config.platform.startswith('i386-'): - testFile = 'test-i386.dat' - outFile = 'result-i386.txt' - -elif config.platform.startswith('x86_64-'): - testFile = 'test-x86_64.dat' - outFile = 'result-x86_64.txt' - -elif config.platform.startswith('sparc-'): - testFile = 'test-sparc.dat' - outFile = 'result-sparc.txt' - - -if testFile != 'nothing': - test ('dph-smvm-copy' - , [ outputdir('copy') - , when(fast(), skip) - , reqlib('dph-lifted-copy') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) - , extra_run_opts(testFile + " " + outFile) - ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-copy -package dph-prim-par']) - - test ('dph-smvm-vseg' - , [ outputdir('vseg') - , when(fast(), skip) - , reqlib('dph-lifted-vseg') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) - , extra_run_opts(testFile + " " + outFile) - ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-vseg -package dph-prim-par']) - diff --git a/testsuite/tests/dph/smvm/result-i386.txt b/testsuite/tests/dph/smvm/result-i386.txt deleted file mode 100644 index bf279482ef..0000000000 --- a/testsuite/tests/dph/smvm/result-i386.txt +++ /dev/null @@ -1,101 +0,0 @@ -70.911036010 -6.2813390683 -22.790766463 -138.15513262 -52.633427554 -23.459671609 -39.794269586 -37.387466366 -16.666309389 -86.252836326 -2.0045195528 -89.578046705 -15.195705417 -14.397637033 -9.9571970137 -12.966919776 -314.12848526 -106.92515769 -53.308659874 -187.71842503 -19.814258245 -3.5465802997 -26.462654791 -39.989634289 -27.636953710 -14.238025227 -43.040256543 -2.1571625382 -67.541648911 -24.912387408 -7.6904324146 -2.9650091269 -48.668083695 -56.313556473 -285.31615184 -25.595785904 -49.488178849 -25.310153120 -10.706428715 -80.585871589 -225.85945599 -27.813502732 -36.745192736 -157.41617010 -51.501091484 -30.457678049 -254.13030691 -17.469473192 -60.702335620 -52.376229564 -26.517446882 -46.939308590 -19.961999016 -226.11502829 -69.361878263 -206.34127990 -59.002071706 -23.815778535 -101.90955813 -0.3802732664 -41.728371059 -12.021386376 -20.282213202 -17.500045961 -19.148201048 -73.983800195 -7.6944408324 -20.993610043 -58.350721826 -67.038534218 -31.260033960 -14.283638817 -140.68179300 -31.766861701 -46.639106640 -5.2416016510 -175.49192085 -6.1624941117 -3.0550277985 -51.818892673 -7.8677940322 -22.311195092 -258.22325771 -47.475395836 -104.78223912 -38.825154663 -1.6611687222 -63.278567845 -139.86840253 -72.273773546 -71.487712807 -46.823777361 -125.50127870 -3.7203037750 -48.211248191 -79.659040149 -59.672472372 -73.220258924 -63.910310588 -23.405170831 -SUM = 6054.6294998 diff --git a/testsuite/tests/dph/smvm/result-sparc.txt b/testsuite/tests/dph/smvm/result-sparc.txt deleted file mode 100644 index 8c85795cbc..0000000000 --- a/testsuite/tests/dph/smvm/result-sparc.txt +++ /dev/null @@ -1,101 +0,0 @@ -31.171134675 -136.96399669 -99.558688941 -2.3944559306 -132.07457337 -64.316928783 -17.141482371 -363.11345177 -12.350699032 -62.403552077 -25.836846192 -488.62415222 -90.786181827 -2650.5823673 -28.153073045 -29.698154931 -280.42051630 -264.68315963 -0.0 -17.241401450 -103.44167214 -120.25222269 -0.6481556022 -3.8143291874 -57.942419415 -0.9485226158 -11.722857133 -80.685346313 -497.97232376 -7.3021493591 -0.0 -4.9013220836 -61.582851534 -104.83102162 -12.196177619 -16.799924219 -8.8828491057 -20.672947720 -0.0 -8.9693097972 -66.272730332 -145.39838263 -2.6011327691 -80.289657428 -17.075494290 -0.5897431148 -26.250003553 -114.75531349 -57.010466242 -38.222004332 -5.6130133753 -120.90679901 -106.19820538 -0.0 -22.471060597 -50.616335208 -0.7352665245 -13.632854738 -72.201368578 -54.552907983 -3.2165935380 -31.048444965 -3.3117670262 -224.93467543 -110.02973746 -2.0467456318 -0.0 -7.2930317411 -8.6809940997 -41.756667327 -118.07161086 -358.47370477 -8.1013874742 -9.1189573118 -35.367265915 -10.245691446 -25.785856741 -55.679020534 -83.594437531 -34.102347192 -0.2950061972 -16.641363479 -0.0 -29.534024840 -0.0 -26.338163918 -149.17642877 -0.1698288578 -24.176530881 -57.626923103 -33.976034955 -15.977447399 -0.0 -893.79869661 -117.52170252 -60.450794548 -0.5763239875 -4.9690229931 -14.014097678 -275.53547442 -SUM = 9808.1107603 diff --git a/testsuite/tests/dph/smvm/result-x86_64.txt b/testsuite/tests/dph/smvm/result-x86_64.txt deleted file mode 100644 index ebad60a2b0..0000000000 --- a/testsuite/tests/dph/smvm/result-x86_64.txt +++ /dev/null @@ -1,101 +0,0 @@ -2.3160849869 -26.283679649 -76.729994661 -405.68040155 -55.723673494 -33.938026665 -26.505926115 -52.261424813 -33.397325696 -1.1328178441 -5.3697979892 -9.4419428065 -28.678826876 -61.019008268 -4.5301894841 -43.464645691 -0.0 -34.335714653 -20.798359422 -16.561984995 -17.581964787 -23.948149350 -19.120544306 -30.215710069 -0.7009196726 -51.297030554 -4.4591823094 -209.96809687 -47.289681980 -32.498492600 -13.196267290 -0.9989265108 -1.0341069617 -38.917182375 -7.9955088012 -10.355804741 -20.095073245 -36.647037472 -18.786308469 -14.370553796 -6.3265152208 -28.117268967 -65.265404040 -898.53639610 -2.1015959321 -188.65890412 -31.810545943 -14.182075117 -16.239269064 -27.309800346 -126.26472539 -32.948733352 -20.290181336 -0.0 -40.083403468 -81.626718007 -141.59574874 -8.5797914307 -37.726704414 -0.5807127190 -6.3771256902 -6.3486182511 -5.8655193980 -8.1395223932 -32.695645766 -16.964781766 -5.2863815777 -31.967858939 -21.161490986 -61.257464383 -4.1240057418 -18.099623432 -2.1851562467 -3.7220913984 -55.452918211 -10.289474473 -46.276301220 -23.201718136 -7.6338488432 -45.868472148 -12.976885901 -18.483762115 -143.50458515 -24.999794955 -12.121764180 -6.7194800847 -1.8693415211 -23.848562170 -1092.0362340 -67.588787350 -248.07913042 -0.0 -38.838570262 -13.800391661 -1277.9084108 -53.491216504 -14.325720303 -10.152650478 -17.439312837 -40.696348267 -SUM = 6837.6898296 diff --git a/testsuite/tests/dph/smvm/test-i386.dat b/testsuite/tests/dph/smvm/test-i386.dat Binary files differdeleted file mode 100644 index 4db8d62620..0000000000 --- a/testsuite/tests/dph/smvm/test-i386.dat +++ /dev/null diff --git a/testsuite/tests/dph/smvm/test-sparc.dat b/testsuite/tests/dph/smvm/test-sparc.dat Binary files differdeleted file mode 100644 index 73d2c201cd..0000000000 --- a/testsuite/tests/dph/smvm/test-sparc.dat +++ /dev/null diff --git a/testsuite/tests/dph/smvm/test-x86_64.dat b/testsuite/tests/dph/smvm/test-x86_64.dat Binary files differdeleted file mode 100644 index 08a91f5ab1..0000000000 --- a/testsuite/tests/dph/smvm/test-x86_64.dat +++ /dev/null diff --git a/testsuite/tests/dph/sumnats/Main.hs b/testsuite/tests/dph/sumnats/Main.hs deleted file mode 100644 index 7c3ee7210b..0000000000 --- a/testsuite/tests/dph/sumnats/Main.hs +++ /dev/null @@ -1,21 +0,0 @@ - -import SumNatsVect (sumNats) - --- Solution for 1st Euler problem --- Add all the natural numbers below 1000 that are multiples of 3 or 5. - -solutionLists maxN - = let sumOnetoN n = n * (n+1) `div` 2 - sumStep s n = s * sumOnetoN (n `div` s) - in sumStep 3 (maxN - 1) + sumStep 5 (maxN - 1) - sumStep 15 (maxN - 1) - -solutionLists2 maxN - = sum [ x | x <- [0.. maxN - 1] - , (x `mod` 3 == 0) || (x `mod` 5 == 0) ] - -main - = do let n = 1000 - print $ solutionLists n - print $ solutionLists2 n - print $ sumNats n - diff --git a/testsuite/tests/dph/sumnats/Makefile b/testsuite/tests/dph/sumnats/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/sumnats/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/sumnats/SumNatsVect.hs b/testsuite/tests/dph/sumnats/SumNatsVect.hs deleted file mode 100644 index 187946da4e..0000000000 --- a/testsuite/tests/dph/sumnats/SumNatsVect.hs +++ /dev/null @@ -1,14 +0,0 @@ -{-# LANGUAGE ParallelArrays #-} -{-# OPTIONS -fvectorise #-} -module SumNatsVect (sumNats) where - -import Data.Array.Parallel.Prelude -import Data.Array.Parallel.Prelude.Int as I - -import qualified Prelude as P - -sumNats :: Int -> Int -sumNats maxN - = sumP [: x | x <- enumFromToP 0 (maxN I.- 1) - , (x `mod` 3 I.== 0) || (x `mod` 5 I.== 0) :] - diff --git a/testsuite/tests/dph/sumnats/dph-sumnats-copy.stdout b/testsuite/tests/dph/sumnats/dph-sumnats-copy.stdout deleted file mode 100644 index 8858be2164..0000000000 --- a/testsuite/tests/dph/sumnats/dph-sumnats-copy.stdout +++ /dev/null @@ -1,3 +0,0 @@ -233168 -233168 -233168 diff --git a/testsuite/tests/dph/sumnats/dph-sumnats-vseg.stdout b/testsuite/tests/dph/sumnats/dph-sumnats-vseg.stdout deleted file mode 100644 index 8858be2164..0000000000 --- a/testsuite/tests/dph/sumnats/dph-sumnats-vseg.stdout +++ /dev/null @@ -1,3 +0,0 @@ -233168 -233168 -233168 diff --git a/testsuite/tests/dph/sumnats/dph-sumnats.T b/testsuite/tests/dph/sumnats/dph-sumnats.T deleted file mode 100644 index 66e4b404d6..0000000000 --- a/testsuite/tests/dph/sumnats/dph-sumnats.T +++ /dev/null @@ -1,20 +0,0 @@ - -test ('dph-sumnats-copy' - , [ outputdir('copy') - , reqlib('dph-lifted-copy') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-copy']) - - -test ('dph-sumnats-vseg' - , [ outputdir('vseg') - , reqlib('dph-lifted-vseg') - , reqlib('dph-prim-par') - , only_ways(['normal', 'threaded1', 'threaded2']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-vseg']) - diff --git a/testsuite/tests/dph/words/Main.hs b/testsuite/tests/dph/words/Main.hs deleted file mode 100644 index b7c266921f..0000000000 --- a/testsuite/tests/dph/words/Main.hs +++ /dev/null @@ -1,37 +0,0 @@ - -import WordsVect -import Data.Array.Parallel -import qualified Data.Array.Parallel.Prelude.Word8 as W -import qualified Data.Array.Parallel.PArray as P -import qualified Data.Array.Parallel.Unlifted as U -import Data.Char - -main - = do -- take the filename containing the words as the first arg - let str = "When I look into the looking glass I'm always sure to see" - ++ " no matter how I dodge about, me looking back at me." - - -- convert string to a PArray - let paStr :: PArray W.Word8 - paStr = P.fromUArray $ U.map W.fromInt $ U.fromList $ map ord str - - - -- break the string into words then flatten it back - let str' :: String - str' = map chr - $ map fromIntegral - $ P.toList - $ wordsOfPArray paStr - - - -- count the number of words in the string, using the vectorised program - let wordCountVect = fromIntegral $ wordCountOfPArray paStr - - -- count the number of words with the ye'olde list way - let wordCountList = length $ words str - - -- - putStr $ show str' ++ "\n" - ++ "word count vect = " ++ show wordCountVect ++ "\n" - ++ "word count lists = " ++ show wordCountList ++ "\n" - diff --git a/testsuite/tests/dph/words/Makefile b/testsuite/tests/dph/words/Makefile deleted file mode 100644 index 9101fbd40a..0000000000 --- a/testsuite/tests/dph/words/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -TOP=../../.. -include $(TOP)/mk/boilerplate.mk -include $(TOP)/mk/test.mk diff --git a/testsuite/tests/dph/words/WordsVect.hs b/testsuite/tests/dph/words/WordsVect.hs deleted file mode 100644 index 218e885dac..0000000000 --- a/testsuite/tests/dph/words/WordsVect.hs +++ /dev/null @@ -1,125 +0,0 @@ - --- Break up a string into words in parallel. --- Based on the presentation "Breaking Sequential Habits of Thought", Guy Steele. --- http://groups.csail.mit.edu/mac/users/gjs/6.945/readings/MITApril2009Steele.pdf --- --- NOTE: This is a naive implementation, and I haven't benchmarked it. --- Using parallel arrays in Seg probably isn't helpful for performance, --- but it's a stress test for the vectoriser. --- --- If we actually cared about performance we wouldn't want to recursively --- subdivide the string right down to individual characters. --- -{-# LANGUAGE ParallelArrays, ParallelListComp #-} -{-# OPTIONS -fvectorise #-} - -module WordsVect - ( wordsOfPArray - , wordCountOfPArray ) -where -import qualified Data.Array.Parallel.Prelude.Word8 as W -import Data.Array.Parallel.Prelude.Word8 (Word8) -import Data.Array.Parallel.Prelude.Int as I -import Data.Array.Parallel - -import qualified Prelude as Prel - - --- We can't use the Prelude Char and String types in vectorised code yet.. -type Char = Word8 -char_space = W.fromInt 32 - -type String = [: Char :] - - --- | Word state -data State - = Chunk String - | Seg String -- initial word chunk - [:String:] -- complete words in the middle of the segment - String -- final word chunk - - --- | Compose two wordstates. -plusState :: State -> State -> State -plusState str1 str2 - = case (str1, str2) of - (Chunk as, Chunk bs) -> Chunk (as +:+ bs) - (Chunk as, Seg bl bss br) -> Seg (as +:+ bl) bss br - (Seg al ass ar, Chunk bs) -> Seg al ass (ar +:+ bs) - (Seg al ass ar, Seg bl bss br) -> Seg al (ass +:+ joinEmpty [:ar +:+ bl:] +:+ bss) br - -joinEmpty :: [:[:Word8:]:] -> [:[:Word8:]:] -joinEmpty ws - | lengthP ws I.== 1 && lengthP (ws !: 0) I.== 0 = [::] - | otherwise = ws - - --- | Convert a single char to a wordstate. -stateOfChar :: Char -> State -stateOfChar c - | c W.== char_space = Seg [::] [::] [::] - | otherwise = Chunk [:c:] - - --- | Break this string into words. -stateOfString :: String -> State -stateOfString str - = let len = lengthP str - result - | len I.== 0 = Chunk [::] - | len I.== 1 = stateOfChar (str !: 0) - | otherwise - = let half = len `div` 2 - s1 = sliceP 0 half str - s2 = sliceP half (len I.- half) str - in plusState (stateOfString s1) (stateOfString s2) - in result - - --- | Count the number of words in a string. -countWordsOfState :: State -> Int -countWordsOfState state - = case state of - Chunk c -> wordsInChunkArr c - Seg c1 ws c2 -> wordsInChunkArr c1 I.+ lengthP ws I.+ wordsInChunkArr c2 - -wordsInChunkArr :: [:Word8:] -> Int -wordsInChunkArr arr - | lengthP arr I.== 0 = 0 - | otherwise = 1 - - --- | Flatten a state back to an array of Word8s, --- inserting spaces between the words. -flattenState :: State -> [:Word8:] -flattenState ss - = case ss of - Chunk s -> s - - Seg w1 ws w2 - -> w1 - +:+ [:char_space:] - +:+ concatP [: w +:+ [:char_space:] | w <- ws :] - +:+ w2 - --- Interface ------------------------------------------------------------------ - --- | Break up an array of chars into words then flatten it back. -wordsOfPArray :: PArray Word8 -> PArray Word8 -{-# NOINLINE wordsOfPArray #-} -wordsOfPArray arr - = let str = fromPArrayP arr - state = stateOfString str - strOut = flattenState state - in toPArrayP strOut - - --- | Count the number of words in an array -wordCountOfPArray :: PArray Word8 -> Int -{-# NOINLINE wordCountOfPArray #-} -wordCountOfPArray arr - = let str = fromPArrayP arr - state = stateOfString str - in countWordsOfState state - diff --git a/testsuite/tests/dph/words/dph-words-copy-fast.stdout b/testsuite/tests/dph/words/dph-words-copy-fast.stdout deleted file mode 100644 index a7ad9be6b6..0000000000 --- a/testsuite/tests/dph/words/dph-words-copy-fast.stdout +++ /dev/null @@ -1,3 +0,0 @@ -"When I look into the looking glass I'm always sure to see no matter how I dodge about, me looking back at me." -word count vect = 23 -word count lists = 23 diff --git a/testsuite/tests/dph/words/dph-words-copy-opt.stdout b/testsuite/tests/dph/words/dph-words-copy-opt.stdout deleted file mode 100644 index a7ad9be6b6..0000000000 --- a/testsuite/tests/dph/words/dph-words-copy-opt.stdout +++ /dev/null @@ -1,3 +0,0 @@ -"When I look into the looking glass I'm always sure to see no matter how I dodge about, me looking back at me." -word count vect = 23 -word count lists = 23 diff --git a/testsuite/tests/dph/words/dph-words-vseg-fast.stdout b/testsuite/tests/dph/words/dph-words-vseg-fast.stdout deleted file mode 100644 index a7ad9be6b6..0000000000 --- a/testsuite/tests/dph/words/dph-words-vseg-fast.stdout +++ /dev/null @@ -1,3 +0,0 @@ -"When I look into the looking glass I'm always sure to see no matter how I dodge about, me looking back at me." -word count vect = 23 -word count lists = 23 diff --git a/testsuite/tests/dph/words/dph-words-vseg-opt.stdout b/testsuite/tests/dph/words/dph-words-vseg-opt.stdout deleted file mode 100644 index a7ad9be6b6..0000000000 --- a/testsuite/tests/dph/words/dph-words-vseg-opt.stdout +++ /dev/null @@ -1,3 +0,0 @@ -"When I look into the looking glass I'm always sure to see no matter how I dodge about, me looking back at me." -word count vect = 23 -word count lists = 23 diff --git a/testsuite/tests/dph/words/dph-words.T b/testsuite/tests/dph/words/dph-words.T deleted file mode 100644 index 7173278914..0000000000 --- a/testsuite/tests/dph/words/dph-words.T +++ /dev/null @@ -1,20 +0,0 @@ - -test ('dph-words-copy-fast' - , [ outputdir('copy-fast') - , reqlib('dph-lifted-copy') - , reqlib('dph-prim-par') - , only_ways(['normal']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-copy -package dph-prim-par']) - - -test ('dph-words-vseg-fast' - , [ outputdir('vseg-fast') - , reqlib('dph-lifted-vseg') - , reqlib('dph-prim-par') - , only_ways(['normal']) ] - , multimod_compile_and_run - , [ 'Main' - , '-O0 -package dph-lifted-vseg -package dph-prim-par']) - |